From bf06f7eb82f7b6ab3df3e0b6b247f0d3cb96d59c Mon Sep 17 00:00:00 2001 From: Jonas Diemer Date: Tue, 23 Dec 2025 14:49:29 +0100 Subject: [PATCH] Added QR code to AP mode. --- .../network/CrossPointWebServerActivity.cpp | 57 +++++++++++-------- 1 file changed, 34 insertions(+), 23 deletions(-) diff --git a/src/activities/network/CrossPointWebServerActivity.cpp b/src/activities/network/CrossPointWebServerActivity.cpp index cf4e95f..bc72c9c 100644 --- a/src/activities/network/CrossPointWebServerActivity.cpp +++ b/src/activities/network/CrossPointWebServerActivity.cpp @@ -4,9 +4,11 @@ #include #include #include -#include -#include #include +#include + +#include +#include #include "NetworkModeSelectionActivity.h" #include "WifiSelectionActivity.h" @@ -338,26 +340,25 @@ void CrossPointWebServerActivity::render() const { } } -void drawQRCode(GfxRenderer& renderer, const int x, const int y, - uint8_t* qrcodeBytes, const std::string& data, int size) { +void drawQRCode(GfxRenderer& renderer, const int x, const int y, const std::string& data) { // Implementation of QR code calculation // The structure to manage the QR code QRCode qrcode; - uint8_t qrcodeBytes[qrcode_getBufferSize(3)]; - Serial.printf("QR Code:\n"); + uint8_t qrcodeBytes[qrcode_getBufferSize(4)]; + Serial.printf("[%lu] [WEBACT] QR Code (%lu): %s\n", millis(), data.length(), data.c_str()); - qrcode_initText(&qrcode, qrcodeBytes, 3, ECC_LOW, data.c_str()); - const uint8_t px = 6; // pixels per module + qrcode_initText(&qrcode, qrcodeBytes, 4, ECC_LOW, data.c_str()); + const uint8_t px = 6; // pixels per module for (uint8_t cy = 0; cy < qrcode.size; cy++) { - for (uint8_t cx = 0; cx < qrcode.size; cx++) { - if (qrcode_getModule(&qrcode, cx, cy)) { - // Serial.print("**"); - renderer.fillRect(x + px*cx, y + px*cy, px, px, true); - } else { - // Serial.print(" "); - } + for (uint8_t cx = 0; cx < qrcode.size; cx++) { + if (qrcode_getModule(&qrcode, cx, cy)) { + // Serial.print("**"); + renderer.fillRect(x + px * cx, y + px * cy, px, px, true); + } else { + // Serial.print(" "); } - Serial.print("\n"); + } + // Serial.print("\n"); } } @@ -371,7 +372,7 @@ void CrossPointWebServerActivity::renderServerRunning() const { if (isApMode) { // AP mode display - center the content block - const int startY = 55; + int startY = 55; renderer.drawCenteredText(UI_FONT_ID, startY, "Hotspot Mode", true, BOLD); @@ -381,6 +382,13 @@ void CrossPointWebServerActivity::renderServerRunning() const { renderer.drawCenteredText(SMALL_FONT_ID, startY + LINE_SPACING * 2, "Connect your device to this WiFi network", true, REGULAR); + renderer.drawCenteredText(SMALL_FONT_ID, startY + LINE_SPACING * 3, + "or scan QR code with your phone to connect to Wifi.", true, REGULAR); + // Show QR code for URL + std::string wifiConfig = std::string("WIFI:T:WPA;S:") + connectedSSID + ";P:" + "" + ";;"; + drawQRCode(renderer, (480 - 6 * 33) / 2, startY + LINE_SPACING * 4, wifiConfig); + + startY += 6 * 29 + 3 * LINE_SPACING; // Show primary URL (hostname) std::string hostnameUrl = std::string("http://") + AP_HOSTNAME + ".local/"; renderer.drawCenteredText(UI_FONT_ID, startY + LINE_SPACING * 3, hostnameUrl.c_str(), true, BOLD); @@ -388,8 +396,12 @@ void CrossPointWebServerActivity::renderServerRunning() const { // Show IP address as fallback std::string ipUrl = "or http://" + connectedIP + "/"; renderer.drawCenteredText(SMALL_FONT_ID, startY + LINE_SPACING * 4, ipUrl.c_str(), true, REGULAR); - renderer.drawCenteredText(SMALL_FONT_ID, startY + LINE_SPACING * 5, "Open this URL in your browser", true, REGULAR); + + // Show QR code for URL + renderer.drawCenteredText(SMALL_FONT_ID, startY + LINE_SPACING * 6, "or scan QR code with your phone:", true, + REGULAR); + drawQRCode(renderer, (480 - 6 * 33) / 2, startY + LINE_SPACING * 7, hostnameUrl); } else { // STA mode display (original behavior) const int startY = 65; @@ -413,11 +425,10 @@ void CrossPointWebServerActivity::renderServerRunning() const { renderer.drawCenteredText(SMALL_FONT_ID, startY + LINE_SPACING * 4, "Open this URL in your browser", true, REGULAR); - // Show QR code for easy scanning - // array of pixels for QR code, version 3 = 29x29 - drawQRCode(renderer, (480-6*29)/2, startY + LINE_SPACING * 6, qrcodeBytes, webInfo, webInfo.length()); - renderer.drawCenteredText(SMALL_FONT_ID, startY + LINE_SPACING * 5, "or scan QR code with your phone:", true, REGULAR); - + // Show QR code for URL + drawQRCode(renderer, (480 - 6 * 33) / 2, startY + LINE_SPACING * 6, webInfo); + renderer.drawCenteredText(SMALL_FONT_ID, startY + LINE_SPACING * 5, "or scan QR code with your phone:", true, + REGULAR); } renderer.drawCenteredText(SMALL_FONT_ID, pageHeight - 30, "Press BACK to exit", true, REGULAR);