📄 smb380.h
字号:
#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))
/** \brief SMB380 data structure to write data to the one dedicated address in eeprom
*/
typedef struct {
unsigned char addr;
unsigned char data;
}write_ee;
#if 1
/** \brief SMB380 data structure to read data from one dedicated address
*/
typedef struct {
unsigned char addr;
unsigned char len;
}read_reg;
/** \brief SMB380 data structure to write data to one dedicated address
*/
typedef struct {
unsigned char addr;
unsigned char len;
unsigned char *data;
}write_reg;
#endif
/** \brief SMB380 data structure to set x,y,z or temperature data to dedicated offset address
*/
typedef struct {
unsigned char xyzt;
unsigned short offset;
}set_offset;
/** SMB380 acceleration data structure
\brief Register type that contains x,y,z axises data
*/
typedef struct {
short x, /**< holds x-axis acceleration data sign extended. Range -512 to 511. */
y, /**< holds y-axis acceleration data sign extended. Range -512 to 511. */
z; /**< holds z-axis acceleration data sign extended. Range -512 to 511. */
} smb380acc_t;
/* Function prototypes */
extern "C" __declspec(dllexport) int smb380_set_image (smb380regs_t *);
extern "C" __declspec(dllexport) int smb380_get_image(smb380regs_t *);
extern "C" __declspec(dllexport) int smb380_get_offset(unsigned char, unsigned short *);
extern "C" __declspec(dllexport) int smb380_set_offset(unsigned char, unsigned short );
extern "C" __declspec(dllexport) int smb380_set_offset_eeprom(unsigned char, unsigned short);
extern "C" __declspec(dllexport) int smb380_soft_reset(void);
extern "C" __declspec(dllexport) int smb380_update_image(void);
extern "C" __declspec(dllexport) int smb380_write_ee(unsigned char , unsigned char ) ;
extern "C" __declspec(dllexport) int smb380_set_ee_w(unsigned char);
extern "C" __declspec(dllexport) int smb380_selftest(unsigned char);
extern "C" __declspec(dllexport) int smb380_get_selftest_result(unsigned char *);
extern "C" __declspec(dllexport) int smb380_set_range(char);
extern "C" __declspec(dllexport) int smb380_get_range(unsigned char*);
extern "C" __declspec(dllexport) int smb380_set_mode(unsigned char);
extern "C" __declspec(dllexport) int smb380_get_mode(unsigned char *);
extern "C" __declspec(dllexport) int smb380_set_wake_up_pause(unsigned char);
extern "C" __declspec(dllexport) int smb380_get_wake_up_pause(unsigned char *);
extern "C" __declspec(dllexport) int smb380_set_bandwidth(char);
extern "C" __declspec(dllexport) int smb380_get_bandwidth(unsigned char *);
extern "C" __declspec(dllexport) int smb380_set_low_g_threshold(unsigned char);
extern "C" __declspec(dllexport) int smb380_get_low_g_threshold(unsigned char*);
extern "C" __declspec(dllexport) int smb380_set_low_g_hysteresis(unsigned char);
extern "C" __declspec(dllexport) int smb380_set_low_g_countdown(unsigned char);
extern "C" __declspec(dllexport) int smb380_get_low_g_countdown(unsigned char *);
extern "C" __declspec(dllexport) int smb380_get_low_g_hysteresis(unsigned char*);
extern "C" __declspec(dllexport) int smb380_set_low_g_duration(unsigned char);
extern "C" __declspec(dllexport) int smb380_get_low_g_duration(unsigned char*);
extern "C" __declspec(dllexport) int smb380_set_high_g_threshold(unsigned char);
extern "C" __declspec(dllexport) int smb380_get_high_g_threshold(unsigned char*);
extern "C" __declspec(dllexport) int smb380_set_high_g_hysteresis(unsigned char);
extern "C" __declspec(dllexport) int smb380_set_high_g_countdown(unsigned char);
extern "C" __declspec(dllexport) int smb380_get_high_g_countdown(unsigned char *);
extern "C" __declspec(dllexport) int smb380_get_high_g_hysteresis(unsigned char*);
extern "C" __declspec(dllexport) int smb380_set_high_g_duration(unsigned char);
extern "C" __declspec(dllexport) int smb380_get_high_g_duration(unsigned char*);
extern "C" __declspec(dllexport) int smb380_set_any_motion_threshold(unsigned char);
extern "C" __declspec(dllexport) int smb380_get_any_motion_threshold(unsigned char*);
extern "C" __declspec(dllexport) int smb380_set_any_motion_count(unsigned char);
extern "C" __declspec(dllexport) int smb380_get_any_motion_count(unsigned char *);
extern "C" __declspec(dllexport) int smb380_read_accel_x(short *);
extern "C" __declspec(dllexport) int smb380_read_accel_y(short *);
extern "C" __declspec(dllexport) int smb380_read_accel_z(short *);
extern "C" __declspec(dllexport) int smb380_read_temperature(unsigned char*);
extern "C" __declspec(dllexport) int smb380_read_accel_xyzt(smb380acc_t *);
extern "C" __declspec(dllexport) int smb380_get_interrupt_status(unsigned char *);
extern "C" __declspec(dllexport) int smb380_reset_interrupt(void);
extern "C" __declspec(dllexport) int smb380_set_interrupt_mask(unsigned char);
extern "C" __declspec(dllexport) int smb380_get_interrupt_mask(unsigned char *);
extern "C" __declspec(dllexport) int smb380_set_low_g_int(unsigned char);
extern "C" __declspec(dllexport) int smb380_set_high_g_int(unsigned char);
extern "C" __declspec(dllexport) int smb380_set_any_motion_int(unsigned char);
extern "C" __declspec(dllexport) int smb380_set_alert_int(unsigned char);
extern "C" __declspec(dllexport) int smb380_set_advanced_int(unsigned char);
extern "C" __declspec(dllexport) int smb380_latch_int(unsigned char);
extern "C" __declspec(dllexport) int smb380_set_new_data_int(unsigned char onoff);
extern "C" __declspec(dllexport) int smb380_pause(int);
extern "C" __declspec(dllexport) int smb380_read_reg(read_reg *reg, unsigned char *data);
extern "C" __declspec(dllexport) int smb380_write_reg(unsigned char , unsigned char*, unsigned char );
extern "C" __declspec(dllexport) int i2c_bus_write(unsigned char dev_addr, unsigned char reg_addr, unsigned char * data, unsigned char datasize);
extern "C" __declspec(dllexport) int i2c_bus_read(unsigned char dev_addr, unsigned char reg_addr, unsigned char * data, unsigned char datasize);
extern "C" __declspec(dllexport) int spi_bus_write(unsigned char dev_addr, unsigned char reg_addr, unsigned char * data, unsigned char datasize);
extern "C" __declspec(dllexport) int spi_bus_read(unsigned char dev_addr, unsigned char reg_addr, unsigned char * data, unsigned char datasize);
extern "C" __declspec(dllexport) int smb380_wait_interrupt(unsigned char *mask);
extern "C" __declspec(dllexport) int smb380_deinit();
extern "C" __declspec(dllexport) int smb380_init();
#endif // __SMB380_H__
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -