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

这篇具有很好参考价值的文章主要介绍了全志ARM926 Melis2.0系统的开发指引⑧。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

编写目的

本文档是全志 Melis2.0 系统的开发指引文档,旨在协助开发者了解和掌握 Melis 系统,快速搭建 Melis系统的开发环境,将 Melis2.0 系统应用到产品开发中。
全志ARM926 Melis2.0系统的开发指引⑧,Linux,ARM MCU,MCU C51,linux,c++,c语言,运维,服务器

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 下载

全志ARM926 Melis2.0系统的开发指引⑧,Linux,ARM MCU,MCU C51,linux,c++,c语言,运维,服务器
下载地址:
固件镜像修改工具 ImageModify.exe下载 ImageModify_20230906.rar

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

全志ARM926 Melis2.0系统的开发指引⑧,Linux,ARM MCU,MCU C51,linux,c++,c语言,运维,服务器
下载地址:
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文章来源地址https://www.toymoban.com/news/detail-737320.html

到了这里,关于全志ARM926 Melis2.0系统的开发指引⑧的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 全志F1C200S ARM926 Melis2.0系统的开发相关工具文档及SDK源码库

    本文档是全志 Melis2.0 系统的开发指引文档,旨在协助开发者了解和掌握 Melis 系统,快速搭建 Melis系统的开发环境,将 Melis2.0 系统应用到产品开发中。 Melis2.0 系统是基于全志芯片平台自主研发的一套软件系统,其内容涵盖 SDK 代码包、资源制作工具组、编译链接脚本、固件打

    2024年02月07日
    浏览(77)
  • 全志F1C200S ARM926EJ-S内核处理器-开发板及用户使用说明

    F1C200S采用全志F1C200S ARM926EJ-S内核处理器,片内自带64MB SIP-DDR1,DDR频率可稳定运行在156Mhz,CPU主频可达720Mhz运行。板载USB、Flash、TF卡座、40P LCD接口、咪头等。支持720P视频输出,支持H.264、MJPEG等解码。 1,内核:ARM 926EJS @ 900MHz; 2,内存:DDR1 内置64M; 3,支持存储卡:板载自

    2024年02月07日
    浏览(43)
  • [ARM+Linux] 基于全志h616外设开发笔记

    修改用户密码 配置网络 nmcli dev wifi  命令扫描周围WIFI热点   nmcli dev wifi connect  xxx  password xxx 命令 连接WiFi 查看ip地址的指令: ifconfig ip addr show wlan0 SSH登录         这是企业开发调试必用方式,比串口来说不用接线,前提是接入网络并获得板子IP 地址,且系统做了SSH的

    2023年04月21日
    浏览(44)
  • ARM-Linux开发与MCU开发的不同之处分析

    目录 一、ARM-Linux应用开发和单片机开发的不同 二、Arm-Linux基本开发环境 针对ARM-Linux程序的开发,主要分为三类:应用程序开发、驱动程序开发、系统内核开发。针对不同种类的软件开发,有其不同的特点。 今天,我们来看看ARM-Linux开发和MCU开发的不同点,以及ARM-Linux的基本

    2024年02月10日
    浏览(49)
  • 基于全志A33开发板linux系统移植学习记录(Boot0)

    第一章 Boot0基于ARMGCC的编译与修改 入行快两年,希望通过学习系统移植巩固下相关的知识,目标板使用基于全志A33 的astar-parrot开发板,开始本来想着使用Boot0来加载uboot,但后期发现为了代码统一和便捷性,最终还是选择了SPL作为跳板,但Boot0流程相对清晰,所以将对其做的

    2023年04月08日
    浏览(46)
  • HUAWEI 擎云L420 折腾记 (搭建arm gcc、openocd 雅特力 MCU开发环境)

    心血来潮,能不能在纯国产的笔记本、系统上进行开发, 划拉了一下市面上能买到的设备,也就华为擎云L410 、L420 还能买得起,用的上,因此小黄鱼2xxx 买了一部99新的擎云L420 开始尝试是否能搭建起来工作环境。 wq退出保存 之后 java -verison java 环境ok 安装十分顺利,默认版

    2024年02月17日
    浏览(47)
  • 记录移植Python3到arm开发板linux系统中

    开发板情况 arm板是公司采购的工控机。主要用来 使用python3解析excel表格处理数据。 配置如下: 配置 版本 cpu imx6dl(armv7架构) 操作系统 linux3.10 python版本 2.7 项目情况 项目中最好使用 python3 。可行的有以下几种方式: 方式 优缺点 可行度 重做文件系统 订制程度比较高,后期增

    2024年02月04日
    浏览(51)
  • 1802_在Linux系统上开发ARM单机片机嵌入式软件

             全部学习汇总: GreyZhang/little_bits_of_linux: My notes on the trip of learning linux. (github.com) 1. 在Linux上也有嵌入式的开发环境,或许还有很多。不过,我现在接触到的大部分还是Windows居多。这一份文件介绍的是一个mbed platform这样一个开源的ARM嵌入式开发环境。可以支持C以

    2024年02月07日
    浏览(55)
  • 全志ARM-超声波测距

    超声波测距模块是用来测量距离的一种产品,通过发送和收超声波,利用时间差和声音传播速度, 计算出模块到前方障碍物的距离 1.测距原理: 给Trig端口至少10us的高电平发送声波,Echo信号,由低电平跳转到高电平,开始发送波;Echo,由高电平跳转回低电平,表示波回来了

    2024年04月28日
    浏览(35)
  • linux下进行MCU开发环境搭建

    在linux环境下开发可以利用shell命令实现对文件的批处理 伟大的程序员应该都用类unix系统! 可以实现对底层编译技术的了解,以便于更好的掌握嵌入式技术 通用性,采用开源工具,从底层开发项目,可以不受制于特定厂商的ide工具.可以实现通用架构! 在linux下进行嵌入式技术开发的

    2024年02月19日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包