Ignore empty packets.
Use my_strncpy for cleanliness.
/* make sure it's really a ping */
if (sci_rx_buf[1] != 'I' ||
sci_rx_buf[2] != 'N' ||
- sci_rx_buf[3] != 'G') {
+ sci_rx_buf[3] != 'G' ||
+ sci_rx_buf[4] != '\0') {
send_nack();
return;
}
/* respond with ack & pong */
wait_for_tx_free();
- sci_tx_buf[0] = 'P';
- sci_tx_buf[1] = 'O';
- sci_tx_buf[2] = 'N';
- sci_tx_buf[3] = 'G';
- sci_tx_buf[4] = '\n';
- sci_tx_buf[5] = 0;
+ my_strncpy(sci_tx_buf, "PONG\n", BUFFER_LEN);
send_packet();
}
return;
}
sci_rx_buf[sci_rx_buf_ptr] = _io_ports[M6811_SCDR];
- if (sci_rx_buf[sci_rx_buf_ptr] == '\n') {
+ if (sci_rx_buf[sci_rx_buf_ptr] == '\n' ||
+ sci_rx_buf[sci_rx_buf_ptr] == '\r') {
+ if (sci_rx_buf_ptr == 0) return; /* we've read a blank packet in */
sci_rx_buf[sci_rx_buf_ptr] = '\0';
sci_have_packet = 1;
sci_rx_buf_ptr = 0;
}
void send_ack() {
- sci_tx_buf[0] = '!';
- sci_tx_buf[1] = '\n';
- sci_tx_buf[2] = '\0';
+ my_strncpy(sci_tx_buf, "!\n", BUFFER_LEN);
send_packet();
}
void send_nack() {
- sci_tx_buf[0] = '?';
- sci_tx_buf[1] = '\n';
- sci_tx_buf[2] = '\0';
+ my_strncpy(sci_tx_buf, "?\n", BUFFER_LEN);
send_packet();
}