mraa.c: Moved iio detection code into a function
Signed-off-by: Henry Bruce <henry.bruce@intel.com>
This commit is contained in:
committed by
Brendan Le Foll
parent
0049ba1378
commit
131021a629
74
src/mraa.c
74
src/mraa.c
@@ -152,37 +152,9 @@ mraa_init()
|
||||
}
|
||||
#endif
|
||||
|
||||
plat_iio = (mraa_iio_info_t*) calloc(1, sizeof(mraa_iio_info_t));
|
||||
// Now detect IIO devices, linux only
|
||||
// find how many iio devices we have if we haven't already
|
||||
if (num_iio_devices == 0) {
|
||||
if (nftw("/sys/bus/iio/devices", &mraa_count_iio_devices, 20, FTW_PHYS) == -1) {
|
||||
return MRAA_ERROR_UNSPECIFIED;
|
||||
}
|
||||
}
|
||||
char name[64], filepath[64];
|
||||
int fd, len, i;
|
||||
plat_iio->iio_device_count = num_iio_devices;
|
||||
plat_iio->iio_devices = calloc(num_iio_devices, sizeof(struct _iio));
|
||||
struct _iio* device;
|
||||
for (i=0; i < num_iio_devices; i++) {
|
||||
device = &plat_iio->iio_devices[i];
|
||||
device->num = i;
|
||||
snprintf(filepath, 64, "/sys/bus/iio/devices/iio:device%d/name", i);
|
||||
fd = open(filepath, O_RDONLY);
|
||||
if (fd > 0) {
|
||||
len = read(fd, &name, 64);
|
||||
if (len > 1) {
|
||||
// remove any trailing CR/LF symbols
|
||||
name[strcspn(name, "\r\n")] = '\0';
|
||||
len = strlen(name);
|
||||
// use strndup
|
||||
device->name = malloc((sizeof(char) * len) + sizeof(char));
|
||||
strncpy(device->name, name, len+1);
|
||||
}
|
||||
close(fd);
|
||||
}
|
||||
}
|
||||
mraa_result_t iio_result = mraa_iio_detect();
|
||||
if (iio_result != MRAA_SUCCESS)
|
||||
return iio_result;
|
||||
|
||||
syslog(LOG_NOTICE, "libmraa initialised for platform '%s' of type %d", mraa_get_platform_name(), mraa_get_platform_type());
|
||||
return MRAA_SUCCESS;
|
||||
@@ -226,6 +198,46 @@ mraa_set_priority(const unsigned int priority)
|
||||
return sched_setscheduler(0, SCHED_RR, &sched_s);
|
||||
}
|
||||
|
||||
|
||||
mraa_result_t
|
||||
mraa_iio_detect()
|
||||
{
|
||||
plat_iio = (mraa_iio_info_t*) calloc(1, sizeof(mraa_iio_info_t));
|
||||
plat_iio->iio_device_count = num_iio_devices;
|
||||
// Now detect IIO devices, linux only
|
||||
// find how many iio devices we have if we haven't already
|
||||
if (num_iio_devices == 0) {
|
||||
if (nftw("/sys/bus/iio/devices", &mraa_count_iio_devices, 20, FTW_PHYS) == -1) {
|
||||
return MRAA_ERROR_UNSPECIFIED;
|
||||
}
|
||||
}
|
||||
char name[64], filepath[64];
|
||||
int fd, len, i;
|
||||
plat_iio->iio_device_count = num_iio_devices;
|
||||
plat_iio->iio_devices = calloc(num_iio_devices, sizeof(struct _iio));
|
||||
struct _iio* device;
|
||||
for (i=0; i < num_iio_devices; i++) {
|
||||
device = &plat_iio->iio_devices[i];
|
||||
device->num = i;
|
||||
snprintf(filepath, 64, "/sys/bus/iio/devices/iio:device%d/name", i);
|
||||
fd = open(filepath, O_RDONLY);
|
||||
if (fd > 0) {
|
||||
len = read(fd, &name, 64);
|
||||
if (len > 1) {
|
||||
// remove any trailing CR/LF symbols
|
||||
name[strcspn(name, "\r\n")] = '\0';
|
||||
len = strlen(name);
|
||||
// use strndup
|
||||
device->name = malloc((sizeof(char) * len) + sizeof(char));
|
||||
strncpy(device->name, name, len+1);
|
||||
}
|
||||
close(fd);
|
||||
}
|
||||
}
|
||||
return MRAA_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
mraa_result_t
|
||||
mraa_setup_mux_mapped(mraa_pin_t meta)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user