テスト

Dependencies:   mbed-os-lychee DisplayApp

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

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 }