void handleCommand(char* command)
{
  if (command[0] == 'A')
  {
    int nr = atoi(&command[1]);
    char* param_ptr = strchr(command, ' ');
    int param = -1;
    if (param_ptr)
      param = param_ptr[1];
    switch(nr)
    {
    case 0:
      send_P(PSTR(STRING_CONFIG_H_AUTHOR));
      break;
    case 1: if (param > -1) DDRA = param; break;
    case 2: if (param > -1) DDRB = param; break;
    case 3: if (param > -1) DDRC = param; break;
    case 4: if (param > -1) DDRD = param; break;
    case 5: if (param > -1) DDRE = param; break;
    case 7: if (param > -1) DDRG = param; break;
    case 8: if (param > -1) DDRH = param; break;
    case 9: if (param > -1) DDRJ = param; break;
    case 11: if (param > -1) DDRL = param | 0x38; break;         //Make sure the motor PWMs are always outputs.
    case 12: if (param > -1) PORTA = param; send(PINA); break;
    case 13: if (param > -1) PORTB = param; send(PINB); break;
    case 14: if (param > -1) PORTC = param; send(PINC); break;
    case 15: if (param > -1) PORTD = param; send(PIND); break;
    case 16: if (param > -1) PORTE = param; send(PINE); break;
    case 18: if (param > -1) PORTG = param; send(PING); break;
    case 19: if (param > -1) PORTH = param; send(PINH); break;
    case 20: if (param > -1) PORTJ = param; send(PINJ); break;
    case 22: if (param > -1) PORTL = param; send(PINL); break;
    case 23: sendADC(0); break;
    case 24: sendADC(1); break;
    case 25: sendADC(2); break;
    case 26: sendADC(3); break;
    case 27: sendADC(4); break;
    case 28: sendADC(5); break;
    case 29: sendADC(6); break;
    case 30: sendADC(7); break;
    case 31: sendADC(8); break;
    case 32: sendADC(9); break;
    case 33: sendADC(10); break;
    case 34: sendADC(11); break;
    case 35: sendADC(12); break;
    case 36: sendADC(13); break;
    case 37: sendADC(14); break;
    case 38: sendADC(15); break;
    default:
      send_P(PSTR("?"));
      break;
    }
    send_P(PSTR("\r\n"));
  }else if (strlen(command) > 0)
  {
    send_P(PSTR("Unknown command: "));
    send(command);
    send_P(PSTR("\r\n"));
  }
}
void run_electronics_test()
{
    cli();
    
    //Disable times and PWM, except for timer5, which controls the motor current PWM levels.
    TCCR1A = 0;
    TCCR2A = 0;
    TCCR3A = 0;
    TCCR4A = 0;
    
    uint8_t idx = 0;
    char command_buffer[32];
    send_P(PSTR("TEST\r\n"));
    while(true)
    {
        watchdog_reset();
        if (UCSR0A & _BV(RXC0))
        {
            uint8_t recv = UDR0;
            if (recv == '\n' || recv == '\r')
            {
                command_buffer[idx] = 0;
                idx = 0;
                
                handleCommand(command_buffer);
            }
            else
            {
                command_buffer[idx++] = recv;
            }
        }
    }
}