Page 31
CWA 15748-5:2008
lpszExtra
指向厂商特有或任何其它扩展信息的一个列表。返回信息为一系列“键=值”字符串以便SP进行轻松扩展。每一个字符串都是以空字符NULL结束的,最后一个字符串以两个空字符NULL结束。一个空列表可通过一个空指针或两个连续的空字符NULL来表示。
错误代码:此命令仅产生定义在[参考一]的一般错误代码。
注释: 无。
Page 32
CWA 15748-5:2008
5. 执行命令
5.1 WFS_CMD_CDM_DENOMINATE
描述: 此命令提供一个面额。面额所指定的数目需要依靠每个钞箱的支持来满足。面额取决于货币,混合算法及提
供面额的任何部分都要被应用程序支持。
此命令也被用于确认应用程序可以分配的任何有效面额。
如果不同的币种拥有相同的面额,货币名必须为一个三ASCII 0x20h 字符的数组,总额必须为零,而且混合数必须为WFS_CDM_INDIVIDUAL。然而,此约定并不被应用在单币种或非货币的情况下,例如息票。 如果WFS_INF_CDM_CAPABILITIES命令返回的结构体WFSCDMCAPS中的bCashBox值为TRUE,假设全部面额不能被满足,那么将返回部分面额,缺少的面额由现金盒来提供。
此命令被使用于四个不同的情况:
1. 为了检查是否能够分配特定的面额,命令输入的参数为币种和面额,混合算法为WFS_CDM_INDIVIDUAL,
总额为零。如果不同的币种被分配,货币名必须为一个三ASCII 0x20h 字符的数组。
2. 为了使特定总额,特定面额和可能分配的面额有效。命令输入的参数为总额,币种和面额,混合算法为
WFS_CDM_INDIVIDUAL。
3. 为了获得特定金额的面额,输入的参数必须有总额,币种和混合数。
4. 为了完成特定金额的部分面额,输入参数必须有币种,总额,混合数和特定面额部分或现金盒最小金额
中的一个,完成的面额被返回。此命令执行后,面额结构中的ulCashBox参数将被修改。
输入参数: LPWFSCDMDENOMINATE lpDenominate;
typedef struct _wfs_cdm_denominate {
USHORT usTellerID; USHORT usMixNumber; LPWFSCDMDENOMINATION lpDenomination; } WFSCDMDENOMINATE, *LPWFSCDMDENOMINATE;
usTellerID
识别柜员机。如果设备是自助服务CDM,参数将被忽略。
usMixNumber
混合算法或隐藏结构表被使用。
lpDenomination
指向一个WFSCDMDENOMINATION结构体,描述操作面额的上下文信息。
typedef struct _wfs_cdm_denomination
{
CHAR cCurrencyID[3]; ULONG ulAmount; USHORT usCount; LPULONG lpulValues; ULONG ulCashBox;
} WFSCDMDENOMINATION, *LPWFSCDMDENOMINATION;
输出参数:
错误代码:
Page 33
CWA 15748-5:2008
cCurrencyID
识别币种,符合ISO格式[参考二].如果面额包含多种币种,此参数将被设置为三个ASCII 0x20h的字符数组。
ulAmount
被定义或分配的总额。如果面额包含多种币种,此参数为零。 usCount
lpulValues链表的大小,此参数和最后的WFS_INF_CDM_CASH_UNIT_INFO命令所返回的usCount值相同,或者可以被WFS_CMD_CDM_SET_CASH_UNIT_INFO或WFS_CMD_CDM_END_EXCHANGE命令所设置。如果混合算法被使用,此参数不是必要的且被设置为零。
如果应用程序被设置为有效的usCount,SP将返回WFS_ERR_INVALID_DATA。
lpulValues
指向一个ULONG型数组。此链表指定从每个钞箱提取的钞币数。此链表同样与WFS_INF_CDM_CASH_UNIT_INFO命令返回的钞箱结构数组一致,或者可以被
WFS_CMD_CDM_SET_CASH_UNIT_INFO或WFS_CMD_CDM_END_EXCHANGE命令所设置。数组的第一个值与
钞箱结构索引为1的相关联。
数组包含每个可能的钞箱。如果钞箱在面额中不是必须的,数组相关的值应该被设置为零。 如果应用程序不需要特定的面额,lpulValues指针将为NULL。
ulCashBox
仅使用于柜员机CDM设备。柜员机现金盒所需支付的总额。
LPWFSCDMDENOMINATION lpDenomination; 相关描述参照输入结构。
混合币种被定义时,面额结构里的ulAmount参数将为零且cCurrency的值被设置成为三个ASCII为0x20h的字符。
除了定义在[参考一]的一般错误代码外,下列错误代码可能产生: 值
涵义
WFS_ERR_CDM_INVALIDCURRENCY 在CDM的钞箱中,无法找到cCurrency参数所对应的币种
WFS_ERR_CDM_INVALIDTELLERID 无效柜员机ID。此错误不会在自助服务CDM中产生
WFS_ERR_CDM_CASHUNITERROR 钞箱的问题。WFS_EXEE_CDM_CASHUNIT -ERROR事件被发送,描述此详细信息。 WFS_ERR_CDM_ usMixNumber参数为WFS_CDM_INDIVIDUAL并且INVALIDDENOMINATION
ulCashBox的值和lpulValues所指定的钞币与特定的非零总额不匹配。此错误代码不出现在特定总额为零的情况下。
WFS_ERR_CDM_INVALIDMIXNUMBER 未知的混合算法。
WFS_ERR_CDM_NOCURRENCYMIX 面额中被指定的钞箱不是相同币种。 WFS_ERR_CDM_NOTDISPENSABLE CDM无法分配此总额。 WFS_ERR_CDM_TOOMANYITEMS
请求了过多的被分配项。
Page 34
CWA 15748-5:2008
WFS_ERR_CDM_EXCHANGEACTIVE CDM处于激活状态中。
(参考WFS_CMD_CDM_START_EXCHANGE)
WFS_ERR_CDM_NOCASHBOXPRESENT
事件:
柜员机无法指派足够的现金盒。
WFS_ERR_CDM_AMOUNTNOTINMIXTABLE 无法在混合表中找到此特定金额。 除了定义在[参考一]的一般事件外,下列事件也可能产生: 值
WFS_EXEE_CDM_CASHUNITERROR
注释:
无。
涵义
一个错误在钞箱尝试面额事件中发生
Page 35
CWA 15748-5:2008
5.2 WFS_CMD_CDM_DISPENSE
描述: 此命令执行分配钞币给客户。此命令提供与WFS_CMD_CDM_DENOMINATE命令相同的钞币分配附加能力。如果
不同的币种钞币被分配,货币名必须是三个ASCII 0x20h的字符,总额必须是零,混合算法必须是WFS_CDM_INDIVIDUAL。然而,此约定并不被应用在单币种或非货币的情况下,例如息票。
此命令被使用于下列情况:
1. 输入参数为总额,币种和面额。混合算法为WFS_CDM_INDIVIDUAL。因此,如果确
定为有效面额,可以被分配。
2. 输入参数为总额,币种和面额。因此,总额的定义如果成功,可以被分配。
3. 如果总额为零,币种和面额被混合算法WFS_CDM_INDIVIDUAL所支持并有效,可以被分配。
4. 命令将计算特定金额的部分面额,并且完成面额的分配。因次,命令的输入参数应该有币种,总额,混
合算法和部分特定面额或现金盒最小金额中的一个。此命令完成后,现金盒金额可能改变。 当多个物理钞箱对应一个逻辑钞箱时,设备选择当前钞箱进行分配操作。
如果WFS_INF_CDM_CAPABILITIES命令所返回的WFSCDMCAPS结构体中的bCashBox参数为TRUE,假设全部面额不能被满足,那么将返回部分面额,缺少的面额由现金盒提供。
如果设备是柜员机CDM,输入的usPosition参数可以是WFS_CDM_POSNULL。在此情况,usTellerID参数将提供分配操作的柜员机分配位置。
WFSCDMDISPENSE结构体中的bPresent参数定义为分配操作中是否已经呈现给客户的部分。如果此参数为TRUE,钞币将被移动到通道中,否则钞币将会被移动到暂存。第二种情况,参数将在WFS_CMD_CDM_PRESENT命令中分配钞币给客户时被使用。如果bPresent参数为FALSE,thefwPosition参数将无效。如果CDM没有暂存,bPresent参数无效。
输入参数: LPWFSCDMDISPENSE lpDispense;
typedef struct _wfs_cdm_dispense {
USHORT usTellerID; USHORT usMixNumber; WORD fwPosition; BOOL bPresent;
LPWFSCDMDENOMINATION lpDenomination; } WFSCDMDISPENSE, *LPWFSCDMDISPENSE;
usTellerID
定义柜员机。当设备为自助服务CDM时,参数无效。
usMixNumber
混合算法和隐藏混合表被使用于建立支持总额的面额。如果参数值为WFS_CDM_
INDIVIDUAL,被lpDenomination值支持的有效面额优先进行分配操作。如果找到的是无效的,没选择的面额将会被计算。