From 52364a63b5be9ec3c6205946764bc5b159a179bb Mon Sep 17 00:00:00 2001 From: dragorn Date: Sun, 22 Nov 2009 00:21:34 +0000 Subject: [PATCH] Add GPS tracking dect FP git-svn-id: https://dedected.org/svn/trunk@99 8d8ab74c-27aa-4a3d-9bde-523a2bc1f624 --- kismet-dect-v2/packetsource_dect.cc | 10 +++-- kismet-dect-v2/tracker_dect.cc | 59 +++++++++++++++++++++++++++-- 2 files changed, 62 insertions(+), 7 deletions(-) diff --git a/kismet-dect-v2/packetsource_dect.cc b/kismet-dect-v2/packetsource_dect.cc index e6e249f..aee1102 100644 --- a/kismet-dect-v2/packetsource_dect.cc +++ b/kismet-dect-v2/packetsource_dect.cc @@ -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); diff --git a/kismet-dect-v2/tracker_dect.cc b/kismet-dect-v2/tracker_dect.cc index 377bade..f9fba8a 100644 --- a/kismet-dect-v2/tracker_dect.cc +++ b/kismet-dect-v2/tracker_dect.cc @@ -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::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;