CompassSensor.IIO.primary.cpp revision a73d574dda77810ae10046c68e7a9aa38ad77603
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 "CompassSensor.IIO.primary.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#define COMPASS_MAX_SYSFS_ATTRB sizeof(compassSysFs) / sizeof(char*) 36c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define COMPASS_NAME "USE_SYSFS" 37c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 38c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#if defined COMPASS_AK8975 39c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#pragma message("HAL:build Invensense compass cal with AK8975 on primary bus") 40c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define USE_MPL_COMPASS_HAL (1) 41c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define COMPASS_NAME "INV_AK8975" 42c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#endif 43c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 44c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/******************************************************************************/ 45c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 46c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick VaccaroCompassSensor::CompassSensor() 47c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro : SensorBase(COMPASS_NAME, NULL), 48c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro mCompassTimestamp(0), 49c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro mCompassInputReader(8), 50c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro mCoilsResetFd(0) 51c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro{ 52c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro FILE *fptr; 53c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 54c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro VFUNC_LOG; 55c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 56c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro mYasCompass = false; 57c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if(!strcmp(dev_name, "USE_SYSFS")) { 58c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char sensor_name[20]; 59c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro find_name_by_sensor_type("in_magn_x_raw", "iio:device", sensor_name); 60c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro strncpy(dev_full_name, sensor_name, 61c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro sizeof(dev_full_name) / sizeof(dev_full_name[0])); 62c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if(!strncmp(dev_full_name, "yas", 3)) { 63c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro mYasCompass = true; 64c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } 65c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } else { 66c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 67c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#ifdef COMPASS_YAS53x 68c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro /* for YAS53x compasses, dev_name is just a prefix, 69c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro we need to find the actual name */ 70c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if (fill_dev_full_name_by_prefix(dev_name, 71c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro dev_full_name, sizeof(dev_full_name) / sizeof(dev_full_name[0]))) { 72c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro LOGE("Cannot find Yamaha device with prefix name '%s' - " 73c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro "magnetometer will likely not work.", dev_name); 74c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } else { 75c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro mYasCompass = true; 76c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } 77c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#else 78c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro strncpy(dev_full_name, dev_name, 79c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro sizeof(dev_full_name) / sizeof(dev_full_name[0])); 80c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#endif 81c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 82c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro} 83c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 84c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if (inv_init_sysfs_attributes()) { 85c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro LOGE("Error Instantiating Compass\n"); 86c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro return; 87c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } 88c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 89c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if (!strcmp(dev_full_name, "INV_COMPASS")) { 90c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro mI2CBus = COMPASS_BUS_SECONDARY; 91c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } else { 92c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro mI2CBus = COMPASS_BUS_PRIMARY; 93c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } 94c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 95c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro memset(mCachedCompassData, 0, sizeof(mCachedCompassData)); 96c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 97c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if (!isIntegrated()) { 98c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro enable(ID_M, 0); 99c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } 100c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 101c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro LOGV_IF(SYSFS_VERBOSE, "HAL:compass name: %s", dev_full_name); 102c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro enable_iio_sysfs(); 103c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 104c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro LOGV_IF(SYSFS_VERBOSE, "HAL:sysfs:cat %s (%lld)", 105c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro compassSysFs.compass_orient, getTimestamp()); 106c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro fptr = fopen(compassSysFs.compass_orient, "r"); 107c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if (fptr != NULL) { 108c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int om[9]; 109c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if (fscanf(fptr, "%d,%d,%d,%d,%d,%d,%d,%d,%d", 110c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro &om[0], &om[1], &om[2], &om[3], &om[4], &om[5], 111c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro &om[6], &om[7], &om[8]) < 0 || fclose(fptr)) { 112c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro LOGE("HAL:could not read compass mounting matrix"); 113c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } else { 114c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 115c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro LOGV_IF(EXTRA_VERBOSE, 116c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro "HAL:compass mounting matrix: " 117c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro "%+d %+d %+d %+d %+d %+d %+d %+d %+d", 118c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro om[0], om[1], om[2], om[3], om[4], om[5], om[6], om[7], om[8]); 119c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 120c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro mCompassOrientation[0] = om[0]; 121c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro mCompassOrientation[1] = om[1]; 122c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro mCompassOrientation[2] = om[2]; 123c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro mCompassOrientation[3] = om[3]; 124c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro mCompassOrientation[4] = om[4]; 125c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro mCompassOrientation[5] = om[5]; 126c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro mCompassOrientation[6] = om[6]; 127c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro mCompassOrientation[7] = om[7]; 128c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro mCompassOrientation[8] = om[8]; 129c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } 130c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } 131c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 132c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if(mYasCompass) { 133c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro mCoilsResetFd = fopen(compassSysFs.compass_attr_1, "r+"); 134c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if (fptr == NULL) { 135c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro LOGE("HAL:Could not open compass overunderflow"); 136c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } 137c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } 138c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro} 139c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 140c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid CompassSensor::enable_iio_sysfs() 141c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro{ 142c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro VFUNC_LOG; 143c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 144c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int tempFd = 0; 145c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char iio_device_node[MAX_CHIP_ID_LEN]; 146c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro FILE *tempFp = NULL; 147c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro const char* compass = dev_full_name; 148c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 149c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro LOGV_IF(SYSFS_VERBOSE, "HAL:sysfs:echo %d > %s (%lld)", 150c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 1, compassSysFs.in_timestamp_en, getTimestamp()); 151c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro write_sysfs_int(compassSysFs.in_timestamp_en, 1); 152c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 153c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro LOGV_IF(SYSFS_VERBOSE, "HAL:sysfs:echo %d > %s (%lld)", 154c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro IIO_BUFFER_LENGTH, compassSysFs.buffer_length, getTimestamp()); 155c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro tempFp = fopen(compassSysFs.buffer_length, "w"); 156c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if (tempFp == NULL) { 157c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro LOGE("HAL:could not open buffer length"); 158c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } else { 159c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if (fprintf(tempFp, "%d", IIO_BUFFER_LENGTH) < 0 || fclose(tempFp) < 0) { 160c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro LOGE("HAL:could not write buffer length"); 161c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } 162c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } 163c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 164c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro sprintf(iio_device_node, "%s%d", "/dev/iio:device", 165c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro find_type_by_name(compass, "iio:device")); 166c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro compass_fd = open(iio_device_node, O_RDONLY); 167c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int res = errno; 168c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if (compass_fd < 0) { 169c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro LOGE("HAL:could not open '%s' iio device node in path '%s' - " 170c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro "error '%s' (%d)", 171c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro compass, iio_device_node, strerror(res), res); 172c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } else { 173c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro LOGV_IF(EXTRA_VERBOSE, 174c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro "HAL:iio %s, compass_fd opened : %d", compass, compass_fd); 175c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } 176c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 177c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro /* TODO: need further tests for optimization to reduce context-switch 178c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro LOGV_IF(SYSFS_VERBOSE, "HAL:sysfs:echo 1 > %s (%lld)", 179c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro compassSysFs.compass_x_fifo_enable, getTimestamp()); 180c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro tempFd = open(compassSysFs.compass_x_fifo_enable, O_RDWR); 181c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro res = errno; 182c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if (tempFd > 0) { 183c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro res = enable_sysfs_sensor(tempFd, 1); 184c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } else { 185c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro LOGE("HAL:open of %s failed with '%s' (%d)", 186c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro compassSysFs.compass_x_fifo_enable, strerror(res), res); 187c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } 188c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 189c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro LOGV_IF(SYSFS_VERBOSE, "HAL:sysfs:echo 1 > %s (%lld)", 190c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro compassSysFs.compass_y_fifo_enable, getTimestamp()); 191c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro tempFd = open(compassSysFs.compass_y_fifo_enable, O_RDWR); 192c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro res = errno; 193c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if (tempFd > 0) { 194c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro res = enable_sysfs_sensor(tempFd, 1); 195c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } else { 196c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro LOGE("HAL:open of %s failed with '%s' (%d)", 197c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro compassSysFs.compass_y_fifo_enable, strerror(res), res); 198c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } 199c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 200c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro LOGV_IF(SYSFS_VERBOSE, "HAL:sysfs:echo 1 > %s (%lld)", 201c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro compassSysFs.compass_z_fifo_enable, getTimestamp()); 202c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro tempFd = open(compassSysFs.compass_z_fifo_enable, O_RDWR); 203c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro res = errno; 204c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if (tempFd > 0) { 205c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro res = enable_sysfs_sensor(tempFd, 1); 206c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } else { 207c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro LOGE("HAL:open of %s failed with '%s' (%d)", 208c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro compassSysFs.compass_z_fifo_enable, strerror(res), res); 209c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } 210c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro */ 211c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro} 212c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 213c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick VaccaroCompassSensor::~CompassSensor() 214c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro{ 215c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro VFUNC_LOG; 216c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 217c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro free(pathP); 218c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if( compass_fd > 0) 219c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro close(compass_fd); 220c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if(mYasCompass) { 221c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if( mCoilsResetFd != NULL ) 222c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro fclose(mCoilsResetFd); 223c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } 224c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro} 225c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 226c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroint CompassSensor::getFd(void) const 227c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro{ 228c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro VHANDLER_LOG; 229c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro LOGI_IF(0, "HAL:compass_fd=%d", compass_fd); 230c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro return compass_fd; 231c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro} 232c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 233c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/** 234c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * @brief This function will enable/disable sensor. 235c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * @param[in] handle 236c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * which sensor to enable/disable. 237c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * @param[in] en 238c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * en=1, enable; 239c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * en=0, disable 240c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * @return if the operation is successful. 241c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro */ 242c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroint CompassSensor::enable(int32_t handle, int en) 243c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro{ 244c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro VFUNC_LOG; 245c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 246c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro mEnable = en; 247c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int tempFd; 248c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int res = 0; 249c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 250c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro /* reset master enable */ 251c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro res = masterEnable(0); 252c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if (res < 0) { 253c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro return res; 254c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } 255c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 256c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if (en) { 257c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro LOGV_IF(SYSFS_VERBOSE, "HAL:sysfs:echo %d > %s (%lld)", 258c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro en, compassSysFs.compass_x_fifo_enable, getTimestamp()); 259c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro res = write_sysfs_int(compassSysFs.compass_x_fifo_enable, en); 260c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro LOGV_IF(SYSFS_VERBOSE, "HAL:sysfs:echo %d > %s (%lld)", 261c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro en, compassSysFs.compass_y_fifo_enable, getTimestamp()); 262c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro res += write_sysfs_int(compassSysFs.compass_y_fifo_enable, en); 263c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro LOGV_IF(SYSFS_VERBOSE, "HAL:sysfs:echo %d > %s (%lld)", 264c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro en, compassSysFs.compass_z_fifo_enable, getTimestamp()); 265c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro res += write_sysfs_int(compassSysFs.compass_z_fifo_enable, en); 266c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 267c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro res = masterEnable(en); 268c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if (res < en) { 269c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro return res; 270c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } 271c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } 272c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 273c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro return res; 274c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro} 275c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 276c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroint CompassSensor::masterEnable(int en) 277c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro{ 278c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro VFUNC_LOG; 279c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro LOGV_IF(SYSFS_VERBOSE, "HAL:sysfs:echo %d > %s (%lld)", 280c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro en, compassSysFs.chip_enable, getTimestamp()); 281c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro return write_sysfs_int(compassSysFs.chip_enable, en); 282c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro} 283c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 284c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroint CompassSensor::setDelay(int32_t handle, int64_t ns) 285c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro{ 286c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro VFUNC_LOG; 287c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int tempFd; 288c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int res; 289c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 290c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro mDelay = ns; 291c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if (ns == 0) 292c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro return -1; 293c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro tempFd = open(compassSysFs.compass_rate, O_RDWR); 294c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro LOGV_IF(SYSFS_VERBOSE, "HAL:sysfs:echo %.0f > %s (%lld)", 295c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 1000000000.f / ns, compassSysFs.compass_rate, getTimestamp()); 296c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro res = write_attribute_sensor(tempFd, 1000000000.f / ns); 297c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if(res < 0) { 298c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro LOGE("HAL:Compass update delay error"); 299c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } 300c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro return res; 301c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro} 302c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 303c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/** 304c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro @brief This function will return the state of the sensor. 305c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro @return 1=enabled; 0=disabled 306c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro**/ 307c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroint CompassSensor::getEnable(int32_t handle) 308c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro{ 309c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro VFUNC_LOG; 310c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro return mEnable; 311c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro} 312c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 313c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/* use for Invensense compass calibration */ 314c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define COMPASS_EVENT_DEBUG (0) 315c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid CompassSensor::processCompassEvent(const input_event *event) 316c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro{ 317c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro VHANDLER_LOG; 318c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 319c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro switch (event->code) { 320c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro case EVENT_TYPE_ICOMPASS_X: 321c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro LOGV_IF(COMPASS_EVENT_DEBUG, "EVENT_TYPE_ICOMPASS_X\n"); 322c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro mCachedCompassData[0] = event->value; 323c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro break; 324c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro case EVENT_TYPE_ICOMPASS_Y: 325c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro LOGV_IF(COMPASS_EVENT_DEBUG, "EVENT_TYPE_ICOMPASS_Y\n"); 326c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro mCachedCompassData[1] = event->value; 327c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro break; 328c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro case EVENT_TYPE_ICOMPASS_Z: 329c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro LOGV_IF(COMPASS_EVENT_DEBUG, "EVENT_TYPE_ICOMPASS_Z\n"); 330c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro mCachedCompassData[2] = event->value; 331c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro break; 332c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } 333c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 334c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro mCompassTimestamp = 335c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro (int64_t)event->time.tv_sec * 1000000000L + event->time.tv_usec * 1000L; 336c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro} 337c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 338c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid CompassSensor::getOrientationMatrix(signed char *orient) 339c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro{ 340c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro VFUNC_LOG; 341c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro memcpy(orient, mCompassOrientation, sizeof(mCompassOrientation)); 342c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro} 343c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 344c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarolong CompassSensor::getSensitivity() 345c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro{ 346c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro VFUNC_LOG; 347c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 348c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro long sensitivity; 349c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro LOGV_IF(SYSFS_VERBOSE, "HAL:sysfs:cat %s (%lld)", 350c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro compassSysFs.compass_scale, getTimestamp()); 351c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro inv_read_data(compassSysFs.compass_scale, &sensitivity); 352c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro return sensitivity; 353c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro} 354c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 355c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/** 356c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro @brief This function is called by sensors_mpl.cpp 357c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro to read sensor data from the driver. 358c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro @param[out] data sensor data is stored in this variable. Scaled such that 359c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 1 uT = 2^16 360c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro @para[in] timestamp data's timestamp 361c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro @return 1, if 1 sample read, 0, if not, negative if error 362c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro */ 363c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroint CompassSensor::readSample(long *data, int64_t *timestamp) { 364c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro VFUNC_LOG; 365c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 366c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int i; 367c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char *rdata = mIIOBuffer; 368c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 369c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro size_t rsize = read(compass_fd, rdata, (8 * mEnable + 8) * 1); 370c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 371c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if (!mEnable) { 372c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro rsize = read(compass_fd, rdata, (8 + 8) * IIO_BUFFER_LENGTH); 373c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro // LOGI("clear buffer with size: %d", rsize); 374c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } 375c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/* 376c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro LOGI("get one sample of AMI IIO data with size: %d", rsize); 377c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro LOGI_IF(mEnable, "compass x/y/z: %d/%d/%d", *((short *) (rdata + 0)), 378c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro *((short *) (rdata + 2)), *((short *) (rdata + 4))); 379c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro*/ 380c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if (mEnable) { 381c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro for (i = 0; i < 3; i++) { 382c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro data[i] = *((short *) (rdata + i * 2)); 383c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } 384c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro *timestamp = *((long long *) (rdata + 8 * mEnable)); 385c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } 386c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 387c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro return mEnable; 388c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro} 389c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 390c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/** 391c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * @brief This function will return the current delay for this sensor. 392c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * @return delay in nanoseconds. 393c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro */ 394c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroint64_t CompassSensor::getDelay(int32_t handle) 395c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro{ 396c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro VFUNC_LOG; 397c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro return mDelay; 398c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro} 399c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 400c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid CompassSensor::fillList(struct sensor_t *list) 401c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro{ 402c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro VFUNC_LOG; 403c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 404c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro const char *compass = dev_full_name; 405c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 406c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if (compass) { 407c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if(!strcmp(compass, "INV_COMPASS")) { 408c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro list->maxRange = COMPASS_MPU9150_RANGE; 409c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro list->resolution = COMPASS_MPU9150_RESOLUTION; 410c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro list->power = COMPASS_MPU9150_POWER; 411c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro list->minDelay = COMPASS_MPU9150_MINDELAY; 412c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro mMinDelay = list->minDelay; 413c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro return; 414c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } 415c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if(!strcmp(compass, "compass") 416c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro || !strcmp(compass, "INV_AK8975") 417a73d574dda77810ae10046c68e7a9aa38ad77603Nick Vaccaro || !strcmp(compass, "AKM8975") 418a73d574dda77810ae10046c68e7a9aa38ad77603Nick Vaccaro || !strcmp(compass, "akm8975")) { 419c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro list->maxRange = COMPASS_AKM8975_RANGE; 420c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro list->resolution = COMPASS_AKM8975_RESOLUTION; 421c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro list->power = COMPASS_AKM8975_POWER; 422c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro list->minDelay = COMPASS_AKM8975_MINDELAY; 423c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro mMinDelay = list->minDelay; 424c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro return; 425c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } 426c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if(!strcmp(compass, "compass") 427c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro || !strcmp(compass, "INV_AK8963") 428a73d574dda77810ae10046c68e7a9aa38ad77603Nick Vaccaro || !strcmp(compass, "AKM8963") 429a73d574dda77810ae10046c68e7a9aa38ad77603Nick Vaccaro || !strcmp(compass, "akm8963")) { 430c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro list->maxRange = COMPASS_AKM8963_RANGE; 431c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro list->resolution = COMPASS_AKM8963_RESOLUTION; 432c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro list->power = COMPASS_AKM8963_POWER; 433c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro list->minDelay = COMPASS_AKM8963_MINDELAY; 434c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro mMinDelay = list->minDelay; 435c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro return; 436c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } 437a73d574dda77810ae10046c68e7a9aa38ad77603Nick Vaccaro if(!strcmp(compass, "compass") 438a73d574dda77810ae10046c68e7a9aa38ad77603Nick Vaccaro || !strcmp(compass, "INV_AK09911") 439a73d574dda77810ae10046c68e7a9aa38ad77603Nick Vaccaro || !strcmp(compass, "AK09911") 440a73d574dda77810ae10046c68e7a9aa38ad77603Nick Vaccaro || !strcmp(compass, "ak09911")) { 441a73d574dda77810ae10046c68e7a9aa38ad77603Nick Vaccaro list->maxRange = COMPASS_AKM9911_RANGE; 442a73d574dda77810ae10046c68e7a9aa38ad77603Nick Vaccaro list->resolution = COMPASS_AKM9911_RESOLUTION; 443a73d574dda77810ae10046c68e7a9aa38ad77603Nick Vaccaro list->power = COMPASS_AKM9911_POWER; 444a73d574dda77810ae10046c68e7a9aa38ad77603Nick Vaccaro list->minDelay = COMPASS_AKM9911_MINDELAY; 445a73d574dda77810ae10046c68e7a9aa38ad77603Nick Vaccaro mMinDelay = list->minDelay; 446a73d574dda77810ae10046c68e7a9aa38ad77603Nick Vaccaro return; 447a73d574dda77810ae10046c68e7a9aa38ad77603Nick Vaccaro } 448c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if(!strcmp(compass, "ami306")) { 449c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro list->maxRange = COMPASS_AMI306_RANGE; 450c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro list->resolution = COMPASS_AMI306_RESOLUTION; 451c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro list->power = COMPASS_AMI306_POWER; 452c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro list->minDelay = COMPASS_AMI306_MINDELAY; 453c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro mMinDelay = list->minDelay; 454c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro return; 455c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } 456c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if(!strcmp(compass, "yas530") 457c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro || !strcmp(compass, "yas532") 458c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro || !strcmp(compass, "yas533")) { 459c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro list->maxRange = COMPASS_YAS53x_RANGE; 460c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro list->resolution = COMPASS_YAS53x_RESOLUTION; 461c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro list->power = COMPASS_YAS53x_POWER; 462c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro list->minDelay = COMPASS_YAS53x_MINDELAY; 463c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro mMinDelay = list->minDelay; 464c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro return; 465c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } 466c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } 467c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 468c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro LOGE("HAL:unknown compass id %s -- " 469c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro "params default to ak8975 and might be wrong.", 470c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro compass); 471c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro list->maxRange = COMPASS_AKM8975_RANGE; 472c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro list->resolution = COMPASS_AKM8975_RESOLUTION; 473c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro list->power = COMPASS_AKM8975_POWER; 474c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro list->minDelay = COMPASS_AKM8975_MINDELAY; 475c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro mMinDelay = list->minDelay; 476c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro} 477c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 478c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/* Read sysfs entry to determine whether overflow had happend 479c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro then write to sysfs to reset to zero */ 480c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroint CompassSensor::checkCoilsReset() 481c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro{ 482c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int result=-1; 483c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro VFUNC_LOG; 484c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 485c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if(mCoilsResetFd != NULL) { 486c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int attr; 487c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro rewind(mCoilsResetFd); 488c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro fscanf(mCoilsResetFd, "%d", &attr); 489c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if(attr == 0) 490c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro return 0; 491c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro else { 492c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro LOGV_IF(SYSFS_VERBOSE, "HAL:overflow detected"); 493c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro rewind(mCoilsResetFd); 494c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if(fprintf(mCoilsResetFd, "%d", 0) < 0) 495c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro LOGE("HAL:could not write overunderflow"); 496c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro else 497c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro return 1; 498c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } 499c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } else { 500c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro LOGE("HAL:could not read overunderflow"); 501c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } 502c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro return result; 503c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro} 504c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 505c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroint CompassSensor::inv_init_sysfs_attributes(void) 506c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro{ 507c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro VFUNC_LOG; 508c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 509c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro unsigned char i = 0; 510c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char sysfs_path[MAX_SYSFS_NAME_LEN], tbuf[2]; 511c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char *sptr; 512c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char **dptr; 513c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int num; 514c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro const char* compass = dev_full_name; 515c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 516c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro pathP = (char*)malloc( 517c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro sizeof(char[COMPASS_MAX_SYSFS_ATTRB][MAX_SYSFS_NAME_LEN])); 518c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro sptr = pathP; 519c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro dptr = (char**)&compassSysFs; 520c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if (sptr == NULL) 521c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro return -1; 522c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 523c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro do { 524c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro *dptr++ = sptr; 525c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro sptr += sizeof(char[MAX_SYSFS_NAME_LEN]); 526c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } while (++i < COMPASS_MAX_SYSFS_ATTRB); 527c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 528c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro // get proper (in absolute/relative) IIO path & build sysfs paths 529c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro sprintf(sysfs_path, "%s%d", "/sys/bus/iio/devices/iio:device", 530c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro find_type_by_name(compass, "iio:device")); 531c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 532c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#if defined COMPASS_AK8975 533c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro inv_get_input_number(compass, &num); 534c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro tbuf[0] = num + 0x30; 535c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro tbuf[1] = 0; 536c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro sprintf(sysfs_path, "%s%s", "sys/class/input/input", tbuf); 537c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro strcat(sysfs_path, "/ak8975"); 538c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 539c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro sprintf(compassSysFs.compass_enable, "%s%s", sysfs_path, "/enable"); 540c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro sprintf(compassSysFs.compass_rate, "%s%s", sysfs_path, "/rate"); 541c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro sprintf(compassSysFs.compass_scale, "%s%s", sysfs_path, "/scale"); 542c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro sprintf(compassSysFs.compass_orient, "%s%s", sysfs_path, "/compass_matrix"); 543c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#else /* IIO */ 544c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro sprintf(compassSysFs.chip_enable, "%s%s", sysfs_path, "/buffer/enable"); 545c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro sprintf(compassSysFs.in_timestamp_en, "%s%s", sysfs_path, "/scan_elements/in_timestamp_en"); 546c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro sprintf(compassSysFs.buffer_length, "%s%s", sysfs_path, "/buffer/length"); 547c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 548c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro sprintf(compassSysFs.compass_x_fifo_enable, "%s%s", sysfs_path, "/scan_elements/in_magn_x_en"); 549c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro sprintf(compassSysFs.compass_y_fifo_enable, "%s%s", sysfs_path, "/scan_elements/in_magn_y_en"); 550c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro sprintf(compassSysFs.compass_z_fifo_enable, "%s%s", sysfs_path, "/scan_elements/in_magn_z_en"); 551c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro sprintf(compassSysFs.compass_rate, "%s%s", sysfs_path, "/sampling_frequency"); 552c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro sprintf(compassSysFs.compass_scale, "%s%s", sysfs_path, "/in_magn_scale"); 553c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro sprintf(compassSysFs.compass_orient, "%s%s", sysfs_path, "/compass_matrix"); 554c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 555c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro if(mYasCompass) { 556c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro sprintf(compassSysFs.compass_attr_1, "%s%s", sysfs_path, "/overunderflow"); 557c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } 558c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#endif 559c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 560c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#if 0 561c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro // test print sysfs paths 562c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro dptr = (char**)&compassSysFs; 563c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro LOGI("sysfs path base: %s", sysfs_path); 564c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro for (i = 0; i < COMPASS_MAX_SYSFS_ATTRB; i++) { 565c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro LOGE("HAL:sysfs path: %s", *dptr++); 566c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } 567c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#endif 568c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro return 0; 569c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro} 570c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 571c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroint CompassSensor::isYasCompass(void) 572c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro{ 573c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro return mYasCompass; 574c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro} 575