Line data Source code
1 : #pragma once 2 : 3 : #include "SIM_I2CDevice.h" 4 : 5 : namespace SITL { 6 : 7 : class SMBusRegEnum : public I2CRegEnum { 8 : }; 9 : 10 : class SMBusDevice : public I2CDevice, private I2CRegisters_16Bit { 11 : public: 12 : 13 6435 : SMBusDevice() : 14 : I2CDevice(), 15 6435 : I2CRegisters_16Bit() 16 6435 : { } 17 : 18 3579676604 : void set_register(uint8_t reg, uint16_t value) { 19 3579676604 : I2CRegisters_16Bit::set_register(reg, value); 20 3579676604 : } 21 4574081 : void set_register(uint8_t reg, int16_t value) { 22 4574081 : I2CRegisters_16Bit::set_register(reg, value); 23 4574081 : } 24 : 25 147797 : uint16_t get_reg_value(uint8_t reg) { 26 147797 : return I2CRegisters_16Bit::get_reg_value(reg); 27 : } 28 : 29 : 30 : protected: 31 : 32 : int rdwr(I2C::i2c_rdwr_ioctl_data *&data) override; 33 : 34 : void set_block(uint8_t block, uint8_t *value, uint8_t valuelen); 35 : void add_block(const char *name, uint8_t reg, I2CRegisters::RegMode mode); 36 : 37 34320 : void set_block(uint8_t block, const char *value) { 38 34320 : set_block(block, (uint8_t*)value, strlen(value)); 39 34320 : } 40 : 41 140091 : void add_register(const char *name, uint8_t reg, I2CRegisters::RegMode mode) { 42 140091 : I2CRegisters_16Bit::add_register(name, reg, mode); 43 140091 : } 44 : 45 : private: 46 : 47 : const char *blockname[256]; 48 : Bitmask<256> writable_blocks; 49 : Bitmask<256> readable_blocks; 50 : 51 : // 256 pointers-to-malloced-values: 52 : char *values[256]; 53 : uint8_t value_lengths[256]; 54 : }; 55 : 56 : } // namespace SITL