DisplayAppEsp32 library for GR-LYCHEE
Diff: DisplayAppEsp32.cpp
- Revision:
- 0:97710102abcb
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/DisplayAppEsp32.cpp Tue Jul 04 10:11:43 2017 +0000 @@ -0,0 +1,75 @@ +#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; +}