2025年7月23日
							parent
							
								
									34ebafacdc
								
							
						
					
					
						commit
						76c798cddd
					
				| 
						 | 
				
			
			@ -0,0 +1,252 @@
 | 
			
		|||
local _C = {
 | 
			
		||||
    TAG = "【配置】"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
-- 日志等级
 | 
			
		||||
-- log.setLevel("INFO")
 | 
			
		||||
-- OTA密钥
 | 
			
		||||
PRODUCT_KEY = "0VrZxxSwrI7qE3GU8ddLFww5FbP3DqQu"
 | 
			
		||||
-- 默认配置
 | 
			
		||||
local default_config = {
 | 
			
		||||
    -- 联网最长等待时间(秒)
 | 
			
		||||
    -- ip_ready_timeout_s = 30,
 | 
			
		||||
    -- 配置接口地址
 | 
			
		||||
    config_url = "http://miot.xaxi.cn/app/device/conf/",
 | 
			
		||||
    -- http请求最长等待时间(毫秒)
 | 
			
		||||
    http_timeout_ms = 1000 * 3,
 | 
			
		||||
    -- 数据上传频率(秒)
 | 
			
		||||
    d_u = 600,
 | 
			
		||||
    -- gps上传模式 0不上传,1开机上传,2跟随数据上传
 | 
			
		||||
    g_u = 2,
 | 
			
		||||
    -- 是否需要0TA更新 1更新 0不更新
 | 
			
		||||
    ota = 1,
 | 
			
		||||
    -- 屏幕数据刷新频率(秒) 0不刷新并息屏
 | 
			
		||||
    s_u = 5,
 | 
			
		||||
    -- 接口请求timeout时间(秒)
 | 
			
		||||
    t_o = 5
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function _C.init()
 | 
			
		||||
    if not fskv.init() then return 1 end
 | 
			
		||||
    local used, total, kv_count = fskv.status()
 | 
			
		||||
    if not (used and total and kv_count) then return 2 end
 | 
			
		||||
    if kv_count == 0 and not fskv.set("config", default_config) then return 3 end
 | 
			
		||||
    return 0
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
-- local function get_ip_ready_timeout_s()
 | 
			
		||||
--     local timeout = fskv.get("config", "ip_ready_timeout_s")
 | 
			
		||||
--     return (type(timeout) == "number") and timeout or default_config.ip_ready_timeout_s
 | 
			
		||||
-- end
 | 
			
		||||
 | 
			
		||||
-- local function set_ip_ready_timeout_s(v)
 | 
			
		||||
--     if type(v) ~= "number" then
 | 
			
		||||
--         log.warn(COSO, _C.TAG, "缺少 ip_ready_timeout_s 字段")
 | 
			
		||||
--         return
 | 
			
		||||
--     end
 | 
			
		||||
--     local _ip_ready_timeout_s = get_ip_ready_timeout_s()
 | 
			
		||||
--     if v == _ip_ready_timeout_s then return end
 | 
			
		||||
--     if v < 10 or v > 30 then
 | 
			
		||||
--         log.error(COSO, _C.TAG, "ip_ready_timeout_s 校验失败", v)
 | 
			
		||||
--         return
 | 
			
		||||
--     end
 | 
			
		||||
--     if not fskv.sett("config", "ip_ready_timeout_s", v) then
 | 
			
		||||
--         log.error(COSO, _C.TAG, "更新失败 ip_ready_timeout_s", v)
 | 
			
		||||
--     end
 | 
			
		||||
--     log.info(COSO, _C.TAG, "更新成功 ip_ready_timeout_s", v)
 | 
			
		||||
-- end
 | 
			
		||||
 | 
			
		||||
local function get_config_url()
 | 
			
		||||
    local url = fskv.get("config", "config_url")
 | 
			
		||||
    url = (type(url) == "string" and #url > 0) and url or default_config.config_url
 | 
			
		||||
    return url .. mobile.imei()
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local function set_config_url(v)
 | 
			
		||||
    if type(v) ~= "string" then
 | 
			
		||||
        log.warn(COSO, _C.TAG, "缺少 config_url 字段")
 | 
			
		||||
        return
 | 
			
		||||
    end
 | 
			
		||||
    local _config_url = get_config_url()
 | 
			
		||||
    if v == _config_url then return end
 | 
			
		||||
    if not fskv.sett("config", "config_url", v) then
 | 
			
		||||
        log.error(COSO, _C.TAG, "更新失败 config_url", v)
 | 
			
		||||
    end
 | 
			
		||||
    log.info(COSO, _C.TAG, "更新成功 config_url", v)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local function get_http_timeout_ms()
 | 
			
		||||
    local timeout = fskv.get("config", "http_timeout_ms")
 | 
			
		||||
    return (type(timeout) == "number") and timeout or default_config.http_timeout_ms
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local function set_http_timeout_ms(v)
 | 
			
		||||
    if type(v) ~= "number" then
 | 
			
		||||
        log.warn(COSO, _C.TAG, "缺少 http_timeout_ms 字段")
 | 
			
		||||
        return
 | 
			
		||||
    end
 | 
			
		||||
    local _http_timeout_ms = get_http_timeout_ms()
 | 
			
		||||
    if v == _http_timeout_ms then return end
 | 
			
		||||
    if v < 1000 or v > 5000 then
 | 
			
		||||
        log.error(COSO, _C.TAG, "http_timeout_ms 校验失败", v)
 | 
			
		||||
        return
 | 
			
		||||
    end
 | 
			
		||||
    if not fskv.sett("config", "http_timeout_ms", v) then
 | 
			
		||||
        log.error(COSO, _C.TAG, "更新失败 http_timeout_ms", v)
 | 
			
		||||
    end
 | 
			
		||||
    log.info(COSO, _C.TAG, "更新成功 http_timeout_ms", v)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local function get_d_u()
 | 
			
		||||
    local d_u = fskv.get("config", "d_u")
 | 
			
		||||
    return (type(d_u) == "number") and d_u or default_config.d_u
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local function set_d_u(v)
 | 
			
		||||
    if type(v) ~= "number" then
 | 
			
		||||
        log.warn(COSO, _C.TAG, "缺少 d_u 字段")
 | 
			
		||||
        return
 | 
			
		||||
    end
 | 
			
		||||
    local _d_u = get_d_u()
 | 
			
		||||
    if v == _d_u then return end
 | 
			
		||||
    if v < 10 or v > 3600 then
 | 
			
		||||
        log.error(COSO, _C.TAG, "d_u 校验失败", v)
 | 
			
		||||
        return
 | 
			
		||||
    end
 | 
			
		||||
    if not fskv.sett("config", "d_u", v) then
 | 
			
		||||
        log.error(COSO, _C.TAG, "更新失败 d_u", v)
 | 
			
		||||
    end
 | 
			
		||||
    log.info(COSO, _C.TAG, "更新成功 d_u", v)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local function get_g_u()
 | 
			
		||||
    local g_u = fskv.get("config", "g_u")
 | 
			
		||||
    return (type(g_u) == "number") and g_u or default_config.g_u
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local function set_g_u(v)
 | 
			
		||||
    if type(v) ~= "number" then
 | 
			
		||||
        log.warn(COSO, _C.TAG, "缺少 g_u 字段")
 | 
			
		||||
        return
 | 
			
		||||
    end
 | 
			
		||||
    local _g_u = get_g_u()
 | 
			
		||||
    if v == _g_u then return end
 | 
			
		||||
    if v < 0 or v > 2 then
 | 
			
		||||
        log.error(COSO, _C.TAG, "g_u 校验失败", v)
 | 
			
		||||
        return
 | 
			
		||||
    end
 | 
			
		||||
    if not fskv.sett("config", "g_u", v) then
 | 
			
		||||
        log.error(COSO, _C.TAG, "更新失败 g_u", v)
 | 
			
		||||
    end
 | 
			
		||||
    log.info(COSO, _C.TAG, "更新成功 g_u", v)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local function get_ota()
 | 
			
		||||
    local ota = fskv.get("config", "ota")
 | 
			
		||||
    return (type(ota) == "number") and ota or default_config.ota
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local function set_ota(v)
 | 
			
		||||
    if type(v) ~= "number" then
 | 
			
		||||
        log.warn(COSO, _C.TAG, "缺少 ota 字段")
 | 
			
		||||
        return
 | 
			
		||||
    end
 | 
			
		||||
    local _ota = get_ota()
 | 
			
		||||
    if v == _ota then return end
 | 
			
		||||
    if v < 0 or v > 1 then
 | 
			
		||||
        log.error(COSO, _C.TAG, "ota 校验失败", v)
 | 
			
		||||
        return
 | 
			
		||||
    end
 | 
			
		||||
    if not fskv.sett("config", "ota", v) then
 | 
			
		||||
        log.error(COSO, _C.TAG, "更新失败 ota", v)
 | 
			
		||||
    end
 | 
			
		||||
    log.info(COSO, _C.TAG, "更新成功 ota", v)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local get_s_u = function()
 | 
			
		||||
    local s_u = fskv.get("config", "s_u")
 | 
			
		||||
    return (type(s_u) == "number") and s_u or default_config.s_u
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local function set_s_u(v)
 | 
			
		||||
    if type(v) ~= "number" then
 | 
			
		||||
        log.warn(COSO, _C.TAG, "缺少 s_u 字段")
 | 
			
		||||
        return
 | 
			
		||||
    end
 | 
			
		||||
    local _s_u = get_s_u()
 | 
			
		||||
    if v == _s_u then return end
 | 
			
		||||
    if v < 0 or v > 3600 then
 | 
			
		||||
        log.error(COSO, _C.TAG, "s_u 校验失败", v)
 | 
			
		||||
        return
 | 
			
		||||
    end
 | 
			
		||||
    if not fskv.sett("config", "s_u", v) then
 | 
			
		||||
        log.error(COSO, _C.TAG, "更新失败 s_u", v)
 | 
			
		||||
    end
 | 
			
		||||
    log.info(COSO, _C.TAG, "更新成功 s_u", v)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local function get_t_o()
 | 
			
		||||
    local t_o = fskv.get("config", "t_o")
 | 
			
		||||
    return (type(t_o) == "number") and t_o or default_config.t_o
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local function set_t_o(v)
 | 
			
		||||
    if type(v) ~= "number" then
 | 
			
		||||
        log.warn(COSO, _C.TAG, "缺少 t_o 字段")
 | 
			
		||||
        return
 | 
			
		||||
    end
 | 
			
		||||
    local _t_o = get_t_o()
 | 
			
		||||
    if v == _t_o then return end
 | 
			
		||||
    if v < 1 or v > 5 then
 | 
			
		||||
        log.error(COSO, _C.TAG, "t_o 校验失败", v)
 | 
			
		||||
        return
 | 
			
		||||
    end
 | 
			
		||||
    if not fskv.sett("config", "t_o", v) then
 | 
			
		||||
        log.error(COSO, _C.TAG, "更新失败 t_o", v)
 | 
			
		||||
    end
 | 
			
		||||
    log.info(COSO, _C.TAG, "更新成功 t_o", v)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
-- function _C.get_net_timeout()
 | 
			
		||||
--     return get_ip_ready_timeout_s()
 | 
			
		||||
-- end
 | 
			
		||||
 | 
			
		||||
function _C.get_d_u()
 | 
			
		||||
    return get_d_u()
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
function _C.get_g_u()
 | 
			
		||||
    return get_g_u()
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
function _C.get_ota()
 | 
			
		||||
    return get_ota()
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
function _C.get_s_u()
 | 
			
		||||
    return get_s_u()
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
function _C.get_t_o()
 | 
			
		||||
    return get_t_o()
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
function _C.check()
 | 
			
		||||
    local _config_url = get_config_url()
 | 
			
		||||
    local _http_timeout_ms = get_http_timeout_ms()
 | 
			
		||||
    local code, _, body = http.request("GET", _config_url, nil, nil, { timeout = _http_timeout_ms }).wait()
 | 
			
		||||
    log.debug(COSO, _C.TAG, _config_url,_http_timeout_ms,code)
 | 
			
		||||
    if code ~= 200 then return 101 end
 | 
			
		||||
    body = json.decode(body)
 | 
			
		||||
    log.debug(COSO, _C.TAG, body)
 | 
			
		||||
    -- set_ip_ready_timeout_s(body.ip_ready_timeout_s)
 | 
			
		||||
    set_config_url(body.config_url)
 | 
			
		||||
    set_http_timeout_ms(body.http_timeout_ms)
 | 
			
		||||
    set_d_u(body.d_u)
 | 
			
		||||
    set_g_u(body.g_u)
 | 
			
		||||
    set_ota(body.ota)
 | 
			
		||||
    set_s_u(body.s_u)
 | 
			
		||||
    set_t_o(body.t_o)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
return _C
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,52 @@
 | 
			
		|||
require("globals")
 | 
			
		||||
 | 
			
		||||
local function start()
 | 
			
		||||
    local wakeup_sta = {
 | 
			
		||||
        [0] = "上电开机",
 | 
			
		||||
        [1] = "定时器唤醒",
 | 
			
		||||
    }
 | 
			
		||||
    local slp_sta = {
 | 
			
		||||
        [0] = "普通开机",
 | 
			
		||||
        [4] = "休眠唤醒",
 | 
			
		||||
    }
 | 
			
		||||
    local wakeup, sleep = pm.lastReson()
 | 
			
		||||
    log.info(COSO, "【设备开机】",wakeup_sta[wakeup],slp_sta[sleep], rtos.buildDate(), rtos.firmware())
 | 
			
		||||
    if sleep > 0 then
 | 
			
		||||
        mobile.flymode(0,false)
 | 
			
		||||
    end
 | 
			
		||||
    local code, connet_time = net.init(30)
 | 
			
		||||
    if code ~= 0 then return sta.handling(code) end
 | 
			
		||||
    log.info(COSO, "【网络】", "连接成功", connet_time)
 | 
			
		||||
    sys.publish("config_check")
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local function configTask()
 | 
			
		||||
    sys.waitUntil("config_check")
 | 
			
		||||
    log.info(COSO, "【检查配置")
 | 
			
		||||
    local code = cfg.init()
 | 
			
		||||
    if code ~= 0 then return sta.handling(code) end
 | 
			
		||||
    log.info(COSO, "【数据库】", "初始化完成")
 | 
			
		||||
    cfg.check()
 | 
			
		||||
    log.debug(COSO, "【DEV】", cfg.get_d_u())
 | 
			
		||||
    log.debug(COSO, "【DEV】", cfg.get_g_u())
 | 
			
		||||
    log.debug(COSO, "【DEV】", cfg.get_ota())
 | 
			
		||||
    log.debug(COSO, "【DEV】", cfg.get_s_u())
 | 
			
		||||
    log.debug(COSO, "【DEV】", cfg.get_t_o())
 | 
			
		||||
    sys.publish("get_data")
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local function dataTask()
 | 
			
		||||
    sys.waitUntil("get_data")
 | 
			
		||||
    sys.publish("report_data")
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local function reportTask()
 | 
			
		||||
    sys.waitUntil("report_data")
 | 
			
		||||
    sleep.goPSM(10)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
sys.taskInit(start)
 | 
			
		||||
sys.taskInit(configTask)
 | 
			
		||||
sys.taskInit(dataTask)
 | 
			
		||||
sys.taskInit(reportTask)
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,9 @@
 | 
			
		|||
COSO    = "COSO"
 | 
			
		||||
sys     = require("sys")
 | 
			
		||||
sysplus = require("sysplus")
 | 
			
		||||
sta     = require("status")
 | 
			
		||||
cfg     = require("config")
 | 
			
		||||
 | 
			
		||||
net = require("net")
 | 
			
		||||
ota = require("ota")
 | 
			
		||||
sleep = require("sleep")
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,4 @@
 | 
			
		|||
PROJECT = "COSO_C210M_DEV"
 | 
			
		||||
VERSION = "1.0.0"
 | 
			
		||||
require("coso")
 | 
			
		||||
sys.run()
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,20 @@
 | 
			
		|||
local _C = {
 | 
			
		||||
    TAG = "【4G网络】"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function _C.init(v)
 | 
			
		||||
    local start_time = os.clock()
 | 
			
		||||
    local result
 | 
			
		||||
    while not (result or ((os.clock() - start_time) * 100 > v)) do
 | 
			
		||||
        result = sys.waitUntil("IP_READY", 990)
 | 
			
		||||
        if not result then
 | 
			
		||||
            log.warn(COSO, _C.TAG, "联网中:", (os.clock() - start_time) * 100, "超时:", v)
 | 
			
		||||
            sys.wait(10)
 | 
			
		||||
        end
 | 
			
		||||
    end
 | 
			
		||||
    return result and 0 or 3, (os.clock() - start_time) * 100
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
return _C
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,40 @@
 | 
			
		|||
local _C = {
 | 
			
		||||
    TAG = "【OTA】",
 | 
			
		||||
    MSG = {
 | 
			
		||||
        _default = "未知状态",
 | 
			
		||||
        [0] = "升级包下载成功,重启模块",
 | 
			
		||||
        [1] = "连接失败,请检查url拼写或服务器配置(是否为内网)",
 | 
			
		||||
        [2] = "url错误,检查url拼写",
 | 
			
		||||
        [3] = "服务器断开,检查服务器白名单配置",
 | 
			
		||||
        [4] = "接收报文错误,检查模块固件或升级包内文件是否正常",
 | 
			
		||||
        [5] = "版本号书写错误,iot平台版本号需要使用xxx.yyy.zzz形式",
 | 
			
		||||
        [99] = "OTA失败,继续执行原有逻辑",
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
local libfota2 = require("libfota2")
 | 
			
		||||
 | 
			
		||||
local function libfota_cb(result)
 | 
			
		||||
    log.info(COSO, _C.TAG, _C.MSG[result] or _C.MSG._default)
 | 
			
		||||
    if result == 0 then
 | 
			
		||||
        sys.publish("ota_success")
 | 
			
		||||
    else
 | 
			
		||||
        log.info(COSO, _C.TAG, _C.MSG[99])
 | 
			
		||||
        sys.publish("get_data")
 | 
			
		||||
    end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local function ota_update()
 | 
			
		||||
    sys.waitUntil("ota_update")
 | 
			
		||||
    libfota2.request(libfota_cb)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local function ota_success()
 | 
			
		||||
    sys.waitUntil("ota_success")
 | 
			
		||||
    rtos.reboot()
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
sys.taskInit(ota_update)
 | 
			
		||||
sys.taskInit(ota_success)
 | 
			
		||||
 | 
			
		||||
return _C
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,5 @@
 | 
			
		|||
local _C = {
 | 
			
		||||
    TAG = "【上报数据】"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
return _C
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,18 @@
 | 
			
		|||
local _C = {
 | 
			
		||||
    TAG = "【休眠】"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function _C.goPSM(v)
 | 
			
		||||
    log.info(COSO, _C.TAG,"即将休眠")
 | 
			
		||||
    mobile.flymode(0, true)
 | 
			
		||||
    gpio.close(23)
 | 
			
		||||
    gpio.close(gpio.WAKEUP1)
 | 
			
		||||
    gpio.close(gpio.PWR_KEY)
 | 
			
		||||
    pm.dtimerStart(3, v * 1000)
 | 
			
		||||
    pm.power(pm.WORK_MODE, 3)
 | 
			
		||||
    sys.wait(3000)
 | 
			
		||||
    log.warn(COSO, _C.TAG,"休眠失败,尝试重启")
 | 
			
		||||
    rtos.reboot()
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
return _C
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,20 @@
 | 
			
		|||
local _C = {
 | 
			
		||||
    MSG = {
 | 
			
		||||
        _default = "未知状态",
 | 
			
		||||
        [0] = "成功",
 | 
			
		||||
        [1] = "【数据库】初始化失败",
 | 
			
		||||
        [2] = "【数据库】状态异常",
 | 
			
		||||
        [3] = "【数据库】数据初始化失败",
 | 
			
		||||
        [4] = "【4G网络】联网超时",
 | 
			
		||||
        [5] = "【OTA】升级中",
 | 
			
		||||
        [101] = "【OTA】无效的update字段",
 | 
			
		||||
        [102] = "【OTA】升级请求异常",
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function _C.handling(code)
 | 
			
		||||
    log.warn(COSO, _C.MSG[code] or _C.MSG._default)
 | 
			
		||||
    if code == 5 then sys.publish("ota_update") end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
return _C
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,52 @@
 | 
			
		|||
{
 | 
			
		||||
  "model": "Air780EPM",
 | 
			
		||||
  "pins": [
 | 
			
		||||
    [7, "PWR_KEY", ""],
 | 
			
		||||
    [16, "GPIO27", ""],
 | 
			
		||||
    [17, "UART1_RXD", ""],
 | 
			
		||||
    [18, "UART1_TXD", ""],
 | 
			
		||||
    [19, "GPIO22", ""],
 | 
			
		||||
    [20, "PWM1", ""],
 | 
			
		||||
    [22, "PWM0", ""],
 | 
			
		||||
    [23, "GPIO2", ""],
 | 
			
		||||
    [25, "CAN_TXD", ""],
 | 
			
		||||
    [26, "PWM4", ""],
 | 
			
		||||
    [28, "UART2_RXD", ""],
 | 
			
		||||
    [29, "UART2_TXD", ""],
 | 
			
		||||
    [30, "GPIO29", ""],
 | 
			
		||||
    [31, "GPIO30", ""],
 | 
			
		||||
    [32, "GPIO31", ""],
 | 
			
		||||
    [33, "GPIO32", ""],
 | 
			
		||||
    [38, "DBG_RXD", ""],
 | 
			
		||||
    [39, "DBG_TXD", ""],
 | 
			
		||||
    [49, "LCD_RST", ""],
 | 
			
		||||
    [50, "LCD_SDA", ""],
 | 
			
		||||
    [51, "LCD_RS", ""],
 | 
			
		||||
    [52, "LCD_CS", ""],
 | 
			
		||||
    [53, "LCD_CLK", ""],
 | 
			
		||||
    [54, "CAM_MCLK", ""],
 | 
			
		||||
    [55, "CAM_RX0", ""],
 | 
			
		||||
    [56, "CAM_RX1", ""],
 | 
			
		||||
    [57, "UART3_TXD", ""],
 | 
			
		||||
    [58, "UART3_RXD", ""],
 | 
			
		||||
    [61, "VBUS", ""],
 | 
			
		||||
    [66, "I2C1_SDA", ""],
 | 
			
		||||
    [67, "I2C1_SCL", ""],
 | 
			
		||||
    [78, "ONEWIRE", ""],
 | 
			
		||||
    [79, "USIM_DET", ""],
 | 
			
		||||
    [80, "CAM_BCLK", ""],
 | 
			
		||||
    [81, "CAM_CS", ""],
 | 
			
		||||
    [82, "USB_BOOT", ""],
 | 
			
		||||
    [83, "SPI0_CS", ""],
 | 
			
		||||
    [84, "SPI0_MISO", ""],
 | 
			
		||||
    [85, "SPI0_MOSI", ""],
 | 
			
		||||
    [86, "SPI0_CLK", ""],
 | 
			
		||||
    [97, "GPIO16", ""],
 | 
			
		||||
    [99, "GPIO23", ""],
 | 
			
		||||
    [100, "GPIO17", ""],
 | 
			
		||||
    [101, "WAKEUP0", ""],
 | 
			
		||||
    [102, "GPIO20", ""],
 | 
			
		||||
    [106, "CAN_RXD", ""],
 | 
			
		||||
    [107, "GPIO21", ""]
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
		Reference in New Issue