#include "McuTaskPosition.h" #include "McuWH-GN100Drv.h" #include "McuTaskBlueTooth.h" #include "BeiDouHtyDrv.h" #include "ZthyToolDataTypeSwitch.h" #include "McuTaskFlash.h" #define MCU_TASK_POSITION_SYNC_COUNT 14 // 表示14个北斗定位数据同步一次 /* 时间同步的计数 */ static unsigned char gMcuTaskPositionSyncCount = 0; /* 蓝牙发送标志位 */ static int gMcuTaskPositionBlueToothSendFlag = 0; static unsigned short gMcuTaskPositionBlueToothSerial = 0; static unsigned char gMcuTaskPositionBlueToothSendBuf[9] = {0}; static float gLat; static unsigned char gLatFlag; static float gLon; static unsigned char gLonFlag; static MCU_BSP_CLOCK gClock; static uint32_t gLat32; static uint32_t gLon32; /* 北斗发送标志位 */ static int gMcuTaskPositionBeiDouSendFlag = 0; int McuTaskPositionInit(void) { return McuDrvWHGN100Init(); } /* 获取北斗定位数据 */ int McuTaskPosition(void) { if (gMcuTaskPositionBlueToothSendFlag == 1 || gMcuTaskPositionBeiDouSendFlag == 1) { /* 获取北斗数据 */ if (0 == McuDrvWHGN100GetLatAndLon(&gLat, &gLatFlag, &gLon, &gLonFlag, &gClock)) { gMcuTaskPositionSyncCount++; } else { return -1; } if (gMcuTaskPositionSyncCount >= 14) { McuBspRtcSetTime(&gClock); gMcuTaskPositionSyncCount = 0; } if (gMcuTaskPositionBlueToothSendFlag == 1) { gMcuTaskPositionBlueToothSendBuf[0] = 1; if (gLatFlag != 0) { gLat = 0.0f - gLat; } if (gLonFlag != 0) { gLon = 0.0f - gLon; } ZthyToolFloatToUint32(gLat, &gLat32); ZthyToolFloatToUint32(gLon, &gLon32); gMcuTaskPositionBlueToothSendBuf[1] = (uint8_t)((gLat32 & 0xff000000) >> 24); gMcuTaskPositionBlueToothSendBuf[2] = (uint8_t)((gLat32 & 0x00ff0000) >> 16); gMcuTaskPositionBlueToothSendBuf[3] = (uint8_t)((gLat32 & 0x0000ff00) >> 8); gMcuTaskPositionBlueToothSendBuf[4] = (uint8_t)(gLat32 & 0x000000ff); gMcuTaskPositionBlueToothSendBuf[5] = (uint8_t)((gLon32 & 0xff000000) >> 24); gMcuTaskPositionBlueToothSendBuf[6] = (uint8_t)((gLon32 & 0x00ff0000) >> 16); gMcuTaskPositionBlueToothSendBuf[7] = (uint8_t)((gLon32 & 0x0000ff00) >> 8); gMcuTaskPositionBlueToothSendBuf[8] = (uint8_t)(gLon32 & 0x000000ff); TaskBlueToothSendMessage(MCU_TASK_POSITION_SEND_MESSAGE_ID, &gMcuTaskPositionBlueToothSerial, gMcuTaskPositionBlueToothSendBuf, sizeof(gMcuTaskPositionBlueToothSendBuf)); gMcuTaskPositionBlueToothSerial++; gMcuTaskPositionBlueToothSendFlag = 0; } if (gMcuTaskPositionBeiDouSendFlag == 1) { gMcuTaskPositionBeiDouSendFlag = 0; } /* 保存数据到Flash */ McuTaskFlashWritePosition(gLat, gLon); } return 0; } /* 蓝牙请求数据 */ void McuTaskPositionBlueToothAsk(void) { gMcuTaskPositionBlueToothSendFlag = 1; } /* 北斗请求数据 */ void McuTaskPositionBeiDouAsk(void) { gMcuTaskPositionBeiDouSendFlag = 1; } /* 获取数据请求状态 */ int McuTaskPositionAskStatus(void) { return ((gMcuTaskPositionBlueToothSendFlag * 2) | gMcuTaskPositionBeiDouSendFlag); }