#!/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
import os
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"

###################

## setup GPRS modem from FONA
##
system("ln -s /dev/ttyAMA0 /dev/ttyGPRS")


###################

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

  fqdevfn = join(DEVDIR,devfn)

  info = os.popen("udevadm info " + str(fqdevfn)).read()
  m = re.search(r'ID_MODEL=FT232R_USB_UART', info)
  if m:

    if VERBOSE:
      print "found rs232 device, assuming PIU"
    src_tty = join(DEVDIR,devfn)
    dst_tty = join(DEVDIR,"ttyPIU")
    system("ln -sf " + src_tty + " " + dst_tty)
    continue

  m = re.search(r'ID_MODEL_ID=2303', info)
  if m:

    if VERBOSE:
      print "found pl2303 device, assuming PIU"
    src_tty = join(DEVDIR,devfn)
    dst_tty = join(DEVDIR,"ttyPIU")
    system("ln -sf " + src_tty + " " + dst_tty)
    continue

  m = re.search(r'SimTech_SIM5320', info)
  if m:

    if VERBOSE:
      print "found sim5320 device"

    m_ifacenum = re.search(r'ID_USB_INTERFACE_NUM=(.*)', info)
    if m_ifacenum:

      num = int(m_ifacenum.group(1))
      if num == 3:
        if VERBOSE:
          print "tying sim5320 interface num 3 to GPS"

        src_tty = join(DEVDIR,devfn)
        dst_tty = join(DEVDIR,"ttyGPS")
        system("ln -s " + src_tty + " " + dst_tty)
        continue


