diff --git a/examples/SX127x_RTTY_Transmit/SX127x_RTTY_Transmit.ino b/examples/SX127x_RTTY_Transmit/SX127x_RTTY_Transmit.ino index 4d11d918..e65114e2 100644 --- a/examples/SX127x_RTTY_Transmit/SX127x_RTTY_Transmit.ino +++ b/examples/SX127x_RTTY_Transmit/SX127x_RTTY_Transmit.ino @@ -48,9 +48,9 @@ void setup() { // low frequency: 434.0 MHz // frequency shift: 183 Hz // baud rate: 45 baud - // data bits: 8 + // data bits: 8 (ASCII encoding) // stop bits: 1 - state = rtty.begin(434, 183, 45, 5); + state = rtty.begin(434, 183, 45, 8); if(state == ERR_NONE) { Serial.println(F("success!")); } else { @@ -94,21 +94,27 @@ void loop() { /* // KiteLib also provides ITA2 ("Baudot") code support - // RTTY client must be configured to 5 bits + // To enable ITA2 encoding, set RTTY client + // to 5 data bits rtty.begin(434, 183, 45, 5); // send synchronization string ("RYRY..." corresponds // to binary 01010101010101010101... in ITA2 encoding) - ITA2 sync = "RYRYRYRY"; - rtty.println(sync); + rtty.println("RYRYRYRY"); - // create ITA2-encoded string - // NOTE: ASCII characters that do not have ITA2 - // equivalent will be replaced with NUL - ITA2 itaStr = "HELLO WORLD"; - - // print the ITA2 string - rtty.println(itaStr); + // send ITA2-encoded string (all ASCII characters + // that do not have ITA2 equivalent will be replaced + // with NUL + rtty.println("HELLO WORLD!"); + + String aStr = "ARDUINO STRING"; + rtty.println(aStr); + + // character array (C-string) + rtty.println("C-STRING"); + + // character + rtty.println('C'); // all numbers can also be sent using ITA2 float f = -3.1415; diff --git a/src/protocols/RTTY.cpp b/src/protocols/RTTY.cpp index 203937ad..44b30b5d 100644 --- a/src/protocols/RTTY.cpp +++ b/src/protocols/RTTY.cpp @@ -1,5 +1,11 @@ #include "RTTY.h" +ITA2::ITA2(char c) { + _len = 1; + _str = new char[1]; + _str[0] = c; +} + ITA2::ITA2(const char* str) { _len = strlen(str); _str = new char[_len]; @@ -147,15 +153,36 @@ size_t RTTYClient::print(ITA2& ita2) { } size_t RTTYClient::print(const String& str) { - return(RTTYClient::write((uint8_t*)str.c_str(), str.length())); + size_t n = 0; + if(_dataBits == 5) { + ITA2 ita2 = str.c_str(); + n = RTTYClient::print(ita2); + } else { + n = RTTYClient::write((uint8_t*)str.c_str(), str.length()); + } + return(n); } size_t RTTYClient::print(const char str[]) { - return(RTTYClient::write((uint8_t*)str, strlen(str))); + size_t n = 0; + if(_dataBits == 5) { + ITA2 ita2 = str; + n = RTTYClient::print(ita2); + } else { + n = RTTYClient::write((uint8_t*)str, strlen(str)); + } + return(n); } size_t RTTYClient::print(char c) { - return(RTTYClient::write(c)); + size_t n = 0; + if(_dataBits == 5) { + ITA2 ita2 = c; + n = RTTYClient::print(ita2); + } else { + n = RTTYClient::write(c); + } + return(n); } size_t RTTYClient::print(unsigned char b, int base) { diff --git a/src/protocols/RTTY.h b/src/protocols/RTTY.h index 86dc50cc..be48e0ae 100644 --- a/src/protocols/RTTY.h +++ b/src/protocols/RTTY.h @@ -18,6 +18,7 @@ const char ITA2Table[ITA2_LENGTH][2] = {{'\0', '\0'}, {'E', '3'}, {'\n', '\n'}, class ITA2 { public: + ITA2(char c); ITA2(const char* str); ~ITA2();