mirror of
https://github.com/manuelbl/ttn-esp32.git
synced 2025-07-17 16:12:52 +02:00
More transformation to C++
This commit is contained in:
@ -14,33 +14,81 @@
|
||||
#define _hal_esp32_h_
|
||||
|
||||
#include <stdint.h>
|
||||
#include <freertos/FreeRTOS.h>
|
||||
#include <freertos/queue.h>
|
||||
#include "driver/spi_master.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef struct lmic_pinmap {
|
||||
spi_host_device_t spi_host;
|
||||
uint8_t nss;
|
||||
uint8_t rxtx;
|
||||
uint8_t rst;
|
||||
uint8_t dio0;
|
||||
uint8_t dio1;
|
||||
int8_t rssi_cal; // cal in dB -- added to RSSI measured prior to decision. Must include noise guardband!
|
||||
} lmic_pinmap;
|
||||
typedef struct lmic_pinmap {
|
||||
spi_host_device_t spi_host;
|
||||
uint8_t nss;
|
||||
uint8_t rxtx;
|
||||
uint8_t rst;
|
||||
uint8_t dio0;
|
||||
uint8_t dio1;
|
||||
int8_t rssi_cal; // cal in dB -- added to RSSI measured prior to decision. Must include noise guardband!
|
||||
} lmic_pinmap;
|
||||
|
||||
extern lmic_pinmap lmic_pins;
|
||||
extern lmic_pinmap lmic_pins;
|
||||
|
||||
void hal_startBgTask();
|
||||
void hal_wakeUp();
|
||||
void hal_initCriticalSection();
|
||||
void hal_enterCriticalSection();
|
||||
void hal_leaveCriticalSection();
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
enum HAL_Event {
|
||||
DIO0 = 0,
|
||||
DIO1,
|
||||
DIO2,
|
||||
TIMER,
|
||||
WAKEUP
|
||||
};
|
||||
|
||||
|
||||
enum WaitKind {
|
||||
CHECK_IO,
|
||||
WAIT_FOR_ANY_EVENT,
|
||||
WAIT_FOR_TIMER
|
||||
};
|
||||
|
||||
|
||||
|
||||
class HAL_ESP32
|
||||
{
|
||||
public:
|
||||
HAL_ESP32();
|
||||
|
||||
void init();
|
||||
void startBackgroundTask();
|
||||
void wakeUp();
|
||||
void initCriticalSection();
|
||||
void enterCriticalSection();
|
||||
void leaveCriticalSection();
|
||||
void spiWrite(uint8_t cmd, const uint8_t *buf, int len);
|
||||
void spiRead(uint8_t cmd, uint8_t *buf, int len);
|
||||
uint8_t checkTimer(uint32_t time);
|
||||
void sleep();
|
||||
void waitUntil(uint32_t time);
|
||||
|
||||
private:
|
||||
static void backgroundTask(void* pvParameter);
|
||||
static void dioIrqHandler(void* arg);
|
||||
void ioInit();
|
||||
void spiInit();
|
||||
void timerInit();
|
||||
void prepareNextAlarm(uint32_t time);
|
||||
void armTimer();
|
||||
void disarmTimer();
|
||||
static void IRAM_ATTR timerIrqHandler(void *arg);
|
||||
bool wait(WaitKind waitKind);
|
||||
|
||||
QueueHandle_t dioQueue;
|
||||
spi_device_handle_t spiHandle;
|
||||
spi_transaction_t spiTransaction;
|
||||
uint64_t nextTimerEvent;
|
||||
SemaphoreHandle_t mutex;
|
||||
};
|
||||
|
||||
extern HAL_ESP32 ttn_hal;
|
||||
|
||||
|
||||
#endif // _hal_esp32_h_
|
Reference in New Issue
Block a user