Files
BR_YKC/4G/源代码/lib/pb.lua
2026-05-21 13:24:05 +08:00

117 lines
3.2 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
--- 模块功能:电话簿管理
-- @module pb
-- @author openLuat
-- @license MIT
-- @copyright openLuat
-- @release 2018.03.10
module(..., package.seeall)
require"ril"
local req = ril.request
local storagecb,readcb,writecb,deletecb
local curPb = "SM"
--- 设置电话本存储区域
-- @string storage 存储区域字符串,仅支持"SM"
-- @param cb 设置后的回调函数
--
-- 回调方式为cb(result)result为true表示成功false或者nil表示失败
-- @return 无
-- @usage pb.setStorage(storage,cb)
function setStorage(storage,cb)
if storage=="SM" or storage=="FD" then
storagecb = cb
req("AT+CPBS=\"" .. storage .. "\"" )
end
end
--- 读取一条电话本记录
-- @number index 电话本在存储区的位置
-- @function cb function类型读取后的回调函数
--
-- 回调方式为cb(result,name,number)result为true表示成功false或者nil表示失败name为姓名number为号码
-- @usage pb.read(1,cb)
function read(index,cb)
if index == "" or index == nil then
return false
end
readcb = cb
req("AT+CPBR=" .. index)
end
--- 写入一条电话本记录
-- @number index 电话本在存储区的位置
-- @string name 姓名
-- @string num 号码
-- @function cb functionl类型写入后的回调函数
--
-- 回调方式为cb(result)result为true表示成功false或者nil表示失败
-- @return 无
-- @usage pb.write(1,"zhangsan","13233334444",cb)
function write(index,name,num,cb)
if num == nil or name == nil or index == nil then
return false
end
writecb = cb
req("AT+CPBW=" .. index .. ",\"" .. num .. "\"," .. "129" .. ",\"" .. name .. "\"" )
return true
end
--- 删除一条电话本记录
-- @number index 电话本在存储区的位置
-- @function cb function类型删除后的回调函数
--
-- 回调方式为cb(result)result为true表示成功false或者nil表示失败
-- @return 无
-- @usage pb.delete(1,cb)
function delete(index,cb)
if index == "" or index == nil then
return false
end
deletecb = cb
req("AT+CPBW=" .. index)
return true
end
local function pbrsp(cmd,success,response,intermediate)
local prefix = string.match(cmd,"AT(%+%u+%?*)")
intermediate = intermediate or ""
if prefix == "+CPBR" then
local index = string.match(cmd,"AT%+CPBR%s*=%s*(%d+)")
local num,name = string.match(intermediate,"+CPBR:%s*%d+,\"([#%*%+%d]*)\",%d+,\"(%w*)\"")
num,name = num or "",name or ""
sys.publish("PB_READ_CNF",success,index,num,name)
local cb = readcb
readcb = nil
if cb then cb(success,name,num) return end
elseif prefix == "+CPBW" then
sys.publish("PB_WRITE_CNF",success)
local cb = writecb
writecb = nil
if cb then cb(success) return end
cb = deletecb
deletecb = nil
if cb then cb(success) return end
elseif prefix == "+CPBS?" then
local storage,used,total = string.match(intermediate,"+CPBS:%s*\"(%u+)\",(%d+),(%d+)")
used,total = tonumber(used),tonumber(total)
sys.publish("CPBS_READ_CNF",success,storage,used,total)
elseif prefix == "+CPBS" then
local cb = storagecb
storagecb = nil
if cb then cb(success) return end
end
end
ril.regRsp("+CPBR",pbrsp)
ril.regRsp("+CPBW",pbrsp)
ril.regRsp("+CPBS",pbrsp)
ril.regRsp("+CPBS?",pbrsp)
req("AT+CPBS=\"SM\"")