DisplayAppEsp32 library for GR-LYCHEE

DisplayAppEsp32.cpp

Committer:
YuuichiAkagawa
Date:
2017-07-04
Revision:
0:97710102abcb

File content as of revision 0:97710102abcb:

#include "DisplayAppEsp32.h"

void DisplayAppEsp32::display_app_process() {
    while(1){
        osEvent evt = esp32Q.get();
        if (evt.status == osEventMessage) {
            esp32Msg_t *m = (esp32Msg_t*)evt.value.p;
            SendHeader(m->size);
            SendData(sendbuf[m->side], m->size);
            esp32Pool.free(m);
            bufmgr[m->side] = false;
        }
    }
}

DisplayAppEsp32::DisplayAppEsp32(osPriority tsk_pri, uint32_t stack_size) : 
  esp32(P3_15, P0_2), esp32Thread(tsk_pri, stack_size) {
    esp32_en = new DigitalOut(P5_3);
    esp32_io0 = new DigitalOut(P3_14);

    bufside = 0;
    bufmgr[0]= false;
    bufmgr[1]= false;

    esp32.set_flow_control(SerialBase::Disabled);
    *esp32_io0 = 1;
    *esp32_en = 0;
    Thread::wait(100);
    *esp32_en = 1;
    Thread::wait(2000);
    esp32.baud(1000000);
    esp32Thread.start(callback(this, &DisplayAppEsp32::display_app_process));
}

void DisplayAppEsp32::SendHeader(uint32_t size) {
    uint8_t headder_data[12] = {0xFF,0xFF,0xAA,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
 
    headder_data[8]  = (uint8_t)((uint32_t)size >> 0);
    headder_data[9]  = (uint8_t)((uint32_t)size >> 8);
    headder_data[10] = (uint8_t)((uint32_t)size >> 16);
    headder_data[11] = (uint8_t)((uint32_t)size >> 24);
    for (size_t i = 0; i < sizeof(headder_data); i++)
    {
        esp32.putc(headder_data[i]);
    }
}
 
void DisplayAppEsp32::SendData(uint8_t * buf, uint32_t size) {
    while (size > 0)
    {
        esp32.putc(*buf++);
        size--;
    }
}
int DisplayAppEsp32::SendJpeg(uint8_t *buf, uint32_t size) {
    if( bufmgr[bufside] == true || size > BufferSize)
    {
        //size over or buffer full.
        return 0;
    }
    memcpy(sendbuf[bufside], buf, size);
    bufmgr[bufside] = true;

    esp32Msg_t *m = esp32Pool.alloc();
    if( m == NULL ){
        //mpool alloc failed.
        return 0;
    }
    m->size = size;
    m->side = bufside;
    esp32Q.put(m);

    bufside ^= 1;//flip
    return size;
}