[RTTY] Added support for Arduino flash strings
This commit is contained in:
parent
ed3eeb0559
commit
9f382f6406
3 changed files with 72 additions and 29 deletions
|
@ -93,6 +93,9 @@ void loop() {
|
||||||
// character array (C-String)
|
// character array (C-String)
|
||||||
rtty.println("C-String");
|
rtty.println("C-String");
|
||||||
|
|
||||||
|
// string saved in flash
|
||||||
|
rtty.println(F("Flash String"));
|
||||||
|
|
||||||
// character
|
// character
|
||||||
rtty.println('c');
|
rtty.println('c');
|
||||||
|
|
||||||
|
|
|
@ -187,6 +187,38 @@ size_t RTTYClient::write(uint8_t b) {
|
||||||
return(1);
|
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) {
|
size_t RTTYClient::print(ITA2String& ita2) {
|
||||||
uint8_t* arr = ita2.byteArr();
|
uint8_t* arr = ita2.byteArr();
|
||||||
size_t n = RTTYClient::write(arr, ita2.length());
|
size_t n = RTTYClient::write(arr, ita2.length());
|
||||||
|
@ -277,6 +309,12 @@ size_t RTTYClient::println(void) {
|
||||||
return(n);
|
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 RTTYClient::println(ITA2String& ita2) {
|
||||||
size_t n = RTTYClient::print(ita2);
|
size_t n = RTTYClient::print(ita2);
|
||||||
n += RTTYClient::println();
|
n += RTTYClient::println();
|
||||||
|
|
|
@ -112,6 +112,7 @@ class RTTYClient {
|
||||||
size_t write(uint8_t* buff, size_t len);
|
size_t write(uint8_t* buff, size_t len);
|
||||||
size_t write(uint8_t b);
|
size_t write(uint8_t b);
|
||||||
|
|
||||||
|
size_t print(__FlashStringHelper*);
|
||||||
size_t print(ITA2String &);
|
size_t print(ITA2String &);
|
||||||
size_t print(const String &);
|
size_t print(const String &);
|
||||||
size_t print(const char[]);
|
size_t print(const char[]);
|
||||||
|
@ -124,6 +125,7 @@ class RTTYClient {
|
||||||
size_t print(double, int = 2);
|
size_t print(double, int = 2);
|
||||||
|
|
||||||
size_t println(void);
|
size_t println(void);
|
||||||
|
size_t println(__FlashStringHelper*);
|
||||||
size_t println(ITA2String &);
|
size_t println(ITA2String &);
|
||||||
size_t println(const String &s);
|
size_t println(const String &s);
|
||||||
size_t println(const char[]);
|
size_t println(const char[]);
|
||||||
|
|
Loading…
Add table
Reference in a new issue