altos/lpc: Force idle mode if USB gets an address during boot time
[fw/altos] / src / lpc / ao_usb_lpc.c
index cd8967249643c365312985816a37a4429dfd681d..aac0df04a8956f5b485dfcc9940ac4814fe571ef 100644 (file)
@@ -81,8 +81,7 @@ static uint8_t        ao_usb_tx_count;
 static uint8_t ao_usb_rx_buffer[AO_USB_OUT_SIZE];
 static uint8_t ao_usb_rx_count, ao_usb_rx_pos;
 
-__attribute__((section(".usb")))
-static struct lpc_usb_endpoint lpc_usb_endpoint __attribute((aligned(256)));
+extern struct lpc_usb_endpoint lpc_usb_endpoint;
 
 /* Marks when we don't need to send an IN packet.
  * This happens only when the last IN packet is not full,
@@ -606,8 +605,14 @@ ao_usb_ep0_handle(uint8_t receive)
                /* Wait until the IN packet is received from addr 0
                 * before assigning our local address
                 */
-               if (ao_usb_address_pending)
+               if (ao_usb_address_pending) {
+#if HAS_FLIGHT
+                       /* Go to idle mode if USB is connected
+                        */
+                       ao_flight_force_idle = 1;
+#endif
                        ao_usb_set_address(ao_usb_address);
+               }
                if (ao_usb_ep0_state == AO_USB_EP0_DATA_IN)
                        ao_usb_ep0_flush();
        }