From f71cbccd2a1cf16c32c1e49b563cd8cac6bfb9b6 Mon Sep 17 00:00:00 2001 From: Rodrigo Alfonso Date: Fri, 12 Jan 2024 08:14:11 -0300 Subject: [PATCH] Adding verbose logging --- .../src/scenes/DebugScene.cpp | 23 +++++++++++++++++-- .../src/scenes/DebugScene.h | 1 + lib/LinkRawWireless.hpp | 16 +++++++++++-- 3 files changed, 36 insertions(+), 4 deletions(-) diff --git a/examples/LinkRawWireless_demo/src/scenes/DebugScene.cpp b/examples/LinkRawWireless_demo/src/scenes/DebugScene.cpp index 67362f9..59a8d34 100644 --- a/examples/LinkRawWireless_demo/src/scenes/DebugScene.cpp +++ b/examples/LinkRawWireless_demo/src/scenes/DebugScene.cpp @@ -27,6 +27,7 @@ static std::unique_ptr startHandler = static std::vector debugLines; static int currentDebugLine = 0; +static bool useVerboseLog = true; void print() { u32 drawLine = 2; @@ -88,6 +89,12 @@ void DebugScene::load() { SCENE_init(); BACKGROUND_enable(true, false, false, false); + linkRawWireless->debug = [](std::string string) { + if (useVerboseLog) + log(string); + }; + linkRawWireless->log = [](std::string string) { log(string); }; + log("---"); log("LinkRawWireless demo"); log(""); @@ -99,8 +106,7 @@ void DebugScene::load() { log("SELECT: clear"); log("---"); log(""); - log("! setting log level to NORMAL"); - log(""); + toggleLogLevel(); } void DebugScene::tick(u16 keys) { @@ -122,6 +128,9 @@ void DebugScene::processButtons(u16 keys) { selectHandler->setIsPressed(keys & KEY_SELECT); startHandler->setIsPressed(keys & KEY_START); + if (bHandler->hasBeenPressedNow()) + toggleLogLevel(); + if (lHandler->hasBeenPressedNow()) scrollToTop(); @@ -141,6 +150,16 @@ void DebugScene::processButtons(u16 keys) { resetAdapter(); } +void DebugScene::toggleLogLevel() { + if (useVerboseLog) { + useVerboseLog = false; + log("! setting log level to NORMAL"); + } else { + useVerboseLog = true; + log("! setting log level to VERBOSE"); + } + log(""); +} void DebugScene::resetAdapter() { log("> resetting adapter..."); bool success = linkRawWireless->activate(); diff --git a/examples/LinkRawWireless_demo/src/scenes/DebugScene.h b/examples/LinkRawWireless_demo/src/scenes/DebugScene.h index af791a8..8e7ea3d 100644 --- a/examples/LinkRawWireless_demo/src/scenes/DebugScene.h +++ b/examples/LinkRawWireless_demo/src/scenes/DebugScene.h @@ -20,6 +20,7 @@ class DebugScene : public Scene { private: void processButtons(u16 keys); + void toggleLogLevel(); void resetAdapter(); }; diff --git a/lib/LinkRawWireless.hpp b/lib/LinkRawWireless.hpp index 2b6c236..b2e33a7 100644 --- a/lib/LinkRawWireless.hpp +++ b/lib/LinkRawWireless.hpp @@ -13,7 +13,6 @@ #include "LinkGPIO.hpp" #include "LinkSPI.hpp" -#include #include #include @@ -62,7 +61,12 @@ const u16 LINK_RAW_WIRELESS_TIMER_IRQ_IDS[] = {IRQ_TIMER0, IRQ_TIMER1, IRQ_TIMER2, IRQ_TIMER3}; class LinkRawWireless { + typedef void (*Logger)(std::string); + public: + Logger debug = [](std::string str) {}; + Logger log = [](std::string str) {}; + enum State { NEEDS_RESET, AUTHENTICATED, @@ -456,6 +460,7 @@ class LinkRawWireless { bool start() { pingAdapter(); + debug("setting SPI mode"); linkSPI->activate(LinkSPI::Mode::MASTER_256KBPS); if (!login()) @@ -473,16 +478,21 @@ class LinkRawWireless { } void pingAdapter() { + debug("setting SO as OUTPUT"); linkGPIO->setMode(LinkGPIO::Pin::SO, LinkGPIO::Direction::OUTPUT); + debug("setting SD as OUTPUT"); linkGPIO->setMode(LinkGPIO::Pin::SD, LinkGPIO::Direction::OUTPUT); + debug("setting SD = HIGH"); linkGPIO->writePin(LinkGPIO::SD, true); wait(LINK_RAW_WIRELESS_PING_WAIT); + debug("setting SD = LOW"); linkGPIO->writePin(LinkGPIO::SD, false); } bool login() { LoginMemory memory; + debug("first login packet"); if (!exchangeLoginPacket(LINK_RAW_WIRELESS_LOGIN_PARTS[0], 0, memory)) return false; @@ -502,8 +512,10 @@ class LinkRawWireless { u32 response = transfer(packet, false); if (msB32(response) != expectedResponse || - lsB32(response) != (u16)~memory.previousGBAData) + lsB32(response) != (u16)~memory.previousGBAData) { + debug("! invalid response"); return false; + } memory.previousGBAData = data; memory.previousAdapterData = expectedResponse;