SSL_Display OK

This commit is contained in:
2024-02-12 17:59:32 -03:00
parent 4139759b96
commit 5fcfc681b3
4 changed files with 56 additions and 9 deletions

View File

@@ -17,22 +17,49 @@ SSL_Display::~SSL_Display() {
}
// Public methods
int32_t SSL_Display::init() {
int32_t errors = 0;
errors += hDisplay->init();
errors += hDisplay->setBacklight(1);
RobotStatus status0;
for(uint32_t i = 0; i<12; i++){
status0.batteryLevel = ((float)i)/12;
status0.connected = i%2;
status0.batteryLevel = 0;
status0.connected = false;
status0.robotId = i;
status0.status = i%2;
status0.team = i%2;
status0.status = 0;
status0.team = 0;
robots[i].setRobotStatus(status0);
}
for(uint32_t i = 0; i<12; i++){
robots[i].draw();
}
hQueueDisplay = xQueueCreateStatic(queueDisplayLength, sizeof(RobotStatus), queueDisplayStorage, &queueDisplayStructure);
hTaskDisplay = xTaskCreateStatic((void(*)(void*))taskDisplayStatic, "taskDisplay", taskDisplayStackSize, (void*)this, 24, taskDisplayStack, &taskDisplayTCB);
return errors;
}
int32_t SSL_Display::update(RobotStatus status){
if(xQueueSend(hQueueDisplay, &status, 0)){
return 0;
}else{
// Queue full
return -1;
}
}
// Private methods
void SSL_Display::taskDisplayStatic(SSL_Display* obj){
obj->taskDisplay();
}
void SSL_Display::taskDisplay(){
RobotStatus status;
while(true){
xQueueReceive(hQueueDisplay, &status, portMAX_DELAY);
robots[status.robotId].setRobotStatus(status);
robots[status.robotId].draw();
}
}

View File

@@ -9,6 +9,7 @@
#define SRC_COMPONENTS_SSL_DISPLAY_HPP_
#include <FreeRTOS.h>
#include <queue.h>
#include "ILI9341.hpp"
#include "SSL_GFX.hpp"
@@ -17,7 +18,12 @@ public:
SSL_Display(ILI9341* hDisplay);
virtual ~SSL_Display();
int32_t init();
int32_t update(RobotStatus status);
private:
static void taskDisplayStatic(SSL_Display* obj);
void taskDisplay();
static constexpr size_t taskDisplayStackSize = 128;
static constexpr size_t queueDisplayLength = 12;
ILI9341* hDisplay;
SSL_GFX robots[12] = {
SSL_GFX(hDisplay, 0, 0, buffer, 19200),
@@ -34,7 +40,12 @@ private:
SSL_GFX(hDisplay, 160, 240, buffer, 19200),
};
uint8_t buffer[80][80][3];
TaskHandle_t hTaskDisplay;
StackType_t taskDisplayStack[taskDisplayStackSize];
StaticTask_t taskDisplayTCB;
QueueHandle_t hQueueDisplay;
uint8_t queueDisplayStorage[queueDisplayLength*sizeof(RobotStatus)];
StaticQueue_t queueDisplayStructure;
};
#endif /* SRC_COMPONENTS_SSL_DISPLAY_HPP_ */

View File

@@ -250,8 +250,8 @@ int32_t SSL_GFX::drawId(uint8_t color[3]) {
uint32_t errors = 0;
errors += drawText(color, 3, 71, (uint8_t*)"ID = ", 5);
if(robotStatus.robotId<10){
uint8_t robotIdChar = robotStatus.robotId+48;
errors += drawText(color, 33, 71, &robotIdChar, 1);
uint8_t robotIdChar[2] = {robotStatus.robotId+48, 32};
errors += drawText(color, 33, 71, robotIdChar, 2);
}else{
uint8_t robotIdChar[2] = {49, robotStatus.robotId+(uint8_t)38};
errors += drawText(color, 33, 71, robotIdChar, 2);
@@ -263,7 +263,7 @@ int32_t SSL_GFX::drawBatteryBar() {
uint32_t errors = 0;
for(uint32_t j = 3; j<7; j++){
for(uint32_t k = 3; k<77; k++){
if(robotStatus.batteryLevel*74 > k){
if(robotStatus.batteryLevel*74 > k-3){
if(robotStatus.batteryLevel>0.5){
hBuffer[j][k][0] = ((uint8_t)(512-robotStatus.batteryLevel*512))&0xFC;
hBuffer[j][k][1] = 255&0xFC;

View File

@@ -34,6 +34,15 @@ SSL_Display sslDisplay(&ili9341);
void start(){
spi_a.init();
sslDisplay.init();
RobotStatus status;
for(uint32_t i=0; i<12; i++){
status.batteryLevel = ((float)i)/11;
status.connected = i%2;
status.robotId = i;
status.status = i%2;
status.team = i%2;
sslDisplay.update(status);
}
for(uint32_t i=0; i<16; i++){
discoveryLeds.set(i);
vTaskDelay(1000);