GPS/GNSS测试工具
先说一下GPS和GNSS的区别, 很多人把GPS等同于GNSS,我们在生活和工作中也常以GPS的概念描述GNSS。其实不然。
GNSS全球导航卫星系统(Global Navigation Satellite System)。泛指所有的卫星导航系统,包括全球的、区域的和增强的导航系统,如美国的GPS、俄罗斯的Glonass、欧洲的Galileo、中国的北斗卫星导航系统,以及相关的增强系统,如美国的WAAS(广域增强系统)、欧洲的EGNOS(欧洲静地导航重叠系统)和日本的MSAS(多功能运输卫星增强系统)等,还涵盖在建和以后要建设的其他卫星导航系统。国际GNSS系统是个多系统、多层面、多模式的复杂组合系统。
用简洁的公式表述就是:
GNSS = 卫星导航系统(GPS+Glonass+Galileo+Beidou等)+ 区域增强/扩增系统(WAAS+EGNOS+MSAS+QZSS+SBAS等)+ ...
最近犹豫工作需要,需要写一个测试GNSS搜星能力的工具。
1. Qcom平台默认提供“garden_app”命令可测试GNSS。该命令需要root权限才可运行。
2. server call 调用LocationManager相关接口进行搜星,同时打开相关log,查看log中搜星信息。该方法遇到传参问题。
3. 写一个GNSS测试apk,可界面显示搜星信息,也可将搜星信息写进文件,供其它工具读取。
调用的关键类及方法:
LocationManager.requestLocationUpdates() //调用该接口发起搜星,需要定义接口所需参数,如LocationListener
GpsStatus, GpsStatus.Listener //通过该类获取卫星信息
GPS (1-32) / SBAS (33-54) / GLONASS (65-96) / QZSS (193-200) / BEIDOU (201-235) / GALILEO (301-) //android中定义的各个GNSS系统中卫星prn所属阈值。
代码如下:
package com.example.gpstest;import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Iterator;import android.app.Activity;
import android.location.GpsSatellite;
import android.location.GpsStatus;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.text.method.ScrollingMovementMethod;
import android.util.Log;
import android.widget.TextView;public class MainActivity<GpsStatellite, StingBuilder> extends Activity {protected static final String TAG = "GNSSTEST";private String GNSS_RESULT_FILE; private static final long MIN_TIME_INTERVAL = 1 * 1000;private static final float MIN_DISTANCE_INTERVAL = 10;LocationManager mLocationManager = null;LocationListener mLocationListener = null;GpsStatus.Listener mListener= null;TextView gnss_result = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// /data/user/0/com.example.gpstest/files/gnss_result.txt, need root to cat// GNSS_RESULT_FILE= this.getFilesDir().getPath() + "/gnss_result.txt";GNSS_RESULT_FILE= "/sdcard/gnss_result.txt";mLocationManager = (LocationManager) getSystemService(LOCATION_SERVICE);mLocationListener = new LocationListener() {@Overridepublic void onStatusChanged(String arg0, int arg1, Bundle arg2) {// TODO Auto-generated method stub}@Overridepublic void onProviderEnabled(String arg0) {// TODO Auto-generated method stub}@Overridepublic void onProviderDisabled(String arg0) {// TODO Auto-generated method stub}@Overridepublic void onLocationChanged(Location arg0) {// TODO Auto-generated method stub}};mListener = new GpsStatus.Listener() {@Overridepublic void onGpsStatusChanged(int event) {// TODO Auto-generated method stubswitch (event) {case GpsStatus.GPS_EVENT_SATELLITE_STATUS:// get current statusGpsStatus gpsStatus = mLocationManager.getGpsStatus(null);// get MAX default number of statesint maxStatellites = gpsStatus.getMaxSatellites();// get all statesIterator<GpsSatellite> iters = gpsStatus.getSatellites().iterator();// calculate number of statesint stateNumber = 0;String type = "UNKNOWN";StringBuilder mStringBuilder = new StringBuilder();while (iters.hasNext() && stateNumber <= maxStatellites) {stateNumber++;GpsSatellite nextStatellite = iters.next();//get signal to noise ratiofloat snr = ((GpsSatellite) nextStatellite).getSnr();int prn = nextStatellite.getPrn();// check the type of statellite, GPS/GLONASS/BEIDOU or SBAS/QZSS// GPS (1-32) / SBAS (33-54) / GLONASS (65-96) / QZSS (193-200) / BEIDOU (201-235) / GALILEO (301-)if (1 <= prn && prn <= 32){type = "GPS";} else if (64 < prn && prn <=96) {type = "GLONASS";} else if (200 < prn && prn <= 235) {type = "BEIDOU";} else if (33 <= prn && prn <= 54) {type = "SBAS";} else if (193 <= prn && prn <= 200) {type = "QZSS";} else if (301 <= prn) {type = "GALILEO";}mStringBuilder.append("NO.").append(stateNumber).append("\t").append("snr: ").append(snr).append("\t").append("prn: ").append(prn).append("\t").append("type: ").append(type).append("\n");}gnss_result = (TextView) findViewById(R.id.text_view);gnss_result.setMovementMethod(ScrollingMovementMethod.getInstance());gnss_result.setText("total search statellite's number: "+ stateNumber + "\n" + mStringBuilder.toString());try {File file = new File(GNSS_RESULT_FILE);// if file doesn't exists, then create itif (!file.exists()) {file.createNewFile();}FileWriter fw = new FileWriter(file.getAbsoluteFile());BufferedWriter bw = new BufferedWriter(fw);bw.write("total search statellite's number: "+ stateNumber + "\n" + mStringBuilder.toString());bw.close();} catch (IOException e) {// TODO Auto-generated catch blockLog.e(TAG, "IOException in writing gnss informance to file");e.printStackTrace();}break;default:break;}}};mLocationManager.addGpsStatusListener(mListener);mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, MIN_TIME_INTERVAL, MIN_DISTANCE_INTERVAL, mLocationListener);}
}
GPS/GNSS测试工具相关推荐
- gps导航软件收发接受数据信息免费开源测试工具,最实用的GPS接收器测试详解
记录空气中的 GPS 讯号 建立 GPS 波形时,其独特又日趋普遍的方式,即是直接从空气中撷取 单一卫星敏感度量测 在了解敏感度量测的基本理论之后,接着将进行实际量测的各个程序.一般测试系统均是透过直 ...
- 汽车应用和GPS综合测试中GPS/GNSS模拟测试新方案
通过模拟进行GPS综合测试是一种简单.快速.有效的方式,虹科最新发布GPS/GNSS模拟器具有高级测试功能,只需一次路测,就可以进行多次重复模拟,并通过记录和回放进行修改.虹科HK-GSG系列GPS/ ...
- Betaflight BN880 GPS 简单测试
Betaflight BN880 GPS 简单测试 1. 源由 2. 窗台对比测试 3. 开阔区域测试 3.1 GPS安装位置 3.1.1 BN880 GPS 机尾打印支架 安装位置 3.1.2 BN ...
- 高通平台GPS工程测试接收参数解析
高通平台GPS工程测试&接收参数解析 前言 一.GPS工程测试 1.测试环境&仪器搭建 2.板子/整机状态 二.GPS接收机参数解析 1.灵敏度 2.空间衰减 3.SNR信噪比 4.C ...
- 【十年网络安全工程师整理】—100渗透测试工具使用方法介绍
渗透测试是指渗透人员在不同的位置(比如从内网.从外网等位置)利用各种手段对 某个特定网络进行测试,以期发现和挖掘系统中存在的漏洞,然后输出渗透测试报告, 并提交给网络所有者.网络所有者根据渗透人员提供 ...
- 2020测试工具索引
初次发布文章时,共收集435个工具! 这些测试工具均为博主人肉爬虫出来的,数据来源于: 百度.Google 各大博客.门户网站.论坛 个人测试经验 在整理过程中,我会尽量去官网找到官方对该工具的描述, ...
- 正确选择合适的移动应用测试工具很重要
您知道吗,据Statista称,到 2025 年,智能手机用户数量将达到 182.2 亿?其实也不用惊讶,数字化转型正在飞速发展,并将继续如此.这给移动应用程序开发市场带来了各种选择,并引发了对最佳移 ...
- 10款移动app安全测试工具推荐
移动互联网时代,我们的生活和工作深受 App 影响.伴随移动 App 的广泛应用,App 安全日益重要.本文介绍了 App 开发可能用到的安全测试工具. 当今,全球移动用户大约超过37亿.Google ...
- 基于uni-app的BLE低功耗蓝牙测试工具
基于uni-app的BLE低功耗蓝牙测试工具 前言 开发环境:HBuilder X2.8.11,运行环境:微信小程序 本项目是从网上收集他人的源代码,经过测试.修改后的版本,在微信小程序上表现比较稳定 ...
最新文章
- win10每次开机都会自检系统盘(非硬件故障)——解决方案2019.07.12
- 在python子程序中、使用关键字_Python 的控制和函数
- 建模就用Rose的时代宣告结束
- arcgis中的python字符串比较
- IT部门绩效考核:一本糊涂账?
- h5获取http请求头_java学习之路(2),http协议,request类
- LeetCode 141 Linked List Cycle
- 关于一个简单算法的递归和循环转换实现
- 「S-A-L-T-A」项目失败总结!
- Windows界面编程:MFC
- 请问大家如何用MATLAB绘制四元函数图像
- 小米手机获取ROOT权限的一些坑及补坑经验
- C语言——恶搞关机小程序
- 作为程序员的硬实力是什么 ?
- 【Python】【C语言】P3353 在你窗外闪耀的星星
- 在Windows程序中打开控制台的程序
- gvim之Vimdiff 使用
- 零基础的我是这样开始写Python爬虫的(附代码)
- 谁与争锋,JDK动态代理大战CGLib动态代理
- 计算机电子信息类专业大学排名,电子信息工程专业大学排名 2020全国排行榜