1c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/* 2a73d574dda77810ae10046c68e7a9aa38ad77603Nick Vaccaro * Copyright (C) 2014 The Android Open Source Project 3c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * 4c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * Licensed under the Apache License, Version 2.0 (the "License"); 5c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * you may not use this file except in compliance with the License. 6c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * You may obtain a copy of the License at 7c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * 8c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * http://www.apache.org/licenses/LICENSE-2.0 9c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * 10c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * Unless required by applicable law or agreed to in writing, software 11c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * distributed under the License is distributed on an "AS IS" BASIS, 12c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * See the License for the specific language governing permissions and 14c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * limitations under the License. 15c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro */ 16c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 17c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define LOG_NDEBUG 0 18c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 19c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include <fcntl.h> 20c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include <errno.h> 21c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include <math.h> 22c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include <unistd.h> 23c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include <dirent.h> 24c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include <sys/select.h> 25c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include <cutils/log.h> 26c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include <linux/input.h> 27c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include <string.h> 28c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 29c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include "PressureSensor.IIO.secondary.h" 30c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include "sensors.h" 31c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include "MPLSupport.h" 32c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include "sensor_params.h" 33c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include "ml_sysfs_helper.h" 34c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 35c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#pragma message("HAL:build pressure sensor on Invensense MPU secondary bus") 36c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/* dynamically get this when driver supports it */ 37c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define CHIP_ID "BMP280" 38c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 39c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro//#define TIMER (1) 40c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define DEFAULT_POLL_TIME 300 41c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define PRESSURE_MAX_SYSFS_ATTRB sizeof(pressureSysFs) / sizeof(char*) 42c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 43c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarostatic int s_poll_time = -1; 44c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarostatic int min_poll_time = 50; 45c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarostatic struct timespec t_pre; 46c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 47c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/*****************************************************************************/ 48c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 49c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick VaccaroPressureSensor::PressureSensor(const char *sysfs_path) 50c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro : SensorBase(NULL, NULL), 51c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro pressure_fd(-1) 52c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro{ 53c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro VFUNC_LOG; 54c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 55c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro mSysfsPath = sysfs_path; 56c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro LOGV_IF(ENG_VERBOSE, "pressuresensor path: %s", mSysfsPath); 57c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if(inv_init_sysfs_attributes()) { 58c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro LOGE("Error Instantiating Pressure Sensor\n"); 59c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro return; 60c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } else { 61c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro LOGI_IF(PROCESS_VERBOSE, "HAL:Secondary Chip Id: %s", CHIP_ID); 62c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } 63c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro} 64c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 65c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick VaccaroPressureSensor::~PressureSensor() 66c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro{ 67c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro VFUNC_LOG; 68c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 69c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if( pressure_fd > 0) 70c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro close(pressure_fd); 71c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro} 72c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 73c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroint PressureSensor::getFd() const 74c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro{ 75c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro VHANDLER_LOG; 76c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro return pressure_fd; 77c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro} 78c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 79c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/** 80c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * @brief This function will enable/disable sensor. 81c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * @param[in] handle 82c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * which sensor to enable/disable. 83c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * @param[in] en 84c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * en=1, enable; 85c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * en=0, disable 86c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * @return if the operation is successful. 87c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro */ 88c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroint PressureSensor::enable(int32_t handle, int en) 89c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro{ 90c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro VFUNC_LOG; 91c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 92c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int res = 0; 93c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 94c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro LOGV_IF(SYSFS_VERBOSE, "HAL:sysfs:echo %d > %s (%lld)", 95c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro en, pressureSysFs.pressure_enable, getTimestamp()); 96c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro res = write_sysfs_int(pressureSysFs.pressure_enable, en); 97c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 98c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro return res; 99c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro} 100c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 101c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroint PressureSensor::setDelay(int32_t handle, int64_t ns) 102c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro{ 103c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro VFUNC_LOG; 104c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 105c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int res = 0; 106c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 107c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro mDelay = int(1000000000.f / ns); 108c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro LOGV_IF(SYSFS_VERBOSE, "HAL:sysfs:echo %lld > %s (%lld)", 109c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro mDelay, pressureSysFs.pressure_rate, getTimestamp()); 110c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro res = write_sysfs_int(pressureSysFs.pressure_rate, mDelay); 111c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 112c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#ifdef TIMER 113c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int t_poll_time = (int)(ns / 1000000LL); 114c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if (t_poll_time > min_poll_time) { 115c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro s_poll_time = t_poll_time; 116c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } else { 117c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro s_poll_time = min_poll_time; 118c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } 119c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro LOGV_IF(PROCESS_VERBOSE, 120c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro "HAL:setDelay : %llu ns, (%.2f Hz)", ns, 1000000000.f/ns); 121c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#endif 122c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro return res; 123c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro} 124c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 125c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 126c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/** 127c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro @brief This function will return the state of the sensor. 128c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro @return 1=enabled; 0=disabled 129c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro**/ 130c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroint PressureSensor::getEnable(int32_t handle) 131c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro{ 132c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro VFUNC_LOG; 133c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro return mEnable; 134c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro} 135c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 136c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/** 137c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * @brief This function will return the current delay for this sensor. 138c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * @return delay in nanoseconds. 139c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro */ 140c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroint64_t PressureSensor::getDelay(int32_t handle) 141c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro{ 142c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro VFUNC_LOG; 143c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 144c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#ifdef TIMER 145c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if (mEnable) { 146c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro return s_poll_time; 147c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } else { 148c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro return -1; 149c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } 150c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#endif 151c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro return mDelay; 152c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro} 153c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 154c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid PressureSensor::fillList(struct sensor_t *list) 155c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro{ 156c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro VFUNC_LOG; 157c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 158c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro const char *pressure = "BMP280"; 159c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 160c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if (pressure) { 161c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if(!strcmp(pressure, "BMP280")) { 162c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro list->maxRange = PRESSURE_BMP280_RANGE; 163c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro list->resolution = PRESSURE_BMP280_RESOLUTION; 164c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro list->power = PRESSURE_BMP280_POWER; 165c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro list->minDelay = PRESSURE_BMP280_MINDELAY; 166c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro mMinDelay = list->minDelay; 167c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro return; 168c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } 169c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } 170c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro LOGE("HAL:unknown pressure id %s -- " 171c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro "params default to bmp280 and might be wrong.", 172c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro pressure); 173c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro list->maxRange = PRESSURE_BMP280_RANGE; 174c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro list->resolution = PRESSURE_BMP280_RESOLUTION; 175c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro list->power = PRESSURE_BMP280_POWER; 176c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro list->minDelay = PRESSURE_BMP280_MINDELAY; 177c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro mMinDelay = list->minDelay; 178c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro return; 179c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro} 180c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 181c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroint PressureSensor::inv_init_sysfs_attributes(void) 182c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro{ 183c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro VFUNC_LOG; 184c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 185c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro pathP = (char*)malloc(sizeof(char[PRESSURE_MAX_SYSFS_ATTRB][MAX_SYSFS_NAME_LEN])); 186c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char *sptr = pathP; 187c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char **dptr = (char**)&pressureSysFs; 188c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if (sptr == NULL) 189c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro return -1; 190c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro unsigned char i = 0; 191c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro do { 192c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro *dptr++ = sptr; 193c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro memset(sptr, 0, sizeof(sptr)); 194c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro sptr += sizeof(char[MAX_SYSFS_NAME_LEN]); 195c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } while (++i < PRESSURE_MAX_SYSFS_ATTRB); 196c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 197c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro sprintf(pressureSysFs.pressure_enable, "%s%s", mSysfsPath, "/pressure_enable"); 198c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro sprintf(pressureSysFs.pressure_rate, "%s%s", mSysfsPath, "/pressure_rate"); 199c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro return 0; 200c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro} 201