blob: 2a5b5f3227a8c75debf5aaa9c54f6e287907920d [file] [log] [blame]
/**
* Header file of the core driver API @file yas.h
*
* Copyright (c) 2013-2015 Yamaha Corporation
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would be
* appreciated but is not required.
* 2. Altered source versions must be plainly marked as such, and must not be
* misrepresented as being the original software.
* 3. This notice may not be removed or altered from any source distribution.
*/
#ifndef __YAS_H__
#define __YAS_H__
#include "yas_cfg.h"
#define YAS_VERSION "12.0.0" /*!< MS-x Driver Version */
#define DEV_NAME "yas539"
#define VENDOR_NAME "YAMAHA"
#define MODULE_NAME_MAG "magnetic_sensor"
/* ----------------------------------------------------------------------------
* Typedef definition
*--------------------------------------------------------------------------- */
#if defined(__KERNEL__)
#include <linux/types.h>
#else
#include <stdint.h>
/*typedef signed char int8_t;*/
/*typedef unsigned char uint8_t;*/
/*typedef signed short int16_t;*/
/*typedef unsigned short uint16_t;*/
/*typedef signed int int32_t;*/
/*typedef unsigned int uint32_t;*/
#endif
/* ----------------------------------------------------------------------------
* Macro definition
*--------------------------------------------------------------------------- */
#define YAS_DEBUG (0) /*!< Debug print (0:disabled,
1:enabled) */
#define YAS_NO_ERROR (0) /*!< Succeed */
#define YAS_ERROR_ARG (-1) /*!< Invalid argument */
#define YAS_ERROR_INITIALIZE (-2) /*!< Invalid initialization status
*/
#define YAS_ERROR_BUSY (-3) /*!< Sensor is busy */
#define YAS_ERROR_DEVICE_COMMUNICATION (-4) /*!< Device communication error */
#define YAS_ERROR_CHIP_ID (-5) /*!< Invalid chip id */
#define YAS_ERROR_CALREG (-6) /*!< Invalid CAL register */
#define YAS_ERROR_OVERFLOW (-7) /*!< Overflow occured */
#define YAS_ERROR_UNDERFLOW (-8) /*!< Underflow occured */
#define YAS_ERROR_DIRCALC (-9) /*!< Direction calcuration error */
#define YAS_ERROR_ERROR (-128) /*!< other error */
#ifndef NULL
#ifdef __cplusplus
#define NULL (0) /*!< NULL */
#else
#define NULL ((void *)(0)) /*!< NULL */
#endif
#endif
#ifndef NELEMS
#define NELEMS(a) ((int)(sizeof(a)/sizeof(a[0]))) /*!< Number of array
elements */
#endif
#ifndef ABS
#define ABS(a) ((a) > 0 ? (a) : -(a)) /*!< Absolute value */
#endif
#ifndef M_PI
#define M_PI (3.14159265358979323846) /*!< Math PI */
#endif
#ifndef CLIP
#define CLIP(in, min, max) \
((in) < (min) ? (min) : ((max) < (in) ? (max) : (in)))
#endif
#define HEADING_ERROR_UNSUPPORT (-1) /* milli-degree */
#define YAS_MATRIX_NORM (10000) /*!< Matrix normalize unit */
/* YAS_MATRIX_NORM_RECIP_BIT = SFIXED_RECIP_Q31(YAS_MATRIX_NORM,
* &YAS_MATRIX_NORM_RECIP) */
#define YAS_MATRIX_NORM_RECIP (0x68DB8BAC)
#define YAS_MATRIX_NORM_RECIP_BIT (18)
#define YAS_QUATERNION_NORM (10000) /*!< Quaternion normalize unit */
#if YAS_DEBUG
#ifdef __KERNEL__
#include <linux/kernel.h>
#define YLOGD(args) (printk args) /*!< Debug log (DEBUG) */
#define YLOGI(args) (printk args) /*!< Debug log (INFO) */
#define YLOGE(args) (printk args) /*!< Debug log (ERROR) */
#define YLOGW(args) (printk args) /*!< Debug log (WARNING) */
#elif defined __ANDROID__
#include <cutils/log.h>
#ifdef LOG_TAG
#undef LOG_TAG
#endif
#define LOG_TAG "yas"
#define YLOGD(args) (ALOGD args) /*!< Debug log (DEBUG) */
#define YLOGI(args) (ALOGI args) /*!< Debug log (INFO) */
#define YLOGE(args) (ALOGE args) /*!< Debug log (ERROR) */
#define YLOGW(args) (ALOGW args) /*!< Debug log (WARNING) */
#else /* __ANDROID__ */
#include <stdio.h>
#define YLOGD(args) (printf args) /*!< Debug log (DEBUG) */
#define YLOGI(args) (printf args) /*!< Debug log (INFO) */
#define YLOGE(args) (printf args) /*!< Debug log (ERROR) */
#define YLOGW(args) (printf args) /*!< Debug log (WARNING) */
#endif /* __ANDROID__ */
#else /* DEBUG */
#define YLOGD(args) /*!< Debug log (DEBUG) */
#define YLOGI(args) /*!< Debug log (INFO) */
#define YLOGW(args) /*!< Debug log (ERROR) */
#define YLOGE(args) /*!< Debug log (WARNING) */
#endif /* DEBUG */
#define YAS_TYPE_ACC (0x00000001)
#define YAS_TYPE_MAG (0x00000002)
#define YAS_TYPE_GYRO (0x00000004)
#define YAS_COMBO_ACC_NONE (0x00000010) /*!< No Acceleration */
#define YAS_COMBO_MAG_NONE (0x00000020) /*!< No Magnetometer */
#define YAS_COMBO_GYRO_NONE (0x00000040) /*!< No Gyroscope */
#define YAS_COMBO_A_ACC (0x00000100) /*!< 3-axis Acceleration */
#define YAS_COMBO_M_MAG (0x00000200) /*!< 3-axis Magnetometer */
#define YAS_COMBO_G_GYRO (0x00000400) /*!< 3-axis Gyroscope */
#define YAS_COMBO_AM_ACC (0x00100000) /*!< 6-axis (Acc+Mag)
Acceleration */
#define YAS_COMBO_AM_MAG (0x00200000) /*!< 6-axis (Acc+Mag)
Magnetometer */
#define YAS_COMBO_AG_ACC (0x01000000) /*!< 6-axis (Acc+Gyro)
Acceleration */
#define YAS_COMBO_AG_GYRO (0x02000000) /*!< 6-axis (Acc+Gyro)
Gyroscope */
#define YAS_COMBO_AMG_ACC (0x10000000) /*!< 9-axis (Acc+Gyro+Mag)
Acceleration */
#define YAS_COMBO_AMG_MAG (0x20000000) /*!< 9-axis (Acc+Gyro+Mag)
Magnetometer */
#define YAS_COMBO_AMG_GYRO (0x40000000) /*!< 9-axis (Acc+Gyro+Mag)
Gyroscope */
#if YAS_ACC_DRIVER == YAS_ACC_DRIVER_NONE
#define YAS_COMBO_ACC YAS_COMBO_ACC_NONE
#elif YAS_ACC_DRIVER == YAS_ACC_DRIVER_ADXL345
#define YAS_COMBO_ACC YAS_COMBO_A_ACC
#elif YAS_ACC_DRIVER == YAS_ACC_DRIVER_ADXL346
#define YAS_COMBO_ACC YAS_COMBO_A_ACC
#elif YAS_ACC_DRIVER == YAS_ACC_DRIVER_BMA150
#define YAS_COMBO_ACC YAS_COMBO_A_ACC
#elif YAS_ACC_DRIVER == YAS_ACC_DRIVER_BMA222
#define YAS_COMBO_ACC YAS_COMBO_A_ACC
#elif YAS_ACC_DRIVER == YAS_ACC_DRIVER_BMA222E
#define YAS_COMBO_ACC YAS_COMBO_A_ACC
#elif YAS_ACC_DRIVER == YAS_ACC_DRIVER_BMA250
#define YAS_COMBO_ACC YAS_COMBO_A_ACC
#elif YAS_ACC_DRIVER == YAS_ACC_DRIVER_BMA250E
#define YAS_COMBO_ACC YAS_COMBO_A_ACC
#elif YAS_ACC_DRIVER == YAS_ACC_DRIVER_BMA254
#define YAS_COMBO_ACC YAS_COMBO_A_ACC
#elif YAS_ACC_DRIVER == YAS_ACC_DRIVER_BMA255
#define YAS_COMBO_ACC YAS_COMBO_A_ACC
#elif YAS_ACC_DRIVER == YAS_ACC_DRIVER_BMI055
#define YAS_COMBO_ACC YAS_COMBO_A_ACC
#elif YAS_ACC_DRIVER == YAS_ACC_DRIVER_BMI058
#define YAS_COMBO_ACC YAS_COMBO_A_ACC
#elif YAS_ACC_DRIVER == YAS_ACC_DRIVER_DMARD08
#define YAS_COMBO_ACC YAS_COMBO_A_ACC
#elif YAS_ACC_DRIVER == YAS_ACC_DRIVER_KXSD9
#define YAS_COMBO_ACC YAS_COMBO_A_ACC
#elif YAS_ACC_DRIVER == YAS_ACC_DRIVER_KXTE9
#define YAS_COMBO_ACC YAS_COMBO_A_ACC
#elif YAS_ACC_DRIVER == YAS_ACC_DRIVER_KXTF9
#define YAS_COMBO_ACC YAS_COMBO_A_ACC
#elif YAS_ACC_DRIVER == YAS_ACC_DRIVER_KXTI9
#define YAS_COMBO_ACC YAS_COMBO_A_ACC
#elif YAS_ACC_DRIVER == YAS_ACC_DRIVER_KXTJ2
#define YAS_COMBO_ACC YAS_COMBO_A_ACC
#elif YAS_ACC_DRIVER == YAS_ACC_DRIVER_KXUD9
#define YAS_COMBO_ACC YAS_COMBO_A_ACC
#elif YAS_ACC_DRIVER == YAS_ACC_DRIVER_LIS331DL
#define YAS_COMBO_ACC YAS_COMBO_A_ACC
#elif YAS_ACC_DRIVER == YAS_ACC_DRIVER_LIS331DLH
#define YAS_COMBO_ACC YAS_COMBO_A_ACC
#elif YAS_ACC_DRIVER == YAS_ACC_DRIVER_LIS331DLM
#define YAS_COMBO_ACC YAS_COMBO_A_ACC
#elif YAS_ACC_DRIVER == YAS_ACC_DRIVER_LIS3DH
#define YAS_COMBO_ACC YAS_COMBO_A_ACC
#elif YAS_ACC_DRIVER == YAS_ACC_DRIVER_LSM330DLC
#define YAS_COMBO_ACC YAS_COMBO_A_ACC
#elif YAS_ACC_DRIVER == YAS_ACC_DRIVER_LSM6DS3
#define YAS_COMBO_ACC YAS_COMBO_AG_ACC
#elif YAS_ACC_DRIVER == YAS_ACC_DRIVER_MMA8452Q
#define YAS_COMBO_ACC YAS_COMBO_A_ACC
#elif YAS_ACC_DRIVER == YAS_ACC_DRIVER_MMA8453Q
#define YAS_COMBO_ACC YAS_COMBO_A_ACC
#elif YAS_ACC_DRIVER == YAS_ACC_DRIVER_STK8313
#define YAS_COMBO_ACC YAS_COMBO_A_ACC
#elif YAS_ACC_DRIVER == YAS_ACC_DRIVER_U2DH
#define YAS_COMBO_ACC YAS_COMBO_A_ACC
#elif YAS_ACC_DRIVER == YAS_ACC_DRIVER_YAS535
#define YAS_COMBO_ACC YAS_COMBO_AM_ACC
#elif YAS_ACC_DRIVER == YAS_ACC_DRIVER_YAS53x
#define YAS_COMBO_ACC YAS_COMBO_AMG_ACC
#endif
#if YAS_MAG_DRIVER == YAS_MAG_DRIVER_NONE
#define YAS_COMBO_MAG YAS_COMBO_MAG_NONE
#elif YAS_MAG_DRIVER == YAS_MAG_DRIVER_YAS529 /* MS-3C */
#define YAS_COMBO_MAG YAS_COMBO_M_MAG
#elif YAS_MAG_DRIVER == YAS_MAG_DRIVER_YAS530 /* MS-3E */
#define YAS_COMBO_MAG YAS_COMBO_M_MAG
#elif YAS_MAG_DRIVER == YAS_MAG_DRIVER_YAS532 /* MS-3R */
#define YAS_COMBO_MAG YAS_COMBO_M_MAG
#elif YAS_MAG_DRIVER == YAS_MAG_DRIVER_YAS533 /* MS-3F */
#define YAS_COMBO_MAG YAS_COMBO_M_MAG
#elif YAS_MAG_DRIVER == YAS_MAG_DRIVER_YAS535 /* MS-6C */
#define YAS_COMBO_MAG YAS_COMBO_AM_MAG
#elif YAS_MAG_DRIVER == YAS_MAG_DRIVER_YAS536 /* MS-3W */
#define YAS_COMBO_MAG YAS_COMBO_M_MAG
#elif YAS_MAG_DRIVER == YAS_MAG_DRIVER_YAS537 /* MS-3T */
#define YAS_COMBO_MAG YAS_COMBO_M_MAG
#elif YAS_MAG_DRIVER == YAS_MAG_DRIVER_YAS539 /* MS-3S */
#define YAS_COMBO_MAG YAS_COMBO_M_MAG
#elif YAS_MAG_DRIVER == YAS_MAG_DRIVER_YAS53x
#define YAS_COMBO_MAG YAS_COMBO_AMG_MAG
#endif
#if YAS_GYRO_DRIVER == YAS_GYRO_DRIVER_NONE
#define YAS_COMBO_GYRO YAS_COMBO_GYRO_NONE
#elif YAS_GYRO_DRIVER == YAS_GYRO_DRIVER_BMG160
#define YAS_COMBO_GYRO YAS_COMBO_G_GYRO
#elif YAS_GYRO_DRIVER == YAS_GYRO_DRIVER_BMI055
#define YAS_COMBO_GYRO YAS_COMBO_G_GYRO
#elif YAS_GYRO_DRIVER == YAS_GYRO_DRIVER_BMI058
#define YAS_COMBO_GYRO YAS_COMBO_G_GYRO
#elif YAS_GYRO_DRIVER == YAS_GYRO_DRIVER_EWTZMU
#define YAS_COMBO_GYRO YAS_COMBO_G_GYRO
#elif YAS_GYRO_DRIVER == YAS_GYRO_DRIVER_ITG3200
#define YAS_COMBO_GYRO YAS_COMBO_G_GYRO
#elif YAS_GYRO_DRIVER == YAS_GYRO_DRIVER_ITG3500
#define YAS_COMBO_GYRO YAS_COMBO_G_GYRO
#elif YAS_GYRO_DRIVER == YAS_GYRO_DRIVER_L3G3200D
#define YAS_COMBO_GYRO YAS_COMBO_G_GYRO
#elif YAS_GYRO_DRIVER == YAS_GYRO_DRIVER_L3G4200D
#define YAS_COMBO_GYRO YAS_COMBO_G_GYRO
#elif YAS_GYRO_DRIVER == YAS_GYRO_DRIVER_LSM330DLC
#define YAS_COMBO_GYRO YAS_COMBO_G_GYRO
#elif YAS_GYRO_DRIVER == YAS_GYRO_DRIVER_LSM6DS3
#define YAS_COMBO_GYRO YAS_COMBO_AG_GYRO
#elif YAS_GYRO_DRIVER == YAS_GYRO_DRIVER_MPU3050
#define YAS_COMBO_GYRO YAS_COMBO_G_GYRO
#elif YAS_GYRO_DRIVER == YAS_GYRO_DRIVER_YAS53x
#define YAS_COMBO_GYRO YAS_COMBO_AMG_GYRO
#endif
/* ----------------------------------------------------------------------------
* Geomagnetic Calibration Configuration
*--------------------------------------------------------------------------- */
/*! Geomagnetic calibration mode: spherical only */
#define YAS_MAG_CALIB_MODE_SPHERE (0)
/*! Geomagnetic calibration mode: ellipsoidal only */
#define YAS_MAG_CALIB_MODE_ELLIPSOID (1)
/*! Geomagnetic calibration mode: spherical with gyroscope */
#define YAS_MAG_CALIB_MODE_SPHERE_WITH_GYRO (2)
/*! Geomagnetic calibration mode: ellisoldal with gyroscope */
#define YAS_MAG_CALIB_MODE_ELLIPSOID_WITH_GYRO (3)
/*! Geomagnetic calibration mode: gyroscope only */
#define YAS_MAG_CALIB_MODE_WITH_GYRO (4)
/* ----------------------------------------------------------------------------
* Extension Command Definition
*--------------------------------------------------------------------------- */
/*! YAS530 extension command: self test */
#define YAS530_SELF_TEST (0x00000001)
/*! YAS530 extension command: self test noise */
#define YAS530_SELF_TEST_NOISE (0x00000002)
/*! YAS530 extension command: obtains the hardware offset */
#define YAS530_GET_HW_OFFSET (0x00000003)
/*! YAS530 extension command: sets the hardware offset */
#define YAS530_SET_HW_OFFSET (0x00000004)
/*! YAS530 extension command: obtains last raw data (x, y1, y2, t) */
#define YAS530_GET_LAST_RAWDATA (0x00000006)
/*! YAS530 extension command: obtains the ellipsoidal correction matrix */
#define YAS530_GET_STATIC_MATRIX (0x00000007)
/*! YAS530 extension command: sets the ellipsoidal correction matrix */
#define YAS530_SET_STATIC_MATRIX (0x00000008)
/*! YAS532 extension command: self test */
#define YAS532_SELF_TEST (0x00000001)
/*! YAS532 extension command: self test noise */
#define YAS532_SELF_TEST_NOISE (0x00000002)
/*! YAS532 extension command: obtains the hardware offset */
#define YAS532_GET_HW_OFFSET (0x00000003)
/*! YAS532 extension command: sets the hardware offset */
#define YAS532_SET_HW_OFFSET (0x00000004)
/*! YAS532 extension command: obtains last raw data (x, y1, y2, t) */
#define YAS532_GET_LAST_RAWDATA (0x00000006)
/*! YAS532 extension command: sets the interrupt enable */
#define YAS532_SET_INTERRUPT_ENABLE (0x00000007)
/*! YAS532 extension command: sets the interrupt active HIGH */
#define YAS532_SET_INTERRUPT_ACTIVE_HIGH (0x00000008)
/*! YAS532 extension command: obtains the ellipsoidal correction matrix */
#define YAS532_GET_STATIC_MATRIX (0x00000009)
/*! YAS532 extension command: sets the ellipsoidal correction matrix */
#define YAS532_SET_STATIC_MATRIX (0x0000000a)
/*! YAS535 extension command: obtains last raw data (xy1y2[3] t xyz[3]) */
#define YAS535_GET_LAST_RAWDATA (0x00000001)
/*! YAS535 extension command: self test for magnetometer */
#define YAS535_MAG_SELF_TEST (0x00000002)
/*! YAS535 extension command: self test noise for magnetometer */
#define YAS535_MAG_SELF_TEST_NOISE (0x00000003)
/*! YAS535 extension command: obtains the hardware offset */
#define YAS535_MAG_GET_HW_OFFSET (0x00000004)
/*! YAS535 extension command: sets the hardware offset */
#define YAS535_MAG_SET_HW_OFFSET (0x00000005)
/*! YAS535 extension command: obtains the average samples for magnetometer */
#define YAS535_MAG_GET_AVERAGE_SAMPLE (0x00000006)
/*! YAS535 extension command: sets the average samples for magnetometer */
#define YAS535_MAG_SET_AVERAGE_SAMPLE (0x00000007)
/*! YAS535 extension command: self test for accelerometer */
#define YAS535_ACC_SELF_TEST (0x00010000)
/*! YAS535 extension command: obtains the average samples for accelerometer */
#define YAS535_ACC_GET_AVERAGE_SAMPLE (0x00020000)
/*! YAS535 extension command: sets the average samples for accelerometer */
#define YAS535_ACC_SET_AVERAGE_SAMPLE (0x00040000)
/*! YAS536 extension command: self test */
#define YAS536_SELF_TEST (0x00000001)
/*! YAS536 extension command: obtains the hardware offset */
#define YAS536_GET_HW_OFFSET (0x00000002)
/*! YAS536 extension command: obtains the average filter length */
#define YAS536_GET_AVERAGE_LEN (0x00000004)
/*! YAS536 extension command: sets the average filter length */
#define YAS536_SET_AVERAGE_LEN (0x00000005)
/*! YAS536 extension command: obtains last raw data (x, y1, y2, t) */
#define YAS536_GET_LAST_RAWDATA (0x00000006)
/*! YAS537 extension command: self test */
#define YAS537_SELF_TEST (0x00000001)
/*! YAS537 extension command: self test noise */
#define YAS537_SELF_TEST_NOISE (0x00000002)
/*! YAS537 extension command: obtains last raw data (x, y1, y2, t) */
#define YAS537_GET_LAST_RAWDATA (0x00000003)
/*! YAS537 extension command: obtains the average samples */
#define YAS537_GET_AVERAGE_SAMPLE (0x00000004)
/*! YAS537 extension command: sets the average samples */
#define YAS537_SET_AVERAGE_SAMPLE (0x00000005)
/*! YAS537 extension command: obtains the hardware offset */
#define YAS537_GET_HW_OFFSET (0x00000006)
/*! YAS537 extension command: obtains the ellipsoidal correction matrix */
#define YAS537_GET_STATIC_MATRIX (0x00000007)
/*! YAS537 extension command: sets the ellipsoidal correction matrix */
#define YAS537_SET_STATIC_MATRIX (0x00000008)
/*! YAS537 extension command: obtains the overflow and underflow threshold */
#define YAS537_GET_OUFLOW_THRESH (0x00000009)
/*! YAS539 extension command: self test */
#define YAS539_SELF_TEST (0x00000001)
/*! YAS539 extension command: self test noise */
#define YAS539_SELF_TEST_NOISE (0x00000002)
/*! YAS539 extension command: obtains last raw data (x, y1, y2, t) */
#define YAS539_GET_LAST_RAWDATA (0x00000003)
/*! YAS539 extension command: obtains the average samples */
#define YAS539_GET_AVERAGE_SAMPLE (0x00000004)
/*! YAS539 extension command: sets the average samples */
#define YAS539_SET_AVERAGE_SAMPLE (0x00000005)
/*! YAS539 extension command: obtains the ellipsoidal correction matrix */
#define YAS539_GET_STATIC_MATRIX (0x00000006)
/*! YAS539 extension command: sets the ellipsoidal correction matrix */
#define YAS539_SET_STATIC_MATRIX (0x00000007)
/*! YAS539 extension command: obtains the overflow and underflow threshold */
#define YAS539_GET_OUFLOW_THRESH (0x00000008)
/* ----------------------------------------------------------------------------
* Structure definition
*--------------------------------------------------------------------------- */
/**
* @struct yas_vector
* @brief Stores the sensor data
*/
struct yas_vector {
int32_t v[3]; /*!< vector data */
};
/**
* @struct yas_quaternion
* @brief Stores the quaternion
*/
struct yas_quaternion {
int32_t q[4]; /*!< quaternion */
int32_t heading_error; /*!< heading error in mdegree,
-1 if unavailable */
};
/**
* @struct yas_matrix
* @brief Stores the matrix data
*/
struct yas_matrix {
int16_t m[9]; /*!< matrix data */
};
/**
* @struct yas_data
* @brief Stores the sensor data
*/
struct yas_data {
int32_t type; /*!< Sensor type */
struct yas_vector xyz; /*!< X, Y, Z measurement data of the sensor */
uint32_t timestamp; /*!< Measurement time */
uint8_t accuracy; /*!< Measurement data accuracy */
};
/**
* @struct yas_driver_callback
* @brief User-written callback functions specific to each implementation, such
* as communication controls with the device
*/
struct yas_driver_callback {
/**
* Open the device
* @param[in] type Sensor type
* @retval 0 Success
* @retval Negative Failure
*/
int (*device_open)(int32_t type);
/**
* Close the device
* @param[in] type Sensor type
* @retval 0 Success
* @retval Negative Failure
*/
int (*device_close)(int32_t type);
/**
* Send data to the device
* @param[in] type Sensor type
* @param[in] addr Register address
* @param[in] buf The pointer to the data buffer to be sent
* @param[in] len The length of the data buffer
* @retval 0 Success
* @retval Negative Failure
*/
int (*device_write)(int32_t type, uint8_t addr, const uint8_t *buf,
int len);
/**
* Receive data from the device
* @param[in] type Sensor type
* @param[in] addr Register address
* @param[out] buf The pointer to the data buffer to be received
* @param[in] len The length of the data buffer
* @retval 0 Success
* @retval Negative Failure
*/
int (*device_read)(int32_t type, uint8_t addr, uint8_t *buf, int len);
/**
* Sleep in micro-seconds
* @param[in] usec Sleep time in micro-seconds
*/
void (*usleep)(int usec);
/**
* Obtains the current time in milli-seconds
* @return The current time in milli-seconds
*/
uint32_t (*current_time)(void);
};
/**
* @struct yas_acc_driver
* @brief Acceleration sensor driver
*/
struct yas_acc_driver {
/**
* Initializes the sensor, starts communication with the device
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*init)(void);
/**
* Terminates the communications with the device
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*term)(void);
/**
* Obtains measurment period in milli-seconds
* @retval Non-Negatiev Measurement period in milli-seconds
* @retval Negative Failure
*/
int (*get_delay)(void);
/**
* Sets measurment period in milli-seconds
* @param[in] delay Measurement period in milli-seconds
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*set_delay)(int delay);
/**
* Reports the sensor status (Enabled or Disabled)
* @retval 0 Disabled
* @retval 1 Enabled
* @retval Negative Failure
*/
int (*get_enable)(void);
/**
* Enables or disables sensors
* @param[in] enable The status of the sensor (0: Disable, 1: Enable)
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*set_enable)(int enable);
/**
* Obtains the sensor position
* @retval 0-7 The position of the sensor
* @retval Negative Failure
*/
int (*get_position)(void);
/**
* Sets the sensor position
* @param[in] position The position of the sensor (0-7)
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*set_position)(int position);
/**
* Measures the sensor
* @param[out] raw Measured sensor data
* @param[in] num The number of the measured sensor data
* @retval Non-Negative The number of the measured sensor data
* @retval Negative Failure
*/
int (*measure)(struct yas_data *raw, int num);
/**
* Extension command execution specific to the part number
* @param[in] cmd Extension command id
* @param[out] result Extension command result
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*ext)(int32_t cmd, void *result);
struct yas_driver_callback callback; /*!< Callback functions */
};
/**
* @struct yas_mag_driver
* @brief Magnetic sensor driver
*/
struct yas_mag_driver {
/**
* Initializes the sensor, starts communication with the device
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*init)(void);
/**
* Terminates the communications with the device
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*term)(void);
/**
* Obtains measurment period in milli-seconds
* @retval Non-Negatiev Measurement period in milli-seconds
* @retval Negative Failure
*/
int (*get_delay)(void);
/**
* Sets measurment period in milli-seconds
* @param[in] delay Measurement period in milli-seconds
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*set_delay)(int delay);
/**
* Reports the sensor status (Enabled or Disabled)
* @retval 0 Disabled
* @retval 1 Enabled
* @retval Negative Failure
*/
int (*get_enable)(void);
/**
* Enables or disables sensors
* @param[in] enable The status of the sensor (0: Disable, 1: Enable)
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*set_enable)(int enable);
/**
* Obtains the sensor position
* @retval 0-7 The position of the sensor
* @retval Negative Failure
*/
int (*get_position)(void);
/**
* Sets the sensor position
* @param[in] position The position of the sensor (0-7)
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*set_position)(int position);
/**
* Measures the sensor
* @param[out] raw Measured sensor data
* @param[in] num The number of the measured sensor data
* @retval Non-Negative The number of the measured sensor data
* @retval Negative Failure
*/
int (*measure)(struct yas_data *raw, int num);
/**
* Extension command execution specific to the part number
* @param[in] cmd Extension command id
* @param[out] result Extension command result
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*ext)(int32_t cmd, void *result);
struct yas_driver_callback callback; /*!< Callback functions */
};
/**
* @struct yas_gyro_driver
* @brief Gyroscope sensor driver
*/
struct yas_gyro_driver {
/**
* Initializes the sensor, starts communication with the device
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*init)(void);
/**
* Terminates the communications with the device
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*term)(void);
/**
* Obtains measurment period in milli-seconds
* @retval Non-Negatiev Measurement period in milli-seconds
* @retval Negative Failure
*/
int (*get_delay)(void);
/**
* Sets measurment period in milli-seconds
* @param[in] delay Measurement period in milli-seconds
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*set_delay)(int delay);
/**
* Reports the sensor status (Enabled or Disabled)
* @retval 0 Disabled
* @retval 1 Enabled
* @retval Negative Failure
*/
int (*get_enable)(void);
/**
* Enables or disables sensors
* @param[in] enable The status of the sensor (0: Disable, 1: Enable)
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*set_enable)(int enable);
/**
* Obtains the sensor position
* @retval 0-7 The position of the sensor
* @retval Negative Failure
*/
int (*get_position)(void);
/**
* Sets the sensor position
* @param[in] position The position of the sensor (0-7)
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*set_position)(int position);
/**
* Measures the sensor
* @param[out] raw Measured sensor data
* @param[in] num The number of the measured sensor data
* @retval Non-Negative The number of the measured sensor data
* @retval Negative Failure
*/
int (*measure)(struct yas_data *raw, int num);
/**
* Extension command execution specific to the part number
* @param[in] cmd Extension command id
* @param[out] result Extension command result
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*ext)(int32_t cmd, void *result);
struct yas_driver_callback callback; /*!< Callback functions */
};
/**
* @struct yas_acc_mag_driver
* @brief Acceleration and geomagnetix sensor driver (6-axis).
*/
struct yas_acc_mag_driver {
/**
* Initializes the sensor, starts communication with the device
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*init)(void);
/**
* Terminates the communications with the device
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*term)(void);
/**
* Obtains measurment period in milli-seconds
* @param[in] type Sensor type
* @retval Non-Negatiev Measurement period in milli-seconds
* @retval Negative Failure
*/
int (*get_delay)(int32_t type);
/**
* Sets measurment period in milli-seconds
* @param[in] type Sensor type
* @param[in] delay Measurement period in milli-seconds
* @retval Non-Negative The bit or of the sensor type successfully
* delay changed.
* @retval Negative Failure
*/
int (*set_delay)(int32_t type, int delay);
/**
* Reports the sensor status (Enabled or Disabled)
* @param[in] type Sensor type
* @retval 0 Disabled
* @retval 1 Enabled
* @retval Negative Failure
*/
int (*get_enable)(int32_t type);
/**
* Enables or disables sensors
* @param[in] type Sensor type
* @param[in] enable The status of the sensor (0: Disable, 1: Enable)
* @retval Non-Negative The bit or of the sensor type successfully
* enabled/disabled.
* @retval Negative Failure
*/
int (*set_enable)(int32_t type, int enable);
/**
* Obtains the sensor position
* @retval 0-7 The position of the sensor
* @retval Negative Failure
*/
int (*get_position)(void);
/**
* Sets the sensor position
* @param[in] position The position of the sensor (0-7)
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*set_position)(int position);
/**
* Measures the sensor
* @param[in] type Sensor type
* @param[out] raw Measured sensor data
* @param[in] num The number of the measured sensor data
* @retval Non-Negative The number of the measured sensor data
* @retval Negative Failure
*/
int (*measure)(int32_t type, struct yas_data *raw, int num);
/**
* Extension command execution specific to the part number
* @param[in] cmd Extension command id
* @param[out] result Extension command result
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*ext)(int32_t cmd, void *result);
struct yas_driver_callback callback; /*!< Callback functions */
};
/**
* @struct yas_acc_gyro_driver
* @brief Acceleration and gyroscope sensor driver (6-axis).
*/
struct yas_acc_gyro_driver {
/**
* Initializes the sensor, starts communication with the device
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*init)(void);
/**
* Terminates the communications with the device
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*term)(void);
/**
* Obtains measurment period in milli-seconds
* @param[in] type Sensor type
* @retval Non-Negatiev Measurement period in milli-seconds
* @retval Negative Failure
*/
int (*get_delay)(int32_t type);
/**
* Sets measurment period in milli-seconds
* @param[in] type Sensor type
* @param[in] delay Measurement period in milli-seconds
* @retval Non-Negative The bit or of the sensor type successfully
* delay changed.
* @retval Negative Failure
*/
int (*set_delay)(int32_t type, int delay);
/**
* Reports the sensor status (Enabled or Disabled)
* @param[in] type Sensor type
* @retval 0 Disabled
* @retval 1 Enabled
* @retval Negative Failure
*/
int (*get_enable)(int32_t type);
/**
* Enables or disables sensors
* @param[in] type Sensor type
* @param[in] enable The status of the sensor (0: Disable, 1: Enable)
* @retval Non-Negative The bit or of the sensor type successfully
* enabled/disabled.
* @retval Negative Failure
*/
int (*set_enable)(int32_t type, int enable);
/**
* Obtains the sensor position
* @retval 0-7 The position of the sensor
* @retval Negative Failure
*/
int (*get_position)(void);
/**
* Sets the sensor position
* @param[in] position The position of the sensor (0-7)
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*set_position)(int position);
/**
* Measures the sensor
* @param[in] type Sensor type
* @param[out] raw Measured sensor data
* @param[in] num The number of the measured sensor data
* @retval Non-Negative The number of the measured sensor data
* @retval Negative Failure
*/
int (*measure)(int32_t type, struct yas_data *raw, int num);
/**
* Extension command execution specific to the part number
* @param[in] cmd Extension command id
* @param[out] result Extension command result
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*ext)(int32_t cmd, void *result);
struct yas_driver_callback callback; /*!< Callback functions */
};
/**
* @struct yas_acc_mag_gyro_driver
* @brief Acceleration, geomagnetic and gyroscope sensor driver (9-axis).
*/
struct yas_acc_mag_gyro_driver {
/**
* Initializes the sensor, starts communication with the device
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*init)(void);
/**
* Terminates the communications with the device
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*term)(void);
/**
* Obtains measurment period in milli-seconds
* @param[in] type Sensor type
* @retval Non-Negatiev Measurement period in milli-seconds
* @retval Negative Failure
*/
int (*get_delay)(int32_t type);
/**
* Sets measurment period in milli-seconds
* @param[in] type Sensor type
* @param[in] delay Measurement period in milli-seconds
* @retval Non-Negative The bit or of the sensor type successfully
* delay changed.
* @retval Negative Failure
*/
int (*set_delay)(int32_t type, int delay);
/**
* Reports the sensor status (Enabled or Disabled)
* @param[in] type Sensor type
* @retval 0 Disabled
* @retval 1 Enabled
* @retval Negative Failure
*/
int (*get_enable)(int32_t type);
/**
* Enables or disables sensors
* @param[in] type Sensor type
* @param[in] enable The status of the sensor (0: Disable, 1: Enable)
* @retval Non-Negative The bit or of the sensor type successfully
* enabled/disabled.
* @retval Negative Failure
*/
int (*set_enable)(int32_t type, int enable);
/**
* Obtains the sensor position
* @retval 0-7 The position of the sensor
* @retval Negative Failure
*/
int (*get_position)(void);
/**
* Sets the sensor position
* @param[in] position The position of the sensor (0-7)
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*set_position)(int position);
/**
* Measures the sensor
* @param[in] type Sensor type
* @param[out] raw Measured sensor data
* @param[in] num The number of the measured sensor data
* @retval Non-Negative The number of the measured sensor data
* @retval Negative Failure
*/
int (*measure)(int32_t type, struct yas_data *raw, int num);
/**
* Extension command execution specific to the part number
* @param[in] cmd Extension command id
* @param[out] result Extension command result
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*ext)(int32_t cmd, void *result);
struct yas_driver_callback callback; /*!< Callback functions */
};
#if YAS_MAG_FILTER_ENABLE
/**
* @struct yas_mag_filter_config
* @brief Magnetic filter configuration
*/
struct yas_mag_filter_config {
uint8_t len; /*!< Filter length */
uint16_t noise; /*!< Filter noise X, Y, Z in [nT] */
};
/**
* @struct yas_mag_filter
* @brief Magnetic filter
*/
struct yas_mag_filter {
/**
* Initializes the filter
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*init)(void);
/**
* Terminates the filter
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*term)(void);
/**
* Resets the filter
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*reset)(void);
/**
* Filters the sensor data
* @param[in] input Measured sensor data
* @param[out] output Filtered sensor data
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*update)(struct yas_vector *input, struct yas_vector *output);
/**
* Obtains filter configuration
* @param[out] config Sensor filter configuration
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*get_config)(struct yas_mag_filter_config *config);
/**
* Sets filter configuration
* @param[in] config Sensor filter configuration
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*set_config)(struct yas_mag_filter_config *config);
};
#endif
#if YAS_MAG_CALIB_ENABLE
/**
* @struct yas_mag_calib_config
* @brief Magnetic calibration configuration
*/
struct yas_mag_calib_config {
uint8_t mode; /*!< Calibration mode : #YAS_MAG_CALIB_MODE_SPHERE,
#YAS_MAG_CALIB_MODE_ELLIPSOID,
#YAS_MAG_CALIB_MODE_SPHERE_WITH_GYRO,
#YAS_MAG_CALIB_MODE_ELLIPSOID_WITH_GYRO */
uint16_t spread[3]; /*!< Spread threshold for accuracy 1-3
(YAS_MAG_CALIB_MODE_SPHERE) */
uint16_t variation[3]; /*!< Variation threshold for accuracy 1-3
(YAS_MAG_CALIB_MODE_SPHERE) */
#if YAS_MAG_CALIB_ELLIPSOID_ENABLE
uint16_t el_spread[3]; /*!< Spread threshold for accuracy 1-3
(YAS_MAG_CALIB_MODE_ELLIPSOID) */
uint16_t el_variation[3]; /*!< Variation threshold for accuracy 1-3
(YAS_MAG_CALIB_MODE_ELLIPSOID) */
#endif
#if !YAS_MAG_CALIB_MINI_ENABLE
uint16_t trad_variation[3]; /*!< Traditional variation for accuracy 1-3
*/
#endif
#if YAS_MAG_CALIB_WITH_GYRO_ENABLE
uint16_t cwg_threshold[12]; /*!< Threshold for calibration with gyro.
Order is {eval_th_for_narrow,
diff_angle_th_for_narrow,
eval_th_for_wide, eval_th_for_wide }
for accuracy 1, 2, and 3. */
#endif
};
/**
* @struct yas_mag_calib_result
* @brief Magnetic calibration result
*/
struct yas_mag_calib_result {
struct yas_vector offset; /*!< Calibration offset [nT] */
uint16_t spread; /*!< Spread value */
uint16_t variation; /*!< Variation value */
uint32_t radius; /*!< Magnetic radius [nT] */
uint8_t axis; /*!< Update axis */
uint8_t accuracy; /*!< Accuracy [0-3] */
uint8_t level; /*!< The number of sample */
#if !YAS_MAG_CALIB_MINI_ENABLE
int success_mode; /*!< Success mode. 1:cwm, 2:cwg. */
uint16_t trad_variation; /*!< Traditional variation value */
#endif
#if YAS_MAG_CALIB_WITH_GYRO_ENABLE
uint16_t cwg_spread;
uint16_t cwg_variation;
#endif
#if YAS_MAG_CALIB_ELLIPSOID_ENABLE
struct yas_matrix dynamic_matrix;
#endif
};
/**
* @struct yas_mag_calib
* @brief Magnetic calibration
*/
struct yas_mag_calib {
/**
* Initializes the calibration
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*init)(void);
/**
* Terminates the calibration
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*term)(void);
/**
* Resets the calibration
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*reset)(void);
/**
* Updates the calibration
* @param[in] raw Measured sensor data
* @param[in] num The number of the measured sensor data
* @retval 0 Calibration offset and accuracy are NOT changed
* @retval 1 Calibration offset or accuracy is changed
* @retval Negative Failure
*/
int (*update)(struct yas_data *raw, int num);
/**
* Obtains the calibration offset
* @param[in] type Sensor type
* @param[out] offset Calibration offset
* @param[out] accuracy Calibration offset accuracy
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*get_offset)(int type, struct yas_vector *offset,
uint8_t *accuracy);
/**
* Sets the calibration offset
* @param[in] type Sensor type
* @param[in] offset Calibration offset
* @param[in] accuracy Calibration offset accuracy
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*set_offset)(int type, struct yas_vector *offset,
uint8_t accuracy);
/**
* Obtains the calibration configuration
* @param[out] config Calibration configuration
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*get_config)(struct yas_mag_calib_config *config);
/**
* Sets the calibration configuration
* @param[in] config Calibration configuration
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*set_config)(struct yas_mag_calib_config *config);
#if YAS_MAG_CALIB_ELLIPSOID_ENABLE
/**
* Obtains the dynamic ellipsoid correction matrix
* @param[out] m dynamic ellipsoid correction matrix
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*get_dynamic_matrix)(struct yas_matrix *m);
/**
* Sets the dynamic ellipsoid correction matrix
* @param[in] m Dynamic ellipsoid correction matrix
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*set_dynamic_matrix)(struct yas_matrix *m);
#endif
/**
* Obtains the detail of the last calibration result
* @param[out] r Last calibration result
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*get_result)(struct yas_mag_calib_result *r);
};
#endif
#if YAS_GYRO_CALIB_ENABLE
/**
* @struct yas_gyro_calib_config
* @brief Gyroscope calibration configuration
*/
struct yas_gyro_calib_config {
uint16_t mag_noise; /*!< Magnetic sensor noise in standard deviation
[nT] */
uint16_t gyro_noise; /*!< Currenlty, this is a dummy parameter. */
};
/**
* @struct yas_gyro_calib_result
* @brief Gyroscope calibration result
*/
struct yas_gyro_calib_result {
struct yas_vector offset; /*!< Calibration offset [mdps] */
uint8_t accuracy; /*!< Accuracy [0-3] */
};
/**
* @struct yas_gyro_calib
* @brief Gyroscope calibration
*/
struct yas_gyro_calib {
/**
* Initializes the calibration
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*init)(void);
/**
* Terminates the calibration
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*term)(void);
/**
* Resets the calibration
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*reset)(void);
/**
* Updates the calibration
* @param[in] raw Measured sensor data
* @param[in] num The number of the measured sensor data
* @retval 0 Calibration offset or accuracy is NOT changed
* @retval 1 Calibration offset or accuracy is changed
* @retval Negative Failure
*/
int (*update)(struct yas_data *raw, int num);
/**
* Obtains the calibration offset
* @param[in] type Sensor type
* @param[out] offset Calibration offset
* @param[out] accuracy Calibration offset accuracy
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*get_offset)(int type, struct yas_vector *offset,
uint8_t *accuracy);
/**
* Sets the calibration offset
* @param[in] type Sensor type
* @param[in] offset Calibration offset
* @param[in] accuracy Calibration offset accuracy
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*set_offset)(int type, struct yas_vector *offset,
uint8_t accuracy);
/**
* Obtains the calibration configuration
* @param[out] config Calibration configuration
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*get_config)(struct yas_gyro_calib_config *config);
/**
* Sets the calibration configuration
* @param[in] config Calibration configuration
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*set_config)(struct yas_gyro_calib_config *config);
/**
* Obtains the detail of the last calibration result
* @param[out] r Last calibration result
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*get_result)(struct yas_gyro_calib_result *r);
};
#endif
#if YAS_AM_FUSION_ENABLE
/**
* @struct yas_am_fusion_config
* @brief acc-mag-sensor fusion configuration
*/
struct yas_am_fusion_config {
int8_t dummy;
};
#endif
#if YAS_AM_OLD_FUSION_ENABLE
/**
* @struct yas_am_old_fusion_config
* @brief acc-mag-sensor fusion configuration
*/
struct yas_am_old_fusion_config {
int8_t dummy;
};
#endif
#if YAS_AG_FUSION_ENABLE
/**
* @struct yas_ag_fusion_config
* @brief acc-gyro-sensor fusion configuration
*/
struct yas_ag_fusion_config {
int32_t weight;
int32_t hpf_sq_out_threshold;
int16_t sustain;
};
#endif
#if YAS_AMG_FUSION_ENABLE
/**
* @struct yas_amg_fusion_config
* @brief 9axis-sensor fusion configuration
*/
struct yas_amg_fusion_config {
int8_t dummy;
};
#endif
#if YAS_AM_FUSION_ENABLE
/**
* @struct yas_am_fusion_result
* @brief acc-mag-sensor fusion result
*/
struct yas_am_fusion_result {
# if YAS_ORIENTATION_ENABLE
struct yas_vector orientation;
# endif
struct yas_quaternion quaternion;
struct yas_vector gravity;
struct yas_vector linear_acceleration;
struct yas_vector angular_velocity;
};
#endif
#if YAS_AM_OLD_FUSION_ENABLE
/**
* @struct yas_am_fusion_result
* @brief acc-mag-sensor fusion result
*/
struct yas_am_old_fusion_result {
# if YAS_ORIENTATION_ENABLE
struct yas_vector orientation; /*!< orientation angle (acc and mag)
[mdegree]. Azimuth, Pitch, Roll */
# endif
struct yas_quaternion quaternion; /*!< quaternion (acc and mag)
[normalized in
YAS_QUATERNION_NORM] */
};
#endif
#if YAS_AG_FUSION_ENABLE
/**
* @struct yas_ag_fusion_result
* @brief acc-gyro-sensor fusion result
*/
struct yas_ag_fusion_result {
struct yas_quaternion quaternion; /*!< quaternion (GAMEVEC)
[normalized in
YAS_QUATERNION_NORM] */
};
#endif
#if YAS_AMG_FUSION_ENABLE
/**
* @struct yas_amg_fusion_result
* @brief 9axis-sensor fusion result
*/
struct yas_amg_fusion_result {
# if YAS_ORIENTATION_ENABLE
struct yas_vector orientation; /*!< orientation angle (acc, mag
and gyro) [mdegree]. Azimuth,
Pitch, Roll */
#endif
struct yas_quaternion quaternion; /*!< quaternion (acc, mag and
gyro) [normalized in
YAS_QUATERNION_NORM] */
struct yas_vector gravity; /*!< Gravity [um/s^2] */
struct yas_vector linear_acceleration; /*!< Linear acceleration
[um/s^2] */
};
#endif
#if YAS_AM_FUSION_ENABLE
/**
* @struct yas_am_fusion
* @brief acc-mag-Sensor fusion
*/
struct yas_am_fusion {
/**
* Initializes the acc-mag-sensor fusion
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*init)(void);
/**
* Terminates the acc-mag-sensor fusion
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*term)(void);
/**
* Resets the acc-mag-sensor fusion
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*reset)(void);
/**
* Updates the acc-mag-sensor fusion
* @param[in] raw Measured sensor data
* @param[in] num The number of the measured sensor data
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*update)(struct yas_data *raw, int num);
/**
* Obtains the acc-mag-sensor fusion configuration
* @param[out] config acc-mag-Sensor fusion configuration
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*get_config)(struct yas_am_fusion_config *config);
/**
* Sets the acc-mag-sensor fusion configuration
* @param[in] config acc-mag-Sensor fusion configuration
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*set_config)(const struct yas_am_fusion_config *config);
/**
* Obtains the detail of the last fusion result
* @param[out] r Last fusion result
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*get_result)(struct yas_am_fusion_result *r);
};
#endif
#if YAS_AM_OLD_FUSION_ENABLE
/**
* @struct yas_am_old_fusion
* @brief acc-mag-Sensor fusion
*/
struct yas_am_old_fusion {
/**
* Initializes the acc-mag-sensor fusion
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*init)(void);
/**
* Terminates the acc-mag-sensor fusion
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*term)(void);
/**
* Resets the acc-mag-sensor fusion
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*reset)(void);
/**
* Updates the acc-mag-sensor fusion
* @param[in] raw Measured sensor data
* @param[in] num The number of the measured sensor data
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*update)(struct yas_data *raw, int num);
/**
* Obtains the acc-mag-sensor fusion configuration
* @param[out] config acc-mag-Sensor fusion configuration
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*get_config)(struct yas_am_old_fusion_config *config);
/**
* Sets the acc-mag-sensor fusion configuration
* @param[in] config acc-mag-Sensor fusion configuration
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*set_config)(const struct yas_am_old_fusion_config *config);
/**
* Obtains the detail of the last fusion result
* @param[out] r Last fusion result
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*get_result)(struct yas_am_old_fusion_result *r);
};
#endif
#if YAS_AG_FUSION_ENABLE
/**
* @struct yas_ag_fusion
* @brief acc-gyro-Sensor fusion
*/
struct yas_ag_fusion {
/**
* Initializes the acc-gyro-sensor fusion
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*init)(void);
/**
* Terminates the acc-gyro-sensor fusion
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*term)(void);
/**
* Resets the acc-gyro-sensor fusion
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*reset)(void);
/**
* Updates the acc-gyro-sensor fusion
* @param[in] raw Measured sensor data
* @param[in] num The number of the measured sensor data
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*update)(struct yas_data *raw, int num);
/**
* Obtains the acc-gyro-sensor fusion configuration
* @param[out] config acc-gyro-Sensor fusion configuration
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*get_config)(struct yas_ag_fusion_config *config);
/**
* Sets the acc-gyro-sensor fusion configuration
* @param[in] config acc-gyro-Sensor fusion configuration
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*set_config)(const struct yas_ag_fusion_config *config);
/**
* Obtains the detail of the last fusion result
* @param[out] r Last fusion result
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*get_result)(struct yas_ag_fusion_result *r);
};
#endif
#if YAS_AMG_FUSION_ENABLE
/**
* @struct yas_amg_fusion
* @brief 9Axis-Sensor fusion
*/
struct yas_amg_fusion {
/**
* Initializes the 9-axis-sensor fusion
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*init)(void);
/**
* Terminates the 9-axis-sensor fusion
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*term)(void);
/**
* Resets the 9-axis-sensor fusion
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*reset)(void);
/**
* Notifies the square of offset change.
* @param[in] square of offset change in [nT].
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*notify_offset_change)(int32_t square_offset_change);
/**
* Updates the 9-axis-sensor fusion
* @param[in] raw Measured sensor data
* @param[in] num The number of the measured sensor data
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*update)(struct yas_data *raw, int num);
/**
* Obtains the 9-axis-sensor fusion configuration
* @param[out] config 9-axis-Sensor fusion configuration
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*get_config)(struct yas_amg_fusion_config *config);
/**
* Sets the 9-axis-sensor fusion configuration
* @param[in] config Sensor fusion configuration
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*set_config)(const struct yas_amg_fusion_config *config);
/**
* Obtains the detail of the last fusion result
* @param[out] r Last fusion result
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*get_result)(struct yas_amg_fusion_result *r);
};
#endif
#if YAS_STEPCOUNTER_ENABLE
/**
* @struct yas_stepcounter_config
* @brief Stepcounter configuration
*/
struct yas_stepcounter_config {
int8_t interval; /*!< Step counter calculate interval (ms)
0 to 20 */
int8_t noisecancel; /*!< Noise cancel setting
0: off
1: on */
};
/**
* @struct yas_stepcounter_result
* @brief Stepcounter result
*/
struct yas_stepcounter_result {
int32_t walk_and_run_count[2];
int32_t walk_and_run_time[2];
int32_t totalcount; /*!< Total (walk and run) count */
int32_t totaltime; /*!< Total (walk and run) time */
};
/**
* @struct yas_stepcounter
* @brief Step counter function
*/
struct yas_stepcounter {
/**
* Initializes the stepcounter
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*init)(void);
/**
* Terminates the stepcounter
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*term)(void);
/**
* Resets the stepcounter
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*reset)(void);
/**
* Updates the stepcounter
* @param[in] Measured sensor data (accelerometer)
* @param[in] num The number of the measured sensor data
* @retval 0 Walk count and run count are NOT changed
* @retval 1 Walk count or run count is changed
* @retval Negative Failure
*/
int (*update)(struct yas_data *ydata, int num);
/**
* Obtains the stepcounter configuration
* @param[out] config stepcounter configuration
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*get_config)(struct yas_stepcounter_config *config);
/**
* Sets the stepcounter configuration
* @param[in] config stepcounter configuration
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*set_config)(struct yas_stepcounter_config *config);
/**
* Obtains the detail of the last stepcounter result
* @param[out] Last stepcounter result
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*get_result)(struct yas_stepcounter_result *r);
};
#endif
#if YAS_SIGNIFICANT_MOTION_ENABLE
/**
* @struct yas_sfm_config
* @brief Significant motion configuration
*/
struct yas_sfm_config {
int dummy;
};
/**
* @struct yas_sfm_result
* @brief Significant Motion result
*/
struct yas_sfm_result {
int edge_state;
int edge_type;
int acc_count;
int var_count;
int err_count;
};
/**
* @struct yas_sfm
* @brief Significant motion function
*/
struct yas_sfm {
/**
* Initializes the significant motion
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*init)(void);
/**
* Terminates the significant motion
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*term)(void);
/**
* Resets the significant motion
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*reset)(void);
/**
* Updates the significant motion
* @param[in] Measured sensor data (accelerometer)
* @param[in] num The number of the measured sensor data
* @retval 0 Walk count and run count are NOT changed
* @retval 1 Walk count or run count is changed
* @retval Negative Failure
*/
int (*update)(struct yas_data *ydata, int num);
/**
* Obtains the significant motion configuration
* @param[out] config significant motion configuration
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*get_config)(struct yas_sfm_config *config);
/**
* Sets the significant motion configuration
* @param[in] config significant motion configuration
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*set_config)(struct yas_sfm_config *config);
/**
* Obtains the detail of the last significant motion result
* @param[out] Last significant motion result
* @retval #YAS_NO_ERROR Success
* @retval Negative Failure
*/
int (*get_result)(struct yas_sfm_result *r);
};
#endif
#if YAS_LOG_ENABLE
/**
* @struct yas_log
* @brief User-written callback functions for log control
*/
struct yas_log {
/**
* Open the log
* @retval 0 Success
* @retval Negative Failure
*/
int (*log_open)(void);
/**
* Close the log
* @retval 0 Success
* @retval Negative Failure
*/
int (*log_close)(void);
/**
* Write the log
* @param[in] buf Log string
* @param[in] len Log string length
* @retval 0 Success
* @retval Negative Failure
*/
int (*log_write)(const char *buf, int len);
};
#endif
#if YAS_MAG_DRIVER == YAS_MAG_DRIVER_YAS530
struct yas530_self_test_result {
int32_t id;
int8_t xy1y2[3];
int32_t dir;
int32_t sx, sy;
int32_t xyz[3];
};
#endif
#if YAS_MAG_DRIVER == YAS_MAG_DRIVER_YAS532 \
|| YAS_MAG_DRIVER == YAS_MAG_DRIVER_YAS533
struct yas532_self_test_result {
int32_t id;
int8_t xy1y2[3];
int32_t dir;
int32_t sx, sy;
int32_t xyz[3];
};
#endif
#if YAS_MAG_DRIVER == YAS_MAG_DRIVER_YAS537
struct yas537_self_test_result {
int32_t id;
int32_t dir;
int32_t sx, sy;
int32_t xyz[3];
};
#endif
#if YAS_MAG_DRIVER == YAS_MAG_DRIVER_YAS539
struct yas539_self_test_result {
int32_t id;
int32_t dir;
uint16_t sxy1y2[3];
int32_t xyz[3];
};
#endif
#if YAS_MAG_DRIVER == YAS_MAG_DRIVER_YAS535
struct yas535_acc_self_test_result {
int dummy; /* TBD */
};
struct yas535_mag_self_test_result {
int32_t id;
int8_t xy1y2[3];
int32_t dir;
int32_t sx, sy;
int32_t xyz[3];
};
#endif
/* ----------------------------------------------------------------------------
* Global function definition
*--------------------------------------------------------------------------- */
#ifdef __cplusplus
extern "C" {
#endif
/**
* Initializes the acceleration sensor driver module. Call thie function by
* specifying a callback function.
* @param[in,out] f Pointer to yas_acc_driver struct
* @retval #YAS_NO_ERROR Success
* @retval Negative Number Error
*/
int yas_acc_driver_init(struct yas_acc_driver *f);
/**
* Initializes the magnetic sensor driver module. Call thie function by
* specifying a callback function.
* @param[in,out] f Pointer to yas_mag_driver struct
* @retval #YAS_NO_ERROR Success
* @retval Negative Number Error
*/
int yas_mag_driver_init(struct yas_mag_driver *f);
/**
* Initializes the gyroscope sensor driver module. Call thie function by
* specifying a callback function.
* @param[in,out] f Pointer to yas_gyro_driver struct
* @retval #YAS_NO_ERROR Success
* @retval Negative Number Error
*/
int yas_gyro_driver_init(struct yas_gyro_driver *f);
/**
* Initializes the acceleration and gyroscope sensor (6-axis) driver module.
* Call thie function by specifying a callback function.
* @param[in,out] f Pointer to yas_acc_gyro_driver struct
* @retval #YAS_NO_ERROR Success
* @retval Negative Number Error
*/
int yas_acc_gyro_driver_init(struct yas_acc_gyro_driver *f);
/**
* Initializes the acceleration and magnetic sensor (6-axis) driver module.
* Call thie function by specifying a callback function.
* @param[in,out] f Pointer to yas_acc_mag_driver struct
* @retval #YAS_NO_ERROR Success
* @retval Negative Number Error
*/
int yas_acc_mag_driver_init(struct yas_acc_mag_driver *f);
/**
* Initializes the acceleration, magnetic and gyroscope sensor (9-axis) driver
* module. Call thie function by specifying a callback function.
* @param[in,out] f Pointer to yas_acc_mag_gyro_driver struct
* @retval #YAS_NO_ERROR Success
* @retval Negative Number Error
*/
int yas_acc_mag_gyro_driver_init(struct yas_acc_mag_gyro_driver *f);
#if YAS_MAG_CALIB_ENABLE
/**
* Initializes the magnetic calibration module.
* @param[in,out] f Pointer to yas_mag_calib struct
* @retval #YAS_NO_ERROR Success
* @retval Negative Number Error
*/
int yas_mag_calib_init(struct yas_mag_calib *f);
#endif
#if YAS_GYRO_CALIB_ENABLE
/**
* Initializes the gyroscope calibration module.
* @param[in,out] f Pointer to yas_gyro_calib struct
* @retval #YAS_NO_ERROR Success
* @retval Negative Number Error
*/
int yas_gyro_calib_init(struct yas_gyro_calib *f);
#endif
#if YAS_MAG_FILTER_ENABLE
/**
* Initializes the magnetic filter module.
* @param[in,out] f Pointer to yas_mag_filter struct
* @retval #YAS_NO_ERROR Success
* @retval Negative Number Error
*/
int yas_mag_filter_init(struct yas_mag_filter *f);
#endif
#if YAS_AM_FUSION_ENABLE
int yas_am_fusion_init(struct yas_am_fusion *f);
#endif
#if YAS_AM_OLD_FUSION_ENABLE
int yas_am_old_fusion_init(struct yas_am_old_fusion *f);
#endif
#if YAS_AG_FUSION_ENABLE
int yas_ag_fusion_init(struct yas_ag_fusion *f);
#endif
#if YAS_AMG_FUSION_ENABLE
int yas_amg_fusion_init(struct yas_amg_fusion *f);
#endif
#if YAS_STEPCOUNTER_ENABLE
/**
* Initializes the stepcounter module.
* @param[in,out] f Pointer to yas_stepcounter struct
* @retval #YAS_NO_ERROR Success
* @retval Negative Number Error
*/
int yas_stepcounter_init(struct yas_stepcounter *f);
#endif
#if YAS_SIGNIFICANT_MOTION_ENABLE
/**
* Initializes the significant motion module.
* @param[in,out] f Pointer to yas_sfm struct
* @retval #YAS_NO_ERROR Success
* @retval Negative Number Error
*/
int yas_sfm_init(struct yas_sfm *f);
#endif
#ifdef __cplusplus
}
#endif
#endif /* __YAS_H__ */