LCOV - code coverage report
Current view: top level - SITL - SIM_BattMonitor_SMBus_Generic.cpp (source / functions) Hit Total Coverage
Test: lcov.info Lines: 76 80 95.0 %
Date: 2026-09-09 11:02:08 Functions: 3 3 100.0 %

          Line data    Source code
       1             : #include "SIM_BattMonitor_SMBus_Generic.h"
       2             : 
       3        6435 : SITL::SIM_BattMonitor_SMBus_Generic::SIM_BattMonitor_SMBus_Generic() :
       4        6435 :     SIM_BattMonitor_SMBus()
       5             : {
       6             : 
       7        6435 :     const char *manufacturer_name = "sitl_smbus_generic";
       8        6435 :     set_block(SMBusBattDevReg::MANUFACTURE_NAME, manufacturer_name);
       9             : 
      10        6435 : }
      11             : 
      12        6282 : void SITL::SIM_BattMonitor_SMBus_Generic::init()
      13             : {
      14        6282 :     switch (cellcount()) {
      15        2094 :     case 14:
      16        2094 :         add_register("Cell14", SMBusBattGenericDevReg::CELL14, SITL::I2CRegisters::RegMode::RDONLY);
      17             :         FALLTHROUGH;
      18        2094 :     case 13:
      19        2094 :         add_register("Cell13", SMBusBattGenericDevReg::CELL13, SITL::I2CRegisters::RegMode::RDONLY);
      20             :         FALLTHROUGH;
      21        4188 :     case 12:
      22        4188 :         add_register("Cell12", SMBusBattGenericDevReg::CELL12, SITL::I2CRegisters::RegMode::RDONLY);
      23             :         FALLTHROUGH;
      24        4188 :     case 11:
      25        4188 :         add_register("Cell11", SMBusBattGenericDevReg::CELL11, SITL::I2CRegisters::RegMode::RDONLY);
      26             :         FALLTHROUGH;
      27        4188 :     case 10:
      28        4188 :         add_register("Cell10", SMBusBattGenericDevReg::CELL10, SITL::I2CRegisters::RegMode::RDONLY);
      29             :         FALLTHROUGH;
      30        4188 :     case 9:
      31        4188 :         add_register("Cell9", SMBusBattGenericDevReg::CELL9, SITL::I2CRegisters::RegMode::RDONLY);
      32             :         FALLTHROUGH;
      33        4188 :     case 8:
      34        4188 :         add_register("Cell8", SMBusBattGenericDevReg::CELL8, SITL::I2CRegisters::RegMode::RDONLY);
      35             :         FALLTHROUGH;
      36        4188 :     case 7:
      37        4188 :         add_register("Cell7", SMBusBattGenericDevReg::CELL7, SITL::I2CRegisters::RegMode::RDONLY);
      38             :         FALLTHROUGH;
      39        4188 :     case 6:
      40        4188 :         add_register("Cell6", SMBusBattGenericDevReg::CELL6, SITL::I2CRegisters::RegMode::RDONLY);
      41             :         FALLTHROUGH;
      42        4188 :     case 5:
      43        4188 :         add_register("Cell5", SMBusBattGenericDevReg::CELL5, SITL::I2CRegisters::RegMode::RDONLY);
      44             :         FALLTHROUGH;
      45        4188 :     case 4:
      46        4188 :         add_register("Cell4", SMBusBattGenericDevReg::CELL4, SITL::I2CRegisters::RegMode::RDONLY);
      47             :         FALLTHROUGH;
      48        6282 :     case 3:
      49        6282 :         add_register("Cell3", SMBusBattGenericDevReg::CELL3, SITL::I2CRegisters::RegMode::RDONLY);
      50             :         FALLTHROUGH;
      51        6282 :     case 2:
      52        6282 :         add_register("Cell2", SMBusBattGenericDevReg::CELL2, SITL::I2CRegisters::RegMode::RDONLY);
      53             :         FALLTHROUGH;
      54        6282 :     case 1:
      55        6282 :         add_register("Cell1", SMBusBattGenericDevReg::CELL1, SITL::I2CRegisters::RegMode::RDONLY);
      56        6282 :         return;
      57           0 :     default:
      58           0 :         AP_HAL::panic("Bad cellcount %u", cellcount());
      59             :     }
      60             : }
      61             : 
      62   536279826 : void SITL::SIM_BattMonitor_SMBus_Generic::update(const class Aircraft &aircraft)
      63             : {
      64   536279826 :     SIM_BattMonitor_SMBus::update(aircraft);
      65             : 
      66             :     // pretend to have three cells connected
      67   536279826 :     const float millivolts = aircraft.get_battery_voltage() * 1000.0f;
      68   536279826 :     uint16_t value_even = -1;
      69   536279826 :     uint16_t value_odd = -1;
      70   536279826 :     const uint8_t _connected_cells = connected_cells();
      71   536279826 :     if (millivolts > 0) {
      72   536279823 :         const float volts_per_cell = millivolts/float(_connected_cells);
      73   536279823 :         value_even = uint16_t(volts_per_cell - 100.0f);
      74   536279823 :         value_odd = uint16_t(volts_per_cell + 100.0f);
      75             :     }
      76   536279826 :     switch (_connected_cells) {
      77   178759942 :     case 14:
      78   178759942 :         set_register(SMBusBattGenericDevReg::CELL14, value_even);
      79             :         FALLTHROUGH;
      80   178759942 :     case 13:
      81   178759942 :         set_register(SMBusBattGenericDevReg::CELL13, value_odd);
      82             :         FALLTHROUGH;
      83   178759942 :     case 12:
      84   178759942 :         set_register(SMBusBattGenericDevReg::CELL12, value_even);
      85             :         FALLTHROUGH;
      86   178759942 :     case 11:
      87   178759942 :         set_register(SMBusBattGenericDevReg::CELL11, value_odd);
      88             :         FALLTHROUGH;
      89   178759942 :     case 10:
      90   178759942 :         set_register(SMBusBattGenericDevReg::CELL10, value_even);
      91             :         FALLTHROUGH;
      92   178759942 :     case 9:
      93   178759942 :         set_register(SMBusBattGenericDevReg::CELL9, value_odd);
      94             :         FALLTHROUGH;
      95   178759942 :     case 8:
      96   178759942 :         set_register(SMBusBattGenericDevReg::CELL8, value_even);
      97             :         FALLTHROUGH;
      98   178759942 :     case 7:
      99   178759942 :         set_register(SMBusBattGenericDevReg::CELL7, value_odd);
     100             :         FALLTHROUGH;
     101   178759942 :     case 6:
     102   178759942 :         set_register(SMBusBattGenericDevReg::CELL6, value_even);
     103             :         FALLTHROUGH;
     104   178759942 :     case 5:
     105   178759942 :         set_register(SMBusBattGenericDevReg::CELL5, value_odd);
     106             :         FALLTHROUGH;
     107   178759942 :     case 4:
     108   178759942 :         set_register(SMBusBattGenericDevReg::CELL4, value_even);
     109             :         FALLTHROUGH;
     110   536279826 :     case 3:
     111   536279826 :         set_register(SMBusBattGenericDevReg::CELL3, value_odd);
     112             :         FALLTHROUGH;
     113   536279826 :     case 2:
     114   536279826 :         set_register(SMBusBattGenericDevReg::CELL2, value_even);
     115             :         FALLTHROUGH;
     116   536279826 :     case 1:
     117   536279826 :         set_register(SMBusBattGenericDevReg::CELL1, value_odd);
     118   536279826 :         return;
     119           0 :     default:
     120           0 :         AP_HAL::panic("Bad connected_cellcount %u", _connected_cells);
     121             :     }
     122             : }

Generated by: LCOV version 1.14