sdcard menu

This commit is contained in:
Lubos Petrovic
2020-12-06 08:15:10 +01:00
parent 7678d67cff
commit e86127a100
11 changed files with 126 additions and 24 deletions

View File

@@ -1,6 +1,7 @@
#ifndef BOARD320_240_CPP #ifndef BOARD320_240_CPP
#define BOARD320_240_CPP #define BOARD320_240_CPP
#include <SD.h>
#include <analogWrite.h> #include <analogWrite.h>
#include <TFT_eSPI.h> #include <TFT_eSPI.h>
#include <WiFi.h> #include <WiFi.h>
@@ -856,7 +857,8 @@ WL_CONNECTION_LOST: suffix = "CONNECTION_LOST"; break;
WL_DISCONNECTED: suffix = "DISCONNECTED"; break; WL_DISCONNECTED: suffix = "DISCONNECTED"; break;
} }
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_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_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; 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_HEADLIGHTS_REMINDER: suffix = (liveData->settings.headlightsReminder == 1) ? "[on]" : "[off]"; break;
case MENU_DEBUG_SCREEN: suffix = (liveData->settings.debugScreen == 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_SSID: sprintf(tmpStr1, "%s", liveData->settings.wifiSsid); suffix = tmpStr1; break;
case MENU_WIFI_PASSWORD: sprintf(tmpStr1, "%s", liveData->settings.wifiPassword); 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_ENABLED: liveData->settings.wifiEnabled = (liveData->settings.wifiEnabled == 1) ? 0 : 1; showMenu(); return; break;
case MENU_WIFI_SSID: return; break; case MENU_WIFI_SSID: return; break;
case MENU_WIFI_PASSWORD: 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 // Distance
case 4011: liveData->settings.distanceUnit = 'k'; showParentMenu = true; break; case 4011: liveData->settings.distanceUnit = 'k'; showParentMenu = true; break;
case 4012: liveData->settings.distanceUnit = 'm'; showParentMenu = true; break; case 4012: liveData->settings.distanceUnit = 'm'; showParentMenu = true; break;
@@ -1044,7 +1056,7 @@ void Board320_240::menuItemClick() {
liveData->menuItemSelected = 0; liveData->menuItemSelected = 0;
for (i = 0; i < liveData->menuItemsCount; ++i) { for (i = 0; i < liveData->menuItemsCount; ++i) {
if (parentMenu == liveData->menuItems[i].parentId) { if (parentMenu == liveData->menuItems[i].parentId) {
if (liveData->menuItems[i].id == liveData->menuCurrent) if (liveData->menuItems[i].id == liveData->menuCurrent)
break; break;
liveData->menuItemSelected++; liveData->menuItemSelected++;
} }
@@ -1128,6 +1140,14 @@ void Board320_240::redrawScreen() {
} }
if (!displayScreenSpeedHud) { 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 // BLE not connected
if (!liveData->bleConnected && liveData->bleConnect) { if (!liveData->bleConnected && liveData->bleConnect) {
// Print message // 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) { if (digitalRead(pinButtonLeft) == LOW && digitalRead(pinButtonRight) == LOW) {
hideMenu(); hideMenu();
} }
@@ -1231,4 +1251,48 @@ bool Board320_240::skipAdapterScan() {
return digitalRead(pinButtonMiddle) == LOW || digitalRead(pinButtonLeft) == LOW || digitalRead(pinButtonRight) == LOW; 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 #endif // BOARD320_240_CPP

View File

@@ -33,11 +33,18 @@ class Board320_240 : public BoardInterface {
byte pinButtonMiddle = 0; byte pinButtonMiddle = 0;
byte pinSpeaker = 0; byte pinSpeaker = 0;
byte pinBrightness = 0; byte pinBrightness = 0;
// byte pinSdcardCs = 0;
byte pinSdcardMosi = 0;
byte pinSdcardMiso = 0;
byte pinSdcardSclk = 0;
//
void initBoard() override; void initBoard() override;
void afterSetup() override; void afterSetup() override;
void mainLoop() override; void mainLoop() override;
bool skipAdapterScan() override; bool skipAdapterScan() override;
// SD card
bool sdcardMount() override;
void sdcardToggleRecording() override;
// Basic GUI // Basic GUI
void setBrightness(byte lcdBrightnessPerc) override; void setBrightness(byte lcdBrightnessPerc) override;
void displayMessage(const char* row1, const char* row2) override; void displayMessage(const char* row1, const char* row2) override;
@@ -59,7 +66,7 @@ class Board320_240 : public BoardInterface {
void hideMenu() override; void hideMenu() override;
void menuMove(bool forward); void menuMove(bool forward);
void menuItemClick(); void menuItemClick();
// //
void loadTestData(); void loadTestData();
// //
}; };

View File

@@ -46,6 +46,9 @@ class BoardInterface {
void resetSettings(); void resetSettings();
void loadSettings(); void loadSettings();
void customConsoleCommand(String cmd); void customConsoleCommand(String cmd);
// Sdcard
virtual bool sdcardMount() {return false; };
virtual void sdcardToggleRecording()=0;
}; };
#endif // BOARDINTERFACE_H #endif // BOARDINTERFACE_H

View File

@@ -11,12 +11,17 @@
void BoardM5stackCore::initBoard() { void BoardM5stackCore::initBoard() {
invertDisplay = true; invertDisplay = true;
pinButtonLeft = BUTTON_LEFT; pinButtonLeft = BUTTON_LEFT;
pinButtonRight = BUTTON_RIGHT; pinButtonRight = BUTTON_RIGHT;
pinButtonMiddle = BUTTON_MIDDLE; pinButtonMiddle = BUTTON_MIDDLE;
pinSpeaker = SPEAKER_PIN; pinSpeaker = SPEAKER_PIN;
pinBrightness = TFT_BL; pinBrightness = TFT_BL;
pinSdcardCs = SDCARD_CS;
pinSdcardMosi = SDCARD_MOSI;
pinSdcardMiso = SDCARD_MISO;
pinSdcardSclk = SDCARD_SCLK;
// Mute speaker // Mute speaker
//ledcWriteTone(TONE_PIN_CHANNEL, 0); //ledcWriteTone(TONE_PIN_CHANNEL, 0);
digitalWrite(SPEAKER_PIN, 0); digitalWrite(SPEAKER_PIN, 0);

View File

@@ -20,8 +20,12 @@
// BEEP PIN // BEEP PIN
#define SPEAKER_PIN 25 #define SPEAKER_PIN 25
#define TONE_PIN_CHANNEL 0 #define TONE_PIN_CHANNEL 0
// SDCARD // 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_LEFT 37
#define BUTTON_MIDDLE 38 #define BUTTON_MIDDLE 38

View File

@@ -15,6 +15,10 @@ void BoardTtgoT4v13::initBoard() {
pinButtonMiddle = BUTTON_MIDDLE; pinButtonMiddle = BUTTON_MIDDLE;
//pinSpeaker = SPEAKER_PIN; //pinSpeaker = SPEAKER_PIN;
pinBrightness = TFT_BL; pinBrightness = TFT_BL;
pinSdcardCs = SDCARD_CS;
pinSdcardMosi = SDCARD_MOSI;
pinSdcardMiso = SDCARD_MISO;
pinSdcardSclk = SDCARD_SCLK;
Board320_240::initBoard(); Board320_240::initBoard();
} }

View File

@@ -20,10 +20,10 @@
//#define SPI_FREQUENCY 40000000 // Maximum for ILI9341 //#define SPI_FREQUENCY 40000000 // Maximum for ILI9341
#define SPI_READ_FREQUENCY 6000000 // 6 MHz is the maximum SPI read speed for the ST7789V #define SPI_READ_FREQUENCY 6000000 // 6 MHz is the maximum SPI read speed for the ST7789V
#define SD_CS 13 #define SDCARD_CS 13
#define SD_MOSI 15 #define SDCARD_MOSI 15
#define SD_MISO 2 #define SDCARD_MISO 2
#define SD_SCLK 14 #define SDCARD_SCLK 14
#define BUTTON_LEFT 38 #define BUTTON_LEFT 38
#define BUTTON_MIDDLE 37 #define BUTTON_MIDDLE 37

View File

@@ -11,8 +11,13 @@
void LiveData::initParams() { void LiveData::initParams() {
params.automaticShutdownTimer = 0; params.automaticShutdownTimer = 0;
// SIM
params.lastDataSent = 0; params.lastDataSent = 0;
params.sim800l_enabled = false; params.sim800l_enabled = false;
// SD card
params.sdcardInit = false;
params.sdcardRecording = false;
// Car data
params.ignitionOn = false; params.ignitionOn = false;
params.ignitionOnPrevious = false; params.ignitionOnPrevious = false;
params.chargingStartTime = params.currentTime = 0; params.chargingStartTime = params.currentTime = 0;

View File

@@ -31,11 +31,17 @@
// Structure with realtime values // Structure with realtime values
typedef struct { typedef struct {
// System
time_t currentTime; time_t currentTime;
time_t chargingStartTime; time_t chargingStartTime;
time_t automaticShutdownTimer; time_t automaticShutdownTimer;
// SIM
time_t lastDataSent; time_t lastDataSent;
bool sim800l_enabled; bool sim800l_enabled;
// SD card
bool sdcardInit;
bool sdcardRecording;
// Car params
bool ignitionOn; bool ignitionOn;
bool ignitionOnPrevious; bool ignitionOnPrevious;
bool forwardDriveMode; bool forwardDriveMode;

View File

@@ -74,11 +74,11 @@ typedef struct {
#define MENU_GPRS 302 #define MENU_GPRS 302
#define MENU_NTP 303 #define MENU_NTP 303
#define MENU_SDCARD 304 #define MENU_SDCARD 304
#define MENU_REMOTE_UPLOAD 305 #define MENU_SCREEN_ROTATION 305
#define MENU_SCREEN_ROTATION 306 #define MENU_DEFAULT_SCREEN 306
#define MENU_DEFAULT_SCREEN 307 #define MENU_SCREEN_BRIGHTNESS 307
#define MENU_SCREEN_BRIGHTNESS 308 #define MENU_PREDRAWN_GRAPHS 308
#define MENU_PREDRAWN_GRAPHS 309 #define MENU_REMOTE_UPLOAD 309
#define MENU_HEADLIGHTS_REMINDER 310 #define MENU_HEADLIGHTS_REMINDER 310
#define MENU_DEBUG_SCREEN 311 #define MENU_DEBUG_SCREEN 311
// //
@@ -89,6 +89,11 @@ typedef struct {
#define MENU_WIFI_ENABLED 3011 #define MENU_WIFI_ENABLED 3011
#define MENU_WIFI_SSID 3012 #define MENU_WIFI_SSID 3012
#define MENU_WIFI_PASSWORD 3013 #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 #endif // CONFIG_H

11
menu.h
View File

@@ -63,12 +63,11 @@ MENU_ITEM menuItemsSource[100] = {
{MENU_WIFI_PASSWORD, 301, -1, "Password"}, {MENU_WIFI_PASSWORD, 301, -1, "Password"},
{3040, 304, 3, "<- parent menu"}, {3040, 304, 3, "<- parent menu"},
{3041, 304, -1, "Info:"}, {MENU_SDCARD_ENABLED, 304, -1, "SD enabled"},
{3042, 304, -1, "Mount manually"}, {MENU_SDCARD_AUTOSTARTLOG, 304, -1, "Autostart log enabled"},
{3043, 304, -1, "Record now"}, {MENU_SDCARD_MOUNT_STATUS, 304, -1, "Status"},
{3044, 304, -1, "Stop recording"}, {MENU_SDCARD_REC, 304, -1, "Record"},
{3045, 304, -1, "Record on boot off/on"},
{3070, 307, 3, "<- parent menu"}, {3070, 307, 3, "<- parent menu"},
{3071, 307, -1, "Auto mode"}, {3071, 307, -1, "Auto mode"},
{3072, 307, -1, "Basic info"}, {3072, 307, -1, "Basic info"},