Vipin Ranka / MGAS_GR_Peach

Dependencies:   GR-PEACH_video GraphicsFramework HTTPServer R_BSP mbed-rpc mbed-rtos Socket lwip-eth lwip-sys lwip FATFileSystem

Fork of mbed-os-example-mbed5-blinky by mbed-os-examples

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "RF24.h"
00003 #include "ILI9486.h"
00004 #include "DisplayBace.h"
00005 #include "SDFileSystem.h"
00006 #include "JPEG_Converter.h"
00007 
00008 #include "HTTPServer.h"
00009 #include "FsHandler.h"
00010 
00011 #include "rtos.h"
00012 
00013 #include "stdio.h"
00014 #include "string"
00015 #include "Arial12x12.h"
00016 #include "Arial28x28.h"
00017 #include "Arial24x23.h"
00018 //#include "Terminal6x8.h"
00019 #include "Arial43x48_numb.h"
00020 #include "pict.h"
00021 #include "pavement_48x34.h"
00022 #include "Touch.h"
00023 
00024 #include "camera.h"
00025 #include "EthernetInterface.h"
00026 
00027 //Initialization
00028 Serial uart(USBTX, USBRX);
00029 ILI9486 myLCD(SPI_16, 16000000, P4_6, NC, P4_4, P4_5, P2_14, P8_1,"myLCD"); // Spi 16bit, 12MHz, mosi, miso, sclk, cs, reset, dc
00030 TouchScreenADS7843 TP(P4_6 ,P4_7 ,P4_4 ,P2_9 ,P7_15, &myLCD);// ADS7843 -> mosi, miso, sclk, cs, irq, SPI_myLCD
00031 SDFileSystem sd(P8_5, P8_6, P8_3, P8_4, "sd");
00032 RF24 radio(P10_14,P10_15, P10_12,P8_14, P10_13); // mosi, miso, sck, csn, ce, irq
00033 
00034 AnalogIn   temp(A4);
00035 DigitalOut led3(LED3);
00036 int temp_count=0,in_pic=0;
00037 
00038 struct Screen {
00039     int16_t title[60*320];
00040     int titlex,titley;
00041     int16_t logo[80*320];
00042     int logox,logoy;
00043     int16_t hc[157*156];
00044     int hcx,hcy,hch,hcw;
00045     int16_t aut[158*156];
00046     int autx,auty,autw,auth;
00047     int16_t sec[157*158];
00048     int secx,secy,secw,sech;
00049     int16_t ind[158*158];
00050     int indx,indy,indw,indh;
00051     int indsize;
00052     int secsize;
00053     int autsize;
00054     int hcsize;
00055     int logosize;
00056     int titlesize;
00057 } dis_nav;
00058 
00059 //Variables
00060 unsigned short backgroundcolor=Black;
00061 unsigned short foregroundcolor=Red;
00062 int pos[4];
00063 int16_t colors[16]= {
00064     0x000F,0x0000,0x03E0,0x03EF,0x7800,0x780F,0x7BE0,0xC618,0x7BEF,0x001F,0x07E0,0x07FF,0xF800,0xF81F,0xFFE0,0xFFFF
00065 };
00066 int color_count=0;
00067 int cam_sel=0;
00068 int ind_speed=0;
00069 int ind_of=0;
00070 int16_t prev_col=0;
00071 EthernetInterface network;
00072 HTTPServer svr;
00073 TCPSocketServer rf_server;
00074 TCPSocketConnection client;
00075 
00076 
00077 static unsigned short col_buf[PIXEL_VW][PIXEL_HW]__attribute((section("NC_BSS"),aligned(8)));  //8 bytes aligned!;
00078 static uint8_t JCUBuffer_OUTPUT[PIXEL_HW * VIDEO_BUFFER_HEIGHT*4]__attribute((section("NC_BSS"),aligned(8)));  //8 bytes aligned!;
00079 
00080 
00081 
00082 //Init LCD and touch
00083 void Init_lcd_touch()
00084 {
00085     Matrix matrix;
00086     Coordinate ScreenSample[3];
00087     myLCD.set_orientation(2);
00088     // myLCD.claim(stdout);      // send stdout to the LCD display
00089     //myLCD.claim(stderr);      // send stderr to the LCD display
00090     myLCD.background(backgroundcolor);    // set background to black
00091     myLCD.foreground(foregroundcolor);    // set chars to white
00092     myLCD.cls();
00093     myLCD.set_font((unsigned char*) Arial12x12);
00094     myLCD.locate(0,20);
00095     TP.TouchPanel_Calibrate();
00096 
00097     //  myLCD.set_orientation(0);
00098     // Display calibration values
00099     TP.GetCalibration(&matrix, &ScreenSample[0]);
00100     myLCD.cls();
00101     myLCD.locate(0,20);
00102     // read calibration results
00103     printf("Read calibration results.\n");
00104     printf("matrix.An = %d\n", matrix.An);
00105     printf("matrix.Bn = %d\n", matrix.Bn);
00106     printf("matrix.Cn = %d\n", matrix.Cn);
00107     printf("matrix.Dn = %d\n", matrix.Dn);
00108     printf("matrix.En = %d\n", matrix.En);
00109     printf("matrix.Fn = %d\n", matrix.Fn);
00110     printf("matrix.Di = %d\n", matrix.Divider);
00111     for (int i=0; i<3; i++)
00112         printf("sample x[%d] = %d\nsample y[%d] = %d\n", i, ScreenSample[i].x, i, ScreenSample[i].y);
00113     // Write calibration results
00114     printf("\nWrite calibration results...\n");
00115     TP.SetCalibration(&matrix, &ScreenSample[0]);
00116     printf("Done.\nTouch panel to start\n");
00117     while(TP._tp_irq);
00118 }
00119 
00120 int get_xy()
00121 {
00122     int x=0;
00123     if(!TP._tp_irq) {
00124         if (TP.Read_Ads7843()) {
00125             TP.getDisplayPoint() ;
00126             //myLCD.cls();
00127             //myLCD.locate(20,0);
00128             // TP.TP_DrawPoint(TP.display.x,TP.display.y, Blue);
00129             x=1;
00130         }
00131     }
00132     wait(0.1);
00133     return x;
00134 }
00135 
00136 void init_dis_nav()
00137 {
00138     dis_nav.indsize=158*158;
00139     dis_nav.secsize=157*158;
00140     dis_nav.autsize=158*156;
00141     dis_nav.hcsize=157*156;
00142     dis_nav.logosize=80*320;
00143     dis_nav.titlesize=60*320;
00144     myLCD.BMP_16(0,0,"/sd/gui/title.bmp",dis_nav.title);
00145     dis_nav.titlex=0;
00146     dis_nav.titley=0;
00147     myLCD.BMP_16(0,400,"/sd/gui/logo.bmp",dis_nav.logo);
00148     dis_nav.logox=0;
00149     dis_nav.logoy=400;
00150     myLCD.BMP_16(0,81,"/sd/gui/hc.bmp",dis_nav.hc);
00151     dis_nav.hcx=0;
00152     dis_nav.hcy=81;
00153     dis_nav.hcw=157;
00154     dis_nav.hch=158;
00155     //myLCD.fillrect(161,81,319,237,White);
00156     myLCD.BMP_16(dis_nav.autx=161,dis_nav.auty=81,"/sd/gui/auto.bmp",dis_nav.aut);
00157     dis_nav.autw=158;
00158     dis_nav.auth=156;
00159     //myLCD.fillrect(0,241,157,399,White);
00160     myLCD.BMP_16(dis_nav.secx=0,dis_nav.secy=241,"/sd/gui/secu.bmp",dis_nav.sec);
00161     dis_nav.secw=157;
00162     dis_nav.sech=158;
00163     //myLCD.fillrect(161,241,319,399,White);
00164     myLCD.BMP_16(dis_nav.indx=161,dis_nav.indy=241,"/sd/gui/indus.bmp",dis_nav.ind);
00165     dis_nav.indw=158;
00166     dis_nav.indh=158;
00167 }
00168 
00169 void init_gui()
00170 {
00171     init_dis_nav();
00172     myLCD.cls();
00173     myLCD.BMP_disp(dis_nav.titlex,dis_nav.titley,dis_nav.title,dis_nav.titlesize,0,60);
00174     myLCD.BMP_disp(dis_nav.logox,dis_nav.logoy,dis_nav.logo,dis_nav.logosize,0,80);
00175     myLCD.rect(0,60,319,80,Red);
00176     myLCD.rect(1,61,318,79,Red);
00177     myLCD.locate(4,65);
00178     // myLCD.fillrect(0,81,157,237,White);
00179     myLCD.BMP_disp(dis_nav.hcx,dis_nav.hcy,dis_nav.hc,dis_nav.hcsize,dis_nav.hcw,dis_nav.hch);
00180     //myLCD.fillrect(161,81,319,237,White);
00181     myLCD.BMP_disp(dis_nav.autx,dis_nav.auty,dis_nav.aut,dis_nav.autsize,dis_nav.autw,dis_nav.auth);
00182     //myLCD.fillrect(0,241,157,399,White);
00183     myLCD.BMP_disp(dis_nav.secx,dis_nav.secy,dis_nav.sec,dis_nav.secsize,dis_nav.secw,dis_nav.sech);
00184     //myLCD.fillrect(161,241,319,399,White);
00185     myLCD.BMP_disp(dis_nav.indx,dis_nav.indy,dis_nav.ind,dis_nav.indsize,dis_nav.indw,dis_nav.indh);
00186     myLCD.set_font((unsigned char*) Arial12x12);
00187     myLCD.printf("Select a menu");
00188     for(int i=158; i<160; i++) {
00189         myLCD.line(i,80,i,400,Blue);
00190     }
00191     for(int i=238; i<240; i++) {
00192         myLCD.line(0,i,319,i,Blue);
00193     }
00194 
00195 }
00196 
00197 
00198 void set_ind(int o_f,int speed)
00199 {
00200     uint8_t add[]= {0xe7,0xe7,0xe7,0xe7,0xe8};
00201     radio.stopListening();
00202     radio.openWritingPipe(add);
00203     wait_ms(2);
00204 
00205     int count=0;
00206     char c[20];
00207     sprintf(c,"NEO,1,%d,%d,1\n",o_f,speed);
00208     myLCD.fillrect(2,62,317,78,Black);
00209     myLCD.locate(4,65);
00210     myLCD.set_font((unsigned char*) Arial12x12);
00211     myLCD.printf("Writing %s",c);
00212     while (!radio.write( &c, 20 )) {
00213         myLCD.fillrect(2,62,317,78,Black);
00214         myLCD.locate(4,65);
00215         myLCD.set_font((unsigned char*) Arial12x12);
00216         myLCD.printf("Failed");
00217         count++;
00218         if(count>=10)
00219             break;
00220         wait(0.1);
00221     }
00222     wait_ms(2);
00223     radio.startListening();
00224     wait_ms(1);
00225 }
00226 
00227 void set_color(char r,char g,char b)
00228 {
00229     uint8_t add[]= {0xe7,0xe7,0xe7,0xe8,0xe8};
00230     radio.stopListening();
00231     radio.openWritingPipe(add);
00232     wait_ms(2);
00233 
00234     int count=0;
00235     char c[20];
00236     sprintf(c,"N,5,%d,%d,%d,%d,1\n",0x01,(r<<3),(g<<2),(b<<3));
00237     myLCD.fillrect(2,62,317,78,Black);
00238     myLCD.locate(4,65);
00239     myLCD.set_font((unsigned char*) Arial12x12);
00240     myLCD.printf("Writing %s",c);
00241     while (!radio.write( &c, 20 )) {
00242         myLCD.fillrect(2,62,317,78,Black);
00243         myLCD.locate(4,65);
00244         myLCD.set_font((unsigned char*) Arial12x12);
00245         myLCD.printf("Failed");
00246         count++;
00247         if(count>=10)
00248             break;
00249         wait(0.1);
00250     }
00251     wait_ms(2);
00252     radio.startListening();
00253     wait_ms(1);
00254 }
00255 
00256 void take_pic_jpg(int name)
00257 {
00258     led2=1;
00259     JPEG_Converter  encoder;
00260     JPEG_Converter::bitmap_buff_info_t  aBitmapData;
00261     size_t EncodeSize;
00262     FILE * wr_fp = NULL;
00263 
00264     aBitmapData.width           = PIXEL_HW;
00265     aBitmapData.height          = VIDEO_BUFFER_HEIGHT;
00266     aBitmapData.format          = JPEG_Converter::WR_RD_YCbCr422;   //YCbCr[0] & ARGB8888[1] is 4byte, not RGB565[2] is 2byte
00267     aBitmapData.buffer_address  = (void *)save_buff_addr;
00268     if (encoder.encode(&aBitmapData, JCUBuffer_OUTPUT, &EncodeSize) == JPEG_Converter::JPEG_CONV_OK) {
00269 
00270         char c[20];
00271         sprintf(c,"/sd/abc%d.jpg",name);
00272         wr_fp = fopen(c, "w");
00273         fwrite(JCUBuffer_OUTPUT, sizeof(char), EncodeSize, wr_fp);
00274         fclose(wr_fp);
00275         led2=0;
00276     }
00277 
00278 }
00279 
00280 unsigned short yuvtorgb(int y,int u,int v)
00281 {
00282     unsigned short rgb=0;
00283     int r = y + (1.402 * (v-128));
00284     int g = y - (0.34414 * (u-128)) - (0.71414 * (v-128));
00285     int b = y + (1.772* (u-128));
00286     if(r<0)r=0;
00287     else if(r>255)r=255;
00288     if(g<0)g=0;
00289     else if(g>255)g=255;
00290     if(b<0)b=0;
00291     else if(b>255)b=255;
00292     r=r>>3;
00293     g=g>>2;
00294     b=b>>3;
00295     rgb=(r<<11)|(g<<5)|b;
00296     return rgb;
00297 
00298 }
00299 void take_picture()
00300 {
00301     // uint8_t col_buf[PIXEL_HW * VIDEO_BUFFER_HEIGHT*4];
00302     pos[2]=pos[1]=pos[0]=pos[3]=0;
00303     DisplayBase::graphics_error_t error;
00304     in_pic=1;
00305     led1 = 1;
00306 
00307     if (write_buff_addr == FrameBuffer_Video_A) {
00308         write_buff_addr = FrameBuffer_Video_B;
00309         save_buff_addr  = FrameBuffer_Video_A;
00310     } else {
00311         write_buff_addr = FrameBuffer_Video_A;
00312         save_buff_addr  = FrameBuffer_Video_B;
00313     }
00314 
00315     /* Change write buffer */
00316     error = Display.Video_Write_Change(
00317                 VIDEO_INPUT_CH,
00318                 write_buff_addr,
00319                 VIDEO_BUFFER_STRIDE);
00320     if (error != DisplayBase::GRAPHICS_OK) {
00321         uart.printf("Line %d, error %d\n", __LINE__, error);
00322         while (1);
00323     }
00324     /* Wait 2 Vfield(Top or bottom field) */
00325 
00326     WaitVfield(2);
00327 
00328     myLCD.WindowMax();
00329     int j=0,k=0;
00330     for(int i=0; i<VIDEO_BUFFER_STRIDE * VIDEO_BUFFER_HEIGHT; i++) {
00331         unsigned short rgb1=0,rgb2=0;
00332         int yb=save_buff_addr[i];
00333         int v=save_buff_addr[i+1];
00334         int ya=save_buff_addr[i+2];
00335         int u=save_buff_addr[i+3];
00336         i=i+3;
00337         rgb1=yuvtorgb(ya,u,v);
00338         rgb2=yuvtorgb(yb,u,v);
00339         col_buf[j][k++]=rgb2;
00340         col_buf[j][k++]=rgb1;
00341         if(k==320) {
00342             j++;
00343             k=0;
00344         }
00345     }
00346 
00347     for(int i=0; i<480; i++) {
00348         for(int j=0; j<320; j++) {
00349             for(int k=3; k>=0; k--) {
00350                 myLCD.wr_gram(col_buf[i][k+j]);
00351             }
00352             j=j+3;
00353         }
00354     }
00355 
00356     led1=0;
00357 
00358     take_pic_jpg(10);
00359 
00360 }
00361 
00362 
00363 void navigate(int x,int y)
00364 {
00365     if(in_pic==1) {
00366         in_pic=0;
00367         myLCD.cls();
00368         myLCD.BMP_disp(dis_nav.titlex,dis_nav.titley,dis_nav.title,dis_nav.titlesize,0,60);
00369         myLCD.BMP_disp(dis_nav.logox,dis_nav.logoy,dis_nav.logo,dis_nav.logosize,0,80);
00370         myLCD.rect(0,60,319,80,Red);
00371         myLCD.rect(1,61,318,79,Red);
00372         myLCD.BMP_disp(dis_nav.indx,dis_nav.indy,dis_nav.ind,dis_nav.indsize,dis_nav.indw,dis_nav.indh);
00373         myLCD.BMP_disp(dis_nav.secx,dis_nav.secy,dis_nav.sec,dis_nav.secsize,dis_nav.secw,dis_nav.sech);
00374         myLCD.BMP_disp(dis_nav.autx,dis_nav.auty,dis_nav.aut,dis_nav.autsize,dis_nav.autw,dis_nav.auth);
00375         myLCD.BMP_disp(dis_nav.hcx,dis_nav.hcy,dis_nav.hc,dis_nav.hcsize,dis_nav.hcw,dis_nav.hch);
00376         pos[0]=pos[1]=pos[2]=pos[3]=0;
00377         return;
00378     }
00379     if(y>85 && y<235) {
00380         if(x<155) { //Healthcare Navigation
00381             if(pos[0]==0) {
00382                 myLCD.fillrect(0,81,157,237,Black);
00383                 myLCD.BMP_16(2,82,"/sd/gui/heart.bmp");
00384                 myLCD.BMP_16(2,170,"/sd/gui/temp.bmp");
00385                 myLCD.BMP_16(58,136,"/sd/gui/b_but.bmp");
00386                 myLCD.set_font((unsigned char*) Arial28x28);
00387                 myLCD.foreground(Red);
00388                 //myLCD.set_font_zoom(2,2);
00389                 // myLCD.rect(96,96,144,128,Red);
00390                 //  myLCD.locate(100,100);
00391                 // myLCD.printf("92");
00392                 // myLCD.locate(78,194);
00393 //                myLCD.printf("32");
00394 //                // myLCD.rect(76,188,152,225,Red);
00395 //                myLCD.circle(116,197,3,Red);
00396 //                myLCD.locate(124,194);
00397 //                myLCD.printf("C");
00398                 pos[0]=1;
00399             } else {
00400                 if(x>58&& x<108 && y>136 && y<176) {
00401                     myLCD.BMP_disp(dis_nav.hcx,dis_nav.hcy,dis_nav.hc,dis_nav.hcsize,dis_nav.hcw,dis_nav.hch);
00402                     pos[0]=0;
00403                 }
00404             }
00405 
00406         } else {
00407             if(pos[1]==0) { //Automation Navigation
00408                 myLCD.fillrect(161,81,319,237,Black);
00409                 myLCD.BMP_16(280,88,"/sd/gui/b_but.bmp");
00410                 myLCD.BMP_16(207,82,"/sd/gui/bulb.bmp");
00411                 myLCD.circle(190,105,15,White);
00412                 myLCD.fillcircle(190,105,13,prev_col);
00413                 int count=0;
00414                 for(int i=0; i<3; i++) {
00415                     for(int j=0; j<5; j++) {
00416                         int a=164+(j*30);
00417                         int b=138+(i*30);
00418                         myLCD.fillrect(a,b,a+30,b+30,colors[count++]);
00419                     }
00420                 }
00421                 pos[1]=1;
00422             } else {
00423                 if(x>275 && x<319 && y>84 &&y<130) {
00424                     myLCD.BMP_disp(dis_nav.autx,dis_nav.auty,dis_nav.aut,dis_nav.autsize,dis_nav.autw,dis_nav.auth);
00425                     pos[1]=0;
00426                 } else if(x>164 && x<319 && y>138 && y<236) {
00427                     int a=(x-164)/30;
00428                     int b=(y-138)/30;
00429                     int c=a+(b*5);
00430                     myLCD.fillcircle(190,105,13,colors[c]);
00431                     char r=(char)((colors[c]>>11)&0x1f);
00432                     char g=(char)((colors[c]>>5)&0x3f);
00433                     char bl=(char)((colors[c])&0x1f);
00434                     set_color(r,g,bl);
00435                     prev_col=colors[c];
00436 
00437                 }
00438 
00439             }
00440         }
00441     } else if(y>238 && y<400) {
00442         if(x<155) { //Security Navigation
00443             if(pos[2]==0) {
00444                 myLCD.fillrect(dis_nav.secx,dis_nav.secy,dis_nav.secw+dis_nav.secx,dis_nav.sech+dis_nav.secy,Black);
00445                 myLCD.BMP_16(10,245,"/sd/gui/d_close.bmp");
00446                 myLCD.BMP_16(113,245,"/sd/gui/b_but.bmp");
00447                 myLCD.rect(10,365,35,390,White);
00448                 myLCD.rect(11,366,34,389,White);
00449                 myLCD.locate(45,365);
00450                 myLCD.set_font((unsigned char*) Arial24x23);
00451                 myLCD.printf("Camera");
00452                 pos[2]=1;
00453             } else {
00454                 if(x>9 && y >364 && x<36 && y<391) {
00455                     if(cam_sel==0) {
00456                         myLCD.fillrect(12,367,33,388,Blue);
00457                         cam_sel=1;
00458                     } else {
00459                         myLCD.fillrect(12,367,33,388,Black);
00460                         cam_sel=0;
00461                     }
00462                 } else if(x>112 && y>244 && x<154 && y<286) {
00463                     myLCD.BMP_disp(dis_nav.secx,dis_nav.secy,dis_nav.sec,dis_nav.secsize,dis_nav.secw,dis_nav.sech);
00464                     pos[2]=0;
00465                 }
00466             }
00467 
00468 
00469         } else { // Industry
00470             if(pos[3]==0) {
00471                 myLCD.fillrect(dis_nav.indx,dis_nav.indy,dis_nav.indw+dis_nav.indx,dis_nav.indh+dis_nav.indy,Black);
00472                 myLCD.BMP_16(278,245,"/sd/gui/b_but.bmp");
00473                 myLCD.BMP_16(200,250,"/sd/gui/blower.bmp");
00474                 myLCD.BMP_16(163,345,"/sd/gui/minus.bmp");
00475                 if(ind_of==0)
00476                     myLCD.BMP_16(214,335,"/sd/gui/b_p_off.bmp");
00477                 else
00478                     myLCD.BMP_16(214,335,"/sd/gui/b_p_on.bmp");
00479                 myLCD.BMP_16(266,345,"/sd/gui/plus.bmp");
00480                 myLCD.locate(170,270);
00481                 myLCD.set_font((unsigned char*) Arial28x28);
00482                 myLCD.printf("%d",ind_speed);
00483                 pos[3]=1;
00484             } else {
00485                 if(x>=266 && y>=345 && x<=316 && y<=395) {
00486                     ind_speed++;
00487                     if(ind_speed>9)
00488                         ind_speed=9;
00489 
00490                     set_ind(ind_of,ind_speed);
00491                     myLCD.locate(170,270);
00492                     myLCD.set_font((unsigned char*) Arial28x28);
00493                     myLCD.printf("%d",ind_speed);
00494                 } else if(x>=163 && y>=345 && x<=213 && y<=395) {
00495                     ind_speed--;
00496                     if(ind_speed<0)
00497                         ind_speed=0;
00498                     set_ind(ind_of,ind_speed);
00499                     myLCD.locate(170,270);
00500                     myLCD.set_font((unsigned char*) Arial28x28);
00501                     myLCD.printf("%d",ind_speed);
00502                 } else if(x>=214 && y>=335 && x<=264 && y<=385) {
00503                     if(ind_of==0) {
00504                         myLCD.BMP_16(214,335,"/sd/gui/b_p_on.bmp");
00505                         ind_of=1;
00506                         set_ind(ind_of,ind_speed);
00507                     } else {
00508                         myLCD.BMP_16(214,335,"/sd/gui/b_p_off.bmp");
00509                         ind_of=0;
00510                         set_ind(ind_of,ind_speed);
00511                     }
00512                 } else if(x>=278 && y>=245 && x<=318 && y<=285) {
00513 
00514                     myLCD.BMP_disp(dis_nav.indx,dis_nav.indy,dis_nav.ind,dis_nav.indsize,dis_nav.indw,dis_nav.indh);
00515                     pos[3]=0;
00516                 }
00517             }
00518 
00519         }
00520     } else if(y>400) {
00521         myLCD.BMP_disp(dis_nav.indx,dis_nav.indy,dis_nav.ind,dis_nav.indsize,dis_nav.indw,dis_nav.indh);
00522         myLCD.BMP_disp(dis_nav.secx,dis_nav.secy,dis_nav.sec,dis_nav.secsize,dis_nav.secw,dis_nav.sech);
00523         myLCD.BMP_disp(dis_nav.autx,dis_nav.auty,dis_nav.aut,dis_nav.autsize,dis_nav.autw,dis_nav.auth);
00524         myLCD.BMP_disp(dis_nav.hcx,dis_nav.hcy,dis_nav.hc,dis_nav.hcsize,dis_nav.hcw,dis_nav.hch);
00525         pos[0]=pos[1]=pos[2]=pos[3]=0;
00526     }
00527     wait(0.1);
00528 }
00529 
00530 void init_radio()
00531 {
00532     uint8_t hb[]= {0xe7,0xe7,0xe7,0xe8,0xe9};
00533     uint8_t sec[]= {0xe8,0xe7,0xe7,0xe8,0xe9};
00534     radio.begin();
00535     radio.setAutoAck(1);
00536     radio.setChannel(100);
00537     radio.setDataRate(RF24_1MBPS);
00538     radio.enableAckPayload();               // Allow optional ack payloads
00539     radio.setRetries(15, 15);
00540     radio.setPALevel(RF24_PA_MAX);
00541     radio.enableDynamicPayloads();
00542     radio.openReadingPipe(1,hb);
00543     radio.openReadingPipe(2,sec);
00544     radio.startListening();
00545 
00546 }
00547 
00548 void cli_decode(char *c)
00549 {
00550     int count=0;
00551     string s[10];
00552     char c1[20];
00553     int s_count=0;
00554     for(int i=0; i<20; i++) {
00555         if(c[i]=='\n')
00556             break;
00557         if(c[i]==',') {
00558             s_count++;
00559             continue;
00560         }
00561         s[s_count]+=c[i];
00562     }
00563 
00564     if(s[0]!="NEO"&&s[0]!="N")
00565         return;
00566     myLCD.fillrect(2,62,317,78,Black);
00567     myLCD.locate(4,65);
00568     myLCD.set_font((unsigned char*) Arial12x12);
00569     myLCD.printf("Writing %s",c);
00570     if(s[1]=="1") {
00571         sprintf(c1,"%s,%s,%s,%s,1\n",s[0].c_str(),s[1].c_str(),s[2].c_str(),s[3].c_str());
00572         uint8_t add[]= {0xe7,0xe7,0xe7,0xe7,0xe8};
00573         radio.stopListening();
00574         radio.openWritingPipe(add);
00575         wait_ms(2);
00576         while (!radio.write( &c1, 20 )) {
00577             myLCD.fillrect(2,62,317,78,Black);
00578             myLCD.locate(4,65);
00579             myLCD.set_font((unsigned char*) Arial12x12);
00580             myLCD.printf("Failed");
00581             count++;
00582             if(count>=10)
00583                 break;
00584             wait(0.1);
00585         }
00586         wait_ms(2);
00587         radio.startListening();
00588         wait_ms(1);
00589 
00590     } else if(s[1]=="5") {
00591         sprintf(c1,"%s,%s,%s,%s,%s,%s,1\n",s[0].c_str(),s[1].c_str(),s[2].c_str(),s[3].c_str(),s[4].c_str(),s[5].c_str());
00592         uint8_t add[]= {0xe7,0xe7,0xe7,0xe8,0xe8};
00593         radio.stopListening();
00594         radio.openWritingPipe(add);
00595         wait_ms(2);
00596         int count=0;
00597         while (!radio.write( &c1, 20 )) {
00598             myLCD.fillrect(2,62,317,78,Black);
00599             myLCD.locate(4,65);
00600             myLCD.set_font((unsigned char*) Arial12x12);
00601             myLCD.printf("Failed");
00602             count++;
00603             if(count>=10)
00604                 break;
00605             wait(0.1);
00606         }
00607         wait_ms(2);
00608         radio.startListening();
00609         wait_ms(1);
00610 
00611 
00612     }
00613 }
00614 
00615 void rf_decode(char *c)
00616 {
00617     string s[10];
00618     c[19]='\n';
00619 
00620     int s_count=0;
00621     for(int i=0; i<20; i++) {
00622         if(c[i]=='\n')
00623             break;
00624         if(c[i]==',') {
00625             s_count++;
00626             continue;
00627         }
00628         s[s_count]+=c[i];
00629     }
00630     if(s[0]!="NEO")
00631         return;
00632     char send_cli[20];
00633     sprintf(send_cli,"%s,%s,%s,%s,%s\n",s[0].c_str(),s[1].c_str(),s[2].c_str(),s[3].c_str(),"1");
00634     if(client.is_connected()==true) {
00635         client.send(send_cli,strlen(send_cli));
00636     }
00637 
00638     if(s[1]=="2") {
00639 
00640         if(pos[0]==1) {
00641             myLCD.set_font((unsigned char*) Arial28x28);
00642             myLCD.locate(86,100);
00643             if(atoi(s[2].c_str())<100)
00644                 myLCD.printf("0%s",s[2].c_str());
00645             else
00646                 myLCD.printf("%s",s[2].c_str());
00647         }
00648     } else if(s[1]=="3") {
00649         if(pos[2]==1) {
00650             if(s[2]=="1") {
00651                 myLCD.BMP_16(10,245,"/sd/gui/d_open.bmp");
00652                 if(cam_sel==1)
00653                     take_picture();
00654             } else
00655                 myLCD.BMP_16(10,245,"/sd/gui/d_close.bmp");
00656         }
00657     }
00658 
00659 }
00660 
00661 
00662 void init_internet()
00663 {
00664     network.init("192.168.0.100","255.255.255.0","192.168.0.254"); //Use DHCP
00665     network.connect();
00666     myLCD.fillrect(2,62,317,78,Black);
00667     myLCD.locate(4,65);
00668     myLCD.set_font((unsigned char*) Arial12x12);
00669     myLCD.printf("IP Address is %s\n", network.getIPAddress());
00670 
00671 }
00672 
00673 void init_fs()
00674 {
00675     char indexPage[256];
00676     sprintf(indexPage,"<HTML><HEAD><META content=\"text/html\" http-equiv=Content-Type><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" /> </HEAD><BODY><img src=\"abc10.jpg\" alt=\"Smiley face\" height=\"480\" width=\"320\"></BODY></HTML>\r\n\r\n");
00677     FILE *fp;
00678     fp = fopen("/sd/index.htm", "w");
00679     fwrite(indexPage, sizeof(char), strlen(indexPage), fp);
00680     fclose(fp);
00681 }
00682 
00683 
00684 
00685 
00686 void init_m_connect()
00687 {
00688     if(rf_server.bind(10101)<0) {
00689         myLCD.fillrect(2,62,317,78,Black);
00690         myLCD.locate(4,65);
00691         myLCD.set_font((unsigned char*) Arial12x12);
00692         myLCD.printf("Error in RF Server%s\n", network.getIPAddress());
00693         while(1);
00694     }
00695     if(rf_server.listen(1)<0) {
00696         myLCD.fillrect(2,62,317,78,Black);
00697         myLCD.locate(4,65);
00698         myLCD.set_font((unsigned char*) Arial12x12);
00699         myLCD.printf("Failed to listen", network.getIPAddress());
00700         while(1);
00701     }
00702     rf_server.set_blocking(false,100);
00703 
00704 }
00705 
00706 void poll_rfserver()
00707 {
00708     char a_buf[256];
00709     if(client.is_connected()==false) {
00710         led3=0;
00711         if(rf_server.accept(client)<0) {
00712             return;
00713         }
00714     } else {
00715 
00716         int len=0;
00717         led3=1;
00718         client.set_blocking(false,100);
00719         if((len=client.receive(a_buf,256))>0) {
00720             a_buf[len+1]='\0';
00721             a_buf[len]='\n';
00722 
00723             myLCD.fillrect(2,62,317,78,Black);
00724             myLCD.locate(4,65);
00725             myLCD.set_font((unsigned char*) Arial12x12);
00726             myLCD.printf("Received from client %s", a_buf);
00727             cli_decode(a_buf);
00728         }
00729     }
00730 
00731 }
00732 
00733 
00734 int main()
00735 {
00736     uart.baud (115200);
00737     Init_lcd_touch();
00738     init_gui();
00739     pos[0]=pos[1]=pos[2]=pos[3]=0;
00740     init_radio();
00741     init_camera();
00742     init_internet();
00743     init_fs();
00744     HTTPFsRequestHandler::mount("/sd/", "/");
00745     svr.addHandler<HTTPFsRequestHandler>("/");
00746     if (!svr.start(80,&network)) {
00747         myLCD.fillrect(2,62,317,78,Black);
00748         myLCD.locate(4,65);
00749         myLCD.set_font((unsigned char*) Arial12x12);
00750         myLCD.printf("Error in http server start", network.getIPAddress());
00751         while(1);
00752     }
00753     init_m_connect();
00754     char c[20];
00755     while(1) {
00756         if(network.getIPAddress()==NULL) {
00757             init_internet();
00758             if (!svr.start(80,&network)) {
00759                 myLCD.fillrect(2,62,317,78,Black);
00760                 myLCD.locate(4,65);
00761                 myLCD.set_font((unsigned char*) Arial12x12);
00762                 myLCD.printf("Error in http server start", network.getIPAddress());
00763                 while(1);
00764             }
00765             init_m_connect();
00766 
00767         }
00768         svr.poll();
00769         poll_rfserver();
00770         if(get_xy()==1) {
00771             navigate(TP.display.x,TP.display.y);
00772         }
00773         if(radio.available()) {
00774             while(radio.available()) {
00775                 radio.read(&c,20);
00776                 c[19]='\0';
00777                 if(in_pic!=1) {
00778                     myLCD.fillrect(2,62,317,78,Black);
00779                     myLCD.locate(4,65);
00780                     myLCD.set_font((unsigned char*) Arial12x12);
00781                     myLCD.printf("Reading %s",c);
00782                 }
00783                 rf_decode(c);
00784             }
00785         }
00786         temp_count++;
00787         if(temp_count>=10) {
00788             temp_count=0;
00789             char c[20];
00790             float tem=temp.read()*3.3*100;
00791             sprintf(c,"NEO,5,%2.0f,0,1\n",tem);
00792             if(client.is_connected()==true) {
00793                 client.send(c,strlen(c));
00794             }
00795             if(pos[0]==1 && in_pic!=1) {
00796                 myLCD.set_font((unsigned char*) Arial28x28);
00797 
00798                 myLCD.locate(78,194);
00799                 myLCD.printf("%2.0f",tem);
00800                 // myLCD.rect(76,188,152,225,Red);
00801                 myLCD.circle(116,197,3,Red);
00802                 myLCD.locate(124,194);
00803                 myLCD.printf("C");
00804                 pos[0]=1;
00805             }
00806         }
00807     }
00808 }