Linux基础项目开发1:量产工具——页面系统(六)

简介: Linux基础项目开发1:量产工具——页面系统(六)

一、数据结构抽象

很多产品的页面设计都有类似的效果,如以下这些系统的页面

对于每一个页面,抽象出如下结构体,

核心在于其中的Run函数:

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

第10行:注册一个页面

第11行:注册多个页面

第12行:在链表里找到同名的页面名字

二、页面管理器

页面管理器用来管理页面,只需要实现2个函数:

1. PagesRegister : 把多个页面注册进链表

2. Page(name) :取出某个页面

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();
}
 

第6行:存放链表头

第8~12行:链表,用于将页面头文件注册到链表里,与头文件进行链接

第14~26行:在链表中找到同名的页面

三、单元测试

创建一个PageAction MainPage:

1.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);
}

第7行:__FILE__文件,__FUNCTION__ 函数名,__LINE__ 行数

第17行:将构建的结构体注册进上层的页面管理器

2.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; 
}
 
 

第16行:将页面管理器注册进去

第17行:调用Page里面的Run函数传入NULL

3.unitttest下的Makefile

EXTRA_CFLAGS  := 
CFLAGS_file.o := 
 
#obj-y += disp_test.o
#obj-y += input_test.o
#obj-y += font_test.o
#obj-y += ui_test.o
obj-y += page_test.o

4.page下的Makefile

EXTRA_CFLAGS  := 
CFLAGS_file.o := 
 
obj-y += page_manager.o
obj-y += main_page.o

四、上板测试

1.ubuntu上

book@100ask:~/source$ make
book@100ask:~/source$ cp -r 23_page_unittest/ ~/nfs_rootfs/

2. 开发板上

[root@100ask:/]#  mount -t nfs -o nolock,vers=3 192.168.5.11:/home/book/nfs_rootfs /mnt
[root@100ask:/mnt/23_page_unittest]# ./test ./simsun.ttc

3.运行效果:


目录
相关文章
|
5天前
|
Linux Shell
Linux系统
是对Linux系统进行管理的命令。对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与之前的DOS命令类似。linux命令在系统中有两种类型:内置Shell命令和Linux命令。
|
7天前
|
Ubuntu Linux Shell
Linux系统中如何查看磁盘情况
【9月更文挑战第3天】在Linux系统中,有多种方式查看磁盘情况。可通过命令行工具`df`查看文件系统磁盘使用情况,选项`-h`以人类可读格式显示,`-T`显示文件系统类型;`du`命令显示目录或文件磁盘使用情况,`-h`以人类可读格式显示,`-s`仅显示总计;`fdisk -l`列出磁盘和分区信息。此外,图形界面的磁盘管理工具和文件管理器也可用于查看磁盘使用情况。这些方法有助于更好地管理磁盘空间。
|
6天前
|
Linux Shell
Linux系统
是对Linux系统进行管理的命令。对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与之前的DOS命令类似。linux命令在系统中有两种类型:内置Shell命令和Linux命令。
|
2天前
|
Linux Shell
Linux系统
是对Linux系统进行管理的命令。对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与之前的DOS命令类似。linux命令在系统中有两种类型:内置Shell命令和Linux命令。
|
3天前
|
Linux Shell
Linux系统
是对Linux系统进行管理的命令。对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与之前的DOS命令类似。linux命令在系统中有两种类型:内置Shell命令和Linux命令。
|
3天前
|
Linux Shell
Linux系统
是对Linux系统进行管理的命令。对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与之前的DOS命令类似。linux命令在系统中有两种类型:内置Shell命令和Linux命令。
|
4天前
|
Linux Shell
Linux系统
是对Linux系统进行管理的命令。对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与之前的DOS命令类似。linux命令在系统中有两种类型:内置Shell命令和Linux命令。
|
14天前
|
Ubuntu Linux
查看Linux系统架构的命令,查看linux系统是哪种架构:AMD、ARM、x86、x86_64、pcc 或 查看Ubuntu的版本号
查看Linux系统架构的命令,查看linux系统是哪种架构:AMD、ARM、x86、x86_64、pcc 或 查看Ubuntu的版本号
126 3
|
9天前
|
机器学习/深度学习 安全 网络协议
Linux防火墙iptables命令管理入门
本文介绍了关于Linux防火墙iptables命令管理入门的教程,涵盖了iptables的基本概念、语法格式、常用参数、基础查询操作以及链和规则管理等内容。
168 73
|
2天前
|
Linux Shell
Linux 中 Tail 命令的 9 个实用示例
Linux 中 Tail 命令的 9 个实用示例
22 6
Linux 中 Tail 命令的 9 个实用示例