test public

Dependencies:   HttpServer_snapshot_mbed-os

Committer:
anhtran
Date:
Fri Oct 18 03:09:43 2019 +0000
Revision:
0:e9fd5575b10e
abc

Who changed what in which revision?

UserRevisionLine numberNew contents of line
anhtran 0:e9fd5575b10e 1 /* Copyright (c) 2016 dkato
anhtran 0:e9fd5575b10e 2 * SPDX-License-Identifier: Apache-2.0
anhtran 0:e9fd5575b10e 3 *
anhtran 0:e9fd5575b10e 4 * Licensed under the Apache License, Version 2.0 (the "License");
anhtran 0:e9fd5575b10e 5 * you may not use this file except in compliance with the License.
anhtran 0:e9fd5575b10e 6 * You may obtain a copy of the License at
anhtran 0:e9fd5575b10e 7 *
anhtran 0:e9fd5575b10e 8 * http://www.apache.org/licenses/LICENSE-2.0
anhtran 0:e9fd5575b10e 9 *
anhtran 0:e9fd5575b10e 10 * Unless required by applicable law or agreed to in writing, software
anhtran 0:e9fd5575b10e 11 * distributed under the License is distributed on an "AS IS" BASIS,
anhtran 0:e9fd5575b10e 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
anhtran 0:e9fd5575b10e 13 * See the License for the specific language governing permissions and
anhtran 0:e9fd5575b10e 14 * limitations under the License.
anhtran 0:e9fd5575b10e 15 */
anhtran 0:e9fd5575b10e 16 #include "mbed.h"
anhtran 0:e9fd5575b10e 17 #include "DisplayApp.h"
anhtran 0:e9fd5575b10e 18
anhtran 0:e9fd5575b10e 19 void DisplayApp::display_app_process() {
anhtran 0:e9fd5575b10e 20 int data;
anhtran 0:e9fd5575b10e 21 int pos_x_wk;
anhtran 0:e9fd5575b10e 22 int pos_wk;
anhtran 0:e9fd5575b10e 23
anhtran 0:e9fd5575b10e 24 PcApp.connect();
anhtran 0:e9fd5575b10e 25
anhtran 0:e9fd5575b10e 26 while (!PcApp.configured()) {
anhtran 0:e9fd5575b10e 27 ThisThread::sleep_for(100);
anhtran 0:e9fd5575b10e 28 }
anhtran 0:e9fd5575b10e 29
anhtran 0:e9fd5575b10e 30 while (1) {
anhtran 0:e9fd5575b10e 31 if (PcApp.readable()) {
anhtran 0:e9fd5575b10e 32 data = PcApp.getc();
anhtran 0:e9fd5575b10e 33 if (data == '{') {
anhtran 0:e9fd5575b10e 34 pos_seq = POS_SEQ_START;
anhtran 0:e9fd5575b10e 35 } else if (data == 'X') {
anhtran 0:e9fd5575b10e 36 if (pos_seq == POS_SEQ_START) {
anhtran 0:e9fd5575b10e 37 pos_seq = POS_SEQ_X;
anhtran 0:e9fd5575b10e 38 } else {
anhtran 0:e9fd5575b10e 39 pos_seq = POS_SEQ_INIT;
anhtran 0:e9fd5575b10e 40 }
anhtran 0:e9fd5575b10e 41 } else if (data == 'Y') {
anhtran 0:e9fd5575b10e 42 if (pos_seq == POS_SEQ_C) {
anhtran 0:e9fd5575b10e 43 pos_seq = POS_SEQ_Y;
anhtran 0:e9fd5575b10e 44 } else {
anhtran 0:e9fd5575b10e 45 pos_seq = POS_SEQ_INIT;
anhtran 0:e9fd5575b10e 46 }
anhtran 0:e9fd5575b10e 47 } else if (data == '=') {
anhtran 0:e9fd5575b10e 48 if (pos_seq == POS_SEQ_X) {
anhtran 0:e9fd5575b10e 49 pos_seq = POS_SEQ_X_POS;
anhtran 0:e9fd5575b10e 50 pos_wk = 0;
anhtran 0:e9fd5575b10e 51 } else if (pos_seq == POS_SEQ_Y) {
anhtran 0:e9fd5575b10e 52 pos_seq = POS_SEQ_Y_POS;
anhtran 0:e9fd5575b10e 53 pos_wk = 0;
anhtran 0:e9fd5575b10e 54 } else {
anhtran 0:e9fd5575b10e 55 pos_seq = POS_SEQ_INIT;
anhtran 0:e9fd5575b10e 56 }
anhtran 0:e9fd5575b10e 57 } else if (data == '-') {
anhtran 0:e9fd5575b10e 58 if (pos_seq == POS_SEQ_X_POS) {
anhtran 0:e9fd5575b10e 59 pos_seq = POS_SEQ_X_M;
anhtran 0:e9fd5575b10e 60 } else if (pos_seq == POS_SEQ_Y_POS) {
anhtran 0:e9fd5575b10e 61 pos_seq = POS_SEQ_Y_M;
anhtran 0:e9fd5575b10e 62 } else {
anhtran 0:e9fd5575b10e 63 pos_seq = POS_SEQ_INIT;
anhtran 0:e9fd5575b10e 64 }
anhtran 0:e9fd5575b10e 65 } else if ((data >= '0') && (data <= '9')) {
anhtran 0:e9fd5575b10e 66 if ((pos_seq == POS_SEQ_X_POS) || (pos_seq == POS_SEQ_Y_POS)) {
anhtran 0:e9fd5575b10e 67 pos_wk = (pos_wk * 10) + (data - '0');
anhtran 0:e9fd5575b10e 68 } else if ((pos_seq == POS_SEQ_X_M) && (data == '1')) {
anhtran 0:e9fd5575b10e 69 pos_wk = -1;
anhtran 0:e9fd5575b10e 70 } else if ((pos_seq == POS_SEQ_Y_M) && (data == '1')) {
anhtran 0:e9fd5575b10e 71 pos_wk = -1;
anhtran 0:e9fd5575b10e 72 } else {
anhtran 0:e9fd5575b10e 73 pos_seq = POS_SEQ_INIT;
anhtran 0:e9fd5575b10e 74 }
anhtran 0:e9fd5575b10e 75 } else if (data == ',') {
anhtran 0:e9fd5575b10e 76 if ((pos_seq == POS_SEQ_X_POS) || (pos_seq == POS_SEQ_X_M)) {
anhtran 0:e9fd5575b10e 77 pos_x_wk = pos_wk;
anhtran 0:e9fd5575b10e 78 pos_seq = POS_SEQ_C;
anhtran 0:e9fd5575b10e 79 } else {
anhtran 0:e9fd5575b10e 80 pos_seq = POS_SEQ_INIT;
anhtran 0:e9fd5575b10e 81 }
anhtran 0:e9fd5575b10e 82 } else if (data == '}') {
anhtran 0:e9fd5575b10e 83 if ((pos_seq == POS_SEQ_Y_POS) || (pos_seq == POS_SEQ_Y_M)) {
anhtran 0:e9fd5575b10e 84 pos_seq = POS_SEQ_END;
anhtran 0:e9fd5575b10e 85 if ((pos_x != pos_x_wk) || (pos_y != pos_wk)) {
anhtran 0:e9fd5575b10e 86 pos_x = pos_x_wk;
anhtran 0:e9fd5575b10e 87 pos_y = pos_wk;
anhtran 0:e9fd5575b10e 88 if (event) {
anhtran 0:e9fd5575b10e 89 event.call();
anhtran 0:e9fd5575b10e 90 }
anhtran 0:e9fd5575b10e 91 }
anhtran 0:e9fd5575b10e 92 } else {
anhtran 0:e9fd5575b10e 93 pos_seq = POS_SEQ_INIT;
anhtran 0:e9fd5575b10e 94 }
anhtran 0:e9fd5575b10e 95 } else {
anhtran 0:e9fd5575b10e 96 pos_seq = POS_SEQ_INIT;
anhtran 0:e9fd5575b10e 97 }
anhtran 0:e9fd5575b10e 98 } else {
anhtran 0:e9fd5575b10e 99 ThisThread::sleep_for(10);
anhtran 0:e9fd5575b10e 100 }
anhtran 0:e9fd5575b10e 101 }
anhtran 0:e9fd5575b10e 102 }
anhtran 0:e9fd5575b10e 103
anhtran 0:e9fd5575b10e 104 DisplayApp::DisplayApp(osPriority tsk_pri, uint32_t stack_size) :
anhtran 0:e9fd5575b10e 105 PcApp(false), displayThread(tsk_pri, stack_size) {
anhtran 0:e9fd5575b10e 106 displayThread.start(callback(this, &DisplayApp::display_app_process));
anhtran 0:e9fd5575b10e 107 }
anhtran 0:e9fd5575b10e 108
anhtran 0:e9fd5575b10e 109 void DisplayApp::SendHeader(uint32_t size) {
anhtran 0:e9fd5575b10e 110 uint8_t headder_data[12] = {0xFF,0xFF,0xAA,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
anhtran 0:e9fd5575b10e 111
anhtran 0:e9fd5575b10e 112 headder_data[8] = (uint8_t)((uint32_t)size >> 0);
anhtran 0:e9fd5575b10e 113 headder_data[9] = (uint8_t)((uint32_t)size >> 8);
anhtran 0:e9fd5575b10e 114 headder_data[10] = (uint8_t)((uint32_t)size >> 16);
anhtran 0:e9fd5575b10e 115 headder_data[11] = (uint8_t)((uint32_t)size >> 24);
anhtran 0:e9fd5575b10e 116 PcApp.send((uint8_t *)headder_data, sizeof(headder_data));
anhtran 0:e9fd5575b10e 117 }
anhtran 0:e9fd5575b10e 118
anhtran 0:e9fd5575b10e 119 void DisplayApp::SendData(uint8_t * buf, uint32_t size) {
anhtran 0:e9fd5575b10e 120 PcApp.send(buf, size);
anhtran 0:e9fd5575b10e 121 }
anhtran 0:e9fd5575b10e 122
anhtran 0:e9fd5575b10e 123 int DisplayApp::SendRgb888(uint8_t * buf, uint32_t pic_width, uint32_t pic_height) {
anhtran 0:e9fd5575b10e 124 uint32_t offset_size = 54;
anhtran 0:e9fd5575b10e 125 uint32_t buf_stride = (((pic_width * 4u) + 31u) & ~31u);
anhtran 0:e9fd5575b10e 126 uint32_t pic_size = buf_stride * pic_height;
anhtran 0:e9fd5575b10e 127 uint32_t total_size = pic_size + offset_size;
anhtran 0:e9fd5575b10e 128 uint8_t wk_bitmap_buf[54];
anhtran 0:e9fd5575b10e 129 int wk_idx = 0;
anhtran 0:e9fd5575b10e 130
anhtran 0:e9fd5575b10e 131 if (!PcApp.configured()) {
anhtran 0:e9fd5575b10e 132 return 0;
anhtran 0:e9fd5575b10e 133 }
anhtran 0:e9fd5575b10e 134 SendHeader(total_size);
anhtran 0:e9fd5575b10e 135
anhtran 0:e9fd5575b10e 136 /* BITMAPFILEHEADER */
anhtran 0:e9fd5575b10e 137 wk_bitmap_buf[wk_idx++] = 'B';
anhtran 0:e9fd5575b10e 138 wk_bitmap_buf[wk_idx++] = 'M';
anhtran 0:e9fd5575b10e 139 wk_bitmap_buf[wk_idx++] = (uint8_t)(total_size >> 0); /* bfSize */
anhtran 0:e9fd5575b10e 140 wk_bitmap_buf[wk_idx++] = (uint8_t)(total_size >> 8); /* bfSize */
anhtran 0:e9fd5575b10e 141 wk_bitmap_buf[wk_idx++] = (uint8_t)(total_size >> 16); /* bfSize */
anhtran 0:e9fd5575b10e 142 wk_bitmap_buf[wk_idx++] = (uint8_t)(total_size >> 24); /* bfSize */
anhtran 0:e9fd5575b10e 143 wk_bitmap_buf[wk_idx++] = 0; /* bfReserved1 */
anhtran 0:e9fd5575b10e 144 wk_bitmap_buf[wk_idx++] = 0; /* bfReserved1 */
anhtran 0:e9fd5575b10e 145 wk_bitmap_buf[wk_idx++] = 0; /* bfReserved2 */
anhtran 0:e9fd5575b10e 146 wk_bitmap_buf[wk_idx++] = 0; /* bfReserved2 */
anhtran 0:e9fd5575b10e 147 wk_bitmap_buf[wk_idx++] = (uint8_t)(offset_size >> 0); /* bfOffBits */
anhtran 0:e9fd5575b10e 148 wk_bitmap_buf[wk_idx++] = (uint8_t)(offset_size >> 8); /* bfOffBits */
anhtran 0:e9fd5575b10e 149 wk_bitmap_buf[wk_idx++] = (uint8_t)(offset_size >> 16); /* bfOffBits */
anhtran 0:e9fd5575b10e 150 wk_bitmap_buf[wk_idx++] = (uint8_t)(offset_size >> 24); /* bfOffBits */
anhtran 0:e9fd5575b10e 151
anhtran 0:e9fd5575b10e 152 /* BITMAPINFOHEADER */
anhtran 0:e9fd5575b10e 153 wk_bitmap_buf[wk_idx++] = 40; /* biSize */
anhtran 0:e9fd5575b10e 154 wk_bitmap_buf[wk_idx++] = 0; /* biSize */
anhtran 0:e9fd5575b10e 155 wk_bitmap_buf[wk_idx++] = 0; /* biSize */
anhtran 0:e9fd5575b10e 156 wk_bitmap_buf[wk_idx++] = 0; /* biSize */
anhtran 0:e9fd5575b10e 157 wk_bitmap_buf[wk_idx++] = (uint8_t)(pic_width >> 0); /* biWidth */
anhtran 0:e9fd5575b10e 158 wk_bitmap_buf[wk_idx++] = (uint8_t)(pic_width >> 8); /* biWidth */
anhtran 0:e9fd5575b10e 159 wk_bitmap_buf[wk_idx++] = (uint8_t)(pic_width >> 16); /* biWidth */
anhtran 0:e9fd5575b10e 160 wk_bitmap_buf[wk_idx++] = (uint8_t)(pic_width >> 24); /* biWidth */
anhtran 0:e9fd5575b10e 161 wk_bitmap_buf[wk_idx++] = (uint8_t)((-(long)pic_height) >> 0); /* biHeight */
anhtran 0:e9fd5575b10e 162 wk_bitmap_buf[wk_idx++] = (uint8_t)((-(long)pic_height) >> 8); /* biHeight */
anhtran 0:e9fd5575b10e 163 wk_bitmap_buf[wk_idx++] = (uint8_t)((-(long)pic_height) >> 16); /* biHeight */
anhtran 0:e9fd5575b10e 164 wk_bitmap_buf[wk_idx++] = (uint8_t)((-(long)pic_height) >> 24); /* biHeight */
anhtran 0:e9fd5575b10e 165 wk_bitmap_buf[wk_idx++] = 1; /* biPlanes */
anhtran 0:e9fd5575b10e 166 wk_bitmap_buf[wk_idx++] = 0; /* biPlanes */
anhtran 0:e9fd5575b10e 167 wk_bitmap_buf[wk_idx++] = 32; /* biBitCount */
anhtran 0:e9fd5575b10e 168 wk_bitmap_buf[wk_idx++] = 0; /* biBitCount */
anhtran 0:e9fd5575b10e 169
anhtran 0:e9fd5575b10e 170 wk_bitmap_buf[wk_idx++] = 0; /* biCopmression */
anhtran 0:e9fd5575b10e 171 wk_bitmap_buf[wk_idx++] = 0; /* biCopmression */
anhtran 0:e9fd5575b10e 172 wk_bitmap_buf[wk_idx++] = 0; /* biCopmression */
anhtran 0:e9fd5575b10e 173 wk_bitmap_buf[wk_idx++] = 0; /* biCopmression */
anhtran 0:e9fd5575b10e 174 wk_bitmap_buf[wk_idx++] = (uint8_t)(pic_size >> 0); /* biSizeImage */
anhtran 0:e9fd5575b10e 175 wk_bitmap_buf[wk_idx++] = (uint8_t)(pic_size >> 8); /* biSizeImage */
anhtran 0:e9fd5575b10e 176 wk_bitmap_buf[wk_idx++] = (uint8_t)(pic_size >> 16); /* biSizeImage */
anhtran 0:e9fd5575b10e 177 wk_bitmap_buf[wk_idx++] = (uint8_t)(pic_size >> 24); /* biSizeImage */
anhtran 0:e9fd5575b10e 178 wk_bitmap_buf[wk_idx++] = 0; /* biXPixPerMeter */
anhtran 0:e9fd5575b10e 179 wk_bitmap_buf[wk_idx++] = 0; /* biXPixPerMeter */
anhtran 0:e9fd5575b10e 180 wk_bitmap_buf[wk_idx++] = 0; /* biXPixPerMeter */
anhtran 0:e9fd5575b10e 181 wk_bitmap_buf[wk_idx++] = 0; /* biXPixPerMeter */
anhtran 0:e9fd5575b10e 182 wk_bitmap_buf[wk_idx++] = 0; /* biYPixPerMeter */
anhtran 0:e9fd5575b10e 183 wk_bitmap_buf[wk_idx++] = 0; /* biYPixPerMeter */
anhtran 0:e9fd5575b10e 184 wk_bitmap_buf[wk_idx++] = 0; /* biYPixPerMeter */
anhtran 0:e9fd5575b10e 185 wk_bitmap_buf[wk_idx++] = 0; /* biYPixPerMeter */
anhtran 0:e9fd5575b10e 186
anhtran 0:e9fd5575b10e 187 wk_bitmap_buf[wk_idx++] = 0; /* biClrUsed */
anhtran 0:e9fd5575b10e 188 wk_bitmap_buf[wk_idx++] = 0; /* biClrUsed */
anhtran 0:e9fd5575b10e 189 wk_bitmap_buf[wk_idx++] = 0; /* biClrUsed */
anhtran 0:e9fd5575b10e 190 wk_bitmap_buf[wk_idx++] = 0; /* biClrUsed */
anhtran 0:e9fd5575b10e 191 wk_bitmap_buf[wk_idx++] = 0; /* biCirImportant */
anhtran 0:e9fd5575b10e 192 wk_bitmap_buf[wk_idx++] = 0; /* biCirImportant */
anhtran 0:e9fd5575b10e 193 wk_bitmap_buf[wk_idx++] = 0; /* biCirImportant */
anhtran 0:e9fd5575b10e 194 wk_bitmap_buf[wk_idx++] = 0; /* biCirImportant */
anhtran 0:e9fd5575b10e 195 PcApp.send(wk_bitmap_buf, wk_idx);
anhtran 0:e9fd5575b10e 196
anhtran 0:e9fd5575b10e 197 SendData(buf, pic_size);
anhtran 0:e9fd5575b10e 198 wk_idx += pic_size;
anhtran 0:e9fd5575b10e 199
anhtran 0:e9fd5575b10e 200 return wk_idx;
anhtran 0:e9fd5575b10e 201 };
anhtran 0:e9fd5575b10e 202
anhtran 0:e9fd5575b10e 203 void DisplayApp::SetCallback(Callback<void()> func) {
anhtran 0:e9fd5575b10e 204 event = func;
anhtran 0:e9fd5575b10e 205 }
anhtran 0:e9fd5575b10e 206
anhtran 0:e9fd5575b10e 207 int DisplayApp::SendJpeg(uint8_t * buf, uint32_t size) {
anhtran 0:e9fd5575b10e 208 if (!PcApp.configured()) {
anhtran 0:e9fd5575b10e 209 return 0;
anhtran 0:e9fd5575b10e 210 }
anhtran 0:e9fd5575b10e 211 SendHeader(size);
anhtran 0:e9fd5575b10e 212 SendData(buf, size);
anhtran 0:e9fd5575b10e 213
anhtran 0:e9fd5575b10e 214 return size;
anhtran 0:e9fd5575b10e 215 }
anhtran 0:e9fd5575b10e 216
anhtran 0:e9fd5575b10e 217 int DisplayApp::GetMaxTouchNum(void) {
anhtran 0:e9fd5575b10e 218 return 1;
anhtran 0:e9fd5575b10e 219 }
anhtran 0:e9fd5575b10e 220
anhtran 0:e9fd5575b10e 221 int DisplayApp::GetCoordinates(int touch_buff_num, touch_pos_t * p_touch) {
anhtran 0:e9fd5575b10e 222 touch_pos_t * wk_touch;
anhtran 0:e9fd5575b10e 223 int count = 0;
anhtran 0:e9fd5575b10e 224 int x = pos_x;
anhtran 0:e9fd5575b10e 225 int y = pos_y;
anhtran 0:e9fd5575b10e 226
anhtran 0:e9fd5575b10e 227 if (touch_buff_num > 0) {
anhtran 0:e9fd5575b10e 228 count = 0;
anhtran 0:e9fd5575b10e 229 wk_touch = &p_touch[0];
anhtran 0:e9fd5575b10e 230 wk_touch->valid = false;
anhtran 0:e9fd5575b10e 231 wk_touch->x = 0;
anhtran 0:e9fd5575b10e 232 wk_touch->y = 0;
anhtran 0:e9fd5575b10e 233 if (x >= 0) {
anhtran 0:e9fd5575b10e 234 count = 1;
anhtran 0:e9fd5575b10e 235 wk_touch->valid = true;
anhtran 0:e9fd5575b10e 236 wk_touch->x = (uint32_t)x;
anhtran 0:e9fd5575b10e 237 }
anhtran 0:e9fd5575b10e 238 if (y >= 0) {
anhtran 0:e9fd5575b10e 239 count = 1;
anhtran 0:e9fd5575b10e 240 wk_touch->valid = true;
anhtran 0:e9fd5575b10e 241 wk_touch->y = (uint32_t)y;
anhtran 0:e9fd5575b10e 242 }
anhtran 0:e9fd5575b10e 243 }
anhtran 0:e9fd5575b10e 244
anhtran 0:e9fd5575b10e 245 return count;
anhtran 0:e9fd5575b10e 246 }