初始化仓库
This commit is contained in:
621
libraries/zf_device/zf_device_gnss.c
Normal file
621
libraries/zf_device/zf_device_gnss.c
Normal file
@@ -0,0 +1,621 @@
|
||||
/*********************************************************************************************************************
|
||||
* TC264 Opensourec Library <20><><EFBFBD><EFBFBD>TC264 <20><>Դ<EFBFBD>⣩<EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
|
||||
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
|
||||
*
|
||||
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD> TC264 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
|
||||
*
|
||||
* TC264 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ᷢ<EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD>棨<EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><DEB8><EFBFBD>
|
||||
*
|
||||
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
|
||||
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
|
||||
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
|
||||
*
|
||||
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
|
||||
*
|
||||
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
|
||||
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>뱣<EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_device_gnss
|
||||
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾
|
||||
* <20>汾<EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ADS v1.10.2
|
||||
* <20><><EFBFBD><EFBFBD>ƽ̨ TC264D
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
|
||||
*
|
||||
* <20>ļ<DEB8>¼
|
||||
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
|
||||
* 2023-12-28 pudding first version
|
||||
* 2024-01-30 pudding <20><><EFBFBD><EFBFBD>RTK "D" <20><>ͷЭ<CDB7><D0AD>
|
||||
********************************************************************************************************************/
|
||||
/*********************************************************************************************************************
|
||||
* <20><><EFBFBD>߶<EFBFBD><DFB6>壺
|
||||
* ------------------------------------
|
||||
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
|
||||
* RX <20>鿴 zf_device_gnss.h <20><> GNSS_RX <20>궨<EFBFBD><EAB6A8>
|
||||
* TX <20>鿴 zf_device_gnss.h <20><> GNSS_TX <20>궨<EFBFBD><EAB6A8>
|
||||
* VCC 3.3V<EFBFBD><EFBFBD>Դ
|
||||
* GND <20><>Դ<EFBFBD><D4B4>
|
||||
* ------------------------------------
|
||||
********************************************************************************************************************/
|
||||
|
||||
#include "math.h"
|
||||
#include "zf_common_function.h"
|
||||
#include "zf_common_fifo.h"
|
||||
#include "zf_driver_delay.h"
|
||||
#include "zf_driver_uart.h"
|
||||
|
||||
#include "zf_device_gnss.h"
|
||||
|
||||
#define GNSS_BUFFER_SIZE ( 128 )
|
||||
|
||||
uint8 gnss_flag = 0; // 1<><31><EFBFBD>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD>ɵȴ<C9B5><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0<><30>û<EFBFBD>вɼ<D0B2><C9BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
gnss_info_struct gnss; // GPS<50><53><EFBFBD><EFBFBD>֮<EFBFBD><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
static uint8 gnss_state = 0; // 1<><31>GPS<50><53>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
static fifo_struct gnss_receiver_fifo; //
|
||||
static uint8 gnss_receiver_buffer[GNSS_BUFFER_SIZE]; // <20><><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
static gps_state_enum gnss_gga_state = GPS_STATE_RECEIVING; // gga <20><><EFBFBD><EFBFBD>״̬
|
||||
static gps_state_enum gnss_rmc_state = GPS_STATE_RECEIVING; // rmc <20><><EFBFBD><EFBFBD>״̬
|
||||
static gps_state_enum gnss_ths_state = GPS_STATE_RECEIVING; // rmc <20><><EFBFBD><EFBFBD>״̬
|
||||
|
||||
static uint8 gps_gga_buffer[GNSS_BUFFER_SIZE];
|
||||
static uint8 gps_rmc_buffer[GNSS_BUFFER_SIZE];
|
||||
static uint8 gps_ths_buffer[GNSS_BUFFER_SIZE];
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȡָ<C8A1><D6B8> ',' <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> num <20>ڼ<EFBFBD><DABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *str <20>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> get_parameter_index(1, s);
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD>ʹ<EFBFBD><CAB9>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static uint8 get_parameter_index (uint8 num, char *str)
|
||||
{
|
||||
uint8 i = 0, j = 0;
|
||||
char *temp = strchr(str, '\n');
|
||||
uint8 len = 0, len1 = 0;
|
||||
|
||||
if(NULL != temp)
|
||||
{
|
||||
len = (uint8)((uint32)temp - (uint32)str + 1);
|
||||
}
|
||||
|
||||
for(i = 0; i < len; i ++)
|
||||
{
|
||||
if(',' == str[i])
|
||||
{
|
||||
j ++;
|
||||
}
|
||||
if(j == num)
|
||||
{
|
||||
len1 = i + 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return len1;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB> ',' ֮ǰ<D6AE><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊint
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *s <20>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> float <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> get_int_number(&buf[get_parameter_index(7, buf)]);
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD>ʹ<EFBFBD><CAB9>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static int get_int_number (char *s)
|
||||
{
|
||||
char buf[10];
|
||||
uint8 i = 0;
|
||||
int return_value = 0;
|
||||
i = get_parameter_index(1, s);
|
||||
i = i - 1;
|
||||
strncpy(buf, s, i);
|
||||
buf[i] = 0;
|
||||
return_value = func_str_to_int(buf);
|
||||
return return_value;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB> ',' ֮ǰ<D6AE><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊfloat
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *s <20>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> float <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> get_float_number(&buf[get_parameter_index(8, buf)]);
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD>ʹ<EFBFBD><CAB9>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static float get_float_number (char *s)
|
||||
{
|
||||
uint8 i = 0;
|
||||
char buf[15];
|
||||
float return_value = 0;
|
||||
|
||||
i = get_parameter_index(1, s);
|
||||
i = i - 1;
|
||||
strncpy(buf, s, i);
|
||||
buf[i] = 0;
|
||||
return_value = (float)func_str_to_double(buf);
|
||||
return return_value;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB> ',' ֮ǰ<D6AE><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊdouble
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *s <20>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> double <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> get_double_number(&buf[get_parameter_index(3, buf)]);
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD>ʹ<EFBFBD><CAB9>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static double get_double_number (char *s)
|
||||
{
|
||||
uint8 i = 0;
|
||||
char buf[15];
|
||||
double return_value = 0;
|
||||
|
||||
i = get_parameter_index(1, s);
|
||||
i = i - 1;
|
||||
strncpy(buf, s, i);
|
||||
buf[i] = 0;
|
||||
return_value = func_str_to_double(buf);
|
||||
return return_value;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *time <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> utc_to_btc(&gnss->time);
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD>ʹ<EFBFBD><CAB9>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static void utc_to_btc (gps_time_struct *time)
|
||||
{
|
||||
uint8 day_num = 0;
|
||||
|
||||
time->hour = time->hour + 8;
|
||||
if(23 < time->hour)
|
||||
{
|
||||
time->hour -= 24;
|
||||
time->day += 1;
|
||||
|
||||
if(2 == time->month)
|
||||
{
|
||||
day_num = 28;
|
||||
if((0 == time->year % 4 && 0 != time->year % 100) || 0 == time->year % 400) // <20>ж<EFBFBD><D0B6>Ƿ<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
|
||||
{
|
||||
day_num ++; // <20><><EFBFBD><EFBFBD> 2<><32>Ϊ29<32><39>
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
day_num = 31; // 1 3 5 7 8 10 12<31><32>Щ<EFBFBD>·<EFBFBD>Ϊ31<33><31>
|
||||
if(4 == time->month || 6 == time->month || 9 == time->month || 11 == time->month )
|
||||
{
|
||||
day_num = 30;
|
||||
}
|
||||
}
|
||||
|
||||
if(time->day > day_num)
|
||||
{
|
||||
time->day = 1;
|
||||
time->month ++;
|
||||
if(12 < time->month)
|
||||
{
|
||||
time->month -= 12;
|
||||
time->year ++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> RMC<4D><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *line <20><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *gnss <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD> 0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲻ<EFBFBD>ܽ<EFBFBD><DCBD><EFBFBD>
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> gps_gnrmc_parse((char *)data_buffer, &gnss);
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD>ʹ<EFBFBD><CAB9>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static uint8 gps_gnrmc_parse (char *line, gnss_info_struct *gnss)
|
||||
{
|
||||
uint8 state = 0, temp = 0;
|
||||
|
||||
double latitude = 0; // γ<><CEB3>
|
||||
double longitude = 0; // <20><><EFBFBD><EFBFBD>
|
||||
|
||||
double lati_cent_tmp = 0, lati_second_tmp = 0;
|
||||
double long_cent_tmp = 0, long_second_tmp = 0;
|
||||
float speed_tmp = 0;
|
||||
char *buf = line;
|
||||
uint8 return_state = 0;
|
||||
|
||||
state = buf[get_parameter_index(2, buf)];
|
||||
|
||||
if('A' == state || 'D' == state) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
return_state = 1;
|
||||
gnss->state = 1;
|
||||
gnss -> ns = buf[get_parameter_index(4, buf)];
|
||||
gnss -> ew = buf[get_parameter_index(6, buf)];
|
||||
|
||||
latitude = get_double_number(&buf[get_parameter_index(3, buf)]);
|
||||
longitude = get_double_number(&buf[get_parameter_index(5, buf)]);
|
||||
|
||||
gnss->latitude_degree = (int)latitude / 100; // γ<><CEB3>ת<EFBFBD><D7AA>Ϊ<EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD>
|
||||
lati_cent_tmp = (latitude - gnss->latitude_degree * 100);
|
||||
gnss->latitude_cent = (int)lati_cent_tmp;
|
||||
lati_second_tmp = (lati_cent_tmp - gnss->latitude_cent) * 6000;
|
||||
gnss->latitude_second = (int)lati_second_tmp;
|
||||
|
||||
gnss->longitude_degree = (int)longitude / 100; // <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD>
|
||||
long_cent_tmp = (longitude - gnss->longitude_degree * 100);
|
||||
gnss->longitude_cent = (int)long_cent_tmp;
|
||||
long_second_tmp = (long_cent_tmp - gnss->longitude_cent) * 6000;
|
||||
gnss->longitude_second = (int)long_second_tmp;
|
||||
|
||||
gnss->latitude = gnss->latitude_degree + lati_cent_tmp / 60;
|
||||
gnss->longitude = gnss->longitude_degree + long_cent_tmp / 60;
|
||||
|
||||
speed_tmp = get_float_number(&buf[get_parameter_index(7, buf)]); // <20>ٶ<EFBFBD>(<28><><EFBFBD><EFBFBD>/Сʱ)
|
||||
gnss->speed = speed_tmp * 1.85f; // ת<><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>/Сʱ
|
||||
gnss->direction = get_float_number(&buf[get_parameter_index(8, buf)]); // <20>Ƕ<EFBFBD>
|
||||
}
|
||||
else
|
||||
{
|
||||
gnss->state = 0;
|
||||
}
|
||||
|
||||
// <20>ڶ<EFBFBD>λû<CEBB><C3BB><EFBFBD><EFBFBD>ЧǰҲ<C7B0><D2B2><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>ݵģ<DDB5><C4A3><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>ӽ<EFBFBD><D3BD><EFBFBD>
|
||||
gnss->time.hour = (buf[7] - '0') * 10 + (buf[8] - '0'); // ʱ<><CAB1>
|
||||
gnss->time.minute = (buf[9] - '0') * 10 + (buf[10] - '0');
|
||||
gnss->time.second = (buf[11] - '0') * 10 + (buf[12] - '0');
|
||||
temp = get_parameter_index(9, buf);
|
||||
gnss->time.day = (buf[temp + 0] - '0') * 10 + (buf[temp + 1] - '0'); // <20><><EFBFBD><EFBFBD>
|
||||
gnss->time.month = (buf[temp + 2] - '0') * 10 + (buf[temp + 3] - '0');
|
||||
gnss->time.year = (buf[temp + 4] - '0') * 10 + (buf[temp + 5] - '0') + 2000;
|
||||
|
||||
utc_to_btc(&gnss->time);
|
||||
|
||||
return return_state;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> GGA<47><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *line <20><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *gnss <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD> 0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲻ<EFBFBD>ܽ<EFBFBD><DCBD><EFBFBD>
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> gps_gngga_parse((char *)data_buffer, &gnss);
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD>ʹ<EFBFBD><CAB9>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static uint8 gps_gngga_parse (char *line, gnss_info_struct *gnss)
|
||||
{
|
||||
uint8 state = 0;
|
||||
char *buf = line;
|
||||
uint8 return_state = 0;
|
||||
|
||||
state = buf[get_parameter_index(2, buf)];
|
||||
|
||||
if(',' != state)
|
||||
{
|
||||
gnss->satellite_used = (uint8)get_int_number(&buf[get_parameter_index(7, buf)]);
|
||||
gnss->height = get_float_number(&buf[get_parameter_index(9, buf)]) + get_float_number(&buf[get_parameter_index(11, buf)]); // <20>߶<EFBFBD> = <20><><EFBFBD>θ߶<CEB8> + <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ˮ<CBAE><D7BC><EFBFBD>ĸ߶<C4B8>
|
||||
return_state = 1;
|
||||
}
|
||||
|
||||
return return_state;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> THS<48><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *line <20><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *gnss <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD> 0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲻ<EFBFBD>ܽ<EFBFBD><DCBD><EFBFBD>
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> gps_gnths_parse((char *)data_buffer, &gnss);
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD>ʹ<EFBFBD><CAB9>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static uint8 gps_gnths_parse (char *line, gnss_info_struct *gnss)
|
||||
{
|
||||
uint8 state = 0;
|
||||
char *buf = line;
|
||||
uint8 return_state = 0;
|
||||
|
||||
state = buf[get_parameter_index(2, buf)];
|
||||
|
||||
if('A' == state)
|
||||
{
|
||||
gnss->antenna_direction_state = 1;
|
||||
gnss->antenna_direction = get_float_number(&buf[get_parameter_index(1, buf)]);
|
||||
return_state = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
gnss->antenna_direction_state = 0;
|
||||
}
|
||||
|
||||
return return_state;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>㵽<EFBFBD>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> latitude1 <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>γ<EFBFBD><CEB3>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> longitude1 <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> latitude2 <20>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>γ<EFBFBD><CEB3>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> longitude2 <20>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> double <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> get_two_points_distance(latitude1_1, longitude1, latitude2, longitude2);
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
double get_two_points_distance (double latitude1, double longitude1, double latitude2, double longitude2)
|
||||
{
|
||||
const double EARTH_RADIUS = 6378137; // <20><><EFBFBD><EFBFBD><EFBFBD>뾶(<28><>λ<EFBFBD><CEBB>m)
|
||||
double rad_latitude1 = 0;
|
||||
double rad_latitude2 = 0;
|
||||
double rad_longitude1 = 0;
|
||||
double rad_longitude2 = 0;
|
||||
double distance = 0;
|
||||
double a = 0;
|
||||
double b = 0;
|
||||
|
||||
rad_latitude1 = ANGLE_TO_RAD(latitude1); // <20><><EFBFBD>ݽǶȼ<C7B6><C8BC>㻡<EFBFBD><E3BBA1>
|
||||
rad_latitude2 = ANGLE_TO_RAD(latitude2);
|
||||
rad_longitude1 = ANGLE_TO_RAD(longitude1);
|
||||
rad_longitude2 = ANGLE_TO_RAD(longitude2);
|
||||
|
||||
a = rad_latitude1 - rad_latitude2;
|
||||
b = rad_longitude1 - rad_longitude2;
|
||||
|
||||
distance = 2 * asin(sqrt(pow(sin(a / 2), 2) + cos(rad_latitude1) * cos(rad_latitude2) * pow(sin(b / 2), 2))); // google maps <20><><EFBFBD><EFBFBD>ʵ<EFBFBD>ֵ<EFBFBD><D6B5>㷨
|
||||
distance = distance * EARTH_RADIUS;
|
||||
|
||||
return distance;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>㵽<EFBFBD>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ķ<EFBFBD>λ<EFBFBD><CEBB>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> latitude1 <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>γ<EFBFBD><CEB3>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> longitude1 <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> latitude2 <20>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>γ<EFBFBD><CEB3>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> longitude2 <20>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> double <20><><EFBFBD>ط<EFBFBD>λ<EFBFBD>ǣ<EFBFBD>0<EFBFBD><30>360<36><30>
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> get_two_points_azimuth(latitude1_1, longitude1, latitude2, longitude2);
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
double get_two_points_azimuth (double latitude1, double longitude1, double latitude2, double longitude2)
|
||||
{
|
||||
latitude1 = ANGLE_TO_RAD(latitude1);
|
||||
latitude2 = ANGLE_TO_RAD(latitude2);
|
||||
longitude1 = ANGLE_TO_RAD(longitude1);
|
||||
longitude2 = ANGLE_TO_RAD(longitude2);
|
||||
|
||||
double x = sin(longitude2 - longitude1) * cos(latitude2);
|
||||
double y = cos(latitude1) * sin(latitude2) - sin(latitude1) * cos(latitude2) * cos(longitude2 - longitude1);
|
||||
double angle = RAD_TO_ANGLE(atan2(x, y));
|
||||
return ((0 < angle) ? angle : (angle + 360));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>GPS<50><53><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 0-<2D><><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD> 1-<2D><><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD><EFBFBD><EFBFBD>
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> gps_data_parse();
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
uint8 gnss_data_parse (void)
|
||||
{
|
||||
uint8 return_state = 0;
|
||||
uint8 check_buffer[5] = {'0', 'x', 0x00, 0x00, 0x00};
|
||||
uint8 bbc_xor_origin = 0;
|
||||
uint8 bbc_xor_calculation = 0;
|
||||
uint32 data_len = 0;
|
||||
|
||||
do
|
||||
{
|
||||
if(GPS_STATE_RECEIVED == gnss_rmc_state)
|
||||
{
|
||||
gnss_rmc_state = GPS_STATE_PARSING;
|
||||
strncpy((char *)&check_buffer[2], strchr((const char *)gps_rmc_buffer, '*') + 1, 2);
|
||||
bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
|
||||
for(bbc_xor_calculation = gps_rmc_buffer[1], data_len = 2; '*' != gps_rmc_buffer[data_len]; data_len ++)
|
||||
{
|
||||
bbc_xor_calculation ^= gps_rmc_buffer[data_len];
|
||||
}
|
||||
if(bbc_xor_calculation != bbc_xor_origin)
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>ʧ<EFBFBD><CAA7>
|
||||
return_state = 1;
|
||||
break;
|
||||
}
|
||||
|
||||
gps_gnrmc_parse((char *)gps_rmc_buffer, &gnss);
|
||||
}
|
||||
gnss_rmc_state = GPS_STATE_RECEIVING;
|
||||
|
||||
if(GPS_STATE_RECEIVED == gnss_gga_state)
|
||||
{
|
||||
gnss_gga_state = GPS_STATE_PARSING;
|
||||
strncpy((char *)&check_buffer[2], strchr((const char *)gps_gga_buffer, '*') + 1, 2);
|
||||
bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
|
||||
|
||||
for(bbc_xor_calculation = gps_gga_buffer[1], data_len = 2; '*' != gps_gga_buffer[data_len]; data_len ++)
|
||||
{
|
||||
bbc_xor_calculation ^= gps_gga_buffer[data_len];
|
||||
}
|
||||
if(bbc_xor_calculation != bbc_xor_origin)
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>ʧ<EFBFBD><CAA7>
|
||||
return_state = 1;
|
||||
break;
|
||||
}
|
||||
|
||||
gps_gngga_parse((char *)gps_gga_buffer, &gnss);
|
||||
}
|
||||
gnss_gga_state = GPS_STATE_RECEIVING;
|
||||
|
||||
if(GPS_STATE_RECEIVED == gnss_ths_state)
|
||||
{
|
||||
gnss_ths_state = GPS_STATE_PARSING;
|
||||
strncpy((char *)&check_buffer[2], strchr((const char *)gps_ths_buffer, '*') + 1, 2);
|
||||
bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
|
||||
|
||||
for(bbc_xor_calculation = gps_ths_buffer[1], data_len = 2; '*' != gps_ths_buffer[data_len]; data_len ++)
|
||||
{
|
||||
bbc_xor_calculation ^= gps_ths_buffer[data_len];
|
||||
}
|
||||
if(bbc_xor_calculation != bbc_xor_origin)
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>ʧ<EFBFBD><CAA7>
|
||||
return_state = 1;
|
||||
break;
|
||||
}
|
||||
|
||||
gps_gnths_parse((char *)gps_ths_buffer, &gnss);
|
||||
}
|
||||
gnss_ths_state = GPS_STATE_RECEIVING;
|
||||
|
||||
}while(0);
|
||||
return return_state;
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> GPS<50><53><EFBFBD>ڻص<DABB><D8B5><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> gps_uart_callback();
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ <20>˺<EFBFBD><CBBA><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>ڴ<EFBFBD><DAB4>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6>ڽ<EFBFBD><DABD>е<EFBFBD><D0B5><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void gnss_uart_callback (void)
|
||||
{
|
||||
uint8 temp_gps[6];
|
||||
uint32 temp_length = 0;
|
||||
|
||||
|
||||
|
||||
|
||||
if(gnss_state)
|
||||
{
|
||||
uint8 dat;
|
||||
while(uart_query_byte(GNSS_UART, &dat))
|
||||
{
|
||||
fifo_write_buffer(&gnss_receiver_fifo, &dat, 1);
|
||||
}
|
||||
|
||||
if('\n' == dat)
|
||||
{
|
||||
// <20><>ȡǰ6<C7B0><36><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
temp_length = 6;
|
||||
fifo_read_buffer(&gnss_receiver_fifo, temp_gps, &temp_length, FIFO_READ_ONLY);
|
||||
|
||||
// <20><><EFBFBD>ݲ<EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD>ͽ<EFBFBD><CDBD><EFBFBD><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(0 == strncmp((char *)&temp_gps[3], "RMC", 3))
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>»<EFBFBD><C2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(GPS_STATE_PARSING != gnss_rmc_state)
|
||||
{
|
||||
gnss_rmc_state = GPS_STATE_RECEIVED;
|
||||
temp_length = fifo_used(&gnss_receiver_fifo);
|
||||
fifo_read_buffer(&gnss_receiver_fifo, gps_rmc_buffer, &temp_length, FIFO_READ_AND_CLEAN);
|
||||
}
|
||||
}
|
||||
else if(0 == strncmp((char *)&temp_gps[3], "GGA", 3))
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>»<EFBFBD><C2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(GPS_STATE_PARSING != gnss_gga_state)
|
||||
{
|
||||
gnss_gga_state = GPS_STATE_RECEIVED;
|
||||
temp_length = fifo_used(&gnss_receiver_fifo);
|
||||
fifo_read_buffer(&gnss_receiver_fifo, gps_gga_buffer, &temp_length, FIFO_READ_AND_CLEAN);
|
||||
}
|
||||
}
|
||||
else if(0 == strncmp((char *)&temp_gps[3], "THS", 3))
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>»<EFBFBD><C2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(GPS_STATE_PARSING != gnss_ths_state)
|
||||
{
|
||||
gnss_ths_state = GPS_STATE_RECEIVED;
|
||||
temp_length = fifo_used(&gnss_receiver_fifo);
|
||||
fifo_read_buffer(&gnss_receiver_fifo, gps_ths_buffer, &temp_length, FIFO_READ_AND_CLEAN);
|
||||
}
|
||||
}
|
||||
|
||||
// ͳһ<CDB3><D2BB>FIFO<46><4F><EFBFBD><EFBFBD>
|
||||
fifo_clear(&gnss_receiver_fifo);
|
||||
|
||||
gnss_flag = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> GPS<50><53>ʼ<EFBFBD><CABC>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> gps_init();
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void gnss_init (gps_device_enum gps_device)
|
||||
{
|
||||
const uint8 set_rate[] = {0xF1, 0xD9, 0x06, 0x42, 0x14, 0x00, 0x00, 0x0A, 0x05, 0x00, 0x64, 0x00, 0x00, 0x00, 0x60, 0xEA, 0x00, 0x00, 0xD0, 0x07, 0x00, 0x00, 0xC8, 0x00, 0x00, 0x00, 0xB8, 0xED};
|
||||
const uint8 open_gga[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x00, 0x01, 0xFB, 0x10};
|
||||
const uint8 open_rmc[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x05, 0x01, 0x00, 0x1A};
|
||||
|
||||
const uint8 close_gll[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x01, 0x00, 0xFB, 0x11};
|
||||
const uint8 close_gsa[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x02, 0x00, 0xFC, 0x13};
|
||||
const uint8 close_grs[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x03, 0x00, 0xFD, 0x15};
|
||||
const uint8 close_gsv[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x04, 0x00, 0xFE, 0x17};
|
||||
const uint8 close_vtg[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x06, 0x00, 0x00, 0x1B};
|
||||
const uint8 close_zda[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x07, 0x00, 0x01, 0x1D};
|
||||
const uint8 close_gst[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x08, 0x00, 0x02, 0x1F};
|
||||
const uint8 close_txt[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x40, 0x00, 0x3A, 0x8F};
|
||||
const uint8 close_txt_ant[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x20, 0x00, 0x1A, 0x4F};
|
||||
|
||||
if((TAU1201 == gps_device) || (GN42A == gps_device))
|
||||
{
|
||||
fifo_init(&gnss_receiver_fifo, FIFO_DATA_8BIT, gnss_receiver_buffer, GNSS_BUFFER_SIZE);
|
||||
system_delay_ms(500); // <20>ȴ<EFBFBD>GPS<50><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ʼ<EFBFBD><CABC>
|
||||
uart_init(GNSS_UART, 115200, GNSS_RX, GNSS_TX);
|
||||
|
||||
uart_write_buffer(GNSS_UART, (uint8 *)set_rate, sizeof(set_rate)); // <20><><EFBFBD><EFBFBD>GPS<50><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ10hz <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC>Ϊ1hz
|
||||
system_delay_ms(200);
|
||||
|
||||
uart_write_buffer(GNSS_UART, (uint8 *)open_rmc, sizeof(open_rmc)); // <20><><EFBFBD><EFBFBD>rmc<6D><63><EFBFBD><EFBFBD>
|
||||
system_delay_ms(50);
|
||||
uart_write_buffer(GNSS_UART, (uint8 *)open_gga, sizeof(open_gga)); // <20><><EFBFBD><EFBFBD>gga<67><61><EFBFBD><EFBFBD>
|
||||
system_delay_ms(50);
|
||||
uart_write_buffer(GNSS_UART, (uint8 *)close_gll, sizeof(close_gll));
|
||||
system_delay_ms(50);
|
||||
uart_write_buffer(GNSS_UART, (uint8 *)close_gsa, sizeof(close_gsa));
|
||||
system_delay_ms(50);
|
||||
uart_write_buffer(GNSS_UART, (uint8 *)close_grs, sizeof(close_grs));
|
||||
system_delay_ms(50);
|
||||
uart_write_buffer(GNSS_UART, (uint8 *)close_gsv, sizeof(close_gsv));
|
||||
system_delay_ms(50);
|
||||
uart_write_buffer(GNSS_UART, (uint8 *)close_vtg, sizeof(close_vtg));
|
||||
system_delay_ms(50);
|
||||
uart_write_buffer(GNSS_UART, (uint8 *)close_zda, sizeof(close_zda));
|
||||
system_delay_ms(50);
|
||||
uart_write_buffer(GNSS_UART, (uint8 *)close_gst, sizeof(close_gst));
|
||||
system_delay_ms(50);
|
||||
uart_write_buffer(GNSS_UART, (uint8 *)close_txt, sizeof(close_txt));
|
||||
system_delay_ms(50);
|
||||
uart_write_buffer(GNSS_UART, (uint8 *)close_txt_ant, sizeof(close_txt_ant));
|
||||
system_delay_ms(50);
|
||||
|
||||
gnss_state = 1;
|
||||
uart_rx_interrupt(GNSS_UART, 1);
|
||||
}
|
||||
else if(GN43RFA == gps_device)
|
||||
{
|
||||
// GN43RFA RTKģ<4B>鲻<EFBFBD><E9B2BB>Ҫ<EFBFBD><D2AA><EFBFBD>в<EFBFBD><D0B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>IJ<DEB8><C4B2><EFBFBD>Ӧ<EFBFBD><D3A6>ʹ<EFBFBD><CAB9>ר<EFBFBD>õ<EFBFBD><C3B5><EFBFBD>λ<EFBFBD><CEBB><EFBFBD>IJ<DEB8><C4B2><EFBFBD>
|
||||
fifo_init(&gnss_receiver_fifo, FIFO_DATA_8BIT, gnss_receiver_buffer, GNSS_BUFFER_SIZE);
|
||||
uart_init(GNSS_UART, 115200, GNSS_RX, GNSS_TX);
|
||||
gnss_state = 1;
|
||||
uart_rx_interrupt(GNSS_UART, 1);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user