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