libaltos: Delay after opening bluetooth device on linux
[fw/altos] / src / cc1111 / ao_usb.c
index ce26e8088a4cfee539b78bb82ea54538dab1af9d..8bd2efdf73706e2c9060e02d389191fa2112f04b 100644 (file)
@@ -382,10 +382,10 @@ ao_usb_putchar(char c) __critical __reentrant
                ao_usb_in_send();
 }
 
-char
-ao_usb_pollchar(void) __critical
+int
+_ao_usb_pollchar(void)
 {
-       char c;
+       uint8_t c;
        if (ao_usb_out_bytes == 0) {
                USBINDEX = AO_USB_OUT_EP;
                if ((USBCSOL & USBCSOL_OUTPKT_RDY) == 0)
@@ -407,12 +407,14 @@ ao_usb_pollchar(void) __critical
 }
 
 char
-ao_usb_getchar(void) __critical
+ao_usb_getchar(void)
 {
-       char    c;
+       int     c;
 
-       while ((c = ao_usb_pollchar()) == AO_READ_AGAIN)
+       ao_arch_block_interrupts();
+       while ((c = _ao_usb_pollchar()) == AO_READ_AGAIN)
                ao_sleep(&ao_stdin_ready);
+       ao_arch_release_interrupts();
        return c;
 }
 
@@ -459,5 +461,5 @@ ao_usb_init(void)
        ao_usb_enable();
 
        ao_add_task(&ao_usb_task, ao_usb_ep0, "usb");
-       ao_add_stdio(ao_usb_pollchar, ao_usb_putchar, ao_usb_flush);
+       ao_add_stdio(_ao_usb_pollchar, ao_usb_putchar, ao_usb_flush);
 }