首页 > 其他分享 >100ASK_IMX6ULL-PRO 数码相框扩展项目:支持打开阅读 TXT 文件

100ASK_IMX6ULL-PRO 数码相框扩展项目:支持打开阅读 TXT 文件

时间:2024-11-25 18:12:27浏览次数:6  
标签:文件 界面 strFileName 100ASK ptPage tFileMap IMX6ULL TXT PageDesc

背景说明

本篇内容基于百问网嵌入式Linux项目数码相框与文件浏览器嵌入式Linux电子书阅读器

需求:在文件浏览器界面中支持双击打开TXT类型文件,进入新界面进行文本阅读和翻页控制。

实现思路说明

浏览器界面中响应双击操作,识别TXT类型文件成功后进入阅读器界面。可参考项目中图片类型(BMP,JPG,PNG)文件的处理逻辑

else if (isTextFileSupported(tPageParams.strCurPictureFile)){
    // 支持文本文件的编码格式
    DBG_PRINTF("点击打开文件 %s\n", tPageParams.strCurPictureFile);
    tPageParams.iPageID = ID("browse");
    Page("reading")->Run(&tPageParams);
    ShowBrowsePage(&g_tBrowsePageMenuIconsLayout);
}

核心内容:阅读器界面的设计与实现

参考项目数码相框与文件浏览器中界面框架的设计(主界面和浏览器界面),主要包含:

  • UI 部分:通过Layout布局设计按钮和内容显示区域
  • 事件处理:捕获输入事件并响应,完成业务逻辑

业务逻辑的设计实现参考 嵌入式Linux电子书阅读器

  • 内容显示:在指定区域内显示文本文字,直到满页或者文件尾记为一页。

  • 按钮响应:

    • “返回”:退出阅读器界面,跳转到浏览器界面
    • “上一页”:刷新显示文本内容逻辑上前面的部分,区域满屏记为上一页。当前为第一页则不响应处理。
    • “下一页”:刷新显示文本内容逻辑上后面的部分,区域满屏或者达到文件尾记为下一页。

内容显示:

static int ShowTextInReadingPage(PT_VideoMem ptVideoMem, char *strFileName)
{
	int iError;

	// 打开文本文件
	strncpy(g_tFileMap.strFileName, strFileName, 256);
	g_tFileMap.strFileName[255] = '\0';
    iError = MapFile(&g_tFileMap);
    if (iError)
    {
        DBG_PRINTF("MapFile %s error!\n", strFileName);
        return 0;
    }

	// 确认文件编码
	g_ptEncodingOprForFile = SelectEncodingOprForFile(g_tFileMap.pucFileMapMem);
    if (!g_ptEncodingOprForFile)
    {
        DBG_PRINTF("SelectEncodingOprForFile %s error!\n", strFileName);
        UnMapFile(&g_tFileMap);
        return 0;
    }
  
	// 第一个显示字符紧接在文件头后面
    g_pucLcdFirstPosAtFile = g_tFileMap.pucFileMapMem + g_ptEncodingOprForFile->iHeadLen;


    // 在打开的文件中标记索引位置,在显示设备上逐行逐个显示字符
	// 自动记录当前的进度,重新打开时恢复
	unsigned char *pucTextFileMemCurPos;

	if (g_ptCurPage)
	{
		pucTextFileMemCurPos = g_ptCurPage->pucLcdFirstPosAtFile;	// 上一次阅读界面的第一个字符
	}
	else
	{
		pucTextFileMemCurPos = g_pucLcdFirstPosAtFile;				// 文本文件中的第一个字符
	}
	iError = ShowOnePage(pucTextFileMemCurPos, ptVideoMem);

    return 0;
}

函数ShowOnePage实现的功能:

  • 逐个获取文件中的字符

    • 处理特殊字符,如换行

    • 对于文字字符,通过字符文件获取矢量位图,调整位置后显示到 LCD 设备上

      • 项目已支持相关接口: GetCodeFrmBuf通过字符文件获取矢量位图,MergeOneFontToVideoMem显示单个字符到 LCD 设备上
  • 到达文件尾部或者满页,则完成一页显示

翻页控制

记录显示的每一页:

typedef struct PageDesc {
	int iPage;
	unsigned char *pucLcdFirstPosAtFile;
	unsigned char *pucLcdNextPageFirstPosAtFile;
	struct PageDesc *ptPrePage;
	struct PageDesc *ptNextPage;
} T_PageDesc, *PT_PageDesc;

通过链表管理显示页面,实现逻辑上的翻页显示:

static void RecordPage(PT_PageDesc ptPageNew)
{
	PT_PageDesc ptPage;
	
	if (!g_ptPages)
	{
		g_ptPages = ptPageNew;
	}
	else
	{
		ptPage = g_ptPages;
		while (ptPage->ptNextPage)
		{
			ptPage = ptPage->ptNextPage;
		}
		ptPage->ptNextPage   = ptPageNew;
		ptPageNew->ptPrePage = ptPage;
	}
}

效果展示

标签:文件,界面,strFileName,100ASK,ptPage,tFileMap,IMX6ULL,TXT,PageDesc
From: https://www.cnblogs.com/libq8/p/18568297

相关文章

  • 用Python将多个txt文件合并到同一个excel中的不同sheet
    写在前面:以下代码只适用于具有同样格式的多个txt文件合并在同一个excel的不同sheet,对于将所有txt按同样的格式合并在同一个sheet的,以下代码不能实现。导入模块:importopenpyxlimportos基本信息配置:filePath=r'C:\Amy\new'#存放txt的文件夹的存......
  • 100ASK_IMX6ULL-PRO 数码相框扩展项目:支持鼠标输入
    1.鼠标输入事件驱动已支持,测试Hexdump/dev/input/eventX确定设备节点项目中的输入模块输入事件的获取项目启动时初始化输入设备InputDeviceInit,通过链表进行设备管理,对于每一个注册的输入设备创建一个线程阻塞式读取输入数据:staticvoid*InputEventThreadFunction(void......
  • 韦东山百问网 IMX6ULL_Pro 开发板 数码相框扩展项目
    说明本篇为韦东山嵌入式Linux课程的实践项目的学习笔记,主要结合课程讲解学习项目的设计和实现,并尝试增加支持一些新功能。开发环境:开发板:100ASK_IMX6ULL-ProLinuxversion4.9.88交叉工具链(gccversion7.5.0(Buildroot2020.02-gee85cab)本次开发主要基于以下百问网......
  • [20241123]PLSQL语句代码执行几次会缓存.txt
    [20241123]PLSQL语句代码执行几次会缓存.txt--//测试看看PLSQL语句代码执行几次会缓存。1.环境:SCOTT@book>@ver1PORT_STRING                   VERSION       BANNER-------------------------------------------------------------------------......
  • [20241123]测试软软解析遇到的疑惑3.txt
    [20241123]测试软软解析遇到的疑惑3.txt--//测试软软解析遇到的疑惑,就是大量软软解析以及分散执行两者的执行时间差别并不是很大,有点疑惑,发现调用select休眠的时间--//是1毫秒,而11g是1厘秒。而ash取样是1秒,这样在21c下相当于方法1000倍,11g下仅仅100倍。--//前面测试21c下的情况,在1......
  • [20241124]测试软软解析人为修改cursor pin S的mutext值.txt
    [20241124]测试软软解析人为修改cursorpinS的mutext值.txt--//测试软软解析人为修改cursorpinS的mutext值会出现怎么情况。1.环境:SCOTT@book01p>@ver2==============================PORT_STRING                  :x86_64/Linux2.4.xxVERSION    ......
  • [20241121]测试软软解析遇到的疑惑.txt
    [20241121]测试软软解析遇到的疑惑.txt--//测试软软解析遇到的疑惑,就是大量软软解析以及分散执行两者的执行时间差别并不是很大,有点疑惑,展开分析看看。1.环境:SCOTT@book01p>@ver2==============================PORT_STRING                  :x86_64/Linux......
  • [20241123]11g下测试遇到latch shared pool等待事件问题.txt
    [20241123]11g下测试遇到latchsharedpool等待事件问题.txt--//这是昨天测试遇到的问题,实际上以前也遇到,没有仔细探究。以前的方法就是启动后做小量延迟,规避这个问题,实际上还是出现。--//这次测试我总感觉哪里做的不对,仔细分析看看。1.环境:SCOTT@book>@ver1PORT_STRING    ......
  • IMX6ULL启动方式
    IMX6ULL启动方式文章目录IMX6ULL启动方式启动方式选择Boot位配置串行下载内部Boot模式BOOTROM初始化内容启动设备镜像烧录IMX6ULL最终可烧写文件组件**ImageVectorTable(IVT)****BootData****DeviceConfigurationData(DCD)****用户代码可执行文件**为什么是3K......
  • 海康威视AI开放平台训练数据集导入问题---解决导入自己数据集的问题(txt转json格式)
    一、问题导入首先我们先进入到开放平台中,选择物体检测最近在做一个项目,需要使用到海康威视AI开放平台来训练数据集,但是刚开始遇到了一个问题就是导入自己的数据集(txt格式转成了json格式)为啥没有用,后面查看相关文档,解决了导入自己数据集的问题,就不用在平台里标注了。二、探......