projects
/
fw
/
altos
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
altos: Allow any stdio to be used with packet forwarding
[fw/altos]
/
src
/
ao_packet_master.c
diff --git
a/src/ao_packet_master.c
b/src/ao_packet_master.c
index 50f5aeffc79101725df181261fe3408c801f6a4e..e721ffba39c948a0d17a5fc35cf45ccfec664eea 100644
(file)
--- a/
src/ao_packet_master.c
+++ b/
src/ao_packet_master.c
@@
-21,13
+21,12
@@
static char
ao_packet_getchar(void) __critical
{
char c;
ao_packet_getchar(void) __critical
{
char c;
- while ((c = ao_packet_pollchar()) == AO_READ_AGAIN)
- {
+ while ((c = ao_packet_pollchar()) == AO_READ_AGAIN) {
if (!ao_packet_enable)
break;
if (ao_packet_master_sleeping)
if (!ao_packet_enable)
break;
if (ao_packet_master_sleeping)
- ao_wake
_task(&ao_packet_task
);
-
ao_usb_
flush();
+ ao_wake
up(&ao_packet_master_sleeping
);
+ flush();
ao_sleep(&ao_stdin_ready);
}
return c;
ao_sleep(&ao_stdin_ready);
}
return c;
@@
-36,11
+35,11
@@
ao_packet_getchar(void) __critical
static void
ao_packet_echo(void) __reentrant
{
static void
ao_packet_echo(void) __reentrant
{
-
uint8_t
c;
+
char
c;
while (ao_packet_enable) {
c = ao_packet_getchar();
while (ao_packet_enable) {
c = ao_packet_getchar();
- if (
ao_packet_enable
)
-
ao_usb_
putchar(c);
+ if (
c != AO_READ_AGAIN
)
+ putchar(c);
}
ao_exit();
}
}
ao_exit();
}
@@
-75,10
+74,7
@@
ao_packet_master_check_busy(void)
void
ao_packet_master(void)
{
void
ao_packet_master(void)
{
- uint8_t status;
-
ao_config_get();
ao_config_get();
- ao_radio_set_packet();
ao_tx_packet.addr = ao_serial_number;
ao_tx_packet.len = AO_PACKET_SYN;
ao_packet_master_time = ao_time();
ao_tx_packet.addr = ao_serial_number;
ao_tx_packet.len = AO_PACKET_SYN;
ao_packet_master_time = ao_time();
@@
-90,19
+86,18
@@
ao_packet_master(void)
ao_packet_master_busy();
ao_packet_master_check_busy();
ao_alarm(ao_packet_master_delay);
ao_packet_master_busy();
ao_packet_master_check_busy();
ao_alarm(ao_packet_master_delay);
- status = ao_packet_recv();
- if (status & AO_DMA_DONE) {
+ if (ao_packet_recv()) {
/* if we can transmit data, do so */
if (ao_packet_tx_used && ao_tx_packet.len == 0)
continue;
if (ao_rx_packet.packet.len)
ao_packet_master_busy();
ao_packet_master_sleeping = 1;
/* if we can transmit data, do so */
if (ao_packet_tx_used && ao_tx_packet.len == 0)
continue;
if (ao_rx_packet.packet.len)
ao_packet_master_busy();
ao_packet_master_sleeping = 1;
- ao_delay(ao_packet_master_delay);
+ ao_alarm(ao_packet_master_delay);
+ ao_sleep(&ao_packet_master_sleeping);
ao_packet_master_sleeping = 0;
}
}
ao_packet_master_sleeping = 0;
}
}
- ao_radio_set_telemetry();
ao_exit();
}
ao_exit();
}
@@
-117,7
+112,7
@@
ao_packet_forward(void) __reentrant
ao_set_monitor(0);
ao_add_task(&ao_packet_task, ao_packet_master, "master");
ao_add_task(&ao_packet_echo_task, ao_packet_echo, "echo");
ao_set_monitor(0);
ao_add_task(&ao_packet_task, ao_packet_master, "master");
ao_add_task(&ao_packet_echo_task, ao_packet_echo, "echo");
- while ((c =
ao_usb_
getchar()) != '~') {
+ while ((c = getchar()) != '~') {
if (c == '\r') c = '\n';
ao_packet_putchar(c);
}
if (c == '\r') c = '\n';
ao_packet_putchar(c);
}
@@
-127,18
+122,17
@@
ao_packet_forward(void) __reentrant
ao_delay(AO_MS_TO_TICKS(100));
ao_packet_enable = 0;
while (ao_packet_echo_task.wchan || ao_packet_task.wchan) {
ao_delay(AO_MS_TO_TICKS(100));
ao_packet_enable = 0;
while (ao_packet_echo_task.wchan || ao_packet_task.wchan) {
- ao_radio_abort();
- ao_wake_task(&ao_packet_echo_task);
- ao_wake_task(&ao_packet_task);
- ao_yield();
+ ao_radio_recv_abort();
+ ao_wakeup(&ao_stdin_ready);
+ ao_delay(AO_MS_TO_TICKS(10));
}
}
__code struct ao_cmds ao_packet_master_cmds[] = {
}
}
__code struct ao_cmds ao_packet_master_cmds[] = {
- {
'p', ao_packet_forward, "p
Remote packet link." },
- { 0,
ao_packet_forward,
NULL },
+ {
ao_packet_forward, "p\0
Remote packet link." },
+ { 0, NULL },
};
void
};
void