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

news2024/12/26 17:47:58

全志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 = NULL
	framewin_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.coloradmin.cn/o/1062954.html

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

相关文章

JavaScript系列从入门到精通系列第十五篇:JavaScript中函数的实参介绍返回值介绍以及函数的立即执行

文章目录 一:函数的参数 1:形参如何定义 2:形参的使用规则 二:函数的返回值 1:函数返回值如何定义 2:函数返回值种类 三:实参的任意性 1:方法可以作为实参 2:将匿…

Next.js 入门笔记

前言 之前初步体验了 React 的魅力, 又看文档理解了一下 useState 和 useEffect, 目前初步理解的概念是: useState 用来声明在组件中使用并且需要修改的变量 useEffect 用来对 useState 声明的变量进行初始化赋值 可能理解的不太准确, 不过大概差不多是这么个意思. 但是再往后…

Qt之显示PDF文件

之前使用过mupdf库,能够成功显示pdf,但是我用着有BUG,不太理解它的代码,搞了好久都不行。后面又试了其他库,如pdfium、popler、下载了很多例程,都跑不起来!后面偶然得知xpdf库,看起来…

【C++设计模式之建造者模式:创建型】分析及示例

简介 建造者模式(Builder Pattern)是一种创建型设计模式,它将复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。 描述 建造者模式通过将一个复杂对象的构建过程拆分成多个简单的部分,并由不同…

华为云云耀云服务器L实例评测|部署个人音乐流媒体服务器 navidrome

华为云云耀云服务器L实例评测|部署个人音乐流媒体服务器 navidrome 一、云耀云服务器L实例介绍1.1 云服务器介绍1.2 产品规格1.3 产品优势1.4 支持镜像 二、云耀云服务器L实例配置2.1 重置密码2.2 服务器连接2.3 安全组配置 三、部署 navidrome3.1 navidrome 介绍3.…

全志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…

网课搜题 小猿题库多接口微信小程序源码 自带流量主

多接口小猿题库等综合网课搜题微信小程序源码带流量主,网课搜题小程序, 可以开通流量主赚钱 搭建教程1, 微信公众平台注册自己的小程序2, 下载微信开发者工具和小程序的源码3, 上传代码到自己的小程序 源码下载:https://download.csdn.net/download/m0_…

【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…

软技能继续挑战网络安全领域

根据 ISACA 的一份新报告&#xff0c;新的网络安全调查结果指出了网络安全专家缺乏的领域&#xff0c;其中人际技能、云计算和安全措施是网络安全专家最突出的技能缺陷。 59% 的网络安全领导者表示他们的团队人手不足。50% 的受访者表示有非入门级职位的职位空缺&#xff0c;而…

多媒体应用设计师

1.多媒体技术基础 1.1.媒体与技术 1.1.媒体 维基百科&#xff1a;传播信息载体 国际电信联盟&#xff08;ITU-T&#xff09;&#xff1a;感知、表示、存储和传输的手段和方法。 两层含义&#xff1a;存储信息的实体&#xff0c;媒质。传递信息载体&#xff0c;媒介。 1.2.国…

使用Python优雅的绘制甘特图

简介 Gantt图表是一种条形图&#xff0c;用于描绘项目进度。图表在垂直轴上列出要执行的任务&#xff0c;在水平轴上列出时间间隔。图中水平条的宽度显示每个活动的持续时间。在Python中&#xff0c;我们可以使用Plotly库来创建和展示Gantt图表。 基础的Gantt图表 首先&…

beego-简单项目写法--路径已经放进去了

Beego案例-新闻发布系统 1.注册 后台代码和昨天案例代码一致。,所以这里面只写一个注册的业务流程图。 **业务流程图 ** 2.登陆 业务流程图 登陆和注册业务和我们昨天登陆和注册基本一样&#xff0c;所以就不再重复写这个代码 但是我们遇到的问题是如何做代码的迁移&…

计算机专业毕业设计项目推荐12-志愿者管理系统(Spring+Js+Mysql)

志愿者管理系统&#xff08;SpringJsMysql&#xff09; **介绍****各部分模块实现** 介绍 本系列(后期可能博主会统一为专栏)博文献给即将毕业的计算机专业同学们,因为博主自身本科和硕士也是科班出生,所以也比较了解计算机专业的毕业设计流程以及模式&#xff0c;在编写的过程…

[NISACTF 2022]join-us - 报错注入无列名注入

点击登录&#xff0c;找到注入点 这种框&#xff0c;可以直接爆破关键字&#xff0c;看是否拦截&#xff0c;也可以手动尝试&#xff0c;发现、union、and、or、substr、database等关键字都拦截了 1、学到了&#xff1a;可以用数据库中不存在的表名或者不存在的自定义函数名爆…

面试高频手撕算法 - 01背包系列

1. 前言 为什么要专门去搞一下这个背包问题呢 ? 因为作者已经在两场面试中吃了这个亏, 尤其是在面深信服的测开岗的时候, 一面的难度适中, 加上面试官也没为难我, 侥幸让我过了. (以下是一面问题) 二面的时候, 主要问了项目和手撕算法. 当时项目个人觉得面的还不错, 因为本人是…

Mac下docker安装MySQL8.0.34

学习并记录一下如何用docker部署MySQL 在Docker中搜索并下载MySQL8.0.x的最新版本 下载好后&#xff0c;在Images中就可以看到MySQL的镜像了 通过下面的命令也可以查看docker images启动镜像&#xff0c;使用下面的命令就可以启动镜像了docker run -itd --name mysql8.0.34 -…

java项目log4j2单独为某个类配置日志文件

在项目中&#xff0c;一般都是把日志记录到一个日志文件中。 对应的log4j2.xml内容如下图所示&#xff1a;只有一个RollingFile节点&#xff0c;整个系统只会生成一个log日志文件。 生成的日志文件如下图&#xff1a; 当系统不断扩大&#xff0c;业务越来越复杂&#xff0c;所…

spark on hive

需要提前搭建好hive&#xff0c;并对hive进行配置。 1、将hive的配置文件添加到spark的目录下 cp $HIVE_HOME/conf/hive-site.xml $SPARK_HOME/conf2、开启hive的hivemetastore服务 提前创建好启动日志存放路径 mkdir $HIVE_HOME/logStart nohup /usr/local/lib/apache-hi…

阶段五-Day02-jQuery

一、jQuery入门 1. 定义和特点 目前最流行的JavaScript函数库之一&#xff0c;对JavaScript进行了封装。 并不是一门新语言&#xff0c;而是将常用的、复杂的JavaScript操作进行函数化封装&#xff0c;封装后可以直接调用&#xff0c;大大降低了使用JavaScript的难度&#xf…

Dism软件安装指南:优化Windows系统的必备利器

主旨 有没有发现&#xff0c;自己的电脑时间一长&#xff0c;是不是就会变得越来越慢&#xff0c;越来越卡&#xff0c;当你去网上查资料的时候&#xff0c;都是说什么磁盘碎片清理&#xff0c;禁止程序自启动什么的&#xff0c;不是说这些方式没用&#xff0c;反而很有用&…