2.4.2电子书fb.c文件
显示层面头文件
定义结构体,为显示统一标准
int (*DeviceInit)(void);
显示类驱动初始化
int (*ShowPixel)(int iPenX, int iPenY, unsigned int dwColor);
对某一点进行瞄色
int (*CleanScreen)(unsigned int dwBackColor);
清屏
int RegisterDispOpr(PT_DispOpr ptDispOpr);
注册相应链表
#ifndef _DISP_MANAGER_H
#define _DISP_MANAGER_H typedef struct DispOpr {
char *name;
int iXres;
int iYres;
int iBpp;
int (*DeviceInit)(void);
int (*ShowPixel)(int iPenX, int iPenY, unsigned int dwColor);
int (*CleanScreen)(unsigned int dwBackColor);
struct DispOpr *ptNext;
}T_DispOpr, *PT_DispOpr; int RegisterDispOpr(PT_DispOpr ptDispOpr);
void ShowDispOpr(void);
int DisplayInit(void);
int FBInit(void); #endif /* _DISP_MANAGER_H */
书写规范 命名变量 全局为g 结构体为t 指针为p int型为i unsigned 为u 变量名单个单词首字母大写
static int FBDeviceInit(void);
static int FBShowPixel(int iPenX, int iPenY, unsigned int dwColor);
static int FBCleanScreen(unsigned int dwBackColor); static int g_iFBFD;
struct fb_var_screeninfo g_tVar; /* Current var */
struct fb_fix_screeninfo g_tFix; /* Current fix */
static int g_iScreenSize; //????′óD?
static unsigned char * g_pucFBMem;
static int g_iLineWidth;
static int g_iPixelWidth; /* 11?ìò????á11ì?£? éè??£?×¢2á */
//gè??? t?á11ì?
static T_DispOpr g_tFBispopr = {
.name = "fb",
.DeviceInit = FBDeviceInit();
.ShowPixel = FBShowPixel();
.CleanScreen = FBCleanScreen(); }; static int FBDeviceInit(void)
{ g_iFBFD = open("FB_DEVICE_NAME",O_RDWR);
if(g_iFBFD < 0)
{
DBG_PRINTF("can't open FB_DEVICE_NAME \n");
return -1;
}
if(ioctl(g_iFBFD, FBIOGET_VSCREENINFO, &g_tVar))
{
DBG_PRINTF("can't get var \n");
return -1;
}
if(ioctl(g_iFBFD, FBIOGET_FSCREENINFO, &g_tFix))
{
DBG_PRINTF("can't get fix \n");
return -1;
} g_tFBispopr.iXres = g_tVar.xres;
g_tFBispopr.iYres = g_tVar.yres;
g_tFBispopr.iBpp = g_tVar.bits_per_pixel; g_iScreenSize = var.xres * var.yres * var.bits_per_pixel / 8; //μ¥??×??ú g_pucFBMem = (unsigned char *)mmap(NULL, screen_size, \
PROT_READ | PROT_WRITE, MAP_SHARED, fd_fb, 0);
if(g_pucFBMem == (unsigned char *) -1)
{
DBG_PRINTF("can't mmap \n");
return -1;
}
memset(g_pucFBMem, 0, g_iScreenSize); return 0;
} static int FBShowPixel(int iPenX, int iPenY, unsigned int dwColor)
{
unsigned char *pucPen_8 = g_pucFBMem + iPenY * g_iLineWidth + iPenX * g_iPixelWidth; //μ±?°??????ó|?ú′?????
unsigned short *pwPen_16;
unsigned int *pdwPen_32; unsigned int red, blue, green; pwPen_16 = (unsigned short *)pucPen_8;
pdwPen_32 = (unsigned int *)pucPen_8; switch( g_tFBispopr.iBpp )
{
case 8:
{
*pucPen_8 = dwColor; //??ó|μ÷é?°???é? break;
}
case 16:
{
/* 5*6*5 */
red = (dwColor >> 16) & 0xff;
green = (dwColor >> 8) & 0xff;
blue = (dwColor >> 0) & 0xff; dwColor = ((red >> 3 ) << 11) | ((green >> 2) << 5) | ( blue >> 3); /* ??é?êy?Y?a???? */
*pwPen_16 = dwColor; break;
}
case 32:
{
*pdwPen_32 = dwColor; break;
} }
default:
{
DBG_PRINTF("can't surport %dbpp \n", g_tFBispopr.iBpp);
return -1;
break;
}
return 0; } static int FBCleanScreen(unsigned int dwBackColor)
{
unsigned char *pucPen_8 = g_pucFBMem;
unsigned short *pwPen_16;
unsigned int *pdwPen_32; unsigned int red, blue, green;
int i = 0; pwPen_16 = (unsigned short *)pucPen_8;
pdwPen_32 = (unsigned int *)pucPen_8; switch( g_tFBispopr.iBpp )
{
case 8:
{
memset(pucPen_8, dwBackColor, g_iScreenSize); break;
}
case 16:
{
/* 5*6*5 */
red = (dwBackColor >> 16) & 0xff;
green = (dwBackColor >> 8) & 0xff;
blue = (dwBackColor >> 0) & 0xff; dwBackColor = ((red >> 3 ) << 11) | ((green >> 2) << 5) | ( blue >> 3);
for(i = 0 ; i< g_iScreenSize; i++)
{
*pwPen_16 = dwBackColor;
pwPen_16 ++;
i += 2;
} break;
}
case 32:
{
for(i = 0 ; i< g_iScreenSize; i++)
{
*pdwPen_32 = dwBackColor;
pdwPen_32 ++;
i += 4;
}
break;
} }
default:
{
DBG_PRINTF("can't surport %dbpp \n", g_tFBispopr.iBpp);
return -1;
break;
}
return 0; } int FBInit(void)
{
RegisterDispOpr( &g_tFBispopr);
return 0;
}
2.4.2电子书fb.c文件的更多相关文章
- kindle 安卓 app下载的电子书放在什么文件夹?
They are buried in: /sdcard/Android/data/com.amazon.kindle/files/
- Epub格式的电子书——文件组成
epub格式电子书遵循IDPF推出的OCF规范,OCF规范遵循ZIP压缩技术,即epub电子书本身就是一个ZIP文件,我们将epub格式电子书的后缀.epub修改为.zip后,可以通过解压缩软件(例如 ...
- epub电子书--目录结构介绍
epub电子书简介 epub全称为Electronic Publication的缩写,意为:电子出版, epub于2007年9月成为国际数位出版论坛(IDPF)的正式标准,以取代旧的开放Open eB ...
- 5.数码相框-额外项目电子书总结,并使用svgalib库
在LCD显示任意编码的文本文件,类似电子书 怎样在LCD上显示文件: 需要哪几个文件? 1.顶部文件 通过main.c分析命令行的操作,然后初始化各个管理文件下的结构体,比如DisplayInit() ...
- epub-2格式电子书剖析之一:文档构成
epub格式电子书遵循IDPF推出的OCF规范,OCF规范遵循ZIP压缩技术,即epub电子书本身就是一个ZIP文件,我们将epub格式电子书的后缀.epub修改为.zip后,可以通过解压缩软件(例如 ...
- epub、ocf等常用电子书格式浅析----附JAVA示例程序
一. 电子书介绍 转载请注明http://www.cnblogs.com/xckk/p/6020324.html Epub(Electronic Publication)是一个完全开放和免费的电子书标 ...
- Java对epub电子书类型切割
Epub电子书切割 引言:由于公司存储电子书的格式是.epub.一本电子书加载的时候,如果电子书大的话,全部加载该电子书会非常的消耗时间和资源.非常的不合理.那么现在,将所有电子书按章切分.将拆分的电 ...
- .OPF文件剖析
OPF文档是epub电子书的核心文件,且是一个标准的XML文件,依据OPF规范,主要由五个部分组成: 1.<metadata>,元数据信息,由两个子元素组成: <dc-metadat ...
- 简单实现一个快速传输电子书到kindle的小项目
前言 最近翻出来好久没有看的kindle,准备继续我的阅读之路.当然,也是因为发现了一个非常好的获取电子书资源的网站,又燃起了我的阅读兴趣. 然而,往kindle里传输电子书的方式一共有四种: 直接在 ...
随机推荐
- 【Todo】【读书笔记】大数据Spark企业级实战版 & Scala学习
下了这本<大数据Spark企业级实战版>, 另外还有一本<Spark大数据处理:技术.应用与性能优化(全)> 先看前一篇. 根据书里的前言里面,对于阅读顺序的建议.先看最后的S ...
- hdu 1081(最大子矩阵和)
题目很简单,就是个最大子矩阵和的裸题,看来算法课本的分析后也差不多会做了.利用最大子段和的O(n)算法,对矩阵的行(或列)进行 i和j的枚举,对于第 i到j行,把同一列的元素进行压缩,得到一整行的一维 ...
- 【ufldl tutorial】Softmax Regression
今天太长姿势了,什么叫懂了也写不出代码说的不就是我吗,就那么几行代码居然叽叽歪歪写了一个小时. 首先exercise要实现的是softmax的cost function和gradient,如下图: ( ...
- java语法糖3 深入剖析Java中的装箱和拆箱
装箱 在Java SE5之前,如果要生成一个数值为10的Integer对象,必须这样进行: Integer i = new Integer(10); 而在从Java SE5开始就提供了自动装箱的特性, ...
- 【转】loading 三种实现方式
转载:http://www.eoeandroid.com/forum.php?mod=viewthread&tid=76872 一.通过动画实现 定义res/anim/loading.xml如 ...
- Element can be click when out of view
WebDriver can't action the element when out of view Webdriver can't action the element when the elem ...
- php Composer 报ssl证书错误
CA证书下载地址:http://curl.haxx.se/docs/caextract.html 修改php.ini文件 openssl.cafile= D:/wamp/php/verify/cace ...
- [saiku] 集成单点登录
思路: 自定义一个loginCallbackFilter用于单点登录成功后执行模拟用户认证授权登录的操作. 当授权成功后所有配置需要授权才能访问的url就再也不会被任何filter拦截,可随意访问了. ...
- CF---(452)A. Eevee
A. Eevee time limit per test 1 second memory limit per test 256 megabytes input standard input outpu ...
- Q: How could I use MATLAB interface for parameter selection?
Q: How could I use MATLAB interface for parameter selection? One can do this by a simple loop. See t ...