这是一个标题
前面两章网上大多都有教程且难度不大,重点是记录学习一下@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数据