-- LuaTools需要PROJECT和VERSION这两个信息
PROJECT = "lvgl_demo_test"
VERSION = "1.0.0"

log.info("main", PROJECT, VERSION)

_G.symbol = require "symbol"

--添加硬狗防止程序卡死
if wdt then
    wdt.init(9000)--初始化watchdog设置为9s
    sys.timerLoopStart(wdt.feed, 3000)--3s喂一次狗
end

local lcd_use_buff = false  -- 是否使用缓冲模式, 提升绘图效率，占用更大内存

local rtos_bsp = rtos.bsp()
local chip_type = hmeta.chip()
-- 根据不同的BSP返回不同的值
-- spi_id,pin_reset,pin_dc,pin_cs,bl
function lcd_pin()
    if string.find(rtos_bsp,"Air8101") then
        lcd_use_buff = true -- RGB仅支持buff缓冲模式
        return lcd.RGB,36,0xff,0xff,25
    else
        log.info("main", "bsp not support")
        return
    end
end

local spi_id,pin_reset,pin_dc,pin_cs,bl = lcd_pin()

if spi_id ~= lcd.HWID_0 and spi_id ~= lcd.RGB then
    spi_lcd = spi.deviceSetup(spi_id,pin_cs,0,0,8,20*1000*1000,spi.MSB,1,0)
    port = "device"
else
    port = spi_id
end

if spi_id == lcd.RGB then
    -- -- Air8101开发板配套LCD屏幕 分辨率800*480
    -- lcd.init("h050iwv",
    --         {port = port, pin_dc = 0xff, pin_pwr = bl, pin_rst = pin_reset,
    --         direction = 0, w = 800, h = 480, xoffset = 0, yoffset = 0})

    -- -- Air8101开发板配套LCD屏幕 分辨率1024*600
    -- lcd.init("hx8282",
    --         {port = port,pin_pwr = bl, pin_rst = pin_reset,
    --         direction = 0,w = 1024,h = 600,xoffset = 0,yoffset = 0})

    -- Air8101开发板配套LCD屏幕 分辨率720*1280
    lcd.init("nv3052c",
            {port = port,pin_pwr = bl, pin_rst = pin_reset,
            direction = 0,w = 720,h = 1280,xoffset = 0,yoffset = 0})

    -- -- Air8101开发板配套LCD屏幕 分辨率480*854
    -- lcd.init("st7701sn",
    --         {port = port,pin_pwr = bl, pin_rst = pin_reset,
    --         direction = 0,w = 480,h = 854,xoffset = 0,yoffset = 0})
end


-- LVGL（Light and Versatile Graphics Library）的各种 UI 组件（Widgets）的演示模块。
-- 以下是每个模块对应的 LVGL 组件及其用途：
-- 模块名                  LVGL 组件                   功能描述
-- arc_demo                圆弧 (Arc)                  用于显示进度或旋钮控制（如音量调节）。
-- bar_demo                进度条 (Bar)                水平/垂直进度条，展示加载或数值范围。
-- btn_demo                按钮 (Button)               基础点击交互按钮。
-- btnmatrix_demo          按钮矩阵 (Button Matrix)    网格状排列的多个按钮（如键盘布局）。
-- calendar_demo           日历 (Calendar)             日期选择组件。
-- canvas_demo             画布 (Canvas)               自定义绘制图形/图像的低级绘图接口。
-- checkbox_demo           复选框 (Checkbox)           二元选择框（勾选/未勾选）。
-- chart_demo              图表 (Chart)                显示折线图、柱状图等数据可视化。
-- cont_demo               容器 (Container)            布局容器，用于自动排列子组件。
-- cpicker_demo            颜色选择器 (Color Picker)   允许用户选择颜色值。
-- dropdown_demo           下拉菜单 (Dropdown)         点击后展开选项列表的选择组件。
-- gauge_demo              仪表盘 (Gauge)              模拟仪表（如速度表、温度计）。
-- img_demo                图像 (Image)                显示位图或图标。
-- imgbtn_demo             图像按钮 (Image Button)     使用图片作为按钮的交互元素。
-- label_demo              标签 (Label)                显示静态或动态文本。
-- led_demo                LED 指示灯 (LED)            模拟 LED 灯的开关状态指示。
-- line_demo               线条 (Line)                 绘制直线图形。
-- list_demo               列表 (List)                 垂直/水平滚动列表容器。
-- lmeter_demo             线性量表 (Line Meter)       线性比例指示器（如电池电量条）。
-- msdbox_demo             消息框 (Message Box)        弹出对话框显示提示信息（确认/取消）。
-- objmask_demo            对象遮罩 (Object Mask)      对组件应用遮罩效果（裁剪/透明）。
-- page_demo               页面 (Page)                 可滚动的容器，用于管理复杂布局。
-- roller_demo             滚轮 (Roller)               滚动选择器（如时间选择）。
-- slider_demo             滑块 (Slider)               拖动滑块选择数值范围。
-- spinbox_demo            数字输入框 (Spinbox)        带加减按钮的数字输入控件。
-- spinner_demo            加载动画 (Spinner)          旋转指示器，表示加载中状态。
-- switch_demo             开关 (Switch)               切换开关（如 ON/OFF 状态）。
-- table_demo              表格 (Table)                显示行列数据（类似电子表格）。
-- tabview_demo            标签页 (Tab View)           多标签页容器，切换不同内容视图。
-- textarea_demo           文本域 (Text Area)          多行文本输入框（支持编辑）。
-- tileview_demo           平铺视图 (Tile View)        滑动平铺页面（如手机主屏幕）。
-- win_demo                窗口 (Window)               带标题栏和内容区域的窗口容器。

local arc = require "arc_demo"
local bar = require "bar_demo"
local btn = require "btn_demo"
local btnmatrix = require "btnmatrix_demo"
local calendar = require "calendar_demo"
local canvas = require "canvas_demo"
local checkbox = require "checkbox_demo"
local chart = require "chart_demo"
local cont = require "cont_demo"
local cpicker = require "cpicker_demo"
local dropdown = require "dropdown_demo"
local gauge = require "gauge_demo"
local img = require "img_demo"
local imgbtn = require "imgbtn_demo"
local label = require "label_demo"
local led = require "led_demo"
local line = require "line_demo"
local list = require "list_demo"
local lmeter = require "lmeter_demo"
local msdbox = require "msdbox_demo"
local objmask = require "objmask_demo"
local page = require "page_demo"
local roller = require "roller_demo"
local slider = require "slider_demo"
local spinbox = require "spinbox_demo"
local spinner = require "spinner_demo"
local switch = require "switch_demo"
local table = require "table_demo"
local tabview = require "tabview_demo"
local textarea = require "textarea"
local tileview = require "tileview_demo"
local win = require "win_demo"

sys.taskInit(function ()
    -- 开启缓冲区, 刷屏速度回加快, 但也消耗2倍屏幕分辨率的内存
    if lcd_use_buff then
        lcd.setupBuff(nil, true) -- 使用sys内存, 只需要选一种
        -- lcd.setupBuff()       -- 使用lua内存, 只需要选一种
        lcd.autoFlush(false)
    end
    -- sys.wait(5000)
    log.info("lvgl", lvgl.init())

    if tp then
        softI2C = i2c.createSoft(8, 5)
        tp_device =  tp.init("gt911",{port=softI2C,pin_rst = 9,pin_int = 6,w = 720,h = 1280})
        lvgl.indev_drv_register("pointer", "touch", tp_device)
    end

    -- arc.demo1()
    -- arc.demo2()
    -- bar.demo()
    -- btn.demo1()
    -- btn.demo2()
    -- btnmatrix.demo()
    -- calendar.demo()
    -- canvas.demo()
    -- checkbox.demo()
    -- chart.demo1()
    -- chart.demo2()
    -- cont.demo()
    -- cpicker.demo()
    -- dropdown.demo1()
    -- dropdown.demo2()
    -- gauge.demo1()
    -- img.demo()
    -- imgbtn.demo()
    -- label.demo()
    -- led.demo()
    -- line.demo()
    -- list.demo()
    -- lmeter.demo()
    -- msdbox.demo()
    -- objmask.demo()
    -- page.demo()
    -- roller.demo()
    -- slider.demo()
    -- spinbox.demo()
    -- spinner.demo()
    -- switch.demo()
    -- table.demo()
    -- tabview.demo()
    -- textarea.demo()
    -- tileview.demo()
    win.demo()

    while true do
        sys.wait(1000)
    end
end)

sys.run()
