1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
|
/** @file
*
* Binary Log File (BLF) file format from Vector Informatik decoder
* for the Wiretap library.
*
* Copyright (c) 2021-2024 by Dr. Lars Voelker <lars.voelker@technica-engineering.de>
*
* SPDX-License-Identifier: GPL-2.0-or-later
*/
/*
* The following was used as a reference for the file format:
* https://bitbucket.org/tobylorenz/vector_blf
* The repo above includes multiple examples files as well.
*/
#ifndef __W_BLF_H__
#define __W_BLF_H__
#include "wtap.h"
wtap_open_return_val blf_open(wtap *wth, int *err, char **err_info);
/*
* A BLF file is of the form:
*
* BLF File Header
* Sequence of BLF objects
*
* A BLF object is of the form:
*
* BLF Block Header
* Object header (object type dependent, may be empty)
* Object contents
*
* As per
*
* https://gitlab.com/wireshark/wireshark/-/issues/19896#note_1967971057
*
* the sequence may have one (or more?) metadata objects at the beginning.
* After those, if present, there are zero or more LOG_CONTAINER objects,
* containing data for all subsequent objects. An object may be split
* between LOG_CONTAINER objects, as per
*
* https://gitlab.com/wireshark/wireshark/-/issues/19377#note_1651998569
*
* A LOG_CONTAINER object's contents are of the form:
*
* Log container header
* Data for contained objects.
*
* The data in a LOG_CONTAINER object may be compressed using zlib.
*/
#define BLF_HEADER_TYPE_DEFAULT 1
#define BLF_HEADER_TYPE_2 2
#define BLF_HEADER_TYPE_3 3
#define BLF_COMPRESSION_NONE 0
#define BLF_COMPRESSION_ZLIB 2
#define BLF_TIMESTAMP_RESOLUTION_10US 1
#define BLF_TIMESTAMP_RESOLUTION_1NS 2
typedef struct blf_date {
uint16_t year;
uint16_t month;
uint16_t dayofweek;
uint16_t day;
uint16_t hour;
uint16_t mins;
uint16_t sec;
uint16_t ms;
} blf_date_t;
/* BLF File Header */
typedef struct blf_fileheader {
uint8_t magic[4]; /* magic number - "LOGG" */
uint32_t header_length; /* length of the file header */
uint8_t applications[4];
uint8_t api[4];
uint64_t len_compressed; /* size of the file before uncompressing */
uint64_t len_uncompressed;
uint32_t obj_count; /* number of objects in the file */
uint32_t obj_read;
blf_date_t start_date;
blf_date_t end_date;
uint32_t length3;
} blf_fileheader_t;
/* BLF Block Header */
typedef struct blf_blockheader {
uint8_t magic[4]; /* magic number = "LOBJ" */
uint16_t header_length; /* length of header starting with magic */
uint16_t header_type; /* header format ? */
uint32_t object_length; /* complete length including header */
uint32_t object_type;
} blf_blockheader_t;
typedef struct blf_logcontainerheader {
uint16_t compression_method; /* 0 uncompressed, 2 zlib */
uint16_t res1;
uint32_t res2;
uint32_t uncompressed_size;
uint32_t res4;
} blf_logcontainerheader_t;
typedef struct blf_logobjectheader {
uint32_t flags;
uint16_t client_index;
uint16_t object_version;
uint64_t object_timestamp;
} blf_logobjectheader_t;
#define BLF_TS_STATUS_ORIG_TS_VALID 0x01
#define BLF_TS_STATUS_SW_TS 0x02
#define BLF_TS_STATUS_PROTO_SPECIFIC 0x10
typedef struct blf_logobjectheader2 {
uint32_t flags;
uint8_t timestamp_status;
uint8_t res1;
uint16_t object_version;
uint64_t object_timestamp;
uint64_t original_timestamp;
} blf_logobjectheader2_t;
typedef struct blf_logobjectheader3 {
uint32_t flags;
uint16_t static_size;
uint16_t object_version;
uint64_t object_timestamp;
} blf_logobjectheader3_t;
#define BLF_DIR_RX 0
#define BLF_DIR_TX 1
#define BLF_DIR_TX_RQ 2
typedef struct blf_ethernetframeheader {
uint8_t src_addr[6];
uint16_t channel;
uint8_t dst_addr[6];
uint16_t direction;
uint16_t ethtype;
uint16_t tpid;
uint16_t tci;
uint16_t payloadlength;
uint64_t res;
} blf_ethernetframeheader_t;
typedef struct blf_ethernetframeheader_ex {
uint16_t struct_length;
uint16_t flags;
uint16_t channel;
uint16_t hw_channel;
uint64_t frame_duration;
uint32_t frame_checksum;
uint16_t direction;
uint16_t frame_length;
uint32_t frame_handle;
uint32_t error;
} blf_ethernetframeheader_ex_t;
#define BLF_ETHERNET_EX_RES 0x0001
#define BLF_ETHERNET_EX_HARDWARECHANNEL 0x0002
#define BLF_ETHERNET_EX_FRAMEDURATION 0x0004
#define BLF_ETHERNET_EX_FRAMEHANDLE 0x0008
typedef struct blf_ethernet_rxerror {
uint16_t struct_length;
uint16_t channel;
uint16_t direction;
uint16_t hw_channel;
uint32_t frame_checksum;
uint16_t frame_length; /* Number of valid raw Ethernet data bytes */
uint32_t error;
} blf_ethernet_rxerror_t;
typedef struct blf_wlanframeheader {
uint16_t channel;
uint16_t flags;
uint8_t direction;
uint8_t radio_channel;
uint16_t signal_strength;
uint16_t signal_quality;
uint16_t frame_length;
uint32_t res;
} blf_wlanframeheader_t;
/* see https://bitbucket.org/tobylorenz/vector_blf/src/master/src/Vector/BLF/CanMessage.h */
/* shared for CAN message and CAN message2 and CANFD message */
#define BLF_CANMESSAGE_FLAG_TX 0x01
#define BLF_CANMESSAGE_FLAG_NERR 0x20
#define BLF_CANMESSAGE_FLAG_WU 0x40
#define BLF_CANMESSAGE_FLAG_RTR 0x80
/* shared for CAN message and CAN message2*/
typedef struct blf_canmessage {
uint16_t channel;
uint8_t flags;
uint8_t dlc;
uint32_t id;
} blf_canmessage_t;
/* see https://bitbucket.org/tobylorenz/vector_blf/src/master/src/Vector/BLF/CanMessage2.h */
typedef struct blf_canmessage2_trailer {
uint32_t frameLength_in_ns;
uint8_t bitCount;
uint8_t reserved1;
uint16_t reserved2;
} blf_canmessage2_trailer_t;
/* see https://bitbucket.org/tobylorenz/vector_blf/src/master/src/Vector/BLF/CanFdMessage.h */
/* EDL 0: CAN, 1: CAN-FD*/
#define BLF_CANFDMESSAGE_CANFDFLAG_EDL 0x01
#define BLF_CANFDMESSAGE_CANFDFLAG_BRS 0x02
#define BLF_CANFDMESSAGE_CANFDFLAG_ESI 0x04
typedef struct blf_canfdmessage {
uint16_t channel;
uint8_t flags;
uint8_t dlc;
uint32_t id;
uint32_t frameLength_in_ns;
uint8_t arbitration_bit_count;
uint8_t canfdflags;
uint8_t validDataBytes;
uint8_t reservedCanFdMessage1;
uint32_t reservedCanFdMessage2;
/* DATA */
/* uint32_t reservedCanFdMessage3 */
} blf_canfdmessage_t;
/* see https://bitbucket.org/tobylorenz/vector_blf/src/master/src/Vector/BLF/CanFdMessage64.h */
#define BLF_CANFDMESSAGE64_FLAG_NERR 0x000004
#define BLF_CANFDMESSAGE64_FLAG_HIGH_VOLT_WAKE_UP 0x000008
#define BLF_CANFDMESSAGE64_FLAG_REMOTE_FRAME 0x000010
#define BLF_CANFDMESSAGE64_FLAG_TX_ACK 0x000040
#define BLF_CANFDMESSAGE64_FLAG_TX_REQ 0x000080
#define BLF_CANFDMESSAGE64_FLAG_SRR 0x000200
#define BLF_CANFDMESSAGE64_FLAG_R0 0x000400
#define BLF_CANFDMESSAGE64_FLAG_R1 0x000800
/* EDL 0: CAN, 1: CAN-FD*/
#define BLF_CANFDMESSAGE64_FLAG_EDL 0x001000
#define BLF_CANFDMESSAGE64_FLAG_BRS 0x002000
#define BLF_CANFDMESSAGE64_FLAG_ESI 0x004000
#define BLF_CANFDMESSAGE64_FLAG_BURST 0x200000
typedef struct blf_canfdmessage64 {
uint8_t channel;
uint8_t dlc;
uint8_t validDataBytes;
uint8_t txCount;
uint32_t id;
uint32_t frameLength_in_ns;
uint32_t flags;
uint32_t btrCfgArb;
uint32_t btrCfgData;
uint32_t timeOffsetBrsNs;
uint32_t timeOffsetCrcDelNs;
uint16_t bitCount;
uint8_t dir;
uint8_t extDataOffset;
uint32_t crc;
} blf_canfdmessage64_t;
/* see https://bitbucket.org/tobylorenz/vector_blf/src/master/src/Vector/BLF/CanErrorFrame.h */
typedef struct blf_canerror {
uint16_t channel;
uint16_t length;
} blf_canerror_t;
/* see https://bitbucket.org/tobylorenz/vector_blf/src/master/src/Vector/BLF/CanErrorFrameExt.h */
#define BLF_CANERROREXT_FLAG_SJA 0x01
#define BLF_CANERROREXT_FLAG_CANCORE 0x02
#define BLF_CANERROREXT_EXTECC_TX 0x1000
#define BLF_CANERROREXT_EXTECC_NOT_ACK 0x2000
#define BLF_CANERROREXT_ECC_MEANING_BIT_ERROR 0x0
#define BLF_CANERROREXT_ECC_MEANING_FORM_ERROR 0x1
#define BLF_CANERROREXT_ECC_MEANING_STUFF_ERROR 0x2
#define BLF_CANERROREXT_ECC_MEANING_OTHER_ERROR 0x3
#define BLF_CANERROREXT_ECC_MEANING_CRC_ERROR 0x4
#define BLF_CANERROREXT_ECC_MEANING_ACKDEL_ERROR 0x5
#define BLF_CANERROREXT_ECC_MEANING_OTHER_ERROR2 0x6
#define BLF_CANERROREXT_ECC_MEANING_NACK_ERROR 0x7
#define BLF_CANERROREXT_ECC_MEANING_OVERLOAD 0x8
#define BLF_CANERROREXT_ECC_FDF_BIT_ERROR 0x9
typedef struct blf_canerrorext {
uint16_t channel;
uint16_t length;
uint32_t flags;
uint8_t ecc;
uint8_t position;
uint8_t dlc;
uint8_t reserved1;
uint32_t frameLength_in_ns;
uint32_t id;
uint16_t errorCodeExt;
uint16_t reserved2;
} blf_canerrorext_t;
/* see https://bitbucket.org/tobylorenz/vector_blf/src/master/src/Vector/BLF/CanFdErrorFrame64.h */
#define BLF_CANERROR64_FLAG_FDF 0x01
#define BLF_CANERROR65_FLAG_BRS 0x02
#define BLF_CANERROR65_FLAG_ESI 0x04
typedef struct blf_canfderror64 {
uint8_t channel;
uint8_t dlc;
uint8_t validDataBytes;
uint8_t ecc;
uint16_t flags;
uint16_t errorCodeExt;
uint16_t extFlags;
uint8_t extDataOffset;
uint8_t reserved1;
uint32_t id;
uint32_t frameLength_in_ns;
uint32_t btrCfgArb;
uint32_t btrCfgData;
uint32_t timeOffsetBrsNs;
uint32_t timeOffsetCrcDelNs;
uint32_t crc;
uint16_t errorPosition;
uint16_t reserved2;
} blf_canfderror64_t;
/* see https://bitbucket.org/tobylorenz/vector_blf/src/master/src/Vector/BLF/FlexRayData.h */
#define BLF_FLEXRAYDATA_FRAME 0x01
#define BLF_FLEXRAYDATA_CHANNEL_B 0x80
typedef struct blf_flexraydata {
uint16_t channel;
uint8_t mux;
uint8_t len;
uint16_t messageId;
uint16_t crc;
uint8_t dir;
uint8_t reservedFlexRayData1;
uint16_t reservedFlexRayData2;
} blf_flexraydata_t;
/* see https://bitbucket.org/tobylorenz/vector_blf/src/master/src/Vector/BLF/FlexRayV6Message.h */
#define BLF_FLEXRAYMESSAGE_DIR_RX 0x01
#define BLF_FLEXRAYMESSAGE_DIR_TX 0x02
#define BLF_FLEXRAYMESSAGE_DIR_TX_REQ 0x04
#define BLF_FLEXRAYMESSAGE_STATE_PPI 0x01
#define BLF_FLEXRAYMESSAGE_STATE_SFI 0x02
#define BLF_FLEXRAYMESSAGE_STATE_RES_BIT2 0x04
#define BLF_FLEXRAYMESSAGE_STATE_NFI 0x08
#define BLF_FLEXRAYMESSAGE_STATE_STFI 0x10
#define BLF_FLEXRAYMESSAGE_STATE_FORMAT 0xe0
#define BLF_FLEXRAYMESSAGE_HEADER_BIT_NM 0x01
#define BLF_FLEXRAYMESSAGE_HEADER_BIT_SYNC 0x02
#define BLF_FLEXRAYMESSAGE_HEADER_BIT_RES 0x04
#define BLF_DLT_FLEXRAY_STFI 0x08
#define BLF_DLT_FLEXRAY_SFI 0x10
#define BLF_DLT_FLEXRAY_NFI 0x20
#define BLF_DLT_FLEXRAY_PPI 0x40
typedef struct blf_flexraymessage {
uint16_t channel;
uint8_t dir; /* Flags: 0 RX, 1 TX, 2 TX Req, 3 internal, 4 internal*/
uint8_t lowTime;
uint32_t fpgaTick;
uint32_t fpgaTickOverflow;
uint32_t clientIndexFlexRayV6Message;
uint32_t clusterTime;
uint16_t frameId;
uint16_t headerCrc;
uint16_t frameState;
uint8_t length;
uint8_t cycle;
uint8_t headerBitMask;
uint8_t reservedFlexRayV6Message1;
uint16_t reservedFlexRayV6Message2;
} blf_flexraymessage_t;
/* see https://bitbucket.org/tobylorenz/vector_blf/src/master/src/Vector/BLF/FlexRayVFrReceiveMsg.h */
#define BLF_FLEXRAYRCVMSG_DIR_RX 0x01
#define BLF_FLEXRAYRCVMSG_DIR_TX 0x02
#define BLF_FLEXRAYRCVMSG_DIR_TX_REQ 0x04
#define BLF_FLEXRAYRCVMSG_CHANNELMASK_RES 0x00
#define BLF_FLEXRAYRCVMSG_CHANNELMASK_A 0x01
#define BLF_FLEXRAYRCVMSG_CHANNELMASK_B 0x02
#define BLF_FLEXRAYRCVMSG_CHANNELMASK_AB 0x03
#define BLF_FLEXRAYRCVMSG_FRAME_FLAG_NULL_FRAME 0x00000001
#define BLF_FLEXRAYRCVMSG_FRAME_FLAG_VALID_DATA 0x00000002
#define BLF_FLEXRAYRCVMSG_FRAME_FLAG_SYNC 0x00000004
#define BLF_FLEXRAYRCVMSG_FRAME_FLAG_STARTUP 0x00000008
#define BLF_FLEXRAYRCVMSG_FRAME_FLAG_PAYLOAD_PREAM 0x00000010
#define BLF_FLEXRAYRCVMSG_FRAME_FLAG_RES_20 0x00000020
#define BLF_FLEXRAYRCVMSG_FRAME_FLAG_ERROR 0x00000040
#define BLF_FLEXRAYRCVMSG_FRAME_FLAG_RES_80 0x00000080
typedef struct blf_flexrayrcvmessage {
uint16_t channel;
uint16_t version;
uint16_t channelMask; /* 0 res, 1 A, 2 B, 3 A+B */
uint16_t dir; /* 0 RX, 1 TX, 2 TX Req, 3 internal, 4 internal*/ /* high byte reserved! */
uint32_t clientIndex;
uint32_t clusterNo;
uint16_t frameId;
uint16_t headerCrc1;
uint16_t headerCrc2;
uint16_t payloadLength;
uint16_t payloadLengthValid;
uint16_t cycle; /* high byte reserved! */
uint32_t tag;
uint32_t data;
uint32_t frameFlags;
uint32_t appParameter;
/* if ext, skip 40 bytes */
/* payload bytes */
/* uint16_t res3 */
/* uint32_t res4 */
} blf_flexrayrcvmessage_t;
/* see https://bitbucket.org/tobylorenz/vector_blf/src/master/src/Vector/BLF/FlexRayVFrReceiveMsgEx.h */
/* defines see above BLF_FLEXRAYRCVMSG_* */
typedef struct blf_flexrayrcvmessageex {
uint16_t channel;
uint16_t version;
uint16_t channelMask; /* 0 res, 1 A, 2 B, 3 A+B */
uint16_t dir; /* 0 RX, 1 TX, 2 TX Req, 3 internal, 4 internal*/
uint32_t clientIndex;
uint32_t clusterNo;
uint16_t frameId;
uint16_t headerCrc1;
uint16_t headerCrc2;
uint16_t payloadLength;
uint16_t payloadLengthValid;
uint16_t cycle;
uint32_t tag;
uint32_t data;
uint32_t frameFlags;
uint32_t appParameter;
uint32_t frameCRC;
uint32_t frameLengthInNs;
uint16_t frameId1;
uint16_t pduOffset;
uint16_t blfLogMask;
uint16_t res1;
uint32_t res2;
uint32_t res3;
uint32_t res4;
uint32_t res5;
uint32_t res6;
uint32_t res7;
/* payload bytes */
} blf_flexrayrcvmessageex_t;
/* see https://bitbucket.org/tobylorenz/vector_blf/src/master/src/Vector/BLF/LinMessage.h */
typedef struct blf_linmessage {
uint16_t channel;
uint8_t id;
uint8_t dlc;
uint8_t data[8];
uint8_t fsmId;
uint8_t fsmState;
uint8_t headerTime;
uint8_t fullTime;
uint16_t crc;
uint8_t dir; /* 0 RX, 1 TX Receipt, 2 TX Req */
uint8_t res1;
/* This field is optional and skipping does not hurt us.
uint32_t res2;
*/
} blf_linmessage_t;
typedef struct blf_linrcverror {
uint16_t channel;
uint8_t id;
uint8_t dlc;
uint8_t fsmId;
uint8_t fsmState;
uint8_t headerTime;
uint8_t fullTime;
uint8_t stateReason;
uint8_t offendingByte;
uint8_t shortError;
uint8_t timeoutDuringDlcDetection;
} blf_linrcverror_t;
typedef struct blf_linsenderror {
uint16_t channel;
uint8_t id;
uint8_t dlc;
uint8_t fsmId;
uint8_t fsmState;
uint8_t headerTime;
uint8_t fullTime;
} blf_linsenderror_t;
typedef struct blf_linwakeupevent {
uint16_t channel;
uint8_t signal;
uint8_t external;
} blf_linwakeupevent_t;
typedef struct blf_linbusevent {
uint64_t sof;
uint32_t eventBaudrate;
uint16_t channel;
uint8_t res1[2];
} blf_linbusevent_t;
typedef struct blf_linsynchfieldevent {
blf_linbusevent_t linBusEvent;
uint64_t synchBreakLength;
uint64_t synchDelLength;
} blf_linsynchfieldevent_t;
typedef struct blf_linmessagedescriptor {
blf_linsynchfieldevent_t linSynchFieldEvent;
uint16_t supplierId; /* LIN 2.0 or higher */
uint16_t messageId; /* LIN 2.0: message identifier, LIN 2.1: position index as specified in LDF */
uint8_t configuredNodeAddress; /* LIN 2.0 or higher */
uint8_t id;
uint8_t dlc;
uint8_t checksumModel;
} blf_linmessagedescriptor_t;
typedef struct blf_lindatabytetimestampevent {
blf_linmessagedescriptor_t linMessageDescriptor;
uint64_t databyteTimestamps[9]; /* Byte 0: Timestamp of last header byte, Bytes 1-9: Timestamps of data bytes 1-8 */
} blf_lindatabytetimestampevent_t;
typedef struct blf_linmessage2 {
blf_lindatabytetimestampevent_t linDataByteTimestampEvent;
uint8_t data[8];
uint16_t crc;
uint8_t dir; /* 0 RX, 1 TX Receipt, 2 TX Req */
uint8_t simulated; /* 0 Real frame, 1 Simulated frame */
uint8_t isEtf; /* 0 Not event triggered frame, 1 Event triggered frame */
uint8_t eftAssocIndex;
uint8_t eftAssocEftId;
uint8_t fsmId; /* Obsolete */
uint8_t fsmState; /* Obsolete */
uint8_t res1[3];
/* These fields are optional and skipping does not hurt us.
uint32_t respBaudrate;
double exactHeaderBaudrate;
uint32_t earlyStopBitOffset;
uint32_t earlyStopBitOffsetResponse;
*/
} blf_linmessage2_t;
typedef struct blf_lincrcerror2 {
blf_lindatabytetimestampevent_t linDataByteTimestampEvent;
uint8_t data[8];
uint16_t crc;
uint8_t dir; /* 0 RX, 1 TX Receipt, 2 TX Req */
uint8_t fsmId; /* Obsolete */
uint8_t fsmState; /* Obsolete */
uint8_t simulated; /* 0 Real frame, 1 Simulated frame */
uint8_t res1[2];
/* These fields are optional and skipping does not hurt us.
uint32_t respBaudrate;
uint8_t res2[4];
double exactHeaderBaudrate;
uint32_t earlyStopBitOffset;
uint32_t earlyStopBitOffsetResponse;
*/
} blf_lincrcerror2_t;
typedef struct blf_linrcverror2 {
blf_lindatabytetimestampevent_t linDataByteTimestampEvent;
uint8_t data[8];
uint8_t fsmId; /* Obsolete */
uint8_t fsmState; /* Obsolete */
uint8_t stateReason;
uint8_t offendingByte;
uint8_t shortError;
uint8_t timeoutDuringDlcDetection;
uint8_t isEtf;
uint8_t hasDataBytes;
/* These fields are optional and skipping does not hurt us.
uint32_t respBaudrate;
uint8_t res[4];
double exactHeaderBaudrate;
uint32_t earlyStopBitOffset;
uint32_t earlyStopBitOffsetResponse;
*/
} blf_linrcverror2_t;
typedef struct blf_linsenderror2 {
blf_linmessagedescriptor_t linMessageDescriptor;
uint64_t eoh;
uint8_t isEtf;
uint8_t fsmId; /* Obsolete */
uint8_t fsmState; /* Obsolete */
uint8_t res1;
/* These fields are optional and skipping does not hurt us.
uint8_t res2[4];
double exactHeaderBaudrate;
uint32_t earlyStopBitOffset;
*/
} blf_linsenderror2_t;
typedef struct blf_linwakeupevent2 {
blf_linbusevent_t linBusEvent;
uint8_t lengthInfo; /* Wake-up length: 0 = OK; 1 = Too short; 2 = Too long. */
uint8_t signal;
uint8_t external;
uint8_t res;
} blf_linwakeupevent2_t;
typedef struct blf_linsleepmodeevent {
uint16_t channel;
uint8_t reason;
uint8_t flags;
} blf_linsleepmodeevent_t;
#define BLF_LIN_WU_SLEEP_REASON_START_STATE 0 /* Initial state of the interface */
#define BLF_LIN_SLEEP_REASON_GO_TO_SLEEP_FRAME 1
#define BLF_LIN_SLEEP_REASON_BUS_IDLE_TIMEOUT 2
#define BLF_LIN_SLEEP_REASON_SILENT_SLEEPMODE_CMD 3 /* Command to shorten bus idle timeout */
#define BLF_LIN_WU_REASON_EXTERNAL_WAKEUP_SIG 9
#define BLF_LIN_WU_REASON_INTERNAL_WAKEUP_SIG 10
#define BLF_LIN_WU_REASON_BUS_TRAFFIC 11
#define BLF_LIN_NO_SLEEP_REASON_BUS_TRAFFIC 18 /* LIN hardware does not go into Sleep mode in spite of request to do so */
/* see https://bitbucket.org/tobylorenz/vector_blf/src/master/src/Vector/BLF/AppText.h */
typedef struct blf_apptext {
uint32_t source;
uint32_t reservedAppText1;
uint32_t textLength;
uint32_t reservedAppText2;
} blf_apptext_t;
#define BLF_APPTEXT_COMMENT 0x00000000
#define BLF_APPTEXT_CHANNEL 0x00000001
#define BLF_APPTEXT_METADATA 0x00000002
#define BLF_APPTEXT_ATTACHMENT 0x00000003
#define BLF_APPTEXT_TRACELINE 0x00000004
#define BLF_APPTEXT_CONT 0x000000FE
#define BLF_APPTEXT_FAILED 0x000000FF
#define BLF_APPTEXT_XML_GENERAL 0x01
#define BLF_APPTEXT_XML_CHANNELS 0x02
#define BLF_APPTEXT_XML_IDENTITY 0x03
#define BLF_BUSTYPE_CAN 1
#define BLF_BUSTYPE_LIN 5
#define BLF_BUSTYPE_MOST 6
#define BLF_BUSTYPE_FLEXRAY 7
#define BLF_BUSTYPE_J1708 9
#define BLF_BUSTYPE_ETHERNET 11
#define BLF_BUSTYPE_WLAN 13
#define BLF_BUSTYPE_AFDX 14
/* see https://bitbucket.org/tobylorenz/vector_blf/src/master/src/Vector/BLF/EthernetStatus.h */
typedef struct blf_ethernet_status {
uint16_t channel;
uint16_t flags;
uint8_t linkStatus;
uint8_t ethernetPhy;
uint8_t duplex;
uint8_t mdi;
uint8_t connector;
uint8_t clockMode;
uint8_t pairs;
uint8_t hardwareChannel;
uint32_t bitrate;
/* Starting from version 1
uint64_t linkUpDuration; // In nanoseconds
*/
} blf_ethernet_status_t;
#define BLF_ETH_STATUS_LINKSTATUS 0x0001
#define BLF_ETH_STATUS_BITRATE 0x0002
#define BLF_ETH_STATUS_ETHERNETPHY 0x0004
#define BLF_ETH_STATUS_DUPLEX 0x0008
#define BLF_ETH_STATUS_MDITYPE 0x0010
#define BLF_ETH_STATUS_CONNECTOR 0x0020
#define BLF_ETH_STATUS_CLOCKMODE 0x0040
#define BLF_ETH_STATUS_BRPAIR 0x0080
#define BLF_ETH_STATUS_HARDWARECHANNEL 0x0100
#define BLF_ETH_STATUS_LINKUPDURATION 0x0200
typedef struct blf_ethernet_phystate {
uint16_t channel;
uint16_t flags;
uint8_t phyState;
uint8_t phyEvent;
uint8_t hardwareChannel;
uint8_t res1;
} blf_ethernet_phystate_t;
#define BLF_PHY_STATE_PHYSTATE 0x0001
#define BLF_PHY_STATE_PHYEVENT 0x0002
#define BLF_PHY_STATE_HARDWARECHANNEL 0x0004
/* see https://bitbucket.org/tobylorenz/vector_blf/src/master/src/Vector/BLF/ObjectHeaderBase.h */
#define BLF_OBJTYPE_UNKNOWN 0
#define BLF_OBJTYPE_CAN_MESSAGE 1
#define BLF_OBJTYPE_CAN_ERROR 2
#define BLF_OBJTYPE_CAN_OVERLOAD 3
#define BLF_OBJTYPE_CAN_STATISTIC 4
#define BLF_OBJTYPE_APP_TRIGGER 5
#define BLF_OBJTYPE_ENV_INTEGER 6
#define BLF_OBJTYPE_ENV_DOUBLE 7
#define BLF_OBJTYPE_ENV_STRING 8
#define BLF_OBJTYPE_ENV_DATA 9
#define BLF_OBJTYPE_LOG_CONTAINER 10
#define BLF_OBJTYPE_LIN_MESSAGE 11
#define BLF_OBJTYPE_LIN_CRC_ERROR 12
#define BLF_OBJTYPE_LIN_DLC_INFO 13
#define BLF_OBJTYPE_LIN_RCV_ERROR 14
#define BLF_OBJTYPE_LIN_SND_ERROR 15
#define BLF_OBJTYPE_LIN_SLV_TIMEOUT 16
#define BLF_OBJTYPE_LIN_SCHED_MODCH 17
#define BLF_OBJTYPE_LIN_SYN_ERROR 18
#define BLF_OBJTYPE_LIN_BAUDRATE 19
#define BLF_OBJTYPE_LIN_SLEEP 20
#define BLF_OBJTYPE_LIN_WAKEUP 21
#define BLF_OBJTYPE_MOST_SPY 22
#define BLF_OBJTYPE_MOST_CTRL 23
#define BLF_OBJTYPE_MOST_LIGHTLOCK 24
#define BLF_OBJTYPE_MOST_STATISTIC 25
#define BLF_OBJTYPE_FLEXRAY_DATA 29
#define BLF_OBJTYPE_FLEXRAY_SYNC 30
#define BLF_OBJTYPE_CAN_DRIVER_ERROR 31
#define BLF_OBJTYPE_MOST_PKT 32
#define BLF_OBJTYPE_MOST_PKT2 33
#define BLF_OBJTYPE_MOST_HWMODE 34
#define BLF_OBJTYPE_MOST_REG 35
#define BLF_OBJTYPE_MOST_GENREG 36
#define BLF_OBJTYPE_MOST_NETSTATE 37
#define BLF_OBJTYPE_MOST_DATALOST 38
#define BLF_OBJTYPE_MOST_TRIGGER 39
#define BLF_OBJTYPE_FLEXRAY_CYCLE 40
#define BLF_OBJTYPE_FLEXRAY_MESSAGE 41
#define BLF_OBJTYPE_LIN_CHECKSUM_INFO 42
#define BLF_OBJTYPE_LIN_SPIKE_EVENT 43
#define BLF_OBJTYPE_CAN_DRIVER_SYNC 44
#define BLF_OBJTYPE_FLEXRAY_STATUS 45
#define BLF_OBJTYPE_GPS_EVENT 46
#define BLF_OBJTYPE_FLEXRAY_ERROR 47
#define BLF_OBJTYPE_FLEXRAY_STATUS2 48
#define BLF_OBJTYPE_FLEXRAY_STARTCYCLE 49
#define BLF_OBJTYPE_FLEXRAY_RCVMESSAGE 50
#define BLF_OBJTYPE_REALTIMECLOCK 51
#define BLF_OBJTYPE_LIN_STATISTIC 54
#define BLF_OBJTYPE_J1708_MESSAGE 55
#define BLF_OBJTYPE_J1708_VIRTUAL_MSG 56
#define BLF_OBJTYPE_LIN_MESSAGE2 57
#define BLF_OBJTYPE_LIN_SND_ERROR2 58
#define BLF_OBJTYPE_LIN_SYN_ERROR2 59
#define BLF_OBJTYPE_LIN_CRC_ERROR2 60
#define BLF_OBJTYPE_LIN_RCV_ERROR2 61
#define BLF_OBJTYPE_LIN_WAKEUP2 62
#define BLF_OBJTYPE_LIN_SPIKE_EVENT2 63
#define BLF_OBJTYPE_LIN_LONG_DOM_SIG 64
#define BLF_OBJTYPE_APP_TEXT 65
#define BLF_OBJTYPE_FLEXRAY_RCVMESSAGE_EX 66
#define BLF_OBJTYPE_MOST_STATISTICEX 67
#define BLF_OBJTYPE_MOST_TXLIGHT 68
#define BLF_OBJTYPE_MOST_ALLOCTAB 69
#define BLF_OBJTYPE_MOST_STRESS 70
#define BLF_OBJTYPE_ETHERNET_FRAME 71
#define BLF_OBJTYPE_SYS_VARIABLE 72
#define BLF_OBJTYPE_CAN_ERROR_EXT 73
#define BLF_OBJTYPE_CAN_DRIVER_ERROR_EXT 74
#define BLF_OBJTYPE_LIN_LONG_DOM_SIG2 75
#define BLF_OBJTYPE_MOST_150_MESSAGE 76
#define BLF_OBJTYPE_MOST_150_PKT 77
#define BLF_OBJTYPE_MOST_ETHERNET_PKT 78
#define BLF_OBJTYPE_MOST_150_MESSAGE_FRAGMENT 79
#define BLF_OBJTYPE_MOST_150_PKT_FRAGMENT 80
#define BLF_OBJTYPE_MOST_ETHERNET_PKT_FRAGMENT 81
#define BLF_OBJTYPE_MOST_SYSTEM_EVENT 82
#define BLF_OBJTYPE_MOST_150_ALLOCTAB 83
#define BLF_OBJTYPE_MOST_50_MESSAGE 84
#define BLF_OBJTYPE_MOST_50_PKT 85
#define BLF_OBJTYPE_CAN_MESSAGE2 86
#define BLF_OBJTYPE_LIN_UNEXPECTED_WAKEUP 87
#define BLF_OBJTYPE_LIN_SHORT_OR_SLOW_RESPONSE 88
#define BLF_OBJTYPE_LIN_DISTURBANCE_EVENT 89
#define BLF_OBJTYPE_SERIAL_EVENT 90
#define BLF_OBJTYPE_OVERRUN_ERROR 91
#define BLF_OBJTYPE_EVENT_COMMENT 92
#define BLF_OBJTYPE_WLAN_FRAME 93
#define BLF_OBJTYPE_WLAN_STATISTIC 94
#define BLF_OBJTYPE_MOST_ECL 95
#define BLF_OBJTYPE_GLOBAL_MARKER 96
#define BLF_OBJTYPE_AFDX_FRAME 97
#define BLF_OBJTYPE_AFDX_STATISTIC 98
#define BLF_OBJTYPE_KLINE_STATUSEVENT 99
#define BLF_OBJTYPE_CAN_FD_MESSAGE 100
#define BLF_OBJTYPE_CAN_FD_MESSAGE_64 101
#define BLF_OBJTYPE_ETHERNET_RX_ERROR 102
#define BLF_OBJTYPE_ETHERNET_STATUS 103
#define BLF_OBJTYPE_CAN_FD_ERROR_64 104
#define BLF_OBJTYPE_AFDX_STATUS 106
#define BLF_OBJTYPE_AFDX_BUS_STATISTIC 107
#define BLF_OBJTYPE_AFDX_ERROR_EVENT 109
#define BLF_OBJTYPE_A429_ERROR 110
#define BLF_OBJTYPE_A429_STATUS 111
#define BLF_OBJTYPE_A429_BUS_STATISTIC 112
#define BLF_OBJTYPE_A429_MESSAGE 113
#define BLF_OBJTYPE_ETHERNET_STATISTIC 114
#define BLF_OBJTYPE_RESERVED5 115
#define BLF_OBJTYPE_RESERVED6 116
#define BLF_OBJTYPE_RESERVED7 117
#define BLF_OBJTYPE_TEST_STRUCTURE 118
#define BLF_OBJTYPE_DIAG_REQUEST_INTERPRETATION 119
#define BLF_OBJTYPE_ETHERNET_FRAME_EX 120
#define BLF_OBJTYPE_ETHERNET_FRAME_FORWARDED 121
#define BLF_OBJTYPE_ETHERNET_ERROR_EX 122
#define BLF_OBJTYPE_ETHERNET_ERROR_FORWARDED 123
#define BLF_OBJTYPE_FUNCTION_BUS 124
#define BLF_OBJTYPE_DATA_LOST_BEGIN 125
#define BLF_OBJTYPE_DATA_LOST_END 126
#define BLF_OBJTYPE_WATER_MARK_EVENT 127
#define BLF_OBJTYPE_TRIGGER_CONDITION 128
#define BLF_OBJTYPE_CAN_SETTING_CHANGED 129
#define BLF_OBJTYPE_DISTRIBUTED_OBJECT_MEMBER 130
#define BLF_OBJTYPE_ATTRIBUTE_EVENT 131
#define BLF_OBJTYPE_DISTRIBUTED_OBJECT_CHANGE 132
#define BLF_OBJTYPE_ETHERNET_PHY_STATE 133
#endif
/*
* Editor modelines - https://www.wireshark.org/tools/modelines.html
*
* Local variables:
* c-basic-offset: 4
* tab-width: 8
* indent-tabs-mode: nil
* End:
*
* vi: set shiftwidth=4 tabstop=8 expandtab:
* :indentSize=4:tabSize=8:noTabs=true:
*/
|