uint8_t address_exchange(void) { uint8_t ch; uint8_t id; set_led_rgb(0, 0, 255); id = eeprom_read_byte((uint8_t *)ee_pump_id_offset); if (id == 0 || id == 255) { // we failed to get a unique number for the pump. just stop. set_led_rgb(255, 0, 0); for(;;); } for(;;) { for(;;) { if (serial_rx_nb(&ch)) break; if (check_reset()) return 0xFF; } if (ch == 0xFF) break; if (ch == '?') serial_tx(id); } set_led_rgb(0, 255, 0); return id; }
// return true is a command was read, false if a reset was requested uint8_t receive_cmd(char *cmd) { uint8_t num = 0, ch; dprintf(">"); *cmd = 0; for(; !check_reset();) { for(;!check_reset() && !serial_rx_nb(&ch);) idle(); if (check_reset()) return 0; serial_tx(ch); if (ch == '\r') { serial_tx('\n'); cmd[num] = 0; return 1; } cmd[num] = ch; num++; } return 0; }
void comm_test(void) { uint8_t ch; // disable all interrupts and just echo every character received. cli(); set_led_rgb(0, 255, 255); for(; !check_reset();) if (serial_rx_nb(&ch)) for(; !serial_tx_nb(ch) && !check_reset();) ; sei(); }