LCOV - code coverage report
Current view: top level - AP_Baro - AP_Baro_MS5611.h (source / functions) Hit Total Coverage
Test: lcov.info Lines: 3 11 27.3 %
Date: 2026-09-09 11:02:08 Functions: 3 11 27.3 %

          Line data    Source code
       1             : #pragma once
       2             : 
       3             : #include "AP_Baro_Backend.h"
       4             : 
       5             : #if AP_BARO_MS56XX_ENABLED
       6             : 
       7             : #include <AP_HAL/AP_HAL.h>
       8             : #include <AP_HAL/Semaphores.h>
       9             : #include <AP_HAL/Device.h>
      10             : 
      11             : #ifndef HAL_BARO_MS5611_I2C_ADDR
      12             : #define HAL_BARO_MS5611_I2C_ADDR 0x77
      13             : #endif
      14             : 
      15             : #ifndef HAL_BARO_MS5611_I2C_ADDR2
      16             : #define HAL_BARO_MS5611_I2C_ADDR2 0x76
      17             : #endif
      18             : 
      19             : #ifndef HAL_BARO_MS5607_I2C_ADDR
      20             : #define HAL_BARO_MS5607_I2C_ADDR 0x77
      21             : #endif
      22             : 
      23             : #ifndef HAL_BARO_MS5837_I2C_ADDR
      24             : #define HAL_BARO_MS5837_I2C_ADDR 0x76
      25             : #endif
      26             : 
      27             : #ifndef HAL_BARO_MS5637_I2C_ADDR
      28             : #define HAL_BARO_MS5637_I2C_ADDR 0x76
      29             : #endif
      30             : 
      31             : #if AP_BARO_MS5837_ENABLED
      32             : // Determined in https://github.com/ArduPilot/ardupilot/pull/29122#issuecomment-2877269114
      33             : #define MS5837_30BA_02BA_SELECTION_THRESHOLD 37000
      34             : #endif
      35             : 
      36             : class AP_Baro_MS56XX : public AP_Baro_Backend
      37             : {
      38             : public:
      39             :     void update() override;
      40             : 
      41             :     AP_Baro_MS56XX(AP_Baro &baro, AP_HAL::Device &dev);
      42             : 
      43             : protected:
      44             : 
      45             :     // convenience methods for derivative classes to call.  Will free
      46             :     // sensor if it can't init it.
      47             :     static AP_Baro_Backend *_probe(AP_Baro &baro, AP_Baro_MS56XX *sensor);
      48             : 
      49             :     virtual bool _init();
      50             : 
      51             :     bool _read_prom_5611(uint16_t prom[8]);
      52             :     bool _read_prom_5637(uint16_t prom[8]);
      53             : 
      54             :     virtual const char *name() const = 0;
      55             :     virtual DevTypes devtype() const = 0;
      56             : 
      57             :     uint8_t _instance;
      58             : 
      59             :     /* Last compensated values from accumulated sample */
      60             :     float _D1, _D2;
      61             : 
      62             :     // Internal calibration registers
      63             :     struct {
      64             :         uint16_t c1, c2, c3, c4, c5, c6;
      65             :     } _cal_reg;
      66             : 
      67             : private:
      68             : 
      69             :     static AP_Baro_Backend *probe(AP_Baro &baro, AP_HAL::Device &dev);
      70             : 
      71             :     /*
      72             :      * Update @accum and @count with the new sample in @val, taking into
      73             :      * account a maximum number of samples given by @max_count; in case
      74             :      * maximum number is reached, @accum and @count are updated appropriately
      75             :      */
      76             :     static void _update_and_wrap_accumulator(uint32_t *accum, uint32_t val,
      77             :                                              uint8_t *count, uint8_t max_count);
      78             : 
      79             :     uint16_t _read_prom_word(uint8_t word);
      80             :     uint32_t _read_adc();
      81             : 
      82             :     void _timer();
      83             : 
      84             :     AP_HAL::Device *_dev;
      85             : 
      86             :     /* Shared values between thread sampling the HW and main thread */
      87             :     struct {
      88             :         uint32_t s_D1;
      89             :         uint32_t s_D2;
      90             :         uint8_t d1_count;
      91             :         uint8_t d2_count;
      92             :     } _accum;
      93             : 
      94             :     uint8_t _state;
      95             : 
      96             :     bool _discard_next;
      97             : 
      98             :     virtual bool _read_prom(uint16_t *prom) = 0;
      99             :     virtual void _calculate() = 0;
     100             : };
     101             : 
     102             : #if AP_BARO_MS5607_ENABLED
     103             : class AP_Baro_MS5607 : public AP_Baro_MS56XX
     104             : {
     105             : public:
     106             :     using AP_Baro_MS56XX::AP_Baro_MS56XX;
     107             :     static AP_Baro_Backend *probe(AP_Baro &baro, AP_HAL::Device &dev);
     108             : protected:
     109           0 :     const char *name() const override { return "MS5607"; }
     110           0 :     bool _read_prom(uint16_t *prom) override { return _read_prom_5611(prom); }
     111           0 :     DevTypes devtype() const override { return DEVTYPE_BARO_MS5607; }
     112             :     void _calculate() override;
     113             : };
     114             : #endif  // AP_BARO_MS5607_ENABLED
     115             : 
     116             : #if AP_BARO_MS5611_ENABLED
     117             : class AP_Baro_MS5611 : public AP_Baro_MS56XX
     118             : {
     119             : public:
     120             :     using AP_Baro_MS56XX::AP_Baro_MS56XX;
     121             :     static AP_Baro_Backend *probe(AP_Baro &baro, AP_HAL::Device &dev);
     122             : protected:
     123           1 :     const char *name() const override { return "MS5611"; }
     124          83 :     bool _read_prom(uint16_t *prom) override { return _read_prom_5611(prom); }
     125           1 :     DevTypes devtype() const override { return DEVTYPE_BARO_MS5611; }
     126             :     void _calculate() override;
     127             : };
     128             : #endif  // AP_BARO_MS5611_ENABLED
     129             : 
     130             : #if AP_BARO_MS5637_ENABLED
     131             : class AP_Baro_MS5637 : public AP_Baro_MS56XX
     132             : {
     133             : public:
     134             :     using AP_Baro_MS56XX::AP_Baro_MS56XX;
     135             :     static AP_Baro_Backend *probe(AP_Baro &baro, AP_HAL::Device &dev);
     136             : protected:
     137           0 :     const char *name() const override { return "MS5637"; }
     138           0 :     bool _read_prom(uint16_t *prom) override { return _read_prom_5637(prom); }
     139           0 :     DevTypes devtype() const override { return DEVTYPE_BARO_MS5637; }
     140             :     void _calculate() override;
     141             : };
     142             : #endif  // AP_BARO_MS5637_ENABLED
     143             : 
     144             : #if AP_BARO_MS5837_ENABLED
     145             : class AP_Baro_MS5837 : public AP_Baro_MS56XX
     146             : {
     147             : public:
     148             :     using AP_Baro_MS56XX::AP_Baro_MS56XX;
     149             :     static AP_Baro_Backend *probe(AP_Baro &baro, AP_HAL::Device &dev);
     150             : protected:
     151           0 :     const char *name() const override { return "MS5837"; }
     152           0 :     bool _read_prom(uint16_t *prom) override { return _read_prom_5637(prom); }
     153             :     DevTypes devtype() const override;
     154             :     bool _init() override;
     155             :     void _calculate() override;
     156             :     void _calculate_5837_02ba();
     157             :     void _calculate_5837_30ba();
     158             : 
     159             :     DevTypes _subtype;
     160             : };
     161             : #endif  // AP_BARO_MS5837_ENABLED
     162             : 
     163             : #endif  // AP_BARO_MS56XX_ENABLED

Generated by: LCOV version 1.14