int main(void) { struct gpio_pin heartbeat_led; struct timer heartbeat_timer; struct aparser_ctx uart_parser; cli(); gpio_init_output(&yellow_led, &PORTC, 0, false); gpio_init_output(&heartbeat_led, &PORTB, 5, false); timer_set_period_ms(&heartbeat_timer, 500); servo_init(); uart_init(); systick_init(); aparser_init(&uart_parser, 2); aparser_register_commands(&uart_parser, uart_parser_item); wdt_enable(WDTO_500MS); sei(); for (;;) { uint8_t data; if (uart_getchar(&data) == UART_RETCODE_SUCCESS) { uart_putchar(data); aparser_update_and_execute(&uart_parser, data); } if (timer_has_expired(&heartbeat_timer)) { timer_restart(&heartbeat_timer); gpio_toggle(&heartbeat_led); } wdt_reset(); } return 0; }
irom static void gpio_init_timer(gpio_t *gpio) { const gpio_config_entry_t *cfg = get_config(gpio); gpio->timer.delay = 0; gpio_init_output(gpio); if(cfg->timer.direction == gpio_up) gpio_output_set(0, 1 << gpio->index, 0, 0); else gpio_output_set(1 << gpio->index, 0, 0, 0); if(cfg->timer.autotrigger) trigger_timer(gpio, 1); }