blob: d017fdb3682c8938ee72d58d2c86f1821bf05573 [file] [log] [blame]
/*
* This software program is licensed subject to the GNU General Public License
* (GPL).Version 2,June 1991, available at http://www.fsf.org/copyleft/gpl.html
* (C) Copyright 2011 Bosch Sensortec GmbH All Rights Reserved
*/
/* Disclaimer
*
* Common: Bosch Sensortec products are developed for the consumer goods
* industry. They may only be used within the parameters of the respective valid
* product data sheet. Bosch Sensortec products are provided with the express
* understanding that there is no warranty of fitness for a particular purpose.
* They are not fit for use in life-sustaining, safety or security sensitive
* systems or any system or device that may lead to bodily harm or property
* damage if the system or device malfunctions. In addition, Bosch Sensortec
* products are not fit for use in products which interact with motor vehicle
* systems. The resale and/or use of products are at the purchaser's own risk
* and his own responsibility. The examination of fitness for the intended use
* is the sole responsibility of the Purchaser.
*
* The purchaser shall indemnify Bosch Sensortec from all third party claims,
* including any claims for incidental, or consequential damages, arising from
* any product use not covered by the parameters of the respective valid product
* data sheet or not approved by Bosch Sensortec and reimburse Bosch Sensortec
* for all costs in connection with such claims.
*
* The purchaser must monitor the market for the purchased products,
* particularly with regard to product safety and inform Bosch Sensortec without
* delay of all security relevant incidents.
*
* Engineering Samples are marked with an asterisk (*) or (e). Samples may vary
* from the valid technical specifications of the product series. They are
* therefore not intended or fit for resale to third parties or for use in end
* products. Their sole purpose is internal client testing. The testing of an
* engineering sample may in no way replace the testing of a product series.
* Bosch Sensortec assumes no liability for the use of engineering samples. By
* accepting the engineering samples, the Purchaser agrees to indemnify Bosch
* Sensortec from all claims arising from the use of engineering samples.
*
* Special: This software module (hereinafter called "Software") and any
* information on application-sheets (hereinafter called "Information") is
* provided free of charge for the sole purpose to support your application
* work. The Software and Information is subject to the following terms and
* conditions:
*
* The Software is specifically designed for the exclusive use for Bosch
* Sensortec products by personnel who have special experience and training. Do
* not use this Software if you do not have the proper experience or training.
*
* This Software package is provided `` as is `` and without any expressed or
* implied warranties, including without limitation, the implied warranties of
* merchantability and fitness for a particular purpose.
*
* Bosch Sensortec and their representatives and agents deny any liability for
* the functional impairment of this Software in terms of fitness, performance
* and safety. Bosch Sensortec and their representatives and agents shall not be
* liable for any direct or indirect damages or injury, except as otherwise
* stipulated in mandatory applicable law.
*
* The Information provided is believed to be accurate and reliable. Bosch
* Sensortec assumes no responsibility for the consequences of use of such
* Information nor for any infringement of patents or other rights of third
* parties which may result from its use. No license is granted by implication
* or otherwise under any patent or patent rights of Bosch. Specifications
* mentioned in the Information are subject to change without notice.
*
* It is not allowed to deliver the source code of the Software to any third
* party without permission of Bosch Sensortec.
*/
#ifndef __BMM050_H__
#define __BMM050_H__
#define BMM050_U16 unsigned short
#define BMM050_S16 signed short
#define BMM050_S32 signed int
#define BMM050_BUS_WR_RETURN_TYPE char
#define BMM050_BUS_WR_PARAM_TYPES\
unsigned char, unsigned char, unsigned char *, unsigned char
#define BMM050_BUS_WR_PARAM_ORDER\
(device_addr, register_addr, register_data, wr_len)
#define BMM050_BUS_WRITE_FUNC(\
device_addr, register_addr, register_data, wr_len)\
bus_write(device_addr, register_addr, register_data, wr_len)
#define BMM050_BUS_RD_RETURN_TYPE char
#define BMM050_BUS_RD_PARAM_TYPES\
unsigned char, unsigned char, unsigned char *, unsigned char
#define BMM050_BUS_RD_PARAM_ORDER (device_addr, register_addr, register_data)
#define BMM050_BUS_READ_FUNC(device_addr, register_addr, register_data, rd_len)\
bus_read(device_addr, register_addr, register_data, rd_len)
#define BMM050_DELAY_RETURN_TYPE void
#define BMM050_DELAY_PARAM_TYPES unsigned int
#define BMM050_DELAY_FUNC(delay_in_msec)\
delay_func(delay_in_msec)
#define BMM050_DELAY_POWEROFF_SUSPEND 1
#define BMM050_DELAY_SUSPEND_SLEEP 2
#define BMM050_DELAY_SLEEP_ACTIVE 1
#define BMM050_DELAY_ACTIVE_SLEEP 1
#define BMM050_DELAY_SLEEP_SUSPEND 1
#define BMM050_DELAY_ACTIVE_SUSPEND 1
#define BMM050_DELAY_SLEEP_POWEROFF 1
#define BMM050_DELAY_ACTIVE_POWEROFF 1
#define BMM050_DELAY_SETTLING_TIME 2
#define BMM050_RETURN_FUNCTION_TYPE char
#define BMM050_I2C_ADDRESS 0x10
/*General Info datas*/
#define BMM050_SOFT_RESET7_ON 1
#define BMM050_SOFT_RESET1_ON 1
#define BMM050_SOFT_RESET7_OFF 0
#define BMM050_SOFT_RESET1_OFF 0
#define BMM050_DELAY_SOFTRESET 1
/* Fixed Data Registers */
#define BMM050_CHIP_ID 0x40
/* Data Registers */
#define BMM050_DATAX_LSB 0x42
#define BMM050_DATAX_MSB 0x43
#define BMM050_DATAY_LSB 0x44
#define BMM050_DATAY_MSB 0x45
#define BMM050_DATAZ_LSB 0x46
#define BMM050_DATAZ_MSB 0x47
#define BMM050_R_LSB 0x48
#define BMM050_R_MSB 0x49
/* Status Registers */
#define BMM050_INT_STAT 0x4A
/* Control Registers */
#define BMM050_POWER_CNTL 0x4B
#define BMM050_CONTROL 0x4C
#define BMM050_INT_CNTL 0x4D
#define BMM050_SENS_CNTL 0x4E
#define BMM050_LOW_THRES 0x4F
#define BMM050_HIGH_THRES 0x50
#define BMM050_NO_REPETITIONS_XY 0x51
#define BMM050_NO_REPETITIONS_Z 0x52
/* Trim Extended Registers */
#define BMM050_DIG_X1 0x5D
#define BMM050_DIG_Y1 0x5E
#define BMM050_DIG_Z4_LSB 0x62
#define BMM050_DIG_Z4_MSB 0x63
#define BMM050_DIG_X2 0x64
#define BMM050_DIG_Y2 0x65
#define BMM050_DIG_Z2_LSB 0x68
#define BMM050_DIG_Z2_MSB 0x69
#define BMM050_DIG_Z1_LSB 0x6A
#define BMM050_DIG_Z1_MSB 0x6B
#define BMM050_DIG_XYZ1_LSB 0x6C
#define BMM050_DIG_XYZ1_MSB 0x6D
#define BMM050_DIG_Z3_LSB 0x6E
#define BMM050_DIG_Z3_MSB 0x6F
#define BMM050_DIG_XY2 0x70
#define BMM050_DIG_XY1 0x71
/* Data X LSB Regsiter */
#define BMM050_DATAX_LSB_VALUEX__POS 3
#define BMM050_DATAX_LSB_VALUEX__LEN 5
#define BMM050_DATAX_LSB_VALUEX__MSK 0xF8
#define BMM050_DATAX_LSB_VALUEX__REG BMM050_DATAX_LSB
#define BMM050_DATAX_LSB_TESTX__POS 0
#define BMM050_DATAX_LSB_TESTX__LEN 1
#define BMM050_DATAX_LSB_TESTX__MSK 0x01
#define BMM050_DATAX_LSB_TESTX__REG BMM050_DATAX_LSB
/* Data Y LSB Regsiter */
#define BMM050_DATAY_LSB_VALUEY__POS 3
#define BMM050_DATAY_LSB_VALUEY__LEN 5
#define BMM050_DATAY_LSB_VALUEY__MSK 0xF8
#define BMM050_DATAY_LSB_VALUEY__REG BMM050_DATAY_LSB
#define BMM050_DATAY_LSB_TESTY__POS 0
#define BMM050_DATAY_LSB_TESTY__LEN 1
#define BMM050_DATAY_LSB_TESTY__MSK 0x01
#define BMM050_DATAY_LSB_TESTY__REG BMM050_DATAY_LSB
/* Data Z LSB Regsiter */
#define BMM050_DATAZ_LSB_VALUEZ__POS 1
#define BMM050_DATAZ_LSB_VALUEZ__LEN 7
#define BMM050_DATAZ_LSB_VALUEZ__MSK 0xFE
#define BMM050_DATAZ_LSB_VALUEZ__REG BMM050_DATAZ_LSB
#define BMM050_DATAZ_LSB_TESTZ__POS 0
#define BMM050_DATAZ_LSB_TESTZ__LEN 1
#define BMM050_DATAZ_LSB_TESTZ__MSK 0x01
#define BMM050_DATAZ_LSB_TESTZ__REG BMM050_DATAZ_LSB
/* Hall Resistance LSB Regsiter */
#define BMM050_R_LSB_VALUE__POS 2
#define BMM050_R_LSB_VALUE__LEN 6
#define BMM050_R_LSB_VALUE__MSK 0xFC
#define BMM050_R_LSB_VALUE__REG BMM050_R_LSB
#define BMM050_DATA_RDYSTAT__POS 0
#define BMM050_DATA_RDYSTAT__LEN 1
#define BMM050_DATA_RDYSTAT__MSK 0x01
#define BMM050_DATA_RDYSTAT__REG BMM050_R_LSB
/* Interupt Status Register */
#define BMM050_INT_STAT_DOR__POS 7
#define BMM050_INT_STAT_DOR__LEN 1
#define BMM050_INT_STAT_DOR__MSK 0x80
#define BMM050_INT_STAT_DOR__REG BMM050_INT_STAT
#define BMM050_INT_STAT_OVRFLOW__POS 6
#define BMM050_INT_STAT_OVRFLOW__LEN 1
#define BMM050_INT_STAT_OVRFLOW__MSK 0x40
#define BMM050_INT_STAT_OVRFLOW__REG BMM050_INT_STAT
#define BMM050_INT_STAT_HIGH_THZ__POS 5
#define BMM050_INT_STAT_HIGH_THZ__LEN 1
#define BMM050_INT_STAT_HIGH_THZ__MSK 0x20
#define BMM050_INT_STAT_HIGH_THZ__REG BMM050_INT_STAT
#define BMM050_INT_STAT_HIGH_THY__POS 4
#define BMM050_INT_STAT_HIGH_THY__LEN 1
#define BMM050_INT_STAT_HIGH_THY__MSK 0x10
#define BMM050_INT_STAT_HIGH_THY__REG BMM050_INT_STAT
#define BMM050_INT_STAT_HIGH_THX__POS 3
#define BMM050_INT_STAT_HIGH_THX__LEN 1
#define BMM050_INT_STAT_HIGH_THX__MSK 0x08
#define BMM050_INT_STAT_HIGH_THX__REG BMM050_INT_STAT
#define BMM050_INT_STAT_LOW_THZ__POS 2
#define BMM050_INT_STAT_LOW_THZ__LEN 1
#define BMM050_INT_STAT_LOW_THZ__MSK 0x04
#define BMM050_INT_STAT_LOW_THZ__REG BMM050_INT_STAT
#define BMM050_INT_STAT_LOW_THY__POS 1
#define BMM050_INT_STAT_LOW_THY__LEN 1
#define BMM050_INT_STAT_LOW_THY__MSK 0x02
#define BMM050_INT_STAT_LOW_THY__REG BMM050_INT_STAT
#define BMM050_INT_STAT_LOW_THX__POS 0
#define BMM050_INT_STAT_LOW_THX__LEN 1
#define BMM050_INT_STAT_LOW_THX__MSK 0x01
#define BMM050_INT_STAT_LOW_THX__REG BMM050_INT_STAT
/* Power Control Register */
#define BMM050_POWER_CNTL_SRST7__POS 7
#define BMM050_POWER_CNTL_SRST7__LEN 1
#define BMM050_POWER_CNTL_SRST7__MSK 0x80
#define BMM050_POWER_CNTL_SRST7__REG BMM050_POWER_CNTL
#define BMM050_POWER_CNTL_SPI3_EN__POS 2
#define BMM050_POWER_CNTL_SPI3_EN__LEN 1
#define BMM050_POWER_CNTL_SPI3_EN__MSK 0x04
#define BMM050_POWER_CNTL_SPI3_EN__REG BMM050_POWER_CNTL
#define BMM050_POWER_CNTL_SRST1__POS 1
#define BMM050_POWER_CNTL_SRST1__LEN 1
#define BMM050_POWER_CNTL_SRST1__MSK 0x02
#define BMM050_POWER_CNTL_SRST1__REG BMM050_POWER_CNTL
#define BMM050_POWER_CNTL_PCB__POS 0
#define BMM050_POWER_CNTL_PCB__LEN 1
#define BMM050_POWER_CNTL_PCB__MSK 0x01
#define BMM050_POWER_CNTL_PCB__REG BMM050_POWER_CNTL
/* Control Register */
#define BMM050_CNTL_ADV_ST__POS 6
#define BMM050_CNTL_ADV_ST__LEN 2
#define BMM050_CNTL_ADV_ST__MSK 0xC0
#define BMM050_CNTL_ADV_ST__REG BMM050_CONTROL
#define BMM050_CNTL_DR__POS 3
#define BMM050_CNTL_DR__LEN 3
#define BMM050_CNTL_DR__MSK 0x38
#define BMM050_CNTL_DR__REG BMM050_CONTROL
#define BMM050_CNTL_OPMODE__POS 1
#define BMM050_CNTL_OPMODE__LEN 2
#define BMM050_CNTL_OPMODE__MSK 0x06
#define BMM050_CNTL_OPMODE__REG BMM050_CONTROL
#define BMM050_CNTL_S_TEST__POS 0
#define BMM050_CNTL_S_TEST__LEN 1
#define BMM050_CNTL_S_TEST__MSK 0x01
#define BMM050_CNTL_S_TEST__REG BMM050_CONTROL
/* Interupt Control Register */
#define BMM050_INT_CNTL_DOR_EN__POS 7
#define BMM050_INT_CNTL_DOR_EN__LEN 1
#define BMM050_INT_CNTL_DOR_EN__MSK 0x80
#define BMM050_INT_CNTL_DOR_EN__REG BMM050_INT_CNTL
#define BMM050_INT_CNTL_OVRFLOW_EN__POS 6
#define BMM050_INT_CNTL_OVRFLOW_EN__LEN 1
#define BMM050_INT_CNTL_OVRFLOW_EN__MSK 0x40
#define BMM050_INT_CNTL_OVRFLOW_EN__REG BMM050_INT_CNTL
#define BMM050_INT_CNTL_HIGH_THZ_EN__POS 5
#define BMM050_INT_CNTL_HIGH_THZ_EN__LEN 1
#define BMM050_INT_CNTL_HIGH_THZ_EN__MSK 0x20
#define BMM050_INT_CNTL_HIGH_THZ_EN__REG BMM050_INT_CNTL
#define BMM050_INT_CNTL_HIGH_THY_EN__POS 4
#define BMM050_INT_CNTL_HIGH_THY_EN__LEN 1
#define BMM050_INT_CNTL_HIGH_THY_EN__MSK 0x10
#define BMM050_INT_CNTL_HIGH_THY_EN__REG BMM050_INT_CNTL
#define BMM050_INT_CNTL_HIGH_THX_EN__POS 3
#define BMM050_INT_CNTL_HIGH_THX_EN__LEN 1
#define BMM050_INT_CNTL_HIGH_THX_EN__MSK 0x08
#define BMM050_INT_CNTL_HIGH_THX_EN__REG BMM050_INT_CNTL
#define BMM050_INT_CNTL_LOW_THZ_EN__POS 2
#define BMM050_INT_CNTL_LOW_THZ_EN__LEN 1
#define BMM050_INT_CNTL_LOW_THZ_EN__MSK 0x04
#define BMM050_INT_CNTL_LOW_THZ_EN__REG BMM050_INT_CNTL
#define BMM050_INT_CNTL_LOW_THY_EN__POS 1
#define BMM050_INT_CNTL_LOW_THY_EN__LEN 1
#define BMM050_INT_CNTL_LOW_THY_EN__MSK 0x02
#define BMM050_INT_CNTL_LOW_THY_EN__REG BMM050_INT_CNTL
#define BMM050_INT_CNTL_LOW_THX_EN__POS 0
#define BMM050_INT_CNTL_LOW_THX_EN__LEN 1
#define BMM050_INT_CNTL_LOW_THX_EN__MSK 0x01
#define BMM050_INT_CNTL_LOW_THX_EN__REG BMM050_INT_CNTL
/* Sensor Control Register */
#define BMM050_SENS_CNTL_DRDY_EN__POS 7
#define BMM050_SENS_CNTL_DRDY_EN__LEN 1
#define BMM050_SENS_CNTL_DRDY_EN__MSK 0x80
#define BMM050_SENS_CNTL_DRDY_EN__REG BMM050_SENS_CNTL
#define BMM050_SENS_CNTL_IE__POS 6
#define BMM050_SENS_CNTL_IE__LEN 1
#define BMM050_SENS_CNTL_IE__MSK 0x40
#define BMM050_SENS_CNTL_IE__REG BMM050_SENS_CNTL
#define BMM050_SENS_CNTL_CHANNELZ__POS 5
#define BMM050_SENS_CNTL_CHANNELZ__LEN 1
#define BMM050_SENS_CNTL_CHANNELZ__MSK 0x20
#define BMM050_SENS_CNTL_CHANNELZ__REG BMM050_SENS_CNTL
#define BMM050_SENS_CNTL_CHANNELY__POS 4
#define BMM050_SENS_CNTL_CHANNELY__LEN 1
#define BMM050_SENS_CNTL_CHANNELY__MSK 0x10
#define BMM050_SENS_CNTL_CHANNELY__REG BMM050_SENS_CNTL
#define BMM050_SENS_CNTL_CHANNELX__POS 3
#define BMM050_SENS_CNTL_CHANNELX__LEN 1
#define BMM050_SENS_CNTL_CHANNELX__MSK 0x08
#define BMM050_SENS_CNTL_CHANNELX__REG BMM050_SENS_CNTL
#define BMM050_SENS_CNTL_DR_POLARITY__POS 2
#define BMM050_SENS_CNTL_DR_POLARITY__LEN 1
#define BMM050_SENS_CNTL_DR_POLARITY__MSK 0x04
#define BMM050_SENS_CNTL_DR_POLARITY__REG BMM050_SENS_CNTL
#define BMM050_SENS_CNTL_INTERRUPT_LATCH__POS 1
#define BMM050_SENS_CNTL_INTERRUPT_LATCH__LEN 1
#define BMM050_SENS_CNTL_INTERRUPT_LATCH__MSK 0x02
#define BMM050_SENS_CNTL_INTERRUPT_LATCH__REG BMM050_SENS_CNTL
#define BMM050_SENS_CNTL_INTERRUPT_POLARITY__POS 0
#define BMM050_SENS_CNTL_INTERRUPT_POLARITY__LEN 1
#define BMM050_SENS_CNTL_INTERRUPT_POLARITY__MSK 0x01
#define BMM050_SENS_CNTL_INTERRUPT_POLARITY__REG BMM050_SENS_CNTL
/* Register 6D */
#define BMM050_DIG_XYZ1_MSB__POS 0
#define BMM050_DIG_XYZ1_MSB__LEN 7
#define BMM050_DIG_XYZ1_MSB__MSK 0x7F
#define BMM050_DIG_XYZ1_MSB__REG BMM050_DIG_XYZ1_MSB
#define BMM050_X_AXIS 0
#define BMM050_Y_AXIS 1
#define BMM050_Z_AXIS 2
#define BMM050_RESISTANCE 3
#define BMM050_X 1
#define BMM050_Y 2
#define BMM050_Z 4
#define BMM050_XYZ 7
/* Constants */
#define BMM050_NULL 0
#define BMM050_DISABLE 0
#define BMM050_ENABLE 1
#define BMM050_CHANNEL_DISABLE 1
#define BMM050_CHANNEL_ENABLE 0
#define BMM050_INTPIN_LATCH_ENABLE 1
#define BMM050_INTPIN_LATCH_DISABLE 0
#define BMM050_OFF 0
#define BMM050_ON 1
#define BMM050_NORMAL_MODE 0x00
#define BMM050_FORCED_MODE 0x01
#define BMM050_SUSPEND_MODE 0x02
#define BMM050_SLEEP_MODE 0x03
#define BMM050_ADVANCED_SELFTEST_OFF 0
#define BMM050_ADVANCED_SELFTEST_NEGATIVE 2
#define BMM050_ADVANCED_SELFTEST_POSITIVE 3
#define BMM050_NEGATIVE_SATURATION_Z -32767
#define BMM050_POSITIVE_SATURATION_Z 32767
#define BMM050_SPI_RD_MASK 0x80
#define BMM050_READ_SET 0x01
#define E_BMM050_NULL_PTR ((char)-127)
#define E_BMM050_COMM_RES ((char)-1)
#define E_BMM050_OUT_OF_RANGE ((char)-2)
#define E_BMM050_UNDEFINED_MODE 0
#define BMM050_WR_FUNC_PTR\
char (*bus_write)(unsigned char, unsigned char,\
unsigned char *, unsigned char)
#define BMM050_RD_FUNC_PTR\
char (*bus_read)(unsigned char, unsigned char,\
unsigned char *, unsigned char)
#define BMM050_MDELAY_DATA_TYPE unsigned int
/*Shifting Constants*/
#define SHIFT_RIGHT_1_POSITION 1
#define SHIFT_RIGHT_2_POSITION 2
#define SHIFT_RIGHT_3_POSITION 3
#define SHIFT_RIGHT_4_POSITION 4
#define SHIFT_RIGHT_5_POSITION 5
#define SHIFT_RIGHT_6_POSITION 6
#define SHIFT_RIGHT_7_POSITION 7
#define SHIFT_RIGHT_8_POSITION 8
#define SHIFT_LEFT_1_POSITION 1
#define SHIFT_LEFT_2_POSITION 2
#define SHIFT_LEFT_3_POSITION 3
#define SHIFT_LEFT_4_POSITION 4
#define SHIFT_LEFT_5_POSITION 5
#define SHIFT_LEFT_6_POSITION 6
#define SHIFT_LEFT_7_POSITION 7
#define SHIFT_LEFT_8_POSITION 8
/* Conversion factors*/
#define BMM050_CONVFACTOR_LSB_UT 6
/* get bit slice */
#define BMM050_GET_BITSLICE(regvar, bitname)\
((regvar & bitname##__MSK) >> bitname##__POS)
/* Set bit slice */
#define BMM050_SET_BITSLICE(regvar, bitname, val)\
((regvar & ~bitname##__MSK) | ((val<<bitname##__POS)&bitname##__MSK))
/* compensated output value returned if sensor had overflow */
#define BMM050_OVERFLOW_OUTPUT -32768
#define BMM050_OVERFLOW_OUTPUT_S32 ((BMM050_S32)(-2147483647-1))
#define BMM050_OVERFLOW_OUTPUT_FLOAT 0.0f
#define BMM050_FLIP_OVERFLOW_ADCVAL -4096
#define BMM050_HALL_OVERFLOW_ADCVAL -16384
#define BMM050_PRESETMODE_LOWPOWER 1
#define BMM050_PRESETMODE_REGULAR 2
#define BMM050_PRESETMODE_HIGHACCURACY 3
#define BMM050_PRESETMODE_ENHANCED 4
/* PRESET MODES - DATA RATES */
#define BMM050_LOWPOWER_DR BMM050_DR_10HZ
#define BMM050_REGULAR_DR BMM050_DR_10HZ
#define BMM050_HIGHACCURACY_DR BMM050_DR_20HZ
#define BMM050_ENHANCED_DR BMM050_DR_10HZ
/* PRESET MODES - REPETITIONS-XY RATES */
#define BMM050_LOWPOWER_REPXY 1
#define BMM050_REGULAR_REPXY 4
#define BMM050_HIGHACCURACY_REPXY 23
#define BMM050_ENHANCED_REPXY 7
/* PRESET MODES - REPETITIONS-Z RATES */
#define BMM050_LOWPOWER_REPZ 2
#define BMM050_REGULAR_REPZ 15
#define BMM050_HIGHACCURACY_REPZ 82
#define BMM050_ENHANCED_REPZ 26
/* Data Rates */
#define BMM050_DR_10HZ 0
#define BMM050_DR_02HZ 1
#define BMM050_DR_06HZ 2
#define BMM050_DR_08HZ 3
#define BMM050_DR_15HZ 4
#define BMM050_DR_20HZ 5
#define BMM050_DR_25HZ 6
#define BMM050_DR_30HZ 7
/*user defined Structures*/
struct bmm050_mdata {
BMM050_S16 datax;
BMM050_S16 datay;
BMM050_S16 dataz;
BMM050_U16 resistance;
};
struct bmm050_mdata_s32 {
BMM050_S32 datax;
BMM050_S32 datay;
BMM050_S32 dataz;
BMM050_U16 resistance;
};
struct bmm050_mdata_float {
float datax;
float datay;
float dataz;
BMM050_U16 resistance;
};
struct bmm050 {
unsigned char company_id;
unsigned char dev_addr;
BMM050_WR_FUNC_PTR;
BMM050_RD_FUNC_PTR;
void(*delay_msec)(BMM050_MDELAY_DATA_TYPE);
signed char dig_x1;
signed char dig_y1;
signed char dig_x2;
signed char dig_y2;
BMM050_U16 dig_z1;
BMM050_S16 dig_z2;
BMM050_S16 dig_z3;
BMM050_S16 dig_z4;
unsigned char dig_xy1;
signed char dig_xy2;
BMM050_U16 dig_xyz1;
};
BMM050_RETURN_FUNCTION_TYPE bmm050_init(struct bmm050 *p_bmm050);
BMM050_RETURN_FUNCTION_TYPE bmm050_read_mdataXYZ(
struct bmm050_mdata *mdata);
BMM050_RETURN_FUNCTION_TYPE bmm050_read_mdataXYZ_s32(
struct bmm050_mdata_s32 *mdata);
#ifdef ENABLE_FLOAT
BMM050_RETURN_FUNCTION_TYPE bmm050_read_mdataXYZ_float(
struct bmm050_mdata_float *mdata);
#endif
BMM050_RETURN_FUNCTION_TYPE bmm050_read_register(
unsigned char addr, unsigned char *data, unsigned char len);
BMM050_RETURN_FUNCTION_TYPE bmm050_write_register(
unsigned char addr, unsigned char *data, unsigned char len);
BMM050_RETURN_FUNCTION_TYPE bmm050_get_self_test_XYZ(
unsigned char *self_testxyz);
BMM050_S16 bmm050_compensate_X(
BMM050_S16 mdata_x, BMM050_U16 data_R);
BMM050_S32 bmm050_compensate_X_s32(
BMM050_S16 mdata_x, BMM050_U16 data_R);
#ifdef ENABLE_FLOAT
float bmm050_compensate_X_float(
BMM050_S16 mdata_x, BMM050_U16 data_R);
#endif
BMM050_S16 bmm050_compensate_Y(
BMM050_S16 mdata_y, BMM050_U16 data_R);
BMM050_S32 bmm050_compensate_Y_s32(
BMM050_S16 mdata_y, BMM050_U16 data_R);
#ifdef ENABLE_FLOAT
float bmm050_compensate_Y_float(
BMM050_S16 mdata_y, BMM050_U16 data_R);
#endif
BMM050_S16 bmm050_compensate_Z(
BMM050_S16 mdata_z, BMM050_U16 data_R);
BMM050_S32 bmm050_compensate_Z_s32(
BMM050_S16 mdata_z, BMM050_U16 data_R);
#ifdef ENABLE_FLOAT
float bmm050_compensate_Z_float(
BMM050_S16 mdata_z, BMM050_U16 data_R);
#endif
BMM050_RETURN_FUNCTION_TYPE bmm050_get_raw_xyz(
struct bmm050_mdata *mdata);
BMM050_RETURN_FUNCTION_TYPE bmm050_init_trim_registers(void);
BMM050_RETURN_FUNCTION_TYPE bmm050_set_spi3(
unsigned char value);
BMM050_RETURN_FUNCTION_TYPE bmm050_get_powermode(
unsigned char *mode);
BMM050_RETURN_FUNCTION_TYPE bmm050_set_powermode(
unsigned char mode);
BMM050_RETURN_FUNCTION_TYPE bmm050_set_adv_selftest(
unsigned char adv_selftest);
BMM050_RETURN_FUNCTION_TYPE bmm050_get_adv_selftest(
unsigned char *adv_selftest);
BMM050_RETURN_FUNCTION_TYPE bmm050_set_datarate(
unsigned char data_rate);
BMM050_RETURN_FUNCTION_TYPE bmm050_get_datarate(
unsigned char *data_rate);
BMM050_RETURN_FUNCTION_TYPE bmm050_set_functional_state(
unsigned char functional_state);
BMM050_RETURN_FUNCTION_TYPE bmm050_get_functional_state(
unsigned char *functional_state);
BMM050_RETURN_FUNCTION_TYPE bmm050_set_selftest(
unsigned char selftest);
BMM050_RETURN_FUNCTION_TYPE bmm050_get_selftest(
unsigned char *selftest);
BMM050_RETURN_FUNCTION_TYPE bmm050_perform_advanced_selftest(
BMM050_S16 *diff_z);
BMM050_RETURN_FUNCTION_TYPE bmm050_get_repetitions_XY(
unsigned char *no_repetitions_xy);
BMM050_RETURN_FUNCTION_TYPE bmm050_set_repetitions_XY(
unsigned char no_repetitions_xy);
BMM050_RETURN_FUNCTION_TYPE bmm050_get_repetitions_Z(
unsigned char *no_repetitions_z);
BMM050_RETURN_FUNCTION_TYPE bmm050_set_repetitions_Z(
unsigned char no_repetitions_z);
BMM050_RETURN_FUNCTION_TYPE bmm050_get_presetmode(unsigned char *mode);
BMM050_RETURN_FUNCTION_TYPE bmm050_set_presetmode(unsigned char mode);
BMM050_RETURN_FUNCTION_TYPE bmm050_set_control_measurement_x(
unsigned char enable_disable);
BMM050_RETURN_FUNCTION_TYPE bmm050_set_control_measurement_y(
unsigned char enable_disable);
BMM050_RETURN_FUNCTION_TYPE bmm050_soft_reset(void);
#endif