前提: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) {