Added SdCardConfig class and Modified class diagram plus other little things

This commit is contained in:
anschrammh 2019-03-03 22:22:12 +01:00
parent 72ff0d14a9
commit 218d9c3eeb
12 changed files with 1913 additions and 164 deletions

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
#include "SAB.h"
SAB::SAB() : _screenConfig(128, 64, 0x3C), _display(_screenConfig.getWidth(), _screenConfig.getHeight(), &Wire), _screenManager(_display), _rtc(), _rtcManager(_rtc), _error(0)
SAB::SAB() : _screenConfig(128, 64, 0x3C), _sdCardConfig(SPI_FULL_SPEED), _display(_screenConfig.getWidth(), _screenConfig.getHeight(), &Wire), _screenManager(_display), _rtc(), _rtcManager(_rtc), _sdCard(), _sdCardManager(_sdCard), _error(0)
{
Serial.begin(9600);
delay(200);
@ -8,10 +8,11 @@ SAB::SAB() : _screenConfig(128, 64, 0x3C), _display(_screenConfig.getWidth(), _s
//We initialize the pins for the I2C communication
Wire.begin(_pinConfig.getI2C_sda(), _pinConfig.getI2C_scl());
if(!_rtc.begin()) _error |= RTC_BEGIN_ERR;
if(!_display.begin(SSD1306_SWITCHCAPVCC, _screenConfig.getAddress())){ _error |= DISP_BEGIN_ERR; Serial.println("Display begin error");}
if(!_display.begin(SSD1306_SWITCHCAPVCC, _screenConfig.getAddress())){ _error |= DISP_BEGIN_ERR; }
if(!_sdCard.begin(_sdCardConfig.getSPISpeed(), _pinConfig.getSPI_sdCard_cs())){ _error |= SDCARD_INIT_ERR; }
}
SAB::SAB(const PinMapping pinConfig, const ScreenConfig screenConfig) : _pinConfig(pinConfig), _screenConfig(screenConfig), _display(_screenConfig.getWidth(), _screenConfig.getHeight(), &Wire), _screenManager(_display), _rtc(), _rtcManager(_rtc), _error(0)
SAB::SAB(const PinMapping pinConfig, const ScreenConfig screenConfig, const SDCardConfig sdCardConfig) : _pinConfig(pinConfig), _screenConfig(screenConfig), _sdCardConfig(sdCardConfig), _display(_screenConfig.getWidth(), _screenConfig.getHeight(), &Wire), _screenManager(_display), _rtc(), _rtcManager(_rtc), _sdCard(),_sdCardManager(_sdCard), _error(0)
{
Serial.begin(9600);
delay(200);
@ -20,6 +21,7 @@ SAB::SAB(const PinMapping pinConfig, const ScreenConfig screenConfig) : _pinConf
Wire.begin(_pinConfig.getI2C_sda(), _pinConfig.getI2C_scl());
if(!_rtc.begin()) _error |= RTC_BEGIN_ERR;
if(!_display.begin(SSD1306_SWITCHCAPVCC, _screenConfig.getAddress())) _error |= DISP_BEGIN_ERR;
if(!_sdCard.begin(_sdCardConfig.getSPISpeed(), _pinConfig.getSPI_sdCard_cs())){ _error |= SDCARD_INIT_ERR;}
}
ScreenManager& SAB::getScreenManager()
@ -32,6 +34,11 @@ const RtcManager& SAB::getRtcManager() const
return _rtcManager;
}
SDCardManager& SAB::getSdCardManager()
{
return _sdCardManager;
}
ScreenConfig SAB::getScreenConfig() const
{
return _screenConfig;
@ -42,6 +49,11 @@ PinMapping SAB::getPinConfig() const
return _pinConfig;
}
SDCardConfig SAB::getSdCardConfig() const
{
return _sdCardConfig;
}
unsigned char SAB::getError() const
{
return _error;

View File

@ -2,32 +2,42 @@
#define SAB_H
#include "PinMapping.h"
#include "ScreenConfig.h"
#include "SDCardConfig.h"
#include "RtcManager.h"
#include "ScreenManager.h"
#include "SDCardManager.h"
#include <Adafruit_SSD1306.h>
#include <RTClib.h>
#include <SD.h>
class SAB
{
public:
SAB();
SAB(const PinMapping pinConfig, const ScreenConfig screenConfig);
SAB(const PinMapping pinConfig, const ScreenConfig screenConfig, const SDCardConfig sdCardConfig);
ScreenManager& getScreenManager();
const RtcManager& getRtcManager() const;
SDCardManager& getSdCardManager();
ScreenConfig getScreenConfig() const;
PinMapping getPinConfig() const;
SDCardConfig getSdCardConfig() const;
unsigned char getError() const;
private:
const PinMapping _pinConfig;
const ScreenConfig _screenConfig;
const SDCardConfig _sdCardConfig;
Adafruit_SSD1306 _display;
ScreenManager _screenManager;
const RTC_DS3231 _rtc;
const RtcManager _rtcManager;
SDClass _sdCard;
SDCardManager _sdCardManager;
unsigned char _error;
};

12
src/app/SDCardConfig.cpp Normal file
View File

@ -0,0 +1,12 @@
#include <Arduino.h>
#include "SDCardConfig.h"
SDCardConfig::SDCardConfig(const uint32_t spiSpeed) : _spiSpeed(spiSpeed)
{
}
const uint32_t SDCardConfig::getSPISpeed() const
{
return _spiSpeed;
}

13
src/app/SDCardConfig.h Normal file
View File

@ -0,0 +1,13 @@
#ifndef SDCARDCONFIG_H
#define SDCARDCONFIG_H
class SDCardConfig
{
public:
SDCardConfig(const uint32_t spiSpeed);
const uint32_t getSPISpeed() const;
private:
const uint32_t _spiSpeed;
};
#endif //SDCARDCONFIG_H

View File

@ -1,2 +1,39 @@
#include "SDCardManager.h"
SDCardManager::SDCardManager(SDClass& sdCard) : _sdCardRef(sdCard)
{
}
double SDCardManager::getSize(const SizeUnit sizeUnit) const
{
long numberOf512ByteChunks = _sdCardRef.cardSize();
long unit = 0;
double result = 0;
switch(sizeUnit)
{
case KBIT:
result = (double)numberOf512ByteChunks/2.0*8;
break;
case KBYTE:
result = (double)numberOf512ByteChunks/2.0;
break;
case MBIT:
result = (double)numberOf512ByteChunks/2.0/1024.0*8;
break;
case MBYTE:
result = (double)numberOf512ByteChunks/2.0/1024.0;
break;
case GBIT:
result = (double)numberOf512ByteChunks/2.0/1024.0/1024.0*8;
break;
case GBYTE:
result = (double)numberOf512ByteChunks/2.0/1024.0/1024.0;
break;
default:
result = (double)numberOf512ByteChunks/2.0/1024.0/1024.0;
}
return result;
}

View File

@ -1,15 +1,17 @@
#ifndef SDCARDMANAGER_H
#define SDCARDMANAGER_H
#include <SD.h>
#include "definition.h"
class SDCardManager
{
friend class SAB;
public:
double getSize(const SizeUnit sizeUnit = GBYTE) const;
protected:
SDCardManager(SDClass& sdCard);
private:
SDClass& _sdCardRef;
};
#endif //SDCARDMANAGER_H

View File

@ -136,7 +136,7 @@ boolean ScreenManager::displayView(const int UID)
if(UID == -1 && _currentView == NO_CURRENT_VIEW)
{
//We display an error message on the screen
Serial.println("No current view to display");
return false;
}
else if(UID == -1)
@ -153,12 +153,12 @@ boolean ScreenManager::displayView(const int UID)
if(viewLink == NULL)
{
//We display an error message on the screen
Serial.println("View not found");
return false;
}else if(viewLink->viewLogicFunction == NULL)
{
//We display an error message on the screen
Serial.println("View logic undefined");
return false;
}

View File

@ -7,13 +7,21 @@ SAB sab;
unsigned char *memoryEater = NULL;
unsigned long currentMs = 0;
DateTimePacket dtp = {sab.getRtcManager().getDateTime()};
int mySize = 0;
DateTimePacket dtp = {sab.getRtcManager().getDateTime(), sab.getSdCardManager().getSize(GBYTE)};
void setup() {
// put your setup code here, to run once:
Serial.println("Starting setup");
sab.getScreenManager().addView(&(view_1), &dtp, 1);
Serial.print("SD size : ");Serial.println(sab.getSdCardManager().getSize(GBYTE));
Serial.print("SD size : ");Serial.println(sab.getSdCardManager().getSize(GBIT));
Serial.print("SD size : ");Serial.println(sab.getSdCardManager().getSize(MBYTE));
Serial.print("SD size : ");Serial.println(sab.getSdCardManager().getSize(MBIT));
Serial.print("SD size : ");Serial.println(sab.getSdCardManager().getSize(KBYTE));
Serial.print("SD size : ");Serial.println(sab.getSdCardManager().getSize(KBIT));
Serial.println("End setup");
}
@ -24,6 +32,13 @@ void loop() {
currentMs = millis();
dtp.dateTime = sab.getRtcManager().getDateTime();
sab.getScreenManager().displayView(1);
memoryEater = (unsigned char *) malloc(sizeof(char));
unsigned char *temp = (unsigned char *) realloc(memoryEater,sizeof(unsigned char) * ++mySize);
if(temp != NULL)
memoryEater = temp;
else
{
free(memoryEater);memoryEater = NULL;mySize = 0;
}
}
}

View File

@ -21,6 +21,7 @@ typedef enum { GPIO_0 = 0,
#define RTC_BEGIN_ERR B00000001
#define DISP_BEGIN_ERR B00000010
#define SDCARD_INIT_ERR B00000100
#define MALLOC_ERR B00000001
@ -28,6 +29,8 @@ typedef enum { GPIO_0 = 0,
#define LAST_VIEW -1
typedef enum { OR_0 = 2, OR_90 = 3, OR_180 = 0, OR_270 = 1 } Orientation;
typedef enum { BIT = 0, BYTE, KBIT, KBYTE, MBIT, MBYTE, GBIT, GBYTE } SizeUnit;
//Data structure for the view handling
typedef struct viewLink{
boolean (*viewLogicFunction)(Adafruit_SSD1306&, void*);

View File

@ -4,7 +4,7 @@ boolean view_1(Adafruit_SSD1306 &display, void *pData)
{
char time_str[300] = "";
DateTimePacket *p = (DateTimePacket *) pData;
sprintf(time_str,"RTC:time--> %d:%d:%d\ndate--> %d/%d/%d\nFree RAM : %d\n",p->dateTime.hour(), p->dateTime.minute(), p->dateTime.second(), p->dateTime.day(), p->dateTime.month(), p->dateTime.year(),ESP.getFreeHeap());
sprintf(time_str,"RTC:time--> %d:%d:%d\ndate--> %d/%d/%d\nFree RAM : %d\nSdCard : %.2fGB\n",p->dateTime.hour(), p->dateTime.minute(), p->dateTime.second(), p->dateTime.day(), p->dateTime.month(), p->dateTime.year(),ESP.getFreeHeap(),p->sdCardSize);
display.println(time_str);
return true;

View File

@ -6,6 +6,7 @@
typedef struct dateTimePacket
{
DateTime dateTime;
float sdCardSize;
} DateTimePacket;
boolean view_1(Adafruit_SSD1306 &display, void *pData);