-
-
Notifications
You must be signed in to change notification settings - Fork 6
Redirect STD
Georgi Angelov edited this page Sep 30, 2019
·
9 revisions
Log_Debug() is fprintf(stderr, ... )
/* Georgi Angelov 2019 */
#include <Arduino.h>
void STD_TO_UART(int fd, void *file) {
if (fd > -1) {
int *p = (int *)((char *)file + 60); // offset to FILE->fd
//Serial.printf("[STD] OLD FD: %d\n", *p);
*p = fd;
//Serial.printf("[STD] NEW FD: %d\n", fd);
}
}
void setup() {
Serial.begin(115200);
Serial.println("Azure Explore");
/* UART FD */
int fd = Serial.FD();
Serial.printf("UART = %d\n", fd);
/* REDIRECT TO UART FD */
//STD_TO_UART(fd, stdin); // 0
STD_TO_UART(fd, stdout); // 1 for printf
STD_TO_UART(fd, stderr); // 2 for Log_Debug()
/* TEST */
printf("[TEST] printf() %d\n", 42);
fprintf(stdout, "[TEST] fprinf()\n");
puts("[TEST] puts");
Log_Debug("[TEST] Log_Debug() %f", 22.0 / 7);
}
NEW: simple use Serial.redirect( stderr )
HINT: by default stdio is buffered ...
// unbuffer
setvbuf(stderr, NULL, _IONBF, 0);
setvbuf(stdout, NULL, _IONBF, 0);
printf("test"); // work without \n