skl-tunnel/main.cpp
2022-06-28 00:20:32 +03:00

67 lines
1.4 KiB
C++

#include <atmel_start.h>
#include <cstdio>
#include <utility_staticpointer.hpp>
#include <samd21_hal.hpp>
#include "radio_hw_instance.hpp"
namespace
{
volatile bool can_send_uart = true;
void tx_cb_USART_0(const struct usart_async_descriptor* const io_descr)
{
can_send_uart = true;
}
}
int main(void)
{
/* Initializes MCU, drivers and middleware */
atmel_start_init();
gpio_set_pin_level(OUT_LED_TX, false);
struct io_descriptor* usart_io = NULL;
Utility::Function<void (const usart_async_descriptor* const)> callback{tx_cb_USART_0};
Peripherals::Hal::Samd::SerialInterfaceAsync<usart_async_descriptor> usart0{&USART_0};
usart0.registerTxCallback(&callback);
#if 0
usart_async_register_callback(&USART_0, USART_ASYNC_TXC_CB, tx_cb_USART_0);
usart_async_get_io_descriptor(&USART_0, &usart_io);
usart_async_enable(&USART_0);
#endif
radio::HwInstance* radio_hw = radio::HwInstance::create_instance();
/* Replace with your application code */
while (1)
{
gpio_toggle_pin_level(OUT_LED_RX);
uint8_t uart_data[12] = { 0 };
if (can_send_uart)
{
can_send_uart = false;
const int16_t radio_num = radio_hw->register_read(0x1C);
std::sprintf((char*)uart_data, "%d\n\r", radio_num);
usart0.transmit(uart_data, 12);
#if 0
io_write(usart_io, uart_data, 12);
#endif
gpio_toggle_pin_level(OUT_LED_TX);
}
delay_ms(1000);
}
}