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) = 0;
75 
85  int16_t receive(String& str, size_t len = 0);
86 
92  virtual int16_t standby() = 0;
93 
103  virtual int16_t receive(uint8_t* data, size_t len) = 0;
104 
115  int16_t startTransmit(String& str, uint8_t addr = 0);
116 
127  int16_t startTransmit(const char* str, uint8_t addr = 0);
128 
140  virtual int16_t startTransmit(uint8_t* data, size_t len, uint8_t addr = 0) = 0;
141 
147  virtual int16_t finishTransmit() = 0;
148 
159  int16_t readData(String& str, size_t len = 0);
160 
171  virtual int16_t readData(uint8_t* data, size_t len) = 0;
172 
181  virtual int16_t transmitDirect(uint32_t frf = 0) = 0;
182 
189  virtual int16_t receiveDirect() = 0;
190 
191  // configuration methods
192 
200  virtual int16_t setFrequency(float freq) = 0;
201 
209  virtual int16_t setBitRate(float br) = 0;
210 
218  virtual int16_t setFrequencyDeviation(float freqDev) = 0;
219 
227  virtual int16_t setDataShaping(uint8_t sh) = 0;
228 
236  virtual int16_t setEncoding(uint8_t encoding) = 0;
237 
243  float getFreqStep() const;
244 
252  virtual size_t getPacketLength(bool update = true) = 0;
253 
261  int32_t random(int32_t max);
262 
272  int32_t random(int32_t min, int32_t max);
273 
279  virtual uint8_t randomByte() = 0;
280 
286  int16_t startDirect();
287 
288  #if !defined(RADIOLIB_EXCLUDE_DIRECT_RECEIVE)
289 
298  int16_t setDirectSyncWord(uint32_t syncWord, uint8_t len);
299 
305  virtual void setDirectAction(void (*func)(void)) = 0;
306 
312  virtual void readBit(RADIOLIB_PIN_TYPE pin) = 0;
313 
319  int16_t available();
320 
326  uint8_t read();
327  #endif
328 
338  virtual int16_t setDIOMapping(RADIOLIB_PIN_TYPE pin, uint8_t value);
339 
340 #if !defined(RADIOLIB_EXCLUDE_DIRECT_RECEIVE)
341  protected:
342  void updateDirectBuffer(uint8_t bit);
343 #endif
344 
345 #if !defined(RADIOLIB_GODMODE)
346  private:
347 #endif
348  float _freqStep;
349  size_t _maxPacketLength;
350 
351  #if !defined(RADIOLIB_EXCLUDE_DIRECT_RECEIVE)
352  uint8_t _bufferBitPos;
353  uint8_t _bufferWritePos;
354  uint8_t _bufferReadPos;
355  uint8_t _buffer[RADIOLIB_STATIC_ARRAY_SIZE];
356  uint32_t _syncBuffer;
357  uint32_t _directSyncWord;
358  uint8_t _directSyncWordLen;
359  uint32_t _directSyncWordMask;
360  bool _gotSync;
361  #endif
362 
363  virtual Module* getMod() = 0;
364 
365  // allow specific classes access the private getMod method
366  friend class AFSKClient;
367  friend class RTTYClient;
368  friend class MorseClient;
369  friend class HellClient;
370  friend class SSTVClient;
371  friend class AX25Client;
372  friend class FSK4Client;
373  friend class PagerClient;
374 };
375 
376 #endif
PhysicalLayer::transmit
int16_t transmit(__FlashStringHelper *fstr, uint8_t addr=0)
Arduino Flash String transmit method.
Definition: PhysicalLayer.cpp:12
PhysicalLayer::standby
virtual int16_t standby()=0
Sets module to standby.
PhysicalLayer::setBitRate
virtual int16_t setBitRate(float br)=0
Sets FSK bit rate. Only available in FSK mode. Must be implemented in module class.
PhysicalLayer::setFrequencyDeviation
virtual int16_t setFrequencyDeviation(float freqDev)=0
Sets FSK frequency deviation from carrier frequency. Only available in FSK mode. Must be implemented ...
PhysicalLayer::setFrequency
virtual int16_t setFrequency(float freq)=0
Sets carrier frequency. Must be implemented in module class.
HellClient
Client for Hellschreiber transmissions.
Definition: Hellschreiber.h:89
PhysicalLayer::setEncoding
virtual int16_t setEncoding(uint8_t encoding)=0
Sets FSK data encoding. Only available in FSK mode. Must be implemented in module class.
PhysicalLayer::transmitDirect
virtual int16_t transmitDirect(uint32_t frf=0)=0
Enables direct transmission mode on pins DIO1 (clock) and DIO2 (data). Must be implemented in module ...
PhysicalLayer::available
int16_t available()
Get the number of direct mode bytes currently available in buffer.
Definition: PhysicalLayer.cpp:194
AFSKClient
Client for audio-based transmissions. Requires Arduino tone() function, and a module capable of direc...
Definition: AFSK.h:17
AX25Client
Client for AX25 communication.
Definition: AX25.h:279
PhysicalLayer::setDirectAction
virtual void setDirectAction(void(*func)(void))=0
Set interrupt service routine function to call when data bit is receveid in direct mode....
PhysicalLayer::readBit
virtual void readBit(RADIOLIB_PIN_TYPE pin)=0
Function to read and process data bit in direct reception mode. Must be implemented in module class.
PhysicalLayer::readData
int16_t readData(String &str, size_t len=0)
Reads data that was received after calling startReceive method.
Definition: PhysicalLayer.cpp:61
PhysicalLayer::receiveDirect
virtual int16_t receiveDirect()=0
Enables direct reception mode on pins DIO1 (clock) and DIO2 (data). Must be implemented in module cla...
PhysicalLayer::read
uint8_t read()
Get data from direct mode buffer.
Definition: PhysicalLayer.cpp:198
PhysicalLayer::finishTransmit
virtual int16_t finishTransmit()=0
Clean up after transmission is done.
PhysicalLayer::PhysicalLayer
PhysicalLayer(float freqStep, size_t maxPacketLength)
Default constructor.
Definition: PhysicalLayer.cpp:3
PhysicalLayer::startDirect
int16_t startDirect()
Configure module parameters for direct modes. Must be called prior to "ham" modes like RTTY or AX....
Definition: PhysicalLayer.cpp:179
PagerClient
Client for Pager communication.
Definition: Pager.h:69
MorseClient
Client for Morse Code communication. The public interface is the same as Arduino Serial.
Definition: Morse.h:93
PhysicalLayer::randomByte
virtual uint8_t randomByte()=0
Get one truly random byte from RSSI noise. Must be implemented in module class.
PhysicalLayer::random
int32_t random(int32_t max)
Get truly random number in range 0 - max.
Definition: PhysicalLayer.cpp:151
PhysicalLayer::setDIOMapping
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:254
PhysicalLayer
Provides common interface for protocols that run on LoRa/FSK modules, such as RTTY or LoRaWAN....
Definition: PhysicalLayer.h:14
PhysicalLayer::receive
int16_t receive(String &str, size_t len=0)
Arduino String receive method.
Definition: PhysicalLayer.cpp:102
RTTYClient
Client for RTTY communication. The public interface is the same as Arduino Serial.
Definition: RTTY.h:88
PhysicalLayer::getPacketLength
virtual size_t getPacketLength(bool update=true)=0
Query modem for the packet length of received payload. Must be implemented in module class.
SSTVClient
Client for SSTV transmissions.
Definition: SSTV.h:120
Module
Implements all common low-level methods to control the wireless module. Every module class contains o...
Definition: Module.h:16
PhysicalLayer::setDirectSyncWord
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:207
FSK4Client
Client for FSK-4 communication. The public interface is the same as Arduino Serial.
Definition: FSK4.h:16
PhysicalLayer::getFreqStep
float getFreqStep() const
Gets the module frequency step size that was set in constructor.
Definition: PhysicalLayer.cpp:147
PhysicalLayer::setDataShaping
virtual int16_t setDataShaping(uint8_t sh)=0
Sets GFSK data shaping. Only available in FSK mode. Must be implemented in module class.
PhysicalLayer::startTransmit
int16_t startTransmit(String &str, uint8_t addr=0)
Interrupt-driven Arduino String transmit method. Unlike the standard transmit method,...
Definition: PhysicalLayer.cpp:53