/* Scheduling: * * * * Usage guide: * * * Remarks: * ******************************************************************************/ int bma222_get_bandwidth(unsigned char * BW) { int comres = C_Zero_U8X ; unsigned char data; if (p_bma222 == C_Zero_U8X) { comres = E_SMB_NULL_PTR; } else { comres = p_bma222->BMA222_BUS_READ_FUNC(p_bma222->dev_addr, BMA222_BANDWIDTH__REG, &data, C_One_U8X ); data = BMA222_GET_BITSLICE(data, BMA222_BANDWIDTH); if (data <= C_Eight_U8X) { *BW = C_Zero_U8X; } else { if (data >= 0x0F) { *BW = C_Seven_U8X; } else { *BW = data - C_Eight_U8X; } } } return comres; }
/* Scheduling: * * * * Usage guide: * * * Remarks: * ******************************************************************************/ int bma222_init(bma222_t *bma222) { int comres= C_Zero_U8X ; unsigned char data; p_bma222 = bma222; /* assign bma222 ptr */ p_bma222->dev_addr = BMA222_I2C_ADDR; /* preset bma222 I2C_addr */ comres = p_bma222->BMA222_BUS_READ_FUNC(p_bma222->dev_addr, BMA222_CHIP_ID__REG, &data, 1); /* read Chip Id */ p_bma222->chip_id = data ; /* get bitslice */ comres += p_bma222->BMA222_BUS_READ_FUNC(p_bma222->dev_addr, BMA222_ML_VERSION__REG, &data, 1); /* read Version reg */ p_bma222->ml_version = BMA222_GET_BITSLICE(data, BMA222_ML_VERSION); /* get ML Version */ p_bma222->al_version = BMA222_GET_BITSLICE(data, BMA222_AL_VERSION); /* get AL Version */ return comres; }
// [HSS] Support both address ( 0X18(old) and 0X08(new) ) (2010.09.29) int bma222_init(bma222_t *bma222, int bma222_i2c_slave_addr) { int comres= C_Zero_U8X ; unsigned char data; p_bma222 = bma222; /* assign bma222 ptr */ // [HSS] Support both address ( 0X18(old) and 0X08(new) ) (2010.09.29) // p_bma222->dev_addr = BMA222_I2C_ADDR; /* preset bma222 I2C_addr */ p_bma222->dev_addr = bma222_i2c_slave_addr; /* preset bma222 I2C_addr */ comres = p_bma222->BMA222_BUS_READ_FUNC(p_bma222->dev_addr, BMA222_CHIP_ID__REG, &data, 1); /* read Chip Id */ p_bma222->chip_id = data ; /* get bitslice */ comres += p_bma222->BMA222_BUS_READ_FUNC(p_bma222->dev_addr, BMA222_ML_VERSION__REG, &data, 1); /* read Version reg */ p_bma222->ml_version = BMA222_GET_BITSLICE(data, BMA222_ML_VERSION); /* get ML Version */ p_bma222->al_version = BMA222_GET_BITSLICE(data, BMA222_AL_VERSION); /* get AL Version */ return comres; }
/* Scheduling: * * * * Usage guide: * * * Remarks: * ******************************************************************************/ int bma222_get_nvmprog_ready(unsigned char *ready) { int comres; if (p_bma222==C_Zero_U8X) { comres =E_SMB_NULL_PTR ; } else { comres = p_bma222->BMA222_BUS_READ_FUNC(p_bma222->dev_addr, BMA222_EE_PROG_READY__REG,ready, C_One_U8X); *ready = BMA222_GET_BITSLICE(*ready, BMA222_EE_PROG_READY); } return comres; }
int bma222_get_cal_ready(unsigned char *calrdy ) { int comres = C_Zero_U8X ; unsigned char data; if (p_bma222 == C_Zero_U8X) { comres = E_SMB_NULL_PTR; } else { comres = p_bma222->BMA222_BUS_READ_FUNC(p_bma222->dev_addr, BMA222_OFFSET_CTRL_REG, &data, C_One_U8X ); data = BMA222_GET_BITSLICE(data, BMA222_FAST_COMP_RDY_S); *calrdy = data; } return comres; }
/* Scheduling: * * * * Usage guide: * * * Remarks: * ******************************************************************************/ int bma222_get_offset_target_z(unsigned char *offsettarget ) { int comres = C_Zero_U8X ; unsigned char data; if (p_bma222 == C_Zero_U8X) { comres = E_SMB_NULL_PTR; } else { comres = p_bma222->BMA222_BUS_READ_FUNC(p_bma222->dev_addr, BMA222_OFFSET_PARAMS_REG, &data, C_One_U8X ); data = BMA222_GET_BITSLICE(data, BMA222_COMP_TARGET_OFFSET_Z); *offsettarget = data; } return comres; }
/* Scheduling: * * * * Usage guide: * * * Remarks: * ******************************************************************************/ int bma222_get_range(unsigned char * Range ) { int comres = C_Zero_U8X ; unsigned char data; if (p_bma222 == C_Zero_U8X) { comres = E_SMB_NULL_PTR; } else { comres = p_bma222->BMA222_BUS_READ_FUNC(p_bma222->dev_addr, BMA222_RANGE_SEL__REG, &data, C_One_U8X ); data = BMA222_GET_BITSLICE(data, BMA222_RANGE_SEL); *Range = data; } return comres; }
/* Scheduling: * * * * Usage guide: * * * Remarks: * ******************************************************************************/ int bma222_get_Int_Mode(unsigned char * Mode ) { int comres= C_Zero_U8X; unsigned char data1; if (p_bma222 == C_Zero_U8X) { comres = E_SMB_NULL_PTR; } else { comres = p_bma222->BMA222_BUS_READ_FUNC(p_bma222->dev_addr, BMA222_INT_MODE_SEL__REG, &data1, C_One_U8X ); data1 = BMA222_GET_BITSLICE(data1, BMA222_INT_MODE_SEL); *Mode = data1 ; } return comres; }
int bma222_get_eeprom_writing_status(unsigned char *eewrite ) { int comres = C_Zero_U8X ; unsigned char data; if (p_bma222 == C_Zero_U8X) { comres = E_SMB_NULL_PTR; } else { comres = p_bma222->BMA222_BUS_READ_FUNC(p_bma222->dev_addr, BMA222_EEPROM_CTRL_REG, &data, C_One_U8X ); data = BMA222_GET_BITSLICE(data, BMA222_EE_WRITE_SETTING_S); *eewrite = data; } return comres; }
/* Scheduling: * * * * Usage guide: * * * Remarks: * ******************************************************************************/ int bma222_read_accel_z(short *a_z) { int comres=C_Zero_U8X ; unsigned char data[2]; if (p_bma222==C_Zero_U8X) { comres = E_SMB_NULL_PTR; } else { switch (bma222_bitwidth) { case 0: comres = p_bma222->BMA222_BUS_READ_FUNC(p_bma222->dev_addr, BMA222_ACC_Z12_LSB__REG, data, 2); *a_z = BMA222_GET_BITSLICE(data[0],BMA222_ACC_Z12_LSB)| (BMA222_GET_BITSLICE(data[1],BMA222_ACC_Z_MSB)<<(BMA222_ACC_Z12_LSB__LEN)); *a_z = *a_z << (sizeof(short)*8-(BMA222_ACC_Z12_LSB__LEN + BMA222_ACC_Z_MSB__LEN)); *a_z = *a_z >> (sizeof(short)*8-(BMA222_ACC_Z12_LSB__LEN + BMA222_ACC_Z_MSB__LEN)); break; case 1: comres = p_bma222->BMA222_BUS_READ_FUNC(p_bma222->dev_addr, BMA222_ACC_Z10_LSB__REG, data, 2); *a_z = BMA222_GET_BITSLICE(data[0],BMA222_ACC_Z10_LSB)| (BMA222_GET_BITSLICE(data[1],BMA222_ACC_Z_MSB)<<(BMA222_ACC_Z10_LSB__LEN)); *a_z = *a_z << (sizeof(short)*8-(BMA222_ACC_Z10_LSB__LEN + BMA222_ACC_Z_MSB__LEN)); *a_z = *a_z >> (sizeof(short)*8-(BMA222_ACC_Z10_LSB__LEN + BMA222_ACC_Z_MSB__LEN)); break; case 2: comres = p_bma222->BMA222_BUS_READ_FUNC(p_bma222->dev_addr, BMA222_ACC_Z8_LSB__REG, data, 2); *a_z = BMA222_GET_BITSLICE(data[0],BMA222_ACC_Z8_LSB)| (BMA222_GET_BITSLICE(data[1],BMA222_ACC_Z_MSB)<<(BMA222_ACC_Z8_LSB__LEN)); *a_z = *a_z << (sizeof(short)*8-(BMA222_ACC_Z8_LSB__LEN + BMA222_ACC_Z_MSB__LEN)); *a_z = *a_z >> (sizeof(short)*8-(BMA222_ACC_Z8_LSB__LEN + BMA222_ACC_Z_MSB__LEN)); break; case 3: comres = p_bma222->BMA222_BUS_READ_FUNC(p_bma222->dev_addr, BMA222_ACC_Z14_LSB__REG, data, 2); *a_z = BMA222_GET_BITSLICE(data[0],BMA222_ACC_Z14_LSB)| (BMA222_GET_BITSLICE(data[1],BMA222_ACC_Z_MSB)<<(BMA222_ACC_Z14_LSB__LEN)); *a_z = *a_z << (sizeof(short)*8-(BMA222_ACC_Z14_LSB__LEN + BMA222_ACC_Z_MSB__LEN)); *a_z = *a_z >> (sizeof(short)*8-(BMA222_ACC_Z14_LSB__LEN + BMA222_ACC_Z_MSB__LEN)); break; default: break; } } return comres; }
/* Scheduling: * * * * Usage guide: * * * Remarks: * ******************************************************************************/ int bma222_read_accel_xyz(bma222acc_t * acc) { int comres=C_Zero_U8X ; unsigned char data[6]; if (p_bma222==C_Zero_U8X) { comres = E_SMB_NULL_PTR; } else { switch (bma222_bitwidth) { case 0: comres = p_bma222->BMA222_BUS_READ_FUNC(p_bma222->dev_addr, BMA222_ACC_X12_LSB__REG, data, 6); acc->x = BMA222_GET_BITSLICE(data[0],BMA222_ACC_X12_LSB)| (BMA222_GET_BITSLICE(data[1],BMA222_ACC_X_MSB)<<(BMA222_ACC_X12_LSB__LEN)); acc->x = acc->x << (sizeof(short)*8-(BMA222_ACC_X12_LSB__LEN + BMA222_ACC_X_MSB__LEN)); acc->x = acc->x >> (sizeof(short)*8-(BMA222_ACC_X12_LSB__LEN + BMA222_ACC_X_MSB__LEN)); acc->y = BMA222_GET_BITSLICE(data[2],BMA222_ACC_Y12_LSB)| (BMA222_GET_BITSLICE(data[3],BMA222_ACC_Y_MSB)<<(BMA222_ACC_Y12_LSB__LEN )); acc->y = acc->y << (sizeof(short)*8-(BMA222_ACC_Y12_LSB__LEN + BMA222_ACC_Y_MSB__LEN)); acc->y = acc->y >> (sizeof(short)*8-(BMA222_ACC_Y12_LSB__LEN + BMA222_ACC_Y_MSB__LEN)); acc->z = BMA222_GET_BITSLICE(data[4],BMA222_ACC_Z12_LSB)| (BMA222_GET_BITSLICE(data[5],BMA222_ACC_Z_MSB)<<(BMA222_ACC_Z12_LSB__LEN)); acc->z = acc->z << (sizeof(short)*8-(BMA222_ACC_Z12_LSB__LEN + BMA222_ACC_Z_MSB__LEN)); acc->z = acc->z >> (sizeof(short)*8-(BMA222_ACC_Z12_LSB__LEN + BMA222_ACC_Z_MSB__LEN)); break; case 1: comres = p_bma222->BMA222_BUS_READ_FUNC(p_bma222->dev_addr, BMA222_ACC_X10_LSB__REG, data, 6); acc->x = BMA222_GET_BITSLICE(data[0],BMA222_ACC_X10_LSB)| (BMA222_GET_BITSLICE(data[1],BMA222_ACC_X_MSB)<<(BMA222_ACC_X10_LSB__LEN)); acc->x = acc->x << (sizeof(short)*8-(BMA222_ACC_X10_LSB__LEN + BMA222_ACC_X_MSB__LEN)); acc->x = acc->x >> (sizeof(short)*8-(BMA222_ACC_X10_LSB__LEN + BMA222_ACC_X_MSB__LEN)); acc->y = BMA222_GET_BITSLICE(data[2],BMA222_ACC_Y10_LSB)| (BMA222_GET_BITSLICE(data[3],BMA222_ACC_Y_MSB)<<(BMA222_ACC_Y10_LSB__LEN )); acc->y = acc->y << (sizeof(short)*8-(BMA222_ACC_Y10_LSB__LEN + BMA222_ACC_Y_MSB__LEN)); acc->y = acc->y >> (sizeof(short)*8-(BMA222_ACC_Y10_LSB__LEN + BMA222_ACC_Y_MSB__LEN)); acc->z = BMA222_GET_BITSLICE(data[4],BMA222_ACC_Z10_LSB)| (BMA222_GET_BITSLICE(data[5],BMA222_ACC_Z_MSB)<<(BMA222_ACC_Z10_LSB__LEN)); acc->z = acc->z << (sizeof(short)*8-(BMA222_ACC_Z10_LSB__LEN + BMA222_ACC_Z_MSB__LEN)); acc->z = acc->z >> (sizeof(short)*8-(BMA222_ACC_Z10_LSB__LEN + BMA222_ACC_Z_MSB__LEN)); break; case 2: comres = p_bma222->BMA222_BUS_READ_FUNC(p_bma222->dev_addr, BMA222_ACC_X8_LSB__REG, data, 6); acc->x = BMA222_GET_BITSLICE(data[0],BMA222_ACC_X8_LSB)| (BMA222_GET_BITSLICE(data[1],BMA222_ACC_X_MSB)<<(BMA222_ACC_X8_LSB__LEN)); acc->x = acc->x << (sizeof(short)*8-(BMA222_ACC_X8_LSB__LEN + BMA222_ACC_X_MSB__LEN)); acc->x = acc->x >> (sizeof(short)*8-(BMA222_ACC_X8_LSB__LEN + BMA222_ACC_X_MSB__LEN)); acc->y = BMA222_GET_BITSLICE(data[2],BMA222_ACC_Y8_LSB)| (BMA222_GET_BITSLICE(data[3],BMA222_ACC_Y_MSB)<<(BMA222_ACC_Y8_LSB__LEN )); acc->y = acc->y << (sizeof(short)*8-(BMA222_ACC_Y8_LSB__LEN + BMA222_ACC_Y_MSB__LEN)); acc->y = acc->y >> (sizeof(short)*8-(BMA222_ACC_Y8_LSB__LEN + BMA222_ACC_Y_MSB__LEN)); acc->z = BMA222_GET_BITSLICE(data[4],BMA222_ACC_Z8_LSB)| (BMA222_GET_BITSLICE(data[5],BMA222_ACC_Z_MSB)<<(BMA222_ACC_Z8_LSB__LEN)); acc->z = acc->z << (sizeof(short)*8-(BMA222_ACC_Z8_LSB__LEN + BMA222_ACC_Z_MSB__LEN)); acc->z = acc->z >> (sizeof(short)*8-(BMA222_ACC_Z8_LSB__LEN + BMA222_ACC_Z_MSB__LEN)); break; case 3: comres = p_bma222->BMA222_BUS_READ_FUNC(p_bma222->dev_addr, BMA222_ACC_X14_LSB__REG, data, 6); acc->x = BMA222_GET_BITSLICE(data[0],BMA222_ACC_X14_LSB)| (BMA222_GET_BITSLICE(data[1],BMA222_ACC_X_MSB)<<(BMA222_ACC_X14_LSB__LEN)); acc->x = acc->x << (sizeof(short)*8-(BMA222_ACC_X14_LSB__LEN + BMA222_ACC_X_MSB__LEN)); acc->x = acc->x >> (sizeof(short)*8-(BMA222_ACC_X14_LSB__LEN + BMA222_ACC_X_MSB__LEN)); acc->y = BMA222_GET_BITSLICE(data[2],BMA222_ACC_Y14_LSB)| (BMA222_GET_BITSLICE(data[3],BMA222_ACC_Y_MSB)<<(BMA222_ACC_Y14_LSB__LEN )); acc->y = acc->y << (sizeof(short)*8-(BMA222_ACC_Y14_LSB__LEN + BMA222_ACC_Y_MSB__LEN)); acc->y = acc->y >> (sizeof(short)*8-(BMA222_ACC_Y14_LSB__LEN + BMA222_ACC_Y_MSB__LEN)); acc->z = BMA222_GET_BITSLICE(data[4],BMA222_ACC_Z14_LSB)| (BMA222_GET_BITSLICE(data[5],BMA222_ACC_Z_MSB)<<(BMA222_ACC_Z14_LSB__LEN)); acc->z = acc->z << (sizeof(short)*8-(BMA222_ACC_Z14_LSB__LEN + BMA222_ACC_Z_MSB__LEN)); acc->z = acc->z >> (sizeof(short)*8-(BMA222_ACC_Z14_LSB__LEN + BMA222_ACC_Z_MSB__LEN)); break; default: break; } } return comres; }