diff --git a/Board320_240.cpp b/Board320_240.cpp index 55eaa8a..2bb2ba2 100644 --- a/Board320_240.cpp +++ b/Board320_240.cpp @@ -1,6 +1,7 @@ #ifndef BOARD320_240_CPP #define BOARD320_240_CPP +#include #include #include #include @@ -856,7 +857,8 @@ WL_CONNECTION_LOST: suffix = "CONNECTION_LOST"; break; WL_DISCONNECTED: suffix = "DISCONNECTED"; break; } break; - case MENU_GPRS: sprintf(tmpStr1, "[%s] %s", (liveData->settings.gprsEnabled == 1) ? "on" : "off", liveData->settings.gprsApn); suffix = tmpStr1; break; + case MENU_GPRS: sprintf(tmpStr1, "[%s] %s", (liveData->settings.gprsEnabled == 1) ? "[on]" : "[off]", liveData->settings.gprsApn); suffix = tmpStr1; break; + case MENU_SDCARD: sprintf(tmpStr1, "[%s]", (liveData->params.sdcardRecording) ? "RECORDING" : (liveData->settings.sdcardEnabled == 1) ? "on" : "off"); suffix = tmpStr1; break; case MENU_SCREEN_ROTATION: suffix = (liveData->settings.displayRotation == 1) ? "[vertical]" : "[normal]"; break; case MENU_DEFAULT_SCREEN: sprintf(tmpStr1, "[%d]", liveData->settings.defaultScreen); suffix = tmpStr1; break; case MENU_SCREEN_BRIGHTNESS: sprintf(tmpStr1, "[%d%%]", liveData->settings.lcdBrightness); suffix = (liveData->settings.lcdBrightness == 0) ? "[auto]" : tmpStr1; break; @@ -864,7 +866,12 @@ WL_DISCONNECTED: suffix = "DISCONNECTED"; break; case MENU_HEADLIGHTS_REMINDER: suffix = (liveData->settings.headlightsReminder == 1) ? "[on]" : "[off]"; break; case MENU_DEBUG_SCREEN: suffix = (liveData->settings.debugScreen == 1) ? "[on]" : "[off]"; break; // - case MENU_WIFI_ENABLED: suffix = (liveData->settings.wifiEnabled == 1) ? "[on]" : "[off]"; break; + case MENU_SDCARD_ENABLED: sprintf(tmpStr1, "[%s]", (liveData->settings.sdcardEnabled == 1) ? "on" : "off"); suffix = tmpStr1; break; + case MENU_SDCARD_AUTOSTARTLOG: sprintf(tmpStr1, "[%s]", (liveData->settings.sdcardEnabled == 0) ? "n/a" : (liveData->settings.sdcardAutstartLog == 1) ? "on" : "off"); suffix = tmpStr1; break; + case MENU_SDCARD_MOUNT_STATUS: sprintf(tmpStr1, "[%s]", (liveData->settings.sdcardEnabled == 0) ? "n/a" : (liveData->params.sdcardInit) ? "READY" : "MOUNT"); suffix = tmpStr1; break; + case MENU_SDCARD_REC: sprintf(tmpStr1, "[%s]", (liveData->settings.sdcardEnabled == 0) ? "n/a" : (liveData->params.sdcardRecording) ? "STOP" : "START"); suffix = tmpStr1; break; + // + case MENU_WIFI_ENABLED: suffix = (liveData->settings.wifiEnabled == 1) ? "[on]" : "[off]"; break; case MENU_WIFI_SSID: sprintf(tmpStr1, "%s", liveData->settings.wifiSsid); suffix = tmpStr1; break; case MENU_WIFI_PASSWORD: sprintf(tmpStr1, "%s", liveData->settings.wifiPassword); suffix = tmpStr1; break; // @@ -1006,6 +1013,11 @@ void Board320_240::menuItemClick() { case MENU_WIFI_ENABLED: liveData->settings.wifiEnabled = (liveData->settings.wifiEnabled == 1) ? 0 : 1; showMenu(); return; break; case MENU_WIFI_SSID: return; break; case MENU_WIFI_PASSWORD: return; break; + // Sdcard + case MENU_SDCARD_ENABLED: liveData->settings.sdcardEnabled = (liveData->settings.sdcardEnabled == 1) ? 0 : 1; showMenu(); return; break; + case MENU_SDCARD_AUTOSTARTLOG: liveData->settings.sdcardAutstartLog = (liveData->settings.sdcardAutstartLog == 1) ? 0 : 1; showMenu(); return; break; + case MENU_SDCARD_MOUNT_STATUS: sdcardMount(); break; + case MENU_SDCARD_REC: sdcardToggleRecording(); showMenu(); return; break; // Distance case 4011: liveData->settings.distanceUnit = 'k'; showParentMenu = true; break; case 4012: liveData->settings.distanceUnit = 'm'; showParentMenu = true; break; @@ -1044,7 +1056,7 @@ void Board320_240::menuItemClick() { liveData->menuItemSelected = 0; for (i = 0; i < liveData->menuItemsCount; ++i) { if (parentMenu == liveData->menuItems[i].parentId) { - if (liveData->menuItems[i].id == liveData->menuCurrent) + if (liveData->menuItems[i].id == liveData->menuCurrent) break; liveData->menuItemSelected++; } @@ -1128,6 +1140,14 @@ void Board320_240::redrawScreen() { } if (!displayScreenSpeedHud) { + + // SDCARD recording + /*liveData->params.sdcardRecording*/ + if (liveData->settings.sdcardEnabled == 1) { + spr.fillCircle(310, 10, 7, TFT_BLACK); + spr.fillCircle(310, 10, 6, TFT_RED); + } + // BLE not connected if (!liveData->bleConnected && liveData->bleConnect) { // Print message @@ -1218,7 +1238,7 @@ void Board320_240::mainLoop() { } } } - // Both left&right button (hide menu) + // Both left&right button (hide menu) if (digitalRead(pinButtonLeft) == LOW && digitalRead(pinButtonRight) == LOW) { hideMenu(); } @@ -1231,4 +1251,48 @@ bool Board320_240::skipAdapterScan() { return digitalRead(pinButtonMiddle) == LOW || digitalRead(pinButtonLeft) == LOW || digitalRead(pinButtonRight) == LOW; } +/** + Mount sdcard +*/ +bool Board320_240::sdcardMount() { + + if (liveData->params.sdcardInit) { + Serial.print("SD card already mounted..."); + return true; + } + + int8_t countdown = 10; + while (1) { + Serial.print("Initializing SD card..."); + /* + if (SD.begin(pinSdcardCs, pinSdcardMosi, pinSdcardMiso, pinSdcardSclk)) { + Serial.println("SD card found."); + liveData->params.sdcardInit = true; + return true; + } + */ + //SPI.begin(); + if (SD.begin(pinSdcardCs, SPI, SPI_FREQUENCY)) { + Serial.println("SD card found."); + liveData->params.sdcardInit = true; + return true; + } + Serial.println("Initialization failed!"); + countdown--; + if (countdown <= 0) { + break; + } + delay(500); + } + + return false; +} + +/** + Toggle sdcard recording +*/ +void Board320_240::sdcardToggleRecording() { + +} + #endif // BOARD320_240_CPP diff --git a/Board320_240.h b/Board320_240.h index cff7838..7d048d3 100644 --- a/Board320_240.h +++ b/Board320_240.h @@ -33,11 +33,18 @@ class Board320_240 : public BoardInterface { byte pinButtonMiddle = 0; byte pinSpeaker = 0; byte pinBrightness = 0; - // + byte pinSdcardCs = 0; + byte pinSdcardMosi = 0; + byte pinSdcardMiso = 0; + byte pinSdcardSclk = 0; + // void initBoard() override; void afterSetup() override; void mainLoop() override; bool skipAdapterScan() override; + // SD card + bool sdcardMount() override; + void sdcardToggleRecording() override; // Basic GUI void setBrightness(byte lcdBrightnessPerc) override; void displayMessage(const char* row1, const char* row2) override; @@ -59,7 +66,7 @@ class Board320_240 : public BoardInterface { void hideMenu() override; void menuMove(bool forward); void menuItemClick(); - // + // void loadTestData(); // }; diff --git a/BoardInterface.h b/BoardInterface.h index bbcc580..86bdf85 100644 --- a/BoardInterface.h +++ b/BoardInterface.h @@ -46,6 +46,9 @@ class BoardInterface { void resetSettings(); void loadSettings(); void customConsoleCommand(String cmd); + // Sdcard + virtual bool sdcardMount() {return false; }; + virtual void sdcardToggleRecording()=0; }; #endif // BOARDINTERFACE_H diff --git a/BoardM5stackCore.cpp b/BoardM5stackCore.cpp index 1822488..6d7b903 100644 --- a/BoardM5stackCore.cpp +++ b/BoardM5stackCore.cpp @@ -11,12 +11,17 @@ void BoardM5stackCore::initBoard() { invertDisplay = true; + pinButtonLeft = BUTTON_LEFT; pinButtonRight = BUTTON_RIGHT; pinButtonMiddle = BUTTON_MIDDLE; pinSpeaker = SPEAKER_PIN; pinBrightness = TFT_BL; - + pinSdcardCs = SDCARD_CS; + pinSdcardMosi = SDCARD_MOSI; + pinSdcardMiso = SDCARD_MISO; + pinSdcardSclk = SDCARD_SCLK; + // Mute speaker //ledcWriteTone(TONE_PIN_CHANNEL, 0); digitalWrite(SPEAKER_PIN, 0); diff --git a/BoardM5stackCore.h b/BoardM5stackCore.h index 115f4ec..9ce7a4c 100644 --- a/BoardM5stackCore.h +++ b/BoardM5stackCore.h @@ -20,8 +20,12 @@ // BEEP PIN #define SPEAKER_PIN 25 #define TONE_PIN_CHANNEL 0 + // SDCARD -#define TFCARD_CS_PIN 4 +#define SDCARD_CS 4 +#define SDCARD_MOSI 23 +#define SDCARD_MISO 19 +#define SDCARD_SCLK 18 #define BUTTON_LEFT 37 #define BUTTON_MIDDLE 38 diff --git a/BoardTtgoT4v13.cpp b/BoardTtgoT4v13.cpp index bb1a0e8..4057a96 100644 --- a/BoardTtgoT4v13.cpp +++ b/BoardTtgoT4v13.cpp @@ -15,6 +15,10 @@ void BoardTtgoT4v13::initBoard() { pinButtonMiddle = BUTTON_MIDDLE; //pinSpeaker = SPEAKER_PIN; pinBrightness = TFT_BL; + pinSdcardCs = SDCARD_CS; + pinSdcardMosi = SDCARD_MOSI; + pinSdcardMiso = SDCARD_MISO; + pinSdcardSclk = SDCARD_SCLK; Board320_240::initBoard(); } diff --git a/BoardTtgoT4v13.h b/BoardTtgoT4v13.h index f8e02d8..e0a9bef 100644 --- a/BoardTtgoT4v13.h +++ b/BoardTtgoT4v13.h @@ -20,10 +20,10 @@ //#define SPI_FREQUENCY 40000000 // Maximum for ILI9341 #define SPI_READ_FREQUENCY 6000000 // 6 MHz is the maximum SPI read speed for the ST7789V -#define SD_CS 13 -#define SD_MOSI 15 -#define SD_MISO 2 -#define SD_SCLK 14 +#define SDCARD_CS 13 +#define SDCARD_MOSI 15 +#define SDCARD_MISO 2 +#define SDCARD_SCLK 14 #define BUTTON_LEFT 38 #define BUTTON_MIDDLE 37 diff --git a/LiveData.cpp b/LiveData.cpp index badcefd..b3c0564 100644 --- a/LiveData.cpp +++ b/LiveData.cpp @@ -11,8 +11,13 @@ void LiveData::initParams() { params.automaticShutdownTimer = 0; + // SIM params.lastDataSent = 0; params.sim800l_enabled = false; + // SD card + params.sdcardInit = false; + params.sdcardRecording = false; + // Car data params.ignitionOn = false; params.ignitionOnPrevious = false; params.chargingStartTime = params.currentTime = 0; diff --git a/LiveData.h b/LiveData.h index acfcc3f..ab54bb0 100644 --- a/LiveData.h +++ b/LiveData.h @@ -31,11 +31,17 @@ // Structure with realtime values typedef struct { + // System time_t currentTime; time_t chargingStartTime; time_t automaticShutdownTimer; + // SIM time_t lastDataSent; bool sim800l_enabled; + // SD card + bool sdcardInit; + bool sdcardRecording; + // Car params bool ignitionOn; bool ignitionOnPrevious; bool forwardDriveMode; diff --git a/config.h b/config.h index 90f551d..1611f09 100644 --- a/config.h +++ b/config.h @@ -74,11 +74,11 @@ typedef struct { #define MENU_GPRS 302 #define MENU_NTP 303 #define MENU_SDCARD 304 -#define MENU_REMOTE_UPLOAD 305 -#define MENU_SCREEN_ROTATION 306 -#define MENU_DEFAULT_SCREEN 307 -#define MENU_SCREEN_BRIGHTNESS 308 -#define MENU_PREDRAWN_GRAPHS 309 +#define MENU_SCREEN_ROTATION 305 +#define MENU_DEFAULT_SCREEN 306 +#define MENU_SCREEN_BRIGHTNESS 307 +#define MENU_PREDRAWN_GRAPHS 308 +#define MENU_REMOTE_UPLOAD 309 #define MENU_HEADLIGHTS_REMINDER 310 #define MENU_DEBUG_SCREEN 311 // @@ -89,6 +89,11 @@ typedef struct { #define MENU_WIFI_ENABLED 3011 #define MENU_WIFI_SSID 3012 #define MENU_WIFI_PASSWORD 3013 - +// +#define MENU_SDCARD_ENABLED 3041 +#define MENU_SDCARD_AUTOSTARTLOG 3042 +#define MENU_SDCARD_MOUNT_STATUS 3043 +#define MENU_SDCARD_REC 3044 +// #endif // CONFIG_H diff --git a/menu.h b/menu.h index 9066b84..743befc 100644 --- a/menu.h +++ b/menu.h @@ -63,12 +63,11 @@ MENU_ITEM menuItemsSource[100] = { {MENU_WIFI_PASSWORD, 301, -1, "Password"}, {3040, 304, 3, "<- parent menu"}, - {3041, 304, -1, "Info:"}, - {3042, 304, -1, "Mount manually"}, - {3043, 304, -1, "Record now"}, - {3044, 304, -1, "Stop recording"}, - {3045, 304, -1, "Record on boot off/on"}, - + {MENU_SDCARD_ENABLED, 304, -1, "SD enabled"}, + {MENU_SDCARD_AUTOSTARTLOG, 304, -1, "Autostart log enabled"}, + {MENU_SDCARD_MOUNT_STATUS, 304, -1, "Status"}, + {MENU_SDCARD_REC, 304, -1, "Record"}, + {3070, 307, 3, "<- parent menu"}, {3071, 307, -1, "Auto mode"}, {3072, 307, -1, "Basic info"},