File content as of revision 6:03acf74857cc:
#include "view.h"
#include "stm32746g_discovery_lcd.h"
#include "mbed.h"
#include "button.h"
#include <list>
#include <string.h>
RawSerial pc(USBTX, USBRX, 115200);
RawSerial wifi(D1, D0, 115200);
uint8_t donnee[100];
uint8_t donneecpy[100];
uint8_t donneeIp[100];
uint8_t valReaded = 0;
uint8_t dataReaded = 0;
uint8_t ipOk = 0;
uint8_t isInit = 0;
int ft_strlen(const uint8_t* str)
{
int i = 0;
while (str[i] != '\0' || str[i] != '\r' || str[i] != '\n')
{
i++;
}
return i;
}
View::View(int width, int height)
: m_width(width), m_height(height)
{
initLCD();
led0->setBackgroundColor((uint32_t)0xFF010101);
m_bgColor = LCD_COLOR_BLACK;
//LEDS
led0->setText("");
led1->setText("");
led2->setText("");
led3->setText("");
led4->setText("");
led5->setText("");
led6->setText("");
led7->setText("");
led8->setText("");
led9->setText("");
led10->setText("");
led11->setText("");
//RGB TextView
redTextview->setText("000");
greenTextview->setText("000");
blueTextview->setText("000");
//RGB + and -
plusRED->setText("+1");
minusRED->setText("-1");
plusGREEN->setText("+1");
minusGREEN->setText("-1");
plusBLUE->setText("+1");
minusBLUE->setText("-1");
plus10RED->setText("+10");
minus10RED->setText("-10");
plus10GREEN->setText("+10");
minus10GREEN->setText("-10");
plus10BLUE->setText("+10");
minus10BLUE->setText("-10");
//SET NEW COLOR
setNewColor->setText("SET NEW COLOR");
cancel->setText("CANCEL");
//Animations
/*anim1->setText("Animations1");
anim2->setText("Animations2");
anim3->setText("Animations3");
start->setText("Start animation");
stop->setText("Stop animation");*/
//LEDS buttons
m_buttonList.push_front(led0);
m_buttonList.push_front(led1);
m_buttonList.push_front(led2);
m_buttonList.push_front(led3);
m_buttonList.push_front(led4);
m_buttonList.push_front(led5);
m_buttonList.push_front(led6);
m_buttonList.push_front(led7);
m_buttonList.push_front(led8);
m_buttonList.push_front(led9);
m_buttonList.push_front(led10);
m_buttonList.push_front(led11);
//RGB TextView
m_buttonList.push_front(redTextview);
m_buttonList.push_front(greenTextview);
m_buttonList.push_front(blueTextview);
//RGB + and -
m_buttonList.push_front(plusRED);
m_buttonList.push_front(minusRED);
m_buttonList.push_front(plusGREEN);
m_buttonList.push_front(minusGREEN);
m_buttonList.push_front(plusBLUE);
m_buttonList.push_front(minusBLUE);
m_buttonList.push_front(plus10RED);
m_buttonList.push_front(minus10RED);
m_buttonList.push_front(plus10GREEN);
m_buttonList.push_front(minus10GREEN);
m_buttonList.push_front(plus10BLUE);
m_buttonList.push_front(minus10BLUE);
//SET NEW COLOR
m_buttonList.push_front(setNewColor);
m_buttonList.push_front(cancel);
//Animations
/*m_buttonList.push_front(anim1);
m_buttonList.push_front(anim2);
m_buttonList.push_front(anim3);
m_buttonList.push_front(start);
m_buttonList.push_front(stop);*/
}
View::~View() //Destructeur de bouton
{
for (Button * button : m_buttonList) {
delete button;
}
m_buttonList.clear();
}
void View::contain(int x, int y)
{
if(!screenReleased){
screenReleased=true;
for (Button * button : m_buttonList) {
if (button->contain(x,y)) {
updatePlusMinus(button);
updateLEDS(button);
updateSetNewColorAndCancel(button);
}
}
}
}
void View::draw()
{
BSP_LCD_Clear(m_bgColor); //Enlève l'affichage du début
for (Button * button : m_buttonList) {
button->draw();
}
drawText();
}
void View::initLCD(){
uint8_t status;
BSP_LCD_Init(); //Initialise le LCD
BSP_LCD_LayerDefaultInit(LTDC_ACTIVE_LAYER, LCD_FB_START_ADDRESS);
BSP_LCD_SelectLayer(LTDC_ACTIVE_LAYER);
status = BSP_TS_Init(BSP_LCD_GetXSize(), BSP_LCD_GetYSize());
if (status != TS_OK) {
BSP_LCD_DisplayStringAt(0, LINE(5), (uint8_t *)"TOUCHSCREEN INIT FAIL", CENTER_MODE);
while (1);
} else {
BSP_LCD_DisplayStringAt(0, LINE(5), (uint8_t *)"TOUCHSCREEN INIT OK", CENTER_MODE);
}
HAL_Delay(100);
BSP_LCD_SetFont(&Font12);
}
void View::drawText(){
//(uint32_t)0xFFFFFFFF
BSP_LCD_SetTextColor(LCD_COLOR_RED);
BSP_LCD_SetBackColor(LCD_COLOR_BLACK);
BSP_LCD_DisplayStringAt(120+2,38+2,(uint8_t *)"Red", LEFT_MODE);
BSP_LCD_SetTextColor(LCD_COLOR_GREEN);
BSP_LCD_DisplayStringAt(120+2,128+2,(uint8_t *)"Green", LEFT_MODE);
BSP_LCD_SetTextColor(LCD_COLOR_BLUE);
BSP_LCD_DisplayStringAt(120+2,218+2,(uint8_t *)"Blue", LEFT_MODE);
}
void View::updateLCD(){
BSP_TS_GetState(&TS_State);
if (TS_State.touchDetected) { //Detecte si l'écran tactile est touché
cleared = false;
for (idx = 0; idx < TS_State.touchDetected; idx++) {
x = TS_State.touchX[idx];
y = TS_State.touchY[idx];
contain(x, y);
}
} else {
screenReleased=false;
if (!cleared) {
draw();
cleared = true;
}
}
}
bool View::updatePlusMinus(Button* button){
if(button == plusRED){
RGB[0]= std::atoi((const char*)redTextview->getText());
RGB[0]++;
sprintf(str, "%d", RGB[0]);
redTextview->setText(str);
} else if(button == minusRED){
RGB[0]= std::atoi((const char*)redTextview->getText());
RGB[0]--;
sprintf(str, "%d", RGB[0]);
redTextview->setText(str);
} else if(button == plus10RED){
RGB[0]= std::atoi((const char*)redTextview->getText());
RGB[0]+=10;
sprintf(str, "%d", RGB[0]);
redTextview->setText(str);
} else if(button == minus10RED){
RGB[0]= std::atoi((const char*)redTextview->getText());
RGB[0]-=10;
sprintf(str, "%d", RGB[0]);
redTextview->setText(str);
} else if(button == plusGREEN){
RGB[1]= std::atoi((const char*)greenTextview->getText());
RGB[1]++;
sprintf(str, "%d", RGB[1]);
greenTextview->setText(str);
} else if(button == minusGREEN){
RGB[1]= std::atoi((const char*)greenTextview->getText());
RGB[1]--;
sprintf(str, "%d", RGB[1]);
greenTextview->setText(str);
} else if(button == plus10GREEN){
RGB[1]= std::atoi((const char*)greenTextview->getText());
RGB[1]+=10;
sprintf(str, "%d", RGB[1]);
greenTextview->setText(str);
} else if(button == minus10GREEN){
RGB[1]= std::atoi((const char*)greenTextview->getText());
RGB[1]-=10;
sprintf(str, "%d", RGB[1]);
greenTextview->setText(str);
}else if(button == plusBLUE){
RGB[2]= std::atoi((const char*)blueTextview->getText());
RGB[2]++;
sprintf(str, "%d", RGB[2]);
blueTextview->setText(str);
} else if(button == minusBLUE){
RGB[2]= std::atoi((const char*)blueTextview->getText());
RGB[2]--;
sprintf(str, "%d", RGB[2]);
blueTextview->setText(str);
} else if(button == plus10BLUE){
RGB[2]= std::atoi((const char*)blueTextview->getText());
RGB[2]+=10;
sprintf(str, "%d", RGB[2]);
blueTextview->setText(str);
} else if(button == minus10BLUE){
RGB[2]= std::atoi((const char*)blueTextview->getText());
RGB[2]-=10;
sprintf(str, "%d", RGB[2]);
blueTextview->setText(str);
} else
return false;
return true;
}
bool View::updateLEDS(Button* button){
if(button == led0)
if(!ledSelected[0]){
ledSelected[0]=true;
button->setBorderWidth(3);
}
else{
ledSelected[0]=false;
button->setBorderWidth(1);
}
else if(button == led1)
if(!ledSelected[1]){
ledSelected[1]=true;
button->setBorderWidth(3);
}
else{
ledSelected[1]=false;
button->setBorderWidth(1);
}
else if(button == led2)
if(!ledSelected[2]){
ledSelected[2]=true;
button->setBorderWidth(3);
}
else{
ledSelected[2]=false;
button->setBorderWidth(1);
}
else if(button == led3)
if(!ledSelected[3]){
ledSelected[3]=true;
button->setBorderWidth(3);
}
else{
ledSelected[3]=false;
button->setBorderWidth(1);
}
else if(button == led4)
if(!ledSelected[4]){
ledSelected[4]=true;
button->setBorderWidth(3);
}
else{
ledSelected[4]=false;
button->setBorderWidth(1);
}
else if(button == led5)
if(!ledSelected[5]){
ledSelected[5]=true;
button->setBorderWidth(3);
}
else{
ledSelected[5]=false;
button->setBorderWidth(1);
}
else if(button == led6)
if(!ledSelected[6]){
ledSelected[6]=true;
button->setBorderWidth(3);
}
else{
ledSelected[6]=false;
button->setBorderWidth(3);
}
else if(button == led7)
if(!ledSelected[7]){
ledSelected[7]=true;
button->setBorderWidth(1);
}
else{
ledSelected[7]=false;
button->setBorderWidth(3);
}
else if(button == led8)
if(!ledSelected[8]){
ledSelected[8]=true;
button->setBorderWidth(3);
}
else{
ledSelected[8]=false;
button->setBorderWidth(1);
}
else if(button == led9)
if(!ledSelected[9]){
ledSelected[9]=true;
button->setBorderWidth(3);
}
else{
ledSelected[9]=false;
button->setBorderWidth(1);
}
else if(button == led10)
if(!ledSelected[10]){
ledSelected[10]=true;
button->setBorderWidth(3);
}
else{
ledSelected[10]=false;
button->setBorderWidth(1);
}
else if(button == led11)
if(!ledSelected[11]){
ledSelected[11]=true;
button->setBorderWidth(3);
}
else{
ledSelected[11]=false;
button->setBorderWidth(1);
}
else
return false;
return true;
}
bool View::updateSetNewColorAndCancel(Button* button){
int i=0;
uint32_t RGBcolor=0xFF000000;
if(button == cancel){
led0->setBorderWidth(1);
led1->setBorderWidth(1);
led2->setBorderWidth(1);
led3->setBorderWidth(1);
led4->setBorderWidth(1);
led5->setBorderWidth(1);
led6->setBorderWidth(1);
led7->setBorderWidth(1);
led8->setBorderWidth(1);
led9->setBorderWidth(1);
led10->setBorderWidth(1);
led11->setBorderWidth(1);
}else if(button == setNewColor){
RGBcolor+=RGB[2]+(RGB[1]<<8)+(RGB[0]<<16);
led0->setBorderWidth(1);
led1->setBorderWidth(1);
led2->setBorderWidth(1);
led3->setBorderWidth(1);
led4->setBorderWidth(1);
led5->setBorderWidth(1);
led6->setBorderWidth(1);
led7->setBorderWidth(1);
led8->setBorderWidth(1);
led9->setBorderWidth(1);
led10->setBorderWidth(1);
led11->setBorderWidth(1);
if(ledSelected[0]){
led0->setBackgroundColor(RGBcolor);
}if(ledSelected[1]){
led1->setBackgroundColor(RGBcolor);
}if(ledSelected[2]){
led2->setBackgroundColor(RGBcolor);
}if(ledSelected[3]){
led3->setBackgroundColor(RGBcolor);
}if(ledSelected[4]){
led4->setBackgroundColor(RGBcolor);
}if(ledSelected[5]){
led5->setBackgroundColor(RGBcolor);
}if(ledSelected[6]){
led6->setBackgroundColor(RGBcolor);
}if(ledSelected[7]){
led7->setBackgroundColor(RGBcolor);
}if(ledSelected[8]){
led8->setBackgroundColor(RGBcolor);
}if(ledSelected[9]){
led9->setBackgroundColor(RGBcolor);
}if(ledSelected[10]){
led10->setBackgroundColor(RGBcolor);
}if(ledSelected[11]){
led11->setBackgroundColor(RGBcolor);
}
}else
return false;
for(i=0; i<12; i++)
ledSelected[i]=false;
return true;
}