/// <summary>
/// Z9讀卡器
/// </summary>
public class carderZ9
{
/// <summary>
/// 說明:初始化裝置通訊口
/// 該函數對計算機的端口進行初始化。
/// 傳回:小于等于 0 錯誤,沒有初始化成功; 大于 0 初始化成功,傳回序列槽辨別符
/// </summary>
/// <param name="Port">0、1、2表示序列槽1、2、3; 100 USB接口</param>
/// <param name="baud">傳輸速率;使用19200</param>
[DllImport("dcic32.dll")]
public static extern int IC_InitComm_Baud(int Port, int baud);
[DllImport("dcic32.dll")]
//關閉端口
public static extern short IC_ExitComm(int icdev);
/// <summary>
/// 說明:蜂鳴
/// 傳回:0 成功;非0 失敗
/// </summary>
/// <param name="icdev">通訊裝置辨別符</param>
/// <param name="intime">蜂鳴時間,值範圍0~255(機關50ms)</param>
[DllImport("dcic32.dll")]
public static extern short IC_PosBeep(int icdev, int intime);
[DllImport("dcic32.dll")]
//
public static extern short IC_Request(int icdev, int mode);
/// <summary>
/// 說明:判斷連接配接是否成功,小于0 ,連接配接不成功.0可以讀寫,1連接配接成功,但是沒插卡.
/// </summary>
/// <param name="icdev">通訊裝置辨別符</param>
[DllImport("dcic32.dll")]
public static extern short IC_Status(int icdev);
/// <summary>
/// 說明:尋卡函數,能傳回在工作區域内某張卡的序列号(相當于執行IC_Request IC_Anticoll IC_Select)
/// </summary>
/// <param name="icdev">裝置描述符</param>
/// <param name="mode">設定卡的模式,0在對卡進行操作完畢後,執行dc_halt();則該卡進入HALT模式,則必須把卡移開感應區再進來才能尋得這張卡</param>
/// <returns>
/// <param name="snr">存放找到的卡的序列号的位址</param>
/// </returns>
[DllImport("dcic32.dll")]
public static extern short IC_Card(int icdev, int mode, ref ulong snr);
/// <summary>
/// 說明:裝入密碼函數,成功則傳回 0.密碼裝入讀卡器中
/// </summary>
/// <param name="icdev">裝置描述符</param>
/// <param name="mode">驗證密碼的方法;0: 用KEYSET0和KEYA驗證; 4: 用KEYSET0和KEYB驗證</param>
/// <param name="secnr">要驗證密碼的扇區号</param>
/// <param name="nkey">密碼是16進制字元串,長度12位元組。ffffffffffff</param>
[DllImport("dcic32.dll")]
public static extern short IC_Load_Keyhex(int icdev, int mode, int secnr, string nkey);
/// <summary>
/// 說明:驗證某一扇區密碼的函數,成功則傳回 0
/// </summary>
/// <param name="icdev">裝置描述符</param>
/// <param name="mode">驗證密碼的方法;0: 用KEYSET0和KEYA驗證; 4: 用KEYSET0和KEYB驗證</param>
/// <param name="secnr">要驗證密碼的扇區号</param>
[DllImport("dcic32.dll")]
public static extern short IC_Authentication(int icdev, int mode, int secnr);
/// <summary>
/// 說明:核對密碼函數,成功則傳回 0.密碼裝入讀卡器中
/// </summary>
/// <param name="icdev">裝置描述符</param>
/// <param name="mode">驗證密碼的方法;0: 用KEYSET0和KEYA驗證; 4: 用KEYSET0和KEYB驗證</param>
/// <param name="Addr">要驗證密碼的絕對位址号碼,一般是扇區的最後一個位址塊,比如0扇區就是3,15扇區就是63等等 如果對于新的4K卡計算方式可以根據公式來計算,密碼Addr=扇區号×4+3</param>
/// <param name="nkey">密碼是16進制字元串,長度12位元組。ffffffffffff</param>
[DllImport("dcic32.dll")]
public static extern short IC_Authentication_Passaddrhex(int icdev, int mode, int Addr, string nkey);
[DllImport("dcic32.dll")]
//在固定的位置寫入固定長度的資料
public static extern short IC_Write(int icdev, int offset, int Length, string Databuffer);
/// <summary>
/// 說明:讀函數,一次必須讀一個塊,成功則傳回 0
/// </summary>
/// <param name="icdev">裝置描述符</param>
/// <param name="adr">所讀資料的位址,0 - 63</param>
/// <returns>
/// <param name="sdata">存放被讀資料的位址</param>
/// </returns>
[DllImport("dcic32.dll")]
public static extern short IC_ReadMifare_Hex(int icdev, int adr, [MarshalAs(UnmanagedType.LPStr)] StringBuilder sdata);
/// <summary>
/// 說明:寫函數,一次必須寫一個塊,成功則傳回 0
/// </summary>
/// <param name="icdev">裝置描述符</param>
/// <param name="adr">所寫資料的位址,0 - 63</param>
/// <returns>
/// <param name="sdata">要寫入的資料 32位 </param>
/// </returns>
[DllImport("dcic32.dll")]
public static extern short IC_WriteMifare_Hex(int icdev, int adr, string sdata);
/// <summary>
/// 說明:獲得使用者鍵盤密碼的輸入,該函數會一直等待使用者輸入直到逾時
/// type = 0x0, 成功取得密碼,rlen = 密碼位數(1-8之間,根據客戶輸入而定)cpass就是密碼
/// type = 0xa1,使用者取消密碼輸入,rlen =0,無data段;
/// type = 0xa2,使用者密碼輸入操作逾時,rlen =0,無data段;
/// </summary>
/// <param name="icdev">裝置描述符</param>
/// /// <param name="ctime">是使用者按鍵輸入的逾時時間,以second為機關;最大255s,最小1s</param>
/// <param name="rlen">密碼位數(1-8之間,根據客戶輸入而定)</param>
/// <param name="cpass">密碼</param>
[DllImport("dcic32.dll")]
public static extern short IC_GetInputPass(int icdev, int ctime, ref int rlen, [MarshalAs(UnmanagedType.LPStr)] StringBuilder cpass);
/// <summary>
/// 說明:按指定的類型顯示系統内置的操作提示,成功則傳回 0
/// </summary>
/// <param name="icdev">裝置描述符</param>
/// <param name="type">
/// type=0x01,:顯示“請插上卡!”
/// type=0x02,:顯示“請插下卡!”
/// type=0x03,:顯示“請刷卡!”,
/// type=0x04,:顯示“讀卡錯誤!”
/// type=0x05,:顯示“請輸入密碼!”
/// type=0x06,:顯示“密碼錯誤!”,
/// type=0x07,:顯示“操作成功!”,
/// type=0x08,:顯示“操作失敗!”,
/// type=0x09,:顯示“操作逾時!”,
/// </param>
[DllImport("dcic32.dll")]
public static extern short IC_DispLcd(int icdev, int type);
/// <summary>
/// 說明:顯示主菜單,成功則傳回 0
/// </summary>
/// <param name="icdev">裝置描述符</param>
[DllImport("dcic32.dll")]
public static extern short IC_DispMainMenu(int icdev);
/// <summary>
/// 說明:顯示資訊,成功則傳回 0
/// </summary>
/// <param name="icdev">裝置描述符</param>
/// <param name="line">行号 範圍為0~1</param>
/// <param name="offset">偏移 範圍為0~7</param>
/// <param name="data">以空标志結束的字元串,'字'長度+偏移不能超過8,即每行最多可能顯示8個'字'</param>
[DllImport("dcic32.dll")]
public static extern short IC_DispInfo(int icdev, int line, int offset, string data);
/// <summary>
/// 說明:清除LCD螢幕,成功則傳回 0
/// </summary>
/// <param name="icdev">裝置描述符</param>
/// <param name="cLine">0表示清第一行,1表示清第二行,2表示兩行全清</param>
[DllImport("dcic32.dll")]
public static extern short IC_LcdClrScrn(int icdev, int cLine);
}
/// <summary>
/// HCE-201讀卡器 4442晶片
/// <para>調用Mwic_32.dll</para>
/// </summary>
/// <summary>
/// D3讀卡器
/// </summary>
public class carderD3
{
/// <summary>
/// 說明:初始化裝置通訊口
/// 該函數對計算機的端口進行初始化。
/// 傳回:小于等于 0 錯誤,沒有初始化成功; 大于 0 初始化成功,傳回序列槽辨別符
/// </summary>
/// <param name="Port">0、1、2表示序列槽1、2、3; 100 USB接口</param>
/// <param name="baud">傳輸速率;使用19200</param>
[DllImport("dcrf32.dll")]
public static extern int dc_init(int Port, int baud);
[DllImport("dcrf32.dll")]
//關閉端口
public static extern short dc_exit(int icdev);
/// <summary>
/// 說明:蜂鳴
/// 傳回:0 成功;非0 失敗
/// </summary>
/// <param name="icdev">通訊裝置辨別符</param>
/// <param name="intime">蜂鳴時間,值範圍0~255(機關50ms)</param>
[DllImport("dcrf32.dll")]
public static extern short dc_beep(int icdev, int intime);
[DllImport("dcrf32.dll")]
//
public static extern short dc_request(int icdev, int mode);
/ <summary>
/ 說明:判斷連接配接是否成功,小于0 ,連接配接不成功.0可以讀寫,1連接配接成功,但是沒插卡.
/ </summary>
/ <param name="icdev">通訊裝置辨別符</param>
//[DllImport("dcrf32.dll")]
//public static extern short IC_Status(int icdev);
/// <summary>
/// 說明:尋卡函數,能傳回在工作區域内某張卡的序列号(相當于執行IC_Request IC_Anticoll IC_Select)
/// </summary>
/// <param name="icdev">裝置描述符</param>
/// <param name="mode">設定卡的模式,0在對卡進行操作完畢後,執行dc_halt();則該卡進入HALT模式,則必須把卡移開感應區再進來才能尋得這張卡</param>
/// <returns>
/// <param name="snr">存放找到的卡的序列号的位址</param>
/// </returns>
[DllImport("dcrf32.dll")]
public static extern short dc_card(int icdev, int mode, ref ulong snr);
/// <summary>
/// 說明:裝入密碼函數,成功則傳回 0.密碼裝入讀卡器中
/// </summary>
/// <param name="icdev">裝置描述符</param>
/// <param name="mode">驗證密碼的方法;0: 用KEYSET0和KEYA驗證; 4: 用KEYSET0和KEYB驗證</param>
/// <param name="secnr">要驗證密碼的扇區号</param>
/// <param name="nkey">密碼是16進制字元串,長度12位元組。ffffffffffff</param>
[DllImport("dcrf32.dll")]
public static extern short dc_load_key(int icdev, int mode, int secnr, string nkey);
/// <summary>
/// 說明:驗證某一扇區密碼的函數,成功則傳回 0
/// </summary>
/// <param name="icdev">裝置描述符</param>
/// <param name="mode">驗證密碼的方法;0: 用KEYSET0和KEYA驗證; 4: 用KEYSET0和KEYB驗證</param>
/// <param name="secnr">要驗證密碼的扇區号</param>
[DllImport("dcrf32.dll")]
public static extern short dc_authentication(int icdev, int mode, int secnr);
/// <summary>
/// 說明:核對密碼函數,成功則傳回 0.密碼裝入讀卡器中
/// </summary>
/// <param name="icdev">裝置描述符</param>
/// <param name="mode">驗證密碼的方法;0: 用KEYSET0和KEYA驗證; 4: 用KEYSET0和KEYB驗證</param>
/// <param name="Addr">要驗證密碼的絕對位址号碼,一般是扇區的最後一個位址塊,比如0扇區就是3,15扇區就是63等等 如果對于新的4K卡計算方式可以根據公式來計算,密碼Addr=扇區号×4+3</param>
/// <param name="nkey">密碼是16進制字元串,長度12位元組。ffffffffffff</param>
[DllImport("dcrf32.dll")]
public static extern short dc_authentication_passaddr_hex(int icdev, int mode, int Addr, string nkey);
[DllImport("dcrf32.dll")]
//在固定的位置寫入固定長度的資料
public static extern short dc_write(int icdev, int offset, int Length, string Databuffer);
/// <summary>
/// 說明:讀函數,一次必須讀一個塊,成功則傳回 0
/// </summary>
/// <param name="icdev">裝置描述符</param>
/// <param name="adr">所讀資料的位址,0 - 63</param>
/// <returns>
/// <param name="sdata">存放被讀資料的位址</param>
/// </returns>
[DllImport("dcrf32.dll")]
public static extern short dc_read_hex(int icdev, int adr, [MarshalAs(UnmanagedType.LPStr)] StringBuilder sdata);
/// <summary>
/// 說明:寫函數,一次必須寫一個塊,成功則傳回 0
/// </summary>
/// <param name="icdev">裝置描述符</param>
/// <param name="adr">所寫資料的位址,0 - 63</param>
/// <returns>
/// <param name="sdata">要寫入的資料 32位 </param>
/// </returns>
[DllImport("dcrf32.dll")]
public static extern short dc_write_hex(int icdev, int adr, string sdata);
}