summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorReiner Herrmann <reiner@reiner-h.de>2012-03-29 18:48:51 +0200
committerReiner Herrmann <reiner@reiner-h.de>2016-01-31 23:02:00 +0100
commit506c6850a4d10a1f4f5c4f7b1963d1780cd00297 (patch)
tree402e85afba117fa114e12289fa99620f21017d87
parent6ef1f450bdf6dc45efb20375b69ad82989a4f29e (diff)
added umtsmodem script
-rwxr-xr-xumtsmodem.py109
1 files changed, 109 insertions, 0 deletions
diff --git a/umtsmodem.py b/umtsmodem.py
new file mode 100755
index 0000000..d0afaea
--- /dev/null
+++ b/umtsmodem.py
@@ -0,0 +1,109 @@
+#!/usr/bin/python
+
+import serial
+import sys
+import re
+
+modem_device = "/dev/ttyACM1"
+apn = "web.vodafone.de"
+
+
+def send_command(modem, cmd, text):
+ modem.write(cmd)
+ print text + ": ",
+ response = modem.readlines()
+ print ('ERROR\r\n' in response and "Error" or "OK")
+ return response
+
+
+def get_pin_state(modem):
+ modem.write('AT+CPIN?\r')
+ response = modem.readlines()
+ if "+CPIN: SIM PIN\r\n" in response:
+ return False
+ elif "+CPIN: READY\r\n" in response:
+ return True
+ else:
+ print "[get_pin_state] Unknown response",
+ print response
+ return False
+
+
+def print_state(modem):
+ modem.timeout = 0.1
+ modem.write('AT+CSQ\r')
+ response = modem.readlines()
+ for line in response:
+ if line.startswith('+CSQ: '):
+ signal = line.rstrip()[6:].split(',')[0]
+ print "Signal: " + signal + "/31"
+ break
+
+ modem.write('AT+CIMI\r')
+ response = modem.readlines()
+ for line in response:
+ if re.match(r'^\d+$', line.strip()): # check if line is a number (IMSI)
+ mcc = line[:3]
+ mnc = line[3:5]
+ break
+ modem.write('AT+CREG=2\r')
+ modem.readlines()
+ modem.write('AT+CREG?\r')
+ response = modem.readlines()
+ modem.write('AT+CREG=0\r')
+ modem.readlines()
+ for line in response:
+ if line.startswith('+CREG: '):
+ lac = int(line.rstrip()[7:].split(',')[2].strip('"'), 16)
+ cellid = int(line.rstrip()[7:].split(',')[3].strip('"'), 16)
+ break
+ print "MCC: " + mcc + ", MNC: " + mnc + ", LAC: " + str(lac) + ", CellID: " + str(cellid)
+
+
+
+def start_modem(modem):
+ if not get_pin_state(modem):
+ pin = raw_input("Please enter PIN: ")
+ send_command(modem, 'AT+CPIN="' + pin + '"\r', "Sending PIN")
+ send_command(modem, 'AT+CFUN=1\r', "Starting modem")
+
+
+def connect(modem):
+ send_command(modem, 'AT+CGDCONT=1,"IP","' + apn + '"\r', "Setting up")
+ send_command(modem, 'AT*ENAP=1,1\r', "Connecting")
+
+
+def disconnect(modem):
+ send_command(modem, 'AT*ENAP=0\r', "Disconnecting")
+
+
+def stop_modem(modem):
+ send_command(modem, 'AT+CFUN=4\r', "Stopping")
+
+
+def show_usage():
+ print "Usage: " + sys.argv[0] + " [connect|disconnect|state]"
+
+if len(sys.argv) != 2:
+ show_usage()
+ sys.exit(0)
+
+modem = serial.Serial(modem_device, timeout=0.5)
+modem.readlines()
+
+if sys.argv[1] == "connect":
+ start_modem(modem)
+ connect(modem)
+elif sys.argv[1] == "disconnect":
+ disconnect(modem)
+ stop_modem(modem)
+elif sys.argv[1] == "state":
+ print_state(modem)
+elif sys.argv[1] == "cells":
+ print_cells(modem)
+else:
+ show_usage()
+
+
+modem.close()
+