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#ifndef COMPASS_SENSOR_H 18c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define COMPASS_SENSOR_H 19c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 20c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include <stdint.h> 21c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include <errno.h> 22c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include <sys/cdefs.h> 23c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include <sys/types.h> 24c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 25c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include "SensorBase.h" 26c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 27c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro// TODO: include 3rd-party compass vendor's header file 28c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro// p.s.: before using unified HAL, make sure 3rd-party compass 29c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro// solution's driver/HAL work well by themselves 30c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include "AkmSensor.h" 31c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 32c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/*****************************************************************************/ 33c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 34c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroclass CompassSensor : public SensorBase { 35c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 36c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroprotected: 37c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 38c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaropublic: 39c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro CompassSensor(); 40c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro virtual ~CompassSensor(); 41c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 42c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro // TODO: make sure either 3rd-party compass solution has following virtual 43c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro // functions, or SensorBase.cpp could provide equal functionalities 44c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro virtual int getFd() const; 45c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro virtual int getRawFd() {return 0;}; 46c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro virtual int enable(int32_t handle, int enabled); 47c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro virtual int setDelay(int32_t handle, int64_t ns); 48c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro virtual int getEnable(int32_t handle); 49c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro virtual int64_t getDelay(int32_t handle); 50c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro virtual int64_t getMinDelay() { return -1; } // stub 51c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 52c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro // TODO: unnecessary for MPL solution (override 3rd-party solution) 53c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro virtual int readEvents(sensors_event_t *data, int count) { return 0; } 54c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 55c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro // TODO: following four APIs need further implementation for MPL's 56c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro // reference (look into .cpp for detailed information, also refer to 57c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro // 3rd-party's readEvents() for relevant APIs) 58c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int readSample(long *data, int64_t *timestamp); 59c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int readRawSample(float *data, int64_t *timestamp); 60c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro void fillList(struct sensor_t *list); 61c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro void getOrientationMatrix(signed char *orient); 62c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int getAccuracy(); 63c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro virtual void getCompassBias(long *bias) {return;}; 64c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 65c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro // TODO: if 3rd-party provides calibrated compass data, just return 1 66c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int providesCalibration() { return 1; } 67c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 68c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro // TODO: hard-coded for 3rd-party's sensitivity transformation 69c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro long getSensitivity() { return (1L << 30); } 70c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 71c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro /* all 3rd pary solution have compasses on the primary bus, hence they 72c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro have no dependency on the MPU */ 73c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int isIntegrated() { return 0; } 74c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 75c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int checkCoilsReset(void) { return 0; }; 76c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int isYasCompass(void) { return 0; }; 77c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 78c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroprivate: 79c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro AkmSensor *mCompassSensor; 80c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro}; 81c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 82c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/*****************************************************************************/ 83c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 84c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#endif // COMPASS_SENSOR_H 85