Revision 0:97710102abcb, committed 2017-07-04
- Comitter:
- YuuichiAkagawa
- Date:
- Tue Jul 04 10:11:43 2017 +0000
- Commit message:
- First release
Changed in this revision
diff -r 000000000000 -r 97710102abcb DisplayAppEsp32.cpp
--- /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;
+}
diff -r 000000000000 -r 97710102abcb DisplayAppEsp32.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/DisplayAppEsp32.h Tue Jul 04 10:11:43 2017 +0000
@@ -0,0 +1,55 @@
+/**************************************************************************//**
+* @file DisplayAppEsp32.h
+* @brief DisplayApp API
+******************************************************************************/
+
+#ifndef DISPLAY_APP_ESP32_H
+#define DISPLAY_APP_ESP32_H
+
+#include "mbed.h"
+
+/** A class to communicate a DisplayAppEsp32
+ *
+ */
+class DisplayAppEsp32 {
+public:
+ /** Constructor: Initializes DisplayAppEsp32.
+ *
+ * @param tsk_pri Priority of the thread function. (default: osPriorityNormal).
+ * @param init_pri Priority of before the USB is connected. (default: osPriorityLow).
+ * @param stack_size stack size (in bytes) requirements for the thread function. (default: DEFAULT_STACK_SIZE).
+ */
+ DisplayAppEsp32(osPriority tsk_pri = osPriorityNormal, uint32_t stack_size = DEFAULT_STACK_SIZE);
+
+ /** Send JPEG data
+ *
+ * @param buf data buffer address
+ * @param size data size
+ * @return send data size
+ */
+ int SendJpeg(uint8_t * buf, uint32_t size);
+
+private:
+ const static size_t BufferSize = 15360;
+
+ bool bufmgr[2];
+ uint8_t bufside;
+ uint8_t sendbuf[2][BufferSize];
+
+ typedef struct {
+ size_t size;
+ uint8_t side;
+ } esp32Msg_t;
+
+ RawSerial esp32;
+ DigitalOut *esp32_en;
+ DigitalOut *esp32_io0;
+ MemoryPool<esp32Msg_t, 2> esp32Pool;
+ Queue<esp32Msg_t, 2> esp32Q;
+ Thread esp32Thread;
+
+ void display_app_process();
+ void SendHeader(uint32_t size);
+ void SendData(uint8_t * buf, uint32_t size);
+};
+#endif