#include #include #include #include #include #include #include #include int fouled = 0; int expectedHits = 0; int hits = 0; unsigned totalCount = 0; void callback ( int status, void * arg, cdevRequestObject &, cdevData & data) { hits++; if(status!=CDEV_SUCCESS) { printf("ERROR: Transmission failure of %i\n", (int)arg); } else { if(data!=*TestMessage[(int)arg].getData()) { fouled = 1; printf("ERROR: Mismatch on entry %i - Inbound data differs from expected\n", (int)arg); printf("----------------------------- INBOUND DATA -----------------------------\n"); data.asciiDump(); printf("----------------------------- EXPECTED DATA ----------------------------\n"); TestMessage[(int)arg].getData()->asciiDump(); } else { totalCount++; if(totalCount%100==0) { printf("Transmission %i still matches correctly\n", totalCount); } } } } int main(int argc, char ** argv) { createTestMessages(); int maxCount = 0; int group1 = TestMessageCount/3; int group2 = group1+group1; cdevRequestObject &tReq = cdevRequestObject::attachRef(TestMessage[TestMessageIndex].getDeviceList()[0], TestMessage[TestMessageIndex].getMessage()); tReq.setContext(*TestMessage[0].getContext()); if(argc>1) maxCount = atoi(argv[1]); while(!fouled && (!maxCount || maxCountsetContext(*TestMessage[TestMessageIndex].getContext()); if(req->send(TestMessage[TestMessageIndex].getData(), &data)==CDEV_SUCCESS) { if(data!=*TestMessage[TestMessageIndex].getData()) { fouled = -1; printf("ERROR: Mismatch on entry %i - Inbound data differs from expected\n", TestMessageIndex); printf("----------------------------- INBOUND DATA -----------------------------\n"); data.asciiDump(); printf("----------------------------- EXPECTED DATA ----------------------------\n"); TestMessage[TestMessageIndex].getData()->asciiDump(); } else { totalCount++; if(totalCount%100==0) { printf("Transmission %i still matches correctly\n", totalCount); } } } else { printf("ERROR: Transmission failure of %i\n", TestMessageIndex); } } for( ; TestMessageIndexsetContext(*TestMessage[TestMessageIndex].getContext()); if(req->sendCallback(TestMessage[TestMessageIndex].getData(), cb)!=CDEV_SUCCESS) { fouled = -1; printf("ERROR: Transmission failure of %i\n", TestMessageIndex); } else expectedHits++; } for(int retryCnt=0; hitssetContext(*TestMessage[TestMessageIndex].getContext()); if(req->sendNoBlock(TestMessage[TestMessageIndex].getData(), outputData[dataIdx])!=CDEV_SUCCESS) { fouled = -1; printf("ERROR: Transmission failure of %i\n", TestMessageIndex); } } group.end(); for(int grpRetryCnt=0; !group.allFinished() && grpRetryCnt<1000; grpRetryCnt++) { group.poll(); } if(!group.allFinished()) { printf("ERROR: Failed to process all group requests after %i attempts\n", grpRetryCnt); } for(dataIdx=0, TestMessageIndex=group2; TestMessageIndexasciiDump(); } else { totalCount++; if(totalCount%100==0) { printf("Transmission %i still matches correctly\n", totalCount); } } } delete [] outputData; } return 1; }