97 lines
3.3 KiB
C
97 lines
3.3 KiB
C
|
|
#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);
|
||
|
|
}
|