Add sim-config and reorder modem related scripts
BugzID: 56371
This commit is contained in:
parent
c3135842b5
commit
d146532b31
|
|
@ -1,6 +1,6 @@
|
||||||
[Unit]
|
[Unit]
|
||||||
Before=ModemManager.service
|
Before=ModemManager.service
|
||||||
After=ublox-config.service
|
After=sim-config.service
|
||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
Type=oneshot
|
Type=oneshot
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,109 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import serial
|
||||||
|
import os
|
||||||
|
import time
|
||||||
|
import configparser
|
||||||
|
import sys
|
||||||
|
|
||||||
|
CONFIG = '/etc/sim.conf'
|
||||||
|
SERIAL_DEV = '/dev/ttyACM0'
|
||||||
|
GPIO_PATH = '/sys/class/gpio/'
|
||||||
|
GPIO_SIM_SW = '44'
|
||||||
|
GPIO_SIM_RST = '57'
|
||||||
|
RST_FILE = '/tmp/modem-reset-required'
|
||||||
|
|
||||||
|
rst = False
|
||||||
|
|
||||||
|
def write_to_file(file, value):
|
||||||
|
f = open(file, 'w')
|
||||||
|
f.write(value)
|
||||||
|
f.close()
|
||||||
|
|
||||||
|
def reset_modem():
|
||||||
|
print("modem reset")
|
||||||
|
write_to_file(GPIO_PATH + 'export', GPIO_SIM_RST)
|
||||||
|
write_to_file(GPIO_PATH + 'gpio' + GPIO_SIM_RST + '/direction', 'out')
|
||||||
|
write_to_file(GPIO_PATH + 'gpio' + GPIO_SIM_RST + '/value', '1')
|
||||||
|
time.sleep(2)
|
||||||
|
write_to_file(GPIO_PATH + 'gpio' + GPIO_SIM_RST + '/value', '0')
|
||||||
|
print("reset done")
|
||||||
|
# Wait until modem rebooted
|
||||||
|
while True:
|
||||||
|
dirs = os.listdir("/dev")
|
||||||
|
for file in dirs:
|
||||||
|
if file == 'ttyACM2':
|
||||||
|
sys.exit(0);
|
||||||
|
time.sleep(1)
|
||||||
|
|
||||||
|
def is_rst_required():
|
||||||
|
global rst
|
||||||
|
if rst:
|
||||||
|
return True
|
||||||
|
elif os.path.exists(RST_FILE):
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
|
||||||
|
def switch_sim():
|
||||||
|
global rst
|
||||||
|
write_to_file(GPIO_PATH + 'export', GPIO_SIM_SW)
|
||||||
|
write_to_file(GPIO_PATH + 'gpio' + GPIO_SIM_SW + '/direction', 'out')
|
||||||
|
write_to_file(GPIO_PATH + 'gpio' + GPIO_SIM_SW + '/value', '0')
|
||||||
|
rst = True
|
||||||
|
|
||||||
|
def sim_present(ser):
|
||||||
|
cmd = b'AT+CCID?'
|
||||||
|
while True:
|
||||||
|
try:
|
||||||
|
ser.flushInput()
|
||||||
|
ser.write(cmd)
|
||||||
|
ser.write(b'\r')
|
||||||
|
s = ser.read_until(b'OK')
|
||||||
|
if b'ERROR' in s:
|
||||||
|
return False
|
||||||
|
elif b'OK' in s:
|
||||||
|
return True
|
||||||
|
except Exception as e:
|
||||||
|
print("Exception : " + str(e))
|
||||||
|
time.sleep(1)
|
||||||
|
|
||||||
|
return s
|
||||||
|
|
||||||
|
|
||||||
|
def check_sim_presence():
|
||||||
|
while not os.path.exists(SERIAL_DEV):
|
||||||
|
time.sleep(1)
|
||||||
|
|
||||||
|
ser = serial.Serial(SERIAL_DEV, 115200, timeout=0.5)
|
||||||
|
while True:
|
||||||
|
try:
|
||||||
|
ser.read()
|
||||||
|
break
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
|
||||||
|
if sim_present(ser):
|
||||||
|
print("sim present")
|
||||||
|
else:
|
||||||
|
print("no sim, switching to esim")
|
||||||
|
switch_sim()
|
||||||
|
ser.close()
|
||||||
|
|
||||||
|
def read_config():
|
||||||
|
config = configparser.ConfigParser()
|
||||||
|
config.read(CONFIG)
|
||||||
|
print(config.get('default', 'SIM'))
|
||||||
|
sim = config.get('default', 'SIM')
|
||||||
|
if sim == 'auto':
|
||||||
|
check_sim_presence()
|
||||||
|
elif sim == 'esim' or sim == 'ui-top':
|
||||||
|
switch_sim()
|
||||||
|
# ui-btm and main are default
|
||||||
|
if is_rst_required():
|
||||||
|
reset_modem()
|
||||||
|
|
||||||
|
|
||||||
|
read_config();
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,11 @@
|
||||||
|
[Unit]
|
||||||
|
After=ublox-config.service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=oneshot
|
||||||
|
ExecStart=/usr/bin/sim-config
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=ModemManager.service
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
[default]
|
||||||
|
#SIM=esim
|
||||||
|
#SIM=main
|
||||||
|
#SIM=ui-top
|
||||||
|
#SIM=ui-btm
|
||||||
|
SIM=auto
|
||||||
|
|
||||||
|
|
@ -0,0 +1,43 @@
|
||||||
|
SUMMARY = "Select the wanted sim card"
|
||||||
|
DESCRIPTION = "Allows to select which sim card to use from a config file"
|
||||||
|
AUTHOR = "Alexandre Bard"
|
||||||
|
|
||||||
|
SECTION = "connectivity"
|
||||||
|
LICENSE = "GPLv2+"
|
||||||
|
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/GPL-2.0;md5=801f80980d171dd6425610833a22dbe6"
|
||||||
|
PR = "r2"
|
||||||
|
|
||||||
|
RDEPENDS_${PN}="python3-pyserial"
|
||||||
|
|
||||||
|
inherit systemd
|
||||||
|
|
||||||
|
SRC_URI = " \
|
||||||
|
file://sim-config.service \
|
||||||
|
file://sim-config.py \
|
||||||
|
file://sim.conf \
|
||||||
|
"
|
||||||
|
|
||||||
|
S = "${WORKDIR}"
|
||||||
|
|
||||||
|
INHIBIT_PACKAGE_DEBUG_SPLIT = "1"
|
||||||
|
|
||||||
|
SYSTEMD_SERVICE_${PN} = "sim-config.service"
|
||||||
|
SYSTEMD_AUTO_ENABLE ?= "enable"
|
||||||
|
|
||||||
|
FILES_${PN}_append = " \
|
||||||
|
/lib \
|
||||||
|
/usr \
|
||||||
|
/etc \
|
||||||
|
"
|
||||||
|
|
||||||
|
do_install () {
|
||||||
|
install -d ${D}${systemd_unitdir}/system/
|
||||||
|
install -m 0644 sim-config.service ${D}${systemd_unitdir}/system/
|
||||||
|
|
||||||
|
install -d ${D}/usr/bin
|
||||||
|
install -m 0755 sim-config.py ${D}/usr/bin/sim-config
|
||||||
|
|
||||||
|
install -d ${D}/etc
|
||||||
|
install -m 0644 sim.conf ${D}/etc/
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -41,14 +41,10 @@ execute_and_check(b'AT+UUSBCONF=2,"ECM",0')
|
||||||
|
|
||||||
|
|
||||||
print("Resetting modem")
|
print("Resetting modem")
|
||||||
ser.write(b'AT+CFUN=16\r')
|
# Let the reset be done by sim-config to avoid 2 resets
|
||||||
|
# ser.write(b'AT+CFUN=16\r')
|
||||||
|
f = open('/tmp/modem-reset-required', 'w')
|
||||||
|
f.write('1')
|
||||||
|
f.close()
|
||||||
|
|
||||||
ser.close()
|
ser.close()
|
||||||
|
|
||||||
# Wait until modem rebooted
|
|
||||||
while True:
|
|
||||||
dirs = os.listdir("/dev")
|
|
||||||
for file in dirs:
|
|
||||||
if file == 'ttyACM2':
|
|
||||||
sys.exit(0);
|
|
||||||
time.sleep(1)
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
[Unit]
|
[Unit]
|
||||||
Before=ModemManager.service
|
Before=sim-config.service
|
||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
Type=oneshot
|
Type=oneshot
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue