unsigned int bytes;
unsigned int shift;
unsigned int location;
- float scale;
} mraa_iio_channel;
/**
printword(uint16_t input, mraa_iio_channel *chan)
{
int16_t res;
+
if (!chan->lendian) {
input = be16toh(input);
} else {
input = le16toh(input);
}
- // currently we don't treat scales
- chan->scale = 1.0f;
-
input >>= chan->shift;
input &= chan->mask;
if (chan->signedd) {
} else {
res = input;
}
- printf("chan %d == %05f\n", chan->index, ((float)res + chan->offset) * chan->scale);
+ printf(" value = %05f\n", chan->index, (float)res);
}
mraa_iio_context iio_device0;
int i = 0;
for (i; i < mraa_iio_get_channel_count(iio_device0); i++) {
- printf("channel bytes %d\n", channels[i].bytes);
- switch (channels[i].bytes) {
- case 2:
- printword(*(uint16_t *)(data + channels[i].location), &channels[i]);
+ if (channels[i].enabled) {
+ printf("channel %d - bytes %d\n", channels[i].index, channels[i].bytes);
+ switch (channels[i].bytes) {
+ case 2:
+ printword(*(uint16_t *)(data + channels[i].location), &channels[i]);
+ }
}
}
- printf("data %s\n", (char*) data);
}
int
buf[(strlen(buf)-5)] = '\0';
char* str = strdup(buf);
+ // grab the type of the buffer
snprintf(buf, MAX_SIZE, "%stype", str);
fd = open(buf, O_RDONLY);
if (fd > 0) {
chan->location = curr_bytes - curr_bytes%chan->bytes + chan->bytes;
}
curr_bytes = chan->location + chan->bytes;
+ // probably should be 5?
if (ret < 0) {
- // probably should be 5?
+ // cleanup
+ free(str);
+ close(fd);
return MRAA_IO_SETUP_FAILURE;
}
chan->signedd = (signchar == 's');
} else {
chan->mask = (1 << chan->bits_used) - 1;
}
-
close(fd);
}
- // todo - read scale & _en attributes
+ // grab the enable flag of channel
+ snprintf(buf, MAX_SIZE, "%sen", str);
+ fd = open(buf, O_RDONLY);
+ if (fd > 0) {
+ if (read(fd, readbuf, 2 * sizeof(char)) != 2) {
+ syslog(LOG_ERR, "iio: Failed to read a sensible value from sysfs");
+ return -1;
+ }
+ chan->enabled = (int) strtol(readbuf, NULL, 10);
+ close(fd);
+ }
+ // clean up str var
+ free(str);
}
}
}
device->num = i;
snprintf(filepath, 64, "/sys/bus/iio/devices/iio:device%d/name", i);
fd = open(filepath, O_RDONLY);
- if (fd != -1) {
+ if (fd > 0) {
len = read(fd, &name, 64);
if (len > 1) {
// use strndup
device->name = malloc((sizeof(char) * len) + sizeof(char));
strncpy(device->name, name, len);
}
+ close(fd);
}
}