テスト

Dependencies:   DisplayApp_Base

Dependents:   LED

Committer:
kobukai0415
Date:
Tue Dec 04 00:31:13 2018 +0000
Revision:
9:4f51598a41e7
Parent:
7:99022c278aa1
???

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kobukai0415 9:4f51598a41e7 1 #include "EasyAttach_CameraAndLCD.h"
kobukai0415 9:4f51598a41e7 2 #include "JPEG_Converter.h"
kobukai0415 9:4f51598a41e7 3 #include "dcache-control.h"
kobukai0415 9:4f51598a41e7 4 #include "DisplayApp.h"
kobukai0415 9:4f51598a41e7 5 #include "FATFileSystem.h"
dkato 0:13c1f522bbef 6 #include "mbed.h"
dkato 0:13c1f522bbef 7 #include "DisplayApp.h"
dkato 0:13c1f522bbef 8
dkato 0:13c1f522bbef 9 void DisplayApp::display_app_process() {
dkato 0:13c1f522bbef 10 int data;
dkato 0:13c1f522bbef 11 int pos_x_wk;
dkato 0:13c1f522bbef 12 int pos_wk;
dkato 0:13c1f522bbef 13
dkato 4:3c46efbe6d21 14 while (!PcApp.configured()) {
dkato 4:3c46efbe6d21 15 Thread::wait(100);
dkato 4:3c46efbe6d21 16 }
dkato 0:13c1f522bbef 17
dkato 0:13c1f522bbef 18 while (1) {
dkato 4:3c46efbe6d21 19 if (PcApp.readable()) {
dkato 4:3c46efbe6d21 20 data = PcApp.getc();
dkato 1:fdcf2c6a1167 21 if (data == '{') {
dkato 1:fdcf2c6a1167 22 pos_seq = POS_SEQ_START;
dkato 1:fdcf2c6a1167 23 } else if (data == 'X') {
dkato 1:fdcf2c6a1167 24 if (pos_seq == POS_SEQ_START) {
dkato 1:fdcf2c6a1167 25 pos_seq = POS_SEQ_X;
dkato 1:fdcf2c6a1167 26 } else {
dkato 1:fdcf2c6a1167 27 pos_seq = POS_SEQ_INIT;
dkato 1:fdcf2c6a1167 28 }
dkato 1:fdcf2c6a1167 29 } else if (data == 'Y') {
dkato 1:fdcf2c6a1167 30 if (pos_seq == POS_SEQ_C) {
dkato 1:fdcf2c6a1167 31 pos_seq = POS_SEQ_Y;
dkato 1:fdcf2c6a1167 32 } else {
dkato 1:fdcf2c6a1167 33 pos_seq = POS_SEQ_INIT;
dkato 1:fdcf2c6a1167 34 }
dkato 1:fdcf2c6a1167 35 } else if (data == '=') {
dkato 1:fdcf2c6a1167 36 if (pos_seq == POS_SEQ_X) {
dkato 1:fdcf2c6a1167 37 pos_seq = POS_SEQ_X_POS;
dkato 1:fdcf2c6a1167 38 pos_wk = 0;
dkato 1:fdcf2c6a1167 39 } else if (pos_seq == POS_SEQ_Y) {
dkato 1:fdcf2c6a1167 40 pos_seq = POS_SEQ_Y_POS;
dkato 1:fdcf2c6a1167 41 pos_wk = 0;
dkato 1:fdcf2c6a1167 42 } else {
dkato 1:fdcf2c6a1167 43 pos_seq = POS_SEQ_INIT;
dkato 1:fdcf2c6a1167 44 }
dkato 1:fdcf2c6a1167 45 } else if (data == '-') {
dkato 1:fdcf2c6a1167 46 if (pos_seq == POS_SEQ_X_POS) {
dkato 1:fdcf2c6a1167 47 pos_seq = POS_SEQ_X_M;
dkato 1:fdcf2c6a1167 48 } else if (pos_seq == POS_SEQ_Y_POS) {
dkato 1:fdcf2c6a1167 49 pos_seq = POS_SEQ_Y_M;
dkato 1:fdcf2c6a1167 50 } else {
dkato 1:fdcf2c6a1167 51 pos_seq = POS_SEQ_INIT;
dkato 1:fdcf2c6a1167 52 }
dkato 1:fdcf2c6a1167 53 } else if ((data >= '0') && (data <= '9')) {
dkato 1:fdcf2c6a1167 54 if ((pos_seq == POS_SEQ_X_POS) || (pos_seq == POS_SEQ_Y_POS)) {
dkato 1:fdcf2c6a1167 55 pos_wk = (pos_wk * 10) + (data - '0');
dkato 1:fdcf2c6a1167 56 } else if ((pos_seq == POS_SEQ_X_M) && (data == '1')) {
dkato 1:fdcf2c6a1167 57 pos_wk = -1;
dkato 1:fdcf2c6a1167 58 } else if ((pos_seq == POS_SEQ_Y_M) && (data == '1')) {
dkato 1:fdcf2c6a1167 59 pos_wk = -1;
dkato 1:fdcf2c6a1167 60 } else {
dkato 1:fdcf2c6a1167 61 pos_seq = POS_SEQ_INIT;
dkato 1:fdcf2c6a1167 62 }
dkato 1:fdcf2c6a1167 63 } else if (data == ',') {
dkato 1:fdcf2c6a1167 64 if ((pos_seq == POS_SEQ_X_POS) || (pos_seq == POS_SEQ_X_M)) {
dkato 1:fdcf2c6a1167 65 pos_x_wk = pos_wk;
dkato 1:fdcf2c6a1167 66 pos_seq = POS_SEQ_C;
dkato 1:fdcf2c6a1167 67 } else {
dkato 1:fdcf2c6a1167 68 pos_seq = POS_SEQ_INIT;
dkato 1:fdcf2c6a1167 69 }
dkato 1:fdcf2c6a1167 70 } else if (data == '}') {
dkato 1:fdcf2c6a1167 71 if ((pos_seq == POS_SEQ_Y_POS) || (pos_seq == POS_SEQ_Y_M)) {
dkato 1:fdcf2c6a1167 72 pos_seq = POS_SEQ_END;
dkato 1:fdcf2c6a1167 73 if ((pos_x != pos_x_wk) || (pos_y != pos_wk)) {
dkato 1:fdcf2c6a1167 74 pos_x = pos_x_wk;
dkato 1:fdcf2c6a1167 75 pos_y = pos_wk;
dkato 3:693902c86ca0 76 if (event) {
dkato 3:693902c86ca0 77 event.call();
dkato 3:693902c86ca0 78 }
dkato 1:fdcf2c6a1167 79 }
dkato 1:fdcf2c6a1167 80 } else {
dkato 1:fdcf2c6a1167 81 pos_seq = POS_SEQ_INIT;
dkato 0:13c1f522bbef 82 }
dkato 0:13c1f522bbef 83 } else {
dkato 0:13c1f522bbef 84 pos_seq = POS_SEQ_INIT;
dkato 0:13c1f522bbef 85 }
dkato 0:13c1f522bbef 86 } else {
dkato 1:fdcf2c6a1167 87 Thread::wait(10);
dkato 0:13c1f522bbef 88 }
dkato 0:13c1f522bbef 89 }
dkato 0:13c1f522bbef 90 }
dkato 0:13c1f522bbef 91
kobukai0415 9:4f51598a41e7 92 void DisplayApp::DisplayApp(osPriority tsk_pri, uint32_t stack_size) :
dkato 4:3c46efbe6d21 93 PcApp(0x1f00, 0x2012, 0x0001, false), displayThread(tsk_pri, stack_size) {
dkato 3:693902c86ca0 94 displayThread.start(callback(this, &DisplayApp::display_app_process));
dkato 0:13c1f522bbef 95 }
dkato 0:13c1f522bbef 96
dkato 0:13c1f522bbef 97 void DisplayApp::SendHeader(uint32_t size) {
dkato 0:13c1f522bbef 98 uint8_t headder_data[12] = {0xFF,0xFF,0xAA,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
dkato 0:13c1f522bbef 99
dkato 0:13c1f522bbef 100 headder_data[8] = (uint8_t)((uint32_t)size >> 0);
dkato 0:13c1f522bbef 101 headder_data[9] = (uint8_t)((uint32_t)size >> 8);
dkato 0:13c1f522bbef 102 headder_data[10] = (uint8_t)((uint32_t)size >> 16);
dkato 0:13c1f522bbef 103 headder_data[11] = (uint8_t)((uint32_t)size >> 24);
dkato 4:3c46efbe6d21 104 PcApp.writeBlock((uint8_t *)headder_data, sizeof(headder_data));
dkato 0:13c1f522bbef 105 }
dkato 0:13c1f522bbef 106
dkato 0:13c1f522bbef 107 void DisplayApp::SendData(uint8_t * buf, uint32_t size) {
dkato 0:13c1f522bbef 108 int send_size;
dkato 0:13c1f522bbef 109 int send_index = 0;
dkato 0:13c1f522bbef 110
dkato 0:13c1f522bbef 111 while (size > 0) {
dkato 0:13c1f522bbef 112 if (size > MAX_PACKET_SIZE_EPBULK) {
dkato 0:13c1f522bbef 113 send_size = MAX_PACKET_SIZE_EPBULK;
dkato 0:13c1f522bbef 114 } else {
dkato 0:13c1f522bbef 115 send_size = size;
dkato 0:13c1f522bbef 116 }
dkato 4:3c46efbe6d21 117 PcApp.writeBlock(&buf[send_index], send_size);
dkato 0:13c1f522bbef 118 send_index += send_size;
dkato 0:13c1f522bbef 119 size -= send_size;
dkato 0:13c1f522bbef 120 }
dkato 0:13c1f522bbef 121 }
dkato 0:13c1f522bbef 122
dkato 0:13c1f522bbef 123 int DisplayApp::SendRgb888(uint8_t * buf, uint32_t pic_width, uint32_t pic_height) {
dkato 0:13c1f522bbef 124 uint32_t offset_size = 54;
dkato 0:13c1f522bbef 125 uint32_t buf_stride = (((pic_width * 4u) + 31u) & ~31u);
dkato 0:13c1f522bbef 126 uint32_t pic_size = buf_stride * pic_height;
dkato 0:13c1f522bbef 127 uint32_t total_size = pic_size + offset_size;
dkato 0:13c1f522bbef 128 uint8_t wk_bitmap_buf[54];
dkato 0:13c1f522bbef 129 int wk_idx = 0;
dkato 0:13c1f522bbef 130
dkato 4:3c46efbe6d21 131 if (!PcApp.configured()) {
dkato 0:13c1f522bbef 132 return 0;
dkato 0:13c1f522bbef 133 }
dkato 4:3c46efbe6d21 134 if (PcApp._putc(0) == 0) { // terminal connect check
dkato 0:13c1f522bbef 135 return 0;
dkato 0:13c1f522bbef 136 }
dkato 0:13c1f522bbef 137 SendHeader(total_size);
dkato 0:13c1f522bbef 138
dkato 0:13c1f522bbef 139 /* BITMAPFILEHEADER */
dkato 0:13c1f522bbef 140 wk_bitmap_buf[wk_idx++] = 'B';
dkato 0:13c1f522bbef 141 wk_bitmap_buf[wk_idx++] = 'M';
dkato 0:13c1f522bbef 142 wk_bitmap_buf[wk_idx++] = (uint8_t)(total_size >> 0); /* bfSize */
dkato 0:13c1f522bbef 143 wk_bitmap_buf[wk_idx++] = (uint8_t)(total_size >> 8); /* bfSize */
dkato 0:13c1f522bbef 144 wk_bitmap_buf[wk_idx++] = (uint8_t)(total_size >> 16); /* bfSize */
dkato 0:13c1f522bbef 145 wk_bitmap_buf[wk_idx++] = (uint8_t)(total_size >> 24); /* bfSize */
dkato 0:13c1f522bbef 146 wk_bitmap_buf[wk_idx++] = 0; /* bfReserved1 */
dkato 0:13c1f522bbef 147 wk_bitmap_buf[wk_idx++] = 0; /* bfReserved1 */
dkato 0:13c1f522bbef 148 wk_bitmap_buf[wk_idx++] = 0; /* bfReserved2 */
dkato 0:13c1f522bbef 149 wk_bitmap_buf[wk_idx++] = 0; /* bfReserved2 */
dkato 0:13c1f522bbef 150 wk_bitmap_buf[wk_idx++] = (uint8_t)(offset_size >> 0); /* bfOffBits */
dkato 0:13c1f522bbef 151 wk_bitmap_buf[wk_idx++] = (uint8_t)(offset_size >> 8); /* bfOffBits */
dkato 0:13c1f522bbef 152 wk_bitmap_buf[wk_idx++] = (uint8_t)(offset_size >> 16); /* bfOffBits */
dkato 0:13c1f522bbef 153 wk_bitmap_buf[wk_idx++] = (uint8_t)(offset_size >> 24); /* bfOffBits */
dkato 0:13c1f522bbef 154
dkato 0:13c1f522bbef 155 /* BITMAPINFOHEADER */
dkato 0:13c1f522bbef 156 wk_bitmap_buf[wk_idx++] = 40; /* biSize */
dkato 0:13c1f522bbef 157 wk_bitmap_buf[wk_idx++] = 0; /* biSize */
dkato 0:13c1f522bbef 158 wk_bitmap_buf[wk_idx++] = 0; /* biSize */
dkato 0:13c1f522bbef 159 wk_bitmap_buf[wk_idx++] = 0; /* biSize */
dkato 0:13c1f522bbef 160 wk_bitmap_buf[wk_idx++] = (uint8_t)(pic_width >> 0); /* biWidth */
dkato 0:13c1f522bbef 161 wk_bitmap_buf[wk_idx++] = (uint8_t)(pic_width >> 8); /* biWidth */
dkato 0:13c1f522bbef 162 wk_bitmap_buf[wk_idx++] = (uint8_t)(pic_width >> 16); /* biWidth */
dkato 0:13c1f522bbef 163 wk_bitmap_buf[wk_idx++] = (uint8_t)(pic_width >> 24); /* biWidth */
dkato 0:13c1f522bbef 164 wk_bitmap_buf[wk_idx++] = (uint8_t)((-(long)pic_height) >> 0); /* biHeight */
dkato 0:13c1f522bbef 165 wk_bitmap_buf[wk_idx++] = (uint8_t)((-(long)pic_height) >> 8); /* biHeight */
dkato 0:13c1f522bbef 166 wk_bitmap_buf[wk_idx++] = (uint8_t)((-(long)pic_height) >> 16); /* biHeight */
dkato 0:13c1f522bbef 167 wk_bitmap_buf[wk_idx++] = (uint8_t)((-(long)pic_height) >> 24); /* biHeight */
dkato 0:13c1f522bbef 168 wk_bitmap_buf[wk_idx++] = 1; /* biPlanes */
dkato 0:13c1f522bbef 169 wk_bitmap_buf[wk_idx++] = 0; /* biPlanes */
dkato 0:13c1f522bbef 170 wk_bitmap_buf[wk_idx++] = 32; /* biBitCount */
dkato 0:13c1f522bbef 171 wk_bitmap_buf[wk_idx++] = 0; /* biBitCount */
dkato 0:13c1f522bbef 172
dkato 0:13c1f522bbef 173 wk_bitmap_buf[wk_idx++] = 0; /* biCopmression */
dkato 0:13c1f522bbef 174 wk_bitmap_buf[wk_idx++] = 0; /* biCopmression */
dkato 0:13c1f522bbef 175 wk_bitmap_buf[wk_idx++] = 0; /* biCopmression */
dkato 0:13c1f522bbef 176 wk_bitmap_buf[wk_idx++] = 0; /* biCopmression */
dkato 0:13c1f522bbef 177 wk_bitmap_buf[wk_idx++] = (uint8_t)(pic_size >> 0); /* biSizeImage */
dkato 0:13c1f522bbef 178 wk_bitmap_buf[wk_idx++] = (uint8_t)(pic_size >> 8); /* biSizeImage */
dkato 0:13c1f522bbef 179 wk_bitmap_buf[wk_idx++] = (uint8_t)(pic_size >> 16); /* biSizeImage */
dkato 0:13c1f522bbef 180 wk_bitmap_buf[wk_idx++] = (uint8_t)(pic_size >> 24); /* biSizeImage */
dkato 0:13c1f522bbef 181 wk_bitmap_buf[wk_idx++] = 0; /* biXPixPerMeter */
dkato 0:13c1f522bbef 182 wk_bitmap_buf[wk_idx++] = 0; /* biXPixPerMeter */
dkato 0:13c1f522bbef 183 wk_bitmap_buf[wk_idx++] = 0; /* biXPixPerMeter */
dkato 0:13c1f522bbef 184 wk_bitmap_buf[wk_idx++] = 0; /* biXPixPerMeter */
dkato 0:13c1f522bbef 185 wk_bitmap_buf[wk_idx++] = 0; /* biYPixPerMeter */
dkato 0:13c1f522bbef 186 wk_bitmap_buf[wk_idx++] = 0; /* biYPixPerMeter */
dkato 0:13c1f522bbef 187 wk_bitmap_buf[wk_idx++] = 0; /* biYPixPerMeter */
dkato 0:13c1f522bbef 188 wk_bitmap_buf[wk_idx++] = 0; /* biYPixPerMeter */
dkato 0:13c1f522bbef 189
dkato 0:13c1f522bbef 190 wk_bitmap_buf[wk_idx++] = 0; /* biClrUsed */
dkato 0:13c1f522bbef 191 wk_bitmap_buf[wk_idx++] = 0; /* biClrUsed */
dkato 0:13c1f522bbef 192 wk_bitmap_buf[wk_idx++] = 0; /* biClrUsed */
dkato 0:13c1f522bbef 193 wk_bitmap_buf[wk_idx++] = 0; /* biClrUsed */
dkato 0:13c1f522bbef 194 wk_bitmap_buf[wk_idx++] = 0; /* biCirImportant */
dkato 0:13c1f522bbef 195 wk_bitmap_buf[wk_idx++] = 0; /* biCirImportant */
dkato 0:13c1f522bbef 196 wk_bitmap_buf[wk_idx++] = 0; /* biCirImportant */
dkato 0:13c1f522bbef 197 wk_bitmap_buf[wk_idx++] = 0; /* biCirImportant */
dkato 4:3c46efbe6d21 198 PcApp.writeBlock(wk_bitmap_buf, wk_idx);
dkato 0:13c1f522bbef 199
dkato 0:13c1f522bbef 200 SendData(buf, pic_size);
dkato 0:13c1f522bbef 201 wk_idx += pic_size;
dkato 0:13c1f522bbef 202
dkato 0:13c1f522bbef 203 return wk_idx;
dkato 0:13c1f522bbef 204 };
dkato 0:13c1f522bbef 205
dkato 3:693902c86ca0 206 void DisplayApp::SetCallback(Callback<void()> func) {
dkato 3:693902c86ca0 207 event = func;
dkato 3:693902c86ca0 208 }
dkato 3:693902c86ca0 209
dkato 0:13c1f522bbef 210 int DisplayApp::SendJpeg(uint8_t * buf, uint32_t size) {
dkato 4:3c46efbe6d21 211 if (!PcApp.configured()) {
dkato 0:13c1f522bbef 212 return 0;
dkato 0:13c1f522bbef 213 }
dkato 4:3c46efbe6d21 214 if (PcApp._putc(0) == 0) { // terminal connect check
dkato 0:13c1f522bbef 215 return 0;
dkato 0:13c1f522bbef 216 }
yagyag 6:3bb202b0ce01 217
dkato 0:13c1f522bbef 218 SendHeader(size);
dkato 0:13c1f522bbef 219 SendData(buf, size);
dkato 0:13c1f522bbef 220
dkato 0:13c1f522bbef 221 return size;
dkato 0:13c1f522bbef 222 }
dkato 0:13c1f522bbef 223
dkato 0:13c1f522bbef 224 int DisplayApp::GetMaxTouchNum(void) {
dkato 0:13c1f522bbef 225 return 1;
dkato 0:13c1f522bbef 226 }
dkato 0:13c1f522bbef 227
dkato 0:13c1f522bbef 228 int DisplayApp::GetCoordinates(int touch_buff_num, touch_pos_t * p_touch) {
dkato 0:13c1f522bbef 229 touch_pos_t * wk_touch;
dkato 0:13c1f522bbef 230 int count = 0;
dkato 0:13c1f522bbef 231 int x = pos_x;
dkato 0:13c1f522bbef 232 int y = pos_y;
dkato 0:13c1f522bbef 233
dkato 0:13c1f522bbef 234 if (touch_buff_num > 0) {
dkato 0:13c1f522bbef 235 count = 0;
dkato 0:13c1f522bbef 236 wk_touch = &p_touch[0];
dkato 0:13c1f522bbef 237 wk_touch->valid = false;
dkato 0:13c1f522bbef 238 wk_touch->x = 0;
dkato 0:13c1f522bbef 239 wk_touch->y = 0;
dkato 0:13c1f522bbef 240 if (x >= 0) {
dkato 0:13c1f522bbef 241 count = 1;
dkato 0:13c1f522bbef 242 wk_touch->valid = true;
dkato 0:13c1f522bbef 243 wk_touch->x = (uint32_t)x;
dkato 0:13c1f522bbef 244 }
dkato 0:13c1f522bbef 245 if (y >= 0) {
dkato 0:13c1f522bbef 246 count = 1;
dkato 0:13c1f522bbef 247 wk_touch->valid = true;
dkato 0:13c1f522bbef 248 wk_touch->y = (uint32_t)y;
dkato 0:13c1f522bbef 249 }
dkato 0:13c1f522bbef 250 }
dkato 0:13c1f522bbef 251
dkato 0:13c1f522bbef 252 return count;
dkato 0:13c1f522bbef 253 }
yagyag 7:99022c278aa1 254
yagyag 7:99022c278aa1 255 char DisplayApp::Getgetc()
yagyag 7:99022c278aa1 256 {
yagyag 7:99022c278aa1 257 return PcApp.getc();
yagyag 7:99022c278aa1 258 }