| package com.doumee.core.haikang.sdk; | 
|   | 
| import com.sun.jna.Pointer; | 
|   | 
| public class HIKCSDemo { | 
|      | 
|     static HCUsbSDK hCUsbSDK = HCUsbSDK.INSTANCE; | 
|     static int iHandle = -1; | 
|      | 
|      | 
|      | 
|     public static void main(String[] args) throws InterruptedException{ | 
|         HIKCSDemo csdemo = new HIKCSDemo();         | 
|         hCUsbSDK.USB_Init(); | 
|         hCUsbSDK.USB_SetLogToFile(3, ".\\", false); | 
|         System.out.println(System.getProperty("user.dir")); | 
|         csdemo.getVersion(); //获取版本 | 
|          | 
|         csdemo.EnumDevices();    //枚举设备 | 
|         csdemo.Login(); | 
|         csdemo.ActivateCard(); | 
|   | 
|         while(true); | 
|     } | 
|      | 
|      | 
|     public void getVersion(){ | 
|         int iVersion = hCUsbSDK.USB_GetSDKVersion(); | 
|          | 
|         String v1 = Integer.toString((iVersion>>24) & 0xff); | 
|         String v2 = Integer.toString((iVersion>>16) & 0xff); | 
|         String v3 = Integer.toString((iVersion>>8) & 0xff); | 
|         String v4 = Integer.toString((iVersion) & 0xff);         | 
|         System.out.println("USB_GetSDKVersion succeed, version:" + v1 + "." + v2 + "." + v3 + "." + v4);         | 
|     } | 
|      | 
|     public void EnumDevices(){ | 
|         int iNum = hCUsbSDK.USB_GetDeviceCount(); | 
|         System.out.println("iNum:" + iNum); | 
|         if(iNum < 1){ | 
|             System.out.println("无设备接入"); | 
|             return ; | 
|         } | 
|          | 
|         //根据获取到的设备数量,申请对应大小的设备信息结构体数组 | 
|         //对结构体数组中的每个成员进行初始化 | 
|         HCUsbSDK.OUT_USB_DEVICE_INFO  struOutDevice = new HCUsbSDK.OUT_USB_DEVICE_INFO(); | 
|         struOutDevice.init(iNum); | 
|         struOutDevice.write(); | 
|   | 
|         Pointer pStruDeviceInfo = struOutDevice.getPointer(); | 
|         if(hCUsbSDK.USB_EnumDevices(iNum, pStruDeviceInfo)) | 
|         { | 
|             struOutDevice.read(); | 
|             while((--iNum) >= 0) | 
|             { | 
|                 String s1, s2, s3, s4, s5, s6; | 
|                 s1 = String.valueOf(struOutDevice.struDeviceArr[iNum].dwIndex); | 
|                 s2 = String.valueOf(struOutDevice.struDeviceArr[iNum].dwVID); | 
|                 s3 = String.valueOf(struOutDevice.struDeviceArr[iNum].dwPID); | 
|                 s4 = new String(struOutDevice.struDeviceArr[iNum].szManufacturer).trim(); | 
|                 s5 = new String(struOutDevice.struDeviceArr[iNum].szDeviceName).trim(); | 
|                 s6 = new String(struOutDevice.struDeviceArr[iNum].szSerialNumber).trim(); | 
|                 System.out.println("device:" + s1 + ",dwVID:" +s2 + ",dwPID:" + s3 + ",szManufacturer:" + s4 + ",szDeviceName:" +s5 + ",szSerialNumber:" + s6); | 
|             } | 
|             System.out.println("USB_EnumDevices succeed"); | 
|         } | 
|         else | 
|         { | 
|             System.out.println("USB_EnumDevices failed, error:" + hCUsbSDK.USB_GetLastError()); | 
|         } | 
|     } | 
|      | 
|     public void Login(){ | 
|         HCUsbSDK.USB_DEVICE_REG_RES struDeviceReg = new HCUsbSDK.USB_DEVICE_REG_RES(); | 
|         struDeviceReg.dwSize = struDeviceReg.size(); | 
|         struDeviceReg.write(); | 
|          | 
|         HCUsbSDK.USB_USER_LOGIN_INFO struUserLoginInfo = new HCUsbSDK.USB_USER_LOGIN_INFO(); | 
|         struUserLoginInfo.dwSize = struUserLoginInfo.size(); | 
|         struUserLoginInfo.dwTimeout = 5000; | 
|         struUserLoginInfo.dwDevIndex = 1;  | 
|         struUserLoginInfo.dwVID = 1155; | 
|         struUserLoginInfo.dwPID = 22352;     | 
|         System.arraycopy("813717552".getBytes(), 0, struUserLoginInfo.szSerialNumber, 0, "813717552".length()); | 
|         System.arraycopy("admin".getBytes(), 0, struUserLoginInfo.szUserName, 0, "admin".length()); | 
|         System.arraycopy("12345".getBytes(), 0, struUserLoginInfo.szPassword, 0, "12345".length()); | 
|          | 
|         struUserLoginInfo.write(); | 
|          | 
|         iHandle = hCUsbSDK.USB_Login(struUserLoginInfo, struDeviceReg); | 
|         System.out.println("iHandle:" + iHandle); | 
|         if(iHandle < 0){ | 
|             System.out.println("USB_Login failed, error:" + hCUsbSDK.USB_GetLastError()); | 
|         } | 
|         else{ | 
|             System.out.println("USB_Login succeed, lHandle:" + iHandle); | 
|         } | 
|     } | 
|      | 
|      | 
|     public void ActivateCard(){ | 
|         HCUsbSDK.USB_WAIT_SECOND StruWaitSecond = new HCUsbSDK.USB_WAIT_SECOND(); | 
|         StruWaitSecond.dwSize = StruWaitSecond.size(); | 
|         StruWaitSecond.byWait = 5; | 
|          | 
|         HCUsbSDK.USB_ACTIVATE_CARD_RES StruActivateRes = new HCUsbSDK.USB_ACTIVATE_CARD_RES(); | 
|         StruActivateRes.dwSize = StruActivateRes.size(); | 
|          | 
|         HCUsbSDK.USB_CONFIG_INPUT_INFO StruInput = new HCUsbSDK.USB_CONFIG_INPUT_INFO(); | 
|         StruInput.dwInBufferSize = StruWaitSecond.size(); | 
|         Pointer ptrwaitSecond = StruWaitSecond.getPointer(); | 
|         StruWaitSecond.write(); | 
|         StruInput.lpInBuffer = ptrwaitSecond; | 
|          | 
|         HCUsbSDK.USB_CONFIG_OUTPUT_INFO StruOutput = new HCUsbSDK.USB_CONFIG_OUTPUT_INFO(); | 
|         StruOutput.dwOutBufferSize = StruActivateRes.size(); | 
|         Pointer ptrActivateRes = StruActivateRes.getPointer(); | 
|         StruActivateRes.write(); | 
|         StruOutput.lpOutBuffer = ptrActivateRes; | 
|          | 
|         if(!hCUsbSDK.USB_GetDeviceConfig(iHandle, HCUsbSDK.USB_GET_ACTIVATE_CARD, StruInput, StruOutput)) | 
|         { | 
|             System.out.println("USB_GET_ACTIVATE_CARD failed, error:" + hCUsbSDK.USB_GetLastError()); | 
|         } | 
|         else{ | 
|             StruActivateRes.read(); | 
|             System.out.println("byCardType:" + StruActivateRes.byCardType + ",bySerialLen:" + StruActivateRes.bySerialLen); | 
|              | 
|             System.out.println("USB_GET_ACTIVATE_CARD succeed");     | 
|              | 
|             String SerialNumber = ""; | 
|             //返回的bySerial数组需要反序之后,将十六进制转换成十进制就是卡号 | 
|             for(int i = 0; i < StruActivateRes.bySerialLen; i++) | 
|             { | 
|                 String hex = Integer.toHexString(StruActivateRes.bySerial[StruActivateRes.bySerialLen-i-1] & 0xff);  | 
|                 if(hex.length() == 1) | 
|                 { | 
|                     hex += '0'; | 
|                 } | 
|                 SerialNumber += hex.toUpperCase(); | 
|             } | 
|             System.out.println("SerialNumber:0x" + SerialNumber); | 
|             System.out.println("cardNo:" + Long.parseLong(SerialNumber,  16)); | 
|              | 
|         } | 
|          | 
|     } | 
|      | 
| //class 结束     | 
| } |