1ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda/******************************************************************************
2ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda * $Id: AK8975Driver.h 580 2012-03-29 09:56:21Z yamada.rj $
3ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda ******************************************************************************
4ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda *
5ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda * Copyright (C) 2012 Asahi Kasei Microdevices Corporation, Japan
6ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda *
7ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda * Licensed under the Apache License, Version 2.0 (the "License");
8ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda * you may not use this file except in compliance with the License.
9ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda * You may obtain a copy of the License at
10ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda *
11ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda *      http://www.apache.org/licenses/LICENSE-2.0
12ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda *
13ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda * Unless required by applicable law or agreed to in writing, software
14ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda * distributed under the License is distributed on an "AS IS" BASIS,
15ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda * See the License for the specific language governing permissions and
17ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda * limitations under the License.
18ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda */
19ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda#ifndef AKMD_INC_AK8975DRIVER_H
20ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda#define AKMD_INC_AK8975DRIVER_H
21ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda
22ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda#include "platform/include/linux/akm8975.h"	/* Device driver */
23ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda#include <stdint.h>			/* int8_t, int16_t etc. */
24ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda
25ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda/*** Constant definition ******************************************************/
26ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda#define AKD_TRUE	1		/*!< Represents true */
27ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda#define AKD_FALSE	0		/*!< Represents false */
28ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda#define AKD_SUCCESS	1		/*!< Represents success.*/
29ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda#define AKD_FAIL	0		/*!< Represents fail. */
308486a35c06351c0a67bb44775f2d9bc0a70ebbc7Chih-Hung Hsieh#define AKD_ERROR	(-1)		/*!< Represents error. */
31ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda
32ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda/*! 0:Don't Output data, 1:Output data */
33ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda#define AKD_DBG_DATA	0
34ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda/*! Typical interval in ns */
35ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda#define AK8975_MEASUREMENT_TIME_NS	((AK8975_MEASUREMENT_TIME_US) * 1000)
36ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda/*! 720 LSG = 1G = 9.8 m/s2 */
37ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda#define LSG			720
38ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda
39ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda
40ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda/*** Type declaration *********************************************************/
41ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masudatypedef unsigned char BYTE;
42ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda
43ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda/*!
44ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda Open device driver.
45ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda This function opens device driver of acceleration sensor.
46ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda @return If this function succeeds, the return value is #AKD_SUCCESS. Otherwise
47ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda the return value is #AKD_FAIL.
48ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda */
49ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masudatypedef int16_t(*ACCFNC_INITDEVICE)(void);
50ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda
51ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda/*!
52ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda Close device driver.
53ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda This function closes device drivers of acceleration sensor.
54ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda */
55ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masudatypedef void(*ACCFNC_DEINITDEVICE)(void);
56ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda
57ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda/*!
58ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda Acquire acceleration data from acceleration sensor and convert it to Android
59ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda coordinate system.
60ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda @return If this function succeeds, the return value is #AKD_SUCCESS. Otherwise
61ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda the return value is #AKD_FAIL.
62ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda @param[out] data A acceleration data array. The coordinate system of the
63ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda acquired data follows the definition of Android. Unit is SmartCompass.
64ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda */
65ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masudatypedef int16_t(*ACCFNC_GETACCDATA)(short data[3]);
66ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda
67ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda
68ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda/*** Global variables *********************************************************/
69ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda
70ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda/*** Prototype of Function  ***************************************************/
71ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda
72ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masudaint16_t AKD_InitDevice(void);
73ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda
74ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masudavoid AKD_DeinitDevice(void);
75ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda
76ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masudaint16_t AKD_TxData(
77ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda	const BYTE address,
78ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda	const BYTE* data,
79ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda	const uint16_t numberOfBytesToWrite);
80ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda
81ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masudaint16_t AKD_RxData(
82ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda	const BYTE address,
83ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda	BYTE* data,
84ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda	const uint16_t numberOfBytesToRead);
85ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda
86ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masudaint16_t AKD_GetMagneticData(BYTE data[SENSOR_DATA_SIZE]);
87ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda
88ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masudavoid AKD_SetYPR(const int buf[YPR_DATA_SIZE]);
89ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda
90ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masudaint AKD_GetOpenStatus(int* status);
91ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda
92ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masudaint AKD_GetCloseStatus(int* status);
93ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda
94ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masudaint16_t AKD_SetMode(const BYTE mode);
95ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda
96ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masudaint16_t AKD_GetDelay(int64_t delay[AKM_NUM_SENSORS]);
97ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda
98ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masudaint16_t AKD_GetLayout(int16_t* layout);
99ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda
100ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masudaint16_t AKD_GetAccelerationData(int16_t data[3]);
101ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda
102ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda#endif /* AKMD_INC_AK8975DRIVER_H */
103ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda
104