/// <summary> /// 初始化,建立与COM口的连接 /// </summary> public override void ConnectCOM() { try { if (base.isComConnected) { return; } if (m_bIs64BitOperatingSystem) { //64位系统 if (USB_SWIPER == m_nComID) { m_nEquipDesc = CQTCommonForUsb.rf_init(m_nComID, m_nBaudRate); } else { m_nEquipDesc = CQTCommon.rf_init(Convert.ToInt16(m_nComID), m_nBaudRate);//mnBaudRate改为mnbantnum } } else { //其他位系统 if (USB_SWIPER == m_nComID) { m_nEquipDesc = CQTCommonForUsb.rf_init(m_nComID, m_nBaudRate); } else { m_nEquipDesc = CQTCommon.rf_init(Convert.ToInt16(m_nComID), m_nBaudRate);//mnBaudRate改为mnbantnum } } if (m_nEquipDesc > 0) { base.isComConnected = true; CLOGException.Trace("ICCardManagementLib", "Connect ICCardReader successfully, COM ID = " + (m_nComID + 1)); CLOGException.Trace("ICCardManagementLib", "Install component(ICCardManagementLib) successfully, COM ID = " + (m_nComID + 1)); } } catch (Exception ex) { CLOGException.Trace("ICCardManagementLib.CICCardRW.ConnectCOM 异常", CBaseMethods.MyBase.GetExceptionInfo(ex)); } }
/// <summary> /// 断开COM口连接,返回值等于0成功,-1表示COM的连接没有建立。其他表示不成功。 /// </summary> /// <returns>返回值,等于0成功,-1表示COM的连接没有建立。其他表示不成功。</returns> public override void DisConnectCOM() { if (!base.isComConnected) { return; } int nback = -1; if (m_nEquipDesc >= 0) { if (m_bIs64BitOperatingSystem) { if (USB_SWIPER == m_nComID) { nback = CQTCommonForUsb.rf_exit(m_nEquipDesc); //nback = CommonForUsb.rf_halt(m_nEquipDesc); } else { nback = CQTCommon.rf_exit(m_nEquipDesc); //nback = Common.rf_halt(m_nEquipDesc); } } else { //其他位系统 if (USB_SWIPER == m_nComID) { nback = CQTCommonForUsb.rf_exit(m_nEquipDesc); //nback = CommonForUsb.rf_halt(m_nEquipDesc); } else { nback = CQTCommon.rf_exit(m_nEquipDesc); //nback = Common.rf_halt(m_nEquipDesc); } } if (0 == nback) { base.isComConnected = false; } } }
/// <summary> /// 寻卡,注意寻卡方式,0表示Idle方式;1表示all方式。返回值为0表成功 /// </summary> /// <param name="nCardType">返回寻到的卡的类型</param> /// <returns>返回值为0表成功</returns> private int RequestICCard(ref UInt16 nCardType) { int nback = -1; //int ntemp=-1; if (m_nEquipDesc >= 0) //设备初始化了 { if (m_bIs64BitOperatingSystem) { //64位系统 if (USB_SWIPER == m_nComID) { CQTCommonForUsb.rf_reset(m_nEquipDesc, 3); nback = CQTCommonForUsb.rf_request(m_nEquipDesc, m_nRequestCardMode, out nCardType); } else { CQTCommon.rf_reset(m_nEquipDesc, 3); nback = CQTCommon.rf_request(m_nEquipDesc, m_nRequestCardMode, out nCardType); } } else { //其他位系统 if (USB_SWIPER == m_nComID) { CQTCommonForUsb.rf_reset(m_nEquipDesc, 3); nback = CQTCommonForUsb.rf_request(m_nEquipDesc, m_nRequestCardMode, out nCardType); } else { CQTCommon.rf_reset(m_nEquipDesc, 3); nback = CQTCommon.rf_request(m_nEquipDesc, m_nRequestCardMode, out nCardType); } } } return(nback); }
/// <summary> /// 防冲突的情况下选卡,并选择其中停车卡。返回值为0表示成功,-1表示防冲突函数失败,否则表示选卡不成功。 /// </summary> /// <param name="nCardSequenceNum">卡号</param> /// <returns>返回值为0表示成功,-1表示防冲突函数失败,否则表示选卡不成功。</returns> private int SelectCard(ref uint nCardSequenceNum) { //int nCardSequenceNum; //byte strtemp; int nback = -1; if (m_bIs64BitOperatingSystem) { //64位系统 if (USB_SWIPER == m_nComID) { nback = CQTCommonForUsb.rf_anticoll(m_nEquipDesc, 0, out nCardSequenceNum);//查找卡片 } else { nback = CQTCommon.rf_anticoll(m_nEquipDesc, 0, out nCardSequenceNum);//查找卡片 } } else { //其他位系统 if (USB_SWIPER == m_nComID) { nback = CQTCommonForUsb.rf_anticoll(m_nEquipDesc, 0, out nCardSequenceNum);//查找卡片 } else { nback = CQTCommon.rf_anticoll(m_nEquipDesc, 0, out nCardSequenceNum);//查找卡片 } } if (nback == 0) { if (m_bIs64BitOperatingSystem) { //64位系统 if (USB_SWIPER == m_nComID) { CQTCommonForUsb.rf_beep(m_nEquipDesc, 50); } else { CQTCommon.rf_beep(m_nEquipDesc, 50); } } else { //其他位系统 if (USB_SWIPER == m_nComID) { CQTCommonForUsb.rf_beep(m_nEquipDesc, 50); } else { //CLOGException.Trace(m_nEquipDesc + "beep"); CQTCommon.rf_beep(m_nEquipDesc, 50); } } //rf_halt(m_nEquipDesc); } return(nback); }
/// <summary> /// 验证密码 /// </summary> /// <param name="nSector"></param> /// <param name="strKey"></param> /// <returns></returns> private int AuthKey(int nSector, string strKey) { int nReturn = -1; byte[] szKey1 = new byte[17]; byte[] szKey2 = new byte[7]; int i = 0; int nKeyLen = strKey.Length; if (nKeyLen != 12) { return(-1); } if (nSector < 1 || nSector > 15) { return(-1); } for (i = 0; i < nKeyLen; i++) { if (strKey[i] >= '0' && strKey[i] <= '9') { continue; } if (strKey[i] <= 'a' && strKey[i] <= 'f') { continue; } if (strKey[i] <= 'A' && strKey[i] <= 'F') { continue; } } if (i != nKeyLen) { return(-1); } szKey1 = Encoding.ASCII.GetBytes(strKey); if (m_bIs64BitOperatingSystem) { //64位系统 if (USB_SWIPER == m_nComID) { CQTCommonForUsb.a_hex(szKey1, szKey2, 12); nReturn = CQTCommonForUsb.rf_load_key(m_nEquipDesc, m_nAuthKeyMode, nSector, szKey2); if (nReturn != 0) { return(nSector); } nReturn = CQTCommonForUsb.rf_authentication(m_nEquipDesc, m_nAuthKeyMode, nSector); } else { CQTCommon.a_hex(szKey1, szKey2, 12); nReturn = CQTCommon.rf_load_key(m_nEquipDesc, m_nAuthKeyMode, nSector, szKey2); if (nReturn != 0) { return(nSector); } nReturn = CQTCommon.rf_authentication(m_nEquipDesc, m_nAuthKeyMode, nSector); } } else { //其他位系统 if (USB_SWIPER == m_nComID) { CQTCommonForUsb.a_hex(szKey1, szKey2, 12); nReturn = CQTCommonForUsb.rf_load_key(m_nEquipDesc, m_nAuthKeyMode, nSector, szKey2); if (nReturn != 0) { return(nSector); } nReturn = CQTCommonForUsb.rf_authentication(m_nEquipDesc, m_nAuthKeyMode, nSector); } else { CQTCommon.a_hex(szKey1, szKey2, 12); nReturn = CQTCommon.rf_load_key(m_nEquipDesc, m_nAuthKeyMode, nSector, szKey2); if (nReturn != 0) { return(nSector); } nReturn = CQTCommon.rf_authentication(m_nEquipDesc, m_nAuthKeyMode, nSector); } } return(nReturn); }
/// <summary> /// 从感应区内所选定卡的指定扇区(0~15)的指定数据块(0~3)读取数据(16字节或者6字节(密码)十六进制)。函数返回值,-1表示验证密码失败,0表示操作成功,其他表示读失败 /// </summary> /// <param name="nSector">指定扇区</param> /// <param name="nDBNum">指定扇区中的指定DB块</param> /// <param name="strRead">读取的数据</param> /// <returns>函数返回值,-1表示验证密码失败,0表示操作成功,其他表示读失败</returns> public override int ReadDataFromCard(Int16 nSector, Int16 nDBNum, out string strRead) { strRead = string.Empty; int i = 0; byte[] data = new byte[16]; byte[] buff = new byte[32]; for (i = 0; i < 16; i++) { data[i] = 0; } for (i = 0; i < 32; i++) { buff[i] = 0; } int nReturn = 1; int blocknum = nSector * 4 + nDBNum; if (m_bIs64BitOperatingSystem) { //64位系统 if (USB_SWIPER == m_nComID) { nReturn = CQTCommonForUsb.rf_read(m_nEquipDesc, blocknum, data); } else { nReturn = CQTCommon.rf_read(m_nEquipDesc, blocknum, data); } } else { //其他位系统 if (USB_SWIPER == m_nComID) { nReturn = CQTCommonForUsb.rf_read(m_nEquipDesc, blocknum, data); } else { nReturn = CQTCommon.rf_read(m_nEquipDesc, blocknum, data); } } if (nReturn == 0) { if (m_bIs64BitOperatingSystem) { //64位系统 if (USB_SWIPER == m_nComID) { CQTCommonForUsb.hex_a(data, buff, 16); } else { CQTCommon.hex_a(data, buff, 16); } } else { //其他位系统 if (USB_SWIPER == m_nComID) { CQTCommonForUsb.hex_a(data, buff, 16); } else { CQTCommon.hex_a(data, buff, 16); } } strRead = System.Text.Encoding.ASCII.GetString(buff); } return(nReturn); }
/// <summary> /// 向感应区内所选定卡的指定扇区(0~15)的指定数据块(0~3)写入数据(16字节或者6字节(密码)十六进制)。函数返回值,-1表示验证密码失败,0表示操作成功,其他表示读失败 /// </summary> /// <param name="nSector">指定扇区</param> /// <param name="nDBNum">指定扇区中的指定DB块</param> /// <param name="strWrite">写入的数据(16字节或6字节),十六进制数</param> /// <returns>函数返回值,-1表示验证密码失败,0表示操作成功,其他表示读失败</returns> public override int WriteDataIntoCard(Int16 nSector, Int16 nDBNum, string strWrite) { strWrite += "FF"; byte[] bBuff = new byte[32]; byte[] bWrite = new byte[16]; int nCounter = 0; for (nCounter = 0; nCounter < strWrite.Length; nCounter++) { if (strWrite[nCounter] >= '0' && strWrite[nCounter] <= '9') { continue; } if (strWrite[nCounter] <= 'a' && strWrite[nCounter] <= 'f') { continue; } if (strWrite[nCounter] <= 'A' && strWrite[nCounter] <= 'F') { continue; } } if (nCounter != strWrite.Length) { // lbResult.Text = "data is hex data!"; return(1); } bBuff = Encoding.ASCII.GetBytes(strWrite); if (m_bIs64BitOperatingSystem) { //64位系统 if (USB_SWIPER == m_nComID) { CQTCommonForUsb.a_hex(bBuff, bWrite, 32); } else { CQTCommon.a_hex(bBuff, bWrite, 32); } } else { //其他位系统 if (USB_SWIPER == m_nComID) { CQTCommonForUsb.a_hex(bBuff, bWrite, 32); } else { CQTCommon.a_hex(bBuff, bWrite, 32); } } int nBack = 1; int blocknum = nSector * 4 + nDBNum; if (m_bIs64BitOperatingSystem) { //64位系统 if (USB_SWIPER == m_nComID) { nBack = CQTCommonForUsb.rf_authentication(m_nEquipDesc, m_nAuthKeyMode, nSector); } else { nBack = CQTCommon.rf_authentication(m_nEquipDesc, m_nAuthKeyMode, nSector); } } else { //其他位系统 if (USB_SWIPER == m_nComID) { nBack = CQTCommonForUsb.rf_authentication(m_nEquipDesc, m_nAuthKeyMode, nSector); } else { nBack = CQTCommon.rf_authentication(m_nEquipDesc, m_nAuthKeyMode, nSector); } } if (nBack != 0) { return(-1); } if (m_bIs64BitOperatingSystem) { //64位系统 if (USB_SWIPER == m_nComID) { nBack = CQTCommonForUsb.rf_write(m_nEquipDesc, (short)blocknum, bWrite); CQTCommonForUsb.rf_beep(m_nEquipDesc, 50); } else { nBack = CQTCommon.rf_write(m_nEquipDesc, (short)blocknum, bWrite); CQTCommon.rf_beep(m_nEquipDesc, 50); } } else { //其他位系统 if (USB_SWIPER == m_nComID) { nBack = CQTCommonForUsb.rf_write(m_nEquipDesc, (short)blocknum, bWrite); CQTCommonForUsb.rf_beep(m_nEquipDesc, 50); } else { nBack = CQTCommon.rf_write(m_nEquipDesc, (short)blocknum, bWrite); CQTCommon.rf_beep(m_nEquipDesc, 50); } } return(nBack); }