Yuuichi Akagawa / DisplayAppEsp32
Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers DisplayAppEsp32.cpp Source File

DisplayAppEsp32.cpp

00001 #include "DisplayAppEsp32.h"
00002 
00003 void DisplayAppEsp32::display_app_process() {
00004     while(1){
00005         osEvent evt = esp32Q.get();
00006         if (evt.status == osEventMessage) {
00007             esp32Msg_t *m = (esp32Msg_t*)evt.value.p;
00008             SendHeader(m->size);
00009             SendData(sendbuf[m->side], m->size);
00010             esp32Pool.free(m);
00011             bufmgr[m->side] = false;
00012         }
00013     }
00014 }
00015 
00016 DisplayAppEsp32::DisplayAppEsp32(osPriority tsk_pri, uint32_t stack_size) : 
00017   esp32(P3_15, P0_2), esp32Thread(tsk_pri, stack_size) {
00018     esp32_en = new DigitalOut(P5_3);
00019     esp32_io0 = new DigitalOut(P3_14);
00020 
00021     bufside = 0;
00022     bufmgr[0]= false;
00023     bufmgr[1]= false;
00024 
00025     esp32.set_flow_control(SerialBase::Disabled);
00026     *esp32_io0 = 1;
00027     *esp32_en = 0;
00028     Thread::wait(100);
00029     *esp32_en = 1;
00030     Thread::wait(2000);
00031     esp32.baud(1000000);
00032     esp32Thread.start(callback(this, &DisplayAppEsp32::display_app_process));
00033 }
00034 
00035 void DisplayAppEsp32::SendHeader(uint32_t size) {
00036     uint8_t headder_data[12] = {0xFF,0xFF,0xAA,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
00037  
00038     headder_data[8]  = (uint8_t)((uint32_t)size >> 0);
00039     headder_data[9]  = (uint8_t)((uint32_t)size >> 8);
00040     headder_data[10] = (uint8_t)((uint32_t)size >> 16);
00041     headder_data[11] = (uint8_t)((uint32_t)size >> 24);
00042     for (size_t i = 0; i < sizeof(headder_data); i++)
00043     {
00044         esp32.putc(headder_data[i]);
00045     }
00046 }
00047  
00048 void DisplayAppEsp32::SendData(uint8_t * buf, uint32_t size) {
00049     while (size > 0)
00050     {
00051         esp32.putc(*buf++);
00052         size--;
00053     }
00054 }
00055 int DisplayAppEsp32::SendJpeg(uint8_t *buf, uint32_t size) {
00056     if( bufmgr[bufside] == true || size > BufferSize)
00057     {
00058         //size over or buffer full.
00059         return 0;
00060     }
00061     memcpy(sendbuf[bufside], buf, size);
00062     bufmgr[bufside] = true;
00063 
00064     esp32Msg_t *m = esp32Pool.alloc();
00065     if( m == NULL ){
00066         //mpool alloc failed.
00067         return 0;
00068     }
00069     m->size = size;
00070     m->side = bufside;
00071     esp32Q.put(m);
00072 
00073     bufside ^= 1;//flip
00074     return size;
00075 }