view.cpp

Committer:
Rhamao
Date:
2020-06-15
Revision:
1:3ce68d55dfb8
Parent:
0:eccd33c01946
Child:
2:fd11fb4d51f8

File content as of revision 1:3ce68d55dfb8:

#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();
    
    //LEDS buttons
    led0->setText("0");
    led1->setText("1");
    led2->setText("2");
    led3->setText("3");
    led4->setText("4");
    led5->setText("5");
    led6->setText("6");
    led7->setText("7");
    led8->setText("8");
    led9->setText("9");
    led10->setText("10");
    led11->setText("11");
    //RGB TextView
    redTextview->setText("000");
    greenTextview->setText("000");
    blueTextview->setText("000");
    //RGB + and -
    plusRED->setText("+");
    minusRED->setText("-");
    plusGREEN->setText("+");
    minusGREEN->setText("-");
    plusBLUE->setText("+");
    minusBLUE->setText("-");
    //SET NEW COLOR
    setNewColor->setText("SET NEW COLOR");
    //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);
    //SET NEW COLOR
    m_buttonList.push_front(setNewColor);
    //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 * it : m_buttonList) {
        delete it;
    }
    m_buttonList.clear();
}


void View::contain(int x, int y)
{
    if(!screenReleased){
        screenReleased=true;
        for (Button * it : m_buttonList) {
             updatePlusMinus(it);
        }
    }
}


void View::draw()
{
    BSP_LCD_Clear(m_bgColor);                                 //Enlève l'affichage du début
    for (Button * it : m_buttonList) {
        it->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_WHITE);
    BSP_LCD_DisplayStringAt(RGB_TEXT_VIEW_WIDTH+220+2,38,(uint8_t *)"Red", LEFT_MODE);
    //BSP_LCD_SetTextColor(LCD_COLOR_GREEN);
    BSP_LCD_DisplayStringAt(RGB_TEXT_VIEW_WIDTH+220+2,128,(uint8_t *)"Green", LEFT_MODE);
    //BSP_LCD_SetTextColor(LCD_COLOR_BLUE);
    BSP_LCD_DisplayStringAt(RGB_TEXT_VIEW_WIDTH+220+2,218,(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;

        }
    }

}

void View::updatePlusMinus(Button* it){
    if (it->contain(x,y)) {
        if(it == plusRED){
            buffer= std::atoi((const char*)redTextview->getText());
            buffer++;
            sprintf(str, "%d", buffer);
            redTextview->setText(str);           
        }
    }    
}