diff options
author | Roman Khassraf <roman@khassraf.at> | 2015-09-26 17:20:49 +0200 |
---|---|---|
committer | Roman Khassraf <roman@khassraf.at> | 2015-09-26 17:20:49 +0200 |
commit | a1dd7eef169ee56127de0bc20523c6aedc0afd78 (patch) | |
tree | af4624782df549bf60eed28f29b80ecd7e327a4e | |
parent | 5ec7987f8af7871b66fcb84171522c83c6c4582b (diff) |
Added MCC parsing in system info extractor, fixed MNC parsing for 2-digit MNC's
-rw-r--r-- | include/grgsm/misc_utils/extract_system_info.h | 1 | ||||
-rw-r--r-- | lib/misc_utils/extract_system_info_impl.cc | 18 | ||||
-rw-r--r-- | lib/misc_utils/extract_system_info_impl.h | 7 |
3 files changed, 21 insertions, 5 deletions
diff --git a/include/grgsm/misc_utils/extract_system_info.h b/include/grgsm/misc_utils/extract_system_info.h index 8be10a1..72d87bf 100644 --- a/include/grgsm/misc_utils/extract_system_info.h +++ b/include/grgsm/misc_utils/extract_system_info.h @@ -54,6 +54,7 @@ namespace gr { virtual std::vector<int> get_pwrs() = 0; virtual std::vector<int> get_lac() = 0; virtual std::vector<int> get_cell_id() = 0; + virtual std::vector<int> get_mcc() = 0; virtual std::vector<int> get_mnc() = 0; virtual std::vector<int> get_neighbours(int chan_id) = 0; virtual void reset() = 0; diff --git a/lib/misc_utils/extract_system_info_impl.cc b/lib/misc_utils/extract_system_info_impl.cc index 994c92b..0e6a4c8 100644 --- a/lib/misc_utils/extract_system_info_impl.cc +++ b/lib/misc_utils/extract_system_info_impl.cc @@ -74,7 +74,8 @@ namespace gr { info.pwr_db = header->signal_dbm; info.cell_id = (msg_elements[3]<<8)+msg_elements[4]; //take cell id info.lac = (msg_elements[8]<<8)+msg_elements[9]; //take lac - info.mnc = (msg_elements[7]>>4); //take mnc + info.mcc = ((msg_elements[5] & 0xF) * 100) + (((msg_elements[5] & 0xF0) >> 4) * 10) + ((msg_elements[6] & 0xF)); // take mcc + info.mnc = (msg_elements[7] & 0xF) * 10 + (msg_elements[7]>>4); //take mnc boost::mutex::scoped_lock lock(extract_mutex); if(d_c0_channels.find(info.id) != d_c0_channels.end()){ d_c0_channels[info.id].copy_nonzero_elements(info); @@ -87,8 +88,9 @@ namespace gr { info.id = be16toh(header->arfcn); //take arfcn info.pwr_db = header->signal_dbm; info.lac = (msg_elements[6]<<8)+msg_elements[7]; //take lac - info.mnc = (msg_elements[5]>>4); //take mnc - + info.mcc = ((msg_elements[3] & 0xF) * 100) + (((msg_elements[3] & 0xF0) >> 4) * 10) + ((msg_elements[3] & 0xF)); // take mcc + info.mnc = (msg_elements[5] & 0xF) * 10 + (msg_elements[5]>>4); //take mnc + boost::mutex::scoped_lock lock(extract_mutex); if(d_c0_channels.find(info.id) != d_c0_channels.end()){ d_c0_channels[info.id].copy_nonzero_elements(info); @@ -177,6 +179,15 @@ namespace gr { return lacs; } + std::vector<int> extract_system_info_impl::get_mcc() + { + std::vector<int> mccs; + BOOST_FOREACH(chan_info_map::value_type &i, d_c0_channels){ + mccs.push_back(i.second.mcc); + } + return mccs; + } + std::vector<int> extract_system_info_impl::get_mnc() { std::vector<int> mncs; @@ -203,6 +214,7 @@ namespace gr { } return pwrs; } + std::vector<int> extract_system_info_impl::get_neighbours(int chan_id) { std::vector<int> neighbour_cells; diff --git a/lib/misc_utils/extract_system_info_impl.h b/lib/misc_utils/extract_system_info_impl.h index b88a586..6c50e10 100644 --- a/lib/misc_utils/extract_system_info_impl.h +++ b/lib/misc_utils/extract_system_info_impl.h @@ -37,11 +37,12 @@ namespace gr { unsigned int arfcn; unsigned int lac; unsigned int cell_id; + unsigned int mcc; unsigned int mnc; std::set<int> neighbour_cells; - chan_info() : id(-1), pwr_db(0), arfcn(0), lac(0), cell_id(0), mnc(0){} - chan_info(const chan_info & info) : id(info.id), pwr_db(info.pwr_db), arfcn(info.arfcn), lac(info.lac), cell_id(info.cell_id), mnc(info.mnc){} + chan_info() : id(-1), pwr_db(0), arfcn(0), lac(0), cell_id(0), mcc(0), mnc(0){} + chan_info(const chan_info & info) : id(info.id), pwr_db(info.pwr_db), arfcn(info.arfcn), lac(info.lac), cell_id(info.cell_id), mcc(info.mcc), mnc(info.mnc){} ~chan_info(){} void copy_nonzero_elements(const chan_info & info){ id = info.id; @@ -49,6 +50,7 @@ namespace gr { arfcn = info.arfcn; lac = (info.lac!=0) ? info.lac : lac; cell_id = (info.cell_id!=0) ? info.cell_id : cell_id; + mcc = (info.mcc!=0) ? info.mcc : mcc; mnc = (info.mnc!=0) ? info.mnc : mnc; } }; @@ -82,6 +84,7 @@ namespace gr { virtual std::vector<int> get_pwrs(); virtual std::vector<int> get_lac(); virtual std::vector<int> get_cell_id(); + virtual std::vector<int> get_mcc(); virtual std::vector<int> get_mnc(); virtual std::vector<int> get_neighbours(int chan_id); virtual void reset(); |