RadioLib
Universal wireless communication library for Arduino
PhysicalLayer.h
1 #if !defined(_RADIOLIB_PHYSICAL_LAYER_H)
2 #define _RADIOLIB_PHYSICAL_LAYER_H
3 
4 #include "../../TypeDef.h"
5 #include "../../Module.h"
6 
16  public:
17 
18  // constructor
19 
25  PhysicalLayer(float step, size_t maxLen);
26 
27  // basic methods
28 
29  #if defined(RADIOLIB_BUILD_ARDUINO)
36  int16_t transmit(__FlashStringHelper* fstr, uint8_t addr = 0);
37 
44  int16_t transmit(String& str, uint8_t addr = 0);
45  #endif
46 
53  int16_t transmit(const char* str, uint8_t addr = 0);
54 
62  virtual int16_t transmit(uint8_t* data, size_t len, uint8_t addr = 0);
63 
64  #if defined(RADIOLIB_BUILD_ARDUINO)
71  int16_t receive(String& str, size_t len = 0);
72  #endif
73 
78  virtual int16_t sleep();
79 
84  virtual int16_t standby();
85 
90  virtual int16_t standby(uint8_t mode);
91 
96  virtual int16_t startReceive();
97 
108  virtual int16_t startReceive(uint32_t timeout, uint16_t irqFlags, uint16_t irqMask, size_t len);
109 
116  virtual int16_t receive(uint8_t* data, size_t len);
117 
118  #if defined(RADIOLIB_BUILD_ARDUINO)
126  int16_t startTransmit(String& str, uint8_t addr = 0);
127  #endif
128 
136  int16_t startTransmit(const char* str, uint8_t addr = 0);
137 
145  virtual int16_t startTransmit(uint8_t* data, size_t len, uint8_t addr = 0);
146 
151  virtual int16_t finishTransmit();
152 
153  #if defined(RADIOLIB_BUILD_ARDUINO)
161  int16_t readData(String& str, size_t len = 0);
162  #endif
163 
171  virtual int16_t readData(uint8_t* data, size_t len);
172 
179  virtual int16_t transmitDirect(uint32_t frf = 0);
180 
186  virtual int16_t receiveDirect();
187 
188  // configuration methods
189 
195  virtual int16_t setFrequency(float freq);
196 
202  virtual int16_t setBitRate(float br);
203 
210  virtual int16_t setFrequencyDeviation(float freqDev);
211 
217  virtual int16_t setDataShaping(uint8_t sh);
218 
224  virtual int16_t setEncoding(uint8_t encoding);
225 
230  float getFreqStep() const;
231 
237  virtual size_t getPacketLength(bool update = true);
238 
243  virtual float getRSSI();
244 
249  virtual float getSNR();
250 
256  int32_t random(int32_t max);
257 
264  int32_t random(int32_t min, int32_t max);
265 
270  virtual uint8_t randomByte();
271 
277  int16_t startDirect();
278 
279  #if !defined(RADIOLIB_EXCLUDE_DIRECT_RECEIVE)
286  int16_t setDirectSyncWord(uint32_t syncWord, uint8_t len);
287 
293  virtual void setDirectAction(void (*func)(void));
294 
299  virtual void readBit(uint32_t pin);
300 
305  int16_t available();
306 
310  void dropSync();
311 
318  uint8_t read(bool drop = true);
319  #endif
320 
327  virtual int16_t setDIOMapping(uint32_t pin, uint32_t value);
328 
333  virtual void setDio1Action(void (*func)(void));
334 
338  virtual void clearDio1Action();
339 
340  #if defined(RADIOLIB_INTERRUPT_TIMING)
341 
347  void setInterruptSetup(void (*func)(uint32_t));
348 
353  void setTimerFlag();
354 
355  #endif
356 
357 #if !defined(RADIOLIB_EXCLUDE_DIRECT_RECEIVE)
358  protected:
359  void updateDirectBuffer(uint8_t bit);
360 #endif
361 
362 #if !defined(RADIOLIB_GODMODE)
363  private:
364 #endif
365  float freqStep;
366  size_t maxPacketLength;
367 
368  #if !defined(RADIOLIB_EXCLUDE_DIRECT_RECEIVE)
369  uint8_t bufferBitPos;
370  uint8_t bufferWritePos;
371  uint8_t bufferReadPos;
372  uint8_t buffer[RADIOLIB_STATIC_ARRAY_SIZE];
373  uint32_t syncBuffer;
374  uint32_t directSyncWord;
375  uint8_t directSyncWordLen;
376  uint32_t directSyncWordMask;
377  bool gotSync;
378  #endif
379 
380  virtual Module* getMod() = 0;
381 
382  // allow specific classes access the private getMod method
383  friend class AFSKClient;
384  friend class RTTYClient;
385  friend class MorseClient;
386  friend class HellClient;
387  friend class SSTVClient;
388  friend class AX25Client;
389  friend class FSK4Client;
390  friend class PagerClient;
391  friend class BellClient;
392  friend class FT8Client;
393  friend class LoRaWANNode;
394 };
395 
396 #endif
Client for audio-based transmissions. Requires Arduino tone() function, and a module capable of direc...
Definition: AFSK.h:16
Client for AX25 communication.
Definition: AX25.h:238
Client for Bell modem communication. The public interface is the same as Arduino Serial.
Definition: BellModem.h:57
Client for FSK-4 communication. The public interface is the same as Arduino Serial.
Definition: FSK4.h:15
Client for Hellschreiber transmissions.
Definition: Hellschreiber.h:90
Implements all common low-level methods to control the wireless module. Every module class contains o...
Definition: Module.h:31
Client for Morse Code communication. The public interface is the same as Arduino Serial.
Definition: Morse.h:93
Client for Pager communication.
Definition: Pager.h:62
Provides common interface for protocols that run on LoRa/FSK modules, such as RTTY or LoRaWAN....
Definition: PhysicalLayer.h:15
virtual int16_t startReceive()
Sets module to received mode using its default configuration.
Definition: PhysicalLayer.cpp:131
virtual uint8_t randomByte()
Get one truly random byte from RSSI noise. Must be implemented in module class.
Definition: PhysicalLayer.cpp:293
virtual int16_t finishTransmit()
Clean up after transmission is done.
Definition: PhysicalLayer.cpp:160
virtual int16_t setFrequencyDeviation(float freqDev)
Sets FSK frequency deviation from carrier frequency. Only available in FSK mode. Must be implemented ...
Definition: PhysicalLayer.cpp:234
virtual size_t getPacketLength(bool update=true)
Query modem for the packet length of received payload. Must be implemented in module class.
Definition: PhysicalLayer.cpp:253
virtual int16_t setDIOMapping(uint32_t pin, uint32_t value)
Configure DIO pin mapping to get a given signal on a DIO pin (if available).
Definition: PhysicalLayer.cpp:392
virtual int16_t readData(uint8_t *data, size_t len)
Reads data that was received after calling startReceive method.
Definition: PhysicalLayer.cpp:209
void dropSync()
Forcefully drop synchronization.
Definition: PhysicalLayer.cpp:316
int16_t transmit(const char *str, uint8_t addr=0)
C-string transmit method.
Definition: PhysicalLayer.cpp:52
uint8_t read(bool drop=true)
Get data from direct mode buffer.
Definition: PhysicalLayer.cpp:323
virtual void setDio1Action(void(*func)(void))
Sets interrupt service routine to call when DIO1 activates.
Definition: PhysicalLayer.cpp:398
int16_t startDirect()
Configure module parameters for direct modes. Must be called prior to "ham" modes like RTTY or AX....
Definition: PhysicalLayer.cpp:297
virtual int16_t setFrequency(float freq)
Sets carrier frequency. Must be implemented in module class.
Definition: PhysicalLayer.cpp:224
int16_t setDirectSyncWord(uint32_t syncWord, uint8_t len)
Set sync word to be used to determine start of packet in direct reception mode.
Definition: PhysicalLayer.cpp:331
int16_t startTransmit(const char *str, uint8_t addr=0)
Interrupt-driven Arduino String transmit method. Unlike the standard transmit method,...
Definition: PhysicalLayer.cpp:149
float getFreqStep() const
Gets the module frequency step size that was set in constructor.
Definition: PhysicalLayer.cpp:249
virtual int16_t transmitDirect(uint32_t frf=0)
Enables direct transmission mode on pins DIO1 (clock) and DIO2 (data). Must be implemented in module ...
Definition: PhysicalLayer.cpp:215
virtual float getRSSI()
Gets RSSI (Recorded Signal Strength Indicator) of the last received packet.
Definition: PhysicalLayer.cpp:258
int16_t available()
Get the number of direct mode bytes currently available in buffer.
Definition: PhysicalLayer.cpp:312
virtual int16_t receive(uint8_t *data, size_t len)
Binary receive method. Must be implemented in module class.
Definition: PhysicalLayer.cpp:112
virtual void setDirectAction(void(*func)(void))
Set interrupt service routine function to call when data bit is receveid in direct mode....
Definition: PhysicalLayer.cpp:382
virtual int16_t setEncoding(uint8_t encoding)
Sets FSK data encoding. Only available in FSK mode. Must be implemented in module class.
Definition: PhysicalLayer.cpp:244
virtual int16_t standby()
Sets module to standby.
Definition: PhysicalLayer.cpp:122
int32_t random(int32_t max)
Get truly random number in range 0 - max.
Definition: PhysicalLayer.cpp:266
virtual void readBit(uint32_t pin)
Function to read and process data bit in direct reception mode. Must be implemented in module class.
Definition: PhysicalLayer.cpp:386
virtual void clearDio1Action()
Clears interrupt service routine to call when DIO1 activates.
Definition: PhysicalLayer.cpp:402
virtual int16_t receiveDirect()
Enables direct reception mode on pins DIO1 (clock) and DIO2 (data). Must be implemented in module cla...
Definition: PhysicalLayer.cpp:220
PhysicalLayer(float step, size_t maxLen)
Default constructor.
Definition: PhysicalLayer.cpp:4
virtual int16_t setDataShaping(uint8_t sh)
Sets GFSK data shaping. Only available in FSK mode. Must be implemented in module class.
Definition: PhysicalLayer.cpp:239
virtual int16_t setBitRate(float br)
Sets FSK bit rate. Only available in FSK mode. Must be implemented in module class.
Definition: PhysicalLayer.cpp:229
virtual float getSNR()
Gets SNR (Signal to Noise Ratio) of the last received packet. Only available for LoRa modem.
Definition: PhysicalLayer.cpp:262
virtual int16_t sleep()
Sets module to sleep.
Definition: PhysicalLayer.cpp:118
Client for RTTY communication. The public interface is the same as Arduino Serial.
Definition: RTTY.h:17
Client for SSTV transmissions.
Definition: SSTV.h:117