Esp32_Link调试笔记(Vol.3)
这是一个标题
前面两章网上大多都有教程且难度不大,重点是记录学习一下@FASTSHIFT大佬的"页面生命周期管理"和"消息订阅发布框架"。当然LVGL API从8.3升级至了9.2。
当然接下来的程序是基于屏幕正常显示,触摸驱动正常情况下。(即显示方向与期望相同,滑动方向与预期相同)
第三章 移植代码
向页面生命周期中添加页面
修改文件
main.cpp
点击查看代码
添加 #include "APP.h"
void setup()
{
...
...
...
App_Init();
}

├── 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;
初始化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数据

浙公网安备 33010602011771号