| | |
| | | #include <cstring> |
| | | #include <pthread.h> |
| | | #include <semaphore.h> |
| | | #include <cmath> |
| | | #include "platform.h" |
| | | #include "../jni_log.h" |
| | | #include "../common/net.h" |
| | |
| | | uint32_t login : 1; |
| | | uint32_t downloadRtk : 1; |
| | | } platformStatus; |
| | | |
| | | |
| | | |
| | | struct platformSocket exceptSocket, currSocket; |
| | | static uint32_t eventMask; |
| | |
| | | } |
| | | MA_RtkPlatformLogin(data[0]); |
| | | } |
| | | if (events & GPS_UPDATE_EVT) { |
| | | DEBUG("GPS_UPDATE_EVT"); |
| | | const gpsStatus_t *gps = (gpsStatus_t *)data; |
| | | struct gpsBrief brief; |
| | | |
| | | brief.qf = gps->gps_status; |
| | | brief.latitude = gps->latitude; |
| | | brief.longitude = gps->longitude; |
| | | brief.altitude = gps->altitude; |
| | | brief.speed = gps->speed; |
| | | brief.sat_num = gps->satNum; |
| | | sprintf(brief.utc, "%04d%02d%02d%02d%02d%02d.%02d", 2000 + gps->YY, gps->MM, gps->DD, gps->hh, gps->mm, gps->ss, gps->mss); |
| | | |
| | | MA_SendGpsBrief(&brief); |
| | | RequestRtkDownload(gps, 1); |
| | | } |
| | | if (events & RTK_UPDATE_EVT) { |
| | | DEBUG("RTK_UPDATE_EVT"); |
| | | const rtk_info *rtk = (rtk_info *)data; |
| | | struct rtkBrief brief; |
| | | |
| | | brief.qf = rtk->qf; |
| | | brief.coord_x = rtk->x; |
| | | brief.coord_y = rtk->y; |
| | | brief.heading = rtk->heading; |
| | | brief.pitch = rtk->pitch; |
| | | brief.roll = rtk->roll; |
| | | brief.coord_x_dir = 'N'; |
| | | brief.coord_y_dir = 'E'; |
| | | sprintf(brief.utc, "%04d%02d%02d%02d%02d%02d.%02d", 2000 + rtk->YY, rtk->MM, rtk->DD, rtk->hh, rtk->mm, rtk->ss, rtk->dss); |
| | | |
| | | MA_SendRtkBrief(&brief); |
| | | } |
| | | } |
| | | |
| | | static void *PlatformDataListenThread(void *p) { |
| | |
| | | requestPlatformSendRtk = true; |
| | | } |
| | | |
| | | void RequestRtkDownload(uint32_t latitude, uint32_t longitude, uint16_t altitude, |
| | | const uint8_t *bcd_time, uint16_t rtk_pkt_interval) |
| | | void RequestRtkDownload(const gpsStatus_t *gps, uint16_t rtk_pkt_interval) |
| | | { |
| | | if (requestPlatformSendRtk) { |
| | | DisplayText("请求下载RTK数据"); |
| | | if (requestPlatformSendRtk && gps->gps_status > 0) { |
| | | DEBUG("请求下载RTK数据"); |
| | | requestPlatformSendRtk = false; |
| | | |
| | | AppTimer_delete(RequestRtkNoResp); |
| | | AppTimer_add(RequestRtkNoResp, D_SEC(5)); |
| | | |
| | | uint32_t latitude = (uint32_t)(gps->latitude * 1000000); |
| | | uint32_t longitude = (uint32_t)(gps->longitude * 1000000); |
| | | int altitude = (int) fabs(gps->altitude); |
| | | |
| | | uint8_t bcd_time[6]; |
| | | |
| | | bcd_time[0] = ((gps->YY/10)<<4) + (gps->YY%10); |
| | | bcd_time[1] = ((gps->MM/10)<<4) + (gps->MM%10); |
| | | bcd_time[2] = ((gps->DD/10)<<4) + (gps->DD%10); |
| | | bcd_time[3] = ((gps->hh/10)<<4) + (gps->hh%10); |
| | | bcd_time[4] = ((gps->mm/10)<<4) + (gps->mm%10); |
| | | bcd_time[5] = ((gps->ss/10)<<4) + (gps->ss%10); |
| | | |
| | | SendRTKStart(latitude, longitude, altitude, bcd_time, rtk_pkt_interval); |
| | | } |
| | | } |