![](/img/trans.png)
[英]how can I manage the entire device (eg dispenser) of the ATM using the XFS standard?
[英]How do I get the Cassette type information using XFS in an ATM?
usNumber 表示序列号。 cUnitID 表示盒式标识符,但不同的供应商有不同的格式来表示它。 我在哪里可以找到这种格式? 有没有其他地方可以获得逻辑现金单元标识符(类型编号)
首先,我不知道你的意思是“不同的格式”。由 wosa/xfs 库定义的usType。 下面的定义来自 Xfscdm.h,它们是固定的。
/* values of WFSCDMCASHUNIT.usType */
#define WFS_CDM_TYPENA (1)
#define WFS_CDM_TYPEREJECTCASSETTE (2)
#define WFS_CDM_TYPEBILLCASSETTE (3)
#define WFS_CDM_TYPECOINCYLINDER (4)
#define WFS_CDM_TYPECOINDISPENSER (5)
#define WFS_CDM_TYPERETRACTCASSETTE (6)
#define WFS_CDM_TYPECOUPON (7)
#define WFS_CDM_TYPEDOCUMENT (8)
#define WFS_CDM_TYPEREPCONTAINER (11)
#define WFS_CDM_TYPERECYCLING (12)
无论如何,以下功能可以帮助您获取现金单元信息:
#include "Xfsapi.h"
#include "Xfscdm.h"
HRESULT getCashUnitInfo();
HSERVICE hService;
USHORT cashUnitCount; // Number of Logical Cash Units
LPWFSCDMCASHUNIT cashUnitInfo[6];
int main()
{
if(getCashUnitInfo()==WFS_SUCCESS) {
printf("Get CashUnit Info Failed\n");
return -1;
}
printf("Get Cash Unit Info Success.\n");
return 0;
}
HRESULT getCashUnitInfo()
{
LPWFSRESULT result;
HRESULT r;
r=WFSGetInfo(hService, WFS_INF_CDM_CASH_UNIT_INFO, NULL,20000, &result );
if ( r == WFS_SUCCESS) {
LPWFSCDMCUINFO cuInfo = (LPWFSCDMCUINFO)result->lpBuffer;
cashUnitCount = cuInfo->usCount;
ZF_LOGI("m_CashUnitCount:%d",cashUnitCount);
LPWFSCDMCASHUNIT * lppList = cuInfo->lppList;
for ( int i = 0; i < cuInfo->usCount; ++i ) {
USHORT no = lppList[i]->usNumber -1;
if (cashUnitInfo[no] == NULL)
cashUnitInfo[no] = new WFSCDMCASHUNIT();
//Copy logical Cash Unit info
memcpy(cashUnitInfo[no], lppList[i], sizeof(WFSCDMCASHUNIT) );
printf("m_CashUnitInfo[%d]->bAppLock----------------->%d\n",i,cashUnitInfo[no]->bAppLock);
printf("m_CashUnitInfo[%d]->bDevLock----------------->%d\n",i,cashUnitInfo[no]->bDevLock);
printf("m_CashUnitInfo[%d]->cCurrencyID-------------->%s\n",i,cashUnitInfo[no]->cCurrencyID);
printf("m_CashUnitInfo[%d]->cUnitID------------------>%s\n",i,cashUnitInfo[no]->cUnitID);
printf("m_CashUnitInfo[%d]->lpszCashUnitName--------->%s\n",i,cashUnitInfo[no]->lpszCashUnitName);
printf("m_CashUnitInfo[%d]->ulCount------------------>%ld\n",i,cashUnitInfo[no]->ulCount);
printf("m_CashUnitInfo[%d]->ulInitialCount----------->%ld\n",i,cashUnitInfo[no]->ulInitialCount);
printf("m_CashUnitInfo[%d]->ulMaximum---------------->%ld\n",i,cashUnitInfo[no]->ulMaximum);
printf("m_CashUnitInfo[%d]->ulMinimum---------------->%ld\n",i,cashUnitInfo[no]->ulMinimum);
printf("m_CashUnitInfo[%d]->ulRejectCount------------>%ld\n",i,cashUnitInfo[no]->ulRejectCount);
printf("m_CashUnitInfo[%d]->ulValues----------------->%ld\n",i,cashUnitInfo[no]->ulValues);
printf("m_CashUnitInfo[%d]->usNumber----------------->%hu\n",i,cashUnitInfo[no]->usNumber);
printf("m_CashUnitInfo[%d]->usStatus----------------->%hu\n",i,cashUnitInfo[no]->usStatus);
printf("m_CashUnitInfo[%d]->usType------------------->%hu\n",i,cashUnitInfo[no]->usType);
printf("m_CashUnitInfo[%d]->usNumPhysicalCUs--------->%hu\n",i,cashUnitInfo[no]->usNumPhysicalCUs);
printf("--------------------------------------------------------------------------------------------------\n");
}
}
WFSFreeResult( result );
printf("RESULT:%d\n",r);
return r;
}
除了建议的答案还可以,不要忘记分配足够的内存来打印结果,例如 r = WFMAllocateMore(sizeof(WFSCDMCASHUNIT), result, (void**)&cashUnitInfo[no]);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.