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

          Line data    Source code
       1             : #include "SIM_config.h"
       2             : 
       3             : #if AP_SIM_IS31FL3195_ENABLED
       4             : 
       5             : #include "SIM_IS31FL3195.h"
       6             : 
       7             : using namespace SITL;
       8             : 
       9             : #include <stdio.h>
      10             : 
      11        2094 : void IS31FL3195::init()
      12             : {
      13        2094 :     add_register("PRODUCT_ID", IS31FL3195DevReg::PRODUCT_ID, I2CRegisters::RegMode::RDONLY);
      14        2094 :     add_register("SHUTDOWN_CONTROL", IS31FL3195DevReg::SHUTDOWN_CONTROL, I2CRegisters::RegMode::RDWR);
      15             : 
      16        2094 :     add_register("P1_STATE", IS31FL3195DevReg::P1_STATE, I2CRegisters::RegMode::RDONLY);
      17        2094 :     add_register("P2_STATE", IS31FL3195DevReg::P2_STATE, I2CRegisters::RegMode::RDWR);
      18        2094 :     add_register("P3_STATE", IS31FL3195DevReg::P3_STATE, I2CRegisters::RegMode::RDWR);
      19        2094 :     add_register("P4_STATE", IS31FL3195DevReg::P4_STATE, I2CRegisters::RegMode::RDWR);
      20        2094 :     add_register("COLOUR_UPDATE", IS31FL3195DevReg::COLOUR_UPDATE, I2CRegisters::RegMode::WRONLY);
      21             : 
      22        2094 :     add_register("OUT1", IS31FL3195DevReg::OUT1, I2CRegisters::RegMode::WRONLY);
      23        2094 :     add_register("OUT2", IS31FL3195DevReg::OUT2, I2CRegisters::RegMode::WRONLY);
      24        2094 :     add_register("OUT3", IS31FL3195DevReg::OUT3, I2CRegisters::RegMode::WRONLY);
      25        2094 :     add_register("OUT4", IS31FL3195DevReg::OUT4, I2CRegisters::RegMode::WRONLY);
      26             : 
      27        2094 :     add_register("RESET_REGISTER", IS31FL3195DevReg::RESET_REGISTER, I2CRegisters::RegMode::WRONLY);
      28             : 
      29             :     // set_register(IS31FL3195DevReg::GENERAL_PURPOSE, 0b00000000);
      30             : 
      31        2094 :     reset_registers();
      32             : 
      33        2094 :     rgbled.init();
      34        2094 : }
      35             : 
      36     1460084 : void IS31FL3195::rdwr_store_register_value(uint8_t reg, uint8_t value)
      37             : {
      38     1460084 :     if (reg == IS31FL3195DevReg::COLOUR_UPDATE && value == 0xc5) {
      39      363974 :         colour_update_register_poked = true;
      40             :     }
      41     1460084 :     I2CRegisters_8Bit::rdwr_store_register_value(reg, value);
      42     1460084 : }
      43             : 
      44     1464272 : int IS31FL3195::rdwr(I2C::i2c_rdwr_ioctl_data *&data) {
      45     1464272 :     return I2CRegisters_8Bit::rdwr(data);
      46             : }
      47             : 
      48        2094 : void IS31FL3195::set_product_id(uint8_t product_id)
      49             : {
      50        2094 :     set_register(IS31FL3195DevReg::PRODUCT_ID, uint8_t(product_id << 1U));
      51        2094 : }
      52             : 
      53             : 
      54        4103 : void IS31FL3195::reset_registers()
      55             : {
      56             :     // see page 11 of datasheet for reset states
      57        4103 :     set_register(IS31FL3195DevReg::SHUTDOWN_CONTROL, (uint8_t)0b11110000);
      58             : 
      59        4103 :     set_register(IS31FL3195DevReg::P1_STATE, (uint8_t)0);
      60        4103 :     set_register(IS31FL3195DevReg::P2_STATE, (uint8_t)0);
      61        4103 :     set_register(IS31FL3195DevReg::P3_STATE, (uint8_t)0);
      62        4103 :     set_register(IS31FL3195DevReg::P4_STATE, (uint8_t)0);
      63             : 
      64        4103 :     set_register(IS31FL3195DevReg::OUT1, (uint8_t)0);
      65        4103 :     set_register(IS31FL3195DevReg::OUT2, (uint8_t)0);
      66        4103 :     set_register(IS31FL3195DevReg::OUT3, (uint8_t)0);
      67        4103 :     set_register(IS31FL3195DevReg::OUT4, (uint8_t)0);
      68             : 
      69        4103 :     set_register(IS31FL3195DevReg::RESET_REGISTER, (uint8_t)0);
      70        4103 : }
      71             : 
      72   178759942 : void IS31FL3195::update(const class Aircraft &aircraft)
      73             : {
      74   178759942 :     if (get_register(IS31FL3195DevReg::RESET_REGISTER) == 0xC5) {
      75        2009 :         reset_registers();
      76             :     }
      77   178759942 :     if (get_register(IS31FL3195DevReg::SHUTDOWN_CONTROL) == 0xf0) {
      78             :         // in shutdown
      79      206108 :         return;
      80             :     }
      81             : 
      82   178553834 :     if (!colour_update_register_poked) {
      83   178232333 :         return;
      84             :     }
      85      321501 :     colour_update_register_poked = false;
      86             : 
      87      321501 :     const uint8_t red = get_register(IS31FL3195DevReg::OUT1);
      88      321501 :     const uint8_t green = get_register(IS31FL3195DevReg::OUT2);
      89      321501 :     const uint8_t blue = get_register(IS31FL3195DevReg::OUT3);
      90             : 
      91      321501 :     rgbled.set_colours(red, green, blue);
      92             : }
      93             : 
      94             : #endif

Generated by: LCOV version 1.14