usb接口描述符

usb接口描述符
usb接口描述符

一、背景知识

1、USB Mass Storage类规范概述

USB 组织在universal Serial Bus Mass Storage Class Spaceification 1.1版本中定义了海量存储设备类(Mass Storage Class)的规范,这个类规范包括四个

独立的子类规范,即:

1. USB Mass Storage Class Control/Bulk/Interrupt (CBI) Transport

https://www.360docs.net/doc/3d16205609.html,B Mass Storage Class Bulk-Only Transport

https://www.360docs.net/doc/3d16205609.html,B Mass Storage Class ATA Command Block

https://www.360docs.net/doc/3d16205609.html,B Mass Storage Class UFI Command Specification

前两个子规范定义了数据/命令/状态在USB 上的传输方法。Bulk- Only 传输规范仅仅使用Bulk 端点传送数据/命令/状态,CBI 传输规范则使用Control/Bulk/Interrupt 三种类型的端点进行数据/命令/状态传送。后两个子规范则定义了存储介质的操作命令。ATA 命令规范用于硬盘,UFI 命令规范是针对USB 移动存储。

Microsoft Windows 中提供对Mass Storage 协议的支持,因此USB 移动设备只需要遵循Mass Storage 协议来组织数据和处理命令,即可实现与PC 机交换数据。而Flash 的存储单元组织形式采用FAT16 文件系统,这样,就可以直接在Windows 的浏览器中通过可移动磁盘来交换数据了,Windows 负责对FAT16 文件系统的管理,USB 设备不需要干预FAT16 文件系统操作的具体细节。

USB(Host)唯一通过描述符了解设备的有关信息,根据这些信息,建立起通信,在这些描述符中,规定了设备所使用的协议、端点情况等。因此,正确地提供描述符,是USB 设备正常工作的先决条件。

Linux-2.6.26内核中在利用USB gadget驱动实现模拟U盘时主要涉及到file_storage.c、s3c2410_udc.c等驱动文件(这些文件的具体结构,将在下一篇文章中描述)。此时我们想先从这些代码中找到USB描述描述符,从中确定使用的存储类规范,从而确定协议。确定通讯协议是我们调试的基础。

存储类规范是由接口描述符决定的。接口描述符各项的定义义如下:

其中,bInterfaceClass、bInterfaceSubClass、bInterfaceProtocol可以判断出设备是否是存储类,以及属于哪种存储子类和存储介质的操作命令。

在file_storage.c文件中,

/* USB protocol value = the transport method */

#define USB_PR_CBI 0x00 // Control/Bulk/Interrupt

#define USB_PR_CB 0x01 // Control/Bulk w/o interrupt

#define USB_PR_BULK 0x50 // Bulk-only

/* USB subclass value = the protocol encapsulation */

#define USB_SC_RBC 0x01 // Reduced Block Commands (flash)

#define USB_SC_8020 0x02 // SFF-8020i, MMC-2, ATAPI (CD-ROM)

#define USB_SC_QIC 0x03 // QIC-157 (tape)

#define USB_SC_UFI 0x04 // UFI (floppy)

#define USB_SC_8070 0x05 // SFF-8070i (removable)

#define USB_SC_SCSI 0x06 // Transparent SCSI

默认的情况是:

mod_data = { // Default values

.transport_parm = "BBB",

.protocol_parm = "SCSI",

……

默认的赋值如下:

bInterfaceClass=08 表示:存储类

bInterfaceSubClass=0x06 表示:透明的SCSI指令

bInterfaceProtocol=0x50 表示:bulk-only 传输

2、Bulk-Only 传输协议

下面看看Bulk-Only 传输协议:(详细的规范请阅读《Universal Serial BusMass Storage ClassBulk-Only Transport》)设备插入到USB 后,USB 即对设备进行搜索,并要求设备提供相应的描述符。在USBHost 得到上述描述符后,即完成了设备的配置,识别出为Bulk-Only 的Mass Storage 设备,然后即进入Bulk-Only 传输方式。在此方式下,USB 与设备间的所有数据均通过Bulk-In和Bulk-Out 来进行传输,不再通过控制端点传输任何数据。

在这种传输方式下,有三种类型的数据在USB 和设备之间传送,CBW、CSW 和普通数据。CBW(Command Block Wrapper,即命令块包)是从USB Host 发送到设备的命令,命令格式遵从接口中的bInterfaceSubClass 所指定的命令块,这里为SCSI 传输命令集。USB设备需要将SCSI 命令从CBW 中提取出来,执行相应的命令,完成以后,向Host 发出反映当前命令执行状态的CSW(Command Status Wrapper),Host 根据CSW 来决定是否继续发送下一个CBW 或是数据。Host 要求USB 设备执行的命令可能为发送数据,则此时需要将特定数据传送出去,完毕后发出CSW,以使Host 进行下一步的操作。USB 设备所执行的操

作可用下图描述:

CBW的格式如下:

dCBWSignature:

CBW的标识,固定值:43425355h (little endian)。

dCBWTag:

主机发送的一个命令块标识,设备需要原样作为dCSWTag(CSW中的一部分)再发送给Host;主要用于关联CSW到对应的CBW。

dCBWDataTransferLength:

本次CBW命令要求在命令与回应之间传输的字节数。如果为0,则不传输数据。

bmCBWFlags:

反映数据传输的方向,0 表示来自Host,1 表示发至Host;

bCBWLUN:

对于有多个LUN逻辑单元的设备,用来选择具体目标。如果没有多个LUN,则写0。

bCBWCBLength:

命令的长度,范围在0~16.

CBWCB:

传输的具体命令,符合bInterfaceSubClass.中定义的命令规范,此处是SCSI

CSW命令格式如下:

dCSWSignature:

CSW的标识,固定值:53425355h (little endian)

dCSWTag:

设置这个标识和CBW中的dCBWTag一致,参照上面关于dCBWTag的解释

dCSWDataResidue:

还需要传送的数据,此数据根据dCBWDataTransferLength-本次已经传送的数据得到

bCSWStatus:

指示命令的执行状态。如果命令正确执行,bCSWStatus 返回0 即可。

3、SCSI指令集

Bulk-Only 的CBW 中的CBWCB 中的内容即为如下格式的命令块描述符(Command Block Descriptor)。SCSI-2 有三种字长的命令,6 字节、10字节和12字节,Microsoft Windows 环境下支持12 字节长的命令。

Operation Code:

操作代码,表示特定的命令。高3 位为Group Code,共有8 种组合,

即8 个组,低5 五位为Command Code,可以有32 种命令。

Logicol unit Number:

为了兼容SCSI-1 而设的,此处可以不必关心。

Logical block address:

为高位在前,低位在后的逻辑块地址,即扇区地址。第2 位为高位,第3、4、5 依次为低位。

Transfer length:

为需要从逻辑块地址处开始传输的扇区数(比如在Write 命令中)。

Parameter list length:

为需要传输的数据长度(比如在Mode Sense 命令中);

Allocation length:

为初始程序为返回数据所分配的最大字节数,此值可以为零,表示不需要传送数据。

SCSI指令集的Direct Accesss 类型存储介质的传输命令有许多,Mass Storage协议只用到了其中的一些。更多的SCSI 指令参见:https://www.360docs.net/doc/3d16205609.html,/wiki/SCSI_command

指令代码指令名称说明

04h Format Unit 格式化存储单元

12h Inquiry 索取器件信息

1Bh Start/Stop load/unload

55h Mode select 允许Host对外部设备设置参数。

5Ah Mode Sense 向host传输参数

Eh Prevent/Allow Medium Removal 写保护

>28h Read(10)Host读存储介质中的二进制数据

A8h Read(12)同上,不过比较详细一点

25h Read Capacity 要求设备返回当前容量

23h Read Format Capacity 查询当前容量及可用空间

03h Request Sense 请求设备向主机返回执行结果,及状态数据

01h Rexero Unit 返回零轨道

2Bh Seek(10)为设备分配到特定地址

1Dh Send Diagnostic 执行固件复位并执行诊断

00h Test Unit Ready 请求设备报告是否处于Ready状态

2Fh Verify 在存储中验证数据

2Ah Write(10)从主机向介质写二进制数据

AAh Write(12)同上,不过比较详细

2Eh Write and Verify 写二进制数据并验证

对于不同的命令,其命令块描述符略有不同,其要求的返回内容也有所不同,根据相应的文档,可以对每种请求作出适当的回应。比如,下面是INQUIRY 请求的命令块描述符和其返回内容的数据格式:如:INQUIRY

命令描述符:

返回数据格式

Host 会依次发出INQUIRY、Read Capacity、UFI Mode Sense 请求,如果上述请求的返回结果都正确,则Host 会发出READ 命令,读取文件系统0 簇0 扇区的MBR 数据,进入文件系统识别阶段。

4、利用USB View观察结果

可通过USB View软件查看到USB设置阶段获取到的信息。

二、出现的主要问题

在调试过程中遇到了一个问题。现象是:在目标板加载完驱动后,即执行完:

# insmod g_file_storage.ko file=/dev/mtdblock2 stall=0 removable=1

后,接好USB线。此时在windows端设备出有usb storage设备加入,但出现不了盘符。

下面记录下调试过程。

三、调试过程

根据规范,当完成SCSI指令集中Inquiry 命令时,可以出现盘符。所以可以通过bushound软件查看通讯过程,找出原因。

下面是利用bushound工具在出现问题时采集到的数据。

Dev Phase Data Info Time Cmd.Phase. Ofs

--- ----- --------------------------------- ---------- ----- -----------

26 CTL 80 06 00 01 - 00 00 12 00 GET DESCRIPTR 0us 1.1.0

26 DI 12 01 10 01 - 00 00 00 10 - 25 05 a5 a4 - 12 03 01 02 ........%....... 4.8ms 1.2.0

03 01 .. 1.2.16

26 CTL 80 06 00 02 - 00 00 09 00 GET DESCRIPTR 14us 2.1.0

26 DI 09 02 20 00 - 01 01 04 c0 - 01 .. ...... 3.9ms 2.2.0

26 CTL 80 06 00 02 - 00 00 20 00 GET DESCRIPTR 16us 3.1.0

26 DI 09 02 20 00 - 01 01 04 c0 - 01 09 04 00 - 00 02 08 06 .. ............. 4.9ms 3.2.0

50 05 07 05 - 81 02 40 00 - 00 07 05 02 - 02 40 00 00 P.....@......@.. 3.2.16

26 CTL 80 06 00 03 - 00 00 02 00 GET DESCRIPTR 60us 4.1.0

26 DI 09 02 20 00 - 01 01 04 c0 - 01 .. ...... 3.9ms 2.2.0

26 DI 04 03 .. 3.9ms 3.1.0

26 CTL 80 06 00 03 - 00 00 04 00 GET DESCRIPTR 15us 5.1.0

26 DI 04 03 09 04 .... 3.9ms 6.1.0

26 CTL 80 06 03 03 - 09 04 02 00 GET DESCRIPTR 10us 1.2.16

26 DI 1a 03 .... 4.0ms 6.2.0

26 CTL 80 06 03 03 - 09 04 1a 00 GET DESCRIPTR 18us 7.1.0

26 DI 1a 03 33 00 - 37 00 32 00 - 30 00 34 00 - 31 00 37 00 ..3.7.2.0.4.1.7. 4.9ms 7.2.0

35 00 36 00 - 37 00 37 00 - 35 00 5.6.7.7.5. 7.2.16

26 CTL 00 09 01 00 - 00 00 00 00 SET CONFIG 16us 8.1.0

26 CTL 01 0b 00 00 - 00 00 00 00 SET INTERFACE 60ms 9.1.0

26 CTL a1 fe 00 00 - 00 00 01 00 CLASS 62ms 10.1.0

26 DI 00 . 3.9ms 10.2.0

26 DO 55 53 42 43 - 08 60 e0 86 - 24 00 00 00 - 80 00 06 12 USBC.`..$....... 985us 11.1.0

00 00 00 24 - 00 00 00 00 - 00 00 00 00 - 00 00 00 ...$........... 11.1.16

26 DI 00 80 02 02 - 1f 00 00 00 - 4c 69 6e 75 - 78 20 20 20 ........Linux 1.0ms 12.1.0

46 69 6c 65 - 2d 53 74 6f - 72 20 47 61 - 64 67 65 74 File-Stor Gadget 12.1.16

30 33 31 32 0312 12.1.32

26 CTL 80 06 00 02 - 00 00 20 00 GET DESCRIPTR 893ms 13.1.0

26 DI 09 02 20 00 - 01 01 04 c0 - 01 09 04 00 - 00 02 08 06 .. ............. 4.1ms 13.2.0

50 05 07 05 - 81 02 40 00 - 00 07 05 02 - 02 40 00 00 P.....@......@.. 13.2.16

26 CTL 80 06 00 02 - 00 00 20 00 GET DESCRIPTR 2.7sc 14.1.0

26 DI 09 02 20 00 - 01 01 04 c0 - 01 09 04 00 - 00 02 08 06 .. ............. 4.4ms 14.2.0

50 05 07 05 - 81 02 40 00 - 00 07 05 02 - 02 40 00 00 P.....@......@.. 14.2.16

26 USTS 05 00 00 c0 no response 2.8sc 15.1.0

注意上面红色部分的代码,DO发出了55 53 42 43开始的CBW命令块,命令码是12,即Inquiry命令。要求目标返回Inquiry 命令要求的数据,长度是0x24。接下来设备端通过DI返回了设备信息。按照规范,在返回完了数据后,设备端还应该通过DI 向系统返回CSW的值。但实际的捕获内容并没有。所以导致不能正确出现盘符。

在file_storage.c中,发送数据时都会调用到start_transfer()函数。在此函数中加入printk调试语句,观察现象。发现只要加入的调试语句,windows端就能够正常设别设备了。于是,可以猜测是因为需要在连续两次发送之间加上一些延时。在函数中加入udelay(800)后,windows系统可以正常发现设备了。具体的代码架构,将在下一遍文章中解析。

下面是程序正常后,用bushound捕获到的数据。

红色部分,可以看出设备正确的按照规范在发送完数据后,返回CSW信息。

四、总结做好USB gadget驱动、或者USB host驱动调试需要:

·掌握一定的知识基础

包括:USB协议、具体的类设备规范、USB驱动程序架构、USB设备端控制器操作等。·合理利用调试工具。

包括:USB view 、bushound 、及一些硬件USB信号分析仪。

HID 报告描述符终极解析

USB HID Report终极解析 HID的报告描述符巨难懂,关键是数据格式与每一位代表的意思。经过三天的研究,终于将HID Report的每一个数据位的含义弄清楚了,现将数据解析如下,最后附上了一个HID 通信的Report例子。以一个键盘的HID Report为例: 键盘的HID报告描述符: code char KeyBoardReportDescriptor[63] = { 0x05, 0x01, // USAGE_PAGE (Generic Desktop) 0x09, 0x06, // USAGE (Keyboard) 0xa1, 0x01, // COLLECTION (Application) 0x05, 0x07, // USAGE_PAGE (Keyboard) 0x19, 0xe0, // USAGE_MINIMUM (Keyboard LeftControl) 0x29, 0xe7, // USAGE_MAXIMUM (Keyboard Right GUI) 0x15, 0x00, // LOGICAL_MINIMUM (0) 0x25, 0x01, // LOGICAL_MAXIMUM (1) 0x75, 0x01, // REPORT_SIZE (1) 0x95, 0x08, // REPORT_COUNT (8) 0x81, 0x02, // INPUT (Data,V ar,Abs) 0x95, 0x01, // REPORT_COUNT (1) 0x75, 0x08, // REPORT_SIZE (8) 0x81, 0x03, // INPUT (Cnst,V ar,Abs) 0x95, 0x05, // REPORT_COUNT (5) 0x75, 0x01, // REPORT_SIZE (1) 0x05, 0x08, // USAGE_PAGE (LEDs) 0x19, 0x01, // USAGE_MINIMUM (Num Lock) 0x29, 0x05, // USAGE_MAXIMUM (Kana) 0x91, 0x02, // OUTPUT (Data,V ar,Abs) 0x95, 0x01, // REPORT_COUNT (1) 0x75, 0x03, // REPORT_SIZE (3) 0x91, 0x03, // OUTPUT (Cnst,V ar,Abs) 0x95, 0x06, // REPORT_COUNT (6) 0x75, 0x08, // REPORT_SIZE (8) 0x15, 0x00, // LOGICAL_MINIMUM (0) 0x25, 0xFF, // LOGICAL_MAXIMUM (255) 0x05, 0x07, // USAGE_PAGE (Keyboard) 0x19, 0x00, // USAGE_MINIMUM (Reserved (no event indicated)) 0x29, 0x65, // USAGE_MAXIMUM (Keyboard Application) 0x81, 0x00, // INPUT (Data,Ary,Abs)

MDL(内存描述符表) 详解

MDL(内存描述符表)详解 分类:初学驱动2013-01-25 18:07 308人阅读评论(0) 收藏举报mdl 以下的虚拟内存可以理解成逻辑内存,因为我觉得只有这样才能讲通下面所有的东西。以下的“未分页”指没有为页进行编码。 以下为MDL结构体(我很郁闷,我在MSDN上没有找到这个结构体) typedef struct _MDL { struct _MDL *Next; //下一个MDL CSHORT Size; //大小 CSHORT MdlFlags; //标志,保护属性等 struct _EPROCESS *Process;// PVOID MappedSystemVa; PVOID StartVa; ULONG ByteCount; ULONG ByteOffset; } MDL, *PMDL; 如何使用MDL: 一个连续的虚拟内存地址范围可能是由多个分布(spread over)在不相邻的物理页所组成的。系统使用MDL(内存描述符表)结构体来表明虚拟内存缓冲区的物理页面布局。我们应该避免直接访问MDL。我们可以使用MS-Windows提供的宏,他们提供了对这个结构体基本的访问。 ·MmGetMdlVirtualAddress 获取缓冲区的虚拟内存地址 ·MmGetMdlByteCount 获取缓冲区的大小(字节数) ·MmGetMdlByteOffset 获取缓冲区开端的物理页的大小(字节数)·MmGetMdlPfnArray 获取记录物理页码的一个数组指针。 我们可以用IoAllocateMdl函数来分配一个MDL。如果要取消分配,可是使用IoFreeMdl 函数。或者,可以使用MmInitializeMdl来把一个之前定义的缓冲区定制成一个MDL。但是以上两种方式都不能初始化物理页码数组。 对于在未分页池中分配的缓冲区,可以用MmBuidlMdlForNonpagedPool函数来初始化页码数组。对于可分页的内存,虚拟内存和物理内存之间的联系是暂时的,所以MDL的页码数组只在特定的环境和时间段有效,因为很可能其他的程序对它们进行重新分配,为了使其

USB HID设备报告描述符详解

USB HID设备报告描述符详解 概述: 报告在这里意思是数据传输(data transfer),而报告描述符是对这些传输的数据作用途(usage)上的说明。 USB通讯协议的规范是以1ms产生一个USB帧(frame),USB设备可以每一个帧中发送和接收一个交换(transaction)。交换是由几个封包(packet)组成,而传输是由一个或几个交换来完成传送一口中有效的数据。在这里,传输和报告的意思相类似。传输方式有四种,初始学一般只要了解控制型传输(control transfer)和中断型传输(interrupt transfer)即可。控制型传输是当需要时才执行传输要求,是最一般的传输方式,组态、命令和状态的通讯都可以使用控制型传输;控制型传输主要用于消息型数据(message-type data)。中断型传输目的在做重复的数据更新(recurring data)传输,精确一点而言,即是在每个有限有周期内(bounded period)作至少一次的小量数据发送或接收;所以适用于流动型数据(stream-type data),注意这里所谓的周期时间就是在端点描述符中的轮询间隔时间。报告有三种:input,output,和Feature.后面将作进一步介绍。中断型输入管线(interrupt in pipe)仅可以传送input报告;中断型输出管线(interrupt out pipe)仅可以传送output报告;但是控制型管线(control pipe)可以传送input,out put和feature报告。端点描述符有声明所使用的端点为何种管线。 数据本身没有任何意义,要赋于用途才能明确其为控制什么(control);例如设备上的按钮指示灯和X与Y轴的位移等都通称控制,数据则为按钮和指示灯的开关状态或X与Y轴的位移量。为了这个目的应运而生报告描述符,其将数据的操控与它的用途作一对一的对应,所以解读报告后就可以知道每个数据作何种操作。所以“传输的数据”和“操作”只是一事件的两种描述方式。用途是以一个32位卷标(称作usage tag)来表示,高16位称作usage page(用途类页),低16位称为usage DI(用途识别名): Usage = (usage page:usage ID) 举例说明:二个字节分别为x和y轴的位移数据,因此第一个字节的usage =(generic desktop:X),而第二个字节的usage = (generic desktop:Y),其中gen

系统与联锁系统接口描述

北京通号国铁城市轨道技术有限公司 文件名称:青岛地铁3号线ATS系统与联锁系统接口描述文件编号:CRSCU-QD-3A-14A-1210 版本:V1.1

修订记录

目录 1.范围2 2.规范性引用文件2 3.符号和缩略语2 4.构成3 5.功能3 6.主要技术要求4 6.1.安全要求4 6.2.通信参数4 6.3.可靠性要求4 6.4.基本要求4 7.通信的基本内容4 7.1.站场表示信息4 7.2.控制状态信息5 7.3.控制命令信息5 7.4.时钟信息6 7.5.心跳信息6 7.6.控制模式转换信息6 8.区间信息的采集6 9.通信帧格式6 9.1.帧头6 9.2.首部长6 9.3.版本号7 9.4.发送序号7 9.5.确认序号7 9.6.帧类型7 9.7.数据长度8 9.8.数据内容8 9.9.帧尾8 9.10.CRC校验8 9.11.数据转义8 10.帧定义9 10.1.通讯请求帧DC29

10.2.通讯允许帧DC39 10.3.确认帧ACK9 10.4.非确认帧NACK10 10.5.版本号错误帧VERROR10 10.6.故障信息报告帧FIR10 10.7.请求站场表示帧SDIQ10 10.8.站场表示信息帧SDI11 10.9.站场表示变化信息帧SDCI11 10.10.按钮及控制命令帧BCC12 10.11.时钟同步请求帧TSQ13 10.12.同步数据帧TSD13 10.13.运行状态报告帧RSR14 10.14.自律控制请求帧ACQ14 10.15.自律控制同意帧ACA15 10.16.控制命令回复帧BCR15 11.序号控制17 12.超时与重传17 13.主备机的传送内容18 14.通讯故障的倒机切换逻辑18 15.通讯示意图18 1. 范围 本通信协议规定了调度集中车站自律机与计算机联锁系统的通信内容、方式、功能以及其它主要技术要求。 本通信协议适用于调度集中车站自律机与计算机联锁系统的工程设计、施工安装以及维护管理。 2. 规范性引用文件 本协议参考《调度集中车站自律机与计算机联锁通信协议(V1.1)》2006年5月18日发布版 3. 符号和缩略语 CTC:调度集中系统,特指分散自律调度集中系统 DC2:通讯请求 DC3:通讯允许 ACK:确认 NACK:非确认

USB HID报告描述符详解

USB 之人性化接口装置的报告描述元(1) 作者: 林锡宽 e-mail: sklin@https://www.360docs.net/doc/3d16205609.html,.tw (原文刊于e 科技杂志vol. 30,2003 年6 月号) 关于USB 的标准描述元已经在 e 科技杂志的第24 和25 期中作了完整的介绍。有些读者来函希望能早日刊出报告描述元的介绍。人性化接口装置HID 的类别 特定描述元有三种,其中HID 描述元因为需要连接在接口描述元(标准描述元 之一)之后,所以也已经在前文介绍了。其他二个HID 类别特定描述元为报告 描述元和实体描述元。实体描述元几乎很少使用到,所以不拟介绍,虽然它不会 很复杂。本文仅专注介绍报告描述元。相对来说,报告描述元最复杂,也不容易 理解,可是却最重要,因为HID 装置与主机间的经常性数据传输都由报告描述 元来规范。因为报告描述元的复杂和难理解,使得此文的编撰花了不少时间,因 此无法在上次刊完USB 标准描述元后,接着刊出。 由于内容篇幅颇长,所以仅能分为三篇陆续刊出。本期的第一篇中仅介绍到区域 性项目,下期的第二篇再继续介绍全局性项目和主项目。这三类项目构成一个报 告描述元。最后仍需要以一个实际的范例来解说使用方法,所以第三篇文章将提 供一个实际的范例:整合鼠标的键盘装置。此外,也会将该范例的韧体程序代码提 供给有兴趣的读者。这个韧体程序代码不只是该范例的报告描述元,也含括了它的 标准描述元。 概述 报告(report)在这里意指数据传输(data transfer),而报告描述元则是对这些传输的 数据作用途(usage)的说明。 USB 通讯协议的规范是以1 毫秒产生一个USB 讯框(frame),USB 装置可以在每 一个讯框中传送和接收一个交易(transaction)。交易是由数个封包(packet)组成, 而传输是由一或数个交易来完成传递一串有意义的数据。在这里,传输和报告的 意义大同小异。传输方式有四种,初学者只要了解控制型传输(control transfer) 和中断型传输(interrupt transfer)即可。控制型传输是当需要时才执行传输要求, 是最一般的传输,组态、命令和状态的通讯都可以使用,主要用于讯息型数据(message-type data)。中断型传输目的在做重复的数据更新(recurring data)传输, 精确一点而言,即是在每个有限的周期内(bounded period)作至少一次的小量数据 传送或接收﹔所以适用于流动型数据(stream-type data),注意这里所谓的周期时

楼宇自动化功能描述及接口说明

附件一 BAS系统功能描述及接口说明 1、空调系统 由空调机组,新风机组成,按每天预先编排的时间包括假日程序对空调机组控制和监视。 监控点: *风机运行状态; *风机手自动状态 *风机故障报警; *送风或回风温度; *过滤器淤塞报警; *风机的远程启停控制 通过安装在机房内的直接数字式控制器DDC,由内部预先编写的软件程序来进行自动节能及控制功能: *根据送风或回风温度与设定值的偏差,用比例积分微分等运算规律来控制回水电动二通阀(他方提供)的开度; *当风机停止后,回水电动二通阀返回全闭位置; 2、送、排风机监控 监控点: *风机运行状态; *风机手自动状态 *风机故障报警; *风机远程启停控制; 可按预先编排的时间包括假日程序对风机进行远程控制;

3、冷冻系统 冷冻系统的监控包括冷冻水系统,冷却水系统,冷却塔系统,集水器和分水器,膨胀水箱的监控,主要监控点如下: *冷冻机运行状态及启停控制; *冷冻机故障报警; *冷冻供回水总管温度、压力 *冷冻水回水流量; *冷冻水水流指示; *冷冻水泵运行状态及启停控制; *冷冻水泵故障报警; *冷冻水泵手自动状态 *冷却水泵运行状态及启停控制; *冷却水泵故障报警; *冷却水泵手自动状态 *冷却塔风机运行状态及启停控制; *冷却塔风机故障报警; *冷却塔风机手自动状态 *冷却水水流指示; *冷冻水水流指示; *膨胀水箱液位监测及报警; *冷冻机、冷冻水泵、冷却水泵、冷却塔运行时间累积; 通过安装在冷冻机房内的直接数字式控制器DDC按内部预先编写的软件程序来控制冷冻机启停的台数和相关设备的群控: *通过量度冷冻水的供/回水温度和回水流量,计算出空调系统的冷负荷; *根据实际冷负荷来决定冷冻机的启停台数组合,以达到最佳的节能状态; *根据预先编排的时间表,按“迟开机早关机”原则控制冷冻机组的启停以达到节能的目的; *当一台冷冻水泵/冷却水泵发生故障时,备用泵会自动投入运行;

USB的描述符详解总结

USB的描述符与命令请求详解 一、描述符 1.什么是描述符 所谓描述符,就是用于描述设备特性的具有特定格式排列的一种数据组织结构。 2.描述符的作用 描述符的作用在于设备向主机汇报自己的信息、特征,主机根据这些信息从而加载相应的驱动程序。 3.描述符的分类 描述符分为三大类:标准描述符、设备类描述符、厂商描述符。 除字符串描述符可选外,任何设备都必须包含剩下的几种标准描述符。 在USB1.0中规定了5种标准的描述符: 设备描述符 配置描述符 接口描述符 端点描述符 字符串描述符 规定的设备类描述符有:集线器类描述符、人机接口类描述符。 下表是三种描述符的类型值: 4.使用的几种类 设备类DeviceClass 下表是设备类值的含义。

接口类InterfaceClass 下表是接口类值的含义。 类的交叉与独享 在描述符中,只有设备描述符和接口描述符中会有类别之分,即只有设备和接口会分 类使用,不过有些类别的使用只需经过设备或接口的区分就可彻底清楚明白,这说明在设备类别和接口类别的定义上会有共同的类别名称。而有些类别则是设备或接口独享的,下表是与使用设备相关的类别划分交叉或共享情况:

(此表也适用于标准命令Get_Descriptor中wValue域高字节的取值含义) 【说明:】在设备或接口分类上均可彻底分清使用的(Usage = Both),即在任一处描述符中定义即可的分清楚使用的类(Usage = Both)的基本类有: 02h ------------- 通信及CDC控制类; DCh ------------ 诊断设备类; EFh ------------- 混杂设备类; FFh ------------- 厂商定义的设备类。 5.标准描述符 设备描述符

PMC系统与PLC的接口描述(AB&Siemens)

PMC系统与现场PLC通讯接口技术规范(适用于AB PLC 和SIEMENS PLC)Communication Interface Requirements between PMC Data Collector and PLC (For AB PLC & Siemens PLC)

修改记录

文档目录/TABLE OF CONTENTS 1引言/I NTRODUCTION (4) 2本文档名称的概念/C ONCEPT USED IN THIS DOCUMENT (4) 3PMC数据采集器和车间现场PLC之间的通讯方式/C OMMUNICATION MODE BETWEEN PMC PDU AND PLC S (4) 4PMC接口对OEM编程的要求/OEM MUST OBEY THESE RULES DURING PROGRAMMING (5) 5PMC接口描述/I NTERFACE DESCRIPTION (5) 5.1PMC 接口模块内存分配情况/ PMC interface memory allocation (5) 5.2接口详细说明/ Detail Interface (6) 5.2.1PMC接口数据交换区/ Data Exchange Area (6) 5.2.2生产报警监控区/ Produce Alarm Monitor Area (10) 5.2.3生产计数监控区/ Produce Count Monitor Area (11) 5.2.4模拟量数据监控区/ Analog data Monitor Area (16) 6A PPENDIX 1报警清单文件格式样例A LARM D ATA F ILE FORMAT SAMPLE (17)

USB_HID设备报告描述符详解

概述 报告在这里意思是数据传输(data transfer),而报告描述符是对这些传输的数据作用途(usage)上的说明。USB通讯协议的规范是以1ms产生一个USB 帧(frame),USB设备可以每一个帧中发送和接收一个交换(transaction)。交换是由几个封包(packet)组成,而传输是由一个或几个交换来完成传送一口中有效的数据。在这里,传输和报告的意思相类似。传输方式有四种,初始学一般只要了解控制型传输(control transfer)和中断型传输(interrupt transfer)即可。控制型传输是当需要时才执行传输要求,是最一般的传输方式,组态、命令和状态的通讯都可以使用控制型传输;控制型传输主要用于消息型数据(message-type data)。中断型传输目的在做重复的数据更新(recurring data)传输,精确一点而言,即是在每个有限有周期内(bounded period)作至少一次的小量数据发送或接收;所以适用于流动型数据(stream-type data),注意这里所谓的周期时间就是在端点描述符中的轮询间隔时间。报告有三种: input,output,和Feature.后面将作进一步介绍。中断型输入管线(interrupt in pipe)仅可以传送input报告;中断型输出管线(interrupt out pipe)仅可以传送output报告;但是控制型管线(control pipe)可以传送input,output和feature报告。端点描述符有声明所使用的端点为何种管线。 数据本身没有任何意义,要赋于用途才能明确其为控制什么(control);例如设备上的按钮指示灯和X与Y轴的位移等都通称控制,数据则为按钮和指示灯的开关状态或X与Y轴的位移量。为了这个目的应运而生报告描述符,其将数据的操控与它的用途作一对一的对应,所以解读报告后就可以知道每个数据作何种操作。所以“传输的数据”和“操作”只是一事件的两种描述方式。用途是以一个32位卷标(称作usage tag)来表示,高16位称作usage page(用途类页),低16位称为usage DI(用途识别名): Usage=(usage page:usage ID) 主项目全域项目区域项目 标签代码标签代码标签代码Input0X8?Usage Page0x0?Usage0x0? 0x1? Output0x9?Logical Minimum0x1?Usage Minimum 0x2? Feature0xb?Logical Maximum0x2?Usage Maximum Physical Minimum0x3?Designator0x3?

系统对接方案

系统对接设计 1.1.1对接方式 系统与外部系统的对接方式以web service方式进行。 系统接口标准: 本系统采用SOA体系架构,通过服务总线技术实现数据交换以及实现各业务子系统间、外部业务系统之间的信息共享和集成,因此SOA体系标准就是我们采用的接口核心标准。主要包括: 服务目录标准:服务目录API接口格式参考国家以及关于服务目录的元数据指导规范,对于W3C UDDI v2 API结构规范,采取UDDI v2的API的模型,定义UDDI 的查询和发布服务接口,定制基于Java和SOAP的访问接口。除了基于SOAP1.2的Web Service接口方式,对于基于消息的接口采用JMS或者MQ的方式。 交换标准:基于服务的交换,采用HTTP/HTTPS作为传输协议,而其消息体存放基于SOAP1.2协议的SOAP消息格式。SOAP的消息体包括服务数据以及服务操作,服务数据和服务操作采用WSDL进行描述。 Web服务标准:用WSDL描述业务服务,将WSDL发布到UDDI用以设计/创建服务,SOAP/HTTP服务遵循WS-I Basic Profile 1.0,利用J2EE Session EJBs实现新的业务服务,根据需求提供SOAP/HTTP or JMS and RMI/IIOP接口。 业务流程标准:使用没有扩展的标准的BPEL4WS,对于业务流程以SOAP服务形式进行访问,业务流程之间的调用通过SOAP。 数据交换安全:与外部系统对接需考虑外部访问的安全性,通过IP白名单、SSL 认证等方式保证集成互访的合法性与安全性。

数据交换标准:制定适合双方系统统一的数据交换数据标准,支持对增量的数据自动进行数据同步,避免人工重复录入的工作。 1.1.2接口规范性设计 系统平台中的接口众多,依赖关系复杂,通过接口交换的数据与接口调用必须遵循统一的接口模型进行设计。接口模型除了遵循工程统一的数据标准和接口规范标准,实现接口规范定义的功能外,需要从数据管理、完整性管理、接口安全、接口的访问效率、性能以及可扩展性多个方面设计接口规格。 1.1. 2.1接口定义约定 客户端与系统平台以及系统平台间的接口消息协议采用基于HTTP协议的REST风格接口实现,协议栈如图4-2所示。 图表错误!文档中没有指定样式的文字。-接口消息协议栈示意图系统在http协议中传输的应用数据采用具有自解释、自包含特征的JSON数据格式,通过配置数据对象的序列化和反序列化的实现组件来实现通信数据包的编码和解码。 在接口协议中,包含接口的版本信息,通过协议版本约束服务功能规范,支持服务平台间接口协作的升级和扩展。一个服务提供者可通过版本区别同时支持多个版本的客户端,从而使得组件服务的提供者和使用者根据实际的需要,独立演进,降低系统升级的复杂度,保证系统具备灵活的扩展和持续演进的能力。

socket原理详解

socket原理详解 1、什么是socket 我们知道进程通信的方法有管道、命名管道、信号、消息队列、共享内存、信号量,这些方法都要求通信的两个进程位于同一个主机。但是如果通信双方不在同一个主机又该如何进行通信呢?在计算机网络中我们就学过了tcp/ip协议族,其实使用tcp/ip协议族就能达到我们想要的效果,如下图(图片来源于《tcp/ip协议详解卷一》第一章1.3) 、 图一各协议所处层次 当然,这样做固然是可以的,但是,当我们使用不同的协议进行通信时就得使用不同的接口,还得处理不同协议的各种细节,这就增加了开发的难度,软件也不易于扩展。于是UNIX BSD就发明了socket这种东西,socket屏蔽了各个协议的通信细节,使得程序员无需关注协议本身,直接使用socket提供的接口来进行互联的不同主机间的进程的通信。这就好比操作系统给我们提供了使用底层硬件功能的系统调用,通过系统调用我们可以方便的使用磁盘(文件操作),使用内存,而无需自己去进行磁盘读写,内存管理。socket其实也是一样的东西,就是提供了tcp/ip

协议的抽象,对外提供了一套接口,同过这个接口就可以统一、方便的使用tcp/ip协议的功能了。百说不如一图,看下面这个图就能明白了。 图二 socket所处层次 那么,在BSD UNIX又是如何实现这层抽象的呢?我们知道unix中万物皆文件,没错,bsd在实现上把socket设计成一种文件,然后通过虚拟文件系统的操作接口就可以访问socket,而访问socket时会调用相应的驱动程序,从而也就是使用底层协议进行通信。(vsf也就是unix提供给我们的面向对象编程,如果底层设备是磁盘,就对磁盘读写,如果底层设备是socket就使用底层协议在网中进行通信,而对外的接口都是一致的)。下面再看一下socket的结构是怎样的(图片来源于《tcp/ip协议详解卷二》章节一,1.8描述符),注意:这里的socket是一个实例化之后的socket,也就是说是一个具体的通信过程中的socket,不是指抽象的socket结构,下文还会进行解释。

系统对接方案说明

WORD格式可编辑 系统对接设计 1.1.1 对接方式 系统与外部系统的对接方式以web service方式进行。 系统接口标准: 本系统采用SOA体系架构,通过服务总线技术实现数据交换以及实现各业务子系统间、外部业务系统之间的信息共享和集成,因此SOA体系标准就是我们采用的接口核心标准。主要包括: 服务目录标准:服务目录API接口格式参考国家以及关于服务目录的元数据指导规范,对于W3C UDDI v2 API结构规范,采取UDDI v2的API的模型,定义UDDI的查询和发布服务接口,定制基于Java和SOAP的访问接口。除了基于SOAP1.2的Web Service 接口方式,对于基于消息的接口采用JMS或者MQ的方式。 交换标准:基于服务的交换,采用HTTP/HTTPS作为传输协议,而其消息体存放基于SOAP1.2协议的SOAP消息格式。SOAP的消息体包括服务数据以及服务操作,服务 数据和服务操作采用WSDL进行描述。 Web服务标准:用WSDL描述业务服务,将WSDL发布到UDDI用以设计/创建服务,SOAP/HTTP服务遵循WS-I Basic Profile 1.0,利用J2EE Session EJBs实现新的业务服务,根据需求提供SOAP/HTTP or JMS and RMI/IIOP接口。 业务流程标准:使用没有扩展的标准的BPEL4WS,对于业务流程以SOAP服务形式进行访问,业务流程之间的调用通过SOAP。 数据交换安全:与外部系统对接需考虑外部访问的安全性,通过IP白名单、SSL 认证等方式保证集成互访的合法性与安全性。 数据交换标准:制定适合双方系统统一的数据交换数据标准,支持对增量的数据自动进行数据同步,避免人工重复录入的工作。 1.1.2 接口规范性设计 系统平台中的接口众多,依赖关系复杂,通过接口交换的数据与接口调用必 须遵循统一的接口模型进行设计。接口模型除了遵循工程统一的数据标准和接口专业知识整理分享

楼控系统与相关专业的接口要求及说明

楼宇自控系统与相关专业的接口要求及相关说明 一、楼宇自控系统与电气专业的接口及要求 楼宇自控系统作为大楼内一个重要的组成系统,其实现自身的功能已经比较成熟和完善,但在系统实施过程中,经常由于接口问题而导致系统的最终功能不完善,丢项、甩项等事情经常发生。 由于接口的问题牵扯的面比较多,涉及到工程实施中的暖通、给排水、变配电等多个专业,因此在工程的前期将接口问题进行明确,非常必要。从另一个角度将接口方面的问题进行明确,可以使业主在工程前期,在设备订货之前就明确提出接口要求,从而得以实现。 ☆明确各方面的责任及工作内容,避免出现问题时,互相扯皮。 ☆确保实现系统设计的全部功能,避免资金的浪费。 1.风机、水泵电控箱的接口要求 空调机组/新风机组送风机: 楼宇自控系统对空调机组/新风机组送风机的监控信号为:风机运行状态反馈、风机故障状态反馈、风机手/自动状态反馈、风机启停控制。 ①楼宇自控系统监测的风机运行状态反馈信号应由交流接触器的无源辅助 触点引出(此接点为一对无源常开接点)。 ②楼宇自控系统监测的风机故障状态反馈信号应由热保护继电器的无源 辅助触点引出(此接点为一对无源常开接点)。

③电气专业应在空调机组/新风机组送风机的电控箱二次控制回路中设置 手/自动转换开关,并向楼宇自控系统提供一对无源辅助触点(此接点 为一对无源常开接点),作为风机的手/自动状态反馈信号。 ④楼宇自控系统提供一对无源常开接点信号引入风机的二次控制回路,用 于当风机的手/自动开关处于自动状态时,自动控制风机的启停。 水泵 楼宇自控系统对各种水泵(其中包括:冷冻水循环泵、冷却水循环泵、热水循环泵、排污泵等)的监控信号为:水泵运行状态反馈、水泵故障状态反 馈、水泵手/自动状态反馈、水泵启停控制。 ①楼宇自控系统监测的水泵运行状态反馈信号应由交流接触器的无源辅助 触点引出(此接点为一对无源常开接点)。 ②楼宇自控系统监测的水泵故障状态反馈信号应由热保护继电器的无源辅 助触点引出(此接点为一对无源常开接点)。 ③电气专业应在水泵电控箱的二次控制回路中设置手/自动转换开关,并 向楼宇自控系统提供一对无源辅助触点(此接点为一对无源常开接 点),作为水泵的手/自动状态反馈信号。 ④楼宇自控系统提供一对无源常开接点信号引入水泵的二次控制回路,用

Linux中USB描述符详解-wxc-2018-03-31

USB描述符的作用 USB 设备第一次连接到主机时, 要接收主机枚举( Enumera tion) 和配置(Configuration) , 目的是让主机知道设备功能、是哪一类的USB 设备、占用多少资源、使用了哪些传输方式以及传输的数据量等等。只有主机完全确认了这些信息后, 设备才能真正开始工作。这些信息是通过存储在设备中的USB 描述符来体现的。因此, 这种USB 描述符也可以看作是USB 设备的身份证明。 描述符(Descriptor )是一个完整的数据结构, 存储在USB 设备中, 用于描述一个USB 设备的所有属性。USB主机通过一系列命令要求设备发送这些信息。 USB描述符的种类 描述符分为三大类:标准描述符、设备类描述符、厂商描述符。 三种描述符的类型值bDescriptorType: 设备的类别bDeviceClass

接口类别bInterfaceClass Linux中各种描述符的定义 在include/linux/usb/Ch9.h中定义 USB设备描述符: struct usb_device_descripto r { __u8 bLength; //此描述符的字节数 __u8 bDescriptorType; //描述符的类型(此处应为0x01,即设备描述符) __le16 bcdUSB; // USB版本号(BCD 码)

__u8 bDeviceClass; //设备的类别---可查看上表格 __u8 bDeviceSubClass; //设备子类码:这些码值的具体含义根据bDeviceClass 域来看。 __u8 bDeviceProtocol; /*协议码 这些码的值视bDeviceClass 和bDeviceSubClass 的值而定。如果设备支持设备类相关的 协议,此码标志了设备类的值。如果此域的值为零,则此设备不支持设备类相关的协议,然 而,可能它的接口支持设备类相关的协议。如果此域的值为FFH,此设备使用厂商定义的议。*/ __u8 bMaxPacketSize0; //端点0的最大包大小(仅8,16,32,64为合法值) __le16 idVendor; //厂商标志(由USB-IF组织赋值) __le16 idProduct; //产品标志(由厂商赋值) __le16 bcdDevice; //设备版本号(BCD 码) __u8 iManufacturer; //描述厂商信息的字符串描述符的索引值。 __u8 iProduct; //描述产品信息的字串描述符的索引值。 __u8 iSerialNumber; //描述设备序列号信息的字串描述符的索引值。 __u8 bNumConfigurations; //可能的配置描述符数目 } USB配置描述符 配置描述符中包含了配置描述符本身的长度、所有配置信息的总长度、供电方式及远 程唤醒、供电量。 如果主机发出标准命令Get_Descriptor要求获得设备的某个配置描述符时,该配置应用的所有信息都将发给主机,它包括:该标准配置符本身、该配置所包含的所有接口、端点描述符及设备类描述符和厂商描述符。 struct usb_config_descriptor { __u8 bLength; //此描述符的字节数 __u8 bDescriptorType; //配置描述表类型(此处为0x02) __le16 wTotalLength; //此配置信息的总长(包括配置,接口,端点和设备类及厂商定义的描述符),即:将要返回的配置信息总长度。 __u8 bNumInterfaces; //此配置所支持的接口个数 __u8 bConfigurationValue;//在SetConfiguration()请求中用作参数来选定此配置。 __u8 iConfiguration;//描述此配置的字串描述符的索引 __u8 bmAttributes; /* 配置特性:

SIFT算法C语言逐步实现详解

SIFT算法C语言逐步实现详解(上) 引言: 在我写的关于sift算法的前倆篇文章里头,已经对sift算法有了初步的介绍:九、图像特征提取与匹配之SIFT算法,而后在:九(续)、sift算法的编译与实现里,我也简单记录下了如何利用opencv,gsl等库编译运行sift程序。 但据一朋友表示,是否能用c语言实现sift算法,同时,尽量不用到opencv,gsl等第三方库之类的东西。而且,Rob Hess维护的sift 库,也不好懂,有的人根本搞不懂是怎么一回事。 那么本文,就教你如何利用c语言一步一步实现sift算法,同时,你也就能真正明白sift算法到底是怎么一回事了。 ok,先看一下,本程序最终运行的效果图,sift 算法分为五个步骤(下文详述),对应以下第二--第六幅图:

sift算法的步骤 要实现一个算法,首先要完全理解这个算法的原理或思想。咱们先来简单了解下,什么叫sift算法: sift,尺度不变特征转换,是一种电脑视觉的算法用来侦测与描述影像中的局部性特征,它在空间尺度中寻找极值点,并提取出其位置、尺度、旋转不变量,此算法由David Lowe 在1999年所发表,2004年完善总结。 所谓,Sift算法就是用不同尺度(标准差)的高斯函数对图像进行平滑,然后比较平滑后图像的差别, 差别大的像素就是特征明显的点。 以下是sift算法的五个步骤: 一、建立图像尺度空间(或高斯金字塔),并检测极值点 首先建立尺度空间,要使得图像具有尺度空间不变形,就要建立尺度空间,sift算法采用了高斯函数来建立尺度空间,高斯函数公式为:

上述公式G(x,y,e),即为尺度可变高斯函数。 而,一个图像的尺度空间L(x,y,e) ,定义为原始图像I(x,y)与上述的一个可变尺度的2维高斯函数G(x,y,e) 卷积运算。 即,原始影像I(x,y)在不同的尺度e下,与高斯函数G(x,y,e)进行卷积,得到L(x,y,e),如下: 以上的(x,y)是空间坐标,e,是尺度坐标,或尺度空间因子,e的大小决定平滑程度,大尺度对应图像的概貌特征,小尺度对应图像的细节特征。大的e值对应粗糙尺度(低分辨率),反之,对应精细尺度(高分辨率)。 尺度,受e这个参数控制的表示。而不同的L(x,y,e)就构成了尺度空间,具体计算的时候,即使连续的高斯函数,都被离散为(一般为奇数大小)(2*k+1) *(2*k+1)矩阵,来和数字图像进行卷积运算。 随着e的变化,建立起不同的尺度空间,或称之为建立起图像的高斯金字塔。 但,像上述L(x,y,e) = G(x,y,e)*I(x,y)的操作,在进行高斯卷积时,整个图像就要遍历所有的像素进行卷积(边界点除外),于此,就造成了时间和空间上的很大浪费。 为了更有效的在尺度空间检测到稳定的关键点,也为了缩小时间和空间复杂度,对上述的操作作了一个改建:即,提出了高斯差分尺度空间(DOG scale-space)。利用不同尺度的高斯差分与原始图像I(x,y)相乘,卷积生成。 DOG算子计算简单,是尺度归一化的LOG算子的近似。 ok,耐心点,咱们再来总结一下上述内容: 1、高斯卷积 在组建一组尺度空间后,再组建下一组尺度空间,对上一组尺度空间的最后一幅图像进行二分之一采样,得到下一组尺度空间的第一幅图像,然后进行像建立第一组尺度空间那样的操作,得到第二组尺度空间,公式定义为 L(x,y,e) = G(x,y,e)*I(x,y)

项目接口需求及设计说明文档(模板)

客户化开发需求规格说明书 媒讯集团E A S项目 CTC与EAS接口 需求及设计说明书 文档作者: 创建日期:2013-05-10 确认日期: 当前版本:1.0 拷贝数量:1 审批签字: 客户方: 实施方:

文档控制 修改记录 日期作者版本参考版本备注

目录 1.概述 (4) 1.1读者 (4) 1.2图例 (4) 1.3目的 (4) 二、业务现状 (5) 三、概要设计 (5) 3.1接口通讯方式 (5) 3.2通讯内容定义 (5) 3.3媒讯CTC系统提供接口使用范例 (5) 3.4金蝶EAS提供接口使用范例 (5) 3.5媒讯CTC系统提供接口服务地址 (7) 3.6金蝶EAS提供接口服务地址 (7) 3.7接口需求 (7) 四、详细设计 (8) 4.1XX EAS接口 (8)

1.概述 金蝶与用户及用户业务系统方通过多次讨论,制定了接口开发需求设计说明书,作为双方后续开发指引。 1.1读者 本文读者对象为业务管理人员、系统设计、开发人员、测试人员。 1.2图例 本文中如未进行特殊说明,各图标代表的含义如下: 表示一个活动; 表示动态的业务数据,如系统单据; 表示流程走向; 表示条件判断、流程分支; 表示静态的业务数据,如基础资料; 表示系统外一个手工处理活动; 表示系统外手工填制的单据; 表示当前系统之外的活动; 表示当前系统之外产生的业务数据。 1.3目的 本文档是媒讯CTC系统与EAS系统接口的需求及设计方案相关文档,可用于指导开发、测试工作和作为验收相关依据文档。

二、业务现状 待补充 三、概要设计 3.1接口通讯方式 金蝶EAS与媒讯CTC系统之间通讯采用WebService方式进行数据传输。 3.2通讯内容定义 对于记录型的大对象,在通讯时,采用String型的xml格式的参数进行传递。对于其他非记录型的对象,在通讯时,可采用非xml格式的参数进行传递,也可使用多个参数。具体格式,请参照每个接口的通讯用例说明。 3.3媒讯CTC系统提供接口使用范例 待补充。 3.4金蝶EAS提供接口使用范例 3.4.1规范说明 EAS通过webService接口与异构系统通信。EAS WebService全部是使用java编写的,其接口描述符合WSDL国际标准,其数据描述符合XSD 国际标准。 本次提供的接口除系统登录接口外,其他接口都需要调用登录接口,以便将登陆的SessionId信息放入到SOAP 的HEADER 报文中。 3.4.2使用示例 金蝶在EAS上发布WebService服务,提供wsdl文件供客户端下载,其他业务系统根据下载的wsdl文件,产生客户端。 建议使用Axis2来生成客户端代理。

USB_HID报告及报告描述符_入门简介

USB HID报告及报告描述符简介 USB HID设备是通过报告来给传送数据的,报告有输入报告和输出报告。输入报告是USB 设备发送给主机的,例如USB鼠标将鼠标移动和鼠标点击等信息返回给电脑,键盘将按键数据数据返回给电脑等;输出报告是主机发送给USB设备的,例如键盘上的数字键盘锁定灯和大写字母锁定灯等。报告是一个数据包,里面包含的是所要传送的数据。输入报告是通过中断输入端点输入的,而输出报告有点区别,当没有中断输出端点时,可以通过控制输出端点0发送,当有中断输出端点时,通过中断输出端点发出。 而报告描述符,是描述一个报告以及报告里面的数据是用来干什么用的。通过它,USB HOST可以分析出报告里面的数据所表示的意思。它通过控制输入端点0返回,主机使用获取报告描述符命令来获取报告描述符,注意这个请求是发送到接口的,而不是到设备。一个报告描述符可以描述多个报告,不同的报告通过报告ID来识别,报告ID在报告最前面,即第一个字节。当报告描述符中没有规定报告ID时,报告中就没有ID字段,开始就是数据。更详细的说明请参看USB HID协议。USB报告描述符可以通过使用HID Descriptor tool 来生成,这个工具可以网上下载。 下面通过由HID Descriptor tool生成的USB鼠标和USB键盘来说明一下报告描述符和报告。 code char KeyBoardReportDescriptor[63] = { //表示用途页为通用桌面设备 0x05, 0x01, // USAGE_PAGE (Generic Desktop) //表示用途为键盘 0x09, 0x06, // USAGE (Keyboard) //表示应用集合,必须要以END_COLLECTION来结束它,见最后的END_COLLECTION 0xa1, 0x01, // COLLECTION (Application) //表示用途页为按键 0x05, 0x07, // USAGE_PAGE (Keyboard) //用途最小值,这里为左ctrl键 0x19, 0xe0, // USAGE_MINIMUM (Keyboard LeftControl) //用途最大值,这里为右GUI键,即window键 0x29, 0xe7, // USAGE_MAXIMUM (Keyboard Right GUI) //逻辑最小值为0 0x15, 0x00, // LOGICAL_MINIMUM (0) //逻辑最大值为1 0x25, 0x01, // LOGICAL_MAXIMUM (1) //报告大小(即这个字段的宽度)为1bit,所以前面的逻辑最小值为0,逻辑最大值为1 0x75, 0x01, // REPORT_SIZE (1) //报告的个数为8,即总共有8个bits 0x95, 0x08, // REPORT_COUNT (8) //输入用,变量,值,绝对值。像键盘这类一般报告绝对值, //而鼠标移动这样的则报告相对值,表示鼠标移动多少 0x81, 0x02, // INPUT (Data,Var,Abs) //上面这这几项描述了一个输入用的字段,总共为8个bits,每个bit表示一个按键

相关文档
最新文档