aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/grgsm/misc_utils/extract_system_info.h1
-rw-r--r--lib/misc_utils/extract_system_info_impl.cc18
-rw-r--r--lib/misc_utils/extract_system_info_impl.h7
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();