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里传输电子书的方式一共有四种: 直接在 ...
随机推荐
- Python学习(18)面向对象
目录 Python 面向对象 创建实例对象 Python内置类属性 Pyyhon对象销毁(垃圾回收) 类属性与方法 Python 面向对象 Python从设计之初就已经是一门面向对象的语言,正因为如此 ...
- Target runtime Apache Tomcat v7.0 is not defined.
打开项目,找到.settings--->org.eclipse.wst.common.project.facet.core 修改这个文件中: <?xml version="1.0 ...
- Git基本交互流程图
- hdu 1588(Fibonacci矩阵求和)
题目的大意就是求等差数列对应的Fibonacci数值的和,容易知道Fibonacci对应的矩阵为[1,1,1,0],因为题目中f[0]=0,f[1]=1,所以推出最后结果f[n]=(A^n-1).a, ...
- Mysql的最佳优化经验20多条
原文:http://blog.csdn.net/lifuxiangcaohui/article/details/6207801 今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其 ...
- 转载:最大子段和问题(Maximum Interval Sum)
一.问题描述 给定长度为n的整数序列,a[1...n], 求[1,n]某个子区间[i , j]使得a[i]+…+a[j]和最大.或者求出最大的这个和. 例如(-2,11,- ...
- OpenGL的gluPerspective和gluLookAt的关系[转]
函数原型void gluLookAt(GLdoble eyex, GLdouble eyey, GLdouble eyez, GLdouble centerx, GLdouble centery, ...
- grub4dos通用菜单及相关工具包
grub4dos通用菜单及相关工具包 全套工具包(含PE.ISO,可根据需要替换删减):http://pan.baidu.com/s/1i4EjWod模板文件3.3M(不含PE.ISO):http:/ ...
- 慎用GetOpenFileName
这两天发现了一个小问题,经过一上午的排查终于找到了问题的原因--Windows 7的API函数GetOpenFileName竟然有BUG! 请参考下面的MFC代码: CFileDialog dlg(T ...
- Unity5 新功能解析--物理渲染与standard shader
Unity5 新功能解析--物理渲染与standard shader http://blog.csdn.net/leonwei/article/details/48395061 物理渲染是UNITY5 ...