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