13
0
Fork 1

Add GPS tracking dect FP

git-svn-id: https://dedected.org/svn/trunk@99 8d8ab74c-27aa-4a3d-9bde-523a2bc1f624
This commit is contained in:
dragorn 2009-11-22 00:21:34 +00:00
parent a5b3ac1121
commit 52364a63b5
2 changed files with 62 additions and 7 deletions

View File

@ -181,8 +181,11 @@ int PacketSource_Dect::StartScanFp() {
if (scan_mode == MODE_ASYNC_FP_SCAN)
return 0;
if (sync)
sync = false;
/* start sniffer mode */
int val = COA_MODE_SNIFF | COA_SUBMODE_SNIFF_SCANFP;
uint16_t val = COA_MODE_SNIFF | COA_SUBMODE_SNIFF_SCANFP;
if (ioctl(serial_fd, COA_IOCTL_MODE, &val)) {
_MSG("DECT packet source '" + name + "': Failed to set sniffer scan FP: " +
@ -192,9 +195,6 @@ int PacketSource_Dect::StartScanFp() {
scan_mode = MODE_ASYNC_FP_SCAN;
if (sync)
sync = false;
// Caller should turn on hopping
// globalreg->sourcetracker->SetSourceHopping(FetchUUID(), 1, 0);
@ -240,6 +240,8 @@ int PacketSource_Dect::Poll() {
return 0;
}
// printf("debug - scan %02x:%02x:%02x:%02x:%02x channel %d\n", pi->sdata.RFPI[0], pi->sdata.RFPI[1], pi->sdata.RFPI[2], pi->sdata.RFPI[3], pi->sdata.RFPI[4], pi->sdata.channel);
// Make a scan chunk
dectchunk = new kis_datachunk;
dectchunk->length = sizeof(dect_data_scan_t);

View File

@ -34,12 +34,18 @@
enum DECTFP_fields {
DECTFP_rfpi, DECTFP_firsttime, DECTFP_lasttime, DECTFP_lastrssi,
DECTFP_num, DECTFP_channel,
DECTFP_gpsfixed, DECTFP_minlat, DECTFP_maxlat, DECTFP_minlon, DECTFP_maxlon,
DECTFP_minalt, DECTFP_maxalt, DECTFP_minspd, DECTFP_maxspd, DECTFP_agglat,
DECTFP_agglon, DECTFP_aggalt, DECTFP_aggpoints,
DECTFP_maxfield
};
const char *DECTFP_fields_text[] = {
"rfpi", "firsttime", "lasttime", "lastrssi",
"num", "channel",
"rfpi", "firsttime", "lasttime", "lastrssi",
"num", "channel",
"gpsfixed", "minlat", "maxlat", "minlon", "maxlon",
"minalt", "maxalt", "minspd", "maxspd", "agglat",
"agglon", "aggalt", "aggpoints",
NULL
};
@ -83,6 +89,45 @@ int Protocol_DECTFP(PROTO_PARMS) {
case DECTFP_channel:
osstr << fp->channel;
break;
case DECTFP_gpsfixed:
osstr << fp->gpsdata.gps_valid;
break;
case DECTFP_minlat:
osstr << fp->gpsdata.min_lat;
break;
case DECTFP_maxlat:
osstr << fp->gpsdata.max_lat;
break;
case DECTFP_minlon:
osstr << fp->gpsdata.min_lon;
break;
case DECTFP_maxlon:
osstr << fp->gpsdata.max_lon;
break;
case DECTFP_minalt:
osstr << fp->gpsdata.min_alt;
break;
case DECTFP_maxalt:
osstr << fp->gpsdata.max_alt;
break;
case DECTFP_minspd:
osstr << fp->gpsdata.min_spd;
break;
case DECTFP_maxspd:
osstr << fp->gpsdata.max_spd;
break;
case DECTFP_agglat:
osstr << fp->gpsdata.aggregate_lat;
break;
case DECTFP_agglon:
osstr << fp->gpsdata.aggregate_lon;
break;
case DECTFP_aggalt:
osstr << fp->gpsdata.aggregate_alt;
break;
case DECTFP_aggpoints:
osstr << fp->gpsdata.aggregate_points;
break;
}
out_string += osstr.str() + " ";
@ -150,6 +195,9 @@ int Tracker_Dect::chain_handler(kis_packet *in_pack) {
map<mac_addr, dect_tracked_fp *>::iterator dtfi = tracked_fp.find(rfpi_mac);
kis_gps_packinfo *gpsinfo = (kis_gps_packinfo *)
in_pack->fetch(_PCM(PACK_COMP_GPS));
if (dtfi == tracked_fp.end()) {
fp = new dect_tracked_fp;
@ -157,7 +205,7 @@ int Tracker_Dect::chain_handler(kis_packet *in_pack) {
fp->channel = di->sdata.channel;
fp->rfpi = rfpi_mac;
tracked_fp[rfpi_mac] = fp;
_MSG("debug - dect, new tracked FP " + rfpi_mac.Mac2String().substr(0, 14), MSGFLAG_INFO);
_MSG("debug - dect, new tracked FP " + rfpi_mac.Mac2String().substr(0, 14) + " chan " + IntToString(fp->channel) + " sdata " + IntToString(di->sdata.channel), MSGFLAG_INFO);
} else {
fp = dtfi->second;
}
@ -172,6 +220,11 @@ int Tracker_Dect::chain_handler(kis_packet *in_pack) {
fp->last_time = globalreg->timestamp.tv_sec;
fp->num_seen++;
fp->last_rssi = di->sdata.RSSI;
if (gpsinfo != NULL) {
fp->gpsdata += gpsinfo;
}
fp->dirty = 1;
return 0;