Skip to content

Commit 68434cc

Browse files
committed
update(demo): add cdc simple transfer for winusb2.0+cdc demo
Signed-off-by: sakumisu <1203593632@qq.com>
1 parent 17a591f commit 68434cc

File tree

1 file changed

+49
-2
lines changed

1 file changed

+49
-2
lines changed

demo/winusb2.0_cdc_template.c

Lines changed: 49 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -334,6 +334,7 @@ static void usbd_event_handler(uint8_t busid, uint8_t event)
334334
ep_tx_busy_flag = false;
335335
/* setup first out ep read transfer */
336336
usbd_ep_start_read(busid, WINUSB_OUT_EP, read_buffer, 2048);
337+
usbd_ep_start_read(busid, CDC_OUT_EP, read_buffer, 2048);
337338
break;
338339
case USBD_EVENT_SET_REMOTE_WAKEUP:
339340
break;
@@ -369,6 +370,30 @@ void usbd_winusb_in(uint8_t busid, uint8_t ep, uint32_t nbytes)
369370
}
370371
}
371372

373+
void usbd_cdc_acm_out(uint8_t busid, uint8_t ep, uint32_t nbytes)
374+
{
375+
USB_LOG_RAW("actual out len:%d\r\n", nbytes);
376+
// for (int i = 0; i < 100; i++) {
377+
// printf("%02x ", read_buffer[i]);
378+
// }
379+
// printf("\r\n");
380+
usbd_ep_start_write(busid, CDC_IN_EP, read_buffer, nbytes);
381+
/* setup next out ep read transfer */
382+
usbd_ep_start_read(busid, CDC_OUT_EP, read_buffer, 2048);
383+
}
384+
385+
void usbd_cdc_acm_in(uint8_t busid, uint8_t ep, uint32_t nbytes)
386+
{
387+
USB_LOG_RAW("actual in len:%d\r\n", nbytes);
388+
389+
if ((nbytes % usbd_get_ep_mps(busid, ep)) == 0 && nbytes) {
390+
/* send zlp */
391+
usbd_ep_start_write(busid, CDC_IN_EP, NULL, 0);
392+
} else {
393+
ep_tx_busy_flag = false;
394+
}
395+
}
396+
372397
struct usbd_endpoint winusb_out_ep1 = {
373398
.ep_addr = WINUSB_OUT_EP,
374399
.ep_cb = usbd_winusb_out
@@ -381,12 +406,12 @@ struct usbd_endpoint winusb_in_ep1 = {
381406

382407
static struct usbd_endpoint cdc_out_ep = {
383408
.ep_addr = CDC_OUT_EP,
384-
.ep_cb = NULL
409+
.ep_cb = usbd_cdc_acm_out
385410
};
386411

387412
static struct usbd_endpoint cdc_in_ep = {
388413
.ep_addr = CDC_IN_EP,
389-
.ep_cb = NULL
414+
.ep_cb = usbd_cdc_acm_in
390415
};
391416

392417
struct usbd_interface winusb_intf;
@@ -416,4 +441,26 @@ void winusbv2_init(uint8_t busid, uintptr_t reg_base)
416441
usbd_add_endpoint(busid, &cdc_in_ep);
417442

418443
usbd_initialize(busid, reg_base, usbd_event_handler);
444+
}
445+
446+
volatile uint8_t dtr_enable = 0;
447+
448+
void usbd_cdc_acm_set_dtr(uint8_t busid, uint8_t intf, bool dtr)
449+
{
450+
if (dtr) {
451+
dtr_enable = 1;
452+
} else {
453+
dtr_enable = 0;
454+
}
455+
}
456+
457+
void cdc_acm_data_send_with_dtr_test(uint8_t busid)
458+
{
459+
if (dtr_enable) {
460+
memset(&write_buffer[10], 'a', 2038);
461+
ep_tx_busy_flag = true;
462+
usbd_ep_start_write(busid, CDC_IN_EP, write_buffer, 2048);
463+
while (ep_tx_busy_flag) {
464+
}
465+
}
419466
}

0 commit comments

Comments
 (0)