DisplayAppEsp32 library for GR-LYCHEE
DisplayAppEsp32.cpp@0:97710102abcb, 2017-07-04 (annotated)
- Committer:
- YuuichiAkagawa
- Date:
- Tue Jul 04 10:11:43 2017 +0000
- Revision:
- 0:97710102abcb
First release
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
YuuichiAkagawa | 0:97710102abcb | 1 | #include "DisplayAppEsp32.h" |
YuuichiAkagawa | 0:97710102abcb | 2 | |
YuuichiAkagawa | 0:97710102abcb | 3 | void DisplayAppEsp32::display_app_process() { |
YuuichiAkagawa | 0:97710102abcb | 4 | while(1){ |
YuuichiAkagawa | 0:97710102abcb | 5 | osEvent evt = esp32Q.get(); |
YuuichiAkagawa | 0:97710102abcb | 6 | if (evt.status == osEventMessage) { |
YuuichiAkagawa | 0:97710102abcb | 7 | esp32Msg_t *m = (esp32Msg_t*)evt.value.p; |
YuuichiAkagawa | 0:97710102abcb | 8 | SendHeader(m->size); |
YuuichiAkagawa | 0:97710102abcb | 9 | SendData(sendbuf[m->side], m->size); |
YuuichiAkagawa | 0:97710102abcb | 10 | esp32Pool.free(m); |
YuuichiAkagawa | 0:97710102abcb | 11 | bufmgr[m->side] = false; |
YuuichiAkagawa | 0:97710102abcb | 12 | } |
YuuichiAkagawa | 0:97710102abcb | 13 | } |
YuuichiAkagawa | 0:97710102abcb | 14 | } |
YuuichiAkagawa | 0:97710102abcb | 15 | |
YuuichiAkagawa | 0:97710102abcb | 16 | DisplayAppEsp32::DisplayAppEsp32(osPriority tsk_pri, uint32_t stack_size) : |
YuuichiAkagawa | 0:97710102abcb | 17 | esp32(P3_15, P0_2), esp32Thread(tsk_pri, stack_size) { |
YuuichiAkagawa | 0:97710102abcb | 18 | esp32_en = new DigitalOut(P5_3); |
YuuichiAkagawa | 0:97710102abcb | 19 | esp32_io0 = new DigitalOut(P3_14); |
YuuichiAkagawa | 0:97710102abcb | 20 | |
YuuichiAkagawa | 0:97710102abcb | 21 | bufside = 0; |
YuuichiAkagawa | 0:97710102abcb | 22 | bufmgr[0]= false; |
YuuichiAkagawa | 0:97710102abcb | 23 | bufmgr[1]= false; |
YuuichiAkagawa | 0:97710102abcb | 24 | |
YuuichiAkagawa | 0:97710102abcb | 25 | esp32.set_flow_control(SerialBase::Disabled); |
YuuichiAkagawa | 0:97710102abcb | 26 | *esp32_io0 = 1; |
YuuichiAkagawa | 0:97710102abcb | 27 | *esp32_en = 0; |
YuuichiAkagawa | 0:97710102abcb | 28 | Thread::wait(100); |
YuuichiAkagawa | 0:97710102abcb | 29 | *esp32_en = 1; |
YuuichiAkagawa | 0:97710102abcb | 30 | Thread::wait(2000); |
YuuichiAkagawa | 0:97710102abcb | 31 | esp32.baud(1000000); |
YuuichiAkagawa | 0:97710102abcb | 32 | esp32Thread.start(callback(this, &DisplayAppEsp32::display_app_process)); |
YuuichiAkagawa | 0:97710102abcb | 33 | } |
YuuichiAkagawa | 0:97710102abcb | 34 | |
YuuichiAkagawa | 0:97710102abcb | 35 | void DisplayAppEsp32::SendHeader(uint32_t size) { |
YuuichiAkagawa | 0:97710102abcb | 36 | uint8_t headder_data[12] = {0xFF,0xFF,0xAA,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; |
YuuichiAkagawa | 0:97710102abcb | 37 | |
YuuichiAkagawa | 0:97710102abcb | 38 | headder_data[8] = (uint8_t)((uint32_t)size >> 0); |
YuuichiAkagawa | 0:97710102abcb | 39 | headder_data[9] = (uint8_t)((uint32_t)size >> 8); |
YuuichiAkagawa | 0:97710102abcb | 40 | headder_data[10] = (uint8_t)((uint32_t)size >> 16); |
YuuichiAkagawa | 0:97710102abcb | 41 | headder_data[11] = (uint8_t)((uint32_t)size >> 24); |
YuuichiAkagawa | 0:97710102abcb | 42 | for (size_t i = 0; i < sizeof(headder_data); i++) |
YuuichiAkagawa | 0:97710102abcb | 43 | { |
YuuichiAkagawa | 0:97710102abcb | 44 | esp32.putc(headder_data[i]); |
YuuichiAkagawa | 0:97710102abcb | 45 | } |
YuuichiAkagawa | 0:97710102abcb | 46 | } |
YuuichiAkagawa | 0:97710102abcb | 47 | |
YuuichiAkagawa | 0:97710102abcb | 48 | void DisplayAppEsp32::SendData(uint8_t * buf, uint32_t size) { |
YuuichiAkagawa | 0:97710102abcb | 49 | while (size > 0) |
YuuichiAkagawa | 0:97710102abcb | 50 | { |
YuuichiAkagawa | 0:97710102abcb | 51 | esp32.putc(*buf++); |
YuuichiAkagawa | 0:97710102abcb | 52 | size--; |
YuuichiAkagawa | 0:97710102abcb | 53 | } |
YuuichiAkagawa | 0:97710102abcb | 54 | } |
YuuichiAkagawa | 0:97710102abcb | 55 | int DisplayAppEsp32::SendJpeg(uint8_t *buf, uint32_t size) { |
YuuichiAkagawa | 0:97710102abcb | 56 | if( bufmgr[bufside] == true || size > BufferSize) |
YuuichiAkagawa | 0:97710102abcb | 57 | { |
YuuichiAkagawa | 0:97710102abcb | 58 | //size over or buffer full. |
YuuichiAkagawa | 0:97710102abcb | 59 | return 0; |
YuuichiAkagawa | 0:97710102abcb | 60 | } |
YuuichiAkagawa | 0:97710102abcb | 61 | memcpy(sendbuf[bufside], buf, size); |
YuuichiAkagawa | 0:97710102abcb | 62 | bufmgr[bufside] = true; |
YuuichiAkagawa | 0:97710102abcb | 63 | |
YuuichiAkagawa | 0:97710102abcb | 64 | esp32Msg_t *m = esp32Pool.alloc(); |
YuuichiAkagawa | 0:97710102abcb | 65 | if( m == NULL ){ |
YuuichiAkagawa | 0:97710102abcb | 66 | //mpool alloc failed. |
YuuichiAkagawa | 0:97710102abcb | 67 | return 0; |
YuuichiAkagawa | 0:97710102abcb | 68 | } |
YuuichiAkagawa | 0:97710102abcb | 69 | m->size = size; |
YuuichiAkagawa | 0:97710102abcb | 70 | m->side = bufside; |
YuuichiAkagawa | 0:97710102abcb | 71 | esp32Q.put(m); |
YuuichiAkagawa | 0:97710102abcb | 72 | |
YuuichiAkagawa | 0:97710102abcb | 73 | bufside ^= 1;//flip |
YuuichiAkagawa | 0:97710102abcb | 74 | return size; |
YuuichiAkagawa | 0:97710102abcb | 75 | } |