3 * Copyright (C) 2012 BMW AG
5 * This file is part of GENIVI Project Dlt - Diagnostic Log and Trace console apps.
7 * Contributions are licensed to the GENIVI Alliance under one or more
8 * Contribution License Agreements.
11 * This Source Code Form is subject to the terms of the
12 * Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with
13 * this file, You can obtain one at http://mozilla.org/MPL/2.0/.
16 * \author Alexander Wenzel <alexander.aw.wenzel@bmw.de> BMW 2011-2012
18 * \file dlt-test-client.c
19 * For further information see http://www.genivi.org/.
24 /*******************************************************************************
26 ** SRC-MODULE: dlt-test-client.c **
32 ** AUTHOR : Alexander Wenzel Alexander.AW.Wenzel@bmw.de **
39 ** PLATFORM DEPENDANT [yes/no]: yes **
41 ** TO BE CHANGED BY USER [yes/no]: no **
43 *******************************************************************************/
45 /*******************************************************************************
47 ********************************************************************************
49 ** Initials Name Company **
50 ** -------- ------------------------- ---------------------------------- **
51 ** aw Alexander Wenzel BMW **
52 ** mk Markus Klein Fraunhofer ESK **
53 *******************************************************************************/
55 /*******************************************************************************
56 ** Revision Control History **
57 *******************************************************************************/
60 * $LastChangedRevision: 1670 $
61 * $LastChangedDate: 2011-04-08 15:12:06 +0200 (Fr, 08. Apr 2011) $
67 #include <ctype.h> /* for isprint() */
68 #include <stdlib.h> /* for atoi() */
69 #include <sys/stat.h> /* for S_IRUSR, S_IWUSR, S_IRGRP, S_IROTH */
70 #include <fcntl.h> /* for open() */
71 #include <string.h> /* for strcmp() */
72 #include <sys/uio.h> /* for writev() */
74 #include "dlt_client.h"
75 #include "dlt_protocol.h"
78 #define DLT_TESTCLIENT_TEXTBUFSIZE 10024 /* Size of buffer for text output */
79 #define DLT_TESTCLIENT_ECU_ID "ECU1"
81 #define DLT_TESTCLIENT_NUM_TESTS 9
83 /* Function prototypes */
84 int dlt_testclient_message_callback(DltMessage *message, void *data);
108 int test_counter_macro[DLT_TESTCLIENT_NUM_TESTS];
109 int test_counter_function[DLT_TESTCLIENT_NUM_TESTS];
118 * Print usage information of tool.
124 dlt_get_version(version,255);
126 printf("Usage: dlt-test-client [options] hostname/serial_device_name\n");
127 printf("Test against received data from dlt-test-user.\n");
128 printf("%s \n", version);
129 printf("Options:\n");
130 printf(" -a Print DLT messages; payload as ASCII\n");
131 printf(" -x Print DLT messages; payload as hex\n");
132 printf(" -m Print DLT messages; payload as hex and ASCII\n");
133 printf(" -s Print DLT messages; only headers\n");
134 printf(" -v Verbose mode\n");
135 printf(" -h Usage\n");
136 printf(" -y Serial device mode\n");
137 printf(" -b baudrate Serial device baudrate (Default: 115200)\n");
138 printf(" -e ecuid Set ECU ID (Default: ECU1)\n");
139 printf(" -o filename Output messages in new DLT file\n");
140 printf(" -f filename Enable filtering of messages\n");
144 * Main function of tool.
146 int main(int argc, char* argv[])
149 DltTestclientData dltdata;
153 /* Initialize dltdata */
166 dltdata.running_test = 0;
168 for (i=0;i<DLT_TESTCLIENT_NUM_TESTS;i++)
170 dltdata.test_counter_macro[i]=0;
171 dltdata.test_counter_function[i]=0;
174 dltdata.tests_passed = 0;
175 dltdata.tests_failed = 0;
179 /* Fetch command line arguments */
182 while ((c = getopt (argc, argv, "vashyxmf:o:e:b:")) != -1)
223 dltdata.fvalue = optarg;
228 dltdata.ovalue = optarg;
233 dltdata.evalue = optarg;
238 dltdata.bvalue = atoi(optarg);
243 if (optopt == 'o' || optopt == 'f' || optopt == 't')
245 fprintf (stderr, "Option -%c requires an argument.\n", optopt);
247 else if (isprint (optopt))
249 fprintf (stderr, "Unknown option `-%c'.\n", optopt);
253 fprintf (stderr, "Unknown option character `\\x%x'.\n",optopt);
255 /* unknown or wrong option used, show usage information and terminate */
262 return -1;//for parasoft
267 /* Initialize DLT Client */
268 dlt_client_init(&dltclient, dltdata.vflag);
270 /* Register callback to be called when message was received */
271 dlt_client_register_message_callback(dlt_testclient_message_callback);
273 /* Setup DLT Client structure */
274 dltclient.serial_mode = dltdata.yflag;
276 if (dltclient.serial_mode==0)
278 for (index = optind; index < argc; index++)
280 dltclient.servIP = argv[index];
283 if (dltclient.servIP == 0)
285 /* no hostname selected, show usage and terminate */
286 fprintf(stderr,"ERROR: No hostname selected\n");
288 dlt_client_cleanup(&dltclient,dltdata.vflag);
294 for (index = optind; index < argc; index++)
296 dltclient.serialDevice = argv[index];
299 if (dltclient.serialDevice == 0)
301 /* no serial device name selected, show usage and terminate */
302 fprintf(stderr,"ERROR: No serial device name specified\n");
307 dlt_client_setbaudrate(&dltclient,dltdata.bvalue);
310 /* initialise structure to use DLT file */
311 dlt_file_init(&(dltdata.file),dltdata.vflag);
313 /* first parse filter file if filter parameter is used */
314 dlt_filter_init(&(dltdata.filter),dltdata.vflag);
318 if (dlt_filter_load(&(dltdata.filter),dltdata.fvalue,dltdata.vflag)<0)
320 dlt_file_free(&(dltdata.file),dltdata.vflag);
324 dlt_file_set_filter(&(dltdata.file),&(dltdata.filter),dltdata.vflag);
327 /* open DLT output file */
330 dltdata.ohandle = open(dltdata.ovalue,O_WRONLY|O_CREAT, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); /* mode: wb */
332 if (dltdata.ohandle == -1)
334 dlt_file_free(&(dltdata.file),dltdata.vflag);
335 fprintf(stderr,"ERROR: Output file %s cannot be opened!\n",dltdata.ovalue);
342 dlt_set_id(dltdata.ecuid,dltdata.evalue);
346 dlt_set_id(dltdata.ecuid,DLT_TESTCLIENT_ECU_ID);
349 /* Connect to TCP socket or open serial device */
350 if (dlt_client_connect(&dltclient, dltdata.vflag)!=-1)
352 dltdata.sock = dltclient.sock;
354 /* Dlt Client Main Loop */
355 dlt_client_main_loop(&dltclient, &dltdata, dltdata.vflag);
357 /* Dlt Client Cleanup */
358 dlt_client_cleanup(&dltclient,dltdata.vflag);
361 /* dlt-receive cleanup */
364 close(dltdata.ohandle);
367 dlt_file_free(&(dltdata.file),dltdata.vflag);
369 dlt_filter_free(&(dltdata.filter),dltdata.vflag);
374 int dlt_testclient_message_callback(DltMessage *message, void *data)
376 static char text[DLT_TESTCLIENT_TEXTBUFSIZE];
378 DltTestclientData *dltdata;
380 uint32_t type_info, type_info_tmp;
381 int16_t length,length_tmp; /* the macro can set this variable to -1 */
392 if ((message==0) || (data==0))
397 dltdata = (DltTestclientData*)data;
399 /* prepare storage header */
400 if (DLT_IS_HTYP_WEID(message->standardheader->htyp))
402 dlt_set_storageheader(message->storageheader,message->headerextra.ecu);
406 dlt_set_storageheader(message->storageheader,dltdata->ecuid);
409 if ((dltdata->fvalue==0) || (dltdata->fvalue && dlt_message_filter_check(message,&(dltdata->filter),dltdata->vflag)==1))
412 dlt_message_header(message,text,sizeof(text),dltdata->vflag);
417 dlt_message_payload(message,text,sizeof(text),DLT_OUTPUT_ASCII,dltdata->vflag);
420 printf("[%s]\n",text);
423 if (strcmp(text,"Tests starting")==0)
425 printf("Tests starting\n");
429 if (strcmp(text,"Test1: (Macro IF) Test all log levels")==0)
431 printf("Test1m: (Macro IF) Test all log levels\n");
432 dltdata->running_test = 1;
433 dltdata->test_counter_macro[0] = 0;
435 else if (strcmp(text,"Test1: (Macro IF) finished")==0)
437 /* >=4, as "info" is default log level */
438 if (dltdata->test_counter_macro[0]>=4)
440 printf("Test1m PASSED\n");
441 dltdata->tests_passed++;
445 printf("Test1m FAILED\n");
446 dltdata->tests_failed++;
448 dltdata->running_test = 0;
450 else if (dltdata->running_test==1)
452 if (DLT_IS_HTYP_UEH(message->standardheader->htyp))
454 if ((DLT_GET_MSIN_MSTP(message->extendedheader->msin))==DLT_TYPE_LOG)
456 mtin=DLT_GET_MSIN_MTIN(message->extendedheader->msin);
458 if (mtin==DLT_LOG_FATAL)
460 dltdata->test_counter_macro[0]++;
462 if (mtin==DLT_LOG_ERROR)
464 dltdata->test_counter_macro[0]++;
466 if (mtin==DLT_LOG_WARN)
468 dltdata->test_counter_macro[0]++;
470 if (mtin==DLT_LOG_INFO)
472 dltdata->test_counter_macro[0]++;
474 if (mtin==DLT_LOG_DEBUG)
476 dltdata->test_counter_macro[0]++;
478 if (mtin==DLT_LOG_VERBOSE)
480 dltdata->test_counter_macro[0]++;
487 if (strcmp(text,"Test2: (Macro IF) Test all variable types (verbose)")==0)
489 printf("Test2m: (Macro IF) Test all variable types (verbose)\n");
490 dltdata->running_test = 2;
491 dltdata->test_counter_macro[1] = 0;
493 else if (strcmp(text,"Test2: (Macro IF) finished")==0)
495 if (dltdata->test_counter_macro[1]==16)
497 printf("Test2m PASSED\n");
498 dltdata->tests_passed++;
502 printf("Test2m FAILED\n");
503 dltdata->tests_failed++;
505 dltdata->running_test = 0;
507 else if (dltdata->running_test==2)
510 if (!(DLT_MSG_IS_NONVERBOSE(message)))
514 length=0; /* the macro can set this variable to -1 */
516 ptr = message->databuffer;
517 datalength = message->datasize;
520 if ((DLT_GET_MSIN_MSTP(message->extendedheader->msin))==DLT_TYPE_LOG)
522 if (message->extendedheader->noar>=2)
524 /* get type of first argument: must be string */
525 DLT_MSG_READ_VALUE(type_info_tmp,ptr,datalength,uint32_t);
526 type_info=DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp);
528 if (type_info & DLT_TYPE_INFO_STRG)
531 DLT_MSG_READ_VALUE(length_tmp,ptr,datalength,uint16_t);
532 length=DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp);
539 /* read type of second argument: must be raw */
540 DLT_MSG_READ_VALUE(type_info_tmp,ptr,datalength,uint32_t);
541 type_info=DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp);
543 if ((type_info & DLT_TYPE_INFO_STRG) && ((type_info & DLT_TYPE_INFO_SCOD) == DLT_SCOD_ASCII))
545 if (datalength==(sizeof(uint16_t)+strlen("Hello world")+1))
547 dltdata->test_counter_macro[1]++;
550 else if ((type_info & DLT_TYPE_INFO_STRG) && ((type_info & DLT_TYPE_INFO_SCOD) == DLT_SCOD_UTF8))
552 if (datalength==(sizeof(uint16_t)+strlen("Hello world")+1))
554 dltdata->test_counter_macro[1]++;
557 else if (type_info & DLT_TYPE_INFO_BOOL)
559 if (datalength==sizeof(uint8_t))
561 dltdata->test_counter_macro[1]++;
564 else if (type_info & DLT_TYPE_INFO_SINT)
566 switch (type_info & DLT_TYPE_INFO_TYLE)
570 if (datalength==sizeof(int8_t))
572 dltdata->test_counter_macro[1]++;
578 if (datalength==sizeof(int16_t))
580 dltdata->test_counter_macro[1]++;
586 if (datalength==sizeof(int32_t))
588 dltdata->test_counter_macro[1]++;
594 if (datalength==sizeof(int64_t))
596 dltdata->test_counter_macro[1]++;
600 case DLT_TYLE_128BIT:
602 /* Not tested here */
607 else if (type_info & DLT_TYPE_INFO_UINT)
609 switch (type_info & DLT_TYPE_INFO_TYLE)
613 if (datalength==sizeof(uint8_t))
615 dltdata->test_counter_macro[1]++;
621 if (datalength==sizeof(uint16_t))
623 dltdata->test_counter_macro[1]++;
629 if (datalength==sizeof(uint32_t))
631 dltdata->test_counter_macro[1]++;
637 if (datalength==sizeof(uint64_t))
639 dltdata->test_counter_macro[1]++;
643 case DLT_TYLE_128BIT:
645 /* Not tested here */
650 else if (type_info & DLT_TYPE_INFO_FLOA)
652 switch (type_info & DLT_TYPE_INFO_TYLE)
656 /* Not tested here */
661 /* Not tested here */
666 if (datalength==(2*sizeof(float)+sizeof(uint32_t)))
668 dltdata->test_counter_macro[1]++;
674 if (datalength==(2*sizeof(double)+sizeof(uint32_t)))
676 dltdata->test_counter_macro[1]++;
680 case DLT_TYLE_128BIT:
681 /* Not tested here */
685 else if (type_info & DLT_TYPE_INFO_RAWD)
688 DLT_MSG_READ_VALUE(length_tmp,ptr,datalength,uint16_t);
689 length=DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp);
690 if ((length==datalength) && (10 == length))
692 dltdata->test_counter_macro[1]++;
703 if (strcmp(text,"Test3: (Macro IF) Test all variable types (non-verbose)")==0)
705 printf("Test3m: (Macro IF) Test all variable types (non-verbose)\n");
706 dltdata->running_test = 3;
707 dltdata->test_counter_macro[2]=0;
709 else if (strcmp(text,"Test3: (Macro IF) finished")==0)
711 if (dltdata->test_counter_macro[2]==16)
713 printf("Test3m PASSED\n");
714 dltdata->tests_passed++;
718 printf("Test3m FAILED\n");
719 dltdata->tests_failed++;
721 dltdata->running_test = 0;
723 else if (dltdata->running_test==3)
726 if (DLT_MSG_IS_NONVERBOSE(message))
730 ptr = message->databuffer;
731 datalength = message->datasize;
734 tc_old=dltdata->test_counter_macro[2];
737 DLT_MSG_READ_VALUE(id_tmp,ptr,datalength,uint32_t);
738 id=DLT_ENDIAN_GET_32(message->standardheader->htyp, id_tmp);
740 /* Length of string */
741 datalength-=sizeof(uint16_t);
742 ptr+=sizeof(uint16_t);
748 slen=strlen("string")+1;
751 if (datalength==sizeof(uint16_t)+strlen("Hello world")+1)
753 dltdata->test_counter_macro[2]++;
759 slen=strlen("utf8")+1;
762 if (datalength==sizeof(uint16_t)+strlen("Hello world")+1)
764 dltdata->test_counter_macro[2]++;
770 slen=strlen("bool")+1;
773 if (datalength==sizeof(uint8_t))
775 dltdata->test_counter_macro[2]++;
781 slen=strlen("int")+1;
784 if (datalength==sizeof(int))
786 dltdata->test_counter_macro[2]++;
792 slen=strlen("int8")+1;
795 if (datalength==sizeof(int8_t))
797 dltdata->test_counter_macro[2]++;
803 slen=strlen("int16")+1;
806 if (datalength==sizeof(int16_t))
808 dltdata->test_counter_macro[2]++;
814 slen=strlen("int32")+1;
817 if (datalength==sizeof(int32_t))
819 dltdata->test_counter_macro[2]++;
825 slen=strlen("int64")+1;
828 if (datalength==sizeof(int64_t))
830 dltdata->test_counter_macro[2]++;
836 slen=strlen("uint")+1;
839 if (datalength==sizeof(unsigned int))
841 dltdata->test_counter_macro[2]++;
847 slen=strlen("uint8")+1;
850 if (datalength==sizeof(uint8_t))
852 dltdata->test_counter_macro[2]++;
858 slen=strlen("uint16")+1;
861 if (datalength==sizeof(uint16_t))
863 dltdata->test_counter_macro[2]++;
869 slen=strlen("uint32")+1;
872 if (datalength==sizeof(uint32_t))
874 dltdata->test_counter_macro[2]++;
880 slen=strlen("uint64")+1;
883 if (datalength==sizeof(uint64_t))
885 dltdata->test_counter_macro[2]++;
891 slen=strlen("float32")+1;
894 /* 2*, as the min and the max is transfered */
895 if (datalength==2*sizeof(float))
897 dltdata->test_counter_macro[2]++;
903 slen=strlen("float64")+1;
906 /* 2*, as the min and the max is transfered */
907 if (datalength==2*sizeof(double))
909 dltdata->test_counter_macro[2]++;
915 slen=strlen("raw")+1;
918 datalength-=sizeof(uint16_t);
919 ptr+=sizeof(uint16_t);
922 dltdata->test_counter_macro[2]++;
928 if ((slen>=0) && (tc_old==dltdata->test_counter_macro[2]))
930 printf("ID=%d, Datalength=%d => Failed!",id,datalength);
936 if (strcmp(text,"Test4: (Macro IF) Test different message sizes")==0)
938 printf("Test4m: (Macro IF) Test different message sizes\n");
939 dltdata->running_test = 4;
940 dltdata->test_counter_macro[3]=0;
942 else if (strcmp(text,"Test4: (Macro IF) finished")==0)
944 if (dltdata->test_counter_macro[3]==4)
946 printf("Test4m PASSED\n");
947 dltdata->tests_passed++;
951 printf("Test4m FAILED\n");
952 dltdata->tests_failed++;
954 dltdata->running_test = 0;
956 else if (dltdata->running_test==4)
958 /* Extended header */
959 if (DLT_IS_HTYP_UEH(message->standardheader->htyp))
962 if ((DLT_GET_MSIN_MSTP(message->extendedheader->msin))==DLT_TYPE_LOG)
965 if (DLT_IS_MSIN_VERB(message->extendedheader->msin))
968 if (message->extendedheader->noar==2)
974 length_tmp=0; /* the macro can set this variable to -1 */
976 ptr = message->databuffer;
977 datalength = message->datasize;
979 /* first read the type info of the first argument: must be string */
980 DLT_MSG_READ_VALUE(type_info_tmp,ptr,datalength,uint32_t);
981 type_info=DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp);
983 if (type_info & DLT_TYPE_INFO_STRG)
986 DLT_MSG_READ_VALUE(length_tmp,ptr,datalength,uint16_t);
987 length=DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp);
994 /* read type of second argument: must be raw */
995 DLT_MSG_READ_VALUE(type_info_tmp,ptr,datalength,uint32_t);
996 type_info=DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp);
998 if (type_info & DLT_TYPE_INFO_RAWD)
1000 /* get length of raw data block */
1001 DLT_MSG_READ_VALUE(length_tmp,ptr,datalength,uint16_t);
1002 length=DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp);
1004 if ((length>=0) && (length==datalength))
1006 //printf("Raw data found in payload, length=");
1007 //printf("%d, datalength=%d \n", length, datalength);
1008 dltdata->test_counter_macro[3]++;
1020 if (strcmp(text,"Test5: (Macro IF) Test high-level API")==0)
1022 printf("Test5m: (Macro IF) Test high-level API\n");
1023 dltdata->running_test = 5;
1024 dltdata->test_counter_macro[4]=0;
1026 else if (strcmp(text,"Test5: (Macro IF) finished")==0)
1028 if (dltdata->test_counter_macro[4]==12)
1030 printf("Test5m PASSED\n");
1031 dltdata->tests_passed++;
1035 printf("Test5m FAILED\n");
1036 dltdata->tests_failed++;
1038 dltdata->running_test = 0;
1040 else if (dltdata->running_test==5)
1042 if (strcmp(text,"Next line: DLT_LOG_INT")==0)
1044 dltdata->test_counter_macro[4]++;
1046 if (strcmp(text,"-42")==0)
1048 dltdata->test_counter_macro[4]++;
1051 if (strcmp(text,"Next line: DLT_LOG_UINT")==0)
1053 dltdata->test_counter_macro[4]++;
1055 if (strcmp(text,"42")==0)
1057 dltdata->test_counter_macro[4]++;
1060 if (strcmp(text,"Next line: DLT_LOG_STRING")==0)
1062 dltdata->test_counter_macro[4]++;
1064 if (strcmp(text,"String output")==0)
1066 dltdata->test_counter_macro[4]++;
1069 if (strcmp(text,"Next line: DLT_LOG_RAW")==0)
1071 dltdata->test_counter_macro[4]++;
1073 if (strcmp(text,"00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f")==0)
1075 dltdata->test_counter_macro[4]++;
1078 if (strcmp(text,"Next line: DLT_LOG_STRING_INT")==0)
1080 dltdata->test_counter_macro[4]++;
1082 if (strcmp(text,"String output: -42")==0)
1084 dltdata->test_counter_macro[4]++;
1087 if (strcmp(text,"Next line: DLT_LOG_STRING_UINT")==0)
1089 dltdata->test_counter_macro[4]++;
1091 if (strcmp(text,"String output: 42")==0)
1093 dltdata->test_counter_macro[4]++;
1098 if (strcmp(text,"Test 6: (Macro IF) Test local printing")==0)
1100 printf("Test6m: (Macro IF) Test local printing\n");
1101 dltdata->running_test = 6;
1102 dltdata->test_counter_macro[5]=0;
1104 else if (strcmp(text,"Test6: (Macro IF) finished")==0)
1106 if (dltdata->test_counter_macro[5]==2)
1108 printf("Test6m PASSED\n");
1109 dltdata->tests_passed++;
1113 printf("Test6m FAILED\n");
1114 dltdata->tests_failed++;
1116 dltdata->running_test = 0;
1118 else if (dltdata->running_test==6)
1120 if (strcmp(text,"Message (visible: locally printed)")==0)
1122 printf("Message (visible: locally printed)\n");
1123 dltdata->test_counter_macro[5]++;
1125 if (strcmp(text,"Message (invisible: not locally printed)")==0)
1127 printf("Message (invisible: not locally printed)\n");
1128 dltdata->test_counter_macro[5]++;
1133 if (strcmp(text,"Test 7: (Macro IF) Test network trace")==0)
1135 printf("Test7m: (Macro IF) Test network trace\n");
1136 dltdata->running_test = 7;
1137 dltdata->test_counter_macro[6]=0;
1139 else if (strcmp(text,"Test7: (Macro IF) finished")==0)
1141 if (dltdata->test_counter_macro[6]==8)
1143 printf("Test7m PASSED\n");
1144 dltdata->tests_passed++;
1148 printf("Test7m FAILED\n");
1149 dltdata->tests_failed++;
1151 dltdata->running_test = 0;
1153 else if (dltdata->running_test==7)
1155 if (DLT_IS_HTYP_UEH(message->standardheader->htyp))
1157 if ((DLT_GET_MSIN_MSTP(message->extendedheader->msin))==DLT_TYPE_NW_TRACE)
1159 /* Check message type information*/
1160 /* Each correct message type increases the counter by 1 */
1161 mtin=DLT_GET_MSIN_MTIN(message->extendedheader->msin);
1163 if (mtin==DLT_NW_TRACE_IPC)
1165 dltdata->test_counter_macro[6]++;
1167 if (mtin==DLT_NW_TRACE_CAN)
1169 dltdata->test_counter_macro[6]++;
1171 if (mtin==DLT_NW_TRACE_FLEXRAY)
1173 dltdata->test_counter_macro[6]++;
1175 if (mtin==DLT_NW_TRACE_MOST)
1177 dltdata->test_counter_macro[6]++;
1180 /* Check payload, must be two arguments (2 raw data blocks) */
1181 /* If the payload is correct, the counter is increased by 1 */
1182 if (message->extendedheader->noar==2)
1187 length=0,length_tmp=0; /* the macro can set this variable to -1 */
1189 ptr = message->databuffer;
1190 datalength = message->datasize;
1192 /* first read the type info of the first argument: must be string */
1193 DLT_MSG_READ_VALUE(type_info_tmp,ptr,datalength,uint32_t);
1194 type_info=DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp);
1196 if (type_info & DLT_TYPE_INFO_RAWD)
1199 DLT_MSG_READ_VALUE(length_tmp,ptr,datalength,uint16_t);
1200 length=DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp);
1207 /* read type of second argument: must be raw */
1208 DLT_MSG_READ_VALUE(type_info_tmp,ptr,datalength,uint32_t);
1209 type_info=DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp);
1211 if (type_info & DLT_TYPE_INFO_RAWD)
1213 /* get length of raw data block */
1214 DLT_MSG_READ_VALUE(length_tmp,ptr,datalength,uint16_t);
1215 length=DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp);
1217 if ((length>=0) && (length==datalength))
1219 //printf("Raw data found in payload, length=");
1220 //printf("%d, datalength=%d \n", length, datalength);
1221 dltdata->test_counter_macro[6]++;
1232 if (strcmp(text,"Test 8: (Macro IF) Test truncated network trace")==0)
1234 printf("Test8m: (Macro IF) Test truncated network trace\n");
1235 dltdata->running_test = 8;
1236 dltdata->test_counter_macro[7]=0;
1238 else if (strcmp(text,"Test8: (Macro IF) finished")==0)
1240 if (dltdata->test_counter_macro[7]==20)
1242 printf("Test8m PASSED\n");
1243 dltdata->tests_passed++;
1247 printf("Test8m FAILED\n");
1248 dltdata->tests_failed++;
1250 dltdata->running_test = 0;
1252 else if (dltdata->running_test==8)
1254 if (DLT_IS_HTYP_UEH(message->standardheader->htyp))
1256 if ((DLT_GET_MSIN_MSTP(message->extendedheader->msin))==DLT_TYPE_NW_TRACE)
1258 /* Check message type information*/
1259 /* Each correct message type increases the counter by 1 */
1260 mtin=DLT_GET_MSIN_MTIN(message->extendedheader->msin);
1262 if (mtin==DLT_NW_TRACE_IPC)
1264 dltdata->test_counter_macro[7]++;
1266 if (mtin==DLT_NW_TRACE_CAN)
1268 dltdata->test_counter_macro[7]++;
1270 if (mtin==DLT_NW_TRACE_FLEXRAY)
1272 dltdata->test_counter_macro[7]++;
1274 if (mtin==DLT_NW_TRACE_MOST)
1276 dltdata->test_counter_macro[7]++;
1279 /* Check payload, must be two arguments (2 raw data blocks) */
1280 /* If the payload is correct, the counter is increased by 1 */
1281 if (message->extendedheader->noar==4)
1285 length=0,length_tmp=0; /* the macro can set this variable to -1 */
1287 ptr = message->databuffer;
1288 datalength = message->datasize;
1290 DLT_MSG_READ_VALUE(type_info_tmp,ptr,datalength,uint32_t);
1291 type_info=DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp);
1292 if(type_info & DLT_TYPE_INFO_STRG)
1296 DLT_MSG_READ_VALUE(length_tmp,ptr,datalength,uint16_t);
1297 length=DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp);
1298 DLT_MSG_READ_STRING(chdr, ptr, datalength, length);
1300 if(strcmp((char *)chdr, "NWTR")==0)
1302 dltdata->test_counter_macro[7]++;
1305 DLT_MSG_READ_VALUE(type_info_tmp,ptr,datalength,uint32_t);
1306 type_info=DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp);
1307 if(type_info & DLT_TYPE_INFO_RAWD)
1310 DLT_MSG_READ_VALUE(length_tmp,ptr,datalength,uint16_t);
1311 length=DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp);
1312 DLT_MSG_READ_STRING(hdr, ptr, datalength, length);
1314 if(length == 16 && hdr[15] == 15)
1316 dltdata->test_counter_macro[7]++;
1319 DLT_MSG_READ_VALUE(type_info_tmp,ptr,datalength,uint32_t);
1320 type_info=DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp);
1321 if(type_info & DLT_TYPE_INFO_UINT)
1324 DLT_MSG_READ_VALUE(length_tmp,ptr,datalength,uint16_t);
1325 orig_size=DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp);
1326 if(orig_size == 1024*5)
1328 dltdata->test_counter_macro[7]++;
1331 DLT_MSG_READ_VALUE(type_info_tmp,ptr,datalength,uint32_t);
1332 type_info=DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp);
1333 if(type_info & DLT_TYPE_INFO_RAWD)
1335 DLT_MSG_READ_VALUE(length_tmp,ptr,datalength,uint16_t);
1336 length=DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp);
1337 // Size of the truncated message after headers
1340 dltdata->test_counter_macro[7]++;
1353 if (strcmp(text,"Test 9: (Macro IF) Test segmented network trace")==0)
1355 printf("Test9m: (Macro IF) Test segmented network trace\n");
1356 dltdata->running_test = 9;
1357 dltdata->test_counter_macro[8]=0;
1359 else if (strcmp(text,"Test9: (Macro IF) finished")==0)
1361 /* (Interface types) * (results per packet)*/
1362 if (dltdata->test_counter_macro[8]==4*35)
1364 printf("Test9m PASSED\n");
1365 dltdata->tests_passed++;
1369 printf("Test9m FAILED\n");
1370 dltdata->tests_failed++;
1372 dltdata->running_test = 0;
1374 else if (dltdata->running_test==9)
1376 if (DLT_IS_HTYP_UEH(message->standardheader->htyp))
1378 if ((DLT_GET_MSIN_MSTP(message->extendedheader->msin))==DLT_TYPE_NW_TRACE)
1380 /* Check message type information*/
1381 /* Each correct message type increases the counter by 1 */
1382 mtin=DLT_GET_MSIN_MTIN(message->extendedheader->msin);
1384 if (mtin==DLT_NW_TRACE_IPC)
1386 dltdata->test_counter_macro[8]++;
1388 if (mtin==DLT_NW_TRACE_CAN)
1390 dltdata->test_counter_macro[8]++;
1392 if (mtin==DLT_NW_TRACE_FLEXRAY)
1394 dltdata->test_counter_macro[8]++;
1396 if (mtin==DLT_NW_TRACE_MOST)
1398 dltdata->test_counter_macro[8]++;
1401 /* Payload for first segmented message */
1402 if (message->extendedheader->noar==6)
1407 length=0,length_tmp=0; /* the macro can set this variable to -1 */
1409 ptr = message->databuffer;
1410 datalength = message->datasize;
1413 DLT_MSG_READ_VALUE(type_info_tmp,ptr,datalength,uint32_t);
1414 type_info=DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp);
1415 if(type_info & DLT_TYPE_INFO_STRG)
1418 DLT_MSG_READ_VALUE(length_tmp,ptr,datalength,uint16_t);
1419 length=DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp);
1420 DLT_MSG_READ_STRING(chdr, ptr, datalength, length);
1421 if(strcmp((char *)chdr, "NWST")==0)
1423 dltdata->test_counter_macro[8]++;
1427 DLT_MSG_READ_VALUE(type_info_tmp,ptr,datalength,uint32_t);
1428 type_info=DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp);
1429 if(type_info & DLT_TYPE_INFO_UINT)
1432 DLT_MSG_READ_VALUE(length_tmp,ptr,datalength,uint16_t);
1433 handle=DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp);
1436 dltdata->test_counter_macro[8]++;
1440 DLT_MSG_READ_VALUE(type_info_tmp,ptr,datalength,uint32_t);
1441 type_info=DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp);
1442 if(type_info & DLT_TYPE_INFO_RAWD)
1444 DLT_MSG_READ_VALUE(length_tmp,ptr,datalength,uint16_t);
1445 length=DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp);
1447 // Test packet header size 16
1450 dltdata->test_counter_macro[8]++;
1457 DLT_MSG_READ_VALUE(type_info_tmp,ptr,datalength,uint32_t);
1458 type_info=DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp);
1459 if(type_info & DLT_TYPE_INFO_UINT)
1462 DLT_MSG_READ_VALUE(length_tmp,ptr,datalength,uint16_t);
1463 pl_sz=DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp);
1465 // Test packet payload size.
1468 dltdata->test_counter_macro[8]++;
1472 DLT_MSG_READ_VALUE(type_info_tmp,ptr,datalength,uint32_t);
1473 type_info=DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp);
1474 if(type_info & DLT_TYPE_INFO_UINT)
1477 DLT_MSG_READ_VALUE(length_tmp,ptr,datalength,uint16_t);
1478 scount=DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp);
1480 /* Test packet segment count 5 */
1483 dltdata->test_counter_macro[8]++;
1486 /* Segment length */
1487 DLT_MSG_READ_VALUE(type_info_tmp,ptr,datalength,uint32_t);
1488 type_info=DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp);
1489 if(type_info & DLT_TYPE_INFO_UINT)
1492 DLT_MSG_READ_VALUE(length_tmp,ptr,datalength,uint16_t);
1493 slen=DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp);
1494 /* Default segment size 1024 */
1497 dltdata->test_counter_macro[8]++;
1507 else if (message->extendedheader->noar==4)
1512 length=0,length_tmp=0; /* the macro can set this variable to -1 */
1514 ptr = message->databuffer;
1515 datalength = message->datasize;
1518 DLT_MSG_READ_VALUE(type_info_tmp,ptr,datalength,uint32_t);
1519 type_info=DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp);
1520 if(type_info & DLT_TYPE_INFO_STRG)
1523 DLT_MSG_READ_VALUE(length_tmp,ptr,datalength,uint16_t);
1524 length=DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp);
1525 DLT_MSG_READ_STRING(chdr, ptr, datalength, length);
1526 if(strcmp((char *)chdr, "NWCH")==0)
1528 dltdata->test_counter_macro[8]++;
1532 DLT_MSG_READ_VALUE(type_info_tmp,ptr,datalength,uint32_t);
1533 type_info=DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp);
1534 if(type_info & DLT_TYPE_INFO_UINT)
1537 DLT_MSG_READ_VALUE(length_tmp,ptr,datalength,uint16_t);
1538 handle=DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp);
1541 dltdata->test_counter_macro[8]++;
1545 DLT_MSG_READ_VALUE(type_info_tmp,ptr,datalength,uint32_t);
1546 type_info=DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp);
1547 if(type_info & DLT_TYPE_INFO_UINT)
1550 DLT_MSG_READ_VALUE(length_tmp,ptr,datalength,uint16_t);
1551 //seq=DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp);
1552 dltdata->test_counter_macro[8]++;
1555 DLT_MSG_READ_VALUE(type_info_tmp,ptr,datalength,uint32_t);
1556 type_info=DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp);
1557 if(type_info & DLT_TYPE_INFO_RAWD)
1559 DLT_MSG_READ_VALUE(length_tmp,ptr,datalength,uint16_t);
1560 length=DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp);
1562 // Segment size by default, 1024
1565 dltdata->test_counter_macro[8]++;
1573 else if (message->extendedheader->noar==2)
1578 length=0,length_tmp=0; /* the macro can set this variable to -1 */
1580 ptr = message->databuffer;
1581 datalength = message->datasize;
1584 DLT_MSG_READ_VALUE(type_info_tmp,ptr,datalength,uint32_t);
1585 type_info=DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp);
1586 if(type_info & DLT_TYPE_INFO_STRG)
1589 DLT_MSG_READ_VALUE(length_tmp,ptr,datalength,uint16_t);
1590 length=DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp);
1591 DLT_MSG_READ_STRING(chdr, ptr, datalength, length);
1592 if(strcmp((char *)chdr, "NWEN")==0)
1594 dltdata->test_counter_macro[8]++;
1598 DLT_MSG_READ_VALUE(type_info_tmp,ptr,datalength,uint32_t);
1599 type_info=DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp);
1600 if(type_info & DLT_TYPE_INFO_UINT)
1603 DLT_MSG_READ_VALUE(length_tmp,ptr,datalength,uint16_t);
1604 handle=DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp);
1607 dltdata->test_counter_macro[8]++;
1617 if (strcmp(text,"Test1: (Function IF) Test all log levels")==0)
1619 printf("Test1f: (Function IF) Test all log levels\n");
1620 dltdata->running_test = 10;
1621 dltdata->test_counter_function[0] = 0;
1623 else if (strcmp(text,"Test1: (Function IF) finished")==0)
1625 /* >=4, as "info" is default log level */
1626 if (dltdata->test_counter_function[0]>=4)
1628 printf("Test1f PASSED\n");
1629 dltdata->tests_passed++;
1633 printf("Test1f FAILED\n");
1634 dltdata->tests_failed++;
1636 dltdata->running_test = 0;
1638 else if (dltdata->running_test==10)
1640 if (DLT_IS_HTYP_UEH(message->standardheader->htyp))
1642 if ((DLT_GET_MSIN_MSTP(message->extendedheader->msin))==DLT_TYPE_LOG)
1644 mtin=DLT_GET_MSIN_MTIN(message->extendedheader->msin);
1646 if (mtin==DLT_LOG_FATAL)
1648 dltdata->test_counter_function[0]++;
1650 if (mtin==DLT_LOG_ERROR)
1652 dltdata->test_counter_function[0]++;
1654 if (mtin==DLT_LOG_WARN)
1656 dltdata->test_counter_function[0]++;
1658 if (mtin==DLT_LOG_INFO)
1660 dltdata->test_counter_function[0]++;
1662 if (mtin==DLT_LOG_DEBUG)
1664 dltdata->test_counter_function[0]++;
1666 if (mtin==DLT_LOG_VERBOSE)
1668 dltdata->test_counter_function[0]++;
1675 if (strcmp(text,"Test2: (Function IF) Test all variable types (verbose)")==0)
1677 printf("Test2f: (Function IF) Test all variable types (verbose)\n");
1678 dltdata->running_test = 11;
1679 dltdata->test_counter_function[1] = 0;
1681 else if (strcmp(text,"Test2: (Function IF) finished")==0)
1683 if (dltdata->test_counter_function[1]==14)
1685 printf("Test2f PASSED\n");
1686 dltdata->tests_passed++;
1690 printf("Test2f FAILED\n");
1691 dltdata->tests_failed++;
1693 dltdata->running_test = 0;
1695 else if (dltdata->running_test==11)
1698 if (!(DLT_MSG_IS_NONVERBOSE(message)))
1703 length_tmp=0; /* the macro can set this variable to -1 */
1704 ptr = message->databuffer;
1705 datalength = message->datasize;
1708 if ((DLT_GET_MSIN_MSTP(message->extendedheader->msin))==DLT_TYPE_LOG)
1710 if (message->extendedheader->noar>=2)
1712 /* get type of first argument: must be string */
1713 DLT_MSG_READ_VALUE(type_info_tmp,ptr,datalength,uint32_t);
1714 type_info=DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp);
1716 if (type_info & DLT_TYPE_INFO_STRG)
1719 DLT_MSG_READ_VALUE(length_tmp,ptr,datalength,uint16_t);
1720 length=DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp);
1727 /* read type of second argument: must be raw */
1728 DLT_MSG_READ_VALUE(type_info_tmp,ptr,datalength,uint32_t);
1729 type_info=DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp);
1731 if (type_info & DLT_TYPE_INFO_BOOL)
1733 if (datalength==sizeof(uint8_t))
1735 dltdata->test_counter_function[1]++;
1738 else if (type_info & DLT_TYPE_INFO_SINT)
1740 switch (type_info & DLT_TYPE_INFO_TYLE)
1744 if (datalength==sizeof(int8_t))
1746 dltdata->test_counter_function[1]++;
1750 case DLT_TYLE_16BIT:
1752 if (datalength==sizeof(int16_t))
1754 dltdata->test_counter_function[1]++;
1758 case DLT_TYLE_32BIT:
1760 if (datalength==sizeof(int32_t))
1762 dltdata->test_counter_function[1]++;
1766 case DLT_TYLE_64BIT:
1768 if (datalength==sizeof(int64_t))
1770 dltdata->test_counter_function[1]++;
1774 case DLT_TYLE_128BIT:
1776 /* Not tested here */
1781 else if (type_info & DLT_TYPE_INFO_UINT)
1783 switch (type_info & DLT_TYPE_INFO_TYLE)
1787 if (datalength==sizeof(uint8_t))
1789 dltdata->test_counter_function[1]++;
1793 case DLT_TYLE_16BIT:
1795 if (datalength==sizeof(uint16_t))
1797 dltdata->test_counter_function[1]++;
1801 case DLT_TYLE_32BIT:
1803 if (datalength==sizeof(uint32_t))
1805 dltdata->test_counter_function[1]++;
1809 case DLT_TYLE_64BIT:
1811 if (datalength==sizeof(uint64_t))
1813 dltdata->test_counter_function[1]++;
1817 case DLT_TYLE_128BIT:
1819 /* Not tested here */
1824 else if (type_info & DLT_TYPE_INFO_FLOA)
1826 switch (type_info & DLT_TYPE_INFO_TYLE)
1830 /* Not tested here */
1833 case DLT_TYLE_16BIT:
1835 /* Not tested here */
1838 case DLT_TYLE_32BIT:
1840 if (datalength==(2*sizeof(float)+sizeof(uint32_t)))
1842 dltdata->test_counter_function[1]++;
1846 case DLT_TYLE_64BIT:
1848 if (datalength==(2*sizeof(double)+sizeof(uint32_t)))
1850 dltdata->test_counter_function[1]++;
1854 case DLT_TYLE_128BIT:
1856 /* Not tested here */
1861 else if (type_info & DLT_TYPE_INFO_RAWD)
1864 DLT_MSG_READ_VALUE(length_tmp,ptr,datalength,uint16_t);
1865 length=DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp);
1866 if ((length==datalength) && (length==10))
1868 dltdata->test_counter_function[1]++;
1879 if (strcmp(text,"Test3: (Function IF) Test all variable types (non-verbose)")==0)
1881 printf("Test3f: (Function IF) Test all variable types (non-verbose)\n");
1882 dltdata->running_test = 12;
1883 dltdata->test_counter_function[2]=0;
1885 else if (strcmp(text,"Test3: (Function IF) finished")==0)
1887 if (dltdata->test_counter_function[2]==14)
1889 printf("Test3f PASSED\n");
1890 dltdata->tests_passed++;
1894 printf("Test3f FAILED\n");
1895 dltdata->tests_failed++;
1897 dltdata->running_test = 0;
1899 else if (dltdata->running_test==12)
1902 if (DLT_MSG_IS_NONVERBOSE(message))
1906 ptr = message->databuffer;
1907 datalength = message->datasize;
1910 tc_old=dltdata->test_counter_function[2];
1912 /* Get message id */
1913 DLT_MSG_READ_VALUE(id_tmp,ptr,datalength,uint32_t);
1914 id=DLT_ENDIAN_GET_32(message->standardheader->htyp, id_tmp);
1916 /* Length of string */
1917 datalength-=sizeof(uint16_t);
1918 ptr+=sizeof(uint16_t);
1924 slen=strlen("bool")+1;
1927 if (datalength==sizeof(uint8_t))
1929 dltdata->test_counter_function[2]++;
1935 slen=strlen("int")+1;
1938 if (datalength==sizeof(int))
1940 dltdata->test_counter_function[2]++;
1946 slen=strlen("int8")+1;
1949 if (datalength==sizeof(int8_t))
1951 dltdata->test_counter_function[2]++;
1957 slen=strlen("int16")+1;
1960 if (datalength==sizeof(int16_t))
1962 dltdata->test_counter_function[2]++;
1968 slen=strlen("int32")+1;
1971 if (datalength==sizeof(int32_t))
1973 dltdata->test_counter_function[2]++;
1979 slen=strlen("int64")+1;
1982 if (datalength==sizeof(int64_t))
1984 dltdata->test_counter_function[2]++;
1990 slen=strlen("uint")+1;
1993 if (datalength==sizeof(unsigned int))
1995 dltdata->test_counter_function[2]++;
2001 slen=strlen("uint8")+1;
2004 if (datalength==sizeof(uint8_t))
2006 dltdata->test_counter_function[2]++;
2012 slen=strlen("uint16")+1;
2015 if (datalength==sizeof(uint16_t))
2017 dltdata->test_counter_function[2]++;
2023 slen=strlen("uint32")+1;
2026 if (datalength==sizeof(uint32_t))
2028 dltdata->test_counter_function[2]++;
2034 slen=strlen("uint64")+1;
2037 if (datalength==sizeof(uint64_t))
2039 dltdata->test_counter_function[2]++;
2045 slen=strlen("float32")+1;
2048 /* 2*, as the min and the max is transfered */
2049 if (datalength==2*sizeof(float))
2051 dltdata->test_counter_function[2]++;
2057 slen=strlen("float64")+1;
2060 /* 2*, as the min and the max is transfered */
2061 if (datalength==2*sizeof(double))
2063 dltdata->test_counter_function[2]++;
2069 slen=strlen("raw")+1;
2072 datalength-=sizeof(uint16_t);
2073 ptr+=sizeof(uint16_t);
2076 dltdata->test_counter_function[2]++;
2082 if ((slen>=0) && (tc_old==dltdata->test_counter_function[2]))
2084 printf("ID=%d, Datalength=%d => Failed!",id,datalength);
2090 if (strcmp(text,"Test4: (Function IF) Test different message sizes")==0)
2092 printf("Test4f: (Function IF) Test different message sizes\n");
2093 dltdata->running_test = 13;
2094 dltdata->test_counter_function[3]=0;
2096 else if (strcmp(text,"Test4: (Function IF) finished")==0)
2098 if (dltdata->test_counter_function[3]==4)
2100 printf("Test4f PASSED\n");
2101 dltdata->tests_passed++;
2105 printf("Test4f FAILED\n");
2106 dltdata->tests_failed++;
2108 dltdata->running_test = 0;
2110 else if (dltdata->running_test==13)
2112 /* Extended header */
2113 if (DLT_IS_HTYP_UEH(message->standardheader->htyp))
2116 if ((DLT_GET_MSIN_MSTP(message->extendedheader->msin))==DLT_TYPE_LOG)
2119 if (DLT_IS_MSIN_VERB(message->extendedheader->msin))
2122 if (message->extendedheader->noar==2)
2128 length_tmp=0; /* the macro can set this variable to -1 */
2130 ptr = message->databuffer;
2131 datalength = message->datasize;
2133 /* first read the type info of the first argument: should be string */
2134 DLT_MSG_READ_VALUE(type_info_tmp,ptr,datalength,uint32_t);
2135 type_info=DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp);
2137 if (type_info & DLT_TYPE_INFO_STRG)
2140 DLT_MSG_READ_VALUE(length_tmp,ptr,datalength,uint16_t);
2141 length=DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp);
2148 /* read type of second argument: should be raw */
2149 DLT_MSG_READ_VALUE(type_info_tmp,ptr,datalength,uint32_t);
2150 type_info=DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp);
2152 if (type_info & DLT_TYPE_INFO_RAWD)
2154 /* get length of raw data block */
2155 DLT_MSG_READ_VALUE(length_tmp,ptr,datalength,uint16_t);
2156 length=DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp);
2158 if ((length>=0) && (length==datalength))
2160 //printf("Raw data found in payload, length=");
2161 //printf("%d, datalength=%d \n", length, datalength);
2162 dltdata->test_counter_function[3]++;
2174 if (strcmp(text,"Test5: (Function IF) Test high-level API")==0)
2176 printf("Test5f: (Function IF) Test high-level API\n");
2177 dltdata->running_test = 14;
2178 dltdata->test_counter_function[4]=0;
2180 else if (strcmp(text,"Test5: (Function IF) finished")==0)
2182 if (dltdata->test_counter_function[4]==12)
2184 printf("Test5f PASSED\n");
2185 dltdata->tests_passed++;
2189 printf("Test5f FAILED\n");
2190 dltdata->tests_failed++;
2192 dltdata->running_test = 0;
2194 else if (dltdata->running_test==14)
2196 if (strcmp(text,"Next line: dlt_log_int()")==0)
2198 dltdata->test_counter_function[4]++;
2200 if (strcmp(text,"-42")==0)
2202 dltdata->test_counter_function[4]++;
2205 if (strcmp(text,"Next line: dlt_log_uint()")==0)
2207 dltdata->test_counter_function[4]++;
2209 if (strcmp(text,"42")==0)
2211 dltdata->test_counter_function[4]++;
2214 if (strcmp(text,"Next line: dlt_log_string()")==0)
2216 dltdata->test_counter_function[4]++;
2218 if (strcmp(text,"String output")==0)
2220 dltdata->test_counter_function[4]++;
2223 if (strcmp(text,"Next line: dlt_log_raw()")==0)
2225 dltdata->test_counter_function[4]++;
2227 if (strcmp(text,"00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f")==0)
2229 dltdata->test_counter_function[4]++;
2232 if (strcmp(text,"Next line: dlt_log_string_int()")==0)
2234 dltdata->test_counter_function[4]++;
2236 if (strcmp(text,"String output: -42")==0)
2238 dltdata->test_counter_function[4]++;
2241 if (strcmp(text,"Next line: dlt_log_string_uint()")==0)
2243 dltdata->test_counter_function[4]++;
2245 if (strcmp(text,"String output: 42")==0)
2247 dltdata->test_counter_function[4]++;
2252 if (strcmp(text,"Test 6: (Function IF) Test local printing")==0)
2254 printf("Test6f: (Function IF) Test local printing\n");
2255 dltdata->running_test = 15;
2256 dltdata->test_counter_function[5]=0;
2258 else if (strcmp(text,"Test6: (Function IF) finished")==0)
2260 if (dltdata->test_counter_function[5]==2)
2262 printf("Test6f PASSED\n");
2263 dltdata->tests_passed++;
2267 printf("Test6f FAILED\n");
2268 dltdata->tests_failed++;
2270 dltdata->running_test = 0;
2272 else if (dltdata->running_test==15)
2274 if (strcmp(text,"Message (visible: locally printed)")==0)
2276 printf("Message (visible: locally printed)\n");
2277 dltdata->test_counter_function[5]++;
2279 if (strcmp(text,"Message (invisible: not locally printed)")==0)
2281 printf("Message (invisible: not locally printed)\n");
2282 dltdata->test_counter_function[5]++;
2287 if (strcmp(text,"Test 7: (Function IF) Test network trace")==0)
2289 printf("Test7f: (Function IF) Test network trace\n");
2290 dltdata->running_test = 16;
2291 dltdata->test_counter_function[6]=0;
2293 else if (strcmp(text,"Test7: (Function IF) finished")==0)
2295 if (dltdata->test_counter_function[6]==8)
2297 printf("Test7f PASSED\n");
2298 dltdata->tests_passed++;
2302 printf("Test7f FAILED\n");
2303 dltdata->tests_failed++;
2305 dltdata->running_test = 0;
2307 else if (dltdata->running_test==16)
2309 if (DLT_IS_HTYP_UEH(message->standardheader->htyp))
2311 if ((DLT_GET_MSIN_MSTP(message->extendedheader->msin))==DLT_TYPE_NW_TRACE)
2313 /* Check message type information*/
2314 /* Each correct message type increases the counter by 1 */
2315 mtin=DLT_GET_MSIN_MTIN(message->extendedheader->msin);
2317 if (mtin==DLT_NW_TRACE_IPC)
2319 dltdata->test_counter_function[6]++;
2321 if (mtin==DLT_NW_TRACE_CAN)
2323 dltdata->test_counter_function[6]++;
2325 if (mtin==DLT_NW_TRACE_FLEXRAY)
2327 dltdata->test_counter_function[6]++;
2329 if (mtin==DLT_NW_TRACE_MOST)
2331 dltdata->test_counter_function[6]++;
2334 /* Check payload, must be two arguments (2 raw data blocks) */
2335 /* If the payload is correct, the counter is increased by 1 */
2336 if (message->extendedheader->noar==2)
2342 length_tmp=0; /* the macro can set this variable to -1 */
2344 ptr = message->databuffer;
2345 datalength = message->datasize;
2347 /* first read the type info of the first argument: should be string */
2348 DLT_MSG_READ_VALUE(type_info_tmp,ptr,datalength,uint32_t);
2349 type_info=DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp);
2351 if (type_info & DLT_TYPE_INFO_RAWD)
2354 DLT_MSG_READ_VALUE(length_tmp,ptr,datalength,uint16_t);
2355 length=DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp);
2362 /* read type of second argument: should be raw */
2363 DLT_MSG_READ_VALUE(type_info_tmp,ptr,datalength,uint32_t);
2364 type_info=DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp);
2366 if (type_info & DLT_TYPE_INFO_RAWD)
2368 /* get length of raw data block */
2369 DLT_MSG_READ_VALUE(length_tmp,ptr,datalength,uint16_t);
2370 length=DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp);
2372 if ((length>=0) && (length==datalength))
2374 //printf("Raw data found in payload, length=");
2375 //printf("%d, datalength=%d \n", length, datalength);
2376 dltdata->test_counter_function[6]++;
2387 if (strcmp(text,"Test 8: (Function IF) Test truncated network trace")==0)
2389 printf("Test8f: (Function IF) Test truncated network trace\n");
2390 dltdata->running_test = 17;
2391 dltdata->test_counter_function[7]=0;
2393 else if (strcmp(text,"Test8: (Function IF) finished")==0)
2395 if (dltdata->test_counter_function[7]==20)
2397 printf("Test8f PASSED\n");
2398 dltdata->tests_passed++;
2402 printf("Test8f FAILED\n");
2403 dltdata->tests_failed++;
2405 dltdata->running_test = 0;
2407 else if (dltdata->running_test==17)
2409 if (DLT_IS_HTYP_UEH(message->standardheader->htyp))
2411 if ((DLT_GET_MSIN_MSTP(message->extendedheader->msin))==DLT_TYPE_NW_TRACE)
2413 /* Check message type information*/
2414 /* Each correct message type increases the counter by 1 */
2415 mtin=DLT_GET_MSIN_MTIN(message->extendedheader->msin);
2417 if (mtin==DLT_NW_TRACE_IPC)
2419 dltdata->test_counter_function[7]++;
2421 if (mtin==DLT_NW_TRACE_CAN)
2423 dltdata->test_counter_function[7]++;
2425 if (mtin==DLT_NW_TRACE_FLEXRAY)
2427 dltdata->test_counter_function[7]++;
2429 if (mtin==DLT_NW_TRACE_MOST)
2431 dltdata->test_counter_function[7]++;
2434 /* Check payload, must be two arguments (2 raw data blocks) */
2435 /* If the payload is correct, the counter is increased by 1 */
2436 if (message->extendedheader->noar==4)
2440 length=0,length_tmp=0; /* the macro can set this variable to -1 */
2442 ptr = message->databuffer;
2443 datalength = message->datasize;
2445 DLT_MSG_READ_VALUE(type_info_tmp,ptr,datalength,uint32_t);
2446 type_info=DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp);
2447 if(type_info & DLT_TYPE_INFO_STRG)
2451 DLT_MSG_READ_VALUE(length_tmp,ptr,datalength,uint16_t);
2452 length=DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp);
2453 DLT_MSG_READ_STRING(chdr, ptr, datalength, length);
2455 if(strcmp((char *)chdr, "NWTR")==0)
2457 dltdata->test_counter_function[7]++;
2460 DLT_MSG_READ_VALUE(type_info_tmp,ptr,datalength,uint32_t);
2461 type_info=DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp);
2462 if(type_info & DLT_TYPE_INFO_RAWD)
2465 DLT_MSG_READ_VALUE(length_tmp,ptr,datalength,uint16_t);
2466 length=DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp);
2467 DLT_MSG_READ_STRING(hdr, ptr, datalength, length);
2469 if(length == 16 && hdr[15] == 15)
2471 dltdata->test_counter_function[7]++;
2474 DLT_MSG_READ_VALUE(type_info_tmp,ptr,datalength,uint32_t);
2475 type_info=DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp);
2476 if(type_info & DLT_TYPE_INFO_UINT)
2479 DLT_MSG_READ_VALUE(length_tmp,ptr,datalength,uint16_t);
2480 orig_size=DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp);
2481 if(orig_size == 1024*5)
2483 dltdata->test_counter_function[7]++;
2486 DLT_MSG_READ_VALUE(type_info_tmp,ptr,datalength,uint32_t);
2487 type_info=DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp);
2488 if(type_info & DLT_TYPE_INFO_RAWD)
2490 DLT_MSG_READ_VALUE(length_tmp,ptr,datalength,uint16_t);
2491 length=DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp);
2492 // Size of the truncated message after headers
2495 dltdata->test_counter_function[7]++;
2507 if (strcmp(text,"Test 9: (Function IF) Test segmented network trace")==0)
2509 printf("Test9f: (Function IF) Test segmented network trace\n");
2510 dltdata->running_test = 18;
2511 dltdata->test_counter_function[8]=0;
2513 else if (strcmp(text,"Test9: (Function IF) finished")==0)
2515 /* (Interface types) * (number of messages per complete message) */
2516 if (dltdata->test_counter_function[8]==4*35)
2518 printf("Test9f PASSED\n");
2519 dltdata->tests_passed++;
2523 printf("Test9f FAILED\n");
2524 dltdata->tests_failed++;
2526 dltdata->running_test = 0;
2528 else if (dltdata->running_test==18)
2530 if (DLT_IS_HTYP_UEH(message->standardheader->htyp))
2532 if ((DLT_GET_MSIN_MSTP(message->extendedheader->msin))==DLT_TYPE_NW_TRACE)
2534 /* Check message type information*/
2535 /* Each correct message type increases the counter by 1 */
2536 mtin=DLT_GET_MSIN_MTIN(message->extendedheader->msin);
2538 if (mtin==DLT_NW_TRACE_IPC)
2540 dltdata->test_counter_function[8]++;
2542 if (mtin==DLT_NW_TRACE_CAN)
2544 dltdata->test_counter_function[8]++;
2546 if (mtin==DLT_NW_TRACE_FLEXRAY)
2548 dltdata->test_counter_function[8]++;
2550 if (mtin==DLT_NW_TRACE_MOST)
2552 dltdata->test_counter_function[8]++;
2555 /* Payload for first segmented message */
2556 if (message->extendedheader->noar==6)
2561 length=0,length_tmp=0; /* the macro can set this variable to -1 */
2563 ptr = message->databuffer;
2564 datalength = message->datasize;
2567 DLT_MSG_READ_VALUE(type_info_tmp,ptr,datalength,uint32_t);
2568 type_info=DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp);
2569 if(type_info & DLT_TYPE_INFO_STRG)
2572 DLT_MSG_READ_VALUE(length_tmp,ptr,datalength,uint16_t);
2573 length=DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp);
2574 DLT_MSG_READ_STRING(chdr, ptr, datalength, length);
2575 if(strcmp((char *)chdr, "NWST")==0)
2577 dltdata->test_counter_function[8]++;
2581 DLT_MSG_READ_VALUE(type_info_tmp,ptr,datalength,uint32_t);
2582 type_info=DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp);
2583 if(type_info & DLT_TYPE_INFO_UINT)
2586 DLT_MSG_READ_VALUE(length_tmp,ptr,datalength,uint16_t);
2587 handle=DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp);
2590 dltdata->test_counter_function[8]++;
2594 DLT_MSG_READ_VALUE(type_info_tmp,ptr,datalength,uint32_t);
2595 type_info=DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp);
2596 if(type_info & DLT_TYPE_INFO_RAWD)
2598 DLT_MSG_READ_VALUE(length_tmp,ptr,datalength,uint16_t);
2599 length=DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp);
2601 // Test packet header size 16
2604 dltdata->test_counter_function[8]++;
2611 DLT_MSG_READ_VALUE(type_info_tmp,ptr,datalength,uint32_t);
2612 type_info=DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp);
2613 if(type_info & DLT_TYPE_INFO_UINT)
2616 DLT_MSG_READ_VALUE(length_tmp,ptr,datalength,uint16_t);
2617 pl_sz=DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp);
2619 // Test packet payload size.
2622 dltdata->test_counter_function[8]++;
2626 DLT_MSG_READ_VALUE(type_info_tmp,ptr,datalength,uint32_t);
2627 type_info=DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp);
2628 if(type_info & DLT_TYPE_INFO_UINT)
2631 DLT_MSG_READ_VALUE(length_tmp,ptr,datalength,uint16_t);
2632 scount=DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp);
2634 /* Test packet segment count 5 */
2637 dltdata->test_counter_function[8]++;
2640 /* Segment length */
2641 DLT_MSG_READ_VALUE(type_info_tmp,ptr,datalength,uint32_t);
2642 type_info=DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp);
2643 if(type_info & DLT_TYPE_INFO_UINT)
2646 DLT_MSG_READ_VALUE(length_tmp,ptr,datalength,uint16_t);
2647 slen=DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp);
2648 /* Default segment size 1024 */
2651 dltdata->test_counter_function[8]++;
2661 else if (message->extendedheader->noar==4)
2666 length=0,length_tmp=0; /* the macro can set this variable to -1 */
2668 ptr = message->databuffer;
2669 datalength = message->datasize;
2672 DLT_MSG_READ_VALUE(type_info_tmp,ptr,datalength,uint32_t);
2673 type_info=DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp);
2674 if(type_info & DLT_TYPE_INFO_STRG)
2677 DLT_MSG_READ_VALUE(length_tmp,ptr,datalength,uint16_t);
2678 length=DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp);
2679 DLT_MSG_READ_STRING(chdr, ptr, datalength, length);
2680 if(strcmp((char *)chdr, "NWCH")==0)
2682 dltdata->test_counter_function[8]++;
2686 DLT_MSG_READ_VALUE(type_info_tmp,ptr,datalength,uint32_t);
2687 type_info=DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp);
2688 if(type_info & DLT_TYPE_INFO_UINT)
2691 DLT_MSG_READ_VALUE(length_tmp,ptr,datalength,uint16_t);
2692 handle=DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp);
2695 dltdata->test_counter_function[8]++;
2699 DLT_MSG_READ_VALUE(type_info_tmp,ptr,datalength,uint32_t);
2700 type_info=DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp);
2701 if(type_info & DLT_TYPE_INFO_UINT)
2704 DLT_MSG_READ_VALUE(length_tmp,ptr,datalength,uint16_t);
2705 //seq=DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp);
2706 dltdata->test_counter_function[8]++;
2709 DLT_MSG_READ_VALUE(type_info_tmp,ptr,datalength,uint32_t);
2710 type_info=DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp);
2711 if(type_info & DLT_TYPE_INFO_RAWD)
2713 DLT_MSG_READ_VALUE(length_tmp,ptr,datalength,uint16_t);
2714 length=DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp);
2716 // Segment size by default, 1024
2719 dltdata->test_counter_function[8]++;
2727 else if (message->extendedheader->noar==2)
2732 length=0,length_tmp=0; /* the macro can set this variable to -1 */
2734 ptr = message->databuffer;
2735 datalength = message->datasize;
2738 DLT_MSG_READ_VALUE(type_info_tmp,ptr,datalength,uint32_t);
2739 type_info=DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp);
2740 if(type_info & DLT_TYPE_INFO_STRG)
2743 DLT_MSG_READ_VALUE(length_tmp,ptr,datalength,uint16_t);
2744 length=DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp);
2745 DLT_MSG_READ_STRING(chdr, ptr, datalength, length);
2746 if(strcmp((char *)chdr, "NWEN")==0)
2748 dltdata->test_counter_function[8]++;
2752 DLT_MSG_READ_VALUE(type_info_tmp,ptr,datalength,uint32_t);
2753 type_info=DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp);
2754 if(type_info & DLT_TYPE_INFO_UINT)
2757 DLT_MSG_READ_VALUE(length_tmp,ptr,datalength,uint16_t);
2758 handle=DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp);
2761 dltdata->test_counter_function[8]++;
2769 if (strcmp(text,"Tests finished")==0)
2771 printf("Tests finished\n");
2772 dltdata->running_test = 1;
2774 printf("%d tests passed\n",dltdata->tests_passed);
2775 printf("%d tests failed\n",dltdata->tests_failed);
2777 if (dltdata->sock!=-1)
2779 close(dltdata->sock);
2785 /* if no filter set or filter is matching display message */
2788 dlt_message_print_hex(message,text,DLT_TESTCLIENT_TEXTBUFSIZE,dltdata->vflag);
2790 else if (dltdata->mflag)
2792 dlt_message_print_mixed_plain(message,text,DLT_TESTCLIENT_TEXTBUFSIZE,dltdata->vflag);
2794 else if (dltdata->sflag)
2796 dlt_message_print_header(message,text,sizeof(text),dltdata->vflag);
2799 /* if file output enabled write message */
2800 if (dltdata->ovalue)
2802 iov[0].iov_base = message->headerbuffer;
2803 iov[0].iov_len = message->headersize;
2804 iov[1].iov_base = message->databuffer;
2805 iov[1].iov_len = message->datasize;
2807 bytes_written = writev(dltdata->ohandle, iov, 2);
2808 if (0 > bytes_written){
2809 printf("dlt_testclient_message_callback, error in: writev(dltdata->ohandle, iov, 2)\n");