Added parsing CCCH Config in system info extractor
diff --git a/include/grgsm/misc_utils/extract_system_info.h b/include/grgsm/misc_utils/extract_system_info.h
index 72d87bf..d449cce 100644
--- a/include/grgsm/misc_utils/extract_system_info.h
+++ b/include/grgsm/misc_utils/extract_system_info.h
@@ -56,6 +56,7 @@
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_ccch_conf() = 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 0e6a4c8..73ce992 100644
--- a/lib/misc_utils/extract_system_info_impl.cc
+++ b/lib/misc_utils/extract_system_info_impl.cc
@@ -76,6 +76,8 @@
info.lac = (msg_elements[8]<<8)+msg_elements[9]; //take lac
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
+ info.ccch_conf = (msg_elements[10] & 0x7); // ccch_conf
+
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);
@@ -215,6 +217,15 @@
return pwrs;
}
+ std::vector<int> extract_system_info_impl::get_ccch_conf()
+ {
+ std::vector<int> ccch_confs;
+ BOOST_FOREACH(chan_info_map::value_type &i, d_c0_channels){
+ ccch_confs.push_back(i.second.ccch_conf);
+ }
+ return ccch_confs;
+ }
+
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 6c50e10..cd0b2b0 100644
--- a/lib/misc_utils/extract_system_info_impl.h
+++ b/lib/misc_utils/extract_system_info_impl.h
@@ -39,10 +39,11 @@
unsigned int cell_id;
unsigned int mcc;
unsigned int mnc;
+ unsigned int ccch_conf;
std::set<int> neighbour_cells;
- 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() : id(-1), pwr_db(0), arfcn(0), lac(0), cell_id(0), mcc(0), mnc(0), ccch_conf(-1){}
+ 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), ccch_conf(info.ccch_conf){}
~chan_info(){}
void copy_nonzero_elements(const chan_info & info){
id = info.id;
@@ -52,6 +53,7 @@
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;
+ ccch_conf = (info.ccch_conf!=-1) ? info.ccch_conf : ccch_conf;
}
};
@@ -86,6 +88,7 @@
virtual std::vector<int> get_cell_id();
virtual std::vector<int> get_mcc();
virtual std::vector<int> get_mnc();
+ virtual std::vector<int> get_ccch_conf();
virtual std::vector<int> get_neighbours(int chan_id);
virtual void reset();
extract_system_info_impl();