示例#1
0
// Decoding event function
// Reading from UART
void sbus_common_decode_event(struct Sbus *sbus_p, struct uart_periph *dev)
{
  uint8_t rbyte;
  if (uart_char_available(dev)) {
    do {
      rbyte = uart_getch(dev);
      switch (sbus_p->status) {
        case SBUS_STATUS_UNINIT:
          // Wait for the start byte
          if (rbyte == SBUS_START_BYTE) {
            sbus_p->status++;
            sbus_p->idx = 0;
          }
          break;
        case SBUS_STATUS_GOT_START:
          // Store buffer
          sbus_p->buffer[sbus_p->idx] = rbyte;
          sbus_p->idx++;
          if (sbus_p->idx == SBUS_BUF_LENGTH) {
            // Decode if last byte is the correct end byte
            if (rbyte == SBUS_END_BYTE) {
              decode_sbus_buffer(sbus_p->buffer, sbus_p->pulses, &sbus_p->frame_available, sbus_p->ppm);
            }
            sbus_p->status = SBUS_STATUS_UNINIT;
          }
          break;
        default:
          break;
      }
    } while (uart_char_available(dev));
  }
}
示例#2
0
文件: sbus.c 项目: F34140r/paparazzi
// Decoding event function
// Reading from UART
void sbus_decode_event(void) {
  uint8_t rbyte;
  if (uart_char_available(&SBUS_UART_DEV)) {
    do {
      rbyte = uart_getch(&SBUS_UART_DEV);
      switch (sbus.status) {
        case SBUS_STATUS_UNINIT:
          // Wait for the start byte
          if (rbyte == SBUS_START_BYTE) {
            sbus.status++;
            sbus.idx = 0;
          }
          break;
        case SBUS_STATUS_GOT_START:
          // Store buffer
          sbus.buffer[sbus.idx] = rbyte;
          sbus.idx++;
          if (sbus.idx == SBUS_BUF_LENGTH) {
            // Decode if last byte is the correct end byte
            if (rbyte == SBUS_END_BYTE) {
              decode_sbus_buffer(sbus.buffer, sbus.pulses, &sbus.frame_available);
            }
            sbus.status = SBUS_STATUS_UNINIT;
          }
          break;
        default:
          break;
      }
    } while (uart_char_available(&SBUS_UART_DEV));
  }
}
示例#3
0
int main( void ) {
  unsigned char inc;
  unsigned int rx_time=0, tx_time=0;

  mcu_init();
  sys_time_init();
  led_init();
  VCOM_allow_linecoding(1);

#ifdef USE_USB_SERIAL
  VCOM_init();
#endif

  mcu_int_enable();

  LED_ON(3);

#ifdef USE_UART0
  while(1) {
    if (T0TC > (rx_time+((PCLK / T0_PCLK_DIV) / BLINK_MIN))) LED_OFF(1);
    if (T0TC > (tx_time+((PCLK / T0_PCLK_DIV) / BLINK_MIN))) LED_OFF(2);
    if (uart_char_available(&uart0) && VCOM_check_free_space(1)) {
      LED_ON(1);
      rx_time = T0TC;
      inc = uart_getch(&uart0);
      VCOM_putchar(inc);
    }
    if (VCOM_check_available() && uart_check_free_space(&uart0, 1)) {
      LED_ON(2);
      tx_time = T0TC;
      inc = VCOM_getchar();
      uart_transmit(&uart0, inc);
    }
  }
#else
  while(1) {
    if (T0TC > (rx_time+((PCLK / T0_PCLK_DIV) / BLINK_MIN))) LED_OFF(1);
    if (T0TC > (tx_time+((PCLK / T0_PCLK_DIV) / BLINK_MIN))) LED_OFF(2);
    if (uart_char_available(&uart1) && VCOM_check_free_space(1)) {
      LED_ON(1);
      rx_time = T0TC;
      inc = uart_getch(&uart1);
      VCOM_putchar(inc);
    }
    if (VCOM_check_available() && uart_check_free_space(&uart1, 1)) {
      LED_ON(2);
      tx_time = T0TC;
      inc = VCOM_getchar();
      uart_transmit(&uart1, inc);
    }
  }
#endif

  return 0;
}
示例#4
0
void airspeed_uADC_event(void)
{
  while (uart_char_available(&(uADC_DEV))) {
    uint8_t ch = uart_getch(&(uADC_DEV));
    airspeed_uadc_parse(ch);
  }
}
示例#5
0
static inline void main_periodic( void ) {
  char ch;

  uart_transmit(&uart1, 'a');
  uart_transmit(&uart2, 'b');
  uart_transmit(&uart3, 'c');
  uart_transmit(&uart5, 'd');

  LED_OFF(1);
  LED_OFF(2);

  if (uart_char_available(&uart1)) {
    ch = uart_getch(&uart1);
    if (ch == 'a') {
      LED_ON(1);
    } else {
      LED_ON(2);
    }
  }

  if (uart_char_available(&uart2)) {
    ch =  uart_getch(&uart2);
    if (ch == 'b') {
      LED_ON(1);
    } else {
      LED_ON(2);
    }
  }

  if (uart_char_available(&uart3)) {
    ch =  uart_getch(&uart3);
    if (ch == 'c') {
      LED_ON(1);
    } else {
      LED_ON(2);
    }
  }

  if (uart_char_available(&uart5)) {
    ch =  uart_getch(&uart5);
    if (ch == 'd') {
      LED_ON(1);
    } else {
      LED_ON(2);
    }
  }
}
示例#6
0
void esc32_event(void) {
  while (uart_char_available(esc32_priv.dev)) {
    parse_esc32(&esc32_priv, uart_getch(esc32_priv.dev));
    if (esc32_priv.msg_available) {
      esc32_parse_msg(&esc32_priv, &esc32);
    }
  }
}
示例#7
0
static inline void main_periodic(void)
{
  static uint8_t expected_i = 0;
  static float last_ts = 0;
  static float recv_ts = 0;

  if (uart_char_available(&TEST_UART)) {
    uint8_t c =  uart_getch(&TEST_UART);
    RunOnceEvery(1, printf("%f, received: '%d'\n", get_sys_time_float(), c);)
    if (c != expected_i) {
示例#8
0
static inline void main_periodic(void)
{
  const char *foo = "FooBarBaz";
  static int i = 0;

  if (i == strlen(foo)) {
    i = 0;
  }

  uart_transmit(&TEST_UART, foo[i]);
  printf("%f, transmit: '%c'\n", get_sys_time_float(), foo[i]);

  if (uart_char_available(&TEST_UART)) {
    char c =  uart_getch(&TEST_UART);
    printf("%f, received: '%c'\n", get_sys_time_float(), c);
  }

  i++;
}
示例#9
0
int main(void) {
    float v;    // Current battery voltage

    adc_init(); // time to init?
    led_init();
    mosfet_init();
    uart_init(); // time to init?
    uart_enable_interrupts();

    // setup
    charger_start(); // Charging by default

	while (1) {
        v = map(adc_read(0), ADC_MIN, ADC_MAX, V_MIN, V_MAX);
        if (charging) {
            if (v > V_FLT) {
                // Stop charging
                charger_stop();
            }
        } else {
            if (v <= V_FLT - HYST) {
                // Start charging
                charger_start();
            }
        }

        if (uart_char_available()) {
            unsigned char cmd;
            char buf[6];

            cmd = uart_getchar();
            switch (cmd) {
                case 'v':
                    voltage_to_str(buf, v);
                    printf("voltage: %s ", buf);
                    printf(charging ? "(charging)\n" : "(not charging)\n");
                    break;
            }
        }
    }

    return 0;
}