Browse Source

Fix the way of sending out IN packet.

This fixes problem that it losts keycode when send keycodes in row in layer.c.
Undef CONSOLE_ENABLE build option makes this problem clear.
tmk 12 years ago
parent
commit
7350b7c6aa
1 changed files with 19 additions and 22 deletions
  1. 19 22
      protocol/lufa/lufa.c

+ 19 - 22
protocol/lufa/lufa.c

@@ -344,14 +344,14 @@ static void send_keyboard(report_keyboard_t *report)
     Endpoint_SelectEndpoint(KEYBOARD_IN_EPNUM);
     Endpoint_SelectEndpoint(KEYBOARD_IN_EPNUM);
 
 
     /* Check if Keyboard Endpoint Ready for Read/Write */
     /* Check if Keyboard Endpoint Ready for Read/Write */
-    if (Endpoint_IsReadWriteAllowed())
+    while (!Endpoint_IsReadWriteAllowed()) ;
-    {
+
-        /* Write Keyboard Report Data */
+    /* Write Keyboard Report Data */
-        Endpoint_Write_Stream_LE(report, sizeof(report_keyboard_t), NULL);
+    Endpoint_Write_Stream_LE(report, sizeof(report_keyboard_t), NULL);
+
+    /* Finalize the stream transfer to send the last packet */
+    Endpoint_ClearIN();
 
 
-        /* Finalize the stream transfer to send the last packet */
-        Endpoint_ClearIN();
-    }
     keyboard_report_sent = *report;
     keyboard_report_sent = *report;
 }
 }
 
 
@@ -362,14 +362,13 @@ static void send_mouse(report_mouse_t *report)
     Endpoint_SelectEndpoint(MOUSE_IN_EPNUM);
     Endpoint_SelectEndpoint(MOUSE_IN_EPNUM);
 
 
     /* Check if Mouse Endpoint Ready for Read/Write */
     /* Check if Mouse Endpoint Ready for Read/Write */
-    if (Endpoint_IsReadWriteAllowed())
+    while (!Endpoint_IsReadWriteAllowed()) ;
-    {
-        /* Write Mouse Report Data */
-        Endpoint_Write_Stream_LE(report, sizeof(report_mouse_t), NULL);
 
 
-        /* Finalize the stream transfer to send the last packet */
+    /* Write Mouse Report Data */
-        Endpoint_ClearIN();
+    Endpoint_Write_Stream_LE(report, sizeof(report_mouse_t), NULL);
-    }
+
+    /* Finalize the stream transfer to send the last packet */
+    Endpoint_ClearIN();
 #endif
 #endif
 }
 }
 
 
@@ -380,10 +379,9 @@ static void send_system(uint16_t data)
         .usage = data
         .usage = data
     };
     };
     Endpoint_SelectEndpoint(EXTRAKEY_IN_EPNUM);
     Endpoint_SelectEndpoint(EXTRAKEY_IN_EPNUM);
-    if (Endpoint_IsReadWriteAllowed()) {
+    while (!Endpoint_IsReadWriteAllowed()) ;
-        Endpoint_Write_Stream_LE(&r, sizeof(report_extra_t), NULL);
+    Endpoint_Write_Stream_LE(&r, sizeof(report_extra_t), NULL);
-        Endpoint_ClearIN();
+    Endpoint_ClearIN();
-    }
 }
 }
 
 
 static void send_consumer(uint16_t data)
 static void send_consumer(uint16_t data)
@@ -393,10 +391,9 @@ static void send_consumer(uint16_t data)
         .usage = data
         .usage = data
     };
     };
     Endpoint_SelectEndpoint(EXTRAKEY_IN_EPNUM);
     Endpoint_SelectEndpoint(EXTRAKEY_IN_EPNUM);
-    if (Endpoint_IsReadWriteAllowed()) {
+    while (!Endpoint_IsReadWriteAllowed()) ;
-        Endpoint_Write_Stream_LE(&r, sizeof(report_extra_t), NULL);
+    Endpoint_Write_Stream_LE(&r, sizeof(report_extra_t), NULL);
-        Endpoint_ClearIN();
+    Endpoint_ClearIN();
-    }
 }
 }