int CompassSensor::inv_init_sysfs_attributes(void) { VFUNC_LOG; unsigned char i = 0; char sysfs_path[MAX_SYSFS_NAME_LEN]; char iio_trigger_path[MAX_SYSFS_NAME_LEN], tbuf[2]; char *sptr; char **dptr; int num; pathP = (char*)malloc( sizeof(char[COMPASS_MAX_SYSFS_ATTRB][MAX_SYSFS_NAME_LEN])); sptr = pathP; dptr = (char**)&compassSysFs; if (sptr == NULL) return -1; memset(sysfs_path, 0, sizeof(sysfs_path)); memset(iio_trigger_path, 0, sizeof(iio_trigger_path)); do { *dptr++ = sptr; memset(sptr, 0, sizeof(sptr)); sptr += sizeof(char[MAX_SYSFS_NAME_LEN]); } while (++i < COMPASS_MAX_SYSFS_ATTRB); // get proper (in absolute/relative) IIO path & build MPU's sysfs paths // inv_get_sysfs_abs_path(sysfs_path); inv_get_sysfs_path(sysfs_path); inv_get_iio_trigger_path(iio_trigger_path); #if defined COMPASS_AK8975 inv_get_input_number(dev_name, &num); tbuf[0] = num + 0x30; tbuf[1] = 0; sprintf(sysfs_path, "%s%s", "sys/class/input/input", tbuf); strcat(sysfs_path, "/ak8975"); sprintf(compassSysFs.compass_enable, "%s%s", sysfs_path, "/enable"); sprintf(compassSysFs.compass_rate, "%s%s", sysfs_path, "/rate"); sprintf(compassSysFs.compass_scale, "%s%s", sysfs_path, "/scale"); sprintf(compassSysFs.compass_orient, "%s%s", sysfs_path, "/compass_matrix"); #else sprintf(compassSysFs.compass_enable, "%s%s", sysfs_path, "/compass_enable"); sprintf(compassSysFs.compass_fifo_enable, "%s%s", sysfs_path, "/compass_fifo_enable"); sprintf(compassSysFs.compass_rate, "%s%s", sysfs_path, "/compass_rate"); sprintf(compassSysFs.compass_scale, "%s%s", sysfs_path, "/in_magn_scale"); sprintf(compassSysFs.compass_orient, "%s%s", sysfs_path, "/compass_matrix"); #endif #if 0 // test print sysfs paths dptr = (char**)&compassSysFs; for (i = 0; i < COMPASS_MAX_SYSFS_ATTRB; i++) { LOGE("HAL:sysfs path: %s", *dptr++); } #endif return 0; }
int CompassSensor::inv_init_sysfs_attributes(void) { VFUNC_LOG; unsigned char i = 0; char sysfs_path[MAX_SYSFS_NAME_LEN], tbuf[2]; char *sptr; char **dptr; int num; const char* compass = dev_full_name; pathP = (char*)malloc( sizeof(char[COMPASS_MAX_SYSFS_ATTRB][MAX_SYSFS_NAME_LEN])); sptr = pathP; dptr = (char**)&compassSysFs; if (sptr == NULL) return -1; do { *dptr++ = sptr; sptr += sizeof(char[MAX_SYSFS_NAME_LEN]); } while (++i < COMPASS_MAX_SYSFS_ATTRB); // get proper (in absolute/relative) IIO path & build sysfs paths sprintf(sysfs_path, "%s%d", "/sys/bus/iio/devices/iio:device", find_type_by_name(compass, "iio:device")); #if defined COMPASS_AK8975 inv_get_input_number(compass, &num); tbuf[0] = num + 0x30; tbuf[1] = 0; sprintf(sysfs_path, "%s%s", "sys/class/input/input", tbuf); strcat(sysfs_path, "/ak8975"); sprintf(compassSysFs.compass_enable, "%s%s", sysfs_path, "/enable"); sprintf(compassSysFs.compass_rate, "%s%s", sysfs_path, "/rate"); sprintf(compassSysFs.compass_scale, "%s%s", sysfs_path, "/scale"); sprintf(compassSysFs.compass_orient, "%s%s", sysfs_path, "/compass_matrix"); #else /* IIO */ sprintf(compassSysFs.chip_enable, "%s%s", sysfs_path, "/buffer/enable"); sprintf(compassSysFs.in_timestamp_en, "%s%s", sysfs_path, "/scan_elements/in_timestamp_en"); sprintf(compassSysFs.buffer_length, "%s%s", sysfs_path, "/buffer/length"); sprintf(compassSysFs.compass_x_fifo_enable, "%s%s", sysfs_path, "/scan_elements/in_magn_x_en"); sprintf(compassSysFs.compass_y_fifo_enable, "%s%s", sysfs_path, "/scan_elements/in_magn_y_en"); sprintf(compassSysFs.compass_z_fifo_enable, "%s%s", sysfs_path, "/scan_elements/in_magn_z_en"); sprintf(compassSysFs.compass_rate, "%s%s", sysfs_path, "/sampling_frequency"); sprintf(compassSysFs.compass_scale, "%s%s", sysfs_path, "/in_magn_scale"); sprintf(compassSysFs.compass_orient, "%s%s", sysfs_path, "/compass_matrix"); if(mYasCompass) { sprintf(compassSysFs.compass_attr_1, "%s%s", sysfs_path, "/overunderflow"); } #endif #if 0 // test print sysfs paths dptr = (char**)&compassSysFs; LOGI("sysfs path base: %s", sysfs_path); for (i = 0; i < COMPASS_MAX_SYSFS_ATTRB; i++) { LOGE("HAL:sysfs path: %s", *dptr++); } #endif return 0; }