电子产品量产工具(5)- 页面系统实现

5 页面系统设计

5.1 页面系统头文件page_manager.h

在头文件中构建页面结构体

5.1.1 页面结构体PageAction

typedef struct PageAction {
	char *name;   /*页面名*/
	void (*Run)(void *pParams); /*页面运行函数*/
	struct PageAction *ptNext; /*指向下一个页面*/
}PageAction, *PPageAction;

5.1.2 page_manager.h完整代码

#ifndef _PAGE_MANAGER_H
#define _PAGE_MANAGER_H

typedef struct PageAction {
	char *name;
	void (*Run)(void *pParams);
	struct PageAction *ptNext;
}PageAction, *PPageAction;

void PageRegister(PPageAction ptPageAction);
void PagesRegister(void);
PPageAction Page(char *name);

#endif

5.2 页面管理page_manager.c

5.2.1 页面注册函数PageAction

static PPageAction g_ptPages = NULL;
void PageRegister(PPageAction ptPageAction) /*将页面注册进链表*/
{
	ptPageAction->ptNext = g_ptPages;
	g_ptPages = ptPageAction;
}

void PagesRegister(void) /*注册多个页面*/
{
	extern void MainPageRegister(void);
	MainPageRegister();
}

5.2.2 页面获取函数Page

根据页面名找到指定页面

PPageAction Page(char *name)
{
	PPageAction ptTmp = g_ptPages;
	while (ptTmp)
	{
		if (strcmp(name, ptTmp->name) == 0)
			return ptTmp;
		ptTmp = ptTmp->ptNext;
	}
	return NULL;
}

5.2.3 page_manager.c完整代码

#include <common.h>
#include <page_manager.h>
#include <string.h>
static PPageAction g_ptPages = NULL;

void PageRegister(PPageAction ptPageAction)
{
	ptPageAction->ptNext = g_ptPages;
	g_ptPages = ptPageAction;
}

PPageAction Page(char *name)
{
	PPageAction ptTmp = g_ptPages;
	while (ptTmp)
	{
		if (strcmp(name, ptTmp->name) == 0)
			return ptTmp;
		ptTmp = ptTmp->ptNext;
	}
	return NULL;
}

void PagesRegister(void)
{
	extern void MainPageRegister(void);
	MainPageRegister();
}

5.3 测试程序page_test.c

5.3.1 page_test.c

#include <sys/mman.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <linux/fb.h>
#include <fcntl.h>
#include <stdio.h>
#include <string.h>
#include <sys/ioctl.h>
#include <stdlib.h>

#include <page_manager.h>

int main(int argc, char **argv)
{
	PagesRegister();
	Page("main")->Run(NULL);
	return 0;	
}

5.3.2 main_page.c

#include <page_manager.h>
#include <stdio.h>

static void MainPageRun(void *pParams)
{
	printf("%s %s %d\n", __FILE__, __FUNCTION__, __LINE__);
}

static PageAction g_tMainPage = {
	.name = "main",
	.Run  = MainPageRun,
};

void MainPageRegister(void)
{
	PageRegister(&g_tMainPage);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值