|
|
@@ -21,7 +21,7 @@
|
|
|
|
|
|
#include "nmea/nmea.h"
|
|
|
|
|
|
-/* 串口接收消息结构*/
|
|
|
+/* 涓插彛鎺ユ敹娑堟伅缁撴瀯*/
|
|
|
struct rx_msg
|
|
|
{
|
|
|
rt_device_t dev;
|
|
|
@@ -31,7 +31,7 @@ struct rx_msg
|
|
|
static rt_device_t serial;
|
|
|
static struct rt_messagequeue rx_mq;
|
|
|
|
|
|
-/* 接收数据回调函数 */
|
|
|
+/* 鎺ユ敹鏁版嵁鍥炶皟鍑芥暟 */
|
|
|
static rt_err_t uart_input(rt_device_t dev, rt_size_t size)
|
|
|
{
|
|
|
struct rx_msg msg;
|
|
|
@@ -42,17 +42,17 @@ static rt_err_t uart_input(rt_device_t dev, rt_size_t size)
|
|
|
result = rt_mq_send(&rx_mq, &msg, sizeof(msg));
|
|
|
if (result == -RT_EFULL)
|
|
|
{
|
|
|
- /* 消息队列满 */
|
|
|
- rt_kprintf("message queue full!\n");
|
|
|
+ /* 娑堟伅闃熷垪婊� */
|
|
|
+ rt_kprintf("message queue full锛乗n");
|
|
|
}
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
//#define __GPS_DEBUG
|
|
|
/**
|
|
|
- * @brief trace 在解码时输出捕获的GPS语句
|
|
|
- * @param str: 要输出的字符串,str_size:数据长度
|
|
|
- * @retval 无
|
|
|
+ * @brief trace 鍦ㄨВ鐮佹椂杈撳嚭鎹曡幏鐨凣PS璇�彞
|
|
|
+ * @param str: 瑕佽緭鍑虹殑瀛楃�涓诧紝str_size:鏁版嵁闀垮害
|
|
|
+ * @retval 鏃�
|
|
|
*/
|
|
|
static void trace(const char *str, int str_size)
|
|
|
{
|
|
|
@@ -63,9 +63,9 @@ static void trace(const char *str, int str_size)
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * @brief error 在解码出错时输出提示消息
|
|
|
- * @param str: 要输出的字符串,str_size:数据长度
|
|
|
- * @retval 无
|
|
|
+ * @brief error 鍦ㄨВ鐮佸嚭閿欐椂杈撳嚭鎻愮ず娑堟伅
|
|
|
+ * @param str: 瑕佽緭鍑虹殑瀛楃�涓诧紝str_size:鏁版嵁闀垮害
|
|
|
+ * @retval 鏃�
|
|
|
*/
|
|
|
static void error(const char *str, int str_size)
|
|
|
{
|
|
|
@@ -82,13 +82,13 @@ static void nmea_thread_entry(void *parameter)
|
|
|
rt_uint32_t rx_length;
|
|
|
static char rx_buffer[RT_SERIAL_RB_BUFSZ + 1];
|
|
|
|
|
|
- char ss[128]; //打印字符串buffer
|
|
|
+ char ss[128]; //鎵撳嵃瀛楃�涓瞓uffer
|
|
|
|
|
|
- double deg_lat; //转换成[degree].[degree]格式的纬度
|
|
|
- double deg_lon; //转换成[degree].[degree]格式的经度
|
|
|
+ double deg_lat; //杞�崲鎴怺degree].[degree]鏍煎紡鐨勭含搴�
|
|
|
+ double deg_lon; //杞�崲鎴怺degree].[degree]鏍煎紡鐨勭粡搴�
|
|
|
|
|
|
- nmeaINFO info; //GPS解码后得到的信息
|
|
|
- nmeaPARSER parser; //解码时使用的数据结构
|
|
|
+ nmeaINFO info; //GPS瑙g爜鍚庡緱鍒扮殑淇℃伅
|
|
|
+ nmeaPARSER parser; //瑙g爜鏃朵娇鐢ㄧ殑鏁版嵁缁撴瀯
|
|
|
|
|
|
nmea_property()->trace_func = &trace;
|
|
|
nmea_property()->error_func = &error;
|
|
|
@@ -99,23 +99,23 @@ static void nmea_thread_entry(void *parameter)
|
|
|
while (1)
|
|
|
{
|
|
|
rt_memset(&msg, 0, sizeof(msg));
|
|
|
- /* 从消息队列中读取消息*/
|
|
|
+ /* 浠庢秷鎭�槦鍒椾腑璇诲彇娑堟伅*/
|
|
|
result = rt_mq_recv(&rx_mq, &msg, sizeof(msg), RT_WAITING_FOREVER);
|
|
|
if (result == RT_EOK)
|
|
|
{
|
|
|
- /* 从串口读取数据*/
|
|
|
+ /* 浠庝覆鍙h�鍙栨暟鎹�*/
|
|
|
rx_length = rt_device_read(msg.dev, 0, rx_buffer, msg.size);
|
|
|
rx_buffer[rx_length] = '\0';
|
|
|
|
|
|
nmea_parse(&parser, (const char *) &rx_buffer[0], rx_length, &info);
|
|
|
|
|
|
- //info.lat lon中的格式为[degree][min].[sec/60],使用以下函数转换成[degree].[degree]格式
|
|
|
+ //info.lat lon涓�殑鏍煎紡涓篬degree][min].[sec/60]锛屼娇鐢ㄤ互涓嬪嚱鏁拌浆鎹㈡垚[degree].[degree]鏍煎紡
|
|
|
deg_lat = nmea_ndeg2degree(info.lat);
|
|
|
deg_lon = nmea_ndeg2degree(info.lon);
|
|
|
|
|
|
LOG_D("utc_time:%d-%02d-%02d,%d:%d:%d ", info.utc.year + 1900, info.utc.mon + 1, info.utc.day,
|
|
|
info.utc.hour, info.utc.min, info.utc.sec);
|
|
|
- //因为LOG_D不支持浮点数,所以此处使用snprintf进行打印,再用LOG_D输出
|
|
|
+ //鍥犱负LOG_D涓嶆敮鎸佹诞鐐规暟锛屾墍浠ユ�澶勪娇鐢╯nprintf杩涜�鎵撳嵃锛屽啀鐢↙OG_D杈撳嚭
|
|
|
snprintf(ss, 128, "wd:%f,jd:%f", deg_lat, deg_lon);
|
|
|
LOG_D(ss);
|
|
|
snprintf(ss, 128, "high:%f m", info.elv);
|
|
|
@@ -139,20 +139,20 @@ static int nmea_thread_init(int argc, char *argv[])
|
|
|
static char msg_pool[256];
|
|
|
static char up_msg_pool[256];
|
|
|
struct serial_configure config = RT_SERIAL_CONFIG_DEFAULT;
|
|
|
- /* 查找串口设备 */
|
|
|
+ /* 鏌ユ壘涓插彛璁惧� */
|
|
|
serial = rt_device_find(NMEALIB_UART_PORT);
|
|
|
- /* 初始化消息队列 */
|
|
|
+ /* 鍒濆�鍖栨秷鎭�槦鍒� */
|
|
|
rt_mq_init(&rx_mq, "rx_mq", msg_pool, sizeof(struct rx_msg), sizeof(msg_pool), RT_IPC_FLAG_FIFO);
|
|
|
- //修改波特率为9600
|
|
|
+ //淇�敼娉㈢壒鐜囦负9600
|
|
|
config.baud_rate = NMEALIB_UART_BAUDRATE;
|
|
|
rt_device_control(serial, RT_DEVICE_CTRL_CONFIG, &config);
|
|
|
|
|
|
- rt_device_open(serial, RT_DEVICE_FLAG_DMA_RX); /* 以 DMA 接收及轮询发送方式打开串口设备 */
|
|
|
- rt_device_set_rx_indicate(serial, uart_input); /* 设置接收回调函数 */
|
|
|
+ rt_device_open(serial, RT_DEVICE_FLAG_DMA_RX); /* 浠� DMA 鎺ユ敹鍙婅疆璇㈠彂閫佹柟寮忔墦寮€涓插彛璁惧� */
|
|
|
+ rt_device_set_rx_indicate(serial, uart_input); /* 璁剧疆鎺ユ敹鍥炶皟鍑芥暟 */
|
|
|
|
|
|
- rt_thread_t thread = rt_thread_create("nmea", nmea_thread_entry, RT_NULL, 4096, 25, 10); /* 创建 serial 线程 */
|
|
|
+ rt_thread_t thread = rt_thread_create("nmea", nmea_thread_entry, RT_NULL, 4096, 25, 10); /* 鍒涘缓 serial 绾跨▼ */
|
|
|
|
|
|
- /* 创建成功则启动线程 */
|
|
|
+ /* 鍒涘缓鎴愬姛鍒欏惎鍔ㄧ嚎绋� */
|
|
|
if (thread != RT_NULL)
|
|
|
{
|
|
|
rt_thread_startup(thread);
|
|
|
@@ -164,6 +164,6 @@ static int nmea_thread_init(int argc, char *argv[])
|
|
|
|
|
|
return ret;
|
|
|
}
|
|
|
-/* 导出到 msh 命令列表中 */
|
|
|
+/* 瀵煎嚭鍒� msh 鍛戒护鍒楄〃涓� */
|
|
|
MSH_CMD_EXPORT(nmea_thread_init, nmea thread init);
|
|
|
INIT_APP_EXPORT(nmea_thread_init);
|