Return when ready check loop is timeouted(Fix #115)
This commit is contained in:
		
							parent
							
								
									c6902681e7
								
							
						
					
					
						commit
						a5d4a1f3e1
					
				
					 2 changed files with 27 additions and 13 deletions
				
			
		| 
						 | 
				
			
			@ -347,7 +347,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 | 
			
		|||
            .EndpointAddress        = (ENDPOINT_DIR_IN | MOUSE_IN_EPNUM),
 | 
			
		||||
            .Attributes             = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
 | 
			
		||||
            .EndpointSize           = MOUSE_EPSIZE,
 | 
			
		||||
            .PollingIntervalMS      = 0x01
 | 
			
		||||
            .PollingIntervalMS      = 0x0A
 | 
			
		||||
        },
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -389,7 +389,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 | 
			
		|||
            .EndpointAddress        = (ENDPOINT_DIR_IN | EXTRAKEY_IN_EPNUM),
 | 
			
		||||
            .Attributes             = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
 | 
			
		||||
            .EndpointSize           = EXTRAKEY_EPSIZE,
 | 
			
		||||
            .PollingIntervalMS      = 0x01
 | 
			
		||||
            .PollingIntervalMS      = 0x0A
 | 
			
		||||
        },
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -351,7 +351,7 @@ static uint8_t keyboard_leds(void)
 | 
			
		|||
 | 
			
		||||
static void send_keyboard(report_keyboard_t *report)
 | 
			
		||||
{
 | 
			
		||||
    uint8_t timeout = 0;
 | 
			
		||||
    uint8_t timeout = 255;
 | 
			
		||||
 | 
			
		||||
    if (USB_DeviceState != DEVICE_STATE_Configured)
 | 
			
		||||
        return;
 | 
			
		||||
| 
						 | 
				
			
			@ -360,15 +360,20 @@ static void send_keyboard(report_keyboard_t *report)
 | 
			
		|||
#ifdef NKRO_ENABLE
 | 
			
		||||
    if (keyboard_nkro) {
 | 
			
		||||
        Endpoint_SelectEndpoint(NKRO_IN_EPNUM);
 | 
			
		||||
 | 
			
		||||
        /* Check if write ready for a polling interval around 1ms */
 | 
			
		||||
        while (timeout-- && !Endpoint_IsReadWriteAllowed()) _delay_us(4);
 | 
			
		||||
        if (!Endpoint_IsReadWriteAllowed()) return;
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
#endif
 | 
			
		||||
    {
 | 
			
		||||
        Endpoint_SelectEndpoint(KEYBOARD_IN_EPNUM);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /* Check if Keyboard Endpoint Ready for Read/Write */
 | 
			
		||||
    while (--timeout && !Endpoint_IsReadWriteAllowed()) ;
 | 
			
		||||
        /* Check if write ready for a polling interval around 10ms */
 | 
			
		||||
        while (timeout-- && !Endpoint_IsReadWriteAllowed()) _delay_us(40);
 | 
			
		||||
        if (!Endpoint_IsReadWriteAllowed()) return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /* Write Keyboard Report Data */
 | 
			
		||||
#ifdef NKRO_ENABLE
 | 
			
		||||
| 
						 | 
				
			
			@ -391,7 +396,7 @@ static void send_keyboard(report_keyboard_t *report)
 | 
			
		|||
static void send_mouse(report_mouse_t *report)
 | 
			
		||||
{
 | 
			
		||||
#ifdef MOUSE_ENABLE
 | 
			
		||||
    uint8_t timeout = 0;
 | 
			
		||||
    uint8_t timeout = 255;
 | 
			
		||||
 | 
			
		||||
    if (USB_DeviceState != DEVICE_STATE_Configured)
 | 
			
		||||
        return;
 | 
			
		||||
| 
						 | 
				
			
			@ -399,8 +404,9 @@ static void send_mouse(report_mouse_t *report)
 | 
			
		|||
    /* Select the Mouse Report Endpoint */
 | 
			
		||||
    Endpoint_SelectEndpoint(MOUSE_IN_EPNUM);
 | 
			
		||||
 | 
			
		||||
    /* Check if Mouse Endpoint Ready for Read/Write */
 | 
			
		||||
    while (--timeout && !Endpoint_IsReadWriteAllowed()) ;
 | 
			
		||||
    /* Check if write ready for a polling interval around 10ms */
 | 
			
		||||
    while (timeout-- && !Endpoint_IsReadWriteAllowed()) _delay_us(40);
 | 
			
		||||
    if (!Endpoint_IsReadWriteAllowed()) return;
 | 
			
		||||
 | 
			
		||||
    /* Write Mouse Report Data */
 | 
			
		||||
    Endpoint_Write_Stream_LE(report, sizeof(report_mouse_t), NULL);
 | 
			
		||||
| 
						 | 
				
			
			@ -412,7 +418,7 @@ static void send_mouse(report_mouse_t *report)
 | 
			
		|||
 | 
			
		||||
static void send_system(uint16_t data)
 | 
			
		||||
{
 | 
			
		||||
    uint8_t timeout = 0;
 | 
			
		||||
    uint8_t timeout = 255;
 | 
			
		||||
 | 
			
		||||
    if (USB_DeviceState != DEVICE_STATE_Configured)
 | 
			
		||||
        return;
 | 
			
		||||
| 
						 | 
				
			
			@ -422,14 +428,18 @@ static void send_system(uint16_t data)
 | 
			
		|||
        .usage = data
 | 
			
		||||
    };
 | 
			
		||||
    Endpoint_SelectEndpoint(EXTRAKEY_IN_EPNUM);
 | 
			
		||||
    while (--timeout && !Endpoint_IsReadWriteAllowed()) ;
 | 
			
		||||
 | 
			
		||||
    /* Check if write ready for a polling interval around 10ms */
 | 
			
		||||
    while (timeout-- && !Endpoint_IsReadWriteAllowed()) _delay_us(40);
 | 
			
		||||
    if (!Endpoint_IsReadWriteAllowed()) return;
 | 
			
		||||
 | 
			
		||||
    Endpoint_Write_Stream_LE(&r, sizeof(report_extra_t), NULL);
 | 
			
		||||
    Endpoint_ClearIN();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void send_consumer(uint16_t data)
 | 
			
		||||
{
 | 
			
		||||
    uint8_t timeout = 0;
 | 
			
		||||
    uint8_t timeout = 255;
 | 
			
		||||
 | 
			
		||||
    if (USB_DeviceState != DEVICE_STATE_Configured)
 | 
			
		||||
        return;
 | 
			
		||||
| 
						 | 
				
			
			@ -439,7 +449,11 @@ static void send_consumer(uint16_t data)
 | 
			
		|||
        .usage = data
 | 
			
		||||
    };
 | 
			
		||||
    Endpoint_SelectEndpoint(EXTRAKEY_IN_EPNUM);
 | 
			
		||||
    while (--timeout && !Endpoint_IsReadWriteAllowed()) ;
 | 
			
		||||
 | 
			
		||||
    /* Check if write ready for a polling interval around 10ms */
 | 
			
		||||
    while (timeout-- && !Endpoint_IsReadWriteAllowed()) _delay_us(40);
 | 
			
		||||
    if (!Endpoint_IsReadWriteAllowed()) return;
 | 
			
		||||
 | 
			
		||||
    Endpoint_Write_Stream_LE(&r, sizeof(report_extra_t), NULL);
 | 
			
		||||
    Endpoint_ClearIN();
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue