https://wiki.seeedstudio.com/Grove-3-Axis_Digitial_Compass_v2.0/ for mbed

Revision:
0:d000153cc719
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bmm150_defs.h	Mon Dec 21 11:51:20 2020 +0000
@@ -0,0 +1,295 @@
+#ifndef _BMM150_DEFS_H_
+#define _BMM150_DEFS_H_
+
+#include "mbed.h"
+
+
+/**\name Macro definitions */
+
+/**\name API success code */
+#define BMM150_OK	(0)
+
+/**\name API error codes */
+#define BMM150_E_ID_NOT_CONFORM		    (-1)
+#define BMM150_E_INVALID_CONFIG         (-2)
+// #define BMM150_E_ID_WRONG		    (-3)
+
+/**\name API warning codes */
+#define BMM150_W_NORMAL_SELF_TEST_YZ_FAIL	INT8_C(1)
+#define BMM150_W_NORMAL_SELF_TEST_XZ_FAIL	INT8_C(2)
+#define BMM150_W_NORMAL_SELF_TEST_Z_FAIL	INT8_C(3)
+#define BMM150_W_NORMAL_SELF_TEST_XY_FAIL	INT8_C(4)
+#define BMM150_W_NORMAL_SELF_TEST_Y_FAIL	INT8_C(5)
+#define BMM150_W_NORMAL_SELF_TEST_X_FAIL	INT8_C(6)
+#define BMM150_W_NORMAL_SELF_TEST_XYZ_FAIL	INT8_C(7)
+#define BMM150_W_ADV_SELF_TEST_FAIL		INT8_C(8)
+
+#define BMM150_I2C_Address  0x13 << 1
+
+/**\name CHIP ID & SOFT RESET VALUES      */
+#define BMM150_CHIP_ID              0x32
+#define BMM150_SET_SOFT_RESET		0x82
+
+/**\name POWER MODE DEFINTIONS      */
+#define BMM150_NORMAL_MODE		0x00
+#define BMM150_FORCED_MODE		0x01
+#define BMM150_SLEEP_MODE		0x03
+#define BMM150_SUSPEND_MODE		0x04
+
+/**\name PRESET MODE DEFINITIONS  */
+#define BMM150_PRESETMODE_LOWPOWER                 0x01
+#define BMM150_PRESETMODE_REGULAR                  0x02
+#define BMM150_PRESETMODE_HIGHACCURACY             0x03
+#define BMM150_PRESETMODE_ENHANCED                 0x04
+
+/**\name Power mode settings  */
+#define	BMM150_POWER_CNTRL_DISABLE	0x00
+#define	BMM150_POWER_CNTRL_ENABLE	0x01
+
+/**\name Sensor delay time settings  */
+#define BMM150_SOFT_RESET_DELAY		(1)
+#define BMM150_NORMAL_SELF_TEST_DELAY	(2)
+#define BMM150_START_UP_TIME		(3)
+#define BMM150_ADV_SELF_TEST_DELAY	(4)
+
+/**\name ENABLE/DISABLE DEFINITIONS  */
+#define BMM150_XY_CHANNEL_ENABLE	0x00
+#define BMM150_XY_CHANNEL_DISABLE	0x03
+
+/**\name Register Address */
+#define BMM150_CHIP_ID_ADDR		    0x40
+#define BMM150_DATA_X_LSB		    0x42
+#define BMM150_DATA_X_MSB		    0x43
+#define BMM150_DATA_Y_LSB		    0x44
+#define BMM150_DATA_Y_MSB		    0x45
+#define BMM150_DATA_Z_LSB		    0x46
+#define BMM150_DATA_Z_MSB		    0x47
+#define BMM150_DATA_READY_STATUS	0x48
+#define BMM150_INTERRUPT_STATUS		0x4A
+#define BMM150_POWER_CONTROL_ADDR	0x4B
+#define BMM150_OP_MODE_ADDR		    0x4C
+#define BMM150_INT_CONFIG_ADDR		0x4D
+#define BMM150_AXES_ENABLE_ADDR		0x4E
+#define BMM150_LOW_THRESHOLD_ADDR	0x4F
+#define BMM150_HIGH_THRESHOLD_ADDR	0x50
+#define BMM150_REP_XY_ADDR		    0x51
+#define BMM150_REP_Z_ADDR		    0x52
+
+/**\name DATA RATE DEFINITIONS  */
+#define BMM150_DATA_RATE_10HZ        (0x00)
+#define BMM150_DATA_RATE_02HZ        (0x01)
+#define BMM150_DATA_RATE_06HZ        (0x02)
+#define BMM150_DATA_RATE_08HZ        (0x03)
+#define BMM150_DATA_RATE_15HZ        (0x04)
+#define BMM150_DATA_RATE_20HZ        (0x05)
+#define BMM150_DATA_RATE_25HZ        (0x06)
+#define BMM150_DATA_RATE_30HZ        (0x07)
+
+/**\name TRIM REGISTERS      */
+/* Trim Extended Registers */
+#define BMM150_DIG_X1               UINT8_C(0x5D)
+#define BMM150_DIG_Y1               UINT8_C(0x5E)
+#define BMM150_DIG_Z4_LSB           UINT8_C(0x62)
+#define BMM150_DIG_Z4_MSB           UINT8_C(0x63)
+#define BMM150_DIG_X2               UINT8_C(0x64)
+#define BMM150_DIG_Y2               UINT8_C(0x65)
+#define BMM150_DIG_Z2_LSB           UINT8_C(0x68)
+#define BMM150_DIG_Z2_MSB           UINT8_C(0x69)
+#define BMM150_DIG_Z1_LSB           UINT8_C(0x6A)
+#define BMM150_DIG_Z1_MSB           UINT8_C(0x6B)
+#define BMM150_DIG_XYZ1_LSB         UINT8_C(0x6C)
+#define BMM150_DIG_XYZ1_MSB         UINT8_C(0x6D)
+#define BMM150_DIG_Z3_LSB           UINT8_C(0x6E)
+#define BMM150_DIG_Z3_MSB           UINT8_C(0x6F)
+#define BMM150_DIG_XY2              UINT8_C(0x70)
+#define BMM150_DIG_XY1              UINT8_C(0x71)
+
+/**\name PRESET MODES - REPETITIONS-XY RATES */
+#define BMM150_LOWPOWER_REPXY                    (1)
+#define BMM150_REGULAR_REPXY                     (4)
+#define BMM150_ENHANCED_REPXY                    (7)
+#define BMM150_HIGHACCURACY_REPXY                (23)
+
+/**\name PRESET MODES - REPETITIONS-Z RATES */
+#define BMM150_LOWPOWER_REPZ                     (2)
+#define BMM150_REGULAR_REPZ                      (14)
+#define BMM150_ENHANCED_REPZ                     (26)
+#define BMM150_HIGHACCURACY_REPZ                 (82)
+
+/**\name Macros for bit masking */
+#define	BMM150_PWR_CNTRL_MSK		(0x01)
+
+#define	BMM150_CONTROL_MEASURE_MSK	(0x38)
+#define	BMM150_CONTROL_MEASURE_POS	(0x03)
+
+#define BMM150_POWER_CONTROL_BIT_MSK	(0x01)
+#define BMM150_POWER_CONTROL_BIT_POS	(0x00)
+
+#define BMM150_OP_MODE_MSK		(0x06)
+#define BMM150_OP_MODE_POS		(0x01)
+
+#define BMM150_ODR_MSK			(0x38)
+#define BMM150_ODR_POS			(0x03)
+
+#define BMM150_DATA_X_MSK		(0xF8)
+#define BMM150_DATA_X_POS		(0x03)
+
+#define BMM150_DATA_Y_MSK		(0xF8)
+#define BMM150_DATA_Y_POS		(0x03)
+
+#define BMM150_DATA_Z_MSK		(0xFE)
+#define BMM150_DATA_Z_POS		(0x01)
+
+#define BMM150_DATA_RHALL_MSK		(0xFC)
+#define BMM150_DATA_RHALL_POS		(0x02)
+
+#define	BMM150_SELF_TEST_MSK		(0x01)
+
+#define	BMM150_ADV_SELF_TEST_MSK	(0xC0)
+#define	BMM150_ADV_SELF_TEST_POS	(0x06)
+
+#define	BMM150_DRDY_EN_MSK		(0x80)
+#define	BMM150_DRDY_EN_POS		(0x07)
+
+#define	BMM150_INT_PIN_EN_MSK		(0x40)
+#define	BMM150_INT_PIN_EN_POS		(0x06)
+
+#define	BMM150_DRDY_POLARITY_MSK	(0x04)
+#define	BMM150_DRDY_POLARITY_POS	(0x02)
+
+#define	BMM150_INT_LATCH_MSK		(0x02)
+#define	BMM150_INT_LATCH_POS		(0x01)
+
+#define	BMM150_INT_POLARITY_MSK		(0x01)
+
+#define	BMM150_DATA_OVERRUN_INT_MSK	(0x80)
+#define	BMM150_DATA_OVERRUN_INT_POS	(0x07)
+
+#define	BMM150_OVERFLOW_INT_MSK		(0x40)
+#define	BMM150_OVERFLOW_INT_POS		(0x06)
+
+#define	BMM150_HIGH_THRESHOLD_INT_MSK	(0x38)
+#define	BMM150_HIGH_THRESHOLD_INT_POS	(0x03)
+
+#define	BMM150_LOW_THRESHOLD_INT_MSK	(0x07)
+
+#define	BMM150_DRDY_STATUS_MSK		(0x01)
+
+/**\name OVERFLOW DEFINITIONS  */
+#define BMM150_XYAXES_FLIP_OVERFLOW_ADCVAL	(-4096)
+#define BMM150_ZAXIS_HALL_OVERFLOW_ADCVAL	  (-16384)
+#define BMM150_OVERFLOW_OUTPUT			        (-32768)
+#define BMM150_NEGATIVE_SATURATION_Z        (-32767)
+#define BMM150_POSITIVE_SATURATION_Z        (32767)
+#ifdef BMM150_USE_FLOATING_POINT
+    #define BMM150_OVERFLOW_OUTPUT_FLOAT		0.0f
+#endif
+
+/**\name Register read lengths	*/
+#define BMM150_SELF_TEST_LEN			(5)
+#define BMM150_SETTING_DATA_LEN			(8)
+#define BMM150_XYZR_DATA_LEN			(8)
+
+/**\name Self test selection macros */
+#define BMM150_NORMAL_SELF_TEST			(0)
+#define BMM150_ADVANCED_SELF_TEST		(1)
+
+/**\name Self test settings */
+#define BMM150_DISABLE_XY_AXIS			(0x03)
+#define BMM150_SELF_TEST_REP_Z			(0x04)
+
+/**\name Advanced self-test current settings */
+#define BMM150_DISABLE_SELF_TEST_CURRENT	(0x00)
+#define BMM150_ENABLE_NEGATIVE_CURRENT		(0x02)
+#define BMM150_ENABLE_POSITIVE_CURRENT		(0x03)
+
+/**\name Normal self-test status */
+#define BMM150_SELF_TEST_STATUS_XYZ_FAIL	(0x00)
+#define BMM150_SELF_TEST_STATUS_SUCCESS		(0x07)
+
+/**\name Macro to SET and GET BITS of a register*/
+#define BMM150_SET_BITS(reg_data, bitname, data) \
+    ((reg_data & ~(bitname##_MSK)) | \
+     ((data << bitname##_POS) & bitname##_MSK))
+
+#define BMM150_GET_BITS(reg_data, bitname)  ((reg_data & (bitname##_MSK)) >> \
+        (bitname##_POS))
+
+#define BMM150_SET_BITS_POS_0(reg_data, bitname, data) \
+    ((reg_data & ~(bitname##_MSK)) | \
+     (data & bitname##_MSK))
+
+#define BMM150_GET_BITS_POS_0(reg_data, bitname)  (reg_data & (bitname##_MSK))
+
+
+struct bmm150_mag_data {
+    int16_t x;
+    int16_t y;
+    int16_t z;
+};
+
+/*
+    @brief bmm150 un-compensated (raw) magnetometer data
+*/
+struct bmm150_raw_mag_data {
+    /*! Raw mag X data */
+    int16_t raw_datax;
+    /*! Raw mag Y data */
+    int16_t raw_datay;
+    /*! Raw mag Z data */
+    int16_t raw_dataz;
+    /*! Raw mag resistance value */
+    uint16_t raw_data_r;
+};
+
+/*!
+    @brief bmm150 trim data structure
+*/
+struct bmm150_trim_registers {
+    /*! trim x1 data */
+    int8_t dig_x1;
+    /*! trim y1 data */
+    int8_t dig_y1;
+    /*! trim x2 data */
+    int8_t dig_x2;
+    /*! trim y2 data */
+    int8_t dig_y2;
+    /*! trim z1 data */
+    uint16_t dig_z1;
+    /*! trim z2 data */
+    int16_t dig_z2;
+    /*! trim z3 data */
+    int16_t dig_z3;
+    /*! trim z4 data */
+    int16_t dig_z4;
+    /*! trim xy1 data */
+    uint8_t dig_xy1;
+    /*! trim xy2 data */
+    int8_t dig_xy2;
+    /*! trim xyz1 data */
+    uint16_t dig_xyz1;
+};
+
+/**
+    @brief bmm150 sensor settings
+*/
+struct bmm150_settings {
+    /*! Control measurement of XYZ axes */
+    uint8_t xyz_axes_control;
+    /*! Power control bit value */
+    uint8_t pwr_cntrl_bit;
+    /*! Power control bit value */
+    uint8_t pwr_mode;
+    /*! Data rate value (ODR) */
+    uint8_t data_rate;
+    /*! XY Repetitions */
+    uint8_t xy_rep;
+    /*! Z Repetitions */
+    uint8_t z_rep;
+    /*! Preset mode of sensor */
+    uint8_t preset_mode;
+    /*! Interrupt configuration settings */
+    // struct bmm150_int_ctrl_settings int_settings;
+};
+
+#endif
\ No newline at end of file