Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/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
- 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)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement