技术概览 Technical Overview

TWAIN架构(TWAIN Architecture)

数据交互的实现在TWAIN中由三类软件元素共同工作完成:应用程序(the application),数据源管理器(the Source Manager),以及数据源(the Source)。

这些元素使用TWAIN的协议架构来进行通讯。TWAIN架构由四层组成:

  • 应用(Application)

  • 协议(Protocol)

  • 采集(Acquisition)

  • 设备(Device)

TWAIN软件元素占据了如下图所示的各层。后续的各节中介绍了每一层。

应用层(Application)

用户的软件应用执行将会在这层中。

TWAIN为应用程序开发者关注用户如何访问使用TWAIN的功能以及如何选择指定的数据源描述了用户接口指引。

TWAIN不关注应用程序是如何实现的。TWAIN不会对任何应用可能会使用的应用间通讯模式造成影响。

协议层(Protocol)

协议是TWAIN所使用的用以描述的“语言”和语法。它实现了详细准确的指令和用以数据交换的通讯要求。

协议层包含:

  • 应用软件的部分模块,该模块提供用于应用程序和TWAIN之间交互的接口。

  • 由TWAIN所提供的TWAIN数据源管理器。

  • 包含数据源设备用以接受来自数据源管理器以及回复的数据和返回码(Return Code)。

  • 由TWAIN所提供的TWAIN数据源管理器。

  • 数据源设备包含的软件模块,该模块用以接受来自数据源管理器以及回复的数据和返回码(Return Code)。

有关协议层的更多细节内容将会在“TWAIN元素间通讯(Communication Between the Elements of TWAIN)”中进行讨论。

采集层(Acquisition)

数据采集设备或许是物理的(像是扫描仪或是数字高拍仪)或是逻辑的(像是一个图像数据库)。编写用以控制采集物的被称为数据源(Sources),主要位于此层中。

数据源为应用传输数据。它使用与应用商议好的格式和传输机制(进行传输)。

数据源总会提供内建的用户界面,来控制将数据源写入驱动器的设备。如果想的话,应用程序可以为了获取数据重写这个用户界面来提供它自己的用户界面。

设备层(Device)

该层是传统的底层设备驱动模块。它们将特定于设备的命令转换为特定于驱动程序随附的特定设备的硬件命令和操作。使用TWAIN的应用不在需要发布设备驱动,因为它们已经是数据源的一部分了。

TWAIN完全不关心设备层。数据源向应用隐藏了设备层。数据源提供了从TWAIN操作以及与数据源用户界面的交互到设备驱动程序的等效命令的转换,这些命令使得设备按照预期运行。

注意:协议层是最彻底和最严格的定义,以允许应用程序和源之间进行精确的通信。本文档的内容将集中在协议和采集层。

TWAIN 用户界面(TWAIN User Interface)

当一个应用使用TWAIN来获取数据的时候,获取的处理过程可能会在如下的三个部分被应用的用户所看到:

应用程序(The Application)

用户需要选择他们想要来获取数据的设备。他们也需要在已经完成数据传输后获得通知。为了实现这一场景,TWAIN强烈推荐应用程序开发者添加两个选项到他们的文件菜单:

  • 选择设备源(Select Source)。选择设备。

  • 获取(Acquire)。开始进行传输。

数据源管理器(The Source Manager)

当用户选择选择数据源(Select Source)选项的时候,应用程序向数据源管理器请求展示选择数据源的对话框。这个对话框列出所有可以使用的设备以及允许用户选择其中的一个。如果愿意,应用程序也可以编写自己版本的用户界面来做这件事。

数据源(The Source)

每一个遵循TWAIN规范的数据源会其特定的设备提供一个用户界面。当应用程序的用户选择了获取(Acquire)选项的时候,数据源的用户界面可能会显示。如果愿意,应用程序也可以编写它自己版本的用户界面。

TWAIN元素间通讯(Communication Between the Elements of TWAIN)

在TWAIN元素间通讯可以通过两个入口点(entry point)来实现。他们被称作DSM_Entry()DS_Entry()。DSM意思是Data Source Manager(数据源管理器),DS意思是Data Source(数据源)。

应用(The Application)

应用的目标是从数据源处获取数据。然而,应用无法与数据源进行直接的联系。所有对于数据的请求,,功能信息,错误信息等都必须要通过数据源管理器来进行处理。

TWAIN定义了大约140种操作。应用发送这些操作请求到数据源管理器以实现传输动作。应用为每一次的指定数据源管理器或是数据源来作为每一次操作请求的终端。

应用程序与数据源管理器进行通讯只会使用数据源管理器的入口,DSM_Entry()函数。

DSM_Entry()函数的参数包含:

  • 一个标识结构体,提供了关于调用该方法的应用程序的信息。

  • 请求的目标对象(数据源管理器或是数据源)

  • 一个描述了请求操作的三元组。三元组包括:

    • 操作的数据组(Data Group,DG_)
    • 操作的数据参数类型(Data Argument Type,DAT_)
    • 操作的消息(Message,MSG_)
  • (后续的使用操作三元组的一节将会描述更多的信息)

  • 允许数据传输的指针字段

函数的调用会返回一个值(返回码,the Return Code)来展示本次操作成功与否。

TW_UINT16 TW_CALLINGSTYLE DSM_Entry
(
pTW_IDENTITY pOrigin, // source of message
pTW_IDENTITY pDest, // destination of message
TW_UINT32 DG, // data group ID: DG_xxxx
TW_UINT16 DAT, // data argument type: DAT_xxxx
TW_UINT16 MSG, // message ID: MSG_xxxx
TW_MEMREF pData // pointer to data
);

注意:数据类型定义将会在第8章,“数据类型和数据结构(Data Types and Data Structures”种讲解,同时也会在从TWAIN Working Group站点[http://www.twain.org]下载的TWAIN.H头文件中找得到对应的定义。

数据源管理器(The Source Manager)

数据源管理器为应用程序和数据源之间提供了通讯通道,支持了用户进行数据源的选择,以及为了通过应用程序的访问加载数据源。从应用程序到数据源的通讯以DSM_Entry()作为入口点。

  • 如果DSM_Entry调用中的目标是数据源管理器。

    数据源管理器将会自己处理这个操作。

  • 如果DSM_Entry调用中的目标是数据源。

    数据源管理器会传输信息参数列表,移除目标参数,并且调用适合的数据源。为了联络到数据源,数据源管理器调用数据源的DS_Entry()函数。TWAIN要求所有的数据源都必须要由这个入口点。

在C语言风格下,DS_Entry函数调用如下所示:

TW_UINT16 TW_CALLINGSTYLE DSM_Entry
(
pTW_IDENTITY pOrigin, // source of message
TW_UINT32 DG, // data group ID: DG_xxxx
TW_UINT16 DAT, // data argument type: DAT_xxxx
TW_UINT16 MSG, // message ID: MSG_xxxx
TW_MEMREF pData // pointer to data
);

TWAIN-v2.4-说明文档翻译(2)技术概览的更多相关文章

  1. BizTalk 开发系列(三十九) BizTalk Server 2009技术概览

    BizTalk Server 2009已经发布一段时间了,之前Beta版发布的时候也写过一篇文章<BizTalk Server 2009 Beta初体验>, 当时比较了2006 R2与20 ...

  2. Windows Phone 8.1 开发技术概览 (Universal APP)

    前一阵真的比较懒 WP8.1 已经出来这么长时间了现在才更新BLOG让大家久等了,今天我先为大家介绍下 WP 8.1的开发框架,什么是微软所推崇的 Universal APP,以及我们要开发 Univ ...

  3. 【转】Intel RealSense(实感技术)概览

    Intel RealSense(实感技术)概览 1 Reply 版权声明:本文系本站作者自己翻译整理,欢迎转载,但转载请以超链接形式注明文章来源(planckscale.info).作者信息和本声明, ...

  4. Java SE技术概览 - Jave SE Platform at a Glance

    从学习到工作,使用Java有几年时间,一直没有好好端详一下她的“内涵”.无意中看到一个关于Java SE的概览图,发现Java中提供的API还挺系统全面,把她放到博客中,相信对于想系统了解Java技术 ...

  5. 转:Linux网络IO并行化技术概览

    转:http://codinginet.com/articles/view/201605-linux_net_parallel?simple=1&from=timeline&isapp ...

  6. 前端可视化建模技术概览,包括:GoJS

    我推荐使用的: 库 网址 备注 GoJS https://gojs.net/latest/samples/flowchart.html 推荐使用 相关文章: 前端可视化建模技术概览:http://le ...

  7. Spring Cloud(一):服务治理技术概览【Finchley 版】

    Spring Cloud(一):服务治理技术概览[Finchley 版]  发表于 2018-04-14 |  更新于 2018-05-07 |  Spring Cloud Netflix 是 Spr ...

  8. Spring Cloud微服务技术概览

    Spring Cloud 是一系列框架的有序集合.它利用 Spring Boot 的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册.配置中心.消息总线.负载均衡.断路器.数据监控等,都 ...

  9. Android埋点技术概览

    注:本文同步发布于微信公众号:stringwu的互联网杂谈Android无埋点技术概览 本文是Android无埋点系列的开篇---埋点技术概览 1 背景 埋点是数据产品经理(分析师)基于业务需求,对用 ...

随机推荐

  1. rabbitMQ重复消费(结合死循环重发那一篇看)

    /** * 重复消费逻辑判断与处理 */ @Component public class RepeatMqConsumer { /** * 服务对象 */ private int count=1; @ ...

  2. RabbitMQ(二):交换机

    前言 学习自bili尚硅谷-RabbitMQ 发布确认 之前的消息应答,队列持久化是为了保证 -> 消息从rabbitmq队列到消费者的过程中不会丢失:消息持久化则是为了保证 -> 消息从 ...

  3. Ansible基础使用

    原文转自:https://www.cnblogs.com/itzgr/p/10233932.html作者:木二 目录 一 Ansible命令用法 1.1 免密钥 1.2 Ad-Hoc基础命令 1.3 ...

  4. 【CSS】拼图验证练习

    抄自B站Up主CodingStartup起码课 <!DOCTYPE html> <html lang="en"> <head> <meta ...

  5. 云效x钉钉:让研发工作更简单

    云效x钉钉:让研发工作更简单,奔走相告,云效&钉钉集成实现组织架构.成员同步以及消息通知啦! 我们知道云效致力于智能化.安全可追溯.高效.简单.灵活,「云效新一代企业级DevOps平台」阿里云 ...

  6. 洛谷P3768 简单的数学题解题报告

    $$\begin{eqnarray}&\sum_{i=1}^{n}\sum_{j=1}^{n}ij\gcd(i,j)\\&\sum_{d=1}^{n}\sum_{i=1}^{n}\su ...

  7. three+pixi 将二维和三维结合

    PIXI+THREE 使用 PIXI 和 THREE 将三维和二维渲染在同一个 canvas 下面 效果 思路 初始化 PIXI 的 Application, 作为 pixi 最重要的变量 const ...

  8. 命令行解析函数:getopt_long、getopt

    一.前言 在学习一些项目代码时,尤其涉及到命令行传参的代码,经常遇到getopt相关的函数,对这一类函数可以说是既陌生又熟悉.陌生是因为不知道它是干啥的,熟悉呢,是因为经常遇到.于是乎在追踪了多天ip ...

  9. 关于Golang的学习路线

    基础 安装golang环境 Golang基础,流程控制,函数,方法,面向对象 网络编程(自己做一个简单的tcp的聊天室,websocket,http,命令行工具) 并发(可以看一下并发爬虫或者下载器的 ...

  10. table头部固定,内容滚动,类似新闻一下向上滚动

    html: <div class="ul_box"> <table class="table1"> <thead> < ...