[RTTY] Added support for Arduino flash strings

This commit is contained in:
jgromes 2019-05-26 10:26:25 +02:00
parent ed3eeb0559
commit 9f382f6406
3 changed files with 72 additions and 29 deletions

View file

@ -93,6 +93,9 @@ void loop() {
// character array (C-String)
rtty.println("C-String");
// string saved in flash
rtty.println(F("Flash String"));
// character
rtty.println('c');

View file

@ -187,6 +187,38 @@ size_t RTTYClient::write(uint8_t b) {
return(1);
}
size_t RTTYClient::print(__FlashStringHelper* fstr) {
// read flash string length
size_t len = 0;
PGM_P p = reinterpret_cast<PGM_P>(fstr);
while(true) {
char c = pgm_read_byte(p++);
len++;
if(c == '\0') {
break;
}
}
// dynamically allocate memory
char* str = new char[len];
// copy string from flash
p = reinterpret_cast<PGM_P>(fstr);
for(size_t i = 0; i < len; i++) {
str[i] = pgm_read_byte(p + i);
}
size_t n = 0;
if(_encoding == ITA2) {
ITA2String ita2 = str;
n = RTTYClient::print(ita2);
} else if((_encoding == ASCII) || (_encoding == ASCII_EXTENDED)) {
n = RTTYClient::write((uint8_t*)str, len);
}
delete[] str;
return(n);
}
size_t RTTYClient::print(ITA2String& ita2) {
uint8_t* arr = ita2.byteArr();
size_t n = RTTYClient::write(arr, ita2.length());
@ -277,6 +309,12 @@ size_t RTTYClient::println(void) {
return(n);
}
size_t RTTYClient::println(__FlashStringHelper* fstr) {
size_t n = RTTYClient::print(fstr);
n += RTTYClient::println();
return(n);
}
size_t RTTYClient::println(ITA2String& ita2) {
size_t n = RTTYClient::print(ita2);
n += RTTYClient::println();

View file

@ -112,6 +112,7 @@ class RTTYClient {
size_t write(uint8_t* buff, size_t len);
size_t write(uint8_t b);
size_t print(__FlashStringHelper*);
size_t print(ITA2String &);
size_t print(const String &);
size_t print(const char[]);
@ -124,6 +125,7 @@ class RTTYClient {
size_t print(double, int = 2);
size_t println(void);
size_t println(__FlashStringHelper*);
size_t println(ITA2String &);
size_t println(const String &s);
size_t println(const char[]);