android gps驱动 可见/已连接卫星支持北斗

在Android 4.0系统下,即使GPS驱动已通,未修改前GPS测试仪无法显示北斗卫星信息。通过修改GSA和GSV部分,将北斗卫星数据与GPS数据一同上传,实现可见和已连接卫星信息的展示。具体做法包括在GSV中添加北斗数据,GSA中使用used_in_fix_mask表示已连接卫星,并为北斗卫星添加uint32_t used_in_fix_bd。进一步,需要在jni、Java层和aidl文件中进行相应修改,以支持北斗卫星状态的报告。
摘要由CSDN通过智能技术生成

前提:GPS驱动已通,android4.0

其实不加这个也能定位,因为定位信息是模块结合gps和北斗的定位算好一起发上来的,加这个只是能让app能看到北斗的卫星信息(例如gps测试仪)

修改的部分为GSA 和 GSV

GSV -> 可见卫星

GSA -> 已连接卫星

方法是自己拍脑袋想的,测试好用,其他不保证


GSV存下GPGSV和BDGSV的信息后一起上传

else if ( !memcmp(tok.p, "GSV", 3) ) {
 
    Token  tok_noSatellites  = nmea_tokenizer_get(tzer, 3);
    int    noSatellites = str2int(tok_noSatellites.p, tok_noSatellites.end);
    //D("noSatellites=%d\n",noSatellites);
//  if (noSatellites > 0) {

    if( !memcmp(gp, "GP", 2) ) {
//	    D("GPGSV record");	
		if (noSatellites > 0) {
	        Token  tok_noSentences   = nmea_tokenizer_get(tzer, 1);
    		Token  tok_sentence      = nmea_tokenizer_get(tzer, 2);
    	 
    		int sentence = str2int(tok_sentence.p, tok_sentence.end);
    		int totalSentences = str2int(tok_noSentences.p, tok_noSentences.end);
    		int curr;
    		int i;
    		//D("sentence=%d,totalSentences=%d\n",sentence,totalSentences);
    		if (sentence == 1) {
    		    r->sv_status_changed = 0;
    		    save_gps_num_svs = 0;
    		    r->sv_status.num_svs = 0;
	    	}
    	 
    		curr = save_gps_num_svs;
    		i = 0;
    		while (i < 4 && save_gps_num_svs < noSatellites){
                Token  tok_prn = nmea_tokenizer_get(tzer, i * 4 + 4);
                Token  tok_elevation = nmea_tokenizer_get(tzer, i * 4 + 5);
                Token  tok_azimuth = nmea_tokenizer_get(tzer, i * 4 + 6);
                Token  tok_snr = nmea_tokenizer_get(tzer, i * 4 + 7);
    
                save_gps_sv[curr].prn = str2int(tok_prn.p, tok_prn.end);
                save_gps_sv[curr].elevation = str2float(tok_elevation.p, tok_elevation.end);
                save_gps_sv[curr].azimuth = str2float(tok_azimuth.p, tok_azimuth.end);
                save_gps_sv[curr].snr = str2float(tok_snr.p, tok_snr.end);
                //D("GPS:  num=%d,prn=%d:snr=%f  ",r->sv_status.num_svs,\
                                save_gps_sv[curr].prn,save_gps_sv[curr].snr); 
                save_gps_num_svs += 1;
        		r->sv_status.num_svs += 1;
                curr += 1;
                i += 1;   
            }
		}
    } else {
//	    D("BDGSV record");
//	    if (noSatellites > 0) {
	        Token  tok_noSentences   = nmea_tokenizer_get(tzer, 1);
		    Token  tok_sentence      = nmea_tokenizer_get(tzer, 2);
	 
		    int sentence = str2int(tok_sentence.p, tok_sentence.end);
		    int totalSentences = str2int(tok_noSentences.p, tok_noSentences.end);
		    int curr;
            int i;
		    //D("sentence=%d,totalSentences=%d\n",sentence,totalSentences);
		    if (sentence == 1) {
		        
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值