mirror of
https://github.com/esp8266/Arduino.git
synced 2025-04-19 23:22:16 +03:00
Add support to Print::printf for printing from flash (#2266)
* Add support to Print::printf for printing from flash
This commit is contained in:
parent
217ba9e072
commit
e35ebf137d
@ -63,6 +63,29 @@ size_t Print::printf(const char *format, ...) {
|
|||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
size_t Print::printf_P(PGM_P format, ...) {
|
||||||
|
va_list arg;
|
||||||
|
va_start(arg, format);
|
||||||
|
char temp[64];
|
||||||
|
char* buffer = temp;
|
||||||
|
size_t len = vsnprintf_P(temp, sizeof(temp), format, arg);
|
||||||
|
va_end(arg);
|
||||||
|
if (len > sizeof(temp) - 1) {
|
||||||
|
buffer = new char[len + 1];
|
||||||
|
if (!buffer) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
va_start(arg, format);
|
||||||
|
vsnprintf_P(buffer, len + 1, format, arg);
|
||||||
|
va_end(arg);
|
||||||
|
}
|
||||||
|
len = write((const uint8_t*) buffer, len);
|
||||||
|
if (buffer != temp) {
|
||||||
|
delete[] buffer;
|
||||||
|
}
|
||||||
|
return len;
|
||||||
|
}
|
||||||
|
|
||||||
size_t Print::print(const __FlashStringHelper *ifsh) {
|
size_t Print::print(const __FlashStringHelper *ifsh) {
|
||||||
PGM_P p = reinterpret_cast<PGM_P>(ifsh);
|
PGM_P p = reinterpret_cast<PGM_P>(ifsh);
|
||||||
|
|
||||||
|
@ -64,6 +64,7 @@ class Print {
|
|||||||
}
|
}
|
||||||
|
|
||||||
size_t printf(const char * format, ...) __attribute__ ((format (printf, 2, 3)));
|
size_t printf(const char * format, ...) __attribute__ ((format (printf, 2, 3)));
|
||||||
|
size_t printf_P(PGM_P format, ...) __attribute__((format(printf, 2, 3)));
|
||||||
size_t print(const __FlashStringHelper *);
|
size_t print(const __FlashStringHelper *);
|
||||||
size_t print(const String &);
|
size_t print(const String &);
|
||||||
size_t print(const char[]);
|
size_t print(const char[]);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user