skl-tunnel/main.cpp
2022-07-15 14:23:19 +03:00

80 lines
1.7 KiB
C++

#include <atmel_start.h>
#include <utility_logging.hpp>
#include <utility_assert.hpp>
#include <utility_staticpointer.hpp>
#include <utility_function.hpp>
#include "radio_hw_instance.hpp"
#include "app_logging.hpp"
#include "skullc_samd21_hal.hpp"
#include "app_transparent_client.hpp"
namespace Hal = Peripherals::Hal::Samd;
namespace
{
Utility::StaticPointer<App::TransparentClient> m_app;
[[noreturn]] void m_faultHandler(const char* expression, const char* file, const int line)
{
SKULLC_LOG_FATAL("Expression failed: (%s), source: %s:%d", expression, file, line);
__asm__("BKPT");
while (true);
}
volatile bool irq_seen = false;
void m_irqHandler(radio::HwInstance*)
{
irq_seen = true;
}
}
int main()
{
/* Initializes MCU, drivers and middleware */
atmel_start_init();
Utility::Assert::setHandler(m_faultHandler);
gpio_set_pin_level(OUT_LED_TX, false);
App::Logging::setup();
SKULLC_LOG_DEBUG("Begin.");
const App::RadioSettings settings;
Utility::Function<void (radio::HwInstance*)> irq_handler{m_irqHandler};
m_app.setup(settings);
radio::HwInstance* radio_hw = radio::HwInstance::instance();
radio_hw->set_irq_handler(&irq_handler);
/* Replace with your application code */
while (true)
{
gpio_toggle_pin_level(OUT_LED_RX);
gpio_toggle_pin_level(OUT_LED_TX);
int16_t radio_status = radio_hw->register_read(radio::Registers::TRX_STATUS);
radio_status &= 0x1F;
SKULLC_LOG_INFO("Status: %d", radio_status);
if (irq_seen)
{
irq_seen = false;
const radio::Interrupts irqs = radio_hw->get_pending_irq();
SKULLC_LOG_INFO("IRQ received. %X", std::uint8_t(irqs));
}
delay_ms(1000);
}
}