- CDC: the way responding on the notification element changed
This commit is contained in:
		
							parent
							
								
									4df8912593
								
							
						
					
					
						commit
						a9d0e99d7b
					
				@ -38,6 +38,10 @@ void usb_cdc_init(const USB_CdcAssignments *as) {
 | 
			
		||||
    // initialize buffer
 | 
			
		||||
    bfifo_create(&fifo, fifo_mem, USB_CDC_FIFO_MEM_SIZE);
 | 
			
		||||
 | 
			
		||||
    // initialize an all-0 interrupt
 | 
			
		||||
    cdcs.interrupt_data = 0;
 | 
			
		||||
    cdcs.interrupt_pending = true;
 | 
			
		||||
 | 
			
		||||
    // from now on CDC is considered initialized
 | 
			
		||||
    cdcs.initialized = true;
 | 
			
		||||
}
 | 
			
		||||
@ -96,7 +100,10 @@ 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_schedule_transmission(cdcs.ep_assignments.control_ep, NULL, 0); // send ZLP
 | 
			
		||||
            if (cdcs.interrupt_pending) {
 | 
			
		||||
                usbcore_schedule_transmission(cdcs.ep_assignments.control_ep, (const uint8_t *)&(cdcs.interrupt_data), sizeof(uint16_t)); // send ZLP
 | 
			
		||||
                cdcs.interrupt_pending = false;
 | 
			
		||||
            }
 | 
			
		||||
            ret = 0;
 | 
			
		||||
        } else if (cbevt->ep == cdcs.ep_assignments.data_ep) { // if data are requested
 | 
			
		||||
            // usbcore_schedule_transmission(cdcs.ep_assignments.data_ep, NULL, 0); // send ZLP
 | 
			
		||||
 | 
			
		||||
@ -50,6 +50,8 @@ typedef struct {
 | 
			
		||||
    USB_CdcAssignments ep_assignments; // endpoint assignments
 | 
			
		||||
    USB_Cdc_LineCodingStruct line_coding; // line coding
 | 
			
		||||
    USB_Cdc_ControlLineStateStruct control_line_state; // control line state
 | 
			
		||||
    uint16_t interrupt_data; // data sent though the next transfer on the notification element
 | 
			
		||||
    bool interrupt_pending; // interrupt data is valid and should be send in the next cycle
 | 
			
		||||
    bool initialized; // CDC is initialized
 | 
			
		||||
} USB_CdcState;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user