boschsensortec / BMI270_SensorAPI

This respository contains Bosch Sensortec's BMI270 inertial measurement unit's sensor API. To report issues, go to https://community.bosch-sensortec.com/t5/Bosch-Sensortec-Community/ct-p/bst_community
BSD 3-Clause "New" or "Revised" License
67 stars 52 forks source link

function "bmi2_write_config_file" issue #9

Open qqhengg opened 3 years ago

qqhengg commented 3 years ago

image

bmi270_defs.h:

  /*! @name BMI2 configuration load status */
  #define BMI2_CONFIG_LOAD_SUCCESS                  UINT8_C(1)

  /******************************************************************************/
  /*! @name       Macro Definitions for internal status                 */
  /******************************************************************************/
  #define BMI2_NOT_INIT                             UINT8_C(0x00)
  #define BMI2_INIT_OK                              UINT8_C(0x01)
  #define BMI2_INIT_ERR                             UINT8_C(0x02)
  #define BMI2_DRV_ERR                              UINT8_C(0x03)
  #define BMI2_SNS_STOP                             UINT8_C(0x04)
  #define BMI2_NVM_ERROR                            UINT8_C(0x05)
  #define BMI2_START_UP_ERROR                       UINT8_C(0x06)
  #define BMI2_COMPAT_ERROR                         UINT8_C(0x07)
  #define BMI2_VFM_SKIPPED                          UINT8_C(0x10)
  #define BMI2_AXES_MAP_ERROR                       UINT8_C(0x20)
  #define BMI2_ODR_50_HZ_ERROR                      UINT8_C(0x40)
  #define BMI2_ODR_HIGH_ERROR                       UINT8_C(0x80)

bmi2.c:

  int8_t bmi2_write_config_file(struct bmi2_dev *dev)
  {
      ...

          /* Write the configuration file */
          rslt = write_config_file(dev);
          if (rslt == BMI2_OK)
          {
              /* Check the configuration load status */
              rslt = bmi2_get_internal_status(&load_status, dev);

              /* Return error if loading not successful */
              if ((rslt == BMI2_OK) && (!(load_status & BMI2_CONFIG_LOAD_SUCCESS)))    //**bug here???!!!!**
              {
                  rslt = BMI2_E_CONFIG_LOAD;
              }
          }

      ...

      return rslt;
  }

As we can see the description of register INTERNAL_STATUS above, it's not hard to know that the "if condition" should be:

  /* Return error if loading not successful */
  if ((rslt == BMI2_OK) && ((load_status & 0x0f) != BMI2_INIT_OK))  //correction!!!
  {
        rslt = BMI2_E_CONFIG_LOAD;
  }

Thanks!!!