2 * Dlt Test Client - Diagnostic Log and Trace
5 * Copyright (C) 2011, BMW AG - Alexander Wenzel <alexander.wenzel@bmw.de>
7 * This program is free software; you can redistribute it and/or modify it under the terms of the
8 * GNU Lesser General Public License, version 2.1, as published by the Free Software Foundation.
9 * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
10 * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
11 * Public License, version 2.1, for more details.
13 * You should have received a copy of the GNU Lesser General Public License, version 2.1, along
14 * with this program; if not, see <http://www.gnu.org/licenses/lgpl-2.1.html>.
16 * Note that the copyright holders assume that the GNU Lesser General Public License, version 2.1, may
17 * also be applicable to programs even in cases in which the program is not a library in the technical sense.
19 * Linking DLT statically or dynamically with other modules is making a combined work based on DLT. You may
20 * license such other modules under the GNU Lesser General Public License, version 2.1. If you do not want to
21 * license your linked modules under the GNU Lesser General Public License, version 2.1, you
22 * may use the program under the following exception.
24 * As a special exception, the copyright holders of DLT give you permission to combine DLT
25 * with software programs or libraries that are released under any license unless such a combination is not
26 * permitted by the license of such a software program or library. You may copy and distribute such a
27 * system following the terms of the GNU Lesser General Public License, version 2.1, including this
28 * special exception, for DLT and the licenses of the other code concerned.
30 * Note that people who make modified versions of DLT are not obligated to grant this special exception
31 * for their modified versions; it is their choice whether to do so. The GNU Lesser General Public License,
32 * version 2.1, gives permission to release a modified version without this exception; this exception
33 * also makes it possible to release a modified version which carries forward this exception.
39 /*******************************************************************************
41 ** SRC-MODULE: dlt-test-client.c **
47 ** AUTHOR : Alexander Wenzel Alexander.AW.Wenzel@bmw.de **
54 ** PLATFORM DEPENDANT [yes/no]: yes **
56 ** TO BE CHANGED BY USER [yes/no]: no **
58 *******************************************************************************/
60 /*******************************************************************************
62 ********************************************************************************
64 ** Initials Name Company **
65 ** -------- ------------------------- ---------------------------------- **
66 ** aw Alexander Wenzel BMW **
67 ** mk Markus Klein Fraunhofer ESK **
68 *******************************************************************************/
70 /*******************************************************************************
71 ** Revision Control History **
72 *******************************************************************************/
75 * $LastChangedRevision: 1670 $
76 * $LastChangedDate: 2011-04-08 15:12:06 +0200 (Fr, 08. Apr 2011) $
82 #include <ctype.h> /* for isprint() */
83 #include <stdlib.h> /* for atoi() */
84 #include <sys/stat.h> /* for S_IRUSR, S_IWUSR, S_IRGRP, S_IROTH */
85 #include <fcntl.h> /* for open() */
86 #include <string.h> /* for strcmp() */
87 #include <sys/uio.h> /* for writev() */
89 #include "dlt_client.h"
90 #include "dlt_protocol.h"
93 #define DLT_TESTCLIENT_TEXTBUFSIZE 10024 /* Size of buffer for text output */
94 #define DLT_TESTCLIENT_ECU_ID "ECU1"
96 #define DLT_TESTCLIENT_NUM_TESTS 7
98 /* Function prototypes */
99 int dlt_testclient_message_callback(DltMessage *message, void *data);
123 int test_counter_macro[DLT_TESTCLIENT_NUM_TESTS];
124 int test_counter_function[DLT_TESTCLIENT_NUM_TESTS];
133 * Print usage information of tool.
139 dlt_get_version(version);
141 printf("Usage: dlt-test-client [options] hostname/serial_device_name\n");
142 printf("Test against received data from dlt-test-user.\n");
143 printf("%s \n", version);
144 printf("Options:\n");
145 printf(" -a Print DLT messages; payload as ASCII\n");
146 printf(" -x Print DLT messages; payload as hex\n");
147 printf(" -m Print DLT messages; payload as hex and ASCII\n");
148 printf(" -s Print DLT messages; only headers\n");
149 printf(" -v Verbose mode\n");
150 printf(" -h Usage\n");
151 printf(" -y Serial device mode\n");
152 printf(" -b baudrate Serial device baudrate (Default: 115200)\n");
153 printf(" -e ecuid Set ECU ID (Default: ECU1)\n");
154 printf(" -o filename Output messages in new DLT file\n");
155 printf(" -f filename Enable filtering of messages\n");
159 * Main function of tool.
161 int main(int argc, char* argv[])
164 DltTestclientData dltdata;
168 /* Initialize dltdata */
181 dltdata.running_test = 0;
183 for (i=0;i<DLT_TESTCLIENT_NUM_TESTS;i++)
185 dltdata.test_counter_macro[i]=0;
186 dltdata.test_counter_function[i]=0;
189 dltdata.tests_passed = 0;
190 dltdata.tests_failed = 0;
194 /* Fetch command line arguments */
197 while ((c = getopt (argc, argv, "vashyxmf:o:e:b:")) != -1)
238 dltdata.fvalue = optarg;
243 dltdata.ovalue = optarg;
248 dltdata.evalue = optarg;
253 dltdata.bvalue = atoi(optarg);
258 if (optopt == 'o' || optopt == 'f' || optopt == 't')
260 fprintf (stderr, "Option -%c requires an argument.\n", optopt);
262 else if (isprint (optopt))
264 fprintf (stderr, "Unknown option `-%c'.\n", optopt);
268 fprintf (stderr, "Unknown option character `\\x%x'.\n",optopt);
270 /* unknown or wrong option used, show usage information and terminate */
281 /* Initialize DLT Client */
282 dlt_client_init(&dltclient, dltdata.vflag);
284 /* Register callback to be called when message was received */
285 dlt_client_register_message_callback(dlt_testclient_message_callback);
287 /* Setup DLT Client structure */
288 dltclient.serial_mode = dltdata.yflag;
290 if (dltclient.serial_mode==0)
292 for (index = optind; index < argc; index++)
294 dltclient.servIP = argv[index];
297 if (dltclient.servIP == 0)
299 /* no hostname selected, show usage and terminate */
300 fprintf(stderr,"ERROR: No hostname selected\n");
302 dlt_client_cleanup(&dltclient,dltdata.vflag);
308 for (index = optind; index < argc; index++)
310 dltclient.serialDevice = argv[index];
313 if (dltclient.serialDevice == 0)
315 /* no serial device name selected, show usage and terminate */
316 fprintf(stderr,"ERROR: No serial device name specified\n");
321 dlt_client_setbaudrate(&dltclient,dltdata.bvalue);
324 /* initialise structure to use DLT file */
325 dlt_file_init(&(dltdata.file),dltdata.vflag);
327 /* first parse filter file if filter parameter is used */
328 dlt_filter_init(&(dltdata.filter),dltdata.vflag);
332 if (dlt_filter_load(&(dltdata.filter),dltdata.fvalue,dltdata.vflag)<0)
334 dlt_file_free(&(dltdata.file),dltdata.vflag);
338 dlt_file_set_filter(&(dltdata.file),&(dltdata.filter),dltdata.vflag);
341 /* open DLT output file */
344 dltdata.ohandle = open(dltdata.ovalue,O_WRONLY|O_CREAT, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); /* mode: wb */
346 if (dltdata.ohandle == -1)
348 dlt_file_free(&(dltdata.file),dltdata.vflag);
349 fprintf(stderr,"ERROR: Output file %s cannot be opened!\n",dltdata.ovalue);
356 dlt_set_id(dltdata.ecuid,dltdata.evalue);
360 dlt_set_id(dltdata.ecuid,DLT_TESTCLIENT_ECU_ID);
363 /* Connect to TCP socket or open serial device */
364 if (dlt_client_connect(&dltclient, dltdata.vflag)!=-1)
366 dltdata.sock = dltclient.sock;
368 /* Dlt Client Main Loop */
369 dlt_client_main_loop(&dltclient, &dltdata, dltdata.vflag);
371 /* Dlt Client Cleanup */
372 dlt_client_cleanup(&dltclient,dltdata.vflag);
375 /* dlt-receive cleanup */
378 close(dltdata.ohandle);
381 dlt_file_free(&(dltdata.file),dltdata.vflag);
383 dlt_filter_free(&(dltdata.filter),dltdata.vflag);
388 int dlt_testclient_message_callback(DltMessage *message, void *data)
390 static char text[DLT_TESTCLIENT_TEXTBUFSIZE];
392 DltTestclientData *dltdata;
394 uint32_t type_info, type_info_tmp;
395 int16_t length,length_tmp; /* the macro can set this variable to -1 */
406 if ((message==0) || (data==0))
411 dltdata = (DltTestclientData*)data;
413 /* prepare storage header */
414 if (DLT_IS_HTYP_WEID(message->standardheader->htyp))
416 dlt_set_storageheader(message->storageheader,message->headerextra.ecu);
420 dlt_set_storageheader(message->storageheader,dltdata->ecuid);
423 if ((dltdata->fvalue==0) || (dltdata->fvalue && dlt_message_filter_check(message,&(dltdata->filter),dltdata->vflag)==1))
426 dlt_message_header(message,text,sizeof(text),dltdata->vflag);
431 dlt_message_payload(message,text,sizeof(text),DLT_OUTPUT_ASCII,dltdata->vflag);
434 printf("[%s]\n",text);
437 if (strcmp(text,"Tests starting")==0)
439 printf("Tests starting\n");
443 if (strcmp(text,"Test1: (Macro IF) Test all log levels")==0)
445 printf("Test1m: (Macro IF) Test all log levels\n");
446 dltdata->running_test = 1;
447 dltdata->test_counter_macro[0] = 0;
449 else if (strcmp(text,"Test1: (Macro IF) finished")==0)
451 /* >=4, as "info" is default log level */
452 if (dltdata->test_counter_macro[0]>=4)
454 printf("Test1m PASSED\n");
455 dltdata->tests_passed++;
459 printf("Test1m FAILED\n");
460 dltdata->tests_failed++;
462 dltdata->running_test = 0;
464 else if (dltdata->running_test==1)
466 if (DLT_IS_HTYP_UEH(message->standardheader->htyp))
468 if ((DLT_GET_MSIN_MSTP(message->extendedheader->msin))==DLT_TYPE_LOG)
470 mtin=DLT_GET_MSIN_MTIN(message->extendedheader->msin);
472 if (mtin==DLT_LOG_FATAL)
474 dltdata->test_counter_macro[0]++;
476 if (mtin==DLT_LOG_ERROR)
478 dltdata->test_counter_macro[0]++;
480 if (mtin==DLT_LOG_WARN)
482 dltdata->test_counter_macro[0]++;
484 if (mtin==DLT_LOG_INFO)
486 dltdata->test_counter_macro[0]++;
488 if (mtin==DLT_LOG_DEBUG)
490 dltdata->test_counter_macro[0]++;
492 if (mtin==DLT_LOG_VERBOSE)
494 dltdata->test_counter_macro[0]++;
501 if (strcmp(text,"Test2: (Macro IF) Test all variable types (verbose)")==0)
503 printf("Test2m: (Macro IF) Test all variable types (verbose)\n");
504 dltdata->running_test = 2;
505 dltdata->test_counter_macro[1] = 0;
507 else if (strcmp(text,"Test2: (Macro IF) finished")==0)
509 if (dltdata->test_counter_macro[1]==14)
511 printf("Test2m PASSED\n");
512 dltdata->tests_passed++;
516 printf("Test2m FAILED\n");
517 dltdata->tests_failed++;
519 dltdata->running_test = 0;
521 else if (dltdata->running_test==2)
524 if (!(DLT_MSG_IS_NONVERBOSE(message)))
528 length=0; /* the macro can set this variable to -1 */
530 ptr = message->databuffer;
531 datalength = message->datasize;
534 if ((DLT_GET_MSIN_MSTP(message->extendedheader->msin))==DLT_TYPE_LOG)
536 if (message->extendedheader->noar>=2)
538 /* get type of first argument: must be string */
539 DLT_MSG_READ_VALUE(type_info_tmp,ptr,datalength,uint32_t);
540 type_info=DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp);
542 if (type_info & DLT_TYPE_INFO_STRG)
545 DLT_MSG_READ_VALUE(length_tmp,ptr,datalength,uint16_t);
546 length=DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp);
553 /* read type of second argument: must be raw */
554 DLT_MSG_READ_VALUE(type_info_tmp,ptr,datalength,uint32_t);
555 type_info=DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp);
557 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) && (length=10))
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]==14)
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("bool")+1;
751 if (datalength==sizeof(uint8_t))
753 dltdata->test_counter_macro[2]++;
759 slen=strlen("int")+1;
762 if (datalength==sizeof(int))
764 dltdata->test_counter_macro[2]++;
770 slen=strlen("int8")+1;
773 if (datalength==sizeof(int8_t))
775 dltdata->test_counter_macro[2]++;
781 slen=strlen("int16")+1;
784 if (datalength==sizeof(int16_t))
786 dltdata->test_counter_macro[2]++;
792 slen=strlen("int32")+1;
795 if (datalength==sizeof(int32_t))
797 dltdata->test_counter_macro[2]++;
803 slen=strlen("int64")+1;
806 if (datalength==sizeof(int64_t))
808 dltdata->test_counter_macro[2]++;
814 slen=strlen("uint")+1;
817 if (datalength==sizeof(unsigned int))
819 dltdata->test_counter_macro[2]++;
825 slen=strlen("uint8")+1;
828 if (datalength==sizeof(uint8_t))
830 dltdata->test_counter_macro[2]++;
836 slen=strlen("uint16")+1;
839 if (datalength==sizeof(uint16_t))
841 dltdata->test_counter_macro[2]++;
847 slen=strlen("uint32")+1;
850 if (datalength==sizeof(uint32_t))
852 dltdata->test_counter_macro[2]++;
858 slen=strlen("uint64")+1;
861 if (datalength==sizeof(uint64_t))
863 dltdata->test_counter_macro[2]++;
869 slen=strlen("float32")+1;
872 /* 2*, as the min and the max is transfered */
873 if (datalength==2*sizeof(float))
875 dltdata->test_counter_macro[2]++;
881 slen=strlen("float64")+1;
884 /* 2*, as the min and the max is transfered */
885 if (datalength==2*sizeof(double))
887 dltdata->test_counter_macro[2]++;
893 slen=strlen("raw")+1;
896 datalength-=sizeof(uint16_t);
897 ptr+=sizeof(uint16_t);
900 dltdata->test_counter_macro[2]++;
906 if ((slen>=0) && (tc_old==dltdata->test_counter_macro[2]))
908 printf("ID=%d, Datalength=%d => Failed!",id,datalength);
914 if (strcmp(text,"Test4: (Macro IF) Test different message sizes")==0)
916 printf("Test4m: (Macro IF) Test different message sizes\n");
917 dltdata->running_test = 4;
918 dltdata->test_counter_macro[3]=0;
920 else if (strcmp(text,"Test4: (Macro IF) finished")==0)
922 if (dltdata->test_counter_macro[3]==4)
924 printf("Test4m PASSED\n");
925 dltdata->tests_passed++;
929 printf("Test4m FAILED\n");
930 dltdata->tests_failed++;
932 dltdata->running_test = 0;
934 else if (dltdata->running_test==4)
936 /* Extended header */
937 if (DLT_IS_HTYP_UEH(message->standardheader->htyp))
940 if ((DLT_GET_MSIN_MSTP(message->extendedheader->msin))==DLT_TYPE_LOG)
943 if (DLT_IS_MSIN_VERB(message->extendedheader->msin))
946 if (message->extendedheader->noar==2)
952 length_tmp=0; /* the macro can set this variable to -1 */
954 ptr = message->databuffer;
955 datalength = message->datasize;
957 /* first read the type info of the first argument: must be string */
958 DLT_MSG_READ_VALUE(type_info_tmp,ptr,datalength,uint32_t);
959 type_info=DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp);
961 if (type_info & DLT_TYPE_INFO_STRG)
964 DLT_MSG_READ_VALUE(length_tmp,ptr,datalength,uint16_t);
965 length=DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp);
972 /* read type of second argument: must be raw */
973 DLT_MSG_READ_VALUE(type_info_tmp,ptr,datalength,uint32_t);
974 type_info=DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp);
976 if (type_info & DLT_TYPE_INFO_RAWD)
978 /* get length of raw data block */
979 DLT_MSG_READ_VALUE(length_tmp,ptr,datalength,uint16_t);
980 length=DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp);
982 if ((length>=0) && (length==datalength))
984 //printf("Raw data found in payload, length=");
985 //printf("%d, datalength=%d \n", length, datalength);
986 dltdata->test_counter_macro[3]++;
998 if (strcmp(text,"Test5: (Macro IF) Test high-level API")==0)
1000 printf("Test5m: (Macro IF) Test high-level API\n");
1001 dltdata->running_test = 5;
1002 dltdata->test_counter_macro[4]=0;
1004 else if (strcmp(text,"Test5: (Macro IF) finished")==0)
1006 if (dltdata->test_counter_macro[4]==12)
1008 printf("Test5m PASSED\n");
1009 dltdata->tests_passed++;
1013 printf("Test5m FAILED\n");
1014 dltdata->tests_failed++;
1016 dltdata->running_test = 0;
1018 else if (dltdata->running_test==5)
1020 if (strcmp(text,"Next line: DLT_LOG_INT")==0)
1022 dltdata->test_counter_macro[4]++;
1024 if (strcmp(text,"-42")==0)
1026 dltdata->test_counter_macro[4]++;
1029 if (strcmp(text,"Next line: DLT_LOG_UINT")==0)
1031 dltdata->test_counter_macro[4]++;
1033 if (strcmp(text,"42")==0)
1035 dltdata->test_counter_macro[4]++;
1038 if (strcmp(text,"Next line: DLT_LOG_STRING")==0)
1040 dltdata->test_counter_macro[4]++;
1042 if (strcmp(text,"String output")==0)
1044 dltdata->test_counter_macro[4]++;
1047 if (strcmp(text,"Next line: DLT_LOG_RAW")==0)
1049 dltdata->test_counter_macro[4]++;
1051 if (strcmp(text,"00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f")==0)
1053 dltdata->test_counter_macro[4]++;
1056 if (strcmp(text,"Next line: DLT_LOG_STRING_INT")==0)
1058 dltdata->test_counter_macro[4]++;
1060 if (strcmp(text,"String output: -42")==0)
1062 dltdata->test_counter_macro[4]++;
1065 if (strcmp(text,"Next line: DLT_LOG_STRING_UINT")==0)
1067 dltdata->test_counter_macro[4]++;
1069 if (strcmp(text,"String output: 42")==0)
1071 dltdata->test_counter_macro[4]++;
1076 if (strcmp(text,"Test 6: (Macro IF) Test local printing")==0)
1078 printf("Test6m: (Macro IF) Test local printing\n");
1079 dltdata->running_test = 6;
1080 dltdata->test_counter_macro[5]=0;
1082 else if (strcmp(text,"Test6: (Macro IF) finished")==0)
1084 if (dltdata->test_counter_macro[5]==2)
1086 printf("Test6m PASSED\n");
1087 dltdata->tests_passed++;
1091 printf("Test6m FAILED\n");
1092 dltdata->tests_failed++;
1094 dltdata->running_test = 0;
1096 else if (dltdata->running_test==6)
1098 dltdata->test_counter_macro[5]++;
1102 if (strcmp(text,"Test 7: (Macro IF) Test network trace")==0)
1104 printf("Test7m: (Macro IF) Test network trace\n");
1105 dltdata->running_test = 7;
1106 dltdata->test_counter_macro[6]=0;
1108 else if (strcmp(text,"Test7: (Macro IF) finished")==0)
1110 if (dltdata->test_counter_macro[6]==8)
1112 printf("Test7m PASSED\n");
1113 dltdata->tests_passed++;
1117 printf("Test7m FAILED\n");
1118 dltdata->tests_failed++;
1120 dltdata->running_test = 0;
1122 else if (dltdata->running_test==7)
1124 if (DLT_IS_HTYP_UEH(message->standardheader->htyp))
1126 if ((DLT_GET_MSIN_MSTP(message->extendedheader->msin))==DLT_TYPE_NW_TRACE)
1128 /* Check message type information*/
1129 /* Each correct message type increases the counter by 1 */
1130 mtin=DLT_GET_MSIN_MTIN(message->extendedheader->msin);
1132 if (mtin==DLT_NW_TRACE_IPC)
1134 dltdata->test_counter_macro[6]++;
1136 if (mtin==DLT_NW_TRACE_CAN)
1138 dltdata->test_counter_macro[6]++;
1140 if (mtin==DLT_NW_TRACE_FLEXRAY)
1142 dltdata->test_counter_macro[6]++;
1144 if (mtin==DLT_NW_TRACE_MOST)
1146 dltdata->test_counter_macro[6]++;
1149 /* Check payload, must be two arguments (2 raw data blocks) */
1150 /* If the payload is correct, the counter is increased by 1 */
1151 if (message->extendedheader->noar==2)
1156 length=0,length_tmp=0; /* the macro can set this variable to -1 */
1158 ptr = message->databuffer;
1159 datalength = message->datasize;
1161 /* first read the type info of the first argument: must be string */
1162 DLT_MSG_READ_VALUE(type_info_tmp,ptr,datalength,uint32_t);
1163 type_info=DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp);
1165 if (type_info & DLT_TYPE_INFO_RAWD)
1168 DLT_MSG_READ_VALUE(length_tmp,ptr,datalength,uint16_t);
1169 length=DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp);
1176 /* read type of second argument: must be raw */
1177 DLT_MSG_READ_VALUE(type_info_tmp,ptr,datalength,uint32_t);
1178 type_info=DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp);
1180 if (type_info & DLT_TYPE_INFO_RAWD)
1182 /* get length of raw data block */
1183 DLT_MSG_READ_VALUE(length_tmp,ptr,datalength,uint16_t);
1184 length=DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp);
1186 if ((length>=0) && (length==datalength))
1188 //printf("Raw data found in payload, length=");
1189 //printf("%d, datalength=%d \n", length, datalength);
1190 dltdata->test_counter_macro[6]++;
1201 if (strcmp(text,"Test1: (Function IF) Test all log levels")==0)
1203 printf("Test1f: (Function IF) Test all log levels\n");
1204 dltdata->running_test = 8;
1205 dltdata->test_counter_function[0] = 0;
1207 else if (strcmp(text,"Test1: (Function IF) finished")==0)
1209 /* >=4, as "info" is default log level */
1210 if (dltdata->test_counter_function[0]>=4)
1212 printf("Test1f PASSED\n");
1213 dltdata->tests_passed++;
1217 printf("Test1f FAILED\n");
1218 dltdata->tests_failed++;
1220 dltdata->running_test = 0;
1222 else if (dltdata->running_test==8)
1224 if (DLT_IS_HTYP_UEH(message->standardheader->htyp))
1226 if ((DLT_GET_MSIN_MSTP(message->extendedheader->msin))==DLT_TYPE_LOG)
1228 mtin=DLT_GET_MSIN_MTIN(message->extendedheader->msin);
1230 if (mtin==DLT_LOG_FATAL)
1232 dltdata->test_counter_function[0]++;
1234 if (mtin==DLT_LOG_ERROR)
1236 dltdata->test_counter_function[0]++;
1238 if (mtin==DLT_LOG_WARN)
1240 dltdata->test_counter_function[0]++;
1242 if (mtin==DLT_LOG_INFO)
1244 dltdata->test_counter_function[0]++;
1246 if (mtin==DLT_LOG_DEBUG)
1248 dltdata->test_counter_function[0]++;
1250 if (mtin==DLT_LOG_VERBOSE)
1252 dltdata->test_counter_function[0]++;
1259 if (strcmp(text,"Test2: (Function IF) Test all variable types (verbose)")==0)
1261 printf("Test2f: (Function IF) Test all variable types (verbose)\n");
1262 dltdata->running_test = 9;
1263 dltdata->test_counter_function[1] = 0;
1265 else if (strcmp(text,"Test2: (Function IF) finished")==0)
1267 if (dltdata->test_counter_function[1]==14)
1269 printf("Test2f PASSED\n");
1270 dltdata->tests_passed++;
1274 printf("Test2f FAILED\n");
1275 dltdata->tests_failed++;
1277 dltdata->running_test = 0;
1279 else if (dltdata->running_test==9)
1282 if (!(DLT_MSG_IS_NONVERBOSE(message)))
1287 length_tmp=0; /* the macro can set this variable to -1 */
1288 ptr = message->databuffer;
1289 datalength = message->datasize;
1292 if ((DLT_GET_MSIN_MSTP(message->extendedheader->msin))==DLT_TYPE_LOG)
1294 if (message->extendedheader->noar>=2)
1296 /* get type of first argument: must be string */
1297 DLT_MSG_READ_VALUE(type_info_tmp,ptr,datalength,uint32_t);
1298 type_info=DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp);
1300 if (type_info & DLT_TYPE_INFO_STRG)
1303 DLT_MSG_READ_VALUE(length_tmp,ptr,datalength,uint16_t);
1304 length=DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp);
1311 /* read type of second argument: must be raw */
1312 DLT_MSG_READ_VALUE(type_info_tmp,ptr,datalength,uint32_t);
1313 type_info=DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp);
1315 if (type_info & DLT_TYPE_INFO_BOOL)
1317 if (datalength==sizeof(uint8_t))
1319 dltdata->test_counter_function[1]++;
1322 else if (type_info & DLT_TYPE_INFO_SINT)
1324 switch (type_info & DLT_TYPE_INFO_TYLE)
1328 if (datalength==sizeof(int8_t))
1330 dltdata->test_counter_function[1]++;
1334 case DLT_TYLE_16BIT:
1336 if (datalength==sizeof(int16_t))
1338 dltdata->test_counter_function[1]++;
1342 case DLT_TYLE_32BIT:
1344 if (datalength==sizeof(int32_t))
1346 dltdata->test_counter_function[1]++;
1350 case DLT_TYLE_64BIT:
1352 if (datalength==sizeof(int64_t))
1354 dltdata->test_counter_function[1]++;
1358 case DLT_TYLE_128BIT:
1360 /* Not tested here */
1365 else if (type_info & DLT_TYPE_INFO_UINT)
1367 switch (type_info & DLT_TYPE_INFO_TYLE)
1371 if (datalength==sizeof(uint8_t))
1373 dltdata->test_counter_function[1]++;
1377 case DLT_TYLE_16BIT:
1379 if (datalength==sizeof(uint16_t))
1381 dltdata->test_counter_function[1]++;
1385 case DLT_TYLE_32BIT:
1387 if (datalength==sizeof(uint32_t))
1389 dltdata->test_counter_function[1]++;
1393 case DLT_TYLE_64BIT:
1395 if (datalength==sizeof(uint64_t))
1397 dltdata->test_counter_function[1]++;
1401 case DLT_TYLE_128BIT:
1403 /* Not tested here */
1408 else if (type_info & DLT_TYPE_INFO_FLOA)
1410 switch (type_info & DLT_TYPE_INFO_TYLE)
1414 /* Not tested here */
1417 case DLT_TYLE_16BIT:
1419 /* Not tested here */
1422 case DLT_TYLE_32BIT:
1424 if (datalength==(2*sizeof(float)+sizeof(uint32_t)))
1426 dltdata->test_counter_function[1]++;
1430 case DLT_TYLE_64BIT:
1432 if (datalength==(2*sizeof(double)+sizeof(uint32_t)))
1434 dltdata->test_counter_function[1]++;
1438 case DLT_TYLE_128BIT:
1440 /* Not tested here */
1445 else if (type_info & DLT_TYPE_INFO_RAWD)
1448 DLT_MSG_READ_VALUE(length_tmp,ptr,datalength,uint16_t);
1449 length=DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp);
1450 if ((length==datalength) && (length=10))
1452 dltdata->test_counter_function[1]++;
1463 if (strcmp(text,"Test3: (Function IF) Test all variable types (non-verbose)")==0)
1465 printf("Test3f: (Function IF) Test all variable types (non-verbose)\n");
1466 dltdata->running_test = 10;
1467 dltdata->test_counter_function[2]=0;
1469 else if (strcmp(text,"Test3: (Function IF) finished")==0)
1471 if (dltdata->test_counter_function[2]==14)
1473 printf("Test3f PASSED\n");
1474 dltdata->tests_passed++;
1478 printf("Test3f FAILED\n");
1479 dltdata->tests_failed++;
1481 dltdata->running_test = 0;
1483 else if (dltdata->running_test==10)
1486 if (DLT_MSG_IS_NONVERBOSE(message))
1490 ptr = message->databuffer;
1491 datalength = message->datasize;
1494 tc_old=dltdata->test_counter_function[2];
1496 /* Get message id */
1497 DLT_MSG_READ_VALUE(id_tmp,ptr,datalength,uint32_t);
1498 id=DLT_ENDIAN_GET_32(message->standardheader->htyp, id_tmp);
1500 /* Length of string */
1501 datalength-=sizeof(uint16_t);
1502 ptr+=sizeof(uint16_t);
1508 slen=strlen("bool")+1;
1511 if (datalength==sizeof(uint8_t))
1513 dltdata->test_counter_function[2]++;
1519 slen=strlen("int")+1;
1522 if (datalength==sizeof(int))
1524 dltdata->test_counter_function[2]++;
1530 slen=strlen("int8")+1;
1533 if (datalength==sizeof(int8_t))
1535 dltdata->test_counter_function[2]++;
1541 slen=strlen("int16")+1;
1544 if (datalength==sizeof(int16_t))
1546 dltdata->test_counter_function[2]++;
1552 slen=strlen("int32")+1;
1555 if (datalength==sizeof(int32_t))
1557 dltdata->test_counter_function[2]++;
1563 slen=strlen("int64")+1;
1566 if (datalength==sizeof(int64_t))
1568 dltdata->test_counter_function[2]++;
1574 slen=strlen("uint")+1;
1577 if (datalength==sizeof(unsigned int))
1579 dltdata->test_counter_function[2]++;
1585 slen=strlen("uint8")+1;
1588 if (datalength==sizeof(uint8_t))
1590 dltdata->test_counter_function[2]++;
1596 slen=strlen("uint16")+1;
1599 if (datalength==sizeof(uint16_t))
1601 dltdata->test_counter_function[2]++;
1607 slen=strlen("uint32")+1;
1610 if (datalength==sizeof(uint32_t))
1612 dltdata->test_counter_function[2]++;
1618 slen=strlen("uint64")+1;
1621 if (datalength==sizeof(uint64_t))
1623 dltdata->test_counter_function[2]++;
1629 slen=strlen("float32")+1;
1632 /* 2*, as the min and the max is transfered */
1633 if (datalength==2*sizeof(float))
1635 dltdata->test_counter_function[2]++;
1641 slen=strlen("float64")+1;
1644 /* 2*, as the min and the max is transfered */
1645 if (datalength==2*sizeof(double))
1647 dltdata->test_counter_function[2]++;
1653 slen=strlen("raw")+1;
1656 datalength-=sizeof(uint16_t);
1657 ptr+=sizeof(uint16_t);
1660 dltdata->test_counter_function[2]++;
1666 if ((slen>=0) && (tc_old==dltdata->test_counter_function[2]))
1668 printf("ID=%d, Datalength=%d => Failed!",id,datalength);
1674 if (strcmp(text,"Test4: (Function IF) Test different message sizes")==0)
1676 printf("Test4f: (Function IF) Test different message sizes\n");
1677 dltdata->running_test = 11;
1678 dltdata->test_counter_function[3]=0;
1680 else if (strcmp(text,"Test4: (Function IF) finished")==0)
1682 if (dltdata->test_counter_function[3]==4)
1684 printf("Test4f PASSED\n");
1685 dltdata->tests_passed++;
1689 printf("Test4f FAILED\n");
1690 dltdata->tests_failed++;
1692 dltdata->running_test = 0;
1694 else if (dltdata->running_test==11)
1696 /* Extended header */
1697 if (DLT_IS_HTYP_UEH(message->standardheader->htyp))
1700 if ((DLT_GET_MSIN_MSTP(message->extendedheader->msin))==DLT_TYPE_LOG)
1703 if (DLT_IS_MSIN_VERB(message->extendedheader->msin))
1706 if (message->extendedheader->noar==2)
1712 length_tmp=0; /* the macro can set this variable to -1 */
1714 ptr = message->databuffer;
1715 datalength = message->datasize;
1717 /* first read the type info of the first argument: should be string */
1718 DLT_MSG_READ_VALUE(type_info_tmp,ptr,datalength,uint32_t);
1719 type_info=DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp);
1721 if (type_info & DLT_TYPE_INFO_STRG)
1724 DLT_MSG_READ_VALUE(length_tmp,ptr,datalength,uint16_t);
1725 length=DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp);
1732 /* read type of second argument: should be raw */
1733 DLT_MSG_READ_VALUE(type_info_tmp,ptr,datalength,uint32_t);
1734 type_info=DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp);
1736 if (type_info & DLT_TYPE_INFO_RAWD)
1738 /* get length of raw data block */
1739 DLT_MSG_READ_VALUE(length_tmp,ptr,datalength,uint16_t);
1740 length=DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp);
1742 if ((length>=0) && (length==datalength))
1744 //printf("Raw data found in payload, length=");
1745 //printf("%d, datalength=%d \n", length, datalength);
1746 dltdata->test_counter_function[3]++;
1758 if (strcmp(text,"Test5: (Function IF) Test high-level API")==0)
1760 printf("Test5f: (Function IF) Test high-level API\n");
1761 dltdata->running_test = 12;
1762 dltdata->test_counter_function[4]=0;
1764 else if (strcmp(text,"Test5: (Function IF) finished")==0)
1766 if (dltdata->test_counter_function[4]==12)
1768 printf("Test5f PASSED\n");
1769 dltdata->tests_passed++;
1773 printf("Test5f FAILED\n");
1774 dltdata->tests_failed++;
1776 dltdata->running_test = 0;
1778 else if (dltdata->running_test==12)
1780 if (strcmp(text,"Next line: dlt_log_int()")==0)
1782 dltdata->test_counter_function[4]++;
1784 if (strcmp(text,"-42")==0)
1786 dltdata->test_counter_function[4]++;
1789 if (strcmp(text,"Next line: dlt_log_uint()")==0)
1791 dltdata->test_counter_function[4]++;
1793 if (strcmp(text,"42")==0)
1795 dltdata->test_counter_function[4]++;
1798 if (strcmp(text,"Next line: dlt_log_string()")==0)
1800 dltdata->test_counter_function[4]++;
1802 if (strcmp(text,"String output")==0)
1804 dltdata->test_counter_function[4]++;
1807 if (strcmp(text,"Next line: dlt_log_raw()")==0)
1809 dltdata->test_counter_function[4]++;
1811 if (strcmp(text,"00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f")==0)
1813 dltdata->test_counter_function[4]++;
1816 if (strcmp(text,"Next line: dlt_log_string_int()")==0)
1818 dltdata->test_counter_function[4]++;
1820 if (strcmp(text,"String output: -42")==0)
1822 dltdata->test_counter_function[4]++;
1825 if (strcmp(text,"Next line: dlt_log_string_uint()")==0)
1827 dltdata->test_counter_function[4]++;
1829 if (strcmp(text,"String output: 42")==0)
1831 dltdata->test_counter_function[4]++;
1836 if (strcmp(text,"Test 6: (Function IF) Test local printing")==0)
1838 printf("Test6f: (Function IF) Test local printing\n");
1839 dltdata->running_test = 13;
1840 dltdata->test_counter_function[5]=0;
1842 else if (strcmp(text,"Test6: (Function IF) finished")==0)
1844 if (dltdata->test_counter_function[5]==2)
1846 printf("Test6f PASSED\n");
1847 dltdata->tests_passed++;
1851 printf("Test6f FAILED\n");
1852 dltdata->tests_failed++;
1854 dltdata->running_test = 0;
1856 else if (dltdata->running_test==13)
1858 dltdata->test_counter_function[5]++;
1862 if (strcmp(text,"Test 7: (Function IF) Test network trace")==0)
1864 printf("Test7f: (Function IF) Test network trace\n");
1865 dltdata->running_test = 14;
1866 dltdata->test_counter_function[6]=0;
1868 else if (strcmp(text,"Test7: (Function IF) finished")==0)
1870 if (dltdata->test_counter_function[6]==8)
1872 printf("Test7f PASSED\n");
1873 dltdata->tests_passed++;
1877 printf("Test7f FAILED\n");
1878 dltdata->tests_failed++;
1880 dltdata->running_test = 0;
1882 else if (dltdata->running_test==14)
1884 if (DLT_IS_HTYP_UEH(message->standardheader->htyp))
1886 if ((DLT_GET_MSIN_MSTP(message->extendedheader->msin))==DLT_TYPE_NW_TRACE)
1888 /* Check message type information*/
1889 /* Each correct message type increases the counter by 1 */
1890 mtin=DLT_GET_MSIN_MTIN(message->extendedheader->msin);
1892 if (mtin==DLT_NW_TRACE_IPC)
1894 dltdata->test_counter_function[6]++;
1896 if (mtin==DLT_NW_TRACE_CAN)
1898 dltdata->test_counter_function[6]++;
1900 if (mtin==DLT_NW_TRACE_FLEXRAY)
1902 dltdata->test_counter_function[6]++;
1904 if (mtin==DLT_NW_TRACE_MOST)
1906 dltdata->test_counter_function[6]++;
1909 /* Check payload, must be two arguments (2 raw data blocks) */
1910 /* If the payload is correct, the counter is increased by 1 */
1911 if (message->extendedheader->noar==2)
1917 length_tmp=0; /* the macro can set this variable to -1 */
1919 ptr = message->databuffer;
1920 datalength = message->datasize;
1922 /* first read the type info of the first argument: should be string */
1923 DLT_MSG_READ_VALUE(type_info_tmp,ptr,datalength,uint32_t);
1924 type_info=DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp);
1926 if (type_info & DLT_TYPE_INFO_RAWD)
1929 DLT_MSG_READ_VALUE(length_tmp,ptr,datalength,uint16_t);
1930 length=DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp);
1937 /* read type of second argument: should be raw */
1938 DLT_MSG_READ_VALUE(type_info_tmp,ptr,datalength,uint32_t);
1939 type_info=DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp);
1941 if (type_info & DLT_TYPE_INFO_RAWD)
1943 /* get length of raw data block */
1944 DLT_MSG_READ_VALUE(length_tmp,ptr,datalength,uint16_t);
1945 length=DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp);
1947 if ((length>=0) && (length==datalength))
1949 //printf("Raw data found in payload, length=");
1950 //printf("%d, datalength=%d \n", length, datalength);
1951 dltdata->test_counter_function[6]++;
1961 if (strcmp(text,"Tests finished")==0)
1963 printf("Tests finished\n");
1964 dltdata->running_test = 1;
1966 printf("%d tests passed\n",dltdata->tests_passed);
1967 printf("%d tests failed\n",dltdata->tests_failed);
1969 if (dltdata->sock!=-1)
1971 close(dltdata->sock);
1977 /* if no filter set or filter is matching display message */
1980 dlt_message_print_hex(message,text,DLT_TESTCLIENT_TEXTBUFSIZE,dltdata->vflag);
1982 else if (dltdata->mflag)
1984 dlt_message_print_mixed_plain(message,text,DLT_TESTCLIENT_TEXTBUFSIZE,dltdata->vflag);
1986 else if (dltdata->sflag)
1988 dlt_message_print_header(message,text,sizeof(text),dltdata->vflag);
1991 /* if file output enabled write message */
1992 if (dltdata->ovalue)
1994 iov[0].iov_base = message->headerbuffer;
1995 iov[0].iov_len = message->headersize;
1996 iov[1].iov_base = message->databuffer;
1997 iov[1].iov_len = message->datasize;
1999 bytes_written = writev(dltdata->ohandle, iov, 2);