#include #include #include #include "main.h" #include "modbus.h" #include "modbus_backup.h" #define TEST_SLAVE_ADDRESS (1U) TEST_RTC_TYPEDEF TestRtc; static uint16_t TestHoldingRegisters[MODBUS_DATA_POINT_COUNT]; static uint8_t TestCoilStorage[MODBUS_COIL_STORAGE_SIZE]; static uint16_t TestExtendedRegister; static void TestInitSlave(MODBUS_SLAVE *slave) { assert(slave != NULL); assert(ModbusSlaveInit(slave, TEST_SLAVE_ADDRESS, TestHoldingRegisters, TestCoilStorage) == MODBUS_STATUS_OK); assert(ModbusConfigureExtendedHoldingRegister(slave, &TestExtendedRegister) == MODBUS_STATUS_OK); } static void TestRestoreOnlyExtendedRegister(void) { MODBUS_SLAVE slave; uint8_t coilValue; (void)memset(&TestRtc, 0, sizeof(TestRtc)); (void)memset(TestHoldingRegisters, 0, sizeof(TestHoldingRegisters)); (void)memset(TestCoilStorage, 0, sizeof(TestCoilStorage)); TestExtendedRegister = 0U; TestInitSlave(&slave); assert(ModbusSetHoldingRegister(&slave, 0U, 0x1111U) == MODBUS_STATUS_OK); assert(ModbusSetHoldingRegister(&slave, 31U, 0x2222U) == MODBUS_STATUS_OK); assert(ModbusSetCoil(&slave, 0U, 1U) == MODBUS_STATUS_OK); assert(ModbusSetCoil(&slave, 15U, 1U) == MODBUS_STATUS_OK); TestExtendedRegister = 0xBEEFU; assert(ModbusBackupSave(&slave) == MODBUS_STATUS_OK); assert(ModbusSetHoldingRegister(&slave, 0U, 0xAAAAU) == MODBUS_STATUS_OK); assert(ModbusSetHoldingRegister(&slave, 31U, 0x5555U) == MODBUS_STATUS_OK); assert(ModbusSetCoil(&slave, 0U, 0U) == MODBUS_STATUS_OK); assert(ModbusSetCoil(&slave, 15U, 0U) == MODBUS_STATUS_OK); TestExtendedRegister = 0U; assert(ModbusBackupRestore(&slave) == MODBUS_STATUS_OK); assert(TestHoldingRegisters[0U] == 0xAAAAU); assert(TestHoldingRegisters[31U] == 0x5555U); assert(ModbusGetCoil(&slave, 0U, &coilValue) == MODBUS_STATUS_OK); assert(coilValue == 0U); assert(ModbusGetCoil(&slave, 15U, &coilValue) == MODBUS_STATUS_OK); assert(coilValue == 0U); assert(TestExtendedRegister == 0xBEEFU); } int main(void) { TestRestoreOnlyExtendedRegister(); return 0; }