简体   繁体   English

如何在 ATM 中使用 XFS 获取盒式磁带类型信息?

[英]How do I get the Cassette type information using XFS in an ATM?

usNumber represents the sequence number. usNumber 表示序列号。 cUnitID represents the cassette identifier, but different vendors have different formats to represent it. cUnitID 表示盒式标识符,但不同的供应商有不同的格式来表示它。 Where can I find this format?我在哪里可以找到这种格式? Is there any other place where I can get the logical cash unit identifier (Type number)有没有其他地方可以获得逻辑现金单元标识符(类型编号)

first of all, i do not know what you mean "different formats".usType defined by wosa/xfs library.首先,我不知道你的意思是“不同的格式”。由 wosa/xfs 库定义的usType。 below definition are from Xfscdm.h, and they are fixed.下面的定义来自 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)

anyway, below function can hep you to get cash unit information:无论如何,以下功能可以帮助您获取现金单元信息:

#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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM