Esp32_Link调试笔记(Vol.3)

这是一个标题

前面两章网上大多都有教程且难度不大,重点是记录学习一下@FASTSHIFT大佬的"页面生命周期管理"和"消息订阅发布框架"。当然LVGL API从8.3升级至了9.2。
当然接下来的程序是基于屏幕正常显示,触摸驱动正常情况下。(即显示方向与期望相同,滑动方向与预期相同)

第三章 移植代码

原始参考代码
修改后本章代码

向页面生命周期中添加页面

修改文件
main.cpp

点击查看代码
添加 #include "APP.h"
 void setup()
 { 
 ...
 ...
 ...
 App_Init();
 }
按照_Template页面格式创建一下文件

image
├── Test.cpp Model和View初始化,控件回调(界面右滑+按键check)
├── Test.h
├── TestModel.cpp 数据处理初始化(实际是给数据管理发送命令,传给数据管理,数据管理最终调用HAL_test里的函数,目前注释掉)
├── TestModel.h
├── TestView.cpp 界面控件创建 (创建一个bottom)
└── TestView.h
在App.cpp中,注释掉所有没用到的啊界面,只保留
manager.Install("Test", "Pages/Test");
manager.Push("Pages/Test");

这样就开机会直接跳到Test界面

AppFactory.cpp
去掉无用界面添加 APP_CLASS_MATCH(Test);

这样界面就添加完了。

向数据管理中添加数据

在Dataproc文件夹中建立DP_test.cpp
DP_LIST.inc中添加DP_DEF(Test, sizeof(HAL::Test_Info_t));完成Test的account初始化,及自身对应命令的初始化。
在TestModel.cpp中account->NotifyOnEvent函数会通过Dateproc最终调用DP_test.cpp中的OnEvent函数。
所有命令在HAL_Def中定义。
在HAL文件夹下建立HAL_test.cpp
HAL_Def.h添加Test的account所需指令。

点击查看代码
    typedef enum Test_cmd
    {
        Ts_START = 0,
        Ts_UPDATE,
        Ts_STOP,
    } Test_cmd_t;
    typedef struct
    {
        uint16_t data1;
        uint16_t data2;
        Test_cmd_t test_cmd; 
    } Test_Info_t;
举例: Test这个account拥有三条指令和两个数据 通过**TestModel.cpp**中

初始化Account在DataCenter.cpp中

account = new Account("TestModel", DataProc::Center(), 0, this);
调用Account在Account.cpp中

account->Notify("Test", &info_val, sizeof(info_val));

Account::Notify函数回调
DP_Test.cpp的onEvent函数

点击查看代码
switch (info->test_cmd)
    {
        case HAL::Ts_START:
            HAL::Test_Init(info);
            break;

        case HAL::Ts_UPDATE:
            HAL::Test_Update(info);
            break;

        case HAL::Ts_STOP:
            break;
        default:
            break;
    }

onEvent还是根据命令的不同调用HAL_Test中对应函数,完成整个数据的传递。

例程是按下Test页面上的按键,实现数据data1+1

大概就是按照格式添加就好了
最终实现了添加Test页面,Test数据

posted @ 2025-02-24 11:53  一般摸鱼。  阅读(116)  评论(0)    收藏  举报