예제 #1
0
/* 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;
}
예제 #2
0
/* 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;
}
예제 #3
0
// [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;
}
예제 #4
0
/* 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;
}
예제 #5
0
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;
}
예제 #6
0
/* 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;
}
예제 #7
0
/* 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;
}
예제 #8
0
/* 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;
}
예제 #9
0
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;
}
예제 #10
0
/* 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;
}
예제 #11
0
/* 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;
}