/**
* Copyright (c) 2020 Raspberry Pi (Trading) Ltd.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#include <stdio.h>
#include "pico/stdlib.h"
volatile char input[100] = {0};
volatile int idx = 0;
volatile int blink_activated = 0, blink_state = 0;
void uart_received(void) {
uart_read_blocking(uart0, input + idx, 1);
idx ++;
input[idx] = 0;
}
int64_t blink_alarm(alarm_id_t id, void *user_data) {
gpio_put(3, blink_state);
blink_state = !blink_state;
return -500000L;
}
bool blink_repeat(repeating_timer_t *rt) {
gpio_put(3, blink_state);
blink_state = !blink_state;
return 1;
}
int main() {
uart_init(uart0, 115200);
gpio_init(3);
gpio_set_dir(3, GPIO_OUT);
gpio_set_function(0, GPIO_FUNC_UART);
gpio_set_function(1, GPIO_FUNC_UART);
// uart_set_format(uart0, 9, 1, UART_PARITY_EVEN);
irq_set_exclusive_handler(UART0_IRQ, uart_received);
irq_set_enabled(UART0_IRQ, 1);
uart_set_irq_enables(uart0, 1, 0);
int asked = 0;
uint64_t next_blink_time = 0;
uint64_t next_print_time = 0;
struct repeating_timer timer;
while (1) {
if (!asked) {
const char *hello_msg = "Your command:\r\n";
uart_write_blocking(uart0, hello_msg, strlen(hello_msg));
asked = 1;
} else if (idx > 0 && input[idx-1] == '\n') {
char response[100];
snprintf(response, 99, "S-a citit: %s\r\n", input);
uart_write_blocking(uart0, response, strlen(response));
if (strncmp(input, "blink\n", 6) == 0) {
blink_activated = !blink_activated;
if (blink_activated) {
// cancel_alarm(blink_alarm_id);
add_alarm_in_us(
make_timeout_time_ms(500), blink_alarm, NULL, 1);
// add_repeating_timer_ms(-500, blink_repeat, NULL, &timer);
} else {
// cancel_alarm(blink_alarm_id);
}
}
input[0] = 0;
idx = 0;
asked = 0;
}
uint64_t cur_time_ms = time_us_64() / 1000;
if (next_print_time < cur_time_ms) {
const char *ping_msg = "Ping 5 s\r\n";
uart_write_blocking(uart0, ping_msg, strlen(ping_msg));
next_print_time = cur_time_ms + 5000;
}
sleep_ms(10);
}
}