テスト
Dependencies: mbed-os-lychee DisplayApp
main.cpp
00001 00002 #include "mbed.h" 00003 #include "DisplayApp.h" 00004 #include "EasyAttach_CameraAndLCD.h" 00005 #include "JPEG_Converter.h" 00006 #include "dcache-control.h" 00007 #include "DisplayApp.h" 00008 #include "FATFileSystem.h" 00009 00010 DigitalOut led1(LED1); 00011 DigitalOut led2(LED2); 00012 DigitalOut led3(LED3); 00013 DigitalOut led4(LED4); 00014 00015 void DisplayApp::display_app_process() { 00016 int data; 00017 int pos_x_wk; 00018 int pos_wk; 00019 int flag; 00020 00021 int blink_on = 0; 00022 int blink_flag = 0; 00023 00024 while (!PcApp.configured()) { 00025 Thread::wait(100); 00026 } 00027 00028 while (1) { 00029 00030 /*受信処理/**/ 00031 if (PcApp.readable()) { 00032 data = PcApp.getc(); 00033 if (data == '4' or data == '5') { 00034 flag = 1; //走行処理 00035 blink_on = 1; 00036 00037 /* 00038 } else if (data == '1') { 00039 flag = 3; //撮影処理 00040 00041 } else if (data == '3') { 00042 flag = 4; //音声出力処理 00043 00044 } else if (data == '2') { 00045 flag = 5; //ライト点灯処理 00046 } 00047 */ 00048 00049 /*走行処理*/ 00050 if(data == '4'){ 00051 led1 = !led1; 00052 }else if (data == '5'){ 00053 blink_flag = 1; 00054 if(blink_on == 1 and blink_flag == 1){ 00055 led2 = !led2; 00056 } 00057 wait(0.3); 00058 } 00059 00060 00061 00062 #if 0 00063 } else if (pos_seq == POS_SEQ_Y) { 00064 pos_seq = POS_SEQ_Y_POS; 00065 pos_wk = 0; 00066 } else { 00067 pos_seq = POS_SEQ_INIT; 00068 } 00069 } 00070 00071 else if (data == '-') { 00072 if (pos_seq == POS_SEQ_X_POS) { 00073 pos_seq = POS_SEQ_X_M; 00074 } else if (pos_seq == POS_SEQ_Y_POS) { 00075 pos_seq = POS_SEQ_Y_M; 00076 } else { 00077 pos_seq = POS_SEQ_INIT; 00078 } 00079 } else if ((data >= '0') && (data <= '9')) { 00080 if ((pos_seq == POS_SEQ_X_POS) || (pos_seq == POS_SEQ_Y_POS)) { 00081 pos_wk = (pos_wk * 10) + (data - '0'); 00082 } else if ((pos_seq == POS_SEQ_X_M) && (data == '1')) { 00083 pos_wk = -1; 00084 } else if ((pos_seq == POS_SEQ_Y_M) && (data == '1')) { 00085 pos_wk = -1; 00086 } else { 00087 pos_seq = POS_SEQ_INIT; 00088 } 00089 } else if (data == ',') { 00090 if ((pos_seq == POS_SEQ_X_POS) || (pos_seq == POS_SEQ_X_M)) { 00091 pos_x_wk = pos_wk; 00092 pos_seq = POS_SEQ_C; 00093 } else { 00094 pos_seq = POS_SEQ_INIT; 00095 } 00096 } else if (data == '}') { 00097 if ((pos_seq == POS_SEQ_Y_POS) || (pos_seq == POS_SEQ_Y_M)) { 00098 pos_seq = POS_SEQ_END; 00099 if ((pos_x != pos_x_wk) || (pos_y != pos_wk)) { 00100 pos_x = pos_x_wk; 00101 pos_y = pos_wk; 00102 if (event) { 00103 event.call(); 00104 } 00105 } 00106 } else { 00107 pos_seq = POS_SEQ_INIT; 00108 } 00109 } else { 00110 pos_seq = POS_SEQ_INIT; 00111 } 00112 } else { 00113 Thread::wait(10); 00114 } 00115 } 00116 #endif 00117 } 00118 00119 void DisplayApp::DisplayApp(osPriority tsk_pri, uint32_t stack_size) : 00120 PcApp(0x1f00, 0x2012, 0x0001, false), displayThread(tsk_pri, stack_size) { 00121 displayThread.start(callback(this, &DisplayApp::display_app_process)); 00122 } 00123 00124 void DisplayApp::SendHeader(uint32_t size) { 00125 uint8_t headder_data[12] = {0xFF,0xFF,0xAA,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; 00126 00127 headder_data[8] = (uint8_t)((uint32_t)size >> 0); 00128 headder_data[9] = (uint8_t)((uint32_t)size >> 8); 00129 headder_data[10] = (uint8_t)((uint32_t)size >> 16); 00130 headder_data[11] = (uint8_t)((uint32_t)size >> 24); 00131 PcApp.writeBlock((uint8_t *)headder_data, sizeof(headder_data)); 00132 } 00133 00134 void DisplayApp::SendData(uint8_t * buf, uint32_t size) { 00135 int send_size; 00136 int send_index = 0; 00137 00138 while (size > 0) { 00139 if (size > MAX_PACKET_SIZE_EPBULK) { 00140 send_size = MAX_PACKET_SIZE_EPBULK; 00141 } else { 00142 send_size = size; 00143 } 00144 PcApp.writeBlock(&buf[send_index], send_size); 00145 send_index += send_size; 00146 size -= send_size; 00147 } 00148 } 00149 00150 int DisplayApp::SendRgb888(uint8_t * buf, uint32_t pic_width, uint32_t pic_height) { 00151 uint32_t offset_size = 54; 00152 uint32_t buf_stride = (((pic_width * 4u) + 31u) & ~31u); 00153 uint32_t pic_size = buf_stride * pic_height; 00154 uint32_t total_size = pic_size + offset_size; 00155 uint8_t wk_bitmap_buf[54]; 00156 int wk_idx = 0; 00157 00158 if (!PcApp.configured()) { 00159 return 0; 00160 } 00161 if (PcApp._putc(0) == 0) { // terminal connect check 00162 return 0; 00163 } 00164 SendHeader(total_size); 00165 00166 /* BITMAPFILEHEADER */ 00167 wk_bitmap_buf[wk_idx++] = 'B'; 00168 wk_bitmap_buf[wk_idx++] = 'M'; 00169 wk_bitmap_buf[wk_idx++] = (uint8_t)(total_size >> 0); /* bfSize */ 00170 wk_bitmap_buf[wk_idx++] = (uint8_t)(total_size >> 8); /* bfSize */ 00171 wk_bitmap_buf[wk_idx++] = (uint8_t)(total_size >> 16); /* bfSize */ 00172 wk_bitmap_buf[wk_idx++] = (uint8_t)(total_size >> 24); /* bfSize */ 00173 wk_bitmap_buf[wk_idx++] = 0; /* bfReserved1 */ 00174 wk_bitmap_buf[wk_idx++] = 0; /* bfReserved1 */ 00175 wk_bitmap_buf[wk_idx++] = 0; /* bfReserved2 */ 00176 wk_bitmap_buf[wk_idx++] = 0; /* bfReserved2 */ 00177 wk_bitmap_buf[wk_idx++] = (uint8_t)(offset_size >> 0); /* bfOffBits */ 00178 wk_bitmap_buf[wk_idx++] = (uint8_t)(offset_size >> 8); /* bfOffBits */ 00179 wk_bitmap_buf[wk_idx++] = (uint8_t)(offset_size >> 16); /* bfOffBits */ 00180 wk_bitmap_buf[wk_idx++] = (uint8_t)(offset_size >> 24); /* bfOffBits */ 00181 00182 /* BITMAPINFOHEADER */ 00183 wk_bitmap_buf[wk_idx++] = 40; /* biSize */ 00184 wk_bitmap_buf[wk_idx++] = 0; /* biSize */ 00185 wk_bitmap_buf[wk_idx++] = 0; /* biSize */ 00186 wk_bitmap_buf[wk_idx++] = 0; /* biSize */ 00187 wk_bitmap_buf[wk_idx++] = (uint8_t)(pic_width >> 0); /* biWidth */ 00188 wk_bitmap_buf[wk_idx++] = (uint8_t)(pic_width >> 8); /* biWidth */ 00189 wk_bitmap_buf[wk_idx++] = (uint8_t)(pic_width >> 16); /* biWidth */ 00190 wk_bitmap_buf[wk_idx++] = (uint8_t)(pic_width >> 24); /* biWidth */ 00191 wk_bitmap_buf[wk_idx++] = (uint8_t)((-(long)pic_height) >> 0); /* biHeight */ 00192 wk_bitmap_buf[wk_idx++] = (uint8_t)((-(long)pic_height) >> 8); /* biHeight */ 00193 wk_bitmap_buf[wk_idx++] = (uint8_t)((-(long)pic_height) >> 16); /* biHeight */ 00194 wk_bitmap_buf[wk_idx++] = (uint8_t)((-(long)pic_height) >> 24); /* biHeight */ 00195 wk_bitmap_buf[wk_idx++] = 1; /* biPlanes */ 00196 wk_bitmap_buf[wk_idx++] = 0; /* biPlanes */ 00197 wk_bitmap_buf[wk_idx++] = 32; /* biBitCount */ 00198 wk_bitmap_buf[wk_idx++] = 0; /* biBitCount */ 00199 00200 wk_bitmap_buf[wk_idx++] = 0; /* biCopmression */ 00201 wk_bitmap_buf[wk_idx++] = 0; /* biCopmression */ 00202 wk_bitmap_buf[wk_idx++] = 0; /* biCopmression */ 00203 wk_bitmap_buf[wk_idx++] = 0; /* biCopmression */ 00204 wk_bitmap_buf[wk_idx++] = (uint8_t)(pic_size >> 0); /* biSizeImage */ 00205 wk_bitmap_buf[wk_idx++] = (uint8_t)(pic_size >> 8); /* biSizeImage */ 00206 wk_bitmap_buf[wk_idx++] = (uint8_t)(pic_size >> 16); /* biSizeImage */ 00207 wk_bitmap_buf[wk_idx++] = (uint8_t)(pic_size >> 24); /* biSizeImage */ 00208 wk_bitmap_buf[wk_idx++] = 0; /* biXPixPerMeter */ 00209 wk_bitmap_buf[wk_idx++] = 0; /* biXPixPerMeter */ 00210 wk_bitmap_buf[wk_idx++] = 0; /* biXPixPerMeter */ 00211 wk_bitmap_buf[wk_idx++] = 0; /* biXPixPerMeter */ 00212 wk_bitmap_buf[wk_idx++] = 0; /* biYPixPerMeter */ 00213 wk_bitmap_buf[wk_idx++] = 0; /* biYPixPerMeter */ 00214 wk_bitmap_buf[wk_idx++] = 0; /* biYPixPerMeter */ 00215 wk_bitmap_buf[wk_idx++] = 0; /* biYPixPerMeter */ 00216 00217 wk_bitmap_buf[wk_idx++] = 0; /* biClrUsed */ 00218 wk_bitmap_buf[wk_idx++] = 0; /* biClrUsed */ 00219 wk_bitmap_buf[wk_idx++] = 0; /* biClrUsed */ 00220 wk_bitmap_buf[wk_idx++] = 0; /* biClrUsed */ 00221 wk_bitmap_buf[wk_idx++] = 0; /* biCirImportant */ 00222 wk_bitmap_buf[wk_idx++] = 0; /* biCirImportant */ 00223 wk_bitmap_buf[wk_idx++] = 0; /* biCirImportant */ 00224 wk_bitmap_buf[wk_idx++] = 0; /* biCirImportant */ 00225 PcApp.writeBlock(wk_bitmap_buf, wk_idx); 00226 00227 SendData(buf, pic_size); 00228 wk_idx += pic_size; 00229 00230 return wk_idx; 00231 }; 00232 00233 void DisplayApp::SetCallback(Callback<void()> func) { 00234 event = func; 00235 } 00236 00237 int DisplayApp::SendJpeg(uint8_t * buf, uint32_t size) { 00238 if (!PcApp.configured()) { 00239 return 0; 00240 } 00241 if (PcApp._putc(0) == 0) { // terminal connect check 00242 return 0; 00243 } 00244 00245 SendHeader(size); 00246 SendData(buf, size); 00247 00248 return size; 00249 } 00250 00251 int DisplayApp::GetMaxTouchNum(void) { 00252 return 1; 00253 } 00254 00255 int DisplayApp::GetCoordinates(int touch_buff_num, touch_pos_t * p_touch) { 00256 touch_pos_t * wk_touch; 00257 int count = 0; 00258 int x = pos_x; 00259 int y = pos_y; 00260 00261 if (touch_buff_num > 0) { 00262 count = 0; 00263 wk_touch = &p_touch[0]; 00264 wk_touch->valid = false; 00265 wk_touch->x = 0; 00266 wk_touch->y = 0; 00267 if (x >= 0) { 00268 count = 1; 00269 wk_touch->valid = true; 00270 wk_touch->x = (uint32_t)x; 00271 } 00272 if (y >= 0) { 00273 count = 1; 00274 wk_touch->valid = true; 00275 wk_touch->y = (uint32_t)y; 00276 } 00277 } 00278 00279 return count; 00280 } 00281 00282 char DisplayApp::Getgetc() 00283 { 00284 return PcApp.getc(); 00285 }
Generated on Wed Jul 13 2022 23:43:04 by
1.7.2