#include "modbus_data_store.h" #include "plsr_modbus_data.h" #include #include static unsigned TestChecks; #define CHECK(condition) \ do \ { \ TestChecks++; \ if (!(condition)) \ { \ (void)printf("FAIL line %d: %s\n", __LINE__, #condition); \ return 1; \ } \ } while (0) int main(void) { PLSR_DATA_SOURCE source; uint16_t words[4] = {0x5678U, 0x1234U, 0xFFFEU, 0xFFFFU}; uint16_t word; uint8_t bit; int32_t dword; uint32_t sequence; CHECK(ModbusDataValidateWords(MODBUS_DATA_DEVICE_D, 0UL, 1UL) == 1U); CHECK(ModbusDataValidateWords(MODBUS_DATA_DEVICE_HD, 9998UL, 2UL) == 1U); CHECK(ModbusDataValidateWords(MODBUS_DATA_DEVICE_FD, 9999UL, 2UL) == 0U); CHECK(ModbusDataValidateWords(MODBUS_DATA_DEVICE_D, 0UL, 0UL) == 0U); CHECK(ModbusDataValidateWords((MODBUS_DATA_DEVICE)3, 0UL, 1UL) == 0U); sequence = ModbusDataGetWriteSequence(); CHECK((sequence & 1UL) == 0UL); CHECK(ModbusDataWriteWords(MODBUS_DATA_DEVICE_D, 1000UL, words, 4UL) == 1U); CHECK(ModbusDataGetWriteSequence() == sequence + 2UL); CHECK(ModbusDataReadDword(MODBUS_DATA_DEVICE_D, 1000UL, &dword) == 1U); CHECK(dword == (int32_t)0x12345678UL); CHECK(ModbusDataReadDword(MODBUS_DATA_DEVICE_D, 1002UL, &dword) == 1U); CHECK(dword == -2); CHECK(ModbusDataWriteWord(MODBUS_DATA_DEVICE_HD, 5UL, 0xA55AU) == 1U); CHECK(ModbusDataWriteWord(MODBUS_DATA_DEVICE_FD, 5UL, 0x5AA5U) == 1U); CHECK(ModbusDataReadWord(MODBUS_DATA_DEVICE_D, 5UL, &word) == 1U); CHECK(word == 0U); CHECK(ModbusDataReadWord(MODBUS_DATA_DEVICE_HD, 5UL, &word) == 1U); CHECK(word == 0xA55AU); CHECK(ModbusDataReadWord(MODBUS_DATA_DEVICE_FD, 5UL, &word) == 1U); CHECK(word == 0x5AA5U); CHECK(ModbusDataReadLinear(10005UL, &word) == 1U); CHECK(word == 0xA55AU); CHECK(ModbusDataReadLinear(40005UL, &word) == 1U); CHECK(word == 0x5AA5U); CHECK(ModbusDataReadLinear(20000UL, &word) == 0U); CHECK(ModbusDataReadLinear(39999UL, &word) == 0U); CHECK(ModbusDataReadLinear(69999UL, &word) == 0U); CHECK(ModbusDataValidateBits(MODBUS_BIT_DEVICE_X, 9999UL, 1UL) == 1U); CHECK(ModbusDataValidateBits(MODBUS_BIT_DEVICE_M, 9999UL, 2UL) == 0U); CHECK(ModbusDataValidateBits(MODBUS_BIT_DEVICE_HM, 0UL, 0UL) == 0U); CHECK(ModbusDataValidateBits((MODBUS_BIT_DEVICE)3, 0UL, 1UL) == 0U); CHECK(ModbusDataWriteBit(MODBUS_BIT_DEVICE_X, 17UL, 1U) == 1U); CHECK(ModbusDataWriteBit(MODBUS_BIT_DEVICE_M, 17UL, 0U) == 1U); CHECK(ModbusDataWriteBit(MODBUS_BIT_DEVICE_HM, 17UL, 1U) == 1U); CHECK(ModbusDataWriteBit(MODBUS_BIT_DEVICE_X, 18UL, 1U) == 1U); CHECK(ModbusDataWriteBit(MODBUS_BIT_DEVICE_X, 17UL, 0U) == 1U); CHECK(ModbusDataReadBit(MODBUS_BIT_DEVICE_X, 17UL, &bit) == 1U); CHECK(bit == 0U); CHECK(ModbusDataReadBit(MODBUS_BIT_DEVICE_X, 18UL, &bit) == 1U); CHECK(bit == 1U); CHECK(ModbusDataReadBit(MODBUS_BIT_DEVICE_M, 17UL, &bit) == 1U); CHECK(bit == 0U); CHECK(ModbusDataReadBit(MODBUS_BIT_DEVICE_HM, 17UL, &bit) == 1U); CHECK(bit == 1U); CHECK(ModbusDataReadBit(MODBUS_BIT_DEVICE_X, 10000UL, &bit) == 0U); CHECK(ModbusDataReadBit(MODBUS_BIT_DEVICE_X, 0UL, NULL) == 0U); PlsrModbusDataSourceInit(&source); CHECK(source.context == NULL); CHECK(source.validateWords != NULL); CHECK(source.readWord != NULL); CHECK(source.readDword != NULL); CHECK(source.readBit != NULL); CHECK(source.validateWords(source.context, PLSR_DEVICE_D, 1000UL, 4UL) == 1U); CHECK(source.validateWords(source.context, PLSR_DEVICE_X, 0UL, 1UL) == 0U); CHECK(source.readDword(source.context, PLSR_DEVICE_D, 1000UL, &dword) == 1U); CHECK(dword == (int32_t)0x12345678UL); CHECK(source.readWord(source.context, PLSR_DEVICE_HD, 5UL, &word) == 1U); CHECK(word == 0xA55AU); CHECK(source.readWord(source.context, PLSR_DEVICE_FD, 5UL, &word) == 1U); CHECK(word == 0x5AA5U); CHECK(source.readWord(source.context, PLSR_DEVICE_M, 5UL, &word) == 0U); CHECK(source.readBit(source.context, PLSR_DEVICE_X, 17UL, &bit) == 1U); CHECK(bit == 0U); CHECK(source.readBit(source.context, PLSR_DEVICE_M, 17UL, &bit) == 1U); CHECK(bit == 0U); CHECK(source.readBit(source.context, PLSR_DEVICE_HM, 17UL, &bit) == 1U); CHECK(bit == 1U); CHECK(source.readBit(source.context, PLSR_DEVICE_D, 17UL, &bit) == 0U); CHECK(source.readBit(source.context, PLSR_DEVICE_X, 10000UL, &bit) == 0U); PlsrModbusDataSourceInit(NULL); (void)printf("PASS: %u Modbus data-source checks\n", TestChecks); return 0; }