#include "board.h"
|
#include "HIDO_Util.h"
|
#include "global_param.h"
|
#define GPS_OPEN_TIME_OUT 120 //1·ÖÖÓ¿ªÆô
|
#define GPS_RESTART_TIME1 480 //10·ÖÖÓ
|
#define GPS_RESTART_TIME2 48 //1·ÖÖÓ
|
#define GPS_RESTART_TIME3 30 //30s
|
|
#define GPS_VALID_LED_WAIT_COUNT 1
|
#define GPS_INVALID_LED_WAIT_COUNT 5
|
#define AIR_CONNECT_LED_WAIT_COUNT 5
|
extern uint16_t gps_wait_count,g_com_map[COM_MAP_SIZE];
|
extern uint8_t flag_first_TCPconnect;
|
extern 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,gps_first_flag=1;
|
extern uint8_t gps_success_state,air780_success_state,power_low_flag,state5V_prase_flag,green_charge_state,enbale_blink_flag,active_flag;
|
typedef enum {
|
STATE_IDLE,
|
STATE_VALID,
|
STATE_INVALID
|
} GPSState;
|
typedef enum {
|
CONNECT,
|
DISCONNECT,
|
} LED4GState;
|
GPSState GPS_state=STATE_IDLE;
|
LED4GState LED_4g_state=DISCONNECT;
|
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>34)
|
gps_first_flag=0;//мÓÈëµÚÒ»´Î¿ªÆô
|
if(gps_wait_count>=GPS_OPEN_TIME_OUT) { //³¬Ê±Çл»¹¤×÷״̬
|
|
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();
|
}
|
void POWER_LED_Task(void)
|
{
|
if(enbale_blink_flag)
|
{
|
green_charge_state=0;
|
charge_red_on();
|
}
|
charge_state_change();//³äµç״̬ÅжÏ
|
if(enbale_blink_flag)
|
{
|
delay_us(5000);
|
green_charge_state=0;
|
charge_red_off();
|
}
|
}
|
uint8_t wltag_gps_timer,wltag_4g_timer;;
|
void GPS_LED_Task(void)
|
{
|
|
if(state5V_prase_flag||power_low_flag||!gps_power_state)
|
{
|
GPS_state=STATE_IDLE;
|
}
|
switch(GPS_state){
|
case STATE_INVALID:
|
if(wltag_gps_timer++>=GPS_INVALID_LED_WAIT_COUNT)
|
{ wltag_gps_timer=0;
|
blink_led(&gps_success_state);
|
}
|
break;
|
case STATE_VALID:
|
if(wltag_gps_timer++>=GPS_VALID_LED_WAIT_COUNT)
|
{ wltag_gps_timer=0;
|
blink_led(&gps_success_state);
|
}
|
break;
|
case STATE_IDLE:
|
gps_led_off();
|
wltag_gps_timer=0;
|
break;
|
}
|
}
|
void LED_4G_task(void)
|
{
|
|
if(Internet_IsIPReady() == HIDO_TRUE&&!power_low_flag&&active_flag)
|
{
|
LED_4g_state=CONNECT;
|
}else{
|
LED_4g_state=DISCONNECT;
|
}
|
switch(LED_4g_state){
|
case CONNECT:
|
if(wltag_4g_timer++>=AIR_CONNECT_LED_WAIT_COUNT)
|
{ wltag_4g_timer=0;
|
blink_led(&air780_success_state);
|
}
|
break;
|
case DISCONNECT:
|
air780_led_off();
|
wltag_4g_timer=0;
|
break;
|
}
|
}
|
void LED_Task(void)
|
{
|
POWER_LED_Task();
|
LED_4G_task();
|
GPS_LED_Task();
|
}
|
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;
|
}
|