3#include <zephyr/kernel.h>
4#include <zephyr/drivers/watchdog.h>
5#include <zephyr/sys/reboot.h>
6#include <zephyr/random/random.h>
14static int wdt_channel_id = -1;
15static const device *
const WDT = DEVICE_DT_GET(DT_ALIAS(watchdog0));
18void yield() { ::k_yield(); }
19uint32_t millis() {
return k_ticks_to_ms_floor32(k_uptime_ticks()); }
20uint32_t micros() {
return k_ticks_to_us_floor32(k_uptime_ticks()); }
22void delay(uint32_t ms) { ::k_msleep(ms); }
26 if (device_is_ready(WDT)) {
27 static wdt_timeout_cfg wdt_config{};
28 wdt_config.flags = WDT_FLAG_RESET_SOC;
31 wdt_config.window.max = 10000;
33 wdt_config.window.max = 2000;
35 wdt_channel_id = wdt_install_timeout(WDT, &wdt_config);
36 if (wdt_channel_id >= 0) {
39 options |= WDT_OPT_PAUSE_HALTED_BY_DBG;
42 options |= WDT_OPT_PAUSE_IN_SLEEP;
52 if (wdt_channel_id >= 0) {
53 wdt_feed(WDT, wdt_channel_id);
64 auto *mutex =
new k_mutex();
65 this->handle_ = mutex;
68Mutex::~Mutex() {
delete static_cast<k_mutex *
>(this->handle_); }
69void Mutex::lock() { k_mutex_lock(
static_cast<k_mutex *
>(this->handle_), K_FOREVER); }
70bool Mutex::try_lock() {
return k_mutex_lock(
static_cast<k_mutex *
>(this->handle_), K_NO_WAIT) == 0; }
71void Mutex::unlock() { k_mutex_unlock(
static_cast<k_mutex *
>(this->handle_)); }
82 sys_rand_get(data,
len);
88 mac[0] = ((NRF_FICR->DEVICEADDR[1] & 0xFFFF) >> 8) | 0xC0;
89 mac[1] = NRF_FICR->DEVICEADDR[1] & 0xFFFF;
90 mac[2] = NRF_FICR->DEVICEADDR[0] >> 24;
91 mac[3] = NRF_FICR->DEVICEADDR[0] >> 16;
92 mac[4] = NRF_FICR->DEVICEADDR[0] >> 8;
93 mac[5] = NRF_FICR->DEVICEADDR[0];
Providing packet encoding functions for exchanging data with a remote host.
uint32_t arch_get_cpu_cycle_count()
bool random_bytes(uint8_t *data, size_t len)
Generate len number of random bytes.
void IRAM_ATTR HOT delayMicroseconds(uint32_t us)
void IRAM_ATTR HOT yield()
uint32_t arch_get_cpu_freq_hz()
uint32_t IRAM_ATTR HOT micros()
uint32_t random_uint32()
Return a random 32-bit unsigned integer.
void IRAM_ATTR HOT arch_feed_wdt()
void get_mac_address_raw(uint8_t *mac)
Get the device MAC address as raw bytes, written into the provided byte array (6 bytes).
void IRAM_ATTR HOT delay(uint32_t ms)
uint32_t IRAM_ATTR HOT millis()
uint8_t progmem_read_byte(const uint8_t *addr)