@@ -107,13 +107,13 @@ uint8_t USBPackSize;
107
107
/* Default configuration: 115200, 8N1 */
108
108
uint8_t lineSetup [] = {0x00 , 0xc2 , 0x01 , 0x00 , 0x00 , 0x00 , 0x08 };
109
109
110
- #define CDC_POLLING_INTERVAL 1 /* in ms. The max is 65 and the min is 1 */
110
+ #define CDC_POLLING_INTERVAL 2 /* in ms. The max is 65 and the min is 1 */
111
111
112
112
stimer_t TimHandle ;
113
113
114
114
volatile uint8_t dfu_request = 0 ;
115
115
/* For a bug in some Linux 64 bit PC we need to delay the reset of the CPU of 500ms seconds */
116
- int counter_dfu_reset = 500 ; /* the unit is equal to CDC_POLLING_INTERVAL that is 5ms by default */
116
+ int counter_dfu_reset = 250 ; /* the unit is equal to CDC_POLLING_INTERVAL that is 2ms by default */
117
117
118
118
static void TIM_Config (void );
119
119
@@ -309,38 +309,44 @@ void CDC_flush(void)
309
309
{
310
310
uint8_t status ;
311
311
312
- if ( UserTxBufPtrOut != UserTxBufPtrIn )
312
+ if (!((( & hUSBD_Device_CDC ) -> dev_state != USBD_STATE_CONFIGURED ) || (( & hUSBD_Device_CDC ) -> ep0_state == USBD_EP0_STATUS_IN )) )
313
313
{
314
- if (UserTxBufPtrOut > UserTxBufPtrIn ) /* Roll-back */
314
+ if (UserTxBufPtrOut != UserTxBufPtrIn )
315
315
{
316
- memcpy ((uint8_t * )& StackTxBufferFS [0 ], (uint8_t * )& UserTxBufferFS [UserTxBufPtrOut ], (APP_TX_DATA_SIZE - UserTxBufPtrOut ));
316
+ if (UserTxBufPtrOut > UserTxBufPtrIn ) /* Roll-back */
317
+ {
318
+ memcpy ((uint8_t * )& StackTxBufferFS [0 ], (uint8_t * )& UserTxBufferFS [UserTxBufPtrOut ], (APP_TX_DATA_SIZE - UserTxBufPtrOut ));
317
319
318
- memcpy ((uint8_t * )& StackTxBufferFS [APP_TX_DATA_SIZE - UserTxBufPtrOut ], (uint8_t * )& UserTxBufferFS [0 ], UserTxBufPtrIn );
320
+ memcpy ((uint8_t * )& StackTxBufferFS [APP_TX_DATA_SIZE - UserTxBufPtrOut ], (uint8_t * )& UserTxBufferFS [0 ], UserTxBufPtrIn );
319
321
320
- USBD_CDC_SetTxBuffer (& hUSBD_Device_CDC , (uint8_t * )& StackTxBufferFS [0 ], (APP_TX_DATA_SIZE - UserTxBufPtrOut + UserTxBufPtrIn ));
322
+ USBD_CDC_SetTxBuffer (& hUSBD_Device_CDC , (uint8_t * )& StackTxBufferFS [0 ], (APP_TX_DATA_SIZE - UserTxBufPtrOut + UserTxBufPtrIn ));
321
323
322
- do {
323
- status = USBD_CDC_TransmitPacket (& hUSBD_Device_CDC );
324
- } while (status == USBD_BUSY );
324
+ do {
325
+ status = USBD_CDC_TransmitPacket (& hUSBD_Device_CDC );
326
+ } while (status == USBD_BUSY && !((( & hUSBD_Device_CDC ) -> dev_state != USBD_STATE_CONFIGURED ) || (( & hUSBD_Device_CDC ) -> ep0_state == USBD_EP0_STATUS_IN )) );
325
327
326
- if (status == USBD_OK )
327
- {
328
- UserTxBufPtrOut = UserTxBufPtrIn ;
328
+ if (status == USBD_OK )
329
+ {
330
+ UserTxBufPtrOut = UserTxBufPtrIn ;
331
+ }
329
332
}
330
- }
331
- else
332
- {
333
- USBD_CDC_SetTxBuffer (& hUSBD_Device_CDC , (uint8_t * )& UserTxBufferFS [UserTxBufPtrOut ], (UserTxBufPtrIn - UserTxBufPtrOut ));
333
+ else
334
+ {
335
+ USBD_CDC_SetTxBuffer (& hUSBD_Device_CDC , (uint8_t * )& UserTxBufferFS [UserTxBufPtrOut ], (UserTxBufPtrIn - UserTxBufPtrOut ));
334
336
335
- do {
336
- status = USBD_CDC_TransmitPacket (& hUSBD_Device_CDC );
337
- } while (status == USBD_BUSY );
337
+ do {
338
+ status = USBD_CDC_TransmitPacket (& hUSBD_Device_CDC );
339
+ } while (status == USBD_BUSY && !((( & hUSBD_Device_CDC ) -> dev_state != USBD_STATE_CONFIGURED ) || (( & hUSBD_Device_CDC ) -> ep0_state == USBD_EP0_STATUS_IN )) );
338
340
339
- if (status == USBD_OK )
340
- {
341
- UserTxBufPtrOut = UserTxBufPtrIn ;
341
+ if (status == USBD_OK )
342
+ {
343
+ UserTxBufPtrOut = UserTxBufPtrIn ;
344
+ }
342
345
}
343
346
}
347
+ } else
348
+ {
349
+ UserTxBufPtrOut = UserTxBufPtrIn ;
344
350
}
345
351
}
346
352
@@ -364,7 +370,7 @@ static void TIM_Config(void)
364
370
+ ClockDivision = 0
365
371
+ Counter direction = Up
366
372
*/
367
- TimerHandleInit (& TimHandle , (uint16_t )((CDC_POLLING_INTERVAL * 1000 ) - 1 ), (84 - 1 )); //CDC_POLLING_INTERVAL
373
+ TimerHandleInit (& TimHandle , (uint16_t )((CDC_POLLING_INTERVAL * 1000 ) - 1 ), (( uint32_t )( getTimerClkFreq ( TIM6 ) / ( 1000000 )) - 1 )); //CDC_POLLING_INTERVAL
368
374
369
375
HAL_NVIC_SetPriority (TIM6_DAC_IRQn , 6 , 0 );
370
376
@@ -401,33 +407,37 @@ void TIM6_PeriodElapsedCallback(stimer_t *htim)
401
407
USBD_CDC_ReceivePacket (& hUSBD_Device_CDC );
402
408
}
403
409
404
- if (UserTxBufPtrOut != UserTxBufPtrIn ) {
405
- if (UserTxBufPtrOut > UserTxBufPtrIn ) { /* Roll-back */
406
- memcpy ((uint8_t * )& StackTxBufferFS [0 ], (uint8_t * )& UserTxBufferFS [UserTxBufPtrOut ], (APP_TX_DATA_SIZE - UserTxBufPtrOut ));
410
+ if (!(((& hUSBD_Device_CDC )-> dev_state != USBD_STATE_CONFIGURED ) || ((& hUSBD_Device_CDC )-> ep0_state == USBD_EP0_STATUS_IN ))) {
411
+ if (UserTxBufPtrOut != UserTxBufPtrIn ) {
412
+ if (UserTxBufPtrOut > UserTxBufPtrIn ) { /* Roll-back */
413
+ memcpy ((uint8_t * )& StackTxBufferFS [0 ], (uint8_t * )& UserTxBufferFS [UserTxBufPtrOut ], (APP_TX_DATA_SIZE - UserTxBufPtrOut ));
407
414
408
- memcpy ((uint8_t * )& StackTxBufferFS [APP_TX_DATA_SIZE - UserTxBufPtrOut ], (uint8_t * )& UserTxBufferFS [0 ], UserTxBufPtrIn );
415
+ memcpy ((uint8_t * )& StackTxBufferFS [APP_TX_DATA_SIZE - UserTxBufPtrOut ], (uint8_t * )& UserTxBufferFS [0 ], UserTxBufPtrIn );
409
416
410
- USBD_CDC_SetTxBuffer (& hUSBD_Device_CDC , (uint8_t * )& StackTxBufferFS [0 ], (APP_TX_DATA_SIZE - UserTxBufPtrOut + UserTxBufPtrIn ));
417
+ USBD_CDC_SetTxBuffer (& hUSBD_Device_CDC , (uint8_t * )& StackTxBufferFS [0 ], (APP_TX_DATA_SIZE - UserTxBufPtrOut + UserTxBufPtrIn ));
411
418
412
- do {
413
- status = USBD_CDC_TransmitPacket (& hUSBD_Device_CDC );
414
- } while (status == USBD_BUSY );
419
+ do {
420
+ status = USBD_CDC_TransmitPacket (& hUSBD_Device_CDC );
421
+ } while (status == USBD_BUSY && !((( & hUSBD_Device_CDC ) -> dev_state != USBD_STATE_CONFIGURED ) || (( & hUSBD_Device_CDC ) -> ep0_state == USBD_EP0_STATUS_IN )) );
415
422
416
- if (status == USBD_OK ) {
417
- UserTxBufPtrOut = UserTxBufPtrIn ;
423
+ if (status == USBD_OK ) {
424
+ UserTxBufPtrOut = UserTxBufPtrIn ;
425
+ }
418
426
}
419
- }
420
- else {
421
- USBD_CDC_SetTxBuffer (& hUSBD_Device_CDC , (uint8_t * )& UserTxBufferFS [UserTxBufPtrOut ], (UserTxBufPtrIn - UserTxBufPtrOut ));
427
+ else {
428
+ USBD_CDC_SetTxBuffer (& hUSBD_Device_CDC , (uint8_t * )& UserTxBufferFS [UserTxBufPtrOut ], (UserTxBufPtrIn - UserTxBufPtrOut ));
422
429
423
- do {
424
- status = USBD_CDC_TransmitPacket (& hUSBD_Device_CDC );
425
- } while (status == USBD_BUSY );
430
+ do {
431
+ status = USBD_CDC_TransmitPacket (& hUSBD_Device_CDC );
432
+ } while (status == USBD_BUSY && !((( & hUSBD_Device_CDC ) -> dev_state != USBD_STATE_CONFIGURED ) || (( & hUSBD_Device_CDC ) -> ep0_state == USBD_EP0_STATUS_IN )) );
426
433
427
- if (status == USBD_OK ) {
428
- UserTxBufPtrOut = UserTxBufPtrIn ;
434
+ if (status == USBD_OK ) {
435
+ UserTxBufPtrOut = UserTxBufPtrIn ;
436
+ }
429
437
}
430
438
}
439
+ } else {
440
+ UserTxBufPtrOut = UserTxBufPtrIn ;
431
441
}
432
442
}
433
443
0 commit comments