Page 1 of 1

does esp_log_set_vprintf() work with arduino framework?

Posted: Fri Aug 07, 2020 4:28 am
by azz-zza
Hello,
trying to leverage the esp_log_set_vprintf() to direct the output to network service. And having no luck with it. Is it because of the arduino framwork ?

Code: Select all

#include <AWS_IOT.h>
#include <WiFi.h>
...
int double_vprintf(const char *fmt, va_list args) {

	if (hornbill.publish(TOPIC_NAME,"Static payload") == 0) {
		Serial.println("Printing from double_vprintf()");
	} else {
	Serial.println("hornbill.publish failed from the vprintf() ");
	};
	Serial.println("Printing from doubel_vprintf");
	return vprintf(fmt, args);
}
...
void setup() {
...
if(0 == hornbill.subscribe(TOPIC_NAME,mySubCallBackHandler)) {
			ESP_LOGI(TAG,"Registering double_vprint() ");
			esp_log_set_vprintf(&double_vprintf);
			ESP_LOGI(TAG,"Subscribe Successful");
//			Serial.println("Subscribe Successful");
		} else {
			ESP_LOGE(TAG,"Subscribe Failed, Check the Thing Name and Certificates");
//			Serial.println("Subscribe Failed, Check the Thing Name and Certificates");
			while(1);
		}
...
}
oid loop() {

	if(msgReceived == 1) {
		msgReceived = 0;
		Serial.print("Received Message:");
		Serial.println(rcvdPayload);
	}
	if(tick >= 5) { // publish to topic every 5seconds
		tick=0;
		sprintf(payload,"Hello from hornbill ESP32 : %d",msgCount++);
		if(hornbill.publish(TOPIC_NAME,payload) == 0) {
			ESP_LOGI(TAG,"Publish Message: %s",payload);
			Serial.print("Publish Message:");
			Serial.println(payload);
		} else {
			ESP_LOGI(TAG,"Publish failed");
			Serial.println("Publish failed");
		}
	}
	vTaskDelay(1000 / portTICK_RATE_MS);
	tick++;
}


in the output i see that it executes the esp_log_set_vprintf(&double_vprintf);. But nothing seemed to come out from the double_vprintf(). I expect to see messages going over to mqqt and on the serial...

thank you for helping out.

Re: does esp_log_set_vprintf() work with arduino framework?

Posted: Fri Aug 07, 2020 2:26 pm
by PeterR
Seems that you are not sending anything to the service!

You call vprintf() which sends to stdout.
Instead vsnprintf() and then send the string to both stdout and your network device.

Re: does esp_log_set_vprintf() work with arduino framework?

Posted: Fri Aug 07, 2020 2:40 pm
by azz-zza
PeterR wrote:
Fri Aug 07, 2020 2:26 pm
Seems that you are not sending anything to the service!

You call vprintf() which sends to stdout.
Instead vsnprintf() and then send the string to both stdout and your network device.
@Peter, thank you for your reply.

I beleive hornbill.publish sends the data over. I also wanted to test if the double_print function actually gets executed, thus Serial.print(). But i get neither message on mqqt nor on serial.

Im becoming convinced the arduino framework broke ulog functionality including vprint -https://community.platformio.org/t/is-i ... p32/6999/7