147 lines
4.3 KiB
Python
Executable File
147 lines
4.3 KiB
Python
Executable File
#!/usr/bin/python
|
|
|
|
import time
|
|
import serial
|
|
import os
|
|
from pyroute2 import IPRoute
|
|
import sys
|
|
import re
|
|
import threading
|
|
import signal
|
|
import traceback
|
|
import os
|
|
|
|
# configure the serial connections (the parameters differs on the device you are connecting to)
|
|
#First we find an open port to work with
|
|
serial_port=''
|
|
ser=serial.Serial()
|
|
def find_open_port():
|
|
global serial_port, ser
|
|
max_ports=100
|
|
if os.path.exists(serial_port) == True:
|
|
return serial_port
|
|
for port in range(2,100):
|
|
serial_port = '/dev/ttyUSB'+str(port)
|
|
if os.path.exists(serial_port) == True:
|
|
print 'New Serial Port : ' + serial_port
|
|
break
|
|
|
|
ser = serial.Serial(port=serial_port)
|
|
return
|
|
|
|
find_open_port()
|
|
print 'Using Serial port : ' + serial_port
|
|
|
|
#serial_port = '/dev/ttyUSB2'
|
|
bandrich_ppd_config = '$OPENAIR_DIR/cmake_targets/autotests/tools/wdial.bandrich.conf'
|
|
|
|
exit_flag=0
|
|
|
|
def signal_handler(signal, frame):
|
|
print('You pressed Ctrl+C!')
|
|
print('Resetting the UE to detached state')
|
|
timeout=10
|
|
exit_flag=1
|
|
send_command('AT+CGATT=0' , 'OK' , timeout)
|
|
sys.exit(0)
|
|
|
|
signal.signal(signal.SIGINT, signal_handler)
|
|
|
|
|
|
|
|
#ser.open()
|
|
#ser.isOpen()
|
|
|
|
class pppThread (threading.Thread):
|
|
def __init__(self, threadID, name, counter):
|
|
threading.Thread.__init__(self)
|
|
self.threadID = threadID
|
|
self.name = name
|
|
self.counter = counter
|
|
def run(self):
|
|
print "Starting " + self.name
|
|
#Here we keep running pppd thread in indefinite loop as this script terminates sometimes
|
|
#while 1:
|
|
while 1:
|
|
time.sleep(5) #Hard coded, do not reduce this number!
|
|
print "Starting wvdial now..."
|
|
print 'exit_flag = ' + str(exit_flag)
|
|
send_command('AT+CGATT=1','OK', 300)
|
|
os.system('wvdial -C ' + bandrich_ppd_config + '' )
|
|
if exit_flag == 1:
|
|
print "Exit flag set to true. Exiting pppThread now"
|
|
print "Terminating wvdial now..."
|
|
|
|
def send_command (cmd, response, timeout):
|
|
count=0
|
|
sleep_duration = 1
|
|
print 'In function: send_command: cmd ' + cmd + '> response: <' + response + '> \n'
|
|
global serial_port, ser
|
|
while count <= timeout:
|
|
try:
|
|
#Sometimes the port does not exist coz of reset in modem.
|
|
#In that case, we need to search for this port again
|
|
if os.path.exists(serial_port) == False:
|
|
find_open_port()
|
|
ser.write (cmd + '\r\n')
|
|
out = ''
|
|
time.sleep(sleep_duration)
|
|
count = count + sleep_duration
|
|
while ser.inWaiting() > 0:
|
|
out += ser.read(1)
|
|
print 'out = <' + out + '> response = <' + response + '> \n'
|
|
if re.search(response, out):
|
|
break
|
|
except Exception, e:
|
|
error = ' cmd : ' + cmd + ' response : ' + response
|
|
error = error + ' In function: ' + sys._getframe().f_code.co_name + ': *** Caught exception: ' + str(e.__class__) + " : " + str( e)
|
|
error = error + traceback.format_exc()
|
|
print error
|
|
|
|
|
|
def start_ue () :
|
|
#print 'Enter your commands below.\r\nInsert "exit" to leave the application.'
|
|
timeout=60 #timeout in seconds
|
|
send_command('AT', 'OK' , timeout)
|
|
send_command('AT+CGATT=0' , 'OK' , timeout)
|
|
send_command('AT+CGATT=1','OK', 300)
|
|
#os.system('wvdial -C ' + bandrich_ppd_config + ' &' )
|
|
|
|
thread_ppp = pppThread(1, "ppp_thread", 1)
|
|
thread_ppp.start()
|
|
|
|
iface='ppp0'
|
|
|
|
while 1:
|
|
time.sleep ( 2)
|
|
#Now we check if ppp0 interface is up and running
|
|
try:
|
|
if exit_flag == 1:
|
|
break
|
|
ip = IPRoute()
|
|
idx = ip.link_lookup(ifname=iface)[0]
|
|
os.system ('route add 192.172.0.1 ppp0')
|
|
break
|
|
except Exception, e:
|
|
error = ' Interface ' + iface + 'does not exist...'
|
|
error = error + ' In function: ' + sys._getframe().f_code.co_name + ': *** Caught exception: ' + str(e.__class__) + " : " + str( e)
|
|
error = error + traceback.format_exc()
|
|
print error
|
|
|
|
thread_ppp.join()
|
|
|
|
def stop_ue():
|
|
timeout=60
|
|
os.system('killall wvdial')
|
|
send_command('AT', 'OK' , timeout)
|
|
send_command('AT+CGATT=0' , 'OK' , timeout)
|
|
|
|
for arg in sys.argv[1:]:
|
|
if arg == '--start-ue' :
|
|
start_ue()
|
|
elif arg == '--stop-ue' :
|
|
stop_ue()
|
|
else :
|
|
print " Script called with wrong arguments, arg = " + arg
|
|
sys.exit()
|