📄 smb380.h
字号:
#define LG_THRES__POS 0
#define LG_THRES__LEN 8
#define LG_THRES__MSK 0xFF
#define LG_THRES__REG LG_THRESHOLD_REG
#define HG_THRES__POS 0
#define HG_THRES__LEN 8
#define HG_THRES__MSK 0xFF
#define HG_THRES__REG HG_THRESHOLD_REG
#define LG_HYST__POS 0
#define LG_HYST__LEN 3
#define LG_HYST__MSK 0x07
#define LG_HYST__REG HYSTERESIS_REG
#define HG_HYST__POS 3
#define HG_HYST__LEN 3
#define HG_HYST__MSK 0x38
#define HG_HYST__REG HYSTERESIS_REG
/* ANY MOTION and ALERT settings */
#define EN_ANY_MOTION__POS 6
#define EN_ANY_MOTION__LEN 1
#define EN_ANY_MOTION__MSK 0x40
#define EN_ANY_MOTION__REG SMB380_CONF1_REG
/* ALERT settings */
#define ALERT__POS 7
#define ALERT__LEN 1
#define ALERT__MSK 0x80
#define ALERT__REG SMB380_CONF1_REG
/* ANY MOTION Duration */
#define ANY_MOTION_THRES__POS 0
#define ANY_MOTION_THRES__LEN 8
#define ANY_MOTION_THRES__MSK 0xFF
#define ANY_MOTION_THRES__REG MOTION_THRS_REG
#define ANY_MOTION_DUR__POS 6
#define ANY_MOTION_DUR__LEN 2
#define ANY_MOTION_DUR__MSK 0xC0
#define ANY_MOTION_DUR__REG HYSTERESIS_REG
#define CUSTOMER_RESERVED1__POS 0
#define CUSTOMER_RESERVED1__LEN 8
#define CUSTOMER_RESERVED1__MSK 0xFF
#define CUSTOMER_RESERVED1__REG CUSTOMER1_REG
#define CUSTOMER_RESERVED2__POS 0
#define CUSTOMER_RESERVED2__LEN 8
#define CUSTOMER_RESERVED2__MSK 0xFF
#define CUSTOMER_RESERVED2__REG CUSTOMER2_REG
/* BANDWIDTH dependend definitions */
#define BANDWIDTH__POS 0
#define BANDWIDTH__LEN 3
#define BANDWIDTH__MSK 0x07
#define BANDWIDTH__REG RANGE_BWIDTH_REG
/* RANGE */
#define RANGE__POS 3
#define RANGE__LEN 2
#define RANGE__MSK 0x18
#define RANGE__REG RANGE_BWIDTH_REG
/* WAKE UP */
#define WAKE_UP__POS 0
#define WAKE_UP__LEN 1
#define WAKE_UP__MSK 0x01
#define WAKE_UP__REG SMB380_CONF2_REG
#define WAKE_UP_PAUSE__POS 1
#define WAKE_UP_PAUSE__LEN 2
#define WAKE_UP_PAUSE__MSK 0x06
#define WAKE_UP_PAUSE__REG SMB380_CONF2_REG
/* ACCELERATION DATA SHADOW */
#define SHADOW_DIS__POS 3
#define SHADOW_DIS__LEN 1
#define SHADOW_DIS__MSK 0x08
#define SHADOW_DIS__REG SMB380_CONF2_REG
/* LATCH Interrupt */
#define LATCH_INT__POS 4
#define LATCH_INT__LEN 1
#define LATCH_INT__MSK 0x10
#define LATCH_INT__REG SMB380_CONF2_REG
/* new data interrupt */
#define NEW_DATA_INT__POS 5
#define NEW_DATA_INT__LEN 1
#define NEW_DATA_INT__MSK 0x20
#define NEW_DATA_INT__REG SMB380_CONF2_REG
#define ENABLE_ADV_INT__POS 6
#define ENABLE_ADV_INT__LEN 1
#define ENABLE_ADV_INT__MSK 0x40
#define ENABLE_ADV_INT__REG SMB380_CONF2_REG
#define SMB380_SPI4_OFF 0
#define SMB380_SPI4_ON 1
#define SPI4__POS 7
#define SPI4__LEN 1
#define SPI4__MSK 0x80
#define SPI4__REG SMB380_CONF2_REG
#define OFFSET_X_LSB__POS 6
#define OFFSET_X_LSB__LEN 2
#define OFFSET_X_LSB__MSK 0xC0
#define OFFSET_X_LSB__REG OFFS_GAIN_X_REG
#define GAIN_X__POS 0
#define GAIN_X__LEN 6
#define GAIN_X__MSK 0x3f
#define GAIN_X__REG OFFS_GAIN_X_REG
#define OFFSET_Y_LSB__POS 6
#define OFFSET_Y_LSB__LEN 2
#define OFFSET_Y_LSB__MSK 0xC0
#define OFFSET_Y_LSB__REG OFFS_GAIN_Y_REG
#define GAIN_Y__POS 0
#define GAIN_Y__LEN 6
#define GAIN_Y__MSK 0x3f
#define GAIN_Y__REG OFFS_GAIN_Y_REG
#define OFFSET_Z_LSB__POS 6
#define OFFSET_Z_LSB__LEN 2
#define OFFSET_Z_LSB__MSK 0xC0
#define OFFSET_Z_LSB__REG OFFS_GAIN_Z_REG
#define GAIN_Z__POS 0
#define GAIN_Z__LEN 6
#define GAIN_Z__MSK 0x3f
#define GAIN_Z__REG OFFS_GAIN_Z_REG
#define OFFSET_T_LSB__POS 6
#define OFFSET_T_LSB__LEN 2
#define OFFSET_T_LSB__MSK 0xC0
#define OFFSET_T_LSB__REG OFFS_GAIN_T_REG
#define GAIN_T__POS 0
#define GAIN_T__LEN 6
#define GAIN_T__MSK 0x3f
#define GAIN_T__REG OFFS_GAIN_T_REG
#define OFFSET_X_MSB__POS 0
#define OFFSET_X_MSB__LEN 8
#define OFFSET_X_MSB__MSK 0xFF
#define OFFSET_X_MSB__REG OFFSET_X_REG
#define OFFSET_Y_MSB__POS 0
#define OFFSET_Y_MSB__LEN 8
#define OFFSET_Y_MSB__MSK 0xFF
#define OFFSET_Y_MSB__REG OFFSET_Y_REG
#define OFFSET_Z_MSB__POS 0
#define OFFSET_Z_MSB__LEN 8
#define OFFSET_Z_MSB__MSK 0xFF
#define OFFSET_Z_MSB__REG OFFSET_Z_REG
#define OFFSET_T_MSB__POS 0
#define OFFSET_T_MSB__LEN 8
#define OFFSET_T_MSB__MSK 0xFF
#define OFFSET_T_MSB__REG OFFSET_T_REG
#define SMB380_GET_BITSLICE(regvar, bitname)\
(regvar & bitname##__MSK) >> bitname##__POS
#define SMB380_SET_BITSLICE(regvar, bitname, val)\
(regvar & ~bitname##__MSK) | ((val<<bitname##__POS)&bitname##__MSK)
/** \endcond */
/* CONSTANTS */
/* range and bandwidth */
#define SMB380_RANGE_2G 0 /**< sets range to 2G mode \see smb380_set_range() */
#define SMB380_RANGE_4G 1 /**< sets range to 4G mode \see smb380_set_range() */
#define SMB380_RANGE_8G 2 /**< sets range to 8G mode \see smb380_set_range() */
#define SMB380_BW_25HZ 0 /**< sets bandwidth to 25HZ \see smb380_set_bandwidth() */
#define SMB380_BW_50HZ 1 /**< sets bandwidth to 50HZ \see smb380_set_bandwidth() */
#define SMB380_BW_100HZ 2 /**< sets bandwidth to 100HZ \see smb380_set_bandwidth() */
#define SMB380_BW_190HZ 3 /**< sets bandwidth to 190HZ \see smb380_set_bandwidth() */
#define SMB380_BW_375HZ 4 /**< sets bandwidth to 375HZ \see smb380_set_bandwidth() */
#define SMB380_BW_750HZ 5 /**< sets bandwidth to 750HZ \see smb380_set_bandwidth() */
#define SMB380_BW_1500HZ 6 /**< sets bandwidth to 1500HZ \see smb380_set_bandwidth() */
/* mode settings */
#define SMB380_MODE_NORMAL 0
#define SMB380_MODE_SLEEP 2
#define SMB380_MODE_WAKE_UP 3
/* wake up */
#define SMB380_WAKE_UP_PAUSE_20MS 0
#define SMB380_WAKE_UP_PAUSE_80MS 1
#define SMB380_WAKE_UP_PAUSE_320MS 2
#define SMB380_WAKE_UP_PAUSE_2560MS 3
/* LG/HG thresholds are in LSB and depend on RANGE setting */
/* no range check on threshold calculation */
#define SMB380_SELF_TEST0_ON 1
#define SMB380_SELF_TEST1_ON 3
#define SMB380_EE_W_OFF 0
#define SMB380_EE_W_ON 1
/* low-g, high-g, any_motion */
#define SMB380_COUNTER_LG_RST 0
#define SMB380_COUNTER_LG_0LSB SMB380_COUNTER_LG_RST
#define SMB380_COUNTER_LG_1LSB 1
#define SMB380_COUNTER_LG_2LSB 2
#define SMB380_COUNTER_LG_3LSB 3
#define SMB380_COUNTER_HG_RST 0
#define SMB380_COUNTER_HG_0LSB SMB380_COUNTER_HG_RST
#define SMB380_COUNTER_HG_1LSB 1
#define SMB380_COUNTER_HG_2LSB 2
#define SMB380_COUNTER_HG_3LSB 3
#define SMB380_COUNTER_RST 0
#define SMB380_COUNTER_0LSB SMB380_COUNTER_RST
#define SMB380_COUNTER_1LSB 1
#define SMB380_COUNTER_2LSB 2
#define SMB380_COUNTER_3LSB 3
/** Macro to convert floating point low-g-thresholds in G to 8-bit register values.<br>
* Example: SMB380_LG_THRES_IN_G( 0.3, 2.0) generates the register value for 0.3G threshold in 2G mode.
* \brief convert g-values to 8-bit value
*/
#define SMB380_LG_THRES_IN_G( gthres, range) ((256 * gthres ) / range)
/** Macro to convert floating point high-g-thresholds in G to 8-bit register values.<br>
* Example: SMB380_HG_THRES_IN_G( 1.4, 2.0) generates the register value for 1.4G threshold in 2G mode.
* \brief convert g-values to 8-bit value
*/
#define SMB380_HG_THRES_IN_G(gthres, range) ((256 * gthres ) / range)
/** Macro to convert floating point low-g-hysteresis in G to 8-bit register values.<br>
* Example: SMB380_LG_HYST_THRES_IN_G( 0.2, 2.0) generates the register value for 0.2G threshold in 2G mode.
* \brief convert g-values to 8-bit value
*/
#define SMB380_LG_HYST_IN_G( ghyst, range ) ((32 * ghyst) / range)
/** Macro to convert floating point high-g-hysteresis in G to 8-bit register values.<br>
* Example: SMB380_HG_HYST_THRES_IN_G( 0.2, 2.0) generates the register value for 0.2G threshold in 2G mode.
* \brief convert g-values to 8-bit value
*/
#define SMB380_HG_HYST_IN_G( ghyst, range ) ((32 * ghyst) / range)
/** Macro to convert floating point G-thresholds to 8-bit register values<br>
* Example: SMB380_ANY_MOTION_THRES_IN_G( 1.2, 2.0) generates the register value for 1.2G threshold in 2G mode.
* \brief convert g-values to 8-bit value
*/
#define SMB380_ANY_MOTION_THRES_IN_G( gthres, range) ((128 * gthres ) / range)
#define SMB380_ANY_MOTION_DUR_1 0
#define SMB380_ANY_MOTION_DUR_3 1
#define SMB380_ANY_MOTION_DUR_5 2
#define SMB380_ANY_MOTION_DUR_7 3
#define SMB380_SHADOW_DIS_OFF 0
#define SMB380_SHADOW_DIS_ON 1
#define SMB380_LATCH_INT_OFF 0
#define SMB380_LATCH_INT_ON 1
#define SMB380_NEW_DATA_INT_OFF 0
#define SMB380_NEW_DATA_INT_ON 1
#define SMB380_ENABLE_ADV_INT_OFF 0
#define SMB380_ENABLE_ADV_INT_ON 1
#define SMB380_EN_ANY_MOTION_OFF 0
#define SMB380_EN_ANY_MOTION_ON 1
#define SMB380_ALERT_OFF 0
#define SMB380_ALERT_ON 1
#define SMB380_ENABLE_LG_OFF 0
#define SMB380_ENABLE_LG_ON 1
#define SMB380_ENABLE_HG_OFF 0
#define SMB380_ENABLE_HG_ON 1
#define SMB380_INT_ALERT (1<<7)
#define SMB380_INT_ANY_MOTION (1<<6)
#define SMB380_INT_EN_ADV_INT (1<<5)
#define SMB380_INT_NEW_DATA (1<<4)
#define SMB380_INT_LATCH (1<<3)
#define SMB380_INT_HG (1<<1)
#define SMB380_INT_LG (1<<0)
#define SMB380_INT_STATUS_HG (1<<0)
#define SMB380_INT_STATUS_LG (1<<1)
#define SMB380_INT_STATUS_HG_LATCHED (1<<2)
#define SMB380_INT_STATUS_LG_LATCHED (1<<3)
#define SMB380_INT_STATUS_ALERT (1<<4)
#define SMB380_INT_STATUS_ST_RESULT (1<<7)
#define SMB380_CONF1_INT_MSK ((1<<ALERT__POS) | (1<<EN_ANY_MOTION__POS) | (1<<ENABLE_HG__POS) | (1<<ENABLE_LG__POS))
#define SMB380_CONF2_INT_MSK ((1<<ENABLE_ADV_INT__POS) | (1<<NEW_DATA_INT__POS) | (1<<LATCH_INT__POS))
/* Function prototypes */
int smb380_init(smb380_t *);
int smb380_set_image (smb380regs_t *);
int smb380_get_image(smb380regs_t *);
int smb380_get_offset(unsigned char, unsigned short *);
int smb380_set_offset(unsigned char, unsigned short );
int smb380_set_offset_eeprom(unsigned char, unsigned short);
int smb380_soft_reset(void);
int smb380_update_image(void);
int smb380_write_ee(unsigned char , unsigned char ) ;
int smb380_set_ee_w(unsigned char);
int smb380_selftest(unsigned char);
int smb380_get_selftest_result(unsigned char *);
int smb380_set_range(char);
int smb380_get_range(unsigned char*);
int smb380_set_mode(unsigned char);
unsigned char smb380_get_mode(void);
int smb380_set_wake_up_pause(unsigned char);
int smb380_get_wake_up_pause(unsigned char *);
int smb380_set_bandwidth(char);
int smb380_get_bandwidth(unsigned char *);
int smb380_set_low_g_threshold(unsigned char);
int smb380_get_low_g_threshold(unsigned char*);
int smb380_set_low_g_hysteresis(unsigned char);
int smb380_set_low_g_countdown(unsigned char);
int smb380_get_low_g_countdown(unsigned char *);
int smb380_get_low_g_hysteresis(unsigned char*);
int smb380_set_low_g_duration(unsigned char);
int smb380_get_low_g_duration(unsigned char*);
int smb380_set_high_g_threshold(unsigned char);
int smb380_get_high_g_threshold(unsigned char*);
int smb380_set_high_g_hysteresis(unsigned char);
int smb380_set_high_g_countdown(unsigned char);
int smb380_get_high_g_countdown(unsigned char *);
int smb380_get_high_g_hysteresis(unsigned char*);
int smb380_set_high_g_duration(unsigned char);
int smb380_get_high_g_duration(unsigned char*);
int smb380_set_any_motion_threshold(unsigned char);
int smb380_get_any_motion_threshold(unsigned char*);
int smb380_set_any_motion_count(unsigned char);
int smb380_get_any_motion_count(unsigned char *);
int smb380_read_accel_x(short *);
int smb380_read_accel_y(short *);
int smb380_read_accel_z(short *);
int smb380_read_temperature(unsigned char*);
int smb380_read_accel_xyz(smb380acc_t *);
int smb380_get_interrupt_status(unsigned char *);
int smb380_reset_interrupt(void);
int smb380_set_interrupt_mask(unsigned char);
int smb380_get_interrupt_mask(unsigned char *);
int smb380_set_low_g_int(unsigned char);
int smb380_set_high_g_int(unsigned char);
int smb380_set_any_motion_int(unsigned char);
int smb380_set_alert_int(unsigned char);
int smb380_set_advanced_int(unsigned char);
int smb380_latch_int(unsigned char);
int smb380_set_new_data_int(unsigned char onoff);
int smb380_pause(int);
int smb380_read_reg(unsigned char , unsigned char *, unsigned char);
int smb380_write_reg(unsigned char , unsigned char*, unsigned char );
#endif // __SMB380_H__
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -