From 4775b62379209fdee7bd304e7db1972658e4f7a7 Mon Sep 17 00:00:00 2001 From: Beslan Date: Tue, 25 Jan 2022 17:20:02 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A3=D0=BC=D0=B5=D0=BD=D1=8C=D1=88=D0=B8?= =?UTF-8?q?=D0=BB=20=D1=87=D0=B0=D1=81=D1=82=D0=BE=D1=82=D1=83=20=D0=A6?= =?UTF-8?q?=D0=9F.=20=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB=20?= =?UTF-8?q?=D0=BE=D1=81=D1=82=D0=B0=D0=BD=D0=BE=D0=B2=20=D0=B4=D0=B2=D0=B8?= =?UTF-8?q?=D0=B3=D0=B0=D1=82=D0=B5=D0=BB=D0=B5=D0=B9.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- eeprom.cpp | 149 +++++++++++++++++++++++++---------------------------- eeprom.h | 24 ++++----- 2 files changed, 83 insertions(+), 90 deletions(-) diff --git a/eeprom.cpp b/eeprom.cpp index 0f977b3..373aa99 100644 --- a/eeprom.cpp +++ b/eeprom.cpp @@ -48,89 +48,97 @@ EEPROM::EEPROM(PinName sda, PinName scl, uint8_t address, TypeEeprom type) : _i2 _type = type; // Check address range - _address = address; + _address = static_cast(address); switch (type) { case T24C01 : - case T24C02 : - if (address > 7) { + case T24C02 : { + if (address > 7U) { _errnum = EEPROM_BadAddress; } _address = _address << 1; _page_write = 8U; _page_number = 1U; + } break; - case T24C04 : - if (address > 7) { + case T24C04 : { + if (address > 7U) { _errnum = EEPROM_BadAddress; } _address = (_address & 0xFE) << 1; _page_write = 16U; _page_number = 2U; + } break; - case T24C08 : - if (address > 7) { + case T24C08 : { + if (address > 7U) { _errnum = EEPROM_BadAddress; } _address = (_address & 0xFC) << 1; _page_write = 16U; _page_number = 4U; + } break; - case T24C16 : + case T24C16 : { _address = 0; _page_write = 16U; _page_number = 8U; + } break; case T24C32 : - case T24C64 : - if (address > 7) { + case T24C64 : { + if (address > 7U) { _errnum = EEPROM_BadAddress; } _address = _address << 1; _page_write = 32U; _page_number = 1U; + } break; case T24C128 : - case T24C256 : - if (address > 3) { + case T24C256 : { + if (address > 3U) { _errnum = EEPROM_BadAddress; } _address = _address << 1; _page_write = 64U; _page_number = 1U; + } break; - case T24C512 : - if (address > 3) { + case T24C512 : { + if (address > 3U) { _errnum = EEPROM_BadAddress; } _address = _address << 1; _page_write = 128U; _page_number = 1U; + } break; - case T24C1024 : - if (address > 7) { + case T24C1024 : { + if (address > 7U) { _errnum = EEPROM_BadAddress; } _address = (_address & 0xFE) << 1; _page_write = 128U; _page_number = 2U; + } break; - case T24C1025 : - if (address > 3) { + case T24C1025 : { + if (address > 3U) { _errnum = EEPROM_BadAddress; } _address = _address << 1; _page_write = 128U; _page_number = 2U; + } break; } // Size in bytes _size = _type; - if (_type == T24C1025) - _size = T24C1024; + if (_type == T24C1025) { _size = T24C1024; } // Set I2C frequency - _i2c.frequency(400000); + _i2c.frequency(400'000); } @@ -150,8 +158,7 @@ void EEPROM::write(uint32_t address, int8_t data) { int ack; // Check error - if (_errnum) - return; + if (_errnum) { return; } // Check address if (!checkAddress(address)) { @@ -161,8 +168,7 @@ void EEPROM::write(uint32_t address, int8_t data) { // Compute page number page = 0U; - if (_type < T24C32) - page = (uint8_t) (address / 256U); + if (_type < T24C32) { page = static_cast (address / 256U); } // Device address addr = EEPROM_Address | _address | (page << 1); @@ -171,24 +177,24 @@ void EEPROM::write(uint32_t address, int8_t data) { len = 2; // Word address - cmd[0] = (uint8_t) (address - page * 256U); + cmd[0] = static_cast (address - page * 256U); // Data - cmd[1] = (uint8_t) data; + cmd[1] = static_cast (data); } else { len = 3; // First word address (MSB) - cmd[0] = (uint8_t) (address >> 8); + cmd[0] = static_cast (address >> 8); // Second word address (LSB) - cmd[1] = (uint8_t) address; + cmd[1] = static_cast (address); // Data - cmd[2] = (uint8_t) data; + cmd[2] = static_cast (data); } - ack = _i2c.write((int) addr, (char *) cmd, len); + ack = _i2c.write(static_cast (addr), reinterpret_cast (cmd), len); if (ack != 0) { _errnum = EEPROM_I2cError; return; @@ -210,16 +216,19 @@ void EEPROM::write(uint32_t address, int8_t data) { */ void EEPROM::write(uint32_t address, const int8_t data[], uint32_t length) { uint8_t page; - uint8_t addr = 0; - uint8_t blocs, remain; - uint8_t fpart, lpart; - uint8_t i, j, ind; + uint8_t addr = 0U; + uint8_t blocs; + uint8_t remain; + uint8_t fpart; + uint8_t lpart; + uint8_t i; + uint8_t j; + uint8_t ind; uint8_t cmd[129]; int ack; // Check error - if (_errnum) - return; + if (_errnum) { return; } // Check address if (!checkAddress(address)) { @@ -243,14 +252,14 @@ void EEPROM::write(uint32_t address, const int8_t data[], uint32_t length) { // Compute page number page = 0U; if (_type < T24C32) - page = (uint8_t) (address / 256U); + page = static_cast (address / 256U); // Device address addr = EEPROM_Address | _address | (page << 1); if (_type < T24C32) { // Word address - cmd[0] = (uint8_t) (address - page * 256U); + cmd[0] = static_cast (address - page * 256U); if ((uint8_t) ((address + _page_write) / 256U) == page) { // Data fit in the same page // Add data @@ -475,7 +484,7 @@ void EEPROM::write(uint32_t address, int16_t data) { return; } - memcpy(cmd, &data, 2); + (void) memcpy(cmd, &data, 2U); write(address, cmd, 2U); @@ -502,7 +511,7 @@ void EEPROM::write(uint32_t address, int32_t data) { return; } - memcpy(cmd, &data, 4U); + (void) memcpy(cmd, &data, 4U); write(address, cmd, 4U); @@ -529,7 +538,7 @@ void EEPROM::write(uint32_t address, float data) { return; } - memcpy(cmd, &data, 4); + (void) memcpy(cmd, &data, 4); write(address, cmd, 4U); @@ -563,7 +572,7 @@ void EEPROM::write(uint32_t address, void *data, uint32_t size) { return; } - memcpy(cmd, (uint8_t *) data, size); + (void) memcpy(cmd, (uint8_t *) data, size); write(address, cmd, size); @@ -598,8 +607,7 @@ void EEPROM::read(uint32_t address, int8_t &data) { // Compute page number page = 0U; - if (_type < T24C32) - page = static_cast (address / 256U); + if (_type < T24C32) { page = static_cast (address / 256U); } // Device address addr = EEPROM_Address | _address | (page << 1); @@ -669,8 +677,7 @@ void EEPROM::read(uint32_t address, int8_t *data, uint32_t size) { // Compute page number page = 0U; - if (_type < T24C32) - page = static_cast (address / 256U); + if (_type < T24C32) { page = static_cast (address / 256U); } // Device address addr = EEPROM_Address | _address | (page << 1U); @@ -756,7 +763,7 @@ void EEPROM::read(uint32_t address, int16_t &data) { read(address, cmd, 2U); - memcpy(&data, cmd, 2); + (void) memcpy(&data, cmd, 2); } @@ -772,8 +779,7 @@ void EEPROM::read(uint32_t address, int32_t &data) { int8_t cmd[4]; // Check error - if (_errnum) - return; + if (_errnum) { return; } // Check address if (!checkAddress(address + 3U)) { @@ -783,7 +789,7 @@ void EEPROM::read(uint32_t address, int32_t &data) { read(address, cmd, 4U); - memcpy(&data, cmd, 4); + (void) memcpy(&data, cmd, 4U); } @@ -799,8 +805,7 @@ void EEPROM::read(uint32_t address, float &data) { int8_t cmd[4]; // Check error - if (_errnum) - return; + if (_errnum) { return; } // Check address if (!checkAddress(address + 3U)) { @@ -810,7 +815,7 @@ void EEPROM::read(uint32_t address, float &data) { read(address, cmd, 4U); - memcpy(&data, cmd, 4); + (void) memcpy(&data, cmd, 4U); } @@ -982,52 +987,40 @@ bool EEPROM::checkAddress(uint32_t address) { switch (_type) { case T24C01 : - if (address >= T24C01) - ret = false; + if (address >= T24C01) { ret = false; } break; case T24C02 : - if (address >= T24C02) - ret = false; + if (address >= T24C02) { ret = false; } break; case T24C04 : - if (address >= T24C04) - ret = false; + if (address >= T24C04) { ret = false; } break; case T24C08 : - if (address >= T24C08) - ret = false; + if (address >= T24C08) { ret = false; } break; case T24C16 : - if (address >= T24C16) - ret = false; + if (address >= T24C16) { ret = false; } break; case T24C32 : - if (address >= T24C32) - ret = false; + if (address >= T24C32) { ret = false; } break; case T24C64 : - if (address >= T24C64) - ret = false; + if (address >= T24C64) { ret = false; } break; case T24C128 : - if (address >= T24C128) - ret = false; + if (address >= T24C128) { ret = false; } break; case T24C256 : - if (address >= T24C256) - ret = false; + if (address >= T24C256) { ret = false; } break; case T24C512 : - if (address >= T24C512) - ret = false; + if (address >= T24C512) { ret = false; } break; case T24C1024 : - if (address >= T24C1024) - ret = false; + if (address >= T24C1024) { ret = false; } break; case T24C1025 : - if (address >= T24C1025 - 1) - ret = false; + if (address >= T24C1025 - 1) { ret = false; } break; } diff --git a/eeprom.h b/eeprom.h index 1bb18d1..06d88fb 100644 --- a/eeprom.h +++ b/eeprom.h @@ -8,16 +8,16 @@ #include "mbed.h" // Defines -#define EEPROM_Address 0xa0 +#define EEPROM_Address 0xa0U -#define EEPROM_NoError 0x00 -#define EEPROM_BadAddress 0x01 -#define EEPROM_I2cError 0x02 -#define EEPROM_ParamError 0x03 -#define EEPROM_OutOfRange 0x04 -#define EEPROM_MallocError 0x05 +#define EEPROM_NoError 0x00U +#define EEPROM_BadAddress 0x01U +#define EEPROM_I2cError 0x02U +#define EEPROM_ParamError 0x03U +#define EEPROM_OutOfRange 0x04U +#define EEPROM_MallocError 0x05U -#define EEPROM_MaxError 6 +#define EEPROM_MaxError 6U static std::string _ErrorMessageEEPROM[EEPROM_MaxError] = { "", @@ -33,9 +33,9 @@ static std::string _ErrorMessageEEPROM[EEPROM_MaxError] = { class EEPROM { public: enum TypeEeprom { - T24C01 = 128, T24C02 = 256, T24C04 = 512, T24C08 = 1024, T24C16 = 2048, - T24C32 = 4096, T24C64 = 8192, T24C128 = 16384, T24C256 = 32768, - T24C512 = 65536, T24C1024 = 131072, T24C1025 = 131073 + T24C01 = 128U, T24C02 = 256U, T24C04 = 512U, T24C08 = 1024U, T24C16 = 2048U, + T24C32 = 4096U, T24C64 = 8192U, T24C128 = 16384U, T24C256 = 32768U, + T24C512 = 65536U, T24C1024 = 131072U, T24C1025 = 131073U } Type; /** @@ -195,7 +195,7 @@ public: * @param none * @return current error message(std::string) */ - std::string getErrorMessage(void) const { + std::string getErrorMessage() const { return (_ErrorMessageEEPROM[_errnum]); }