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