|
@@ -0,0 +1,117 @@
|
|
|
|
|
+#!/usr/bin/python
|
|
|
|
|
+#
|
|
|
|
|
+# Copyright (c) 2019 Clementine Computing LLC.
|
|
|
|
|
+#
|
|
|
|
|
+# This file is part of PopuFare.
|
|
|
|
|
+#
|
|
|
|
|
+# PopuFare is free software: you can redistribute it and/or modify
|
|
|
|
|
+# it under the terms of the GNU Affero General Public License as published by
|
|
|
|
|
+# the Free Software Foundation, either version 3 of the License, or
|
|
|
|
|
+# (at your option) any later version.
|
|
|
|
|
+#
|
|
|
|
|
+# PopuFare is distributed in the hope that it will be useful,
|
|
|
|
|
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
|
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
|
+# GNU Affero General Public License for more details.
|
|
|
|
|
+#
|
|
|
|
|
+# You should have received a copy of the GNU Affero General Public License
|
|
|
|
|
+# along with PopuFare. If not, see <https://www.gnu.org/licenses/>.
|
|
|
|
|
+#
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+import serial
|
|
|
|
|
+import sys
|
|
|
|
|
+import re
|
|
|
|
|
+import time
|
|
|
|
|
+from os import listdir
|
|
|
|
|
+from os.path import isfile, join
|
|
|
|
|
+from os import system
|
|
|
|
|
+
|
|
|
|
|
+DEBUG = True
|
|
|
|
|
+VERBOSE = True
|
|
|
|
|
+
|
|
|
|
|
+ret = system("rm -f /dev/ttyPIU /dev/ttyGPRS /dev/ttyDIU /dev/ttyGPS")
|
|
|
|
|
+
|
|
|
|
|
+DEVDIR = "/dev"
|
|
|
|
|
+
|
|
|
|
|
+###################
|
|
|
|
|
+
|
|
|
|
|
+# sniff for our GPS
|
|
|
|
|
+#
|
|
|
|
|
+ttyfn = [f for f in listdir(DEVDIR) if re.match(r'^ttyACM', f)]
|
|
|
|
|
+for devfn in ttyfn:
|
|
|
|
|
+ if DEBUG: print devfn
|
|
|
|
|
+ ser = serial.Serial(join(DEVDIR,devfn), 9600, bytesize=8, parity='N', stopbits=1, timeout=1, xonxoff=0, rtscts=0)
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ x0 = ser.readline()
|
|
|
|
|
+ if DEBUG: print "at n (0):", x0
|
|
|
|
|
+ x1 = ser.readline()
|
|
|
|
|
+ if DEBUG: print "at n (1):", x1
|
|
|
|
|
+ x2 = ser.readline()
|
|
|
|
|
+ if DEBUG: print "at n (2):", x2
|
|
|
|
|
+ time.sleep(1)
|
|
|
|
|
+
|
|
|
|
|
+ if (re.match(r'^\$GP', x0) or
|
|
|
|
|
+ re.match(r'^\$GP', x1) or
|
|
|
|
|
+ re.match(r'^\$GP', x2)):
|
|
|
|
|
+ src_tty = join(DEVDIR,devfn)
|
|
|
|
|
+ dst_tty = join(DEVDIR,"ttyGPS")
|
|
|
|
|
+
|
|
|
|
|
+ if VERBOSE:
|
|
|
|
|
+ print src_tty, "->", dst_tty
|
|
|
|
|
+
|
|
|
|
|
+ system("ln -s " + src_tty + " " + dst_tty)
|
|
|
|
|
+
|
|
|
|
|
+ ser.close()
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+###################
|
|
|
|
|
+
|
|
|
|
|
+ttyfn = [f for f in listdir(DEVDIR) if re.match(r'^ttyUSB', f)]
|
|
|
|
|
+
|
|
|
|
|
+# sniff for GPRS and PIU
|
|
|
|
|
+#
|
|
|
|
|
+for devfn in ttyfn:
|
|
|
|
|
+ if DEBUG: print devfn
|
|
|
|
|
+ ser = serial.Serial(join(DEVDIR,devfn), 115200, bytesize=8, parity='N', stopbits=1, timeout=1, xonxoff=0, rtscts=0)
|
|
|
|
|
+
|
|
|
|
|
+ ser.write("\rAT\r")
|
|
|
|
|
+ ser.flush()
|
|
|
|
|
+ x0 = ser.readline()
|
|
|
|
|
+ if DEBUG: print "at n (0):", x0
|
|
|
|
|
+ x1 = ser.readline()
|
|
|
|
|
+ if DEBUG: print "at n (1):", x1
|
|
|
|
|
+ x2 = ser.readline()
|
|
|
|
|
+ if DEBUG: print "at n (2):", x2
|
|
|
|
|
+ time.sleep(1)
|
|
|
|
|
+
|
|
|
|
|
+ x0 = x0.strip()
|
|
|
|
|
+ x1 = x1.strip()
|
|
|
|
|
+ x2 = x2.strip()
|
|
|
|
|
+
|
|
|
|
|
+ if (x0 == "ok" or x0 == "OK" or
|
|
|
|
|
+ x1 == "ok" or x1 == "OK" or
|
|
|
|
|
+ x2 == "ok" or x2 == "OK"):
|
|
|
|
|
+ src_tty = join(DEVDIR,devfn)
|
|
|
|
|
+ dst_tty = join(DEVDIR,"ttyGPRS")
|
|
|
|
|
+
|
|
|
|
|
+ if VERBOSE:
|
|
|
|
|
+ print src_tty, "->", dst_tty
|
|
|
|
|
+
|
|
|
|
|
+ system("ln -s " + src_tty + " " + dst_tty)
|
|
|
|
|
+
|
|
|
|
|
+ if (x0[0:4] == "/?: " or
|
|
|
|
|
+ x1[0:4] == "/?: " or
|
|
|
|
|
+ x2[0:4] == "/?: "):
|
|
|
|
|
+ src_tty = join(DEVDIR,devfn)
|
|
|
|
|
+ dst_tty = join(DEVDIR,"ttyPIU")
|
|
|
|
|
+
|
|
|
|
|
+ if VERBOSE:
|
|
|
|
|
+ print src_tty, "->", dst_tty
|
|
|
|
|
+
|
|
|
|
|
+ system("ln -s " + src_tty + " " + dst_tty)
|
|
|
|
|
+
|
|
|
|
|
+ ser.close()
|
|
|
|
|
+
|
|
|
|
|
+
|