summaryrefslogtreecommitdiffstats
path: root/Src/PyCatcher/src/driverConnector.py
diff options
context:
space:
mode:
authorTom2012-01-11 13:59:54 +0100
committerTom2012-01-11 13:59:54 +0100
commitc547df2720a876aef9dc7a8faa8f00fc0678e59f (patch)
tree9f52529e77f117a79d09dafc49c19733cf7f15c6 /Src/PyCatcher/src/driverConnector.py
parentcleanup (diff)
downloadimsi-catcher-detection-c547df2720a876aef9dc7a8faa8f00fc0678e59f.tar.gz
imsi-catcher-detection-c547df2720a876aef9dc7a8faa8f00fc0678e59f.tar.xz
imsi-catcher-detection-c547df2720a876aef9dc7a8faa8f00fc0678e59f.zip
moved mercurial to git, using git now as main cvs
Diffstat (limited to 'Src/PyCatcher/src/driverConnector.py')
-rw-r--r--Src/PyCatcher/src/driverConnector.py118
1 files changed, 118 insertions, 0 deletions
diff --git a/Src/PyCatcher/src/driverConnector.py b/Src/PyCatcher/src/driverConnector.py
new file mode 100644
index 0000000..2167219
--- /dev/null
+++ b/Src/PyCatcher/src/driverConnector.py
@@ -0,0 +1,118 @@
+from pyCatcherModel import BaseStationInformation
+import subprocess
+import threading
+import re
+from pyCatcherSettings import Commands
+import time
+import gtk
+
+class DriverConnector:
+ def __init__ (self):
+ self._scan_thread_break = False
+ self._firmware_thread_break = False
+ self._firmware_waiting_callback = None
+ self._firmware_loaded_callback = None
+ self._base_station_found_callback = None
+ self._firmware_thread = None
+ self._scan_thread = None
+
+ def start_scanning (self, base_station_found_callback):
+ self._base_station_found_callback = base_station_found_callback
+ self._scan_thread = ScanThread(self._base_station_found_callback)
+ self._scan_thread.start()
+
+ def start_firmware(self, firmware_waiting_callback, firmware_loaded_callback):
+ self._firmware_waiting_callback = firmware_waiting_callback
+ self._firmware_loaded_callback = firmware_loaded_callback
+ self._firmware_thread = FirmwareThread(self._firmware_waiting_callback, self._firmware_loaded_callback)
+ self._firmware_thread.start()
+
+ def stop_scanning (self):
+ self._scan_thread.terminate()
+
+ def stop_firmware(self):
+ self._firmware_thread_break = True
+
+ def shutdown(self):
+ if self._firmware_thread:
+ self._firmware_thread.join(3)
+ if self._scan_thread:
+ self._scan_thread.join(3)
+
+class FirmwareThread(threading.Thread):
+ def __init__(self, firmware_waiting_callback, firmware_loaded_callback):
+ gtk.gdk.threads_init()
+ threading.Thread.__init__(self)
+ self._firmware_waiting_callback = firmware_waiting_callback
+ self._firmware_loaded_callback = firmware_loaded_callback
+ self._thread_break = False
+
+ def terminate(self):
+ self._thread_break = True
+
+ def run(self):
+ loader_process_object = subprocess.Popen(Commands['osmocon_command'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
+ time.sleep(3)
+ self._firmware_waiting_callback()
+ while not self._thread_break:
+ line = loader_process_object.stdout.readline()
+ #if line:
+ # print line
+ if line.strip() == 'Finishing download phase':
+ self._firmware_loaded_callback()
+ #time.sleep(0.5)
+ print 'killing firmware'
+ loader_process_object.terminate()
+
+class ScanThread(threading.Thread):
+ def __init__(self, base_station_found_callback):
+ gtk.gdk.threads_init()
+ threading.Thread.__init__(self)
+ self._base_station_found_callback = base_station_found_callback
+ self._thread_break = False
+
+ def terminate(self):
+ self._thread_break = True
+
+ def run(self):
+ scan_process = subprocess.Popen(Commands['scan_command'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
+ time.sleep(2)
+ while not self._thread_break:
+ line = scan_process.stdout.readline()
+ if line:
+ #print line
+ #sys.stdout.flush()
+ if re.search('SysInfo', line):
+ base_station = BaseStationInformation()
+ #get country
+ line = line = scan_process.stdout.readline()
+ match = re.search(r'country\s(\w+)',line)
+ if match:
+ base_station.country = match.group(1)
+ #get provider
+ line = line = scan_process.stdout.readline()
+ match = re.search(r'provider\s(.+)',line)
+ if match:
+ base_station.provider = match.group(1)
+ #get arfcn
+ line = line = scan_process.stdout.readline()
+ match = re.search(r'arfcn\s(\d+)',line)
+ if match:
+ base_station.arfcn = int(match.group(1))
+ #get rxlev
+ line = line = scan_process.stdout.readline()
+ match = re.search(r'rxlev\s(.\d+)',line)
+ if match:
+ base_station.rxlev = match.group(1)
+ #get neighbours
+ line = line = scan_process.stdout.readline()
+ match = re.search(r'si2\s(.+)',line)
+ if match:
+ base_station.system_info_t2 = match.group(1).split(' ')
+ #endinfo
+ line = line = scan_process.stdout.readline()
+
+ self._base_station_found_callback(base_station)
+ print 'killing scan'
+ scan_process.terminate()
+ \ No newline at end of file