[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)
|
||||
rtty.println("C-String");
|
||||
|
||||
// string saved in flash
|
||||
rtty.println(F("Flash String"));
|
||||
|
||||
// character
|
||||
rtty.println('c');
|
||||
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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[]);
|
||||
|
|
Loading…
Add table
Reference in a new issue