133 lines
4.7 KiB
C++
133 lines
4.7 KiB
C++
#include <M5Unified.h>
|
|
|
|
|
|
void user_made_log_callback(esp_log_level_t, bool, const char*);
|
|
|
|
|
|
void setup(void)
|
|
{
|
|
/// Example of ESP32 standard log output macro usage.
|
|
/// ESP_LOGx series outputs to USB-connected PC terminal.
|
|
/// You can set the output level with `Core Debug Level` in ArduinoIDE.
|
|
/// ※ If the `Core Debug Level` is set to `None`, nothing is output.
|
|
#if defined ( ESP_PLATFORM )
|
|
ESP_LOGE("TAG", "using ESP_LOGE error log."); // Critical errors, software module can not recover on its own
|
|
ESP_LOGW("TAG", "using ESP_LOGW warn log."); // Error conditions from which recovery measures have been taken
|
|
ESP_LOGI("TAG", "using ESP_LOGI info log."); // Information messages which describe normal flow of events
|
|
ESP_LOGD("TAG", "using ESP_LOGD debug log."); // Extra information which is not necessary for normal use (values, pointers, sizes, etc).
|
|
ESP_LOGV("TAG", "using ESP_LOGV verbose log."); // Bigger chunks of debugging information, or frequent messages which can potentially flood the output.
|
|
#endif
|
|
|
|
M5.begin();
|
|
|
|
/// If you want to output logs to the display, write this.
|
|
M5.setLogDisplayIndex(0);
|
|
|
|
/// use wrapping from bottom edge to top edge.
|
|
M5.Display.setTextWrap(true, true);
|
|
/// use scrolling.
|
|
// M5.Display.setTextScroll(true);
|
|
|
|
/// Example of M5Unified log output class usage.
|
|
/// Unlike ESP_LOGx, the M5.Log series can output to serial, display, and user callback function in a single line of code.
|
|
|
|
|
|
/// You can set Log levels for each output destination.
|
|
/// ESP_LOG_ERROR / ESP_LOG_WARN / ESP_LOG_INFO / ESP_LOG_DEBUG / ESP_LOG_VERBOSE
|
|
M5.Log.setLogLevel(m5::log_target_serial, ESP_LOG_VERBOSE);
|
|
M5.Log.setLogLevel(m5::log_target_display, ESP_LOG_DEBUG);
|
|
M5.Log.setLogLevel(m5::log_target_callback, ESP_LOG_INFO);
|
|
|
|
/// Set up user-specific callback functions.
|
|
M5.Log.setCallback(user_made_log_callback);
|
|
|
|
/// You can color the log or not.
|
|
M5.Log.setEnableColor(m5::log_target_serial, true);
|
|
M5.Log.setEnableColor(m5::log_target_display, true);
|
|
M5.Log.setEnableColor(m5::log_target_callback, true);
|
|
|
|
/// You can set the text to be added to the end of the log for each output destination.
|
|
/// ( default value : "\n" )
|
|
M5.Log.setSuffix(m5::log_target_serial, "\n");
|
|
M5.Log.setSuffix(m5::log_target_display, "\n");
|
|
M5.Log.setSuffix(m5::log_target_callback, "");
|
|
|
|
/// `M5.Log()` can be used to output a simple log
|
|
M5.Log(ESP_LOG_ERROR , "M5.Log error log"); /// ERROR level output
|
|
M5.Log(ESP_LOG_WARN , "M5.Log warn log"); /// WARN level output
|
|
M5.Log(ESP_LOG_INFO , "M5.Log info log"); /// INFO level output
|
|
M5.Log(ESP_LOG_DEBUG , "M5.Log debug log"); /// DEBUG level output
|
|
M5.Log(ESP_LOG_VERBOSE , "M5.Log verbose log"); /// VERBOSE level output
|
|
|
|
/// `M5_LOGx` macro can be used to output a log containing the source file name, line number, and function name.
|
|
M5_LOGE("M5_LOGE error log"); /// ERROR level output with source info
|
|
M5_LOGW("M5_LOGW warn log"); /// WARN level output with source info
|
|
M5_LOGI("M5_LOGI info log"); /// INFO level output with source info
|
|
M5_LOGD("M5_LOGD debug log"); /// DEBUG level output with source info
|
|
M5_LOGV("M5_LOGV verbose log"); /// VERBOSE level output with source info
|
|
|
|
/// `M5.Log.printf()` is output without log level and without suffix and is output to all serial, display, and callback.
|
|
M5.Log.printf("M5.Log.printf non level output\n");
|
|
}
|
|
|
|
void loop(void)
|
|
{
|
|
M5.delay(1);
|
|
M5.update();
|
|
|
|
if (M5.BtnPWR.wasClicked()) { M5_LOGE("BtnP %d click", M5.BtnPWR.getClickCount()); }
|
|
if (M5.BtnA .wasClicked()) { M5_LOGW("BtnA %d click", M5.BtnA .getClickCount()); }
|
|
if (M5.BtnB .wasClicked()) { M5_LOGI("BtnB %d click", M5.BtnB .getClickCount()); }
|
|
if (M5.BtnC .wasClicked()) { M5_LOGD("BtnC %d click", M5.BtnC .getClickCount()); }
|
|
|
|
static uint32_t counter = 0;
|
|
if ((++counter & 0x3FF) == 0)
|
|
{
|
|
static int prev_y;
|
|
int cursor_y = M5.Display.getCursorY();
|
|
if (prev_y > cursor_y)
|
|
{
|
|
M5.Display.clear();
|
|
}
|
|
prev_y = cursor_y;
|
|
M5_LOGV("count:%d", counter >> 10);
|
|
}
|
|
}
|
|
|
|
void user_made_log_callback(esp_log_level_t log_level, bool use_color, const char* log_text)
|
|
{
|
|
// You can also create your own callback function to output log contents to a file,WiFi,and more other destination
|
|
|
|
#if defined ( ARDUINO )
|
|
/*
|
|
if (SD.begin(GPIO_NUM_4, SPI, 25000000))
|
|
{
|
|
auto file = SD.open("/logfile.txt", FILE_APPEND);
|
|
file.print(log_text);
|
|
file.close();
|
|
SD.end();
|
|
}
|
|
//*/
|
|
#endif
|
|
|
|
}
|
|
|
|
/// for ESP-IDF
|
|
#if !defined ( ARDUINO ) && defined ( ESP_PLATFORM )
|
|
extern "C"
|
|
{
|
|
void loopTask(void*)
|
|
{
|
|
setup();
|
|
for (;;) {
|
|
loop();
|
|
}
|
|
vTaskDelete(NULL);
|
|
}
|
|
|
|
void app_main()
|
|
{
|
|
xTaskCreatePinnedToCore(loopTask, "loopTask", 8192, NULL, 1, NULL, 1);
|
|
}
|
|
}
|
|
#endif
|