20230731_XiaoFuZi_emb/ZheDaXiaoFuZi/Src/Usr/Task/McuTaskPosition.c
Rjh913828050 3f425bfbd8 类型:修改
内容:将版本更新到最新
2023-10-09 09:01:31 +08:00

120 lines
4.4 KiB
C

#include "McuTaskPosition.h"
#include "McuWH-GN100Drv.h"
#include "McuTaskBlueTooth.h"
#include "BeiDouHtyDrv.h"
#include "ZthyToolDataTypeSwitch.h"
#include "McuTaskFlash.h"
#include <string.h>
#include <stdio.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;
static unsigned char gMcuTaskPositionBeiDouSerial = 0;
int McuTaskPositionInit(void)
{
return McuDrvWHGN100Init();
}
/* 获取北斗定位数据 */
int McuTaskPosition(void)
{
if (gMcuTaskPositionBlueToothSendFlag == 1 || gMcuTaskPositionBeiDouSendFlag == 1) {
McuTaskFlashWriteOpt("Position Join\r\n", strlen("Position Join\r\n"));
/* 获取北斗数据 */
if (0 == McuDrvWHGN100GetLatAndLon(&gLat, &gLatFlag, &gLon, &gLonFlag, &gClock)) {
gMcuTaskPositionSyncCount++;
} else {
McuTaskFlashWriteOpt("Position Get Data Err\r\n", strlen("Position Get Data Err\r\n"));
gMcuTaskPositionBlueToothSendFlag = 0;
return -1;
}
if (gMcuTaskPositionSyncCount >= 1) {
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);
McuTaskFlashWriteOpt("Position BlueTh Send\r\n", strlen("Position BlueTh Send\r\n"));
TaskBlueToothSendMessage(MCU_TASK_POSITION_SEND_MESSAGE_ID, &gMcuTaskPositionBlueToothSerial, gMcuTaskPositionBlueToothSendBuf, sizeof(gMcuTaskPositionBlueToothSendBuf));
gMcuTaskPositionBlueToothSerial++;
gMcuTaskPositionBlueToothSendFlag = 0;
}
if (gMcuTaskPositionBeiDouSendFlag == 1) {
unsigned char crc = 0;
int i = 0;
unsigned char BeiDouSend[70] = {0};
gMcuTaskPositionBeiDouSendFlag = 0;
/* 发送位置信号 */
crc = 0;
sprintf((char *)BeiDouSend, "Position 01 %03d %0.2f %0.2f", gMcuTaskPositionBeiDouSerial, gLat, gLon);
for (i = 0; i < strlen((char *)BeiDouSend); i++) {
crc ^= BeiDouSend[i];
}
sprintf((char *)&BeiDouSend[strlen((char *)BeiDouSend)], "%x", crc);
McuDrvBeiDouHtySendPacket(BeiDouSend, strlen((char *)BeiDouSend));
gMcuTaskPositionBeiDouSerial++;
gMcuTaskPositionBeiDouSerial = gMcuTaskPositionBeiDouSerial % 1000;
McuTaskFlashWriteOpt("Position BeiDou Send\r\n", strlen("Position BeiDou Send\r\n"));
}
/* 保存数据到Flash */
McuTaskFlashWritePosition(gLat, gLon);
}
return 0;
}
/* 蓝牙请求数据 */
void McuTaskPositionBlueToothAsk(void)
{
gMcuTaskPositionBlueToothSendFlag = 1;
}
/* 北斗请求数据 */
void McuTaskPositionBeiDouAsk(void)
{
gMcuTaskPositionBeiDouSendFlag = 1;
}
/* 获取数据请求状态 */
int McuTaskPositionAskStatus(void)
{
return ((gMcuTaskPositionBlueToothSendFlag * 2) | gMcuTaskPositionBeiDouSendFlag);
}