From cb9a3c33ca2ef2b55388cc4b0b6af9840c6c65bc Mon Sep 17 00:00:00 2001 From: Epagris Date: Sun, 21 Apr 2024 20:41:47 +0200 Subject: [PATCH] - CDC: all required class-defined requests implemented - CDC: interrupt endpoint ZLP response added --- class/cdc.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/class/cdc.c b/class/cdc.c index dc79d81..cf205bf 100644 --- a/class/cdc.c +++ b/class/cdc.c @@ -42,6 +42,8 @@ void usb_cdc_init(const USB_CdcAssignments *as) { cdcs.initialized = true; } +//static uint8_t replyBuf[sizeof(USB_Cdc_LineCodingStruct)]; + int usb_cdc_process_and_return(USB_CallbackEvent *cbevt) { int ret = -1; switch (cbevt->type) { @@ -52,6 +54,16 @@ int usb_cdc_process_and_return(USB_CallbackEvent *cbevt) { //MSG("%u\n", cdcs.line_coding.dwDTERate); ret = 0; break; + case USB_CDC_GET_LINE_CODING: // get line coding + cbevt->reply_data = (const uint8_t *) &cdcs.line_coding; // expert move: pass the pointer, no copying + cbevt->reply_size = sizeof(USB_Cdc_LineCodingStruct); + cbevt->reply_valid = true; // the reply has been set to something valid + ret = 0; + break; + case USB_CDC_SEND_BREAK: // send break + // do nothing + ret = 0; + break; case USB_CDC_SET_CONTROL_LINE_STATE: // set control line state memcpy(&cdcs.control_line_state, cbevt->data, sizeof(USB_Cdc_ControlLineStateStruct)); //MSG("%u\n", cdcs.control_line_state.D); @@ -84,7 +96,7 @@ int usb_cdc_process_and_return(USB_CallbackEvent *cbevt) { case USB_CBEVT_IN: { if (cbevt->ep == cdcs.ep_assignments.control_ep) { // if notification feeding is requested - //usbcore_write(cdcs.ep_assignments.control_ep, NULL, 0); // send ZLP + usbcore_write(cdcs.ep_assignments.control_ep, NULL, 0); // send ZLP ret = 0; } else if (cbevt->ep == cdcs.ep_assignments.data_ep) { // if data are requested //usbcore_write(cdcs.ep_assignments.data_ep, NULL, 0); // send ZLP