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里传输电子书的方式一共有四种: 直接在 ...
随机推荐
- jQuery学习笔记:attr()与prop()的区别
先看看官方文档是如何解释两者之间功能差异的: attr() Get the value of an attribute for the first element in the set of matc ...
- Fragments
http://developer.android.com/guide/components/fragments.html#Design Content Design Philosophy Creati ...
- 列车时刻表查询 jqm/ajax/xml
<!doctype html><html lang="en"><head> <meta charset="UTF-8" ...
- Redhat Linux 性能 - 内置的 sar
缺省 / 默认 Redhat Linux 会自动使用 sar 采集系统性能信息,并记录到 /var/log/sa 每 10分钟采集一次, 记录 CPU / Memory / Disk / Networ ...
- Hbase之批量删除数据
import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; impo ...
- ajax请求超时时间
http://www.cnblogs.com/charling/p/3356216.html get post 请求 http://www.cnblogs.com/oneword/archive/20 ...
- shader学习路线
http://www.jianshu.com/p/7b9498e58659 http://blog.csdn.net/candycat1992/article/details/37882765
- java的System.getProperty()方法可以获取的值
java.version Java 运行时环境版本 java.vendor Java 运行时环境供应商 java.vendor.url Java 供应商的 URL java.home Java 安装目 ...
- js时间显示设置
//对日期中部分小于10的数字前边添加0 function zero(s){ return s < 10 ? '0' + s: s; } var date=new Date(), year = ...
- js-- 一些题目
1. ~~3.14~~3.14=-((~3.14)+1)=-(-(3.14+1)+1)=-(-(3+1)+1)=-(-4+1) =-(-3)=3 按位非(NOT)(~)操作数的负值减1. 2. var ...