diff options
| author | krolyxon <me@krolyxon.com> | 2026-05-11 15:00:40 +0530 |
|---|---|---|
| committer | krolyxon <me@krolyxon.com> | 2026-05-11 15:00:40 +0530 |
| commit | 75eea47140e22f86fb23631e4fb436d8a09c8695 (patch) | |
| tree | b1ffd59ac1910c6bf2fade7241fb98af63dedc30 /src/utils | |
| parent | 278646bad87f9c85090a6b5921c360c1c86493b5 (diff) | |
move bluetooth, nfc, and utils into subfolders
Diffstat (limited to 'src/utils')
| -rw-r--r-- | src/utils/buttons.cpp | 20 | ||||
| -rw-r--r-- | src/utils/buttons.h | 10 | ||||
| -rw-r--r-- | src/utils/device_check.cpp | 207 | ||||
| -rw-r--r-- | src/utils/device_check.h | 3 | ||||
| -rw-r--r-- | src/utils/sysinfo.cpp | 87 | ||||
| -rw-r--r-- | src/utils/sysinfo.h | 3 |
6 files changed, 330 insertions, 0 deletions
diff --git a/src/utils/buttons.cpp b/src/utils/buttons.cpp new file mode 100644 index 0000000..d3d1020 --- /dev/null +++ b/src/utils/buttons.cpp @@ -0,0 +1,20 @@ +#include "buttons.h" +#include <Arduino.h> +#include "../config.h" + +void buttonsInit() +{ + pinMode(BTN_UP, INPUT_PULLUP); + pinMode(BTN_DOWN, INPUT_PULLUP); + pinMode(BTN_SELECT, INPUT_PULLUP); + pinMode(BTN_BACK, INPUT_PULLUP); + pinMode(BTN_RIGHT, INPUT_PULLUP); + pinMode(BTN_LEFT, INPUT_PULLUP); +} + +bool btnUp() { return !digitalRead(BTN_UP); } +bool btnDown() { return !digitalRead(BTN_DOWN); } +bool btnSelect() { return !digitalRead(BTN_SELECT); } +bool btnBack() { return !digitalRead(BTN_BACK); } +bool btnRight() { return !digitalRead(BTN_RIGHT); } +bool btnLeft() { return !digitalRead(BTN_LEFT); } diff --git a/src/utils/buttons.h b/src/utils/buttons.h new file mode 100644 index 0000000..cfa9fa3 --- /dev/null +++ b/src/utils/buttons.h @@ -0,0 +1,10 @@ +#pragma once + +void buttonsInit(); + +bool btnUp(); +bool btnDown(); +bool btnSelect(); +bool btnBack(); +bool btnRight(); +bool btnLeft(); diff --git a/src/utils/device_check.cpp b/src/utils/device_check.cpp new file mode 100644 index 0000000..5f63ffe --- /dev/null +++ b/src/utils/device_check.cpp @@ -0,0 +1,207 @@ +#include <Arduino.h> +#include <SPI.h> +#include <Wire.h> +#include <RF24.h> +#include "../libs/ELECHOUSE_CC1101_SRC_DRV.h" + +#include "../ui/display.h" +#include "buttons.h" +#include "../config.h" + +// ===== EXTERNALS ===== +extern RF24 radio1; +extern RF24 radio2; +extern SPIClass *RADIO_SPI; +extern U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2; + +// ===== RESULTS ===== +struct DeviceStatus { + bool nrf1 = false; + bool nrf2 = false; + bool cc1101_1 = false; + bool cc1101_2 = false; + bool oled = true; + bool buttons = false; +}; + +// ===== NRF CHECK ===== +//bool checkNRF(RF24 &radio) +//{ +// // safer: only init if needed +// if (!radio.isChipConnected()) { +// if (!radio.begin(RADIO_SPI)) +// return false; +// } +// +// return radio.isChipConnected(); +//} + +bool checkNRF(RF24 &radio) +{ + radio.powerDown(); + delay(5); + + if (!radio.begin(RADIO_SPI)) + return false; + + delay(5); + + return radio.isChipConnected(); +} + +// ===== CC1101 CHECK ===== +bool checkCC1101(uint8_t csPin) +{ + ELECHOUSE_cc1101.setSpiPin( + cc1101_SCK, + cc1101_MISO, + cc1101_MOSI, + csPin + ); + + delay(5); + + return ELECHOUSE_cc1101.getCC1101(); +} + +// ===== BUTTON CHECK ===== +bool checkButtons() +{ + u8g2.clearBuffer(); + u8g2.setFont(u8g2_font_6x10_tr); + u8g2.drawStr(0, 20, "Press any button..."); + u8g2.sendBuffer(); + + unsigned long start = millis(); + + while (millis() - start < 2000) + { + if (!digitalRead(BTN_UP) || + !digitalRead(BTN_DOWN) || + !digitalRead(BTN_SELECT) || + !digitalRead(BTN_BACK) || + !digitalRead(BTN_RIGHT) || + !digitalRead(BTN_LEFT)) + { + return true; + } + } + + return false; +} + +// ===== DRAW ===== +#define MAX_ITEMS 6 +#define VISIBLE_ROWS 5 + +const char* labels[MAX_ITEMS] = { + "NRF1", + "NRF2", + "CC1101-1", + "CC1101-2", + "BUTTONS", + "OLED" +}; + +bool values[MAX_ITEMS]; + +int selectedIndex = 0; +int offset = 0; + +void drawStatus(DeviceStatus &s) +{ + values[0] = s.nrf1; + values[1] = s.nrf2; + values[2] = s.cc1101_1; + values[3] = s.cc1101_2; + values[4] = s.buttons; + values[5] = s.oled; + + + u8g2.clearBuffer(); + u8g2.setFont(u8g2_font_6x10_tr); + + // scrolling logic + if (selectedIndex < offset) + offset = selectedIndex; + + if (selectedIndex >= offset + VISIBLE_ROWS) + offset = selectedIndex - VISIBLE_ROWS + 1; + + for (int i = 0; i < VISIBLE_ROWS; i++) + { + int item = offset + i; + if (item >= MAX_ITEMS) break; + + int y = 12 + i * 10; + + if (item == selectedIndex) + { + u8g2.drawBox(0, y - 9, 128, 10); + u8g2.setDrawColor(0); + } + + u8g2.drawStr(2, y, labels[item]); + + if (values[item]) + u8g2.drawStr(80, y, "OK"); + else + u8g2.drawStr(80, y, "FAIL"); + + if (item == selectedIndex) + u8g2.setDrawColor(1); + } + + u8g2.sendBuffer(); +} + +// ===== MAIN ===== +void device_check_run() +{ + DeviceStatus status; + + Serial.println("Running device diagnostics..."); + + // NRF + status.nrf1 = checkNRF(radio1); + status.nrf2 = checkNRF(radio2); + + // CC1101 + status.cc1101_1 = checkCC1101(CC1101_CS); + status.cc1101_2 = checkCC1101(CC1101_2_CS); + //status.cc1101_1 = status.cc1101_2 = false; + + // Buttons + status.buttons = checkButtons(); + + drawStatus(status); + + Serial.println("Diagnostics complete"); + + while (1) +{ + drawStatus(status); + + if (btnUp()) + { + selectedIndex--; + if (selectedIndex < 0) selectedIndex = MAX_ITEMS - 1; + delay(150); + } + + if (btnDown()) + { + selectedIndex++; + if (selectedIndex >= MAX_ITEMS) selectedIndex = 0; + delay(150); + } + + if (btnBack()) + { + delay(150); + break; + } +}} + + + diff --git a/src/utils/device_check.h b/src/utils/device_check.h new file mode 100644 index 0000000..3d6b250 --- /dev/null +++ b/src/utils/device_check.h @@ -0,0 +1,3 @@ +#pragma once + +void device_check_run(); diff --git a/src/utils/sysinfo.cpp b/src/utils/sysinfo.cpp new file mode 100644 index 0000000..aad170d --- /dev/null +++ b/src/utils/sysinfo.cpp @@ -0,0 +1,87 @@ +#include <Arduino.h> +#include "../ui/display.h" +#include "buttons.h" +#include <esp_chip_info.h> +#include <esp_heap_caps.h> + +void runSystemInfoFeature() +{ + esp_chip_info_t chip_info; + + esp_chip_info(&chip_info); + + while (true) + { + //u8g2.clearBuffer(); + + //char buf[32]; + + //sprintf(buf, "Cores: %d", chip_info.cores); + //u8g2.drawStr(0, 14, buf); + + //sprintf(buf, "Heap: %d", + // heap_caps_get_free_size(MALLOC_CAP_DEFAULT)); + //u8g2.drawStr(0, 28, buf); + + + //u8g2.drawStr(0, 60, "BACK to exit"); + + // Get RAM info + size_t freeHeap = heap_caps_get_free_size(MALLOC_CAP_DEFAULT); + size_t totalHeap = heap_caps_get_total_size(MALLOC_CAP_DEFAULT); + int ramUsage = 100 - ((freeHeap * 100) / totalHeap); + + // Get Flash info + //uint32_t flashSize = spi_flash_get_chip_size(); + uint32_t flashSize = ESP.getFlashChipSize(); + uint32_t flashUsed = ESP.getSketchSize(); + int flashUsage = (flashUsed * 100) / flashSize; + + // Temperature (approx) + uint8_t temperature = temperatureRead(); + + // Chip info + esp_chip_info_t chip_info; + esp_chip_info(&chip_info); + + u8g2.clearBuffer(); + u8g2.setFont(u8g2_font_6x12_tr); + + char buf[32]; + + // Box 1 - RAM + u8g2.drawFrame(0, 0, 128, 12); + sprintf(buf, "RAM: %d%% used", ramUsage); + u8g2.drawStr(4, 9, buf); + + // Box 2 - Flash + u8g2.drawFrame(0, 12, 128, 12); + sprintf(buf, "Flash: %d%% used", flashUsage); + u8g2.drawStr(4, 21, buf); + + // Box 3 - Temp (FULL WIDTH now) + u8g2.drawFrame(0, 24, 128, 12); + sprintf(buf, "Temp: %d C", temperature); + u8g2.drawStr(4, 33, buf); + + // Box 4 - Chip info (FULL WIDTH) + u8g2.drawFrame(0, 36, 128, 12); + sprintf(buf, "Cores: %d Rev: %d", chip_info.cores, chip_info.revision); + u8g2.drawStr(4, 45, buf); + + // Box 5 - PSRAM (KB) + u8g2.drawFrame(0, 48, 128, 12); + sprintf(buf, "PSRAM: %lu KB", heap_caps_get_free_size(MALLOC_CAP_SPIRAM) / 1024); + u8g2.drawStr(4, 57, buf); + + u8g2.sendBuffer(); + + if (btnBack()) + { + delay(200); + return; + } + + delay(100); + } +} diff --git a/src/utils/sysinfo.h b/src/utils/sysinfo.h new file mode 100644 index 0000000..8a4f176 --- /dev/null +++ b/src/utils/sysinfo.h @@ -0,0 +1,3 @@ +#pragma once + +void runSystemInfoFeature(); |
