/* IIO - useful set of util functionality * * Copyright (c) 2008 Jonathan Cameron * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 as published by * the Free Software Foundation. */ #define IIO_EVENT_CODE_RING_50_FULL 200 #define IIO_EVENT_CODE_RING_75_FULL 201 #define IIO_EVENT_CODE_RING_100_FULL 202 struct iio_event_data { int id; __s64 timestamp; }; inline char *find_ring_subelement(const char *directory, const char *subelement) { DIR *dp; const struct dirent *ent; int pos; char temp[100]; char *returnstring; dp = opendir(directory); if (dp == NULL) { printf("could not directory: %s\n", directory); return NULL; } while (ent = readdir(dp), ent != NULL) { if (strcmp(ent->d_name, ".") != 0 && strcmp(ent->d_name, "..") != 0) { if (strncmp(ent->d_name, subelement, strlen(subelement)) == 0) { int length = sprintf(temp, "%s%s%s", directory, ent->d_name, "/"); returnstring = malloc(length+1); strncpy(returnstring, temp, length+1); return returnstring; } } } return 0; } char *find_type_by_name(const char *name, const char *type) { const char *iio_dir = "/sys/class/iio/"; const struct dirent *ent; int cnt, pos, pos2; FILE *nameFile; DIR *dp; char thisname[100]; char temp[100]; char *returnstring = NULL; struct stat Stat; pos = sprintf(temp, "%s", iio_dir); dp = opendir(iio_dir); if (dp == NULL) { printf("No industrialio devices available"); return NULL; } while (ent = readdir(dp), ent != NULL) { cnt++; /*reject . and .. */ if (strcmp(ent->d_name, ".") != 0 && strcmp(ent->d_name, "..") != 0) { /*make sure it isn't a trigger!*/ if (strncmp(ent->d_name, type, strlen(type)) == 0) { /* build full path to new file */ pos2 = pos + sprintf(temp + pos, "%s/", ent->d_name); sprintf(temp + pos2, "name"); printf("search location %s\n", temp); nameFile = fopen(temp, "r"); if (!nameFile) { sprintf(temp + pos2, "modalias", ent->d_name); nameFile = fopen(temp, "r"); if (!nameFile) { printf("Failed to find a name for device\n"); return NULL; } } fscanf(nameFile, "%s", thisname); if (strcmp(name, thisname) == 0) { returnstring = malloc(strlen(temp) + 1); sprintf(temp + pos2, ""); strcpy(returnstring, temp); return returnstring; } fclose(nameFile); } } } } int write_sysfs_int(char *filename, char *basedir, int val) { int ret; FILE *sysfsfp; char temp[100]; sprintf(temp, "%s%s", basedir, filename); sysfsfp = fopen(temp, "w"); if (sysfsfp == NULL) return -1; fprintf(sysfsfp, "%d", val); fclose(sysfsfp); return 0; } /** * write_sysfs_string_and_verify() - string write, readback and verify * @filename: name of file to write to * @basedir: the sysfs directory in which the file is to be found * @val: the string to write **/ int write_sysfs_string_and_verify(char *filename, char *basedir, char *val) { int ret; FILE *sysfsfp; char temp[100]; sprintf(temp, "%s%s", basedir, filename); sysfsfp = fopen(temp, "w"); if (sysfsfp == NULL) return -1; fprintf(sysfsfp, "%s", val); fclose(sysfsfp); sysfsfp = fopen(temp, "r"); if (sysfsfp == NULL) return -1; fscanf(sysfsfp, "%s", temp); if (strcmp(temp, val) != 0) { printf("Possible failure in string write %s to %s%s \n", val, basedir, filename); return -1; } return 0; } int read_sysfs_posint(char *filename, char *basedir) { int ret; FILE *sysfsfp; char temp[100]; sprintf(temp, "%s%s", basedir, filename); sysfsfp = fopen(temp, "r"); if (sysfsfp == NULL) return -1; fscanf(sysfsfp, "%d\n", &ret); fclose(sysfsfp); return ret; }