45
45
#include "avtp/Udp.h"
46
46
#include "avtp/acf/Ntscf.h"
47
47
#include "avtp/acf/Tscf.h"
48
- #include "avtp/acf/Common .h"
48
+ #include "avtp/acf/AcfCommon .h"
49
49
#include "avtp/acf/Can.h"
50
50
#include "avtp/CommonHeader.h"
51
51
#include "acf-can-common.h"
@@ -139,14 +139,13 @@ static error_t parser(int key, char *arg, struct argp_state *state)
139
139
140
140
static struct argp argp = { options , parser , args_doc , doc };
141
141
142
- static int is_valid_acf_packet (uint8_t * acf_pdu ) {
143
-
144
- uint64_t val64 ;
145
-
146
- Avtp_AcfCommon_GetField ((Avtp_AcfCommon_t * )acf_pdu , AVTP_ACF_FIELD_ACF_MSG_TYPE , & val64 );
147
- if (val64 != AVTP_ACF_TYPE_CAN ) {
148
- fprintf (stderr , "ACF type mismatch: expected %u, got %lu\n" ,
149
- AVTP_ACF_TYPE_CAN , val64 );
142
+ static int is_valid_acf_packet (uint8_t * acf_pdu )
143
+ {
144
+ Avtp_AcfCommon_t * pdu = (Avtp_AcfCommon_t * ) acf_pdu ;
145
+ uint8_t acf_msg_type = Avtp_AcfCommon_GetAcfMsgType (pdu );
146
+ if (acf_msg_type != AVTP_ACF_TYPE_CAN ) {
147
+ fprintf (stderr , "ACF type mismatch: expected %" PRIu8 ", got %" PRIu8 "\n" ,
148
+ AVTP_ACF_TYPE_CAN , acf_msg_type );
150
149
return 0 ;
151
150
}
152
151
@@ -155,71 +154,63 @@ static int is_valid_acf_packet(uint8_t* acf_pdu) {
155
154
156
155
void print_can_acf (uint8_t * acf_pdu )
157
156
{
158
- uint64_t acf_msg_len , can_bus_id , timestamp , can_identifier , pad ;
159
-
160
157
Avtp_Can_t * pdu = (Avtp_Can_t * ) acf_pdu ;
161
-
162
- Avtp_Can_GetField (pdu , AVTP_CAN_FIELD_ACF_MSG_LENGTH , & acf_msg_len );
163
- Avtp_Can_GetField (pdu , AVTP_CAN_FIELD_CAN_BUS_ID , & can_bus_id );
164
- Avtp_Can_GetField (pdu , AVTP_CAN_FIELD_MESSAGE_TIMESTAMP , & timestamp );
165
- Avtp_Can_GetField (pdu , AVTP_CAN_FIELD_CAN_IDENTIFIER , & can_identifier );
166
- Avtp_Can_GetField (pdu , AVTP_CAN_FIELD_PAD , & pad );
158
+ uint16_t acf_msg_len = Avtp_Can_GetAcfMsgLength (pdu );
159
+ uint8_t can_bus_id = Avtp_Can_GetCanBusId (pdu );
160
+ uint64_t timestamp = Avtp_Can_GetMessageTimestamp (pdu );
161
+ uint32_t can_identifier = Avtp_Can_GetCanIdentifier (pdu );
162
+ uint8_t pad = Avtp_Can_GetPad (pdu );
167
163
168
164
fprintf (stderr , "------------------------------------\n" );
169
- fprintf (stderr , "Msg Length: %" PRIu64 "\n" , acf_msg_len );
170
- fprintf (stderr , "Can Bus ID: %" PRIu64 "\n" , can_bus_id );
171
- fprintf (stderr , "Timestamp: %#lx\n " , timestamp );
172
- fprintf (stderr , "Can Identifier: %#lx \n" , can_identifier );
173
- fprintf (stderr , "Pad: %" PRIu64 "\n" , pad );
165
+ fprintf (stderr , "Msg Length: %" PRIu16 "\n" , acf_msg_len );
166
+ fprintf (stderr , "Can Bus ID: %" PRIu8 "\n" , can_bus_id );
167
+ fprintf (stderr , "Timestamp: %" PRIu64 " " , timestamp );
168
+ fprintf (stderr , "Can Identifier: %" PRIu32 " \n" , can_identifier );
169
+ fprintf (stderr , "Pad: %" PRIu8 "\n" , pad );
174
170
}
175
171
176
172
static int new_packet (int sk_fd , int can_socket ) {
177
173
178
- int res ;
179
- uint64_t msg_length , proc_bytes = 0 , msg_proc_bytes = 0 ;
180
- uint64_t can_frame_id , udp_seq_num , subtype , flag ;
181
- uint16_t payload_length , pdu_length ;
174
+ int res = 0 ;
175
+ uint64_t proc_bytes = 0 , msg_proc_bytes = 0 ;
176
+ uint32_t udp_seq_num ;
177
+ uint16_t msg_length , can_payload_length , acf_msg_length ;
178
+ uint8_t subtype ;
182
179
uint8_t pdu [MAX_PDU_SIZE ], i ;
183
180
uint8_t * cf_pdu , * acf_pdu , * udp_pdu , * can_payload ;
184
181
frame_t frame ;
185
182
canid_t can_id ;
186
183
187
184
memset (& frame , 0 , sizeof (struct canfd_frame ));
188
185
res = recv (sk_fd , pdu , MAX_PDU_SIZE , 0 );
189
-
190
186
if (res < 0 || res > MAX_PDU_SIZE ) {
191
187
perror ("Failed to receive data" );
192
188
return -1 ;
193
189
}
194
190
195
191
if (use_udp ) {
196
192
udp_pdu = pdu ;
197
- Avtp_Udp_GetField ((Avtp_Udp_t * )udp_pdu , AVTP_UDP_FIELD_ENCAPSULATION_SEQ_NO , & udp_seq_num );
193
+ udp_seq_num = Avtp_Udp_GetEncapsulationSeqNo ((Avtp_Udp_t * )udp_pdu );
198
194
cf_pdu = pdu + AVTP_UDP_HEADER_LEN ;
199
195
proc_bytes += AVTP_UDP_HEADER_LEN ;
200
196
} else {
201
197
cf_pdu = pdu ;
202
198
}
203
199
204
- res = Avtp_CommonHeader_GetField ((Avtp_CommonHeader_t * )cf_pdu , AVTP_COMMON_HEADER_FIELD_SUBTYPE , & subtype );
205
- if (res < 0 ) {
206
- fprintf (stderr , "Failed to get subtype field: %d\n" , res );
207
- return -1 ;
208
- }
209
-
200
+ subtype = Avtp_CommonHeader_GetSubtype ((Avtp_CommonHeader_t * )cf_pdu );
210
201
if (!((subtype == AVTP_SUBTYPE_NTSCF ) ||
211
202
(subtype == AVTP_SUBTYPE_TSCF ))) {
212
- fprintf (stderr , "Subtype mismatch: expected %u or %u, got %" PRIu64 ". Dropping packet\n" ,
203
+ fprintf (stderr , "Subtype mismatch: expected %u or %u, got %" PRIu8 ". Dropping packet\n" ,
213
204
AVTP_SUBTYPE_NTSCF , AVTP_SUBTYPE_TSCF , subtype );
214
205
return -1 ;
215
206
}
216
207
217
- if (subtype == AVTP_SUBTYPE_TSCF ){
208
+ if (subtype == AVTP_SUBTYPE_TSCF ){
218
209
proc_bytes += AVTP_TSCF_HEADER_LEN ;
219
- Avtp_Tscf_GetField ((Avtp_Tscf_t * )cf_pdu , AVTP_TSCF_FIELD_STREAM_DATA_LENGTH , ( uint64_t * ) & msg_length );
220
- }else {
210
+ msg_length = Avtp_Tscf_GetStreamDataLength ((Avtp_Tscf_t * )cf_pdu );
211
+ } else {
221
212
proc_bytes += AVTP_NTSCF_HEADER_LEN ;
222
- Avtp_Ntscf_GetField ((Avtp_Ntscf_t * )cf_pdu , AVTP_NTSCF_FIELD_NTSCF_DATA_LENGTH , ( uint64_t * ) & msg_length );
213
+ msg_length = Avtp_Ntscf_GetNtscfDataLength ((Avtp_Ntscf_t * )cf_pdu );
223
214
}
224
215
225
216
while (msg_proc_bytes < msg_length ) {
@@ -231,46 +222,44 @@ static int new_packet(int sk_fd, int can_socket) {
231
222
return -1 ;
232
223
}
233
224
234
- Avtp_Can_GetField ((Avtp_Can_t * )acf_pdu , AVTP_CAN_FIELD_CAN_IDENTIFIER ,
235
- & (can_frame_id ));
236
- can_id = can_frame_id ;
225
+ can_id = Avtp_Can_GetCanIdentifier ((Avtp_Can_t * )acf_pdu );
237
226
238
- can_payload = Avtp_Can_GetPayload ((Avtp_Can_t * )acf_pdu , & payload_length , & pdu_length );
239
- msg_proc_bytes += pdu_length * 4 ;
227
+ can_payload = Avtp_Can_GetPayload ((Avtp_Can_t * )acf_pdu );
228
+ acf_msg_length = Avtp_Can_GetAcfMsgLength ((Avtp_Can_t * )acf_pdu )* 4 ;
229
+ can_payload_length = Avtp_Can_GetCanPayloadLength ((Avtp_Can_t * )acf_pdu );
230
+ msg_proc_bytes += acf_msg_length ;
240
231
241
232
// Handle EFF Flag
242
- Avtp_Can_GetField ((Avtp_Can_t * )acf_pdu , AVTP_CAN_FIELD_EFF , & flag );
243
- if (can_id > 0x7FF && !flag ) {
244
- fprintf (stderr , "Error: CAN ID is > 0x7FF but the EFF bit is not set.\n" );
245
- return -1 ;
233
+ if (Avtp_Can_GetEff ((Avtp_Can_t * )acf_pdu )) {
234
+ can_id |= CAN_EFF_FLAG ;
235
+ } else if (can_id > 0x7FF ) {
236
+ fprintf (stderr , "Error: CAN ID is > 0x7FF but the EFF bit is not set.\n" );
237
+ return -1 ;
246
238
}
247
- if (flag ) can_id |= CAN_EFF_FLAG ;
248
239
249
240
// Handle RTR Flag
250
- Avtp_Can_GetField ((Avtp_Can_t * )acf_pdu , AVTP_CAN_FIELD_RTR , & flag );
251
- if (flag ) can_id |= CAN_RTR_FLAG ;
241
+ if (Avtp_Can_GetRtr ((Avtp_Can_t * )acf_pdu )) {
242
+ can_id |= CAN_RTR_FLAG ;
243
+ }
252
244
253
245
if (can_variant == AVTP_CAN_FD ) {
254
-
255
- Avtp_Can_GetField ((Avtp_Can_t * )acf_pdu , AVTP_CAN_FIELD_BRS , & flag );
256
- if (flag ) frame .fd .flags |= CANFD_BRS ;
257
-
258
- Avtp_Can_GetField ((Avtp_Can_t * )acf_pdu , AVTP_CAN_FIELD_FDF , & flag );
259
- if (flag ) frame .fd .flags |= CANFD_FDF ;
260
-
261
- Avtp_Can_GetField ((Avtp_Can_t * )acf_pdu , AVTP_CAN_FIELD_ESI , & flag );
262
- if (flag ) frame .fd .flags |= CANFD_ESI ;
263
-
246
+ if (Avtp_Can_GetBrs ((Avtp_Can_t * )acf_pdu )) {
247
+ frame .fd .flags |= CANFD_BRS ;
248
+ }
249
+ if (Avtp_Can_GetFdf ((Avtp_Can_t * )acf_pdu )) {
250
+ frame .fd .flags |= CANFD_FDF ;
251
+ }
252
+ if (Avtp_Can_GetEsi ((Avtp_Can_t * )acf_pdu )) {
253
+ frame .fd .flags |= CANFD_ESI ;
254
+ }
264
255
frame .fd .can_id = can_id ;
265
- frame .fd .len = payload_length ;
266
- memcpy (frame .fd .data , can_payload , payload_length );
256
+ frame .fd .len = can_payload_length ;
257
+ memcpy (frame .fd .data , can_payload , can_payload_length );
267
258
res = write (can_socket , & frame .fd , sizeof (struct canfd_frame ));
268
-
269
259
} else {
270
-
271
260
frame .cc .can_id = can_id ;
272
- frame .cc .len = payload_length ;
273
- memcpy (frame .cc .data , can_payload , payload_length );
261
+ frame .cc .len = can_payload_length ;
262
+ memcpy (frame .cc .data , can_payload , can_payload_length );
274
263
res = write (can_socket , & frame .cc , sizeof (struct can_frame ));
275
264
}
276
265
0 commit comments