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