#!/usr/bin/lua -- Created by jiaqiang.ye@lnxall.com -- Refer to `reset_modem function in `/lib/dyiot/bin/get_hardware -- 2023/05/09 local posix = require "posix" local invoker = require "invoker" local function reset_ttyusb() local mdev = invoker.readfile('/tmp/4g_modem_tty', invoker.TRIMEND) if type(mdev) ~= 'string' or #mdev == 0 then io.stderr:write("Error, failed to read /tmp/4g_modem_tty\n") io.stderr:flush() return false end if posix.access(mdev) ~= 0 then io.stderr:write(string.format("Error, 4g_modem_tty not found: '%s'\n", mdev)) io.stderr:flush() return false end posix.setenv('TTY_READ', '0', true) if invoker.invoke(0, 'tty_rw', mdev, "AT+RESET\r\n") ~= 0 then io.stderr:write("Error, failed to reset ttyUSB!\n") io.stderr:flush() return false end return true end local function reload_gpio() local board = invoker.readfile('/tmp/sysinfo/board_name', invoker.TRIMEND) if board ~= 'WOOLINK-MT7628-128M-32M' then return false end io.stderr:write("Warning, reload 4G modem GPIO...\n") invoker.invoke(invoker.NOSTDIO, '/bin/sh', '-c', 'echo 5 >/sys/class/gpio/export') invoker.invoke(invoker.NOSTDIO, '/bin/sh', '-c', 'echo out >/sys/class/gpio/gpio5/direction') invoker.invoke(invoker.NOSTDIO, '/bin/sh', '-c', 'echo 0 >/sys/class/gpio/gpio5/value') invoker.waitsec(2) invoker.invoke(invoker.NOSTDIO, '/bin/sh', '-c', 'echo 1 >/sys/class/gpio/gpio5/value') return true end reset_ttyusb() reload_gpio() os.exit(0)