2023-10-08 08:10:23 +00:00
|
|
|
#include "McuTaskPosition.h"
|
|
|
|
|
#include "McuWH-GN100Drv.h"
|
|
|
|
|
#include "McuTaskBlueTooth.h"
|
|
|
|
|
#include "BeiDouHtyDrv.h"
|
|
|
|
|
#include "ZthyToolDataTypeSwitch.h"
|
|
|
|
|
#include "McuTaskFlash.h"
|
2024-07-31 00:52:45 +00:00
|
|
|
#include "Usr_4GCatDtuDrv.h"
|
2023-10-08 08:10:23 +00:00
|
|
|
|
|
|
|
|
#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};
|
|
|
|
|
|
2024-07-31 00:52:45 +00:00
|
|
|
static unsigned short gMcuTaskPosition4gSerial = 0;
|
|
|
|
|
|
2023-10-08 08:10:23 +00:00
|
|
|
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;
|
2024-07-31 00:52:45 +00:00
|
|
|
gMcuTaskPositionBeiDouSendFlag = 0;
|
2023-10-08 08:10:23 +00:00
|
|
|
return -1;
|
|
|
|
|
}
|
2024-07-31 00:52:45 +00:00
|
|
|
if (gMcuTaskPositionSyncCount >= 1) {
|
2023-10-08 08:10:23 +00:00
|
|
|
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) {
|
|
|
|
|
gMcuTaskPositionBeiDouSendFlag = 0;
|
2024-07-31 00:52:45 +00:00
|
|
|
if (1 != McuDrv4GCatDtuPowerSta()) {
|
|
|
|
|
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"));
|
|
|
|
|
} else {
|
|
|
|
|
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"));
|
|
|
|
|
McuDrv4GSendMessage(MCU_TASK_POSITION_SEND_MESSAGE_ID, &gMcuTaskPosition4gSerial, gMcuTaskPositionBlueToothSendBuf, sizeof(gMcuTaskPositionBlueToothSendBuf));
|
|
|
|
|
gMcuTaskPosition4gSerial++;
|
|
|
|
|
HAL_Delay(2000);
|
2023-10-08 08:10:23 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
/* 保存数据到Flash */
|
|
|
|
|
McuTaskFlashWritePosition(gLat, gLon);
|
|
|
|
|
}
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 蓝牙请求数据 */
|
|
|
|
|
void McuTaskPositionBlueToothAsk(void)
|
|
|
|
|
{
|
|
|
|
|
gMcuTaskPositionBlueToothSendFlag = 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 北斗请求数据 */
|
|
|
|
|
void McuTaskPositionBeiDouAsk(void)
|
|
|
|
|
{
|
|
|
|
|
gMcuTaskPositionBeiDouSendFlag = 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 获取数据请求状态 */
|
|
|
|
|
int McuTaskPositionAskStatus(void)
|
|
|
|
|
{
|
|
|
|
|
return ((gMcuTaskPositionBlueToothSendFlag * 2) | gMcuTaskPositionBeiDouSendFlag);
|
|
|
|
|
}
|