278 lines
8.4 KiB
C++
278 lines
8.4 KiB
C++
#include "Display.h"
|
|
|
|
// Constructor implementation
|
|
EPaper Display::_epaper;
|
|
Display::Display() {}
|
|
void Display::init(){
|
|
_epaper.begin();
|
|
_epaper.fillScreen(TFT_WHITE);
|
|
_epaper.setTextColor(TFT_BLACK, TFT_WHITE); // Adding a background colour erases previous text automatically
|
|
|
|
_drawScreenLayout();
|
|
refreshDisplay();
|
|
}
|
|
void Display::refreshDisplay(){
|
|
_epaper.update();
|
|
//_epaper.sleep();
|
|
}
|
|
void Display::_drawScreenLayout(){
|
|
_drawFPS();
|
|
_drawFPE();
|
|
showChronographDisconnected();
|
|
_drawShotCount();
|
|
_drawAverageFPS();
|
|
_drawLowFPS();
|
|
_drawHighFPS();
|
|
_drawSpread();
|
|
_drawStandardDeviation();
|
|
_drawProfile();
|
|
_drawLastShots();
|
|
}
|
|
void Display::_drawFPE(){
|
|
_epaper.setTextSize(2);
|
|
_epaper.drawString("FPE: ",20,240);
|
|
}
|
|
void Display::updateFPE(int fpe){
|
|
_epaper.fillRect(65,230,100,35,TFT_WHITE);
|
|
char buffer[10];
|
|
itoa(fpe, buffer, 10);
|
|
_epaper.setTextSize(2);
|
|
_epaper.drawString(buffer,70,240);
|
|
}
|
|
void Display::_drawFPS(){
|
|
_epaper.drawRoundRect(10, 10, 300, 260, 10, TFT_BLACK);
|
|
_epaper.setTextSize(2);
|
|
_epaper.drawString("Latest Shot:", 15, 15);
|
|
}
|
|
void Display::updateFPS(int fps){
|
|
if (fps>0){
|
|
_epaper.fillRoundRect(20, 70, 280, 110, 15, TFT_WHITE);
|
|
_epaper.setTextSize(20);
|
|
char floatCharArray[10];
|
|
dtostrf(fps, 3, 0, floatCharArray);
|
|
_epaper.drawString(floatCharArray, 100, 100);
|
|
_epaper.setTextSize(2);
|
|
_epaper.drawString("fps", 145, 155);
|
|
}
|
|
else{
|
|
_epaper.fillRoundRect(20, 70, 280, 110, 15, TFT_WHITE);
|
|
_epaper.setTextSize(20);
|
|
_epaper.drawString(" -", 100, 100);
|
|
_epaper.setTextSize(2);
|
|
_epaper.drawString("fps", 145, 155);
|
|
}
|
|
}
|
|
void Display::_drawAverageFPS(){
|
|
_epaper.drawRoundRect(450, 10, 120, 80, 10, TFT_BLACK);
|
|
_epaper.setTextSize(2);
|
|
_epaper.drawString("Avg FPS:",465,15);
|
|
_epaper.setTextSize(4);
|
|
_epaper.drawString("-",475,45);
|
|
}
|
|
void Display::updateAverageFPS(int fps){
|
|
_epaper.fillRoundRect(460, 35, 100, 45, 10, TFT_WHITE);
|
|
_epaper.setTextSize(4);
|
|
if (fps>0){
|
|
char buffer[10];
|
|
itoa(fps, buffer, 10);
|
|
_epaper.drawString(buffer,475,45);
|
|
}
|
|
else{
|
|
_epaper.drawString("-",475,45);
|
|
}
|
|
}
|
|
void Display::_drawLowFPS(){
|
|
_epaper.drawRoundRect(450, 100, 120, 80, 10, TFT_BLACK);
|
|
_epaper.setTextSize(2);
|
|
_epaper.drawString("Low FPS:",465,105);
|
|
_epaper.setTextSize(4);
|
|
_epaper.drawString("-",475,135);
|
|
}
|
|
void Display::updateLowFPS(int fps){
|
|
_epaper.fillRoundRect(460, 125, 100, 45, 10, TFT_WHITE);
|
|
_epaper.setTextSize(4);
|
|
if (fps>0){
|
|
char buffer[10];
|
|
itoa(fps, buffer, 10);
|
|
_epaper.drawString(buffer,475,135);
|
|
}
|
|
else{
|
|
_epaper.drawString("-",475,135);
|
|
}
|
|
}
|
|
void Display::_drawHighFPS(){
|
|
_epaper.drawRoundRect(450, 190, 120, 80, 10, TFT_BLACK);
|
|
_epaper.setTextSize(2);
|
|
_epaper.drawString("High FPS:",460,195);
|
|
_epaper.setTextSize(4);
|
|
_epaper.drawString("-",475,225);
|
|
}
|
|
void Display::updateHighFPS(int fps){
|
|
_epaper.fillRoundRect(460, 215, 100, 45, 10, TFT_WHITE);
|
|
_epaper.setTextSize(2);
|
|
_epaper.drawString("High FPS:",460,195);
|
|
_epaper.setTextSize(4);
|
|
if (fps>0){
|
|
char buffer[10];
|
|
itoa(fps, buffer, 10);
|
|
_epaper.drawString(buffer,475,225);
|
|
}
|
|
else{
|
|
_epaper.drawString("-",475,225);
|
|
}
|
|
}
|
|
void Display::_drawProfile(){
|
|
_epaper.drawRoundRect(580, 40, 210, 230, 10, TFT_BLACK);
|
|
_epaper.setTextSize(2);
|
|
_epaper.drawString("Profile:", 585, 45);
|
|
}
|
|
void Display::updateProfile(ChronoProfile& profile){
|
|
String gunName=profile.getGunProfile().getName();
|
|
int powerLevel=profile.getGunProfile().getPowerLevel() + 1;
|
|
_epaper.fillRect(590, 70, 280, 120, TFT_WHITE);
|
|
_epaper.drawRoundRect(580, 40, 210, 230, 10, TFT_BLACK);
|
|
_epaper.setTextSize(2);
|
|
_epaper.drawString(gunName, 595, 75);
|
|
_epaper.drawCircle(770, 56, 12, TFT_BLACK);
|
|
char buffer[10];
|
|
itoa(powerLevel, buffer, 10);
|
|
_epaper.drawString(buffer, 766, 49);
|
|
|
|
String projectileName=profile.getProjectileProfile().getName();
|
|
String projectileType=profile.getProjectileProfile().getType();
|
|
float projectileWeight=profile.getProjectileProfile().getWeight();
|
|
float projectileCaliber=profile.getProjectileProfile().getCaliber();
|
|
_epaper.drawString(projectileName, 595, 105);
|
|
char buffer3[10];
|
|
dtostrf(projectileCaliber, 0, 2, buffer3);
|
|
char buffer4[10];
|
|
strncpy(buffer4, buffer3 + 1, 4);
|
|
_epaper.drawString(buffer4, 595, 130);
|
|
_epaper.drawString(projectileType, 595, 155);
|
|
char buffer2[10];
|
|
dtostrf(projectileWeight, 1, 2, buffer2);
|
|
char out[20];
|
|
strcpy(out,buffer2);
|
|
strcat(out,"g");
|
|
_epaper.drawString(out, 595, 180);
|
|
}
|
|
void Display::_drawShotCount(){
|
|
_epaper.drawRoundRect(320, 10, 120, 80, 10, TFT_BLACK);
|
|
_epaper.setTextSize(2);
|
|
_epaper.drawString("Count:",325,15);
|
|
_epaper.setTextSize(4);
|
|
_epaper.drawString("-",335,45);
|
|
}
|
|
void Display::updateShotCount(int count){
|
|
_epaper.fillRoundRect(330, 35, 100, 45, 10, TFT_WHITE);
|
|
char buffer[10];
|
|
itoa(count, buffer, 10);
|
|
_epaper.setTextSize(4);
|
|
_epaper.drawString(buffer,335,45);
|
|
}
|
|
void Display::_drawSpread(){
|
|
_epaper.drawRoundRect(320, 100, 120, 80, 10, TFT_BLACK);
|
|
_epaper.setTextSize(2);
|
|
_epaper.drawString("Spread:",325,105);
|
|
_epaper.setTextSize(4);
|
|
_epaper.drawString("-",335,135);
|
|
}
|
|
void Display::updateSpread(int spread){
|
|
_epaper.fillRoundRect(330, 125, 100, 45, 10, TFT_WHITE);
|
|
_epaper.setTextSize(2);
|
|
_epaper.drawString("Spread:",325,105);
|
|
_epaper.setTextSize(4);
|
|
if (spread>=0){
|
|
char buffer[10];
|
|
itoa(spread, buffer, 10);
|
|
_epaper.drawString(buffer,335,135);
|
|
}
|
|
else{
|
|
_epaper.drawString("-",335,135);
|
|
}
|
|
}
|
|
void Display::_drawStandardDeviation(){
|
|
_epaper.drawRoundRect(320, 190, 120, 80, 10, TFT_BLACK);
|
|
_epaper.setTextSize(2);
|
|
_epaper.drawString("SD:",325,195);
|
|
_epaper.setTextSize(4);
|
|
_epaper.drawString("-",335,225);
|
|
}
|
|
void Display::updateStandardDeviation(float sd){
|
|
_epaper.fillRoundRect(330, 215, 100, 45, 10, TFT_WHITE);
|
|
if (sd==0){
|
|
_epaper.setTextSize(4);
|
|
_epaper.drawString("-",335,225);
|
|
}
|
|
else{
|
|
_epaper.setTextSize(3);
|
|
char buffer[10];
|
|
dtostrf(sd, 1, 2, buffer);
|
|
_epaper.drawString(buffer,335,225);
|
|
}
|
|
}
|
|
void Display::_drawLastShots(){
|
|
_epaper.drawRoundRect(10, 280, 780, 190, 10, TFT_BLACK);
|
|
_epaper.setTextSize(2);
|
|
_epaper.drawString("Last Shots:",15,285);
|
|
}
|
|
void Display::updateLastShots(LinkedList<ChronoReading> &chronoReadings){
|
|
_epaper.fillRoundRect(20, 305, 760, 155, 10, TFT_WHITE);
|
|
const int max=32;
|
|
_epaper.setTextSize(2);
|
|
int chronographReadingCount=chronoReadings.size();
|
|
if (chronographReadingCount>0){
|
|
int x=25;
|
|
int y=310;
|
|
for (int i=0;i<chronographReadingCount;i++){
|
|
if (i>=max){break;}
|
|
int c=chronographReadingCount-i;
|
|
int fps=chronoReadings.get(chronographReadingCount-i-1).getFPS();
|
|
int fpe=chronoReadings.get(chronographReadingCount-i-1).getFPE();
|
|
char charArray[50];
|
|
sprintf(charArray, "%d) %d / %d", c, fps, fpe);
|
|
if (i%8 == 0 && i>0){x=x+190; y=310;}
|
|
_epaper.drawString(charArray, x, y);
|
|
y=y+20;
|
|
}
|
|
}
|
|
}
|
|
void Display::showChronographConnected(){
|
|
_epaper.fillRoundRect(20, 70, 280, 110, 15, TFT_WHITE);
|
|
//_epaper.update();
|
|
_epaper.setTextSize(20);
|
|
_epaper.drawString(" -", 100, 100);
|
|
_epaper.setTextSize(2);
|
|
_epaper.drawString("fps", 145, 155);
|
|
}
|
|
void Display::showChronographDisconnected(){
|
|
_epaper.setTextSize(3);
|
|
_epaper.fillRoundRect(20, 70, 280, 110, 15, TFT_BLACK);
|
|
//_epaper.update();
|
|
_epaper.setTextColor(TFT_WHITE, TFT_BLACK);
|
|
_epaper.drawString("Searching", 80, 80);
|
|
_epaper.drawString("for", 135, 110);
|
|
_epaper.drawString("chronograph...", 35, 140);
|
|
_epaper.setTextColor(TFT_BLACK, TFT_WHITE);
|
|
}
|
|
void Display::updateTime(String time){
|
|
_epaper.drawRect(698, 8, 102, 35, TFT_WHITE); //reset to get rid of ghosting
|
|
_epaper.update();
|
|
_epaper.setTextSize(3);
|
|
_epaper.drawString(time,700,10);
|
|
}
|
|
void Display::updateEntireDisplay(){
|
|
ChronoReadingManager& chronoReadings = ChronoReadingManager::getInstance();
|
|
|
|
//update display
|
|
updateFPS(chronoReadings.getLastFPS());
|
|
updateFPE(chronoReadings.getLastFPE());
|
|
updateShotCount(chronoReadings.getShotCount());
|
|
updateAverageFPS(chronoReadings.getAvgFPS());
|
|
updateLowFPS(chronoReadings.getLowFPS());
|
|
updateHighFPS(chronoReadings.getHighFPS());
|
|
updateSpread(chronoReadings.getSpread());
|
|
updateStandardDeviation(chronoReadings.getStandardDeviation());
|
|
LinkedList<ChronoReading> &readings=chronoReadings.getChronographReadings();
|
|
updateLastShots(readings);
|
|
} |