RadioLib
Universal wireless communication library for Arduino
Loading...
Searching...
No Matches
EspHal.h
1// EspHal.h
2// ESP-IDF HAL for RadioLib using spi_master driver
3// This avoids conflicts with other SPI devices on the same bus
4
5#if !defined(_RADIOLIB_ESP_IDF_HAL_H)
6#define _RADIOLIB_ESP_IDF_HAL_H
7
8// Only expose the native ESP-IDF HAL for pure ESP-IDF targets. Arduino builds
9// (Arduino-ESP32 also defines ESP_PLATFORM) use ArduinoHal instead. Note this
10// guard runs before RadioLib.h is included, so it must test the compiler's
11// predefined ARDUINO macro directly rather than RADIOLIB_BUILD_ARDUINO.
12#if defined(ESP_PLATFORM) && !defined(ARDUINO)
13#include "RadioLib.h"
14#include "driver/spi_master.h"
15
16// RADIOLIB_ESP32 is now set by BuildOpt.h for ESP_PLATFORM builds.
17// RADIOLIB_TONE_ESP32_CHANNEL stays here because LEDC_CHANNEL_0 is only
18// visible via driver/ledc.h, which BuildOpt.h does not pull in.
19#if !defined(RADIOLIB_TONE_ESP32_CHANNEL)
20#define RADIOLIB_TONE_ESP32_CHANNEL (LEDC_CHANNEL_0)
21#endif
22
28class EspHal : public RadioLibHal {
29public:
40 EspHal(int8_t sck, int8_t miso, int8_t mosi,
41 spi_host_device_t host = SPI2_HOST, uint32_t clockHz = 2000000);
42
43 virtual ~EspHal();
44
45 // implementations of pure virtual RadioLibHal methods
46 void pinMode(uint32_t pin, uint32_t mode) override;
47 void digitalWrite(uint32_t pin, uint32_t value) override;
48 uint32_t digitalRead(uint32_t pin) override;
49 void attachInterrupt(uint32_t interruptNum, void (*interruptCb)(void),
50 uint32_t mode) override;
51 void detachInterrupt(uint32_t interruptNum) override;
52 void delay(unsigned long ms) override;
53 void delayMicroseconds(unsigned long us) override;
54 unsigned long millis() override;
55 unsigned long micros() override;
56 long pulseIn(uint32_t pin, uint32_t state, unsigned long timeout) override;
57 void spiBegin();
59 void spiTransfer(uint8_t *out, size_t len, uint8_t *in);
60 void spiEndTransaction();
61 void spiEnd();
62
63 // implementations of virtual RadioLibHal methods
64 void init() override;
65 void term() override;
66 void tone(uint32_t pin, unsigned int frequency,
67 RadioLibTime_t duration = 0) override;
68 void noTone(uint32_t pin) override;
69 void yield() override;
70 void pullUpDown(uint32_t pin, bool enable, bool up) override;
71
72private:
73 int8_t spiSCK;
74 int8_t spiMISO;
75 int8_t spiMOSI;
76 spi_host_device_t spiHost;
77 uint32_t spiClockHz;
78 spi_device_handle_t spiDevice;
79 bool busInitialized;
80 bool deviceAdded;
81 bool halInitialized;
82 int32_t tonePrevFreq;
83};
84#endif // ESP_PLATFORM && !ARDUINO
85#endif // _RADIOLIB_ESP_IDF_HAL_H
Hardware abstraction library base interface.
Definition Hal.h:18
virtual uint32_t digitalRead(uint32_t pin)=0
Digital read method. Must be implemented by the platform-specific hardware abstraction!
virtual void yield()
Yield method, called from long loops in multi-threaded environment (to prevent blocking other threads...
Definition Hal.cpp:35
virtual void detachInterrupt(uint32_t interruptNum)=0
Method to detach function from an external interrupt. Must be implemented by the platform-specific ha...
virtual long pulseIn(uint32_t pin, uint32_t state, RadioLibTime_t timeout)=0
Measure the length of incoming digital pulse in microseconds. Must be implemented by the platform-spe...
virtual void spiEnd()=0
SPI termination method.
virtual void init()
Module initialization method. This will be called by all radio modules at the beginning of startup....
Definition Hal.cpp:17
virtual RadioLibTime_t millis()=0
Get number of milliseconds since start. Must be implemented by the platform-specific hardware abstrac...
virtual void digitalWrite(uint32_t pin, uint32_t value)=0
Digital write method. Must be implemented by the platform-specific hardware abstraction!
virtual void tone(uint32_t pin, unsigned int frequency, RadioLibTime_t duration=0)
Method to produce a square-wave with 50% duty cycle ("tone") of a given frequency at some pin.
Definition Hal.cpp:25
virtual RadioLibTime_t micros()=0
Get number of microseconds since start. Must be implemented by the platform-specific hardware abstrac...
virtual void spiEndTransaction()=0
Method to end SPI transaction.
virtual void noTone(uint32_t pin)
Method to stop producing a tone.
Definition Hal.cpp:31
virtual void spiBegin()=0
SPI initialization method.
virtual void delay(RadioLibTime_t ms)=0
Blocking wait function. Must be implemented by the platform-specific hardware abstraction!
virtual void term()
Module termination method. This will be called by all radio modules when the destructor is called....
Definition Hal.cpp:21
virtual void delayMicroseconds(RadioLibTime_t us)=0
Blocking microsecond wait function. Must be implemented by the platform-specific hardware abstraction...
virtual void spiBeginTransaction()=0
Method to start SPI transaction.
virtual void pullUpDown(uint32_t pin, bool enable, bool up)
Enable or disable pull up or pull down for a specific pin.
Definition Hal.cpp:43
virtual void spiTransfer(uint8_t *out, size_t len, uint8_t *in)=0
Method to transfer buffer over SPI.
virtual void pinMode(uint32_t pin, uint32_t mode)=0
GPIO pin mode (input/output/...) configuration method. Must be implemented by the platform-specific h...
virtual void attachInterrupt(uint32_t interruptNum, void(*interruptCb)(void), uint32_t mode)=0
Method to attach function to an external interrupt. Must be implemented by the platform-specific hard...
unsigned long RadioLibTime_t
Type used for durations in RadioLib.
Definition TypeDef.h:679