全志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.hqwc.cn/news/125673.html

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

相关文章

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

全志ARM926 Melis2.0系统的开发指引⑦ 编写目的11. 调屏11.1. 调屏步骤简介11.1.1. 判断屏接口。11.1.2. 确定硬件连接。11.1.3. 配置显示部分 sys_config.fex11.1.3.1. 配置屏相关 IO 11.1.4. Lcd_panel_cfg.c 初始化文件中配置屏参数11.1.4.1. LCD_cfg_panel_info11.1.4.2. L…

python读取vivo手机截图,将满屏图片文件移动别的路径

问题之初 python读取vivo手机截图, 将满屏图片文件移动别的路径好多这样的图片,占用手机大量的内存,食之无味弃之可惜!那么会复制粘贴👀代码的我们我们今天就把这些图片筛选清理掉。 这段代码 原有逻辑的基础上&…

学信息系统项目管理师第4版系列18_采购管理

1. 协议 1.1. 合同 1.1.1. 国际合作的项目经理应牢记,无论合同规定如何详尽,文化和当地法律对合同及其可执行性均有影响 1.2. 服务水平协议(SLA) 1.3. 谅解备忘录 1.4. 协议备忘录(MOA) 1.5. 订购单 …

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

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

【小沐学Python】各种Web服务器汇总(Python、Node.js、PHP、httpd、Nginx)

文章目录 1、Web服务器2、Python2.1 简介2.2 安装2.3 使用2.3.1 http.server(命令)2.3.2 socketserver2.3.3 flask2.3.4 fastapi 3、NodeJS3.1 简介3.2 安装3.3 使用3.3.1 http-server(命令)3.3.2 http3.3.3 express 4、PHP4.1 简…

MySQL面试题合集

MySQL面经知识整理 文章目录 MySQL面经知识整理一、查询相关1.什么是MySQL的连接查询,左连接,右连接,内外连接2.SQL慢查询优化的方法3.大表查询如何优化 二、索引相关1.在MySQL中,可以通过哪些命令来查看查询是否使用了索引2.MySQL的最左匹配…

复习 --- 消息队列

进程间通信机制(IPC) 简述 IPC:Inter Process Communication 进程和进程之间的用户空间相互独立,但是4G内核空间共享,进程间的通信就是通过这4G的内核空间 分类 传统的进程间通信机制 无名管道(pipe) 有名管道&…

karmada v1.7.0安装指导

前言 安装心得 经过多种方式操作,发现二进制方法安装太复杂,证书生成及其手工操作太多了,没有安装成功;helm方式的安装,v1.7.0的chart包执行安装会报错,手工修复了报错并修改了镜像地址,还是各…

学信息系统项目管理师第4版系列16_资源管理过程

1. 组建项目团队,建设项目团队和管理项目团队属于执行过程组 1.1. 【高22上选21】 1.1.1. 【高21上选25】 1.2. 3版 2. 【高19上案三】 2.1. 【高18上案三】 2.2. 【高23上案一】 3. 规划资源管理 3.1. 定义如何估算、获取、管理和利用团队以及实物资源的过…

数值分析学习笔记——误差【华科B站教程版本】

误差 误差:一个物理量的真实值与计算值之间的误差 误差来源与分类 模型误差:对问题所抽象出来的数学/物理模型是误差的,比如要有一些假设条件才进行理论的推导观测误差:测量得到的模型的参数的值的误差方法误差(截断…

矩阵的c++实现(2)

上一次我们了解了矩阵的运算和如何使用矩阵解决斐波那契数列&#xff0c;这一次我们多看看例题&#xff0c;了解什么情况下用矩阵比较合适。 先看例题 1.洛谷P1939 【模板】矩阵加速&#xff08;数列&#xff09; 模板题应该很简单。 补&#xff1a;1<n<10^9 10^9肯定…

计算机毕业设计 基于SSM的民宿推荐系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…