/*=========================================================================== This function format double num to AECHAR, 3 pos hold ===========================================================================*/ AECHAR* TS_FLT2SZ_3(AECHAR* szBuf, double val) { #if 1 double tmp = 0, tt = 0, min = 0; int d = 0, m = 0; int zero_pad = 0; char strZero[4]; AECHAR szZero[16]; if (szBuf == NULL) return NULL; tmp = FABS(val); if (FCMP_GE(tmp, 0.001)) { tt = FFLOOR(tmp); d = FLTTOINT(tt); m = FLTTOINT(FMUL(FSUB(tmp, tt), 10000.0)); m = (m % 10 >= 5) ? (m + 10) / 10 : m / 10; if (m > 0) { if (m < 100) //0.012 { zero_pad++; } if (m < 10) //0.001 { zero_pad++; } //补充后面的0 if (zero_pad > 0) { STRNCPY(strZero, "000", zero_pad); strZero[zero_pad] = 0; STRTOWSTR(strZero, szZero, 16); } } } else { d = 0; m = 0; } if (zero_pad > 0) WSPRINTF(szBuf, 32, L"%d.%s%d", d, szZero, m); else WSPRINTF(szBuf, 32, L"%d.%d", d, m); return szBuf; #else FLOATTOWSTR(val, szBuf, 32); #endif }
/*=========================================================================== ===========================================================================*/ static boolean SamplePosDet_InitApplet( CSamplePosDet *pMe ) { boolean bRet = TRUE; pMe->currentHandler = 0; // Load the GPS settings from the config file, if possible SamplePosDet_InitGPSSettings( pMe ); { Coordinate c1, c2; double dis = 0; char szDis[64]; AECHAR wcharbuf[32]; //shanghai 31.1774276, 121.5272106 c1.lat = 31.1774276; c1.lon = 121.5272106; //beijing 39.911954, 116.377817 c2.lat = 39.911954; c2.lon = 116.377817; //shenzhen 22.543847, 113.912316 c1.lat = 22.543847; c1.lon = 113.912316; dis = Track_Calc_Distance(c1.lat, c1.lon, c2.lat, c2.lon); MEMSET(szDis,0,sizeof(szDis)); FLOATTOWSTR(dis, wcharbuf, 32); WSTRTOSTR(wcharbuf,szDis, 64); DBGPRINTF("Track_cbOrientInfo dis:%s", szDis); //SamplePosDet_Printf( pMe, 5, 4, AEE_FONT_BOLD, IDF_ALIGN_LEFT|IDF_RECT_FILL, "%s m", szDis ); } return bRet; }
void Loc_Test_All(void) { Coordinate c1, c2; double dis = 0, th = 0; char szDis[64], szAzh[64]; AECHAR bufDis[32], bufAzh[32]; //DESTINATION //beijing 39.911954, 116.377817 c1.lat = 39.911954; c1.lon = 116.377817; //1 chengde 40.8493953666,118.0478839599 c2.lat = 40.8493953666; c2.lon = 118.0478839599; dis = Loc_Calc_Distance(c1.lat, c1.lon, c2.lat, c2.lon); th = Loc_Calc_Azimuth(c1.lat, c1.lon, c2.lat, c2.lon); MEMSET(szDis,0,sizeof(szDis)); FLOATTOWSTR(dis, bufDis, 32); WSTRTOSTR(bufDis,szDis, 64); MEMSET(szAzh,0,sizeof(szAzh)); FLOATTOWSTR(th, bufAzh, 32); WSTRTOSTR(bufAzh, szAzh, 64); DBGPRINTF("location_get 1 dis:%s azh:%s", szDis, szAzh); //2 shanghai 31.1774276, 121.5272106 //1076679.0804040465 c2.lat = 31.1774276; c2.lon = 121.5272106; dis = Loc_Calc_Distance(c1.lat, c1.lon, c2.lat, c2.lon); th = Loc_Calc_Azimuth(c1.lat, c1.lon, c2.lat, c2.lon); MEMSET(szDis,0,sizeof(szDis)); FLOATTOWSTR(dis, bufDis, 32); WSTRTOSTR(bufDis,szDis, 64); MEMSET(szAzh,0,sizeof(szAzh)); FLOATTOWSTR(th, bufAzh, 32); WSTRTOSTR(bufAzh, szAzh, 64); DBGPRINTF("location_get 2 dis:%s azh:%s", szDis, szAzh); //3 sjz 38.0422378880,114.4925141047 c2.lat = 38.0422378880; c2.lon = 114.4925141047; dis = Loc_Calc_Distance(c1.lat, c1.lon, c2.lat, c2.lon); th = Loc_Calc_Azimuth(c1.lat, c1.lon, c2.lat, c2.lon); MEMSET(szDis,0,sizeof(szDis)); FLOATTOWSTR(dis, bufDis, 32); WSTRTOSTR(bufDis,szDis, 64); MEMSET(szAzh,0,sizeof(szAzh)); FLOATTOWSTR(th, bufAzh, 32); WSTRTOSTR(bufAzh, szAzh, 64); DBGPRINTF("location_get 3 dis:%s azh:%s", szDis, szAzh); //4 zhangjiakou 40.3964667463,114.8377011418 c2.lat = 40.3964667463; c2.lon = 114.8377011418; dis = Loc_Calc_Distance(c1.lat, c1.lon, c2.lat, c2.lon); th = Loc_Calc_Azimuth(c1.lat, c1.lon, c2.lat, c2.lon); MEMSET(szDis,0,sizeof(szDis)); FLOATTOWSTR(dis, bufDis, 32); WSTRTOSTR(bufDis,szDis, 64); MEMSET(szAzh,0,sizeof(szAzh)); FLOATTOWSTR(th, bufAzh, 32); WSTRTOSTR(bufAzh, szAzh, 64); DBGPRINTF("location_get 4 dis:%s azh:%s", szDis, szAzh); }
/*=========================================================================== ===========================================================================*/ static void SamplePosDet_GetGPSInfo_Paint( CSamplePosDet *pMe, GetGPSInfo_PaintRegions rgn ) { struct _GetGPSInfo *pGetGPSInfo = SamplePosDet_GetScreenData( pMe ); if( rgn == GETGPSINFO_PAINT_ALL ) { IDISPLAY_ClearScreen( pMe->theApp.m_pIDisplay ); SamplePosDet_Printf( pMe, 0, 3, AEE_FONT_BOLD, IDF_ALIGN_LEFT, "GetGPSInfo" ); if( pGetGPSInfo->wMainMenuEntry == MAINMENU_ITEM_ONE_SHOT ) { SamplePosDet_Printf( pMe, 0, 3, AEE_FONT_BOLD, IDF_ALIGN_RIGHT, "One Shot" ); } else if( pGetGPSInfo->wMainMenuEntry == MAINMENU_ITEM_TRACK_LOCAL ) { SamplePosDet_Printf( pMe, 0, 3, AEE_FONT_BOLD, IDF_ALIGN_RIGHT, "Track L" ); } else if( pGetGPSInfo->wMainMenuEntry == MAINMENU_ITEM_TRACK_NETWORK ) { SamplePosDet_Printf( pMe, 0, 3, AEE_FONT_BOLD, IDF_ALIGN_RIGHT, "Track N" ); } else if( pGetGPSInfo->wMainMenuEntry == MAINMENU_ITEM_TRACK_AUTO ) { SamplePosDet_Printf( pMe, 0, 3, AEE_FONT_BOLD, IDF_ALIGN_RIGHT, "Track A" ); } } if( rgn == GETGPSINFO_PAINT_FIXCOUNT || rgn == GETGPSINFO_PAINT_ALL ) { SamplePosDet_Printf( pMe, 1, 4, AEE_FONT_NORMAL, IDF_ALIGN_LEFT, "Failed : %d", pGetGPSInfo->dwFail+pGetGPSInfo->dwTimeout ); SamplePosDet_Printf( pMe, 1, 4, AEE_FONT_NORMAL, IDF_ALIGN_RIGHT, "Timeout : %d", pGetGPSInfo->dwTimeout ); } if( rgn == GETGPSINFO_PAINT_FIXDATA || rgn == GETGPSINFO_PAINT_ALL ) { #define MAXTEXTLEN 22 AECHAR wcText[MAXTEXTLEN]; char latlonStr[MAXTEXTLEN]; SamplePosDet_Printf( pMe, 2, 4, AEE_FONT_NORMAL, IDF_ALIGN_LEFT, "Fixes : %d", pGetGPSInfo->dwFixNumber ); FLOATTOWSTR( pGetGPSInfo->theInfo.lat, wcText, MAXTEXTLEN * sizeof(AECHAR) ); WSTR_TO_STR( wcText, latlonStr, MAXTEXTLEN ); SamplePosDet_Printf( pMe, 3, 4, AEE_FONT_BOLD, IDF_ALIGN_CENTER|IDF_RECT_FILL, "%s d", latlonStr ); FLOATTOWSTR( pGetGPSInfo->theInfo.lon, wcText, MAXTEXTLEN * sizeof(AECHAR) ); WSTR_TO_STR( wcText, latlonStr, MAXTEXTLEN ); SamplePosDet_Printf( pMe, 4, 4, AEE_FONT_BOLD, IDF_ALIGN_CENTER|IDF_RECT_FILL, "%s d", latlonStr ); SamplePosDet_Printf( pMe, 5, 4, AEE_FONT_BOLD, IDF_ALIGN_RIGHT|IDF_RECT_FILL, "%d m", pGetGPSInfo->theInfo.height ); { double fv; fv = FASSIGN_INT( pGetGPSInfo->dwFixDuration ); if( pGetGPSInfo->dwFixNumber ) { fv = FDIV(fv, pGetGPSInfo->dwFixNumber); } FLOATTOWSTR( fv, wcText, MAXTEXTLEN * sizeof(AECHAR) ); WSTR_TO_STR( wcText, latlonStr, MAXTEXTLEN ); SamplePosDet_Printf( pMe, 6, 4, AEE_FONT_BOLD, IDF_ALIGN_RIGHT|IDF_RECT_FILL, "Avg %ss", latlonStr ); } } if( rgn == GETGPSINFO_PAINT_ERROR ) { SamplePosDet_Printf( pMe, 7, 4, AEE_FONT_BOLD, IDF_ALIGN_BOTTOM|IDF_ALIGN_CENTER|IDF_TEXT_INVERTED, "ABORTED 0x%x", pGetGPSInfo->theInfo.nErr ); } if( rgn == GETGPSINFO_PAINT_FIXANIM || rgn == GETGPSINFO_PAINT_ALL ) { SamplePosDet_Printf( pMe, 7, 4, AEE_FONT_NORMAL, IDF_ALIGN_BOTTOM|IDF_ALIGN_CENTER|IDF_RECT_FILL, ".....%d.....", pGetGPSInfo->wProgress ); } //if (FABS(pGetGPSInfo->theInfo.lat) > 0) { Coordinate c1, c2; double dis = 0; char szDis[64]; AECHAR wcharbuf[32]; //shanghai 31.1774276, 121.5272106 c1.lat = 31.1774276; c1.lon = 121.5272106; //beijing 39.911954, 116.377817 c2.lat = 39.911954; c2.lon = 116.377817; //shenzhen 22.543847, 113.912316 //c1.lat = 22.543847; //c1.lon = 113.912316; c1.lat = pGetGPSInfo->theInfo.lat; c1.lon = pGetGPSInfo->theInfo.lon; dis = Track_Calc_Distance(c1.lat, c1.lon, c2.lat, c2.lon); MEMSET(szDis,0,sizeof(szDis)); FLOATTOWSTR(dis, wcharbuf, 32); WSTRTOSTR(wcharbuf,szDis, 64); DBGPRINTF("Track_cbOrientInfo dis:%s", szDis); SamplePosDet_Printf( pMe, 7, 4, AEE_FONT_BOLD, IDF_ALIGN_LEFT|IDF_RECT_FILL, "%s m", szDis ); } { uint16 d1 = 0; uint8 d2 = 0; d1 = ((uint16)(pGetGPSInfo->theInfo.wAzimuth & (~0x3f)))>>6; d2 = (uint8)(pGetGPSInfo->theInfo.wAzimuth & 0x3f); SamplePosDet_Printf( pMe, 8, 4, AEE_FONT_BOLD, IDF_ALIGN_LEFT|IDF_RECT_FILL, "Head %d.%d", d1, d2 ); SamplePosDet_Printf( pMe, 9, 4, AEE_FONT_BOLD, IDF_ALIGN_LEFT|IDF_RECT_FILL, "Heading %d", pGetGPSInfo->theInfo.heading); } }