gpt4 book ai didi

c++ - 如何在 C++ 中同时连接 2 个 RFID 阅读器?

转载 作者:行者123 更新时间:2023-11-28 06:43:54 25 4
gpt4 key购买 nike

<分区>

我有 2 个 RFID 阅读器。

  • 读取器 1:port=com4baud=9600
  • 读取器 2:port=com9baud=9600

我想同时连接 2 个 RFID 阅读器。然而,即使我在我的代码中实例化了这两个阅读器,我也只能设法访问这两个阅读器中的一个。

我做了以下事情:

  1. MifareOne.CPP

    MifareOne::MifareOne()
    {
    LoadDll();
    }

    MifareOne::~MifareOne()
    {
    CloseComm();
    CloseDll();
    }

    bool IsLoadDLL = false;
    bool MifareOne::LoadDll()
    {
    if (IsLoadDLL)
    return true;

    // TODO: Add extra initialization here
    TCHAR szBuf[MAX_PATH];
    GetModuleFileName(NULL, (LPTSTR)szBuf, MAX_PATH);

    sprintf(szBuf, "../../../CardReader\\MasterRD.dll");
    m_hInstMaster = LoadLibrary(_T(szBuf));


    if (m_hInstMaster)
    {
    IsLoadDLL = true;
    (FARPROC&)lib_ver = GetProcAddress(m_hInstMaster, _T("lib_ver"));
    (FARPROC&)des_encrypt = GetProcAddress(m_hInstMaster, _T("des_encrypt"));
    (FARPROC&)des_decrypt = GetProcAddress(m_hInstMaster, _T("des_decrypt"));
    (FARPROC&)rf_init_com = GetProcAddress(m_hInstMaster, _T("rf_init_com"));
    (FARPROC&)rf_init_device_number = GetProcAddress(m_hInstMaster, _T("rf_init_device_number"));
    (FARPROC&)rf_get_device_number = GetProcAddress(m_hInstMaster, _T("rf_get_device_number"));
    (FARPROC&)rf_get_model = GetProcAddress(m_hInstMaster, _T("rf_get_model"));
    (FARPROC&)rf_get_snr = GetProcAddress(m_hInstMaster, _T("rf_get_snr"));
    (FARPROC&)rf_beep = GetProcAddress(m_hInstMaster, _T("rf_beep"));
    (FARPROC&)rf_init_sam = GetProcAddress(m_hInstMaster, _T("rf_init_sam"));
    (FARPROC&)rf_sam_rst = GetProcAddress(m_hInstMaster, _T("rf_sam_rst"));
    (FARPROC&)rf_sam_cos = GetProcAddress(m_hInstMaster, _T("rf_sam_cos"));
    (FARPROC&)rf_init_type = GetProcAddress(m_hInstMaster, _T("rf_init_type"));
    (FARPROC&)rf_antenna_sta = GetProcAddress(m_hInstMaster, _T("rf_antenna_sta"));
    (FARPROC&)rf_request = GetProcAddress(m_hInstMaster, _T("rf_request"));
    (FARPROC&)rf_anticoll = GetProcAddress(m_hInstMaster, _T("rf_anticoll"));
    (FARPROC&)rf_select = GetProcAddress(m_hInstMaster, _T("rf_select"));
    (FARPROC&)rf_halt = GetProcAddress(m_hInstMaster, _T("rf_halt"));
    (FARPROC&)rf_download_key = GetProcAddress(m_hInstMaster, _T("rf_download_key"));
    (FARPROC&)rf_M1_authentication1 = GetProcAddress(m_hInstMaster, _T("rf_M1_authentication1"));
    (FARPROC&)rf_M1_authentication2 = GetProcAddress(m_hInstMaster, _T("rf_M1_authentication2"));
    (FARPROC&)rf_M1_read = GetProcAddress(m_hInstMaster, _T("rf_M1_read"));
    (FARPROC&)rf_M1_write = GetProcAddress(m_hInstMaster, _T("rf_M1_write"));
    (FARPROC&)rf_M1_initval = GetProcAddress(m_hInstMaster, _T("rf_M1_initval"));
    (FARPROC&)rf_M1_readval = GetProcAddress(m_hInstMaster, _T("rf_M1_readval"));
    (FARPROC&)rf_M1_decrement = GetProcAddress(m_hInstMaster, _T("rf_M1_decrement"));
    (FARPROC&)rf_M1_increment = GetProcAddress(m_hInstMaster, _T("rf_M1_increment"));
    (FARPROC&)rf_M1_restore = GetProcAddress(m_hInstMaster, _T("rf_M1_restore"));
    (FARPROC&)rf_M1_transfer = GetProcAddress(m_hInstMaster, _T("rf_M1_transfer"));
    (FARPROC&)rf_typea_rst = GetProcAddress(m_hInstMaster, _T("rf_typea_rst"));
    (FARPROC&)rf_cos_command = GetProcAddress(m_hInstMaster, _T("rf_cos_command"));
    (FARPROC&)rf_atqb = GetProcAddress(m_hInstMaster, _T("rf_atqb"));
    (FARPROC&)rf_attrib = GetProcAddress(m_hInstMaster, _T("rf_attrib"));
    (FARPROC&)rf_typeb_cos = GetProcAddress(m_hInstMaster, _T("rf_typeb_cos"));
    (FARPROC&)rf_hltb = GetProcAddress(m_hInstMaster, _T("rf_hltb"));
    (FARPROC&)rf_at020_check = GetProcAddress(m_hInstMaster, _T("rf_at020_check"));
    (FARPROC&)rf_at020_read = GetProcAddress(m_hInstMaster, _T("rf_at020_read"));
    (FARPROC&)rf_at020_write = GetProcAddress(m_hInstMaster, _T("rf_at020_write"));
    (FARPROC&)rf_at020_lock = GetProcAddress(m_hInstMaster, _T("rf_at020_lock"));
    (FARPROC&)rf_at020_count = GetProcAddress(m_hInstMaster, _T("rf_at020_count"));
    (FARPROC&)rf_at020_deselect = GetProcAddress(m_hInstMaster, _T("rf_at020_deselect"));
    (FARPROC&)rf_light = GetProcAddress(m_hInstMaster, _T("rf_light"));
    (FARPROC&)rf_ClosePort = GetProcAddress(m_hInstMaster, _T("rf_ClosePort"));
    (FARPROC&)rf_GetErrorMessage = GetProcAddress(m_hInstMaster, _T("rf_GetErrorMessage"));

    if (NULL == lib_ver ||
    NULL == des_encrypt ||
    NULL == des_decrypt ||
    NULL == rf_init_com ||
    NULL == rf_init_device_number ||
    NULL == rf_get_device_number ||
    NULL == rf_get_model ||
    NULL == rf_beep ||
    NULL == rf_init_sam ||
    NULL == rf_sam_rst ||
    NULL == rf_sam_cos ||
    NULL == rf_init_type ||
    NULL == rf_antenna_sta ||
    NULL == rf_request ||
    NULL == rf_anticoll ||
    NULL == rf_select ||
    NULL == rf_halt ||
    NULL == rf_download_key ||
    NULL == rf_M1_authentication1 ||
    NULL == rf_M1_authentication2 ||
    NULL == rf_M1_read ||
    NULL == rf_M1_write ||
    NULL == rf_M1_initval ||
    NULL == rf_M1_readval ||
    NULL == rf_M1_decrement ||
    NULL == rf_M1_increment ||
    NULL == rf_M1_restore ||
    NULL == rf_M1_transfer ||
    NULL == rf_typea_rst ||
    NULL == rf_cos_command ||
    NULL == rf_atqb ||
    NULL == rf_attrib ||
    NULL == rf_typeb_cos ||
    NULL == rf_hltb ||
    NULL == rf_at020_check ||
    NULL == rf_at020_read ||
    NULL == rf_at020_write ||
    NULL == rf_at020_lock ||
    NULL == rf_at020_count ||
    NULL == rf_at020_deselect ||
    NULL == rf_light ||
    NULL == rf_ClosePort ||
    NULL == rf_GetErrorMessage)
    {
    return false;
    }
    }
    else
    {
    int err = GetLastError();
    return false;
    }

    return true;
    }

    bool MifareOne::CloseDll()
    {
    if(m_hInstMaster)
    {
    FreeLibrary(m_hInstMaster);
    lib_ver = NULL;
    des_encrypt = NULL;
    des_decrypt = NULL;
    rf_init_com = NULL;
    rf_init_device_number = NULL;
    rf_get_device_number = NULL;
    rf_get_model = NULL;
    rf_beep = NULL;
    rf_init_sam = NULL;
    rf_sam_rst = NULL;
    rf_sam_cos = NULL;
    rf_init_type = NULL;
    rf_antenna_sta = NULL;
    rf_request = NULL;
    rf_anticoll = NULL;
    rf_select = NULL;
    rf_halt = NULL;
    rf_download_key = NULL;
    rf_M1_authentication1 = NULL;
    rf_M1_authentication2 = NULL;
    rf_M1_read = NULL;
    rf_M1_write = NULL;
    rf_M1_initval = NULL;
    rf_M1_readval = NULL;
    rf_M1_decrement = NULL;
    rf_M1_increment = NULL;
    rf_M1_restore = NULL;
    rf_M1_transfer = NULL;
    rf_typea_rst = NULL;
    rf_cos_command = NULL;
    rf_atqb = NULL;
    rf_attrib = NULL;
    rf_typeb_cos = NULL;
    rf_hltb = NULL;
    rf_at020_check = NULL;
    rf_at020_read = NULL;
    rf_at020_write = NULL;
    rf_at020_lock = NULL;
    rf_at020_count = NULL;
    rf_at020_deselect = NULL;
    rf_light = NULL;
    rf_ClosePort = NULL;
    rf_GetErrorMessage = NULL;
    m_hInstMaster = NULL;
    return true;
    }
    return false;
    }

    bool MifareOne::OpenComm(int com, int baud)
    {
    //save port and baud
    mCommPort = com;
    mBandRate = baud;

    //open port
    int state = 1;
    state = rf_init_com(com, baud);

    if (state != LIB_SUCCESS){
    rf_ClosePort();
    return false;
    }

    return true; // return TRUE unless you set the focus to a control
    }

    bool IsCloseComm = false;
    void MifareOne::CloseComm()
    {
    if (IsCloseComm)
    return;

    rf_ClosePort();
    IsCloseComm = true;
    }

    int MifareOne::Write(unsigned char* strData)
    {
    WORD icdev = 0x0000;
    unsigned char mode = 0x60; // key A
    unsigned char secnr = '\x1';
    int state;
    unsigned char strKey[] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0 };
    int nSel = 1;

    state = rf_M1_authentication2(icdev, mode, (secnr / 4) * 4, strKey);
    if (state){
    return -1;
    }

    unsigned char strEncryptData[MAX_RF_BUFFER];
    state = Encrypt(strEncryptData, strData, (unsigned char*)Encrypt_Key);
    if (state){
    return -1;
    }

    state = rf_M1_write(icdev, secnr, strEncryptData);
    if (state){
    return -1;
    }

    return 1;
    }
  2. 主要.CPP

    int main(int argc, const char* argv[])
    {
    MifareOne cardReader1;
    MifareOne cardReader2;

    cardReader1.OpenComm(4, 9600);
    cardReader2.OpenComm(9, 9600);

    cardReader1.Write((unsigned char*) "testing"); // Not work
    cardReader2.Request((unsigned char*) "testing"); // Work fine
    }

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com