diff options
| author | Reiner Herrmann <reiner@reiner-h.de> | 2012-03-29 18:48:51 +0200 |
|---|---|---|
| committer | Reiner Herrmann <reiner@reiner-h.de> | 2016-01-31 23:02:00 +0100 |
| commit | 506c6850a4d10a1f4f5c4f7b1963d1780cd00297 (patch) | |
| tree | 402e85afba117fa114e12289fa99620f21017d87 /umtsmodem.py | |
| parent | 6ef1f450bdf6dc45efb20375b69ad82989a4f29e (diff) | |
added umtsmodem script
Diffstat (limited to 'umtsmodem.py')
| -rwxr-xr-x | umtsmodem.py | 109 |
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() + |
