projects
/
fw
/
altos
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
altos: Use all 16 bits of setup packet len when limiting reply len
[fw/altos]
/
src
/
lpc
/
ao_usb_lpc.c
diff --git
a/src/lpc/ao_usb_lpc.c
b/src/lpc/ao_usb_lpc.c
index e574f1e23f6eb3b6d80afc5b05cca9fe9a6888b2..108822ced73f2fe72b3c333d73d1464f0fd1ce5e 100644
(file)
--- a/
src/lpc/ao_usb_lpc.c
+++ b/
src/lpc/ao_usb_lpc.c
@@
-19,6
+19,16
@@
#include "ao_usb.h"
#include "ao_product.h"
#include "ao_usb.h"
#include "ao_product.h"
+#ifndef USE_USB_STDIO
+#define USE_USB_STDIO 1
+#endif
+
+#if USE_USB_STDIO
+#define AO_USB_OUT_SLEEP_ADDR (&ao_stdin_ready)
+#else
+#define AO_USB_OUT_SLEEP_ADDR (&ao_usb_out_avail)
+#endif
+
#define USB_DEBUG 0
#define USB_DEBUG_DATA 0
#define USB_ECHO 0
#define USB_DEBUG 0
#define USB_DEBUG_DATA 0
#define USB_ECHO 0
@@
-35,8
+45,6
@@
#define debug_data(format, args...)
#endif
#define debug_data(format, args...)
#endif
-struct ao_task ao_usb_task;
-
struct ao_usb_setup {
uint8_t dir_type_recip;
uint8_t request;
struct ao_usb_setup {
uint8_t dir_type_recip;
uint8_t request;
@@
-442,7
+450,7
@@
ao_usb_ep0_out_set(uint8_t *data, uint8_t len)
}
static void
}
static void
-ao_usb_ep0_in_start(uint
8
_t max)
+ao_usb_ep0_in_start(uint
16
_t max)
{
/* Don't send more than asked for */
if (ao_usb_ep0_in_len > max)
{
/* Don't send more than asked for */
if (ao_usb_ep0_in_len > max)
@@
-654,7
+662,7
@@
lpc_usb_irq_isr(void)
_rx_dbg1("RX ISR", *ao_usb_epn_out(AO_USB_OUT_EP));
ao_usb_out_avail = 1;
_rx_dbg0("out avail set");
_rx_dbg1("RX ISR", *ao_usb_epn_out(AO_USB_OUT_EP));
ao_usb_out_avail = 1;
_rx_dbg0("out avail set");
- ao_wakeup(
&ao_stdin_ready);
+ ao_wakeup(
AO_USB_OUT_SLEEP_ADDR)
_rx_dbg0("stdin awoken");
}
_rx_dbg0("stdin awoken");
}
@@
-813,7
+821,7
@@
ao_usb_getchar(void)
ao_arch_block_interrupts();
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_sleep(
AO_USB_OUT_SLEEP_ADDR
);
ao_arch_release_interrupts();
return c;
}
ao_arch_release_interrupts();
return c;
}
@@
-823,6
+831,9
@@
ao_usb_disable(void)
{
ao_arch_block_interrupts();
{
ao_arch_block_interrupts();
+#if HAS_USB_PULLUP
+ ao_gpio_set(AO_USB_PULLUP_PORT, AO_USB_PULLUP_PIN, AO_USB_PULLUP, 0);
+#endif
/* Disable interrupts */
lpc_usb.inten = 0;
/* Disable interrupts */
lpc_usb.inten = 0;
@@
-925,6
+936,10
@@
ao_usb_enable(void)
for (t = 0; t < 1000; t++)
ao_arch_nop();
for (t = 0; t < 1000; t++)
ao_arch_nop();
+#if HAS_USB_PULLUP
+ ao_gpio_set(AO_USB_PULLUP_PORT, AO_USB_PULLUP_PIN, AO_USB_PULLUP, 1);
+#endif
+
ao_usb_set_ep0();
}
ao_usb_set_ep0();
}
@@
-961,6
+976,10
@@
__code struct ao_cmds ao_usb_cmds[] = {
void
ao_usb_init(void)
{
void
ao_usb_init(void)
{
+#if HAS_USB_PULLUP
+ ao_enable_output(AO_USB_PULLUP_PORT, AO_USB_PULLUP_PIN, AO_USB_PULLUP, 0);
+#endif
+
ao_usb_enable();
debug ("ao_usb_init\n");
ao_usb_enable();
debug ("ao_usb_init\n");
@@
-970,7
+989,7
@@
ao_usb_init(void)
#if USB_DEBUG
ao_cmd_register(&ao_usb_cmds[0]);
#endif
#if USB_DEBUG
ao_cmd_register(&ao_usb_cmds[0]);
#endif
-#if
!USB_ECH
O
+#if
USE_USB_STDI
O
ao_add_stdio(_ao_usb_pollchar, ao_usb_putchar, ao_usb_flush);
#endif
}
ao_add_stdio(_ao_usb_pollchar, ao_usb_putchar, ao_usb_flush);
#endif
}