12eed2d4028b5706e977b016e49b010ee5595e48aNick Vaccaro/* 22eed2d4028b5706e977b016e49b010ee5595e48aNick Vaccaro $License: 32eed2d4028b5706e977b016e49b010ee5595e48aNick Vaccaro Copyright (C) 2014 InvenSense Corporation, All Rights Reserved. 42eed2d4028b5706e977b016e49b010ee5595e48aNick Vaccaro $ 52eed2d4028b5706e977b016e49b010ee5595e48aNick Vaccaro */ 62eed2d4028b5706e977b016e49b010ee5595e48aNick Vaccaro 7c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#undef MPL_LOG_NDEBUG 8c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define MPL_LOG_NDEBUG 0 /* Use 0 to turn on MPL_LOGV output */ 9c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#undef MPL_LOG_TAG 10c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define MPL_LOG_TAG "MLLITE" 11c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 12c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include <string.h> 13c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include <stdio.h> 14c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include "ml_sysfs_helper.h" 15c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include <dirent.h> 16c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include <ctype.h> 17c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include "log.h" 18c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 19c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define MPU_SYSFS_ABS_PATH "/sys/class/invensense/mpu" 20c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 21c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroenum PROC_SYSFS_CMD { 22c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro CMD_GET_SYSFS_PATH, 23c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro CMD_GET_DMP_PATH, 24c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro CMD_GET_CHIP_NAME, 25c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro CMD_GET_SYSFS_KEY, 26c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro CMD_GET_TRIGGER_PATH, 27c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro CMD_GET_DEVICE_NODE 28c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro}; 29c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarostatic char sysfs_path[100]; 30c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarostatic char *chip_name[] = { 312eed2d4028b5706e977b016e49b010ee5595e48aNick Vaccaro "ITG3500", 322eed2d4028b5706e977b016e49b010ee5595e48aNick Vaccaro "MPU6050", 332eed2d4028b5706e977b016e49b010ee5595e48aNick Vaccaro "MPU9150", 342eed2d4028b5706e977b016e49b010ee5595e48aNick Vaccaro "MPU3050", 35c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro "MPU6500", 36c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro "MPU9250", 379b7ebb5143dd692c20fc9348ae999450133dad57Nick Vaccaro "MPU9255", 38c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro "MPU6XXX", 39c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro "MPU9350", 40c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro "MPU6515", 412eed2d4028b5706e977b016e49b010ee5595e48aNick Vaccaro "MPU6880", 42c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro}; 43c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarostatic int chip_ind; 44c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarostatic int initialized =0; 45c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarostatic int status = 0; 46c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarostatic int iio_initialized = 0; 47c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarostatic int iio_dev_num = 0; 48c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 49c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define IIO_MAX_NAME_LENGTH 30 50c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 51c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define FORMAT_SCAN_ELEMENTS_DIR "%s/scan_elements" 52c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define FORMAT_TYPE_FILE "%s_type" 53c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 54c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define CHIP_NUM ARRAY_SIZE(chip_name) 55c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 56c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarostatic const char *iio_dir = "/sys/bus/iio/devices/"; 57c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 58c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/** 59c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * find_type_by_name() - function to match top level types by name 60c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * @name: top level type instance name 61c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * @type: the type of top level instance being sort 62c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * 63c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * Typical types this is used for are device and trigger. 64c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro **/ 65c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroint find_type_by_name(const char *name, const char *type) 66c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro{ 67c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro const struct dirent *ent; 68c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int number, numstrlen; 69c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 70c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro FILE *nameFile; 71c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro DIR *dp; 72c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char thisname[IIO_MAX_NAME_LENGTH]; 73c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char *filename; 74c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 75c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro dp = opendir(iio_dir); 76c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if (dp == NULL) { 77c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro MPL_LOGE("No industrialio devices available"); 78c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro return -ENODEV; 79c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } 80c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 81c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro while (ent = readdir(dp), ent != NULL) { 82c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if (strcmp(ent->d_name, ".") != 0 && 83c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro strcmp(ent->d_name, "..") != 0 && 84c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro strlen(ent->d_name) > strlen(type) && 85c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro strncmp(ent->d_name, type, strlen(type)) == 0) { 86c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro numstrlen = sscanf(ent->d_name + strlen(type), 87c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro "%d", 88c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro &number); 89c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro /* verify the next character is not a colon */ 90c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if (strncmp(ent->d_name + strlen(type) + numstrlen, 91c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro ":", 92c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 1) != 0) { 93c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro filename = malloc(strlen(iio_dir) 94c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro + strlen(type) 95c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro + numstrlen 96c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro + 6); 97c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if (filename == NULL) 98c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro return -ENOMEM; 99c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro sprintf(filename, "%s%s%d/name", 100c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro iio_dir, 101c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro type, 102c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro number); 103c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro nameFile = fopen(filename, "r"); 104c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if (!nameFile) 105c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro continue; 106c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro free(filename); 107c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro fscanf(nameFile, "%s", thisname); 108c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if (strcmp(name, thisname) == 0) 109c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro return number; 110c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro fclose(nameFile); 111c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } 112c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } 113c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } 114c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro return -ENODEV; 115c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro} 116c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 117c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/* mode 0: search for which chip in the system and fill sysfs path 118c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro mode 1: return event number 119c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro */ 120c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarostatic int parsing_proc_input(int mode, char *name){ 121c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro const char input[] = "/proc/bus/input/devices"; 122c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char line[4096], d; 123c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char tmp[100]; 124c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro FILE *fp; 125c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int i, j, result, find_flag; 126c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int event_number = -1; 127c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int input_number = -1; 128c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 129c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if(NULL == (fp = fopen(input, "rt")) ){ 130c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro return -1; 131c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } 132c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro result = 1; 133c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro find_flag = 0; 134c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro while(result != 0 && find_flag < 2){ 135c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro i = 0; 136c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro d = 0; 137c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro memset(line, 0, 100); 1382eed2d4028b5706e977b016e49b010ee5595e48aNick Vaccaro while(d != '\n'){ 139c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro result = fread(&d, 1, 1, fp); 140c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if(result == 0){ 141c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro line[0] = 0; 142c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro break; 143c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } 1442eed2d4028b5706e977b016e49b010ee5595e48aNick Vaccaro sprintf(&line[i], "%c", d); 145c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro i ++; 146c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } 147c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if(line[0] == 'N'){ 148c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro i = 1; 149c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro while(line[i] != '"'){ 150c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro i++; 151c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } 152c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro i++; 153c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro j = 0; 154c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro find_flag = 0; 155c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if (mode == 0){ 156c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro while(j < CHIP_NUM){ 157c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if(!memcmp(&line[i], chip_name[j], strlen(chip_name[j]))){ 158c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro find_flag = 1; 159c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro chip_ind = j; 160c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } 161c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro j++; 162c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } 163c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } else if (mode != 0){ 164c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if(!memcmp(&line[i], name, strlen(name))){ 165c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro find_flag = 1; 166c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } 167c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } 1682eed2d4028b5706e977b016e49b010ee5595e48aNick Vaccaro } 169c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if(find_flag){ 170c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if(mode == 0){ 171c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if(line[0] == 'S'){ 172c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro memset(tmp, 0, 100); 173c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro i =1; 174c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro while(line[i] != '=') i++; 175c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro i++; 176c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro j = 0; 177c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro while(line[i] != '\n'){ 178c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro tmp[j] = line[i]; 179c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro i ++; j++; 1802eed2d4028b5706e977b016e49b010ee5595e48aNick Vaccaro } 181c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro sprintf(sysfs_path, "%s%s", "/sys", tmp); 182c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro find_flag++; 183c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } 184c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } else if(mode == 1){ 185c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if(line[0] == 'H') { 186c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro i = 2; 187c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro while(line[i] != '=') i++; 1882eed2d4028b5706e977b016e49b010ee5595e48aNick Vaccaro while(line[i] != 't') i++; 189c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro i++; 190c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro event_number = 0; 191c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro while(line[i] != '\n'){ 192c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if(line[i] >= '0' && line[i] <= '9') 193c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro event_number = event_number*10 + line[i]-0x30; 194c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro i ++; 195c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } 196c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro find_flag ++; 197c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } 198c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } else if (mode == 2) { 199c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if(line[0] == 'S'){ 200c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro memset(tmp, 0, 100); 201c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro i =1; 202c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro while(line[i] != '=') i++; 203c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro i++; 204c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro j = 0; 205c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro while(line[i] != '\n'){ 206c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro tmp[j] = line[i]; 207c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro i ++; j++; 208c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } 209c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro input_number = 0; 2102eed2d4028b5706e977b016e49b010ee5595e48aNick Vaccaro if(tmp[j-2] >= '0' && tmp[j-2] <= '9') 211c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro input_number += (tmp[j-2]-0x30)*10; 2122eed2d4028b5706e977b016e49b010ee5595e48aNick Vaccaro if(tmp[j-1] >= '0' && tmp[j-1] <= '9') 213c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro input_number += (tmp[j-1]-0x30); 214c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro find_flag++; 215c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } 216c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } 217c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } 218c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } 219c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro fclose(fp); 220c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if(find_flag == 0){ 221c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro return -1; 222c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } 223c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if(0 == mode) 224c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro status = 1; 225c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if (mode == 1) 226c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro return event_number; 227c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if (mode == 2) 228c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro return input_number; 229c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro return 0; 230c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 231c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro} 232c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarostatic void init_iio() { 233c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int i, j; 234c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char iio_chip[10]; 235c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int dev_num; 236c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro for(j=0; j< CHIP_NUM; j++) { 237c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro for (i=0; i<strlen(chip_name[j]); i++) { 238c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro iio_chip[i] = tolower(chip_name[j][i]); 239c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } 240c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro iio_chip[strlen(chip_name[j])] = '\0'; 241c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro dev_num = find_type_by_name(iio_chip, "iio:device"); 242c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if(dev_num >= 0) { 243c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro iio_initialized = 1; 244c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro iio_dev_num = dev_num; 245c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro chip_ind = j; 246c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } 247c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } 248c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro} 249c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 250c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarostatic int process_sysfs_request(enum PROC_SYSFS_CMD cmd, char *data) 251c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro{ 252c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char key_path[100]; 253c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro FILE *fp; 254c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int i, result; 255c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if(initialized == 0){ 256c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro parsing_proc_input(0, NULL); 257c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro initialized = 1; 258c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } 259c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if(initialized && status == 0) { 260c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro init_iio(); 261c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if (iio_initialized == 0) 262c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro return -1; 263c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } 264c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 265c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro memset(key_path, 0, 100); 266c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro switch(cmd){ 267c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro case CMD_GET_SYSFS_PATH: 268c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if (iio_initialized == 1) 269c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro sprintf(data, "/sys/bus/iio/devices/iio:device%d", iio_dev_num); 270c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro else 271c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro sprintf(data, "%s%s", sysfs_path, "/device/invensense/mpu"); 272c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro break; 273c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro case CMD_GET_DMP_PATH: 274c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if (iio_initialized == 1) 275c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro sprintf(data, "/sys/bus/iio/devices/iio:device%d/dmp_firmware", iio_dev_num); 276c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro else 277c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro sprintf(data, "%s%s", sysfs_path, "/device/invensense/mpu/dmp_firmware"); 278c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro break; 279c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro case CMD_GET_CHIP_NAME: 280c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro sprintf(data, "%s", chip_name[chip_ind]); 281c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro break; 282c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro case CMD_GET_TRIGGER_PATH: 283c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro sprintf(data, "/sys/bus/iio/devices/trigger%d", iio_dev_num); 284c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro break; 285c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro case CMD_GET_DEVICE_NODE: 286c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro sprintf(data, "/dev/iio:device%d", iio_dev_num); 287c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro break; 288c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro case CMD_GET_SYSFS_KEY: 289c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro memset(key_path, 0, 100); 290c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if (iio_initialized == 1) 291c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro sprintf(key_path, "/sys/bus/iio/devices/iio:device%d/key", iio_dev_num); 2922eed2d4028b5706e977b016e49b010ee5595e48aNick Vaccaro else 293c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro sprintf(key_path, "%s%s", sysfs_path, "/device/invensense/mpu/key"); 294c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 295c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if((fp = fopen(key_path, "rt")) == NULL) 296c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro return -1; 297c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro for(i=0;i<16;i++){ 298c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro fscanf(fp, "%02x", &result); 299c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro data[i] = (char)result; 300c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } 3012eed2d4028b5706e977b016e49b010ee5595e48aNick Vaccaro 302c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro fclose(fp); 303c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro break; 304c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro default: 305c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro break; 306c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } 307c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro return 0; 308c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro} 309c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 310c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroint find_name_by_sensor_type(const char *sensor_type, const char *type, char *sensor_name) 311c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro{ 312c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro const struct dirent *ent; 313c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int number, numstrlen; 314c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 315c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro FILE *nameFile; 316c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro DIR *dp; 317c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char *filename; 318c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 319c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro dp = opendir(iio_dir); 320c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if (dp == NULL) { 321c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro MPL_LOGE("No industrialio devices available"); 322c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro return -ENODEV; 323c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } 324c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 325c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro while (ent = readdir(dp), ent != NULL) { 326c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if (strcmp(ent->d_name, ".") != 0 && 327c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro strcmp(ent->d_name, "..") != 0 && 328c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro strlen(ent->d_name) > strlen(type) && 329c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro strncmp(ent->d_name, type, strlen(type)) == 0) { 330c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro numstrlen = sscanf(ent->d_name + strlen(type), 331c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro "%d", 332c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro &number); 333c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro /* verify the next character is not a colon */ 334c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if (strncmp(ent->d_name + strlen(type) + numstrlen, 335c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro ":", 336c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 1) != 0) { 337c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro filename = malloc(strlen(iio_dir) 338c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro + strlen(type) 339c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro + numstrlen 340c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro + 6 341c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro + strlen(sensor_type)); 342c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if (filename == NULL) 343c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro return -ENOMEM; 344c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro sprintf(filename, "%s%s%d/%s", 345c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro iio_dir, 346c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro type, 347c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro number, 348c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro sensor_type); 349c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro nameFile = fopen(filename, "r"); 350c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro MPL_LOGI("sensor type path: %s\n", filename); 351c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro free(filename); 352c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro //fscanf(nameFile, "%s", thisname); 353c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro //if (strcmp(name, thisname) == 0) { 354c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if(nameFile == NULL) { 355c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro MPL_LOGI("keeps searching"); 356c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro continue; 357c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } else{ 358c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro MPL_LOGI("found directory"); 359c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } 360c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro filename = malloc(strlen(iio_dir) 361c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro + strlen(type) 362c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro + numstrlen 363c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro + 6); 364c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro sprintf(filename, "%s%s%d/name", 365c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro iio_dir, 366c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro type, 367c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro number); 368c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro nameFile = fopen(filename, "r"); 369c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro MPL_LOGI("name path: %s\n", filename); 370c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro free(filename); 371c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if (!nameFile) 372c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro continue; 373c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro fscanf(nameFile, "%s", sensor_name); 374c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro MPL_LOGI("name found: %s now test for mpuxxxx", sensor_name); 3752eed2d4028b5706e977b016e49b010ee5595e48aNick Vaccaro if( !strncmp("mpu",sensor_name, 3) ) { 3762eed2d4028b5706e977b016e49b010ee5595e48aNick Vaccaro char secondaryFileName[200]; 377c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro sprintf(secondaryFileName, "%s%s%d/secondary_name", 378c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro iio_dir, 379c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro type, 380c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro number); 381c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro nameFile = fopen(secondaryFileName, "r"); 3822eed2d4028b5706e977b016e49b010ee5595e48aNick Vaccaro MPL_LOGI("name path: %s\n", secondaryFileName); 383c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if(!nameFile) 384c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro continue; 385c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro fscanf(nameFile, "%s", sensor_name); 386c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro MPL_LOGI("secondary name found: %s\n", sensor_name); 387c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } 388c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro else { 389c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro fscanf(nameFile, "%s", sensor_name); 390c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro MPL_LOGI("name found: %s\n", sensor_name); 391c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } 392c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro return 0; 393c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro //} 394c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro fclose(nameFile); 395c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } 396c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } 397c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } 398c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro return -ENODEV; 399c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro} 400c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 4012eed2d4028b5706e977b016e49b010ee5595e48aNick Vaccaro/** 402c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * @brief return sysfs key. if the key is not available 403c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * return false. So the return value must be checked 404c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * to make sure the path is valid. 405c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * @unsigned char *name: This should be array big enough to hold the key 406c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * It should be zeroed before calling this function. 407c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * Or it could have unpredicable result. 408c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro */ 409c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroinv_error_t inv_get_sysfs_key(unsigned char *key) 410c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro{ 411c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if (process_sysfs_request(CMD_GET_SYSFS_KEY, (char*)key) < 0) 412c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro return INV_ERROR_NOT_OPENED; 413c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro else 414c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro return INV_SUCCESS; 415c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro} 416c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 4172eed2d4028b5706e977b016e49b010ee5595e48aNick Vaccaro/** 4182eed2d4028b5706e977b016e49b010ee5595e48aNick Vaccaro * @brief return the sysfs path. If the path is not 419c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * found yet. return false. So the return value must be checked 420c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * to make sure the path is valid. 421c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * @unsigned char *name: This should be array big enough to hold the sysfs 422c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * path. It should be zeroed before calling this function. 423c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * Or it could have unpredicable result. 424c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro */ 425c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroinv_error_t inv_get_sysfs_path(char *name) 426c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro{ 427c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if (process_sysfs_request(CMD_GET_SYSFS_PATH, name) < 0) 428c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro return INV_ERROR_NOT_OPENED; 429c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro else 430c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro return INV_SUCCESS; 431c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro} 432c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 433c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroinv_error_t inv_get_sysfs_abs_path(char *name) 434c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro{ 435c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro strcpy(name, MPU_SYSFS_ABS_PATH); 436c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro return INV_SUCCESS; 437c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro} 438c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 4392eed2d4028b5706e977b016e49b010ee5595e48aNick Vaccaro/** 4402eed2d4028b5706e977b016e49b010ee5595e48aNick Vaccaro * @brief return the dmp file path. If the path is not 441c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * found yet. return false. So the return value must be checked 442c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * to make sure the path is valid. 443c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * @unsigned char *name: This should be array big enough to hold the dmp file 444c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * path. It should be zeroed before calling this function. 445c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * Or it could have unpredicable result. 446c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro */ 447c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroinv_error_t inv_get_dmpfile(char *name) 448c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro{ 449c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if (process_sysfs_request(CMD_GET_DMP_PATH, name) < 0) 450c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro return INV_ERROR_NOT_OPENED; 451c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro else 452c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro return INV_SUCCESS; 453c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro} 4542eed2d4028b5706e977b016e49b010ee5595e48aNick Vaccaro/** 4552eed2d4028b5706e977b016e49b010ee5595e48aNick Vaccaro * @brief return the chip name. If the chip is not 456c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * found yet. return false. So the return value must be checked 457c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * to make sure the path is valid. 458c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * @unsigned char *name: This should be array big enough to hold the chip name 459c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * path(8 bytes). It should be zeroed before calling this function. 460c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * Or it could have unpredicable result. 461c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro */ 462c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroinv_error_t inv_get_chip_name(char *name) 463c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro{ 464c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if (process_sysfs_request(CMD_GET_CHIP_NAME, name) < 0) 465c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro return INV_ERROR_NOT_OPENED; 466c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro else 467c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro return INV_SUCCESS; 468c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro} 4692eed2d4028b5706e977b016e49b010ee5595e48aNick Vaccaro/** 470c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * @brief return event handler number. If the handler number is not found 471c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * return false. the return value must be checked 472c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * to make sure the path is valid. 473c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * @unsigned char *name: This should be array big enough to hold the chip name 474c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * path(8 bytes). It should be zeroed before calling this function. 475c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * Or it could have unpredicable result. 476c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * @int *num: event number store 477c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro */ 478c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroinv_error_t inv_get_handler_number(const char *name, int *num) 479c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro{ 480c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro initialized = 0; 481c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if ((*num = parsing_proc_input(1, (char *)name)) < 0) 482c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro return INV_ERROR_NOT_OPENED; 483c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro else 4842eed2d4028b5706e977b016e49b010ee5595e48aNick Vaccaro return INV_SUCCESS; 485c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro} 486c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 4872eed2d4028b5706e977b016e49b010ee5595e48aNick Vaccaro/** 488c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * @brief return input number. If the handler number is not found 489c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * return false. the return value must be checked 490c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * to make sure the path is valid. 491c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * @unsigned char *name: This should be array big enough to hold the chip name 492c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * path(8 bytes). It should be zeroed before calling this function. 493c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * Or it could have unpredicable result. 494c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * @int *num: input number store 495c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro */ 496c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroinv_error_t inv_get_input_number(const char *name, int *num) 497c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro{ 498c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro initialized = 0; 499c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if ((*num = parsing_proc_input(2, (char *)name)) < 0) 500c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro return INV_ERROR_NOT_OPENED; 501c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro else { 502c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro return INV_SUCCESS; 5032eed2d4028b5706e977b016e49b010ee5595e48aNick Vaccaro } 504c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro} 505c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 5062eed2d4028b5706e977b016e49b010ee5595e48aNick Vaccaro/** 507c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * @brief return iio trigger name. If iio is not initialized, return false. 508c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * So the return must be checked to make sure the numeber is valid. 509c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * @unsigned char *name: This should be array big enough to hold the trigger 510c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * name. It should be zeroed before calling this function. 511c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * Or it could have unpredicable result. 512c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro */ 513c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroinv_error_t inv_get_iio_trigger_path(const char *name) 514c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro{ 515c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if (process_sysfs_request(CMD_GET_TRIGGER_PATH, (char *)name) < 0) 516c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro return INV_ERROR_NOT_OPENED; 517c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro else 518c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro return INV_SUCCESS; 519c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro} 520c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 5212eed2d4028b5706e977b016e49b010ee5595e48aNick Vaccaro/** 522c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * @brief return iio device node. If iio is not initialized, return false. 523c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * So the return must be checked to make sure the numeber is valid. 524c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * @unsigned char *name: This should be array big enough to hold the device 525c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * node. It should be zeroed before calling this function. 526c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * Or it could have unpredicable result. 527c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro */ 528c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroinv_error_t inv_get_iio_device_node(const char *name) 529c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro{ 530c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if (process_sysfs_request(CMD_GET_DEVICE_NODE, (char *)name) < 0) 531c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro return INV_ERROR_NOT_OPENED; 532c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro else 533c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro return INV_SUCCESS; 534c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro} 535