hw_font_drv.lua 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. --[[
  2. @module hw_font_drv
  3. @summary 字体驱动配置模块
  4. @version 1.0
  5. @date 2025.11.28
  6. @author 江访
  7. @usage
  8. 本文件为字体驱动配置模块,核心业务逻辑为:
  9. 1、提供统一的硬件初始化接口;
  10. 2、支持默认字体、HzFont矢量字体和GTFont矢量字体配置;
  11. 3、配置LCD显示和触摸屏参数;
  12. 本文件的对外接口有1个:
  13. 1、hw_font_drv.init(font_config) - 初始化硬件系统;
  14. @api hw_font_drv.init(font_config)
  15. @summary 初始化exEasyUI硬件系统
  16. @table font_config 字体配置参数(可选)
  17. @field type string 字体类型,支持 "hzfont"、"gtfont",不传则使用默认字体
  18. @field size number 字体大小
  19. @field antialias number 抗锯齿设置(仅HzFont有效)
  20. @field spi table SPI配置(仅GTFont有效)
  21. @return nil
  22. @usage
  23. ]]
  24. local hw_font_drv = {}
  25. -- 硬件配置参数
  26. local hw_config = {
  27. -- lcd_config参数填写可以参考合宙exlcd显示扩展库exlcd.init(param)接口说明:https://docs.openluat.com/osapi/ext/exlcd/#31-exlcdinitparam
  28. lcd_config = {
  29. lcd_model = "AirLCD_1010", -- LCD型号
  30. -- pin_vcc = 24, -- 供电引脚,使用GPIO控制屏幕供电可配置
  31. pin_rst = 36, -- 复位引脚
  32. pin_pwr = 1, -- 背光控制引脚GPIO ID号
  33. pin_pwm = 0, -- 背光控制引脚PWM ID号
  34. port = lcd.HWID_0, -- 驱动端口
  35. -- pin_dc = 0xFF, -- lcd数据/命令选择引脚GPIO ID号,使用lcd 专用 SPI 接口 lcd.HWID_0不需要填此参数,使用通用SPI接口需要赋值
  36. direction = 0, -- lcd屏幕方向 0:0° 1:90° 2:180° 3:270°,屏幕方向和分辨率保存一致
  37. w = 320, -- lcd 水平分辨率
  38. h = 480, -- lcd 竖直分辨率
  39. xoffset = 0, -- x偏移(不同屏幕ic 不同屏幕方向会有差异)
  40. yoffset = 0, -- y偏移(不同屏幕ic 不同屏幕方向会有差异)
  41. sleepcmd = 0X10, -- 睡眠命令,默认0X10
  42. wakecmd = 0X11, -- 唤醒命令,默认0X11
  43. -- bus_speed = 50*1000*1000, -- SPI总线速度,不填默认50M,若速率要求更高需要进行设置
  44. -- interface_mode = lcd.WIRE_4_BIT_8_INTERFACE_I, -- lcd模式,默认lcd.WIRE_4_BIT_8_INTERFACE_I
  45. -- direction0 = {0x36,0x00}, -- 0°方向的命令,(不同屏幕ic会有差异)
  46. -- direction90 = {0x36,0x60}, -- 90°方向的命令,(不同屏幕ic会有差异)
  47. -- direction180 ={0x36,0xc0} , -- 180°方向的命令,(不同屏幕ic会有差异)
  48. -- direction270 = {0x36,0xA0}, -- 270°方向的命令,(不同屏幕ic会有差异)
  49. -- hbp = nil, -- 水平后廊
  50. -- hspw = nil, -- 水平同步脉冲宽度
  51. -- hfp = 0, -- 水平前廊
  52. -- vbp = 0, -- 垂直后廊
  53. -- vspw = 0, -- 垂直同步脉冲宽度
  54. -- vfp = 0, -- 垂直前廊
  55. -- initcmd = nil, -- 自定义屏幕初始化命令表
  56. -- flush_rate = nil, -- 刷新率
  57. -- spi_dev = nil, -- spi设备,当port = "device"时有效,当port ≠ "device"时可不填或者填nil
  58. -- init_in_service = false, -- 允许初始化在lcd service里运行,在后台初始化LCD,默认是false,Air8000/G/W/T/A、Air780EHM/EGH/EHV 支持填true,可加快初始化速度,默认SPI总线速度80M
  59. },
  60. -- tp_config参数填写可以参考合宙extp触摸扩展库以下三个接口说明:https://docs.openluat.com/osapi/ext/extp/#41-extpinitparam
  61. -- 按extp.init(param)接口说明填写tp_model、i2c_id、pin_rst、pin_int参数
  62. -- 按extp.set_publish_enabled(msg_type, enabled)接口说明和实际需求填写message_enabled{}列表内参数
  63. -- 按extp.set_swipe_threshold(threshold)接口说明填写swipe_threshold和long_press_threshold参数
  64. tp_config = {
  65. tp_model = "AirLCD_1010", -- 触摸芯片/设备型号
  66. i2c_id = 1, -- I2C总线ID
  67. pin_rst = 0xFF, -- 触摸芯片复位引脚(AirLCD_1010上没有引出该引脚)
  68. pin_int = gpio.WAKEUP0, -- 触摸芯片中断引脚
  69. -- @param message_enabled 消息类型 ("ALL", "RAW_DATA", "TOUCH_DOWN", "MOVE_X", "MOVE_Y", "SWIPE_LEFT", "SWIPE_RIGHT", "SWIPE_UP", "SWIPE_DOWN", "SINGLE_TAP", "LONG_PRESS")
  70. message_enabled = {
  71. TOUCH_DOWN = true, -- 启用按下检测
  72. MOVE_X = true, -- 启用横向滑动
  73. MOVE_Y = true, -- 启用纵向滑动
  74. SWIPE_LEFT = true, -- 启用左滑手势
  75. SWIPE_RIGHT = true, -- 启用右滑手势
  76. SWIPE_UP = true, -- 启用上滑手势
  77. SWIPE_DOWN = true, -- 启用下滑手势
  78. SINGLE_TAP = true, -- 启用点击手势
  79. LONG_PRESS = false -- 禁用长按手势
  80. },
  81. swipe_threshold = 10, -- 设置滑动阈值
  82. long_press_threshold = 2000 -- 设置长按阈值(毫秒)
  83. }
  84. }
  85. function hw_font_drv.init(font_config)
  86. -- 如果有字体配置,则添加到硬件配置中
  87. if font_config then
  88. hw_config.font_config = font_config
  89. end
  90. -- 初始化硬件
  91. ui.hw_init(hw_config)
  92. log.info("hw_font_drv", "硬件初始化完成", font_config and "使用字体配置" or "使用默认字体")
  93. end
  94. return hw_font_drv