/* * Check some of the error conditions */ void DmxterWidgetTest::testErrorConditions() { uint8_t RDM_REQUEST_LABEL = 0x80; UID source(0x4744, 0x12345678); UID destination(3, 4); RDMFrames frames; RDMRequest *request = NewRequest(source, destination, NULL, 0); unsigned int size = RDMCommandSerializer::RequiredSize(*request); uint8_t *expected_packet = new uint8_t[size + 1]; expected_packet[0] = 0xcc; OLA_ASSERT(RDMCommandSerializer::Pack(*request, expected_packet + 1, &size)); // to small to be valid uint8_t return_packet[] = {0x00}; m_endpoint->AddExpectedUsbProDataAndReturn( RDM_REQUEST_LABEL, expected_packet, size + 1, RDM_REQUEST_LABEL, return_packet, sizeof(return_packet)); m_widget->SendRDMRequest( request, ola::NewSingleCallback(this, &DmxterWidgetTest::ValidateStatus, ola::rdm::RDM_INVALID_RESPONSE, frames)); m_ss.Run(); m_endpoint->Verify(); // check mismatched version request = NewRequest(source, destination, NULL, 0); request->SetTransactionNumber(1); OLA_ASSERT(RDMCommandSerializer::Pack(*request, expected_packet + 1, &size)); // non-0 version uint8_t return_packet2[] = {0x01, 0x11, 0xcc}; m_endpoint->AddExpectedUsbProDataAndReturn( RDM_REQUEST_LABEL, expected_packet, size + 1, RDM_REQUEST_LABEL, return_packet2, sizeof(return_packet2)); m_widget->SendRDMRequest( request, ola::NewSingleCallback(this, &DmxterWidgetTest::ValidateStatus, ola::rdm::RDM_INVALID_RESPONSE, frames)); delete[] expected_packet; m_ss.Run(); m_endpoint->Verify(); }
/** * Check that we send messages correctly. */ void DmxterWidgetTest::testSendRDMRequest() { uint8_t RDM_REQUEST_LABEL = 0x80; uint8_t RDM_BROADCAST_REQUEST_LABEL = 0x81; UID source(0x4744, 0x12345678); UID destination(3, 4); UID bcast_destination(3, 0xffffffff); RDMRequest *request = NewRequest(source, destination, NULL, 0); unsigned int size = RDMCommandSerializer::RequiredSize(*request); uint8_t *expected_packet = new uint8_t[size + 1]; expected_packet[0] = 0xcc; OLA_ASSERT(RDMCommandSerializer::Pack(*request, expected_packet + 1, &size)); uint8_t return_packet[] = { 0x00, 14, // response code 'ok' 0xcc, 1, 28, // sub code & length 0x47, 0x44, 0x12, 0x34, 0x56, 0x78, // dst uid 0, 3, 0, 0, 0, 4, // src uid 0, 1, 0, 0, 10, // transaction, port id, msg count & sub device 0x21, 0x1, 0x28, 4, // command, param id, param data length 0x5a, 0x5a, 0x5a, 0x5a, // param data 0x04, 0x50 // checksum }; m_endpoint->AddExpectedUsbProDataAndReturn( RDM_REQUEST_LABEL, expected_packet, size + 1, RDM_REQUEST_LABEL, return_packet, sizeof(return_packet)); m_widget->SendRDMRequest( request, ola::NewSingleCallback(this, &DmxterWidgetTest::ValidateResponse)); m_ss.Run(); m_endpoint->Verify(); // now check broadcast request = NewRequest(source, bcast_destination, NULL, 0); request->SetTransactionNumber(1); OLA_ASSERT(RDMCommandSerializer::Pack(*request, expected_packet + 1, &size)); m_endpoint->AddExpectedUsbProDataAndReturn( RDM_BROADCAST_REQUEST_LABEL, expected_packet, size + 1, RDM_BROADCAST_REQUEST_LABEL, static_cast<uint8_t*>(NULL), 0); RDMFrames frames; m_widget->SendRDMRequest( request, ola::NewSingleCallback(this, &DmxterWidgetTest::ValidateStatus, ola::rdm::RDM_WAS_BROADCAST, frames)); delete[] expected_packet; m_ss.Run(); m_endpoint->Verify(); }