Subversion Repositories EDIS_Ignition

Rev

Rev 18 | Rev 21 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. #include "main.h"
  2. #include "libBMP280/bmp280.h"
  3. /* USER CODE BEGIN PV */
  4. typedef struct
  5. {
  6.   uint8_t dev_addr;
  7. } interface_t;
  8.  
  9. // interface code
  10. /// pointer to I2C hardware
  11. static I2C_HandleTypeDef *hi2c;
  12.  
  13. /// @brief  Generic I2C write function
  14. /// @param i2c_addr I2C address
  15. /// @param reg_addr I2C register address
  16. /// @param reg_data pointer to data buffer to send
  17. /// @param len  length of data to send
  18. /// @return
  19. static int8_t
  20. user_i2c_write(uint8_t i2c_addr, uint8_t reg_addr, uint8_t *reg_data,
  21.                uint16_t len)
  22. {
  23.   HAL_StatusTypeDef st = HAL_I2C_Mem_Write(hi2c, i2c_addr << 1, reg_addr, 1,
  24.                                            reg_data, len, 1000);
  25.  
  26.   return st != HAL_OK ? BMP280_E_COMM_FAIL : BMP280_OK;
  27. }
  28.  
  29. /// @brief  Generic I2C read function
  30. /// @param i2c_addr I2C address
  31. /// @param reg_addr I2C register address
  32. /// @param reg_data pointer to data buffer to fill
  33. /// @param len  length of data to receive
  34. /// @return status code
  35. static int8_t
  36. user_i2c_read(uint8_t i2c_addr,
  37.               uint8_t reg_addr,
  38.               uint8_t *reg_data,
  39.               uint16_t len)
  40. {
  41.   HAL_StatusTypeDef st = HAL_I2C_Mem_Read(hi2c, i2c_addr << 1, reg_addr, 1,
  42.                                           reg_data, len, 1000);
  43.  
  44.   return st != HAL_OK ? BMP280_E_COMM_FAIL : BMP280_OK;
  45. }
  46.  
  47. static void
  48. user_delay_ms(uint32_t ms)
  49. {
  50.   HAL_Delay(ms);
  51. }
  52.  
  53. struct bmp280_dev bmp =
  54.     {
  55.         .intf = BMP280_I2C_INTF,
  56.         .read = user_i2c_read,
  57.         .write = user_i2c_write,
  58.         .delay_ms = user_delay_ms,
  59.  
  60.         /* Update interface pointer with the structure that contains both device address and file descriptor */
  61.         .dev_id = BMP280_I2C_ADDR_PRIM};
  62.  
  63. struct bmp280_dev bmpAtm =
  64.    {
  65.         .intf = BMP280_I2C_INTF,
  66.         .read = user_i2c_read,
  67.         .write = user_i2c_write,
  68.         .delay_ms = user_delay_ms,
  69.  
  70.         /* Update interface pointer with the structure that contains both device address and file descriptor */
  71.         .dev_id = BMP280_I2C_ADDR_SEC};
  72.  
  73. struct bmp280_config conf;
  74.  
  75. uint8_t init_bmp(I2C_HandleTypeDef *i2c,struct bmp280_dev * bmp)
  76. {
  77.   // copy the I2c handle over
  78.   hi2c = i2c;
  79.   int8_t rslt = bmp280_init(bmp);
  80.   if (rslt != BMP280_OK)
  81.     return rslt;
  82.  
  83.   rslt = bmp280_get_config(&conf, bmp);
  84.   if (rslt != BMP280_OK)
  85.     return rslt;
  86.   /* configuring the temperature oversampling, filter coefficient and output data rate */
  87.   /* Overwrite the desired settings */
  88.   conf.filter = BMP280_FILTER_COEFF_4;
  89.  
  90.   /* Temperature oversampling set at 1x */
  91.   conf.os_temp = BMP280_OS_1X;
  92.  
  93.   /* Pressure over sampling 4x */
  94.   conf.os_pres = BMP280_OS_4X;
  95.  
  96.   /* Setting the output data rate as 8HZ(500ms) */
  97.   conf.odr = BMP280_ODR_125_MS;
  98.   rslt = bmp280_set_config(&conf, bmp);
  99.   if (rslt != BMP280_OK)
  100.     return rslt;
  101.  
  102.   /* Always set the power mode after setting the configuration */
  103.   rslt = bmp280_set_power_mode(BMP280_NORMAL_MODE, bmp);
  104.   return rslt;
  105. }
  106.