From 0942f592f3c033983c4ccaba6d632bbf80611abb Mon Sep 17 00:00:00 2001 From: chen <15335560115@163.com> Date: 星期三, 21 五月 2025 14:29:55 +0800 Subject: [PATCH] 上传格式正确,但电量未采集版本,未加入蓝牙与mk和mk和lora和网关同步修改配置逻辑,测距稳定能用基础版本 --- keil/include/src/gps.c | 150 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 150 insertions(+), 0 deletions(-) diff --git a/keil/include/src/gps.c b/keil/include/src/gps.c new file mode 100644 index 0000000..33cb59b --- /dev/null +++ b/keil/include/src/gps.c @@ -0,0 +1,150 @@ +#include "board.h" +#include "HIDO_Util.h" +#include "global_param.h" +#include "sn74hc595.h" +#define GPS_OPEN_TIME_OUT 48 //1分钟开启 +#define GPS_RESTART_TIME1 480 //10分钟 +#define GPS_RESTART_TIME2 48 //1分钟 +#define GPS_RESTART_TIME3 30 //30s + uint16_t gps_wait_count; + extern uint16_t g_com_map[COM_MAP_SIZE]; +extern uint8_t flag_first_TCPconnect; + uint16_t gps_wait_count2; +uint16_t g_spsum,g_snum,ave_sp; +uint8_t gps_power_state,gps_uwb_flag,gps_4g_flag,gps_timeout_flag,gps_need_data_flag = 1,gps_open_flag; +void GPS_Poll(void) +{ + + if(gps_4g_flag||gps_uwb_flag) { + gps_power_state = 1; //打开GPS电源 + if(!gps_timeout_flag) { + if(gps_need_data_flag) { + gps_wait_count++; + if(gps_wait_count>=GPS_OPEN_TIME_OUT) { //超时切换工作状态 + gps_timeout_flag=1;//串口添加改变timeout逻辑 + gps_wait_count=0; + gps_need_data_flag=0;//切换为关闭模式 + } + } else { + gps_wait_count++; + gps_power_state=0;//关闭GPS + if(gps_wait_count>GPS_RESTART_TIME2) { + gps_power_state=1;//开启GPS + gps_need_data_flag=1; + gps_wait_count=0; + } + } + } else { //超时工作状态 + if(gps_need_data_flag) { + gps_wait_count++; + if(gps_wait_count>=GPS_OPEN_TIME_OUT) { //超时切换工作状态 + gps_timeout_flag=1; + gps_need_data_flag=0; + gps_wait_count=0; + } + } else { + gps_wait_count++; + gps_power_state=0;//关闭GPS + if(gps_wait_count>GPS_RESTART_TIME1) { + gps_power_state=1;//开启GPS + gps_need_data_flag=1; + gps_wait_count=0; + } + } + + } + } else { + gps_power_state=0;//关闭gps + gps_wait_count=0; + gps_timeout_flag=0; + gps_need_data_flag=1; + } +} +void GpsConrol(uint8_t flag_4g_uwb,uint8_t open_close) +{ + if(gps_4g_flag==0&&gps_uwb_flag==0) + if(open_close) + { + gps_wait_count = 0; + gps_need_data_flag = 1; + gps_timeout_flag = 0; + } + if(flag_4g_uwb) + { + gps_4g_flag = open_close; + } else { + gps_uwb_flag = open_close; + } + +} +void Gps_change(void) +{ + if(gps_open_flag){ + if(gps_need_data_flag) { + gps_power_state = 1; //打开GPS电源 + + gps_wait_count++; + if(gps_wait_count>=g_com_map[SEND_4G_SECOND]) { //超时切换工作状态 + gps_timeout_flag=1;//串口添加改变timeout逻辑 + gps_wait_count=0; + gps_need_data_flag=0;//切换为关闭模式 + UDPClient_UploadGPS();//上传GPS超时无效数据 + } + } else { + gps_wait_count++; + gps_power_state=0;//关闭GPS + + if(gps_wait_count>g_com_map[SEND_4G_SECOND]) { + gps_power_state=1;//开启GPS + gps_need_data_flag=1; + gps_wait_count=0; + } + } + gps_wait_count2=0; + }else{ + gps_wait_count2++; + if(gps_wait_count2>=g_com_map[SEND_4G_SECOND]) { //超时切换工作状态 + gps_wait_count=0; + gps_timeout_flag=1; + UDPClient_UploadGPS();//上传GPS 30s固定数据 + gps_wait_count2=0; + } + gps_power_state=1;//开启gps + gps_need_data_flag=1; + } +// update_led_power_state(); +} + +HIDO_INT32 GPS_ParseGSV(HIDO_CHAR *_pcData, HIDO_UINT32 _u32Len) +{ + HIDO_DataStruct spower[4]; + +// if (GPS_DataCheck(_pcData, _u32Len) != HIDO_OK) +// { +// return HIDO_ERR; +// } + + if (HIDO_UtilParseFormat((HIDO_UINT8 *) _pcData, _u32Len, "$%*,%*,%*,%*,%*,%*,%*,%p,%*,%*,%*,%p,%*,%*,%*,%p,%*,%*,%*,%p,%**", &spower[0], &spower[1], &spower[2], &spower[3]) == 21) + { + g_snum+=4; + g_spsum+=atoi((HIDO_CHAR *)spower[0].m_pData)+atoi((HIDO_CHAR *)spower[1].m_pData)+atoi((HIDO_CHAR *)spower[2].m_pData)+atoi((HIDO_CHAR *)spower[3].m_pData); + }else if(HIDO_UtilParseFormat((HIDO_UINT8 *) _pcData, _u32Len, "$%*,%*,%*,%*,%*,%*,%*,%p,%*,%*,%*,%p,%*,%*,%*,%p,%**", &spower[0], &spower[1], &spower[2]) == 17) + { + g_snum+=3; + g_spsum+=atoi((HIDO_CHAR *)spower[0].m_pData)+atoi((HIDO_CHAR *)spower[1].m_pData)+atoi((HIDO_CHAR *)spower[2].m_pData); + + }else if(HIDO_UtilParseFormat((HIDO_UINT8 *) _pcData, _u32Len, "$%*,%*,%*,%*,%*,%*,%*,%p,%*,%*,%*,%p,%**", &spower[0], &spower[1]) == 13) + { + g_snum+=2; + g_spsum+=atoi((HIDO_CHAR *)spower[0].m_pData)+atoi((HIDO_CHAR *)spower[1].m_pData); + + }else if(HIDO_UtilParseFormat((HIDO_UINT8 *) _pcData, _u32Len, "$%*,%*,%*,%*,%*,%*,%*,%p,%**", &spower[0]) == 9) + { + g_snum+=1; + g_spsum+=atoi((HIDO_CHAR *)spower[0].m_pData); + + } + // l_u8PosState = atoi((HIDO_CHAR *)stPosState.m_pData); + + return HIDO_OK; +} \ No newline at end of file -- Gitblit v1.9.3