- CDC: all required class-defined requests implemented
- CDC: interrupt endpoint ZLP response added
This commit is contained in:
parent
3e67079427
commit
cb9a3c33ca
14
class/cdc.c
14
class/cdc.c
@ -42,6 +42,8 @@ void usb_cdc_init(const USB_CdcAssignments *as) {
|
|||||||
cdcs.initialized = true;
|
cdcs.initialized = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//static uint8_t replyBuf[sizeof(USB_Cdc_LineCodingStruct)];
|
||||||
|
|
||||||
int usb_cdc_process_and_return(USB_CallbackEvent *cbevt) {
|
int usb_cdc_process_and_return(USB_CallbackEvent *cbevt) {
|
||||||
int ret = -1;
|
int ret = -1;
|
||||||
switch (cbevt->type) {
|
switch (cbevt->type) {
|
||||||
@ -52,6 +54,16 @@ int usb_cdc_process_and_return(USB_CallbackEvent *cbevt) {
|
|||||||
//MSG("%u\n", cdcs.line_coding.dwDTERate);
|
//MSG("%u\n", cdcs.line_coding.dwDTERate);
|
||||||
ret = 0;
|
ret = 0;
|
||||||
break;
|
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
|
case USB_CDC_SET_CONTROL_LINE_STATE: // set control line state
|
||||||
memcpy(&cdcs.control_line_state, cbevt->data, sizeof(USB_Cdc_ControlLineStateStruct));
|
memcpy(&cdcs.control_line_state, cbevt->data, sizeof(USB_Cdc_ControlLineStateStruct));
|
||||||
//MSG("%u\n", cdcs.control_line_state.D);
|
//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: {
|
case USB_CBEVT_IN: {
|
||||||
if (cbevt->ep == cdcs.ep_assignments.control_ep) { // if notification feeding is requested
|
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;
|
ret = 0;
|
||||||
} else if (cbevt->ep == cdcs.ep_assignments.data_ep) { // if data are requested
|
} else if (cbevt->ep == cdcs.ep_assignments.data_ep) { // if data are requested
|
||||||
//usbcore_write(cdcs.ep_assignments.data_ep, NULL, 0); // send ZLP
|
//usbcore_write(cdcs.ep_assignments.data_ep, NULL, 0); // send ZLP
|
||||||
|
Loading…
x
Reference in New Issue
Block a user