第31页
CWA 15748-4:2008
5.7 WFS_CMD_IDC_READ_RAW_DATA
描述
输入参数
输出参数 针对电动式读卡器,读卡器检查是否有卡插入。如果是的话,所有指定的磁道都必须立即读取。如果请求读取IC芯片,IC芯片将被接触加电并复位芯片、ATR(复位应答)数据会被读取,当该命令完成后,芯片将会位于接触位置。该命令也可用于已接触芯片的冷复位。 该命令只能用于用户卡,不能用于永久接触芯片。 如果没有插入卡,包括所有其它种类的读卡器,在内,等待插入或者刷卡。卡插入后将会读取所有指定的磁道数据。WFSExecute命令中所指定的超时时间段
当读卡器内没卡时且读卡器准备好接收卡,会产生WFS_EXEE_IDC_INSERTCARD事件。 磁道的数据从弃。开始或末尾的标记字符不会返回到应用程序。字段分隔符返回到应用程序,且也转换5或7 bit的字符格式转换为8 bit的ASCII格式。5或7 bit磁道字符的校验位被抛成8 bit ASCII形式。
除此之外,可以请求通过安全停止有效数据的返回。如果指定只读校验数据或者校验失败,将会返回
模块(也就是MM,CIM86)的校验。如果校验失败,不会WFS_ERR_IDC_SECURITYFAIL输出参数的安全字段被设定为相关的值,包括错误,在其它的所有情况中,将会返回WFS_IDC_SEC_HWERRORWFS_SUCCESS。 ,如果读卡器是锁定WFS_IDC_CHIPdip读卡器,当读取芯片卡时,读卡器会锁定卡,例如设置了
命令。
(参见下文)。卡会被一直锁定,直到收到WFS_CMD_IDC_EJECT_CARDLPWORD lpwReadData;
lpwReadData
如果 lpwReadData 指向零值,任何已被退出的卡都会返回到读卡器里,但不会读出数据。否则lpwReadData 指定要读取的数据,可以是如下标志的一个或多个。
Value
意义
WFS_IDC_TRACK1 读取Track 1磁道上的数据。 WFS_IDC_TRACK2 读取Track2磁道上的数据。 WFS_IDC_TRACK3 读取Track 3磁道上的数据。 WFS_IDC_CHIP
读取IC芯片的数据。 WFS_IDC_SECURITY
执行安全校验操作。 WFS_IDC_FLUXINACTIVE
如果IDC磁通传感器是可用的话,它将会失效,为的是允许读取卡上的IC芯片数据,而该卡没有磁道。 WFS_IDC_TRACK_WM 读取瑞典水印磁道。 WFS_IDC_MEMORY_CHIP 读取记忆卡。 WFS_IDC_FRONT_TRACK_1 通过装在卡前边的磁道读取Track1的数据。在某些国家,该磁道被称为JIS II track。 WFS_IDC_FRONTIMAGE 卡的正面图像将会以BMP格式读取。 WFS_IDC_BACKIMAGE
卡的背面图像将会以BMP格式读取。
LPWFSIDCCARDDATA *lppCardData;
第32页
CWA 15748-4:2008
lppCardData 指针指向一组以NULL结尾的卡数据结构数组指针,如果没有数据,lppCardData 将会是NULL。
typedef struct _wfs_idc_card_data
{ WORD wDataSource; WORD wStatus; ULONG ulDataLength; LPBYTE lpbData; WORD fwWriteMethod; } WFSIDCCARDDATA, *LPWFSIDCCARDDATA;
wDataSource
指定卡数据的来源可能是以下标志之一: 值
WFS_IDC_TRACK1 WFS_IDC_TRACK2 WFS_IDC_TRACK3 WFS_IDC_CHIP WFS_IDC_SECURITY WFS_IDC_TRACK_WM WFS_IDC_MEMORY_CHIP WFS_IDC_FRONT_TRACK_1 WFS_IDC_FRONTIMAGE WFS_IDC_BACKIMAGE
意义
lpbData 包含有从 track 1读取的数据。 lpbData包含有从 track 2读取的数据。 lpbData包含有从 track 3读取的数据。 lpbData 包含有从芯片读取的ATR数据
lpbData 包含有安全模块返回的值。 lpbData 包含有从瑞典水印磁道读取的数据。 lpbData包含从记忆卡读取的识别数据。 lpbData包含有从front track 1读取的数据。在某些国家,该磁道名为JIS II track。
lpbData包含有BMP卡(卡的正面图像)文件的完全路径和文件名字符串,以NULL结束。
lpbData包含有BMP卡(卡的背面图像)文件的完全路径和文件名字符串,以NULL结束。
wStatus
读取卡数据的状态,可能的值:: 值
WFS_IDC_DATAOK WFS_IDC_DATAMISSING WFS_IDC_DATAINVALID
意义
数据正常。 磁道/芯片/记忆卡芯片数据为空白。
磁道/芯片/记忆卡芯片数据无效。当lpbData报告 WFS_IDC_SEC_BADREADLEVEL或 WFS_IDC_SEC_DATAINVAL时,这通常会被返回。
磁道/芯片/记忆卡芯片数据太长。 磁道/芯片/记忆卡芯片数据太短 SP不支持此数据源格式。
WFS_IDC_DATATOOLONG WFS_IDC_DATATOOSHORT WFS_IDC_DATASRCNOTSUPP
错误代码
第33页
CWA 15748-4:2008
WFS_IDC_DATASRCMISSING
卡数据源丢失,或由于不能被读取而产生硬件错误,或者是模块未被初始化。例如:当要求读取记忆卡数据时,而客户插入一个不带记忆芯片的磁卡,将会返回这个状态。当lpbData 报告
WFS_IDC_SEC_NODATA, WFS_IDC_SEC_NOINIT 或WFS_IDC_SEC_HWERROR时,将会返回这个状态。当图像读卡器由于状态原因或者失败而不能创建BMP文件时,将会返回这个状态。
ulDataLength
指定lpbData的长度。
lpbData
指向从轨道/芯片读取的数据,安全模块返回的值或者以NULL结尾的字符串包含BMP图像文件的全路径和文件名。 安全模块可返回以下值: Value
意义
WFS_IDC_SEC_READLEVEL1 安全数据可读等级是1. WFS_IDC_SEC_READLEVEL2 安全数据可读等级是2. WFS_IDC_SEC_READLEVEL3 安全数据可读等级是3. WFS_IDC_SEC_READLEVEL4 安全数据可读等级是4. WFS_IDC_SEC_READLEVEL5 安全数据可读等级是5. WFS_IDC_SEC_BADREADLEVEL 所读取的安全数据质量不可接受 WFS_IDC_SEC_NODATA 卡上没有安全数据。WFS_IDC_SEC_DATAINVAL 验证安全数据和磁道上的特殊数据未成 功。.
WFS_IDC_SEC_HWERROR 由于硬件错误而不能使用安全模块。 WFS_IDC_SEC_NOINIT
不能使用安全模式由于它没有被激活(例如CIM key没有被装入)。
记忆卡返回的数据中第一个WORD字内容是与卡的通信协议,在此WORD字后面的是其它的实际数据。对可用的记忆卡协议的描述参见WFS_INF_IDC_CAPABILITIES中的lpwMemoryChipProtocols。
fwWriteMethod 该命令忽略。
除了[Ref. 1]中定义的普通的错误外, 该命令也会出现以下错误代码: Value
意义
WFS_ERR_IDC_MEDIAJAM 卡被夹住,需要操作人员的干预。 WFS_ERR_IDC_SHUTTERFAIL
由于操作失误或者硬件故障,而未能成功打开或关闭卡口,需要操作人员的干预。
WFS_ERR_IDC_NOMEDIA
在完成读取操作之前,卡被移除(产生了事件
WFS_EXEE_IDC_MEDIAINSERTED)。针对电动式读卡器来说,读取操作是失效的;也就是说必须发出另外一个命令使得读卡器读取数据。
第34页 CWA 15748-4:2008
WFS_ERR_IDC_INVALIDMEDIA WFS_ERR_IDC_CARDTOOSHORT WFS_ERR_IDC_CARDTOOLONG
事件
WFS_ERR_IDC_SECURITYFAIL
没有发现磁道或IC芯片;插卡或刷卡的方式错误。
插入的卡太短。当出现这种错误时,卡依旧在卡口位置。
插入的卡太长。当出现这种错误时,卡依旧在卡口位置。
安全模式没能成功读取卡的安全标识。
除了[Ref. 1]中定义的普通的事件外, 该命令也会出现以下事件: Value
WFS_EXEE_IDC_MEDIAINSERTED WFS_SRVE_IDC_MEDIAREMOVED WFS_EXEE_IDC_INVALIDMEDIA
WFS_EXEE_IDC_INSERTCARD 注释
无。
意义
当发现读卡器内有卡插入时,会产生该事件,提前警告应用程序一个卡的插入,允许它移除一个用户提示和/或在读卡时进行其它的处理。.
在读卡操作还没完成时,就移除了卡,会产生该事件。
用户试图以错误的方向插入卡。读卡器没有接受该卡。读卡器依旧时刻准备着接受以正确方式插入的卡。
读卡器准备接受来自用户的卡。
第35页
CWA 15748-4:2008
5.8 WFS_CMD_IDC_WRITE_RAW_DATA
描述 针对电动式读卡器,读卡器检查是否已经插入了卡。如果是的话,数据将被写入磁道。
输入参数
输出参数 如果没有插入卡,等待插入或者刷卡。卡插入后将会将数据写入所有指定的磁道。包括所有其它种类的读卡器,在WFSExecute命令中所指定的超时时间段内,
当读卡器内没卡时且读卡器准备好接收卡,会产生WFS_EXEE_IDC_INSERTCARD事件。
应用程序必须将磁道数据转换成ASCII编码且不能有起始字符,SP转换此数据(参见WFS_CMD_IDC_READ_RAW_DATAWFS_ERR_INVALID_DATA错误。
)。如果传的数据太长的话,会返回该处理之后是数据校验。
如果在写数据时电源断电的话,操作的结果将会依据厂商的不同而不同,并不能保证写卡成功。
LPWFSIDCCARDDATA *lppCardData; 指向NULL结束的指针数组:
typedef struct _wfs_idc_card_data
{ WORD wDataSource; WORD wStatus; ULONG ulDataLength; LPBYTE lpbData; WORD fwWriteMethod; } WFSIDCCARDDATA, *LPWFSIDCCARDDATA;
wDataSource
指定要写入的数据,是以下值之一: Value
意义
WFS_IDC_TRACK1 lpbData包含写入 track 1的数据。 WFS_IDC_TRACK2 lpbData包含写入 track 2的数据。 WFS_IDC_TRACK3
lpbData包含写入 track 3的数据。.
WFS_IDC_FRONT_TRACK_1
lpbData 包含写入 front track 1的数据。在某些国家,该磁道被称做JIS II track.
wStatus
在该参数中该命令被忽略。 ulDataLength
指定lpbData的长度。 lpbData
指向写入磁道的数据。
fwWriteMethod
指定应该写入高磁磁道还是低磁磁道
Value 意义 WFS_IDC_LOCO 写入低矫顽(磁)力磁道。 WFS_IDC_HICO 写入高矫顽(磁)力磁道。
WFS_IDC_AUTO SP决定是写入高磁磁道还是低磁磁道。
无