首页 百科知识 电子白板的应用程序设计与实现

电子白板的应用程序设计与实现

时间:2022-12-07 百科知识 版权反馈
【摘要】:电子白板应用程序设计为本书软件部分的核心内容之一,程序的主要功能是实现实时书写、显示以及对书写的内容进行保存、读取等。为了实现基于ARM电子白板的实时书写功能,系统包含以下四个功能模块:电子白板应用程序使用EVC编写,程序运行界面如图11-32所示。通信通道建立成功的下一步就是读取数据了,在电子白板笔开始书写时,数据采集模块就会处理采集到的数据并等着数据处理模块处理且实时显示,我们调用ReadFile读取时延数据。

11.4.1 开发工具介绍

嵌入式应用软件是指运行在嵌入式操作系统之上的软件,需要专门的SDK或集成开发环境提供这种开发。针对Windows CE操作系统的应用程序开发,微软提供了Embedded Visual Basic(EVB)、Embedded Visual C++(EVC)、Visual Studio.NET等工具,目前用得最多的还是EVC,把自己定制的Windows CE操作系统中的SDK(软件开发包)导出安装在EVC下,就可以变成专门针对自己设备开发工具了。下面介绍下本文所用的应用程序开发工具Embedded Visual C++4.0,其开发界面如图11-31所示。EVC支持MFC类库的子集,可以给开发者提供最强大的支持,也使Win32平台上的VC程序员可以很容易地迁移到Windows CE平台上。但MFC类库需要一个DLL,对存储空间有限的嵌入式设备来说是个很大的负担,所以SmartPhone就不支持MFC。

图11-31 EVC运行界面

11.4.2 应用程序功能模块简介

电子白板应用程序设计为本书软件部分的核心内容之一,程序的主要功能是实现实时书写、显示以及对书写的内容进行保存、读取等。为了实现基于ARM电子白板的实时书写功能,系统包含以下四个功能模块:

(1)应用程序界面:实现书写内容的显示、保存,以及简单的编辑功能;

(2)USB通信模块:实现电子白板时延数据及配置信息的传输;

(3)数据处理模块:实现对白板数据的处理;

(4)数据存储模块:实现对书写数据的保存等。

11.4.3 应用程序功能模块的设计与实现

11.4.3.1 应用程序界面模块介绍

电子白板应用程序使用EVC编写,程序运行界面如图11-32所示。为截图方便,下面的应用程序运行界面是在模拟器下的截图,和在实际平台上运行的界面是一样的。

图11-32 应用程序运行界面

可以看到这个界面和平时在Windows操作系统下见到的应用程序界面很相似,包含标题栏、菜单栏工具栏以及工作区。在菜单栏中包含了几个功能选项:文件、编辑、笔宽、颜色和连接传感器。其中文件菜单包含了对文件的基本操作——新建、打开、打印及关闭;编辑菜单主要是复制、剪切以及回退一笔;笔宽及颜色组合就可以书写出不同笔宽的红、黑、蓝和绿四种颜色的字;连接传感器主要用来与信号笔进行交互,以确定可以写字了。

11.4.3.2 USB通信模块程序设计

在USB通信模块中,要实现对数据的读写,在这里我们要完成的工作主要是读取数据采集模块采集后用DSP处理的时延数据及一些表明数据特征的信息,每次共8个字节的数据,本书主要介绍怎么和USB建立连接,读取从USB口传来的8位数据。

首先用函数打开USB设备,建立通信管道。

在与USB建立通信连接时,要和DSP数据采集模块有个交互的过程,具体做法就是用WriteFile函数往USB的一个数据缓冲区写入8个字节的测试数据,如果得到握手回答信号则说明通信通道建立成功,可以读数据了。

通信通道建立成功的下一步就是读取数据了,在电子白板笔开始书写时,数据采集模块就会处理采集到的数据并等着数据处理模块处理且实时显示,我们调用ReadFile读取时延数据。

因为电子白板笔在书写的时候是每隔一段时间发送一次数据的,所以我们在读取数据的时候也要隔段时间,为了不漏取数据或者把数据读错,可采用线程实时监控。读取的数据需要实时地进行处理并显示,为了保持读取数据和处理数据的同步,在通信模块和数据模块之间使用多线程进行同步。

11.4.3.3 数据处理程序设计

在接收到从USB口传送过来的8个字节的数据后,接下来的任务就是处理这些数据然后显示到LCD上并存储这些数据,以备以后使用。下面简单介绍下对这几个字节数据的处理。

1.时延数据

每个书写位置的坐标都由横、纵坐标组成,可以通过两路时延数据计算出来,每路时延数据在存储器中占两个字节,对时延数据提取并转换成坐标信息的算法在第二章的电子白板定位算法中已经做过详细介绍,在这里不再赘述。

2.抬落笔信息

抬落笔信息是由数据采集模块发送过来的特定的数据,以标志我们现在书写的一笔是否是新的一笔的开始,来确定是进行画线还是画点操作。

3.颜色信息

在电子白板的书写中会显示红、黑、蓝和绿四种颜色,而这四种颜色的分辨和处理是靠8个字节中的1个字节来完成的。图11-33是数据处理的流程图。

图11-33 数据处理流程图

在打开一个新的文档开始书写的时候,首先要判断USB通信接口是否连接好了,如果连接好则开始书写,在书写时信号笔不停地发送红外和超声信号,经过DSP处理器处理变成时延信息,并组合成代表信号笔位置、颜色及状态信息的8个字节传递给信号处理器,这时开始数据处理流程。首先根据状态信息判断现在是抬笔还是落笔,是落笔则表示新的一笔开始,为保证书写的平滑,会把第一点作为飞点去掉,而把第二点作为真正的一笔的起始,先画一个点并把这个点的坐标存入数组中,然后开始下一点的判断,如果是连续书写,就根据时延信息算出坐标信息并和上一点联合进行画线完成一笔的书写。

11.4.3.4 保存和打开文件程序设计

在书写完一板的时候要保存到U盘或者SDRAM中,以便以后使用,由于实时书写的实现是以矢量图形Draw的形式实现的,而Draw的文档是基于对象的,保存时不能把整个对象存储起来,重点在于存储对象中的成员变量以及一些类的信息,使系统在打开保存的图形文件时,可以利用类的信息和保存的成员变量重新创建对象而不损失任何信息。在MFC中,CArchive类用于以持久的二进制形式来存储复杂的对象,用户可以利用它把对象的内容存储到存储区中,也可以从存储区中读取对象的内容以重建对象,这个过程就是“串行化”。只要是直接或间接从CObject类派生的类对象都可以用Serialize函数实现串行化。下面介绍本文利用串行化保存及打开文件的过程。

首先要创建CArchive对象,在创建这个对象的时候需要注意,必须首先创建一个CFile对象,而且必须保证文件的读入/存储状态和文件的打开模式兼容。在这个CArchive类中主要提供下面三个操作:

(1)IsStoring和IsLoadding函数用于判断正在进行的是读取还是存储操作。

(2)GetFile函数返回指向当前打开的CFile对象的指针,直接用CFile类来存取文档资料。

(3)重载抽取“>>”和插入“<<”操作符可以存储对象或数据原型到存储区及从存储区读取对象或数据原型。

然后,就是在数据处理类中用Serialize函数实现串行化。我们的CStroke类正好是从CObject类间接派生出来的,可以用Serialize函数实现串行化,图11-34是串行化的过程。

图11-34 串行化类的流程图

在完成串行化后要对Serialize函数进行实现,实现操作是在CStroke类的.cpp文件中完成的。图11-35是Serialize函数的实现过程。

图11-35 Serialize函数的实现过程

另外,在CStroke类的.cpp文件中还要插入宏IMPLEMENT_SERIAL,它在本程序中的实现为:IMPLEMENT_SERIAL(CStroke,CObject,2)。其中第一个参数是定义串行化的类,这里是CStroke,它必须有一个默认的不带参数的构造函数,用于在读取文档操作时创建一个类的对象;第二个参数是CStroke类的基类;第三个参数是版本信息。这样就对类CStroke实现了串行化,下面就可以用CArchive对象对这个类的对象进行存取管理。

首先要在我们的文档类中创建一个CStroke对象,并对它进行实现,函数定义形式为:void CStroke::Serialize(CArchive&ar){……}。中间为函数的实现,图11-36为函数的实现流程图。程序设计时,只能书写一板保存一板,然后再重新打开一个应用程序开始书写,所以在打开文件时候也只能每次打开一页,这是测试程序的一个缺陷,有待以后的完善。

图11-36 保存及打开文件流程

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈