0%

通过 uStar 在线测试 GNSS 业务

uStar和芯星通 的专业 GNSS 上位机, 一般用于串口直连 GNSS 芯片调测芯片数据.

uStar 软件很强大, 但是只支持 NMEA 报文日志或串口作为输入, 终端的 GNSS 芯片串口没有暴露, 所以目前只能通过抓 NMEA 日志的方式回放数据.

最近定位的问题略多, 希望通过 uStar 软件实时分析芯片数据, 然后和系统的输出对比分析问题.

正好AP日志里面默认有打印 NMEA 数据, 想了想可以通过虚拟串口喂给 uStar.

准备虚拟串口

虚拟串口可以使用大名鼎鼎的 VSPD.

虚拟串口软件通过向系统添加一对串口设备的方式, 实现模拟物理设备. 可以理解为一条串口线缆, 都接到了同一台电脑, 一端发送一端就能收到数据.

其意义在于可以通过这样的方式向一些读写串口的程序进行测试.

安装软件

过程略.

创建虚拟设备

VSPD.png
如图, 给 First portSecond port 分配一对串口名称, 注意不要和系统已经存在的设备重复, 然后 Add pair 就行了.

然后查看系统确认已经增加了一对串口设备.
串口设备.PNG

过滤转发GNSS报文

这里通过一个 Python 脚本来实现, 环境 Python 3, 需要 pyserial 支持, 注意其中的串口号请酌情修改:

#!/usr/bin/env python
# coding:utf-8

import re
import signal
import serial
import serial.tools.list_ports
import subprocess


def start_logcat():
    global progress
    progress = subprocess.Popen('adb logcat', stdout=subprocess.PIPE, encoding='utf8')


def stop_logcat():
    global progress
    progress.close()


def open_serial():
    global uart
    # port_list = serial.tools.list_ports.comports()
    # port_select = port_list[0]
    # serial_port = port_select.device
    uart = serial.Serial("COM100", 115200)


def close_serial():
    global uart
    uart.close()


def start_forward():
    global uart
    global forward
    forward = True
    while forward:
        try:
            line = progress.stdout.readline()
        except UnicodeDecodeError:
            continue
        match = re.match( r'^.*(\$(GP|GL|GA|BD|GB|GN).*)$', line, re.M|re.I)
        if match:
            gnss = match.group(1).replace(" ", "")
            uart.write(bytes('%s\r\n' % (gnss), encoding='utf-8'))
            print(gnss)


def stop_forward():
    global forward
    forward = False


def handler_signal(signal, frame):
    stop_forward()
    close_serial()
    stop_logcat()


if __name__ == '__main__':
    signal.signal(signal.SIGINT, handler_signal)
    start_logcat()
    open_serial()
    start_forward()

执行这个 python 脚本, 自动开始读取 logcat 并过滤发送给虚拟串口.

使用 uStar 解析

打开串口.PNG

观察数据

观察数据.png

  • 本文作者: 6x
  • 本文链接: https://6xyun.cn/article/185
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-ND 许可协议。转载请注明出处!