Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Throwing out the welcome mat #9

Merged
merged 13 commits into from
Nov 18, 2023
77 changes: 1 addition & 76 deletions include/HUDL/HUDL.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -70,87 +70,14 @@ class HUDL {
static constexpr uintptr_t MC_NODE_ID = 0x01;

private:
enum CurrentPage {
PAGE_1,
ERROR_PAGE
};

enum Corner {
TOP_LEFT,
TOP_RIGHT,
BOTTOM_LEFT,
BOTTOM_RIGHT
};

CurrentPage currentHUDLScreen = PAGE_1;
bool setHeaders = false;
char* errorString;

unsigned char evtBitMap[1024] = {
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x3F, 0x3F, 0x3F,
0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x03, 0x00, 0x00, 0x00, 0x00, 0x80,
0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,
0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF8, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xF7, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,
0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x0F, 0x01, 0x00, 0x00, 0x00, 0x18, 0x1F,
0x1F, 0x9F, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x1F,
0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F,
0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x3F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F,
0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x9F, 0xFF, 0xFF, 0xFF, 0x7F, 0x1F, 0x01, 0x00, 0x00,
0x00, 0x00, 0xC0, 0xF8, 0xFE, 0xFF, 0xFF, 0x3F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F,
0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFB, 0xF8, 0xF8, 0x78, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8,
0xF8, 0xFF, 0xFF, 0x3F, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8,
0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xFF, 0xFF, 0xFF, 0xF3, 0xF0, 0xF0,
0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x7F, 0x1F, 0x0F, 0x07, 0x01, 0x00, 0x00, 0x80, 0xC0, 0xE0, 0xF0, 0xF0, 0xF0,
0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xFC, 0xFF, 0xFF, 0x0F, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8,
0xF8, 0xF8, 0xF8, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x1F, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F,
0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x9F, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03,
0x01, 0x01, 0x00, 0xC0, 0xE0, 0xE0, 0xF0, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x3F, 0x03, 0x00, 0x00, 0x00, 0x00, 0x80, 0xE0, 0xFE, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xF1,
0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,
0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF8, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,
0xF8, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};

uint16_t dummyValue = 0;

Expand All @@ -168,9 +95,7 @@ class HUDL {

static uint8_t columnForCorner(Corner corner);
static uint8_t pageForCorner(Corner corner);
static uint8_t wrapForCorner(HUDL::Corner corner);

void writeError(const char* text);
void headerForCorner(Corner corner, const char* text);
void dataForCorner(Corner corner, const char* text);

Expand Down Expand Up @@ -274,7 +199,7 @@ class HUDL {
.Data = (uintptr_t) 0xFE,
},
/**
* Motor Controller RPDO 1
* Motor Controller RPDO 1
* 0: RPDO number in index and total number of sub indexes.
* 1: The COB-ID to receive PDOs from.
* 2: transmission trigger
Expand Down
126 changes: 45 additions & 81 deletions src/HUDL/HUDL.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,6 @@ HUDL::HUDL(IO::GPIO& reg_select, IO::GPIO& reset, IO::SPI& spi) : lcd(DEV::LCD(r
void HUDL::initLCD() {
lcd.initLCD();
lcd.clearLCD();
lcd.setEntireScreenBitMap(evtBitMap);
EVT::core::time::wait(2000);
lcd.clearLCD();
// lcd.setDefaultSections(SECTION_TITLES);
// lcd.displaySectionHeaders();
}

CO_OBJ_T* HUDL::getObjectDictionary() {
Expand All @@ -41,62 +36,49 @@ uint16_t HUDL::getObjectDictionarySize() const {
}

void HUDL::updateLCD() {
switch (currentHUDLScreen) {
case PAGE_1: {// Set a new scope for this case
if (!setHeaders) {
lcd.clearLCD();
headerForCorner(TOP_LEFT, "Battery");
headerForCorner(TOP_RIGHT, "HI Temp");
headerForCorner(BOTTOM_LEFT, "RPM");
headerForCorner(BOTTOM_RIGHT, "MC Stat");
setHeaders = true;
}
if (!setHeaders) {
lcd.clearLCD();
headerForCorner(TOP_LEFT, "Battery");
ActuallyTaylor marked this conversation as resolved.
Show resolved Hide resolved
headerForCorner(TOP_RIGHT, "HI Temp");
headerForCorner(BOTTOM_LEFT, "RPM");
headerForCorner(BOTTOM_RIGHT, "MC Stat");
setHeaders = true;
}

// Set the battery voltage
char voltage[9];
std::sprintf(voltage, "%hu.%hu v", totalVoltage / 10, totalVoltage % 10);
dataForCorner(TOP_LEFT, voltage);

// Set the highest temp
uint16_t highestTemp = thermTemps[0];
for (uint16_t temp : thermTemps) {
if (temp > highestTemp) {
highestTemp = temp;
}
}
char temp[9];
std::sprintf(temp, "%hu.%hu C", thermTemps[0] / 100, thermTemps[0] % 100);

dataForCorner(TOP_RIGHT, temp);

// Set the rpm
char rpm[8];
std::sprintf(rpm, "%lu", actualPosition);
dataForCorner(BOTTOM_LEFT, rpm);

// Set the status word
char status[8];

if (statusWord == 0x21) {
std::sprintf(status, "STOP");
} else if (statusWord == 0x27) {
std::sprintf(status, "GO");
} else {
std::sprintf(status, "UNKNOWN");
// std::sprintf(errorString, "There was an error with the Motor Controller: Unknown Error %x", statusWord);
// currentHUDLScreen = ERROR_PAGE;
}
// Set the battery voltage
char voltage[9];
std::sprintf(voltage, "%hu.%hu v", totalVoltage / 10, totalVoltage % 10);
dataForCorner(TOP_LEFT, voltage);

dataForCorner(BOTTOM_RIGHT, status);
} break;
case ERROR_PAGE: {// Set a new scope for this page
if (!setHeaders) {
lcd.clearLCD();
// Set the highest temp
uint16_t highestTemp = thermTemps[0];
for (uint16_t temp : thermTemps) {
if (temp > highestTemp) {
highestTemp = temp;
}
writeError(errorString);
break;
}

char temp[9];
std::sprintf(temp, "0x%02X C", highestTemp);
dataForCorner(TOP_RIGHT, temp);

// Set the rpm
char rpm[8];
std::sprintf(rpm, "%u", actualPosition);
ActuallyTaylor marked this conversation as resolved.
Show resolved Hide resolved
dataForCorner(BOTTOM_LEFT, rpm);

// Set the status word
ActuallyTaylor marked this conversation as resolved.
Show resolved Hide resolved
char status[8];

if (statusWord == 0x21) {
std::sprintf(status, "STOP");
} else if (statusWord == 0x27) {
std::sprintf(status, "GO");
} else {
std::sprintf(status, "0x%x", statusWord);
}

dataForCorner(BOTTOM_RIGHT, status);
}

void HUDL::headerForCorner(HUDL::Corner corner, const char* text) {
Expand All @@ -113,7 +95,7 @@ void HUDL::headerForCorner(HUDL::Corner corner, const char* text) {
sectionColumn += padding;

// Write the text to the screen under the section header.
lcd.writeLargeText(text, sectionPage, sectionColumn, false);
lcd.writeText(text, sectionPage, sectionColumn, EVT::core::DEV::LCD::FontSize::LARGE, false);
mjmagee991 marked this conversation as resolved.
Show resolved Hide resolved
}

void HUDL::dataForCorner(HUDL::Corner corner, const char* text) {
Expand All @@ -130,21 +112,12 @@ void HUDL::dataForCorner(HUDL::Corner corner, const char* text) {
sectionColumn += padding;

// Write the text to the screen under the section header.
lcd.writeLargeText(text, sectionPage, sectionColumn, false);
}

void HUDL::writeError(const char* text) {
// Calculate the padding to center the text in the section
uint8_t length = strlen("!!! Error !!!") * 8;
uint8_t padding = (128 - length) / 2;

// Write the Error header
lcd.writeLargeText("!!! Error !!!", 0, padding, false);

// Write the error message
lcd.writeSmallText(text, 2, 0, true);
lcd.writeText(text, sectionPage, sectionColumn, EVT::core::DEV::LCD::FontSize::LARGE, false);
}

// Ignore the -Wreturn-type warning that occurs here because of the switch statements.
ActuallyTaylor marked this conversation as resolved.
Show resolved Hide resolved
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wreturn-type"
uint8_t HUDL::columnForCorner(HUDL::Corner corner) {
switch (corner) {
case TOP_LEFT:
Expand All @@ -156,17 +129,6 @@ uint8_t HUDL::columnForCorner(HUDL::Corner corner) {
}
}

uint8_t HUDL::wrapForCorner(HUDL::Corner corner) {
switch (corner) {
case TOP_LEFT:
case BOTTOM_LEFT:
return 64;
case TOP_RIGHT:
case BOTTOM_RIGHT:
return 128;
}
}

uint8_t HUDL::pageForCorner(HUDL::Corner corner) {
switch (corner) {
case TOP_LEFT:
Expand All @@ -177,4 +139,6 @@ uint8_t HUDL::pageForCorner(HUDL::Corner corner) {
return 4;
}
}
#pragma GCC diagnostic pop
ActuallyTaylor marked this conversation as resolved.
Show resolved Hide resolved

}// namespace HUDL
Loading