摘要:本项目是参考@韦东山的视频教程第三期嵌入式Linux jz2440平台的电子书项目框架,使用S5PV210 SOC芯片,Smart210开发板,基于Linux kernel 3.0.8做的移植与改进,算是一个学习嵌入式C语言框架化编程的练手项目。

项目源代码的github的repository链接如下:git@github.com:zczjx/dgt_pht.git , 网页版为:电子书项目-git仓库,电子书项目在dgt_book branch。clone 这个项目的爱好者,需要 git checkout  -b dgt_book origin/dgt_book对应的branch上。

1.电子书阅读器实现效果与功能

1).主要功能

在LCD触屏屏上显示txt文档的内的文字内容,并通过触屏的滑动效果或键盘在控制台终端的U和N键进行翻页,终端Q键退出。

2).效果展示

图1 电子书显示效果

图2 电子书滑动翻页效果

图3 控制台按键翻页效果

2.电子书阅读器系统架构

1).主要功能

软件系统的结构框图如图4所示。

图4 系统软件架构

2).架构概述

输入:

Txt  digital book 为原始的电子书文档,目前支持ascii、gbk、utf8、utf16-le、utf16-be等5种编码格式的文档。

输出:

output display bitmap 用于lcd显示屏framebuffer 可以直接显示的位图数据。

电子书阅读器引擎(Book engine):

用于处理核心业务逻辑与各子模块之间的数据通信与交互。

编码系统(Encode system):

用于识别ascii、gbk、utf8、utf16-le、utf16-be等各种编码格式的txt文档,并将原始编码数据格 供给Book engine 处理的子系统。

字体系统(Font system):

通过Book engine 传输过来的格式化编码数据,查询并获取每个字符(char)对于的freetype矢量字体bitmap或者ascii与hzk字模bitmap,并拷贝font bitmap的副本给Book engine

输入事件系统(input event system):

获取电容触屏或终端输入的数据,并将数据包装成input event提交给Book engine处理。

显示系统(Display system):

将Book engine生成用于显示的最终output display bitmap提交给系统的framebuffer,刷新显示电子书的页面。

3.电子书阅读器引擎设计(book_engine)

1).book_engine 的 API 设计

book_engine 的API声明位于 include/book_engine.h 其核心电子书描述符结构声明如下:

typedef struct book_dsc{char *book_path_name;char **input_dev_ls; /*stdin / tscreen*/struct book_buf  bk_buf_attr;struct text     text_attr;struct disp      disp_attr;struct page_dsc  *fisrt_pg_h;struct page_dsc  *curr_pg;int (*show_next_pg)(struct book_dsc *self);int (*show_pre_pg) (struct book_dsc *self);struct input_ev   rt_ev;int (*get_rt_input_ev)(struct input_ev *pev);
}book_dsc;

大部分成员的含义如变量名所述,这里仅介绍几个稍显隐晦的变量。

input_dev_ls:

使能系统支持的用户输入设备列表,该列表中的设备名,将在系统初始化之后激活打开。目前能够支持的输入设备名有:标准终端输入设备(stdin_dev)、电容触摸屏设备(tscreen)

bk_buf_attr:

用于管理电子书txt文档的文件描述符,以及该电子书文件在内存mmap之后的起始结束地址与页面地址。页面地址变量的含义如图5所示。

图5 电子书txt文档file fd在内存中的mmap 地址映射

text_attr:

文字字体属性,用于管理和设置矢量字体类型、尺寸大小与编码格式的属性。因为并非每种编码格式能够被所有的font支持,因而初始化设置系统font库类型之后,系统判断电子书txt文件的编码格式是否被该字体支持。若不支持,则返回错误,若支持,则设置字体大小,并与系统字库bitmap文件的路径采用mmap方法相关联,以方便通过编码查询字体的bitmap。

disp_attr:

显示属性,用于管理和设置显示设备(FB or VGA)设备,以及背景和字体颜色相关的值。

fisrt_pg_h 与 curr_pg:

页面缓存链表与当前页面,所有已经生成显示过的页面将会放在fisrt_pg_h 这个链表中,以加速来回翻页。

rt_ev:

实时的用户输入事件,通过get_rt_input_ev() 函数来刷新获取。

主要的API功能与用途概述如下:

init_book_load_sys():

如同函数名,该API将加载激活各子系统,初始化用户提供的struct book_dsc *pdsc 描述符,将其即将显示的系统中的电子书文件book_path关联起来。

set_book_disp_attr():

设置电子书的显示属性,显示设备与字体,背景颜色

devname:显示设备名字,目前只能选择LCD 的 "fb", 未来将支持 “svga”

set_book_text_attr():

设置电子书的字体属性与大小

font_name:"freetype"为矢量字体库,"ascii" 纯ascii英文字模,"hzk"为gbk编码的中文字库。

2).book_engine 的实现框架

book_engine 的中的api使用方法可以参考main.c中的sample code。

show_next_pg() 与 show_pre_pg主要实现电子书翻页的功能。

show_one_pg():

合成并显示一个完整的页面,主要的调用过程,

获取页面格式化编码——>strip 掉空格和换行,重定位页面的文字显示光标位置——.>获取一个矢量字体,根据字体的显示属性,再次重定位显示光标点的位置——>将当前矢量字体显示到屏幕上,并更新下一个字体的光标位置

show_one_font():

显示一个矢量字体,根据bitmap与color,调用显示设备的disp_pixel()函数将像素点一个个描绘出来。

update_global_pg_list():

每生成显示一个新页面,便通过该函数更新fisrt_pg_h ,将该页面挂载到缓存链表,方便来回翻页。

relocate_font_dis_pos()

根据屏幕x,y轴分辨率大小,以及每个字体的尺寸,及时定位新的显示光标,决定是否换行或页满翻到下一页。

嵌入式Linux系统的电子书阅读器项目1——Overview相关推荐

  1. 嵌入式Linux系统的电子书阅读器项目3——Encode Font System

    1.字符编码(Encode)与字体(Font)显示概述 如图1,大家在阅读器界面看到的不同字体和尺寸的"好"字(左边宋体小二,右边楷体小二),在电子书txt格式文档中的原始数据是如 ...

  2. 开源的电子书阅读器项目

    论坛会员zhang_cn分享的开源的电子书阅读器项目供大家参考 iphone平台上开源的电子书阅读器项目: https://github.com/vfr/Reader https://github.c ...

  3. ios 开源的电子书阅读器项目

    iphone平台上开源的电子书阅读器项目: https://github.com/vfr/Reader https://github.com/brow/leaves https://github.co ...

  4. linux 电子书阅读器_3个适用于Linux桌面的电子书阅读器

    linux 电子书阅读器 我通常会在手机或Kobo电子书阅读器上阅读电子书. 我从来都不习惯在大屏幕上读书. 但是,许多人经常在笔记本电脑或台式机上读书. 如果您是其中之一(或者可能是),我想向您介绍 ...

  5. Android电子书阅读器开发笔记(1):创建电子书阅读器项目

    项目开发工具是Android Studio. 创建项目 选择菜单命令:File->New->New Project,填入项目信息. (2)设置项目运行的设备和最低Android SDK版本 ...

  6. 推荐几款好用的Linux电子书阅读器(上)

    随着手持设备的不断增加,人们也越来越喜欢在 Kindle.iPad.iPhone 或者 PC 上进行阅读,所以对电子书的需求也在不断增加.当涉及到 Linux 用户时,也有各式各样的电子书应用程序,来 ...

  7. 安卓pdf阅读器_一文看懂|Kindle和其他安卓电子书阅读器,该选哪个?图+视频一目了然...

    7月30 更新 关于词典 Kindle导入词典还是很方便的,词典数量和种类也很多.其他电子书阅读器有的支持导入mobi格式的词典或者词典包,有的不支持外部导入,只能用内置词典,有这方面需求的购买前咨询 ...

  8. iPhone开源电子书阅读器:iPhoneebooks

    iPhoneebooks是一个iPhone开源电子书阅读器项目,支持HTML和Txt格式. 授权协议:GNU GPL v2 截图: http://code.google.com/p/iphoneebo ...

  9. python微信小程序 java电子书阅读器系统uniapp

    功能介绍 将系统权限按管理员和用户这两类涉及用户划分. (a) 管理员:管理员使用本系统涉到的功能主要有:个人中心.用户管理.类型管理.书城管理.管理员管理.系统管理等功能. (b)用户进入系统前台可 ...

最新文章

  1. HBuilder简单入门
  2. 控件包含代码块,因此无法修改控件集合
  3. 机器学习面试:这25个实用又有深度的问题
  4. 移动端网站建设——一如既往地简洁大方
  5. 【No.3 Ionic】超级逗表情 App
  6. Linux程序内存跟踪,分享一款Linux进程和内存活动监视神器
  7. 开源内容管理系统 php mysql_「分享」7 个精致的 PHP 开源内容管理系统(CMS)
  8. 为什么被雷击中的大多是男性???
  9. 【POJ - 2485 】Highways (最小生成树,Prim算法,瓶颈生成树)
  10. Android 应用性能优化(4)---Android App性能评测分析-启动时间篇
  11. Java坦克大战(四)
  12. 不使用额外空间交换2个数据的源代码
  13. javaSocket编程UDP
  14. band math函数_波段运算(bandmath)工具中常用的函数
  15. 在线画图工具,高效办公
  16. Cypress系列(21)- 可操作类型的命令 之 check()、uncheck()
  17. php对数据进行归一化处理方法,12种数据量纲化处理方式
  18. 华三模拟器HCL文件打开/导入失败解决方法
  19. 令人敬畏的泰格伍兹 万维钢_令人敬畏的桌面壁纸:Windows 7版
  20. 视频去水印在线网站?

热门文章

  1. Chrome浏览器无法启动,因为应用程序的并行配置不正确
  2. 将QLV视频格式转换为MP4格式
  3. checkbox选中触发事件
  4. 【机器学习】模型评价指标中的召回率低的原因
  5. “流言蜚语”中,前CEO直接套现20亿美元!
  6. 【ISP】浅析CCM
  7. 大数据与SQL周末读书微信群,等你来
  8. 英语发音规则---E字母(总结)-[复习中]
  9. 一番星大厂面试经验分享第一弹
  10. 面试常用mysql语句_50个常用的笔试、面试sql语句