[Morse] Added support for Arduino flash strings

This commit is contained in:
jgromes 2019-05-28 12:43:04 +02:00
parent 8931efa4e7
commit fd4da5771c
3 changed files with 26 additions and 2 deletions

View file

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

View file

@ -85,6 +85,10 @@ int16_t MorseClient::begin(float base, uint8_t speed) {
return(state); return(state);
} }
size_t MorseClient::startSignal() {
return(MorseClient::write(0x01));
}
size_t MorseClient::write(const char* str) { size_t MorseClient::write(const char* str) {
if(str == NULL) { if(str == NULL) {
return(0); return(0);
@ -147,8 +151,17 @@ size_t MorseClient::write(uint8_t b) {
return(0); return(0);
} }
size_t MorseClient::startSignal() { size_t MorseClient::print(__FlashStringHelper* fstr) {
return(MorseClient::write(0x01)); PGM_P p = reinterpret_cast<PGM_P>(fstr);
size_t n = 0;
while(true) {
char c = pgm_read_byte(p++);
if(c == '\0') {
break;
}
n += MorseClient::write(c);
}
return n;
} }
size_t MorseClient::print(const String& str) { size_t MorseClient::print(const String& str) {
@ -206,6 +219,12 @@ size_t MorseClient::println(void) {
return(MorseClient::write(0x02)); return(MorseClient::write(0x02));
} }
size_t MorseClient::println(__FlashStringHelper* fstr) {
size_t n = MorseClient::print(fstr);
n += MorseClient::println();
return(n);
}
size_t MorseClient::println(const String& str) { size_t MorseClient::println(const String& str) {
size_t n = MorseClient::print(str); size_t n = MorseClient::print(str);
n += MorseClient::println(); n += MorseClient::println();

View file

@ -44,6 +44,7 @@ class MorseClient {
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(const String &); size_t print(const String &);
size_t print(const char[]); size_t print(const char[]);
size_t print(char); size_t print(char);
@ -55,6 +56,7 @@ class MorseClient {
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(const String &s); size_t println(const String &s);
size_t println(const char[]); size_t println(const char[]);
size_t println(char); size_t println(char);