@@ -323,6 +323,14 @@ static uint8_t USBD_GS_CAN_Config_Request(USBD_HandleTypeDef *pdev, USBD_SetupRe
323
323
}
324
324
}
325
325
326
+ if (!IS_ENABLED (CONFIG_CANFD )) {
327
+ switch (req -> bRequest ) {
328
+ case GS_USB_BREQ_DATA_BITTIMING :
329
+ case GS_USB_BREQ_BT_CONST_EXT :
330
+ goto out_fail ;
331
+ }
332
+ }
333
+
326
334
switch (req -> bRequest ) {
327
335
// Host -> Device
328
336
case GS_USB_BREQ_HOST_FORMAT :
@@ -349,6 +357,13 @@ static uint8_t USBD_GS_CAN_Config_Request(USBD_HandleTypeDef *pdev, USBD_SetupRe
349
357
case GS_USB_BREQ_IDENTIFY :
350
358
len = sizeof (struct gs_identify_mode );
351
359
break ;
360
+ case GS_USB_BREQ_DATA_BITTIMING :
361
+ len = sizeof (struct gs_device_bittiming );
362
+ break ;
363
+ case GS_USB_BREQ_BT_CONST_EXT :
364
+ src = & CAN_btconst_ext ;
365
+ len = sizeof (CAN_btconst_ext );
366
+ break ;
352
367
case GS_USB_BREQ_SET_TERMINATION :
353
368
if (get_term (req -> wValue ) == GS_CAN_TERMINATION_UNSUPPORTED ) {
354
369
goto out_fail ;
@@ -382,6 +397,7 @@ static uint8_t USBD_GS_CAN_Config_Request(USBD_HandleTypeDef *pdev, USBD_SetupRe
382
397
case GS_USB_BREQ_BITTIMING :
383
398
case GS_USB_BREQ_MODE :
384
399
case GS_USB_BREQ_IDENTIFY :
400
+ case GS_USB_BREQ_DATA_BITTIMING :
385
401
case GS_USB_BREQ_SET_TERMINATION :
386
402
if (req -> wLength > sizeof (hcan -> ep0_buf )) {
387
403
goto out_fail ;
@@ -395,6 +411,7 @@ static uint8_t USBD_GS_CAN_Config_Request(USBD_HandleTypeDef *pdev, USBD_SetupRe
395
411
case GS_USB_BREQ_BT_CONST :
396
412
case GS_USB_BREQ_DEVICE_CONFIG :
397
413
case GS_USB_BREQ_TIMESTAMP :
414
+ case GS_USB_BREQ_BT_CONST_EXT :
398
415
case GS_USB_BREQ_GET_TERMINATION :
399
416
USBD_CtlSendData (pdev , (uint8_t * )src , len );
400
417
break ;
@@ -527,6 +544,15 @@ static uint8_t USBD_GS_CAN_EP0_RxReady(USBD_HandleTypeDef *pdev) {
527
544
}
528
545
break ;
529
546
}
547
+ case GS_USB_BREQ_DATA_BITTIMING : {
548
+ const struct gs_device_bittiming * timing = (struct gs_device_bittiming * )hcan -> ep0_buf ;
549
+
550
+ if (!can_check_bittiming_ok (& CAN_btconst_ext .dbtc , timing ))
551
+ goto out_fail ;
552
+
553
+ can_set_data_bittiming (channel , timing );
554
+ break ;
555
+ }
530
556
case GS_USB_BREQ_SET_TERMINATION : {
531
557
if (get_term (req -> wValue ) != GS_CAN_TERMINATION_UNSUPPORTED ) {
532
558
struct gs_device_termination_state * term_state ;
0 commit comments