Skip to content

Commit e90a241

Browse files
committed
Merge branch 'usb_support' into armed_board_support
2 parents fcae6bc + 9e7a4ad commit e90a241

File tree

1 file changed

+22
-35
lines changed

1 file changed

+22
-35
lines changed

libraries/USBSerial/src/usbd_cdc_if.c

+22-35
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,6 @@ __IO uint32_t UserRxBufPtrOut = 0; /* Increment this pointer or roll it back to
9999
__IO uint32_t SLP;
100100
__IO uint32_t GetRxCount;
101101
__IO uint32_t lineState = 0;
102-
uint8_t cptlineState = 0;
103102
volatile uint32_t USB_received = 0;
104103
uint8_t USBBuffer[64];
105104
uint8_t USBPackSize;
@@ -238,9 +237,7 @@ static int8_t CDC_Control_FS (uint8_t cmd, uint8_t* pbuf, uint16_t length)
238237
break;
239238

240239
case CDC_SET_CONTROL_LINE_STATE:
241-
cptlineState++;
242-
if(cptlineState == 2)
243-
lineState = 1;
240+
lineState = (((USBD_SetupReqTypedef *)pbuf)->wValue & 0x01) != 0; // Check DTR state
244241
break;
245242

246243
case CDC_SEND_BREAK:
@@ -314,28 +311,22 @@ void CDC_flush(void)
314311
memcpy((uint8_t*)&StackTxBufferFS[APP_TX_DATA_SIZE - UserTxBufPtrOut], (uint8_t*)&UserTxBufferFS[0], UserTxBufPtrIn);
315312

316313
USBD_CDC_SetTxBuffer(&hUSBD_Device_CDC, (uint8_t*)&StackTxBufferFS[0], (APP_TX_DATA_SIZE - UserTxBufPtrOut + UserTxBufPtrIn));
317-
318-
do {
319-
status = USBD_CDC_TransmitPacket(&hUSBD_Device_CDC);
320-
} while(status == USBD_BUSY);
321-
322-
if(status == USBD_OK)
323-
{
324-
UserTxBufPtrOut = UserTxBufPtrIn;
325-
}
326314
}
327-
else
315+
else
328316
{
329317
USBD_CDC_SetTxBuffer(&hUSBD_Device_CDC, (uint8_t*)&UserTxBufferFS[UserTxBufPtrOut], (UserTxBufPtrIn - UserTxBufPtrOut));
318+
}
330319

331-
do {
320+
do {
321+
if (lineState == 0) // Device disconnected
322+
status = USBD_OK;
323+
else
332324
status = USBD_CDC_TransmitPacket(&hUSBD_Device_CDC);
333-
} while(status == USBD_BUSY);
325+
} while(status == USBD_BUSY);
334326

335-
if(status == USBD_OK)
336-
{
337-
UserTxBufPtrOut = UserTxBufPtrIn;
338-
}
327+
if(status == USBD_OK)
328+
{
329+
UserTxBufPtrOut = UserTxBufPtrIn;
339330
}
340331
}
341332
}
@@ -396,25 +387,21 @@ void TIM6_PeriodElapsedCallback(stimer_t *htim)
396387
memcpy((uint8_t*)&StackTxBufferFS[APP_TX_DATA_SIZE - UserTxBufPtrOut], (uint8_t*)&UserTxBufferFS[0], UserTxBufPtrIn);
397388

398389
USBD_CDC_SetTxBuffer(&hUSBD_Device_CDC, (uint8_t*)&StackTxBufferFS[0], (APP_TX_DATA_SIZE - UserTxBufPtrOut + UserTxBufPtrIn));
399-
400-
do {
401-
status = USBD_CDC_TransmitPacket(&hUSBD_Device_CDC);
402-
} while(status == USBD_BUSY);
403-
404-
if(status == USBD_OK) {
405-
UserTxBufPtrOut = UserTxBufPtrIn;
406-
}
407390
}
408-
else {
391+
else
392+
{
409393
USBD_CDC_SetTxBuffer(&hUSBD_Device_CDC, (uint8_t*)&UserTxBufferFS[UserTxBufPtrOut], (UserTxBufPtrIn - UserTxBufPtrOut));
394+
}
410395

411-
do {
412-
status = USBD_CDC_TransmitPacket(&hUSBD_Device_CDC);
413-
} while(status == USBD_BUSY);
396+
do {
397+
if (lineState == 0) // Device disconnected
398+
status = USBD_OK;
399+
else
400+
status = USBD_CDC_TransmitPacket(&hUSBD_Device_CDC);
401+
} while(status == USBD_BUSY);
414402

415-
if(status == USBD_OK) {
416-
UserTxBufPtrOut = UserTxBufPtrIn;
417-
}
403+
if(status == USBD_OK) {
404+
UserTxBufPtrOut = UserTxBufPtrIn;
418405
}
419406
}
420407
}

0 commit comments

Comments
 (0)