Skip to content

Commit d2302c8

Browse files
committed
Fix Arduino progmem print, AVR WOLFSSL_USER_IO
1 parent b38ab8a commit d2302c8

File tree

2 files changed

+26
-1
lines changed

2 files changed

+26
-1
lines changed

IDE/ARDUINO/wolfssl-arduino.cpp

+25-1
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,33 @@
2525
/* Function to allow wolfcrypt to use Arduino Serial.print for debug messages.
2626
* See wolfssl/wolfcrypt/logging.c */
2727

28+
#if defined(__AVR__)
29+
#include <avr/pgmspace.h> /* Required for PROGMEM handling on AVR */
30+
#endif
31+
2832
int wolfSSL_Arduino_Serial_Print(const char* const s)
2933
{
3034
/* Reminder: Serial.print is only available in C++ */
31-
Serial.println(F(s));
35+
int is_progmem = 0;
36+
37+
#if defined(__AVR__)
38+
const char* t;
39+
t = s;
40+
41+
/* Safely check if `s` is in PROGMEM, 0x8000 is typical for AVR flash */
42+
if (reinterpret_cast<uint16_t>(t) >= 0x8000) {
43+
while (pgm_read_byte(t)) {
44+
Serial.write(pgm_read_byte(t++));
45+
}
46+
Serial.println();
47+
is_progmem = 1;
48+
}
49+
#endif
50+
51+
/* Print normally for non-AVR boards or RAM-stored strings */
52+
if (!is_progmem) {
53+
Serial.println(s);
54+
}
55+
3256
return 0;
3357
};

wolfssl/wolfcrypt/settings.h

+1
Original file line numberDiff line numberDiff line change
@@ -316,6 +316,7 @@
316316

317317
/* board-specific */
318318
#if defined(__AVR__)
319+
#define WOLFSSL_USER_IO
319320
#define WOLFSSL_NO_SOCK
320321
#define NO_WRITEV
321322
#elif defined(__arm__)

0 commit comments

Comments
 (0)