TEST(checksum, calc_16bit) { uint16_t array[] = { 0x1111, 0x2222, 0x3333, 0x4444, 0x5555, 0x6666, 0x7777, 0x8888, 0x9999, 0xAAAA, 0xBBBB, 0xCCCC, 0xDDDD, 0xEEEE, 0xFFFF, 0x0000 }; size_t len = sizeof(array) / sizeof(array[0]); uint16_t expects = 0xFFF8; /* 0x7FFF8 */ TEST_ASSERT_EQUAL_UINT16( expects, checksum_calc_16bit(array, len) ); }
void test_setEncryptionId(void) { msg.setEncryptionId(0x11223344); TEST_ASSERT_EQUAL_UINT16(0x11223344, msg.getEncryptionId()); }
/** \brief test function write multiple register ** ** this function test modbus master write multiple registers ** with callback ** **/ void test_ciaaModbus_masterCmd0x10WriteMultipleRegisters_01(void) { int32_t hModbusMaster; int16_t hrValue[CIAA_MODBUS_QUANTITY_OF_HOLD_REG] = { 0x1234, 0x5678, }; uint8_t slaveIdRecv; uint8_t pduRecv[256]; uint8_t pduRecvExp[256] = { 0X10, (CIAA_MODBUS_STARTING_ADDRESS >> 8) & 0XFF, (CIAA_MODBUS_STARTING_ADDRESS >> 0) & 0XFF, (CIAA_MODBUS_QUANTITY_OF_HOLD_REG >> 8) & 0XFF, (CIAA_MODBUS_QUANTITY_OF_HOLD_REG >> 0) & 0XFF, CIAA_MODBUS_QUANTITY_OF_HOLD_REG * 2, 0x12, 0x34, 0x56, 0x78, }; uint8_t pduSend[256] = { 0X10, (CIAA_MODBUS_STARTING_ADDRESS >> 8) & 0XFF, (CIAA_MODBUS_STARTING_ADDRESS >> 0) & 0XFF, (CIAA_MODBUS_QUANTITY_OF_HOLD_REG >> 8) & 0XFF, (CIAA_MODBUS_QUANTITY_OF_HOLD_REG >> 0) & 0XFF, }; uint32_t sizeRecv; uint32_t sizeRecvExp = 10; /* open modbus master */ hModbusMaster = ciaaModbus_masterOpen(); /* request read holding register */ ciaaModbus_masterCmd0x10WriteMultipleRegisters( hModbusMaster, CIAA_MODBUS_STARTING_ADDRESS, CIAA_MODBUS_QUANTITY_OF_HOLD_REG, hrValue, SLAVE_ID, modbusMaster_cbEndOfComm); /* perform task modbus master */ ciaaModbus_masterTask(hModbusMaster); /* receive pdu from master */ ciaaModbus_masterRecvMsg( hModbusMaster, &slaveIdRecv, pduRecv, &sizeRecv); /* send message to master */ ciaaModbus_masterSendMsg( hModbusMaster, SLAVE_ID, pduSend, 5); /* verify */ TEST_ASSERT_EQUAL_UINT8(SLAVE_ID, slaveIdRecv); TEST_ASSERT_EQUAL_UINT8_ARRAY(pduRecvExp, pduRecv, sizeRecvExp); TEST_ASSERT_EQUAL_UINT32(sizeRecvExp, sizeRecv); TEST_ASSERT_EQUAL_UINT16(0X1234, hrValue[0]); TEST_ASSERT_EQUAL_UINT16(0X5678, hrValue[1]); TEST_ASSERT_EQUAL_UINT8(SLAVE_ID, callBackData_slaveId); TEST_ASSERT_EQUAL_UINT8(0x10, callBackData_numFunc); TEST_ASSERT_EQUAL_UINT8(0x00, callBackData_exceptioncode); } /** \brief test function read write multiple register ** ** this function test modbus master read write multiple registers ** with callback ** **/ void test_ciaaModbus_masterCmd0x17ReadWriteMultipleRegisters_01(void) { int32_t hModbusMaster; int16_t hrValueR[128]; int16_t hrValueW[] = { 0x1122, 0x3344, 0x5566, }; uint8_t slaveIdRecv; uint8_t pduRecv[256]; uint8_t pduRecvExp[256] = { 0X17, 0X00, 0X03, 0X00, 0X06, 0X00, 0X0E, 0X00, 0X03, 0X06, 0X11, 0X22, 0X33, 0X44, 0X55, 0X66, }; uint8_t pduSend[256] = { 0X17, 0X0C, 0XFF, 0XEE, 0XDD, 0XCC, 0XBB, 0XAA, 0X99, 0X88, 0X77, 0X66, 0X55, 0X44, }; uint32_t sizeRecv; uint32_t sizeRecvExp = 16; /* open modbus master */ hModbusMaster = ciaaModbus_masterOpen(); /* request read holding register */ ciaaModbus_masterCmd0x17ReadWriteMultipleRegisters( hModbusMaster, 0X0003, 0X0006, hrValueR, 0X000E, 0X0003, hrValueW, SLAVE_ID, modbusMaster_cbEndOfComm); /* perform task modbus master */ ciaaModbus_masterTask(hModbusMaster); /* receive pdu from master */ ciaaModbus_masterRecvMsg( hModbusMaster, &slaveIdRecv, pduRecv, &sizeRecv); /* send message to master */ ciaaModbus_masterSendMsg( hModbusMaster, SLAVE_ID, pduSend, 14); /* verify */ TEST_ASSERT_EQUAL_UINT8(SLAVE_ID, slaveIdRecv); TEST_ASSERT_EQUAL_UINT8_ARRAY(pduRecvExp, pduRecv, sizeRecvExp); TEST_ASSERT_EQUAL_UINT32(sizeRecvExp, sizeRecv); TEST_ASSERT_EQUAL_UINT16(0XFFEE, hrValueR[0]); TEST_ASSERT_EQUAL_UINT16(0XDDCC, hrValueR[1]); TEST_ASSERT_EQUAL_UINT16(0XBBAA, hrValueR[2]); TEST_ASSERT_EQUAL_UINT16(0X9988, hrValueR[3]); TEST_ASSERT_EQUAL_UINT16(0X7766, hrValueR[4]); TEST_ASSERT_EQUAL_UINT16(0X5544, hrValueR[5]); TEST_ASSERT_EQUAL_UINT8(SLAVE_ID, callBackData_slaveId); TEST_ASSERT_EQUAL_UINT8(0x17, callBackData_numFunc); TEST_ASSERT_EQUAL_UINT8(0x00, callBackData_exceptioncode); } /** \brief test get Response timeout ** ** this function test get Response timeout ** **/ void test_ciaaModbus_masterGetRespTimeout_01(void) { int32_t hModbusMaster; uint32_t timeout; /* open modbus master */ hModbusMaster = ciaaModbus_masterOpen(); timeout = ciaaModbus_masterGetRespTimeout(hModbusMaster); /* default response timeout 300 ms */ TEST_ASSERT_EQUAL_UINT32(300,timeout); }
/** \brief test function read holding registers ** ** this function test modbus master read holding registers ** with callback ** **/ void test_ciaaModbus_masterCmd0x03ReadHoldingRegisters_01(void) { int32_t hModbusMaster; int16_t hrValue[CIAA_MODBUS_QUANTITY_OF_HOLD_REG]; uint8_t slaveIdRecv; uint8_t pduRecv[256]; uint8_t pduRecvExp[256] = { 0X03, (CIAA_MODBUS_STARTING_ADDRESS >> 8) & 0XFF, (CIAA_MODBUS_STARTING_ADDRESS >> 0) & 0XFF, (CIAA_MODBUS_QUANTITY_OF_HOLD_REG >> 8) & 0XFF, (CIAA_MODBUS_QUANTITY_OF_HOLD_REG >> 0) & 0XFF, }; uint8_t pduSend[256] = { 0X03, CIAA_MODBUS_QUANTITY_OF_HOLD_REG * 2, 0XAA, 0X55, 0X11, 0X22, }; uint32_t sizeRecv; uint32_t sizeRecvExp = 5; /* open modbus master */ hModbusMaster = ciaaModbus_masterOpen(); /* request read holding register */ ciaaModbus_masterCmd0x03ReadHoldingRegisters( hModbusMaster, CIAA_MODBUS_STARTING_ADDRESS, CIAA_MODBUS_QUANTITY_OF_HOLD_REG, hrValue, SLAVE_ID, modbusMaster_cbEndOfComm); /* perform task modbus master */ ciaaModbus_masterTask(hModbusMaster); /* receive pdu from master */ ciaaModbus_masterRecvMsg( hModbusMaster, &slaveIdRecv, pduRecv, &sizeRecv); /* send message to master */ ciaaModbus_masterSendMsg( hModbusMaster, SLAVE_ID, pduSend, 6); /* verify */ TEST_ASSERT_EQUAL_UINT8(SLAVE_ID, slaveIdRecv); TEST_ASSERT_EQUAL_UINT8_ARRAY(pduRecvExp, pduRecv, 5); TEST_ASSERT_EQUAL_UINT32(sizeRecvExp, sizeRecv); TEST_ASSERT_EQUAL_UINT16(0XAA55, hrValue[0]); TEST_ASSERT_EQUAL_UINT16(0X1122, hrValue[1]); TEST_ASSERT_EQUAL_UINT8(SLAVE_ID, callBackData_slaveId); TEST_ASSERT_EQUAL_UINT8(0x03, callBackData_numFunc); TEST_ASSERT_EQUAL_UINT8(0x00, callBackData_exceptioncode); } /** \brief test function read input registers ** ** this function test modbus master read input registers ** with callback ** **/ void test_ciaaModbus_masterCmd0x04ReadInputRegisters_01(void) { int32_t hModbusMaster; int16_t irValue[CIAA_MODBUS_QUANTITY_OF_INPUT_REG]; uint8_t slaveIdRecv; uint8_t pduRecv[256]; uint8_t pduRecvExp[256] = { 0X04, (CIAA_MODBUS_STARTING_ADDRESS >> 8) & 0XFF, (CIAA_MODBUS_STARTING_ADDRESS >> 0) & 0XFF, (CIAA_MODBUS_QUANTITY_OF_INPUT_REG >> 8) & 0XFF, (CIAA_MODBUS_QUANTITY_OF_INPUT_REG >> 0) & 0XFF, }; uint8_t pduSend[256] = { 0X04, CIAA_MODBUS_QUANTITY_OF_INPUT_REG * 2, 0XAA, 0X55, 0X11, 0X22, }; uint32_t sizeRecv; uint32_t sizeRecvExp = 5; /* open modbus master */ hModbusMaster = ciaaModbus_masterOpen(); /* request read holding register */ ciaaModbus_masterCmd0x04ReadInputRegisters( hModbusMaster, CIAA_MODBUS_STARTING_ADDRESS, CIAA_MODBUS_QUANTITY_OF_INPUT_REG, irValue, SLAVE_ID, modbusMaster_cbEndOfComm); /* perform task modbus master */ ciaaModbus_masterTask(hModbusMaster); /* receive pdu from master */ ciaaModbus_masterRecvMsg( hModbusMaster, &slaveIdRecv, pduRecv, &sizeRecv); /* send message to master */ ciaaModbus_masterSendMsg( hModbusMaster, SLAVE_ID, pduSend, 6); /* verify */ TEST_ASSERT_EQUAL_UINT8(SLAVE_ID, slaveIdRecv); TEST_ASSERT_EQUAL_UINT8_ARRAY(pduRecvExp, pduRecv, 5); TEST_ASSERT_EQUAL_UINT32(sizeRecvExp, sizeRecv); TEST_ASSERT_EQUAL_UINT16(0XAA55, irValue[0]); TEST_ASSERT_EQUAL_UINT16(0X1122, irValue[1]); TEST_ASSERT_EQUAL_UINT8(SLAVE_ID, callBackData_slaveId); TEST_ASSERT_EQUAL_UINT8(0x04, callBackData_numFunc); TEST_ASSERT_EQUAL_UINT8(0x00, callBackData_exceptioncode); } /** \brief test function write single coil ** ** this function test modbus master write single coil ** with callback ** **/ void test_ciaaModbus_masterCmd0x05WriteSingleCoil_01(void) { int32_t hModbusMaster; uint8_t slaveIdRecv; uint8_t pduRecv[256]; uint8_t pdu[256] = { 0X05, 0x00, 0xAC, 0XFF, 0x00, }; uint32_t sizeRecv; /* open modbus master */ hModbusMaster = ciaaModbus_masterOpen(); /* request read holding register */ ciaaModbus_masterCmd0x05WriteSingleCoil( hModbusMaster, 0x00AC, true, SLAVE_ID, modbusMaster_cbEndOfComm); /* perform task modbus master */ ciaaModbus_masterTask(hModbusMaster); /* receive pdu from master */ ciaaModbus_masterRecvMsg( hModbusMaster, &slaveIdRecv, pduRecv, &sizeRecv); /* send message to master */ ciaaModbus_masterSendMsg( hModbusMaster, SLAVE_ID, pdu, 5); /* verify */ TEST_ASSERT_EQUAL_UINT8(SLAVE_ID, slaveIdRecv); TEST_ASSERT_EQUAL_UINT8_ARRAY(pdu, pduRecv, 5); TEST_ASSERT_EQUAL_UINT32(5, sizeRecv); TEST_ASSERT_EQUAL_UINT8(SLAVE_ID, callBackData_slaveId); TEST_ASSERT_EQUAL_UINT8(0x05, callBackData_numFunc); TEST_ASSERT_EQUAL_UINT8(0x00, callBackData_exceptioncode); }
/** \brief test function read discrete inputs ** ** this function test modbus master read discrete inputs ** with callback ** **/ void test_ciaaModbus_masterCmd0x02ReadDiscreteInputs_01(void) { int32_t hModbusMaster; uint8_t discreteInputsValue[256]; uint8_t slaveIdRecv; uint8_t pduRecv[256]; uint8_t pduRecvExp[256] = { 0X02, 0x12, 0x34, 0x00, 0x13, }; uint8_t pduSend[256] = { 0X02, 0x03, 0XCD, 0X6B, 0X05, }; uint32_t sizeRecv; uint32_t sizeRecvExp = 5; /* open modbus master */ hModbusMaster = ciaaModbus_masterOpen(); /* request read holding register */ ciaaModbus_masterCmd0x02ReadDiscreteInputs( hModbusMaster, 0X1234, 0X0013, discreteInputsValue, SLAVE_ID, modbusMaster_cbEndOfComm); /* perform task modbus master */ ciaaModbus_masterTask(hModbusMaster); /* receive pdu from master */ ciaaModbus_masterRecvMsg( hModbusMaster, &slaveIdRecv, pduRecv, &sizeRecv); /* send message to master */ ciaaModbus_masterSendMsg( hModbusMaster, SLAVE_ID, pduSend, 5); /* verify */ TEST_ASSERT_EQUAL_UINT8(SLAVE_ID, slaveIdRecv); TEST_ASSERT_EQUAL_UINT8_ARRAY(pduRecvExp, pduRecv, 5); TEST_ASSERT_EQUAL_UINT32(sizeRecvExp, sizeRecv); TEST_ASSERT_EQUAL_UINT8(0XCD, discreteInputsValue[0]); TEST_ASSERT_EQUAL_UINT16(0X6B, discreteInputsValue[1]); TEST_ASSERT_EQUAL_UINT16(0X05, discreteInputsValue[2]); TEST_ASSERT_EQUAL_UINT8(SLAVE_ID, callBackData_slaveId); TEST_ASSERT_EQUAL_UINT8(0x02, callBackData_numFunc); TEST_ASSERT_EQUAL_UINT8(0x00, callBackData_exceptioncode); }