2023-04-11 21:15:01 +08:00

248 lines
4.5 KiB
Lua

#!/usr/bin/lua
drv = {}
idV = arg[1]
idP = arg[2]
pflag = arg[3]
if pflag == nil then
pflag = 1
end
special = {}
-- PPP special cases
-- VID PID port #
special[1] = "1bbb" ; special[2] = "0017" ; special[3] = 13
special[4] = "12d1" ; special[5] = nil ; special[6] = 10
special[7] = "1546" ; special[8] = "01a6" ; special[9] = 0
special[10] = "1546" ; special[11] = "01a5" ; special[12] = 0
special[13] = "1199" ; special[14] = "68a3" ; special[15] = 14
special[16] = "2001" ; special[17] = "7e35" ; special[18] = 15
retval = 0
echo = 1
printf = function(s,...)
if pflag ~= 0 then
io.write(s:format(...))
local ss = s:format(...)
if echo == 1 then
os.execute("/usr/lib/rooter/logprint.sh " .. ss)
end
end
end
function trim(s)
return (s:gsub("^%s*(.-)%s*$", "%1"))
end
function checkserial()
local got = 0
j = 1
repeat
if drv[j] ~= nil then
if drv[j] == "option" or drv[j] == "qcserial" or drv[j] == "usb_serial" or drv[j] == "sierra" then
got = 1
break
end
j = j + 1
end
until drv[j] == nil
return got
end
function countserial()
local got = 0
j = 1
repeat
if drv[j] ~= nil then
if drv[j] == "option" or drv[j] == "sierra" or drv[j] == "usb_serial" or drv[j] == "qcserial" then
got = got + 1
end
j = j + 1
end
until drv[j] == nil
return got
end
-- MAIN
local t = {}
local i=0
local file = io.open("/tmp/wdrv", "r")
repeat
local line = file:read("*line")
if line == nil then
break
end
if string.len(line) > 5 then
s, e = line:find("Vendor=")
if s ~= nil then
cs, ce = line:find(" ", e)
m_idV = trim(line:sub(e+1, cs-1))
s, e = line:find("ProdID=")
cs, ce = line:find(" ", e)
m_idP = trim(line:sub(e+1, cs-1))
if m_idV == idV and m_idP == idP then
repeat
line = file:read("*line")
if line == nil then
break
end
if string.len(line) > 5 then
s, e = line:find("T:")
if s ~= nil then
break
end
s, e = line:find("Cls=02")
if s ~= nil then
t[i] = trim(line:sub(63))
i = i + 1
end
s, e = line:find("Cls=ff")
if s ~= nil then
t[i] = trim(line:sub(63))
i = i + 1
end
s, e = line:find("1 Cls=e0")
if s ~= nil then
t[i] = trim(line:sub(63))
i = i + 1
end
s, e = line:find("Cls=0a")
if s ~= nil then
t[i] = trim(line:sub(63))
i = i + 1
end
s, e = line:find("Cls=0e")
if s ~= nil then
t[i] = trim(line:sub(63))
i = i + 1
end
s, e = line:find("Cls=07")
if s ~= nil then
t[i] = trim(line:sub(63))
i = i + 1
end
s, e = line:find("Cls=08")
if s ~= nil then
t[i] = trim(line:sub(63))
i = i + 1
end
end
until 1==0
break
end
end
end
until 1==0
file:close()
if i > 0 then
file = io.open("/tmp/drv", "w")
for j=0,i-1 do
drv[j+1] = t[j]
drver = string.format("%s%d%s%q", "DRIVER", j+1, "=", t[j])
file:write(drver .. "\n")
end
ports = countserial()
drver = string.format("%s%s%d%s", "PORTN", "=\"", ports, "\"")
file:write(drver .. "\n")
file:close()
end
i = 1
repeat
if drv[i] ~= nil then
printf("Driver Name : %d %s\n", i, drv[i])
i = i + 1
end
until drv[i] == nil
i = 1
repeat
if drv[i] ~= nil then
if drv[i] == "sierra_net" then
retval = 1
break
end
if drv[i] == "qmi_wwan" then
retval = 2
break
end
if drv[i] == "cdc_mbim" then
retval = 3
break
end
if drv[i] == "huawei_cdc_ncm" then
if i == 2 then
retval = 4
else
if i == 3 then
retval = 6
else
retval = 7
end
end
break
end
if drv[i] == "cdc_ncm" then
if i == 2 then
retval = 24
else
if i == 3 then
retval = 26
else
retval = 27
end
end
break
end
if drv[i] == "cdc_ether" or drv[i] == "rndis_host" then
retval = 5
break
end
if drv[i] == "ipheth" then
retval = 9
break
end
if drv[i] == "uvcvideo" then
retval = 99
break
end
if drv[i] == "usblp" then
retval = 98
break
end
if drv[i] == "usb-storage" then
retval = 97
end
i = i + 1
end
until drv[i] == nil
if retval == 0 then
if checkserial() == 1 then
retval = 11
k = 1
vendor = special[k]
while vendor ~= nil do
if idV == vendor then
if special[k+1] == nil then
retval = special[k+2]
break
else
if special[k+1] == idP then
retval = special[k+2]
break
end
end
end
k = k + 3
vendor = special[k]
end
end
end
os.exit(retval)