RadioLib
Universal wireless communication library for Arduino
Morse.h
1 #if !defined(_RADIOLIB_MORSE_H) && !defined(RADIOLIB_EXCLUDE_MORSE)
2 #define _RADIOLIB_MORSE_H
3 
4 #include "../../TypeDef.h"
5 #include "../PhysicalLayer/PhysicalLayer.h"
6 #include "../AFSK/AFSK.h"
7 
8 #define MORSE_DOT 0b0
9 #define MORSE_DASH 0b1
10 #define MORSE_GUARDBIT 0b1
11 #define MORSE_UNSUPORTED 0xFF
12 
13 // Morse character table: - using codes defined in ITU-R M.1677-1
14 // - Morse code representation is saved LSb first, using additional bit as guard
15 // - position in array corresponds ASCII code minus MORSE_ASCII_OFFSET
16 // - ASCII characters marked MORSE_UNSUPORTED do not have ITU-R M.1677-1 equivalent
17 static const uint8_t MorseTable[] RADIOLIB_PROGMEM = {
18  0b00, // space
19  0b110101, // ! (unsupported)
20  0b1010010, // "
21  MORSE_UNSUPORTED, // # (unsupported)
22  MORSE_UNSUPORTED, // $ (unsupported)
23  MORSE_UNSUPORTED, // % (unsupported)
24  MORSE_UNSUPORTED, // & (unsupported)
25  0b1011110, // '
26  0b101101, // (
27  0b1101101, // )
28  MORSE_UNSUPORTED, // * (unsupported)
29  0b101010, // +
30  0b1110011, // ,
31  0b1100001, // -
32  0b1101010, // .
33  0b101001, // /
34  0b111111, // 0
35  0b111110, // 1
36  0b111100, // 2
37  0b111000, // 3
38  0b110000, // 4
39  0b100000, // 5
40  0b100001, // 6
41  0b100011, // 7
42  0b100111, // 8
43  0b101111, // 9
44  0b1000111, // :
45  MORSE_UNSUPORTED, // ; (unsupported)
46  MORSE_UNSUPORTED, // < (unsupported)
47  0b110001, // =
48  MORSE_UNSUPORTED, // > (unsupported)
49  0b1001100, // ?
50  0b1010110, // @
51  0b110, // A
52  0b10001, // B
53  0b10101, // C
54  0b1001, // D
55  0b10, // E
56  0b10100, // F
57  0b1011, // G
58  0b10000, // H
59  0b100, // I
60  0b11110, // J
61  0b1101, // K
62  0b10010, // L
63  0b111, // M
64  0b101, // N
65  0b1111, // O
66  0b10110, // P
67  0b11011, // Q
68  0b1010, // R
69  0b1000, // S
70  0b11, // T
71  0b1100, // U
72  0b11000, // V
73  0b1110, // W
74  0b11001, // X
75  0b11101, // Y
76  0b10011, // Z
77  MORSE_UNSUPORTED, // [ (unsupported)
78  MORSE_UNSUPORTED, // \ (unsupported)
79  MORSE_UNSUPORTED, // ] (unsupported)
80  0b1101000, // ^ (unsupported, used as alias for end of work)
81  0b110101 // _ (unsupported, used as alias for starting signal)
82 };
83 
89 class MorseClient {
90  public:
96  explicit MorseClient(PhysicalLayer* phy);
97 
98  #if !defined(RADIOLIB_EXCLUDE_AFSK)
99 
104  explicit MorseClient(AFSKClient* audio);
105  #endif
106 
107  // basic methods
108 
118  int16_t begin(float base, uint8_t speed = 20);
119 
125  size_t startSignal();
126 
127  size_t write(const char* str);
128  size_t write(uint8_t* buff, size_t len);
129  size_t write(uint8_t b);
130 
131  size_t print(__FlashStringHelper*);
132  size_t print(const String &);
133  size_t print(const char[]);
134  size_t print(char);
135  size_t print(unsigned char, int = DEC);
136  size_t print(int, int = DEC);
137  size_t print(unsigned int, int = DEC);
138  size_t print(long, int = DEC);
139  size_t print(unsigned long, int = DEC);
140  size_t print(double, int = 2);
141 
142  size_t println(void);
143  size_t println(__FlashStringHelper*);
144  size_t println(const String &);
145  size_t println(const char[]);
146  size_t println(char);
147  size_t println(unsigned char, int = DEC);
148  size_t println(int, int = DEC);
149  size_t println(unsigned int, int = DEC);
150  size_t println(long, int = DEC);
151  size_t println(unsigned long, int = DEC);
152  size_t println(double, int = 2);
153 
154 #ifndef RADIOLIB_GODMODE
155  private:
156 #endif
157  PhysicalLayer* _phy;
158  #if !defined(RADIOLIB_EXCLUDE_AFSK)
159  AFSKClient* _audio;
160  #endif
161 
162  uint32_t _base = 0, _baseHz = 0;
163  uint16_t _dotLength = 0;
164 
165  size_t printNumber(unsigned long, uint8_t);
166  size_t printFloat(double, uint8_t);
167 
168  int16_t transmitDirect(uint32_t freq = 0, uint32_t freqHz = 0);
169  int16_t standby();
170 };
171 
172 #endif
Client for audio-based transmissions. Requires Arduino tone() function, and a module capable of direc...
Definition: AFSK.h:17
int16_t begin(float base, uint8_t speed=20)
Initialization method.
Definition: Morse.cpp:18
Provides common interface for protocols that run on LoRa/FSK modules, such as RTTY or LoRaWAN...
Definition: PhysicalLayer.h:13
MorseClient(PhysicalLayer *phy)
Constructor for 2-FSK mode.
Definition: Morse.cpp:4
size_t startSignal()
Send start signal.
Definition: Morse.cpp:30
Client for Morse Code communication. The public interface is the same as Arduino Serial.
Definition: Morse.h:89