Пример #1
0
/* Combined send and receive */
void cmd_send_and_listen() {
  uint8_t send_channel;
  uint8_t repeat_count;
  uint8_t delay_ms;
  uint8_t listen_channel;
  uint32_t timeout_ms;
  uint8_t retry_count;
  uint8_t result;

  send_channel = serial_rx_byte();
  repeat_count = serial_rx_byte();
  delay_ms = serial_rx_byte();
  listen_channel = serial_rx_byte();
  timeout_ms = serial_rx_long();
  retry_count = serial_rx_byte();

  send_packet_from_serial(send_channel, repeat_count, delay_ms);
  result = get_packet_and_write_to_serial(listen_channel, timeout_ms);

  while (result == ERROR_RX_TIMEOUT && retry_count > 0) {
    resend_from_tx_buf(send_channel);
    result = get_packet_and_write_to_serial(listen_channel, timeout_ms);
    retry_count--;
  }

  if (result != 0) {
    // Error, and no retries left
    serial_tx_byte(result);
    serial_tx_byte(0);
  }
}
Пример #2
0
void cmd_led() {
  uint8_t led;
  uint8_t mode;
  led = serial_rx_byte();
  mode = serial_rx_byte(); 
  led_set_mode(led, mode);//0, 1, 2 = Off, On, Auto
}
Пример #3
0
void cmd_send_packet() {
  uint8_t channel;
  uint8_t repeat_count;
  uint8_t delay_ms;
  channel = serial_rx_byte();
  repeat_count = serial_rx_byte();
  delay_ms = serial_rx_byte();
  send_packet_from_serial(channel, repeat_count, delay_ms);
  serial_tx_byte(0);
}
Пример #4
0
void get_command() {
  uint8_t cmd;
  cmd = serial_rx_byte();
  do_cmd(cmd);
  if (interrupting_cmd) {
    do_cmd(interrupting_cmd);
    interrupting_cmd = 0;
  }
}
Пример #5
0
void cmd_get_packet() {
  uint8_t channel;
  uint32_t timeout_ms;
  uint8_t result;
  channel = serial_rx_byte();
  timeout_ms = serial_rx_long();
  result = get_packet_and_write_to_serial(channel, timeout_ms);
  if (result != 0) {
    serial_tx_byte(result);
    serial_tx_byte(0);
  }
}
Пример #6
0
void __visible
UART_Handler(void)
{
    uint32_t status = UART->UART_SR;
    if (status & UART_SR_RXRDY)
        serial_rx_byte(UART->UART_RHR);
    if (status & UART_SR_TXRDY) {
        uint8_t data;
        int ret = serial_get_tx_byte(&data);
        if (ret)
            UART->UART_IDR = UART_IDR_TXRDY;
        else
            UART->UART_THR = data;
    }
}
Пример #7
0
uint16_t serial_rx_word() {
  return (serial_rx_byte() << 8) + serial_rx_byte();
}
Пример #8
0
void cmd_update_register() {
  uint8_t addr;
  uint8_t value;
  uint8_t rval;
  addr = serial_rx_byte();
  value = serial_rx_byte();
  rval = 1;
  switch(addr) {
    case 0x00:
      SYNC1 = value;
      break;
    case 0x01:
      SYNC0 = value;
      break;
    case 0x02:
      PKTLEN = value;
      break;
    case 0x03:
      PKTCTRL1 = value;
      break;
    case 0x04:
      PKTCTRL0 = value;
      break;
    case 0x05:
      ADDR = value;
      break;
    case 0x06:
      CHANNR = value;
      break;
    case 0x07:
      FSCTRL1 = value;
      break;
    case 0x08:
      FSCTRL0 = value;
      break;
    case 0x09:
      FREQ2 = value;
      break;
    case 0x0A:
      FREQ1 = value;
      break;
    case 0x0B:
      FREQ0 = value;
      break;
    case 0x0C:
      MDMCFG4 = value;
      break;
    case 0x0D:
      MDMCFG3 = value;
      break;
    case 0x0E:
      MDMCFG2 = value;
      break;
    case 0x0F:
      MDMCFG1 = value;
      break;
    case 0x10:
      MDMCFG0 = value;
      break;
    case 0x11:
      DEVIATN = value;
      break;
    case 0x12:
      MCSM2 = value;
      break;
    case 0x13:
      MCSM1 = value;
      break;
    case 0x14:
      MCSM0 = value;
      break;
    case 0x15:
      FOCCFG = value;
      break;
    case 0x16:
      BSCFG = value;
      break;
    case 0x17:
      AGCCTRL2 = value;
      break;
    case 0x18:
      AGCCTRL1= value;
      break;
    case 0x19:
      AGCCTRL0 = value;
      break;
    case 0x1A:
      FREND1 = value;
      break;
    case 0x1B:
      FREND0 = value;
      break;
    case 0x1C:
      FSCAL3 = value;
      break;
    case 0x1D:
      FSCAL2 = value;
      break;
    case 0x1E:
      FSCAL1 = value;
      break;
    case 0x1F:
      FSCAL0 = value;
      break;
    case 0x20:
      PA_TABLE1 = value;
      break;
    case 0x21:
      PA_TABLE0 = value;
      break;
    default:
      rval = 2;
  }
  serial_tx_byte(rval);
  serial_tx_byte(0);
}