Как получить информацию о типе кассеты с помощью XFS в банкомате?

usNumber представляет порядковый номер. cUnitID представляет идентификатор кассеты, но разные производители имеют разные форматы для его представления. Где я могу найти этот формат? Есть ли другое место, где я могу получить логический идентификатор денежной единицы (номер типа)

0 ответов

Во -первых, я не знаю, что вы имеете в виду под "разными форматами".usType определяется библиотекой wosa/xfs. нижеприведенные определения взяты из 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]);

Другие вопросы по тегам