Gps
Dependencies: mbed
Fork of GPS_System_with_Google_Maps by
Diff: main.cpp
- Revision:
- 6:8cc48b05d20e
- Parent:
- 4:6ed9c8bb82c3
- Child:
- 7:73d911fc2bfa
diff -r c4c66c630011 -r 8cc48b05d20e main.cpp --- a/main.cpp Fri Dec 14 15:40:21 2012 +0000 +++ b/main.cpp Wed Jan 04 15:52:24 2017 +0000 @@ -1,224 +1,22 @@ #include "mbed.h" -#include "WiflyInterface.h" -#include "NokiaLCD.h" -#include "picojpeg.h" -#include "DebounceIn.h" #include "GPS.h" -#include <vector> - -#define DEFAULTZOOM 15 - -/* wifly interface: -* - p13 and p14 are for the serial communication -* - p28 is for the reset pin -* - p27 is for the connection status -* - 5th field is the ssid of the network -* - 6th field is the password -* - WPA is the security -*/ - -WiflyInterface wifly(p13, p14, p28, p27, "username", "password", WPA); -Serial pc(USBTX,USBRX); -LocalFileSystem local("local");// Create the local filesystem under the name "local" -GPS gps(p9, p10); -DebounceIn ZoomIn(p18); -DebounceIn Refresh(p19); -DebounceIn ZoomOut(p20); -FILE *jpegfile; -int jpeg_filesize = 0; -int jpeg_filepos = 0; -NokiaLCD lcd(p5, p7, p8, p11, NokiaLCD::LCD6610); -int zoom = DEFAULTZOOM; - - -unsigned char pjpeg_need_bytes_callback(unsigned char* pBuf, unsigned char buf_size, unsigned char *pBytes_actually_read, void *pCallback_data) -{ - unsigned int n = min((unsigned int)(jpeg_filesize - jpeg_filepos), (unsigned int)buf_size); - if (n && (fread(pBuf, 1, n, jpegfile) != n)) - return PJPG_STREAM_READ_ERROR; - *pBytes_actually_read = (unsigned char)(n); - jpeg_filepos += n; - return 0; -} - -void ReadJPEGFromFile(const char *filename, NokiaLCD *lcd) -{ - pjpeg_image_info_t imageInfo; - jpegfile = fopen(filename,"rb"); - if(!jpegfile) { - pc.printf("File not Found: %s\n\r",filename); - } - fseek(jpegfile, 0, SEEK_END); - jpeg_filesize = ftell(jpegfile); - jpeg_filepos = 0; - fseek(jpegfile, 0, SEEK_SET); - int status = pjpeg_decode_init(&imageInfo, pjpeg_need_bytes_callback, NULL); - //const unsigned int row_pitch = imageInfo.m_width * imageInfo.m_comps; - int mcu_x = 0; - int mcu_y = 0; - - for ( ; ; ) { - status = pjpeg_decode_mcu(); - - if (status) { - if (status != PJPG_NO_MORE_BLOCKS) { - //pc.printf("pjpeg_decode_mcu() failed with status %u\n", status); - fclose(jpegfile); - return; - } - - break; - } - - if (mcu_y >= imageInfo.m_MCUSPerCol) { - fclose(jpegfile); - return; - } - - // Copy MCU's pixel blocks into the destination bitmap. - - for (int y = 0; y < imageInfo.m_MCUHeight; y += 8) { - const int by_limit = min(8, imageInfo.m_height - (mcu_y * imageInfo.m_MCUHeight + y)); - for (int x = 0; x < imageInfo.m_MCUWidth; x += 8) { - - unsigned int src_ofs = (x * 8U) + (y * 16U); - const unsigned char *pSrcR = imageInfo.m_pMCUBufR + src_ofs; - const unsigned char *pSrcG = imageInfo.m_pMCUBufG + src_ofs; - const unsigned char *pSrcB = imageInfo.m_pMCUBufB + src_ofs; - - const int bx_limit = min(8, imageInfo.m_width - (mcu_x * imageInfo.m_MCUWidth + x)); +Serial pc(A4, SERIAL_RX); - if (imageInfo.m_scanType == PJPG_GRAYSCALE) { - for (int by = 0; by < by_limit; by++) { - for (int bx = 0; bx < bx_limit; bx++) { - unsigned int color = ((*pSrcR++) << 16); - (*lcd).pixel(mcu_x*imageInfo.m_MCUWidth+x+bx,mcu_y*imageInfo.m_MCUHeight+y+by,color); - } - pSrcR += (8 - bx_limit); - } - } else { - for (int by = 0; by < by_limit; by++) { - for (int bx = 0; bx < bx_limit; bx++) { - unsigned int color = ((*pSrcR++) << 16) | ((*pSrcG++) << 8) | (*pSrcB++); - (*lcd).pixel((130-imageInfo.m_width)/2+mcu_x*imageInfo.m_MCUWidth+x+bx,(130-imageInfo.m_height)/2+mcu_y*imageInfo.m_MCUHeight+y+by,color); - } - - pSrcR += (8 - bx_limit); - pSrcG += (8 - bx_limit); - pSrcB += (8 - bx_limit); - - } - } - } - } - - mcu_x++; - if (mcu_x == imageInfo.m_MCUSPerRow) { - mcu_x = 0; - mcu_y++; - } - } - - fclose(jpegfile); -} - -void wiflyConnect() -{ - wifly.disconnect(); - wifly.init(); - while (!wifly.connect()) { - pc.printf("waiting\n\r"); - }// join the network -} - -void getNewImage(float latitude, float longitude, int zoom) -{ - TCPSocketConnection sock; - sock.connect("maps.googleapis.com", 80); - int ret = 0; - int total_bytes = 0; - char http_cmd[300]; - sprintf(http_cmd, "GET /maps/api/staticmap?center=%f%%2C%f&zoom=%d&size=130x130&sensor=true&format=jpg-baseline HTTP/1.0\n\n",latitude,longitude,zoom); - sock.send_all(http_cmd, sizeof(http_cmd)-1); - - sock.set_blocking(false,10000); - char buffer[300]; - FILE* pFile; - pc.printf("%s\n\r",http_cmd); - pFile = fopen ("/local/image.jpg","w"); - pc.printf("Opening File\n\r"); - bool found_start = false; - bool found_end = false; - while (true) { - ret = sock.receive(buffer, sizeof(buffer)-1); - if (ret <= 0) { - pc.printf("Ret < 0. Break. \n\r"); - //wiflyConnect(); - break; - } - buffer[ret] = '\0'; - total_bytes += ret; - pc.printf("Received %d chars from server, total %d: %s\n\r", ret,total_bytes, buffer); - if(found_start) { - for(int i=1; i<ret; i++) { - if(buffer[i-1]==0xFF && buffer[i]==0xD9) { //jpg file end at FFD9 - pc.printf("found end. \n\r"); - fwrite(buffer,1,i+1,pFile); - found_end = true; - break; - } - } - if(!found_end) - fwrite(buffer,1,ret,pFile); - else { - pc.printf("Found Start and End. Break. \n\r"); - break; - } - - } else { - for(int i=1; i<ret; i++) { - if(buffer[i-1]==0xFF && buffer[i]==0xD8) { //jpg file starts from FFD8 - pc.printf("found start.\n\r"); - fwrite(&buffer[i-1],1,ret-i+1,pFile); - found_start = true; - break; - } - } - } - } - - fclose (pFile); - pc.printf("Closing File\n\r"); - sock.close(); - lcd.cls(); - ReadJPEGFromFile("/local/IMAGE.JPG", &lcd); -} +GPS ark(PA_9, PA_10); +DigitalOut myled(LED1); int main() { - pc.printf("Hello\n\r"); - wifly.init(); //Use DHCP - while (!wifly.connect()) { - pc.printf("waiting\n\r"); - }// join the network - pc.printf("IP Address is %s\n", wifly.getIPAddress()); - - float longitude = 0.0; - float latitude = 0.0; while(1) { - if(gps.sample()) { - // pc.printf("I'm at %f, %f\n", gps.longitude, gps.latitude); - longitude = gps.longitude; - latitude = gps.latitude; + if( ark.sample() == 1) { + myled=0; + float latitude = ark.latitude; + float longitude = ark.longitude; + float utc =50000; + pc.printf("latitude: %0.2f, longitude: %0.2f, utc: %f\r\n",latitude,longitude,utc); + wait(1); } else { - pc.printf("Oh Dear! No lock :(\n"); + myled=1; } - if(Refresh) - getNewImage(latitude,longitude,zoom); - else if(ZoomIn) - getNewImage(latitude,longitude,++zoom); - else if(ZoomOut) - getNewImage(latitude,longitude,--zoom); } - wifly.disconnect(); } \ No newline at end of file