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 
15  public:
16 
17  // constructor
18 
26  PhysicalLayer(float freqStep, size_t maxPacketLength);
27 
28  // basic methods
29 
39  int16_t transmit(__FlashStringHelper* fstr, uint8_t addr = 0);
40 
50  int16_t transmit(String& str, uint8_t addr = 0);
51 
61  int16_t transmit(const char* str, uint8_t addr = 0);
62 
74  virtual int16_t transmit(uint8_t* data, size_t len, uint8_t addr = 0);
75 
85  int16_t receive(String& str, size_t len = 0);
86 
92  virtual int16_t sleep();
93 
99  virtual int16_t standby();
100 
106  virtual int16_t standby(uint8_t mode);
107 
119  virtual int16_t startReceive(uint32_t timeout = 0, uint16_t irqFlags = 0, uint16_t irqMask = 0);
120 
130  virtual int16_t receive(uint8_t* data, size_t len);
131 
142  int16_t startTransmit(String& str, uint8_t addr = 0);
143 
154  int16_t startTransmit(const char* str, uint8_t addr = 0);
155 
167  virtual int16_t startTransmit(uint8_t* data, size_t len, uint8_t addr = 0);
168 
174  virtual int16_t finishTransmit();
175 
186  int16_t readData(String& str, size_t len = 0);
187 
198  virtual int16_t readData(uint8_t* data, size_t len);
199 
208  virtual int16_t transmitDirect(uint32_t frf = 0);
209 
216  virtual int16_t receiveDirect();
217 
218  // configuration methods
219 
227  virtual int16_t setFrequency(float freq);
228 
236  virtual int16_t setBitRate(float br);
237 
245  virtual int16_t setFrequencyDeviation(float freqDev);
246 
254  virtual int16_t setDataShaping(uint8_t sh);
255 
263  virtual int16_t setEncoding(uint8_t encoding);
264 
270  float getFreqStep() const;
271 
279  virtual size_t getPacketLength(bool update = true);
280 
286  virtual float getRSSI();
287 
293  virtual float getSNR();
294 
302  int32_t random(int32_t max);
303 
313  int32_t random(int32_t min, int32_t max);
314 
320  virtual uint8_t randomByte();
321 
327  int16_t startDirect();
328 
329  #if !defined(RADIOLIB_EXCLUDE_DIRECT_RECEIVE)
339  int16_t setDirectSyncWord(uint32_t syncWord, uint8_t len);
340 
346  virtual void setDirectAction(void (*func)(void));
347 
353  virtual void readBit(RADIOLIB_PIN_TYPE pin);
354 
360  int16_t available();
361 
365  void dropSync();
366 
374  uint8_t read(bool drop = true);
375  #endif
376 
386  virtual int16_t setDIOMapping(RADIOLIB_PIN_TYPE pin, uint8_t value);
387 
393  virtual void setDio1Action(void (*func)(void));
394 
398  virtual void clearDio1Action();
399 
400  #if defined(RADIOLIB_INTERRUPT_TIMING)
401 
408  void setInterruptSetup(void (*func)(uint32_t));
409 
414  void setTimerFlag();
415 
416  #endif
417 
418 #if !defined(RADIOLIB_EXCLUDE_DIRECT_RECEIVE)
419  protected:
420  void updateDirectBuffer(uint8_t bit);
421 #endif
422 
423 #if !defined(RADIOLIB_GODMODE)
424  private:
425 #endif
426  float _freqStep;
427  size_t _maxPacketLength;
428 
429  #if !defined(RADIOLIB_EXCLUDE_DIRECT_RECEIVE)
430  uint8_t _bufferBitPos;
431  uint8_t _bufferWritePos;
432  uint8_t _bufferReadPos;
433  uint8_t _buffer[RADIOLIB_STATIC_ARRAY_SIZE];
434  uint32_t _syncBuffer;
435  uint32_t _directSyncWord;
436  uint8_t _directSyncWordLen;
437  uint32_t _directSyncWordMask;
438  bool _gotSync;
439  #endif
440 
441  virtual Module* getMod() = 0;
442 
443  // allow specific classes access the private getMod method
444  friend class AFSKClient;
445  friend class RTTYClient;
446  friend class MorseClient;
447  friend class HellClient;
448  friend class SSTVClient;
449  friend class AX25Client;
450  friend class FSK4Client;
451  friend class PagerClient;
452 };
453 
454 #endif
Client for audio-based transmissions. Requires Arduino tone() function, and a module capable of direc...
Definition: AFSK.h:17
Client for AX25 communication.
Definition: AX25.h:279
Client for FSK-4 communication. The public interface is the same as Arduino Serial.
Definition: FSK4.h:16
Client for Hellschreiber transmissions.
Definition: Hellschreiber.h:89
Implements all common low-level methods to control the wireless module. Every module class contains o...
Definition: Module.h:24
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:69
Provides common interface for protocols that run on LoRa/FSK modules, such as RTTY or LoRaWAN....
Definition: PhysicalLayer.h:14
virtual uint8_t randomByte()
Get one truly random byte from RSSI noise. Must be implemented in module class.
Definition: PhysicalLayer.cpp:280
virtual int16_t finishTransmit()
Clean up after transmission is done.
Definition: PhysicalLayer.cpp:148
virtual int16_t setFrequencyDeviation(float freqDev)
Sets FSK frequency deviation from carrier frequency. Only available in FSK mode. Must be implemented ...
Definition: PhysicalLayer.cpp:220
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:239
void dropSync()
Forcefully drop synchronization.
Definition: PhysicalLayer.cpp:303
virtual int16_t setDIOMapping(RADIOLIB_PIN_TYPE pin, uint8_t value)
Configure DIO pin mapping to get a given signal on a DIO pin (if available).
Definition: PhysicalLayer.cpp:381
uint8_t read(bool drop=true)
Get data from direct mode buffer.
Definition: PhysicalLayer.cpp:310
PhysicalLayer(float freqStep, size_t maxPacketLength)
Default constructor.
Definition: PhysicalLayer.cpp:3
virtual void setDio1Action(void(*func)(void))
Sets interrupt service routine to call when DIO1 activates.
Definition: PhysicalLayer.cpp:387
virtual int16_t startReceive(uint32_t timeout=0, uint16_t irqFlags=0, uint16_t irqMask=0)
Interrupt-driven receive method. DIO1 will be activated when full packet is received.
Definition: PhysicalLayer.cpp:126
int16_t startDirect()
Configure module parameters for direct modes. Must be called prior to "ham" modes like RTTY or AX....
Definition: PhysicalLayer.cpp:284
virtual int16_t setFrequency(float freq)
Sets carrier frequency. Must be implemented in module class.
Definition: PhysicalLayer.cpp:210
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:318
float getFreqStep() const
Gets the module frequency step size that was set in constructor.
Definition: PhysicalLayer.cpp:235
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:201
virtual float getRSSI()
Gets RSSI (Recorded Signal Strength Indicator) of the last received packet.
Definition: PhysicalLayer.cpp:244
int16_t transmit(__FlashStringHelper *fstr, uint8_t addr=0)
Arduino Flash String transmit method.
Definition: PhysicalLayer.cpp:12
int16_t available()
Get the number of direct mode bytes currently available in buffer.
Definition: PhysicalLayer.cpp:299
virtual void setDirectAction(void(*func)(void))
Set interrupt service routine function to call when data bit is receveid in direct mode....
Definition: PhysicalLayer.cpp:371
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:230
virtual int16_t standby()
Sets module to standby.
Definition: PhysicalLayer.cpp:117
int32_t random(int32_t max)
Get truly random number in range 0 - max.
Definition: PhysicalLayer.cpp:252
virtual void clearDio1Action()
Clears interrupt service routine to call when DIO1 activates.
Definition: PhysicalLayer.cpp:391
virtual int16_t receiveDirect()
Enables direct reception mode on pins DIO1 (clock) and DIO2 (data). Must be implemented in module cla...
Definition: PhysicalLayer.cpp:206
virtual void readBit(RADIOLIB_PIN_TYPE pin)
Function to read and process data bit in direct reception mode. Must be implemented in module class.
Definition: PhysicalLayer.cpp:375
int16_t readData(String &str, size_t len=0)
Reads data that was received after calling startReceive method.
Definition: PhysicalLayer.cpp:152
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:225
virtual int16_t setBitRate(float br)
Sets FSK bit rate. Only available in FSK mode. Must be implemented in module class.
Definition: PhysicalLayer.cpp:215
virtual float getSNR()
Gets SNR (Signal to Noise Ratio) of the last received packet. Only available for LoRa modem.
Definition: PhysicalLayer.cpp:248
int16_t startTransmit(String &str, uint8_t addr=0)
Interrupt-driven Arduino String transmit method. Unlike the standard transmit method,...
Definition: PhysicalLayer.cpp:133
virtual int16_t sleep()
Sets module to sleep.
Definition: PhysicalLayer.cpp:113
int16_t receive(String &str, size_t len=0)
Arduino String receive method.
Definition: PhysicalLayer.cpp:60
Client for RTTY communication. The public interface is the same as Arduino Serial.
Definition: RTTY.h:88
Client for SSTV transmissions.
Definition: SSTV.h:120