void
ao_packet_send(void)
{
+#ifdef AO_LED_RED
ao_led_on(AO_LED_RED);
+#endif
/* If any tx data is pending then copy it into the tx packet */
if (ao_packet_tx_used && ao_tx_packet.len == 0) {
- memcpy(&ao_tx_packet.d, tx_data, ao_packet_tx_used);
+ ao_xmemcpy(&ao_tx_packet.d, tx_data, ao_packet_tx_used);
ao_tx_packet.len = ao_packet_tx_used;
ao_tx_packet.seq++;
ao_packet_tx_used = 0;
ao_wakeup(&tx_data);
}
ao_radio_send(&ao_tx_packet, sizeof (ao_tx_packet));
+#ifdef AO_LED_RED
ao_led_off(AO_LED_RED);
+#endif
}
uint8_t
if (!(ao_rx_packet.status & PKT_APPEND_STATUS_1_CRC_OK))
return 0;
+ /* Accept packets with matching call signs, or any packet if
+ * our callsign hasn't been configured
+ */
+ if (ao_xmemcmp(ao_rx_packet.packet.callsign,
+ ao_config.callsign,
+ AO_MAX_CALLSIGN) != 0 &&
+ ao_xmemcmp(ao_config.callsign, CODE_TO_XDATA("N0CALL"), 7) != 0)
+ return 0;
+
/* SYN packets carry no data */
if (ao_rx_packet.packet.len == AO_PACKET_SYN) {
rx_seq = ao_rx_packet.packet.seq;
/* Copy data to the receive data buffer and set up the
* offsets
*/
- memcpy(rx_data, ao_rx_packet.packet.d, ao_rx_packet.packet.len);
+ ao_xmemcpy(rx_data, ao_rx_packet.packet.d, ao_rx_packet.packet.len);
ao_packet_rx_used = 0;
ao_packet_rx_len = ao_rx_packet.packet.len;