|
- #include "modbus_data_store.h"
- #include "plsr_modbus_data.h"
- #include <stdint.h>
- #include <stdio.h>
-
- 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;
- 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);
-
- 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);
-
- PlsrModbusDataSourceInit(NULL);
- (void)printf("PASS: %u Modbus data-source checks\n", TestChecks);
- return 0;
- }
|