全志ARM926 Melis2.0系统的开发指引⑧

全志ARM926 Melis2.0系统的开发指引⑧

  • 编写目的
    • 12.5. 应用程序编写
      • 12.5.1. 简单应用编写
        • 12.5.1.1. 注册应用
        • 12.5.1.2. 创建管理窗口
        • 12.5.1.3. 实现管理窗口消息处理回调函数
        • 12.5.1.4. 创建图层
        • 12.5.1.5. 创建 framewin
        • 12.5.1.6. 实现 framewin 消息处理回调函数
  • -. 全志相关工具和资源
    • -.1 全志固件镜像修改工具 ImageModify.exe 下载
    • -.2 全志固件USB刷机工具 PhoenixSuit 下载
    • -.3 全志Melis2.0 用户手册.pdf下载
    • -.4 全志melis2.0 sdk源码库下载

编写目的

本文档是全志 Melis2.0 系统的开发指引文档,旨在协助开发者了解和掌握 Melis 系统,快速搭建 Melis系统的开发环境,将 Melis2.0 系统应用到产品开发中。
在这里插入图片描述

12.5. 应用程序编写

12.5.1. 简单应用编写

用户程序编写最基本的 6 个步骤:注册应用、创建管理窗口 manwin 并实现回调函数、创建图层、创建framewin 并实现回调函数。下面进行介绍。

12.5.1.1. 注册应用

新方案中,只有一个主应用,子应用由主应用启动,用户应用程序为子程序。主应用默认启动 home
子应用,并由 home 子应用启动其他子应用。因此 home 子应用定义了要切换的子应用 ID。
ROOT\livedesk\beetles\applets\lib\beetles_app.h 文件中定义了子应用 ID 枚举 root_home_id_t,添加项ID_HOME_TEST_APP。

typedef enum
{ID_HOME_FM = 0, ID_MEDIA_START, ID_HOME_RECORD=ID_MEDIA_START, ID_HOME_MOVIE, ID_MEDIA_END, ID_HOME_SETTING = ID_MEDIA_END, ID_HOME_TEST_APP, ID_MAX_NUM, }  root_home_id_t;

为方便窗口、图层创建,在 ROOT\livedesk\beetles\applets\lib\beetles_app.h 加入定义,窗口或图层创建时使用此名称以进行区分。

#define APP_TEST "app_test"
12.5.1.2. 创建管理窗口

管理窗口是所有应用的入口,负责接收消息。创建管理窗口时,id 参数请使用注册 ID 即 APP_TEST。用户也可以添加自定义结构体用于参数传递,即 create_info.attr 参数。

_s32 app_test_create(root_para_t *para)
{ __gui_manwincreate_para_t create_info;test_app_ctrl_t *test_app_ctrl = NULL; __log("****************************************************************************************\n"); __log("********************************** enter test app ************************************\n"); __log("****************************************************************************************\n");test_app_ctrl = (test_app_ctrl_t)esMEMS_Balloc(sizeof(test_app_ctrl_t));if( test_app_ctrl == NULL ){ __msg("test app esMEMS_Balloc fail\n"); return NULL;}eLIBs_memset(test_app_ctrl, 0, sizeof(test_app_ctrl_t));test_app_ctrl->test_app_font = para->font;test_app_ctrl->root_type = para->root_type; eLIBs_memset(&create_info, 0, sizeof(__gui_manwincreate_para_t)); create_info.name = APP_TEST; create_info.hParent = para->h_parent; create_info.ManWindowProc = (__pGUI_WIN_CB)esKRNL_GetCallBack((__pCBK_t)_app_test_proc); create_info.attr = (void*)test_app_ctrl; create_info.id = APP_TEST; create_info.hHosting = NULL; return(GUI_ManWinCreate(&create_info));
}    
12.5.1.3. 实现管理窗口消息处理回调函数

消息处理函数为管理窗口中设置的回调函数,在发生消息传递时先被调用。主要集中处理
GUI_MSG_CREATE、GUI_MSG_DESTROY、GUI_MSG_CLOSE、GUI_MSG_KEY、GUI_MSG_TOUCH 等系统消息,也可以
处理用户自定义消息。

static __s32 _app_test_proc(__gui_msg_t *msg)
{ __s32 ret; switch( msg->id ){case GUI_MSG_CREATE: /* 创建子窗口*/layer = htouch_layer_create(); /* 创建图层*/GUI_LyrWinSetTop(layer); /* 图层置顶*/htouch_frmwin_create(msg->h_deswin, layer); /* 创建 framewin*/return EPDK_OK;/*释放在 create 中分配的资源,尽量在此回调中释放资源,而不要在退出消息循环后在释放资源*/ case GUI_MSG_DESTROY: GUI_LyrWinDelete(layer); return EPDK_OK;/* 需要支持的桌面消息*/ case DSK_MSG_HOME: /* 回到主界面 */ case DSK_MSG_KILL: /* 强制杀掉该应用程序 */ret = GUI_ManWinDelete(msg->h_deswin); return ret; case GUI_MSG_CLOSE:GUI_ManWinDelete(msg->h_deswin);dsk_load_app("main.app"); /* 回到主界面 */return EPDK_OK; case GUI_MSG_KEY: /* 按键响应 */if( msg->dwAddData1 == GUI_MSG_KEY_ESCAPE ){GUI_ManWinDelete(msg->h_deswin);dsk_load_app("main.app"); return EPDK_OK;}break;default: break;}return GUI_ManWinDefaultProc(msg);/*默认处理流程*/
}        
12.5.1.4. 创建图层

此图层为应用程序显示区域,设置显示矩形区域位置和大小,设置区域格式为 ARGB 或者其他。图层成功创建完毕后将会返回图层句柄。

static H_LYR test_app_32bpp_layer_create(RECT *LayerRect)
{H_LYR layer = NULL;RECT LayerRect;FB fb ={{0, 0}, /* size */{0, 0, 0}, /* buffer */{FB_TYPE_RGB, {PIXEL_COLOR_ARGB8888, 0, (__rgb_seq_t)0}}, /* fmt */};__disp_layer_para_t lstlyr ={DISP_LAYER_WORK_MODE_NORMAL, /* mode */0, /* ck_mode */0, /* alpha_en */0, /* alpha_val */1, /* pipe */0xff, /* prio */{0, 0, 0, 0}, /* screen */{0, 0, 0, 0}, /* source */DISP_LAYER_OUTPUT_CHN_DE_CH1, /* channel */NULL /* fb */};__layerwincreate_para_t lyrcreate_info ={ "APP_TEST", NULL, GUI_LYRWIN_STA_SUSPEND, GUI_LYRWIN_NORMAL};fb.size.width = LayerRect->width;fb.size.height = LayerRect->height;fb.fmt.fmt.rgb.pixelfmt = PIXEL_COLOR_ARGB8888;lstlyr.src_win.x = LayerRect->x;lstlyr.src_win.y = LayerRect->y;lstlyr.src_win.width = LayerRect->width;lstlyr.src_win.height = LayerRect->height;lstlyr.scn_win.x = LayerRect->x;lstlyr.scn_win.y = LayerRect->y;lstlyr.scn_win.width = LayerRect->width;lstlyr.scn_win.height = LayerRect->height;lstlyr.pipe = 1;lstlyr.fb = &fb;lyrcreate_info.lyrpara = &lstlyr;layer = GUI_LyrWinCreate(&lyrcreate_info);if( !layer ){ __err("test app layer create error !\n");}return layer;
}        
12.5.1.5. 创建 framewin

Framewin 需要传入创建的图层句柄,以操作图层。主要工作是绘图,如创建窗口绘图、按键或触摸改变焦点绘图等。这些工作在回调中实现。另外可以传入一些用户自定义结构体数据,即framewin_para.attr参数。

static H_WIN test_app_framewin_create(H_WIN h_parent, setting_general_para_t *para)
{ __gui_framewincreate_para_t framewin_para;setting_general_para_t *general_para;FB fb;GUI_LyrWinGetFB(para->layer, &fb);eLIBs_memset(&framewin_para, 0, sizeof(__gui_framewincreate_para_t));framewin_para.name = "test_app win", framewin_para.dwExStyle = WS_EX_NONE;framewin_para.dwStyle = WS_NONE|WS_VISIBLE;framewin_para.spCaption = NULL;framewin_para.hOwner = NULL;framewin_para.id = GENERAL_MENU_ID;framewin_para.hHosting = h_parent;framewin_para.FrameWinPro= (__pGUI_WIN_CB)esKRNL_GetCallBack((__pCBK_t)htouch_frmwin_cb);framewin_para.rect.x = 0;framewin_para.rect.y = 0;framewin_para.rect.width = fb.size.width;framewin_para.rect.height = fb.size.height;framewin_para.BkColor.alpha = 0;framewin_para.BkColor.red = 0;framewin_para.BkColor.green = 0;framewin_para.BkColor.blue = 0;framewin_para.attr = NULLframewin_para.hLayer = para->layer;return (GUI_FrmWinCreate(&framewin_para));
}
12.5.1.6. 实现 framewin 消息处理回调函数

在此回调中完成图层绘制。可以在 GUI_MSG_CREATE 或 GUI_MSG_PAINT 消息中绘制应用界面,图片、文字的使用和绘制请参考第 5 章中。处理按键消息 GUI_MSG_KEY 或触摸消息 GUI_MSG_TOUCH,更新焦点等。应用程序能处理父窗口发送的 GUI_MSG_COMMAND 自定义命令,并完成相应的绘制或其他响应,此外也能发送响应结果到父窗口或其他目标窗口。

static __s32 htouch_frmwin_cb(__gui_msg_t *msg)
{ switch( msg->id ){ case GUI_MSG_CREATE: {htoutch_frmw_ctr *ctr;button_para_t *para; ctr = esMEMS_Malloc(0, sizeof(htoutch_frmw_ctr));if( !ctr ){ __err(" frmwin malloc fail \n"); return EPDK_FALSE;}eLIBs_memset(ctr, 0, sizeof(htoutch_frmw_ctr));para = &(ctr->para); ctr->focus_size =get_res_them(&(para->focus_bmp), STYLEID,ID_HELLOTOUCH_FOCUS_PIC_BMP); ctr->unfocus_size = get_res_them(&(para->unfocus_bmp), STYLEID,ID_HELLOTOUCH_UNFOCUS_PIC_BMP);para->bmp_pos.x = 0;para->bmp_pos.y = 0;htouch_static_ctl_create(msg->h_deswin, para);GUI_WinSetAddData( msg->h_deswin, (__u32)ctr); return EPDK_OK;}case GUI_MSG_DESTROY: {htoutch_frmw_ctr *ctr = (htoutch_frmw_ctr *)GUI_WinGetAddData(msg->h_deswin);free_res_them(ctr->para.focus_bmp, ctr->focus_size);free_res_them(ctr->para.unfocus_bmp, ctr->unfocus_size); esMEMS_Mfree(0, ctr); return EPDK_OK;}case GUI_MSG_CLOSE: {GUI_FrmWinDelete(msg->h_deswin); return EPDK_OK;}case GUI_MSG_COMMAND: { switch(LOSWORD(msg->dwAddData1)){ case ID_WIDGET_STATIC: { switch( HISWORD(msg->dwAddData1) ){case BN_CLICKED: { __gui_msg_t msgex; eLIBs_memset(&msgex, 0, sizeof(__gui_msg_t)); msgex.id = GUI_MSG_CLOSE; msgex.h_srcwin = 0; msgex.h_deswin = GUI_WinGetManWin(msg->h_deswin);GUI_SendNotifyMessage(&msgex);break;}}break;}}return EPDK_OK;}default: break;}return GUI_FrmWinDefaultProc(msg);
}

-. 全志相关工具和资源

-.1 全志固件镜像修改工具 ImageModify.exe 下载

在这里插入图片描述
下载地址:
固件镜像修改工具 ImageModify.exe下载 ImageModify_20230906.rar

-.2 全志固件USB刷机工具 PhoenixSuit 下载

在这里插入图片描述
下载地址:
USB刷机工具 PhoenixSuit下载 PhoenixSuit_CN_V1.1.1_20230906.rar

-.3 全志Melis2.0 用户手册.pdf下载

下载地址:
全志Melis2.0 用户手册.pdf下载 documents_20230906_melis_v2.0.rar

-.4 全志melis2.0 sdk源码库下载

下载地址:
全志melis2.0 sdk源码库下载 melis2.0-sdk-release_20230906V2.0.rar

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/95506.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

R语言教程课后习题答案(持续更新中~~)

R语言教程网址如下 https://www.math.pku.edu.cn/teachers/lidf/docs/Rbook/html/_Rbook/index.html 目录 source()函数可以运行保存在一个文本文件中的源程序 R向量下标和子集 数值型向量及其运算 日期功能 R因子类型 source()函数可以运行保存在一个文本文件中的源程序…

AcWing 288. 休息时间,《算法竞赛进阶指南》

288. 休息时间 - AcWing题库 在某个星球上,一天由 N 个小时构成,我们称 0 点到 1 点为第 1 个小时、1 点到 2 点为第 2 个小时,以此类推。 在第 i 个小时睡觉能够恢复 Ui 点体力。 在这个星球上住着一头牛,它每天要休息 B 个小…

H5移动端购物商城系统源码 小型商城全新简洁风格全新UI 支持易支付接口

一款比较简单的 H5 移动端购物商城系统源码,比较适合单品商城、小型商城使用。带有易支付接口。 源码下载:https://download.csdn.net/download/m0_66047725/88391704 源码下载2:评论留言或私信留言

保险业SAP转型:奠定坚实的基础

保险业面临着许多新的挑战:从新的市场参与者到人工智能和物联网。如何在这种快节奏的现实中满足客户的需求,降低成本,加速增长?首先,让我们考虑一下数字化转型成功是什么样子的,以及如何实现它。在这篇文章…

克服网络安全压力:如何掌控无限的云数据

管理云中的数字风险比以往任何时候都更加重要。数字化转型引发的云数据呈指数级增长,为安全分析师创造了一个更大的威胁环境。随着威胁行为者继续危害组织最敏感的数据,这一挑战将会加剧。 预计未来五年全球网络犯罪成本将激增,从 2022 年的…

强化学习实践(二)Gym安装及环境搭建(代码可运行)

1.准备工作 优先选用conda,conda不仅可以安装python,也是环境管理的工具,我们可以通过conda创建python环境,每个环境之间是相互独立,这样不同的环境可以使用不同版本的python,不同版本的开发包,…

mysql技术文档--阿里巴巴java准则《Mysql数据库建表规约》--结合阿丹理解尝试解读--国庆开卷

阿丹: 国庆快乐呀大家! 在项目开始前一个好的设计、一个健康的表关系,不仅会让开发变的有趣舒服,也会在后期的维护和升级迭代中让系统不断的成长。那么今天就认识和解读一下阿里的准则!! 建表规约 表达是…

unity脚本_Vector3 c#

接下来学习 相对世界坐标 首先我们给场景物体一个空物体 修改新建空物体名字为GameObjectFather 修改GameObjectFather坐标 修改GameObject2坐标 然后将GameObjectFahter设置成GameObject2的父物体 我们观察到子物体的坐标改变了但是 运行显示的相对世界坐标this.transform.po…

基于蝴蝶优化的BP神经网络(分类应用) - 附代码

基于蝴蝶优化的BP神经网络(分类应用) - 附代码 文章目录 基于蝴蝶优化的BP神经网络(分类应用) - 附代码1.鸢尾花iris数据介绍2.数据集整理3.蝴蝶优化BP神经网络3.1 BP神经网络参数设置3.2 蝴蝶算法应用 4.测试结果:5.M…

Apollo Planning2.0决策规划算法代码详细解析 (2): vscode gdb单步调试环境搭建

前言: apollo planning2.0 在新版本中在降低学习和二次开发成本上进行了一些重要的优化,重要的优化有接口优化、task插件化、配置参数改造等。 GNU symbolic debugger,简称「GDB 调试器」,是 Linux 平台下最常用的一款程序调试器。GDB 编译器通常以 gdb 命令的形式在终端…

MySQL:数据库的物理备份和恢复-冷备份(3)

介绍 物理备份: 直接复制数据文件进行的备份 优点:不需要其他的工具,直接复制就好,恢复直接复制备份文件即可 缺点:与存储引擎有关,跨平台能力较弱 逻辑备份: 从数据库中导出数据另存而进行的备…

C++树详解

树 树的定义 树(Tree)是n(n≥0)个结点的有限集。n0时称为空树。在任意一颗非空树中:①有且仅有一个特定的称为根(Root)的结点;②当n>1时,其余结点可分为m&#xff08…

Python列表展开

列表展开 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 from iteration_utilities import deepflatten # if you only have one depth nested_list, use this def flatten(l): return [item for sublist in l for item in sublist] l [[1,2,3],[3]] print(flatten(l)) # [1,…

【C语言经典100例题-70】求一个字符串的长度(指针)

代码 使用指针来遍历字符串&#xff0c;直到遇到字符串结尾的空字符\0为止&#xff0c;统计字符数量即为字符串长度。 #include<stdio.h> #define n 20 int getlength(char *a) {int len 0;while(*a!\0){len;a;}return len; } int main() {char *arr[n] { 0 };int l…

在Spark中集成和使用Hudi

本文介绍了在Spark中集成和使用Hudi的功能。使用Spark数据源API(scala和python)和Spark SQL,插入、更新、删除和查询Hudi表的代码片段。 1.安装 Hudi适用于Spark-2.4.3+和Spark 3.x版本。 1.1 Spark 3支持矩阵 Hudi

Android 11.0 mt6771新增分区功能实现三

1.前言 在11.0的系统开发中,在对某些特殊模块中关于数据的存储方面等需要新增分区来保存, 所以就需要在系统分区新增分区,接下来就来实现这个功能,看系列三的实现过程 2.mt6771新增分区功能实现三的核心类 build/make/tools/releasetools/common.py device/mediatek/mt6…

将3D MAX设计模型导入NX1988

将3D MAX设计模型导入NX1988 概述导入流程导出喜欢的模型对模型进行修改模型贴图 概述 一般家装设计都不会用NX之类的产品设计软件&#xff0c;也没有通用的文件格式可以互相转换&#xff0c;本文的目的是将从网上下载的一些设计较好的3D MAX模型导入到NX软件中借用&#xff0…

导出视频里的字幕

导出视频里的字幕 如何利用剪映快速提取并导出视频里的字幕 https://jingyan.baidu.com/article/c35dbcb0881b6fc817fcbcd2.html 如何快速提取视频中的字幕&#xff1f;给大家介绍一种简单高效又免费的提取方法。需要利用到“剪映”&#xff0c;以下是具体的操作步骤和指引&a…

2023年7月工作经历三

年龄危机 传言&#xff1a;程序员干不过37岁&#xff0c;架构师干不过45岁&#xff0c;总监干不过55岁。我已经43岁了。当总监需要机遇&#xff1b;首下犯错&#xff0c;会扣领导工资&#xff1b;有的公司总监还需要出资。为了方便以后当总监&#xff0c;我还在超音速带过小团…

Django学习笔记-实现聊天系统

笔记内容转载自 AcWing 的 Django 框架课讲义&#xff0c;课程链接&#xff1a;AcWing Django 框架课。 CONTENTS 1. 实现聊天系统前端界面2. 实现后端同步函数 1. 实现聊天系统前端界面 聊天系统整体可以分为两部分&#xff1a;输入框与历史记录。 我们需要先修改一下之前代…