X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=src%2Fdrivers%2Fao_packet_master.c;h=a44b34cf0acdd84cd0905f745066dec630f6a08b;hp=2354504981d6f09d3b51046d02fab1e300bc6b3a;hb=HEAD;hpb=d83afa9320c24056469984873af0a3c70bee0962 diff --git a/src/drivers/ao_packet_master.c b/src/drivers/ao_packet_master.c index 23545049..688ab6db 100644 --- a/src/drivers/ao_packet_master.c +++ b/src/drivers/ao_packet_master.c @@ -3,7 +3,8 @@ * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of @@ -17,7 +18,7 @@ #include "ao.h" -static char +static int ao_packet_getchar(void) { int c; @@ -38,20 +39,20 @@ ao_packet_getchar(void) } static void -ao_packet_echo(void) __reentrant +ao_packet_echo(void) { int c; while (ao_packet_enable) { c = ao_packet_getchar(); if (c != AO_READ_AGAIN) - putchar(c); + putchar((char) c); } ao_exit(); } -static __xdata struct ao_task ao_packet_echo_task; -static __xdata uint16_t ao_packet_master_delay; -static __xdata uint16_t ao_packet_master_time; +static struct ao_task ao_packet_echo_task; +static AO_TICK_TYPE ao_packet_master_delay; +static AO_TICK_TYPE ao_packet_master_time; #define AO_PACKET_MASTER_DELAY_SHORT AO_MS_TO_TICKS(100) #define AO_PACKET_MASTER_DELAY_LONG AO_MS_TO_TICKS(1000) @@ -73,33 +74,31 @@ ao_packet_master_busy(void) static void ao_packet_master_check_busy(void) { - int16_t idle; + AO_TICK_SIGNED idle; if (ao_packet_master_delay != AO_PACKET_MASTER_DELAY_SHORT) return; - idle = (int16_t) (ao_time() - ao_packet_master_time); + idle = (AO_TICK_SIGNED) (ao_time() - ao_packet_master_time); if (idle > AO_PACKET_MASTER_DELAY_TIMEOUT) ao_packet_master_delay = AO_PACKET_MASTER_DELAY_LONG; } -void +static void ao_packet_master(void) { ao_config_get(); - ao_tx_packet.addr = ao_serial_number; + ao_tx_packet.addr = (uint8_t) ao_serial_number; ao_tx_packet.len = AO_PACKET_SYN; ao_packet_master_time = ao_time(); ao_packet_master_delay = AO_PACKET_MASTER_DELAY_SHORT; while (ao_packet_enable) { uint8_t r; - ao_xmemcpy(ao_tx_packet.callsign, ao_config.callsign, AO_MAX_CALLSIGN); + memcpy(ao_tx_packet.callsign, ao_config.callsign, AO_MAX_CALLSIGN); ao_packet_send(); if (ao_tx_packet.len) ao_packet_master_busy(); ao_packet_master_check_busy(); - ao_alarm(AO_PACKET_MASTER_RECV_DELAY); - r = ao_packet_recv(); - ao_clear_alarm(); + r = ao_packet_recv(AO_PACKET_MASTER_RECV_DELAY); if (r) { /* if we can transmit data, do so */ if (ao_packet_tx_used && ao_tx_packet.len == 0) @@ -107,9 +106,7 @@ ao_packet_master(void) if (ao_rx_packet.packet.len) ao_packet_master_busy(); ao_packet_master_sleeping = 1; - ao_alarm(ao_packet_master_delay); - ao_sleep(&ao_packet_master_sleeping); - ao_clear_alarm(); + ao_sleep_for(&ao_packet_master_sleeping, ao_packet_master_delay); ao_packet_master_sleeping = 0; } } @@ -117,10 +114,11 @@ ao_packet_master(void) } static void -ao_packet_forward(void) __reentrant +ao_packet_forward(void) { char c; ao_packet_enable = 1; + ao_packet_tx_used = 0; ao_cmd_white(); flush(); @@ -154,7 +152,7 @@ ao_packet_signal(void) printf ("RSSI: %d\n", ao_radio_rssi); } -__code struct ao_cmds ao_packet_master_cmds[] = { +const struct ao_cmds ao_packet_master_cmds[] = { { ao_packet_forward, "p\0Remote packet link." }, { ao_packet_signal, "s\0Report signal strength." }, { 0, NULL },