海康设备xml透传以及DS-K1F100-D8E 设备下发卡 ,读卡

对接海康5604设备,设置温度上限及下限,设备较多通过demo手动透传不可取,故采用代码方式进行透传. (代码记录,方便后续开发找方便)

public void setThermal(Map<String, Object> params){
    Object ids = params.get("ids"); //设备id集
    if (ComnUtil.isEmpty(ids)){
        throw new ComnException(ComnStatusCode.ERROR_PARAM, "请选择设备!");
    }
    Object highestThermal = params.get("highestThermal"); //最高温度上限
    Object lowestThermal = params.get("lowestThermal"); //最低温度上限
    String[] split = ids.toString().split(",");
    for (String id : split) {
        Equipment equipment = equipmentMapper.selectById(Long.parseLong(id));
        String ip = equipment.getIp();
        String port = equipment.getPort();
        String password = equipment.getPassword();
        String brand = equipment.getBrand();
        int loginRes = HCNetSDKApiHelper.login(ip, Integer.parseInt(port), "admin", password, HCNetSDKApiHelper.DEVICE_CATCH); //登录
        HCNetSDK.NET_DVR_STRING_POINTER stringRequest = new HCNetSDK.NET_DVR_STRING_POINTER();
        stringRequest.read();
        stringRequest.byString = SEND_INFOMACTION_URL.getBytes();
        stringRequest.write();

        HCNetSDK.NET_DVR_STRING_POINTER stringInBuffer = new HCNetSDK.NET_DVR_STRING_POINTER();
        stringInBuffer.read();
        HashMap<String, Object> AcsCfg = new HashMap<>();
        HashMap<String, Object> para = new HashMap<>();
        para.put("highestThermalThreshold",Float.parseFloat(highestThermal.toString()));
        para.put("lowestThermalThreshold",Float.parseFloat(lowestThermal.toString()));
        AcsCfg.put("AcsCfg",para);
        String strInbuffer = GsonHelper.obj2Json(AcsCfg); // 请求参数json
        stringInBuffer.byString = strInbuffer.getBytes();
        stringInBuffer.write();

        HCNetSDK.NET_DVR_XML_CONFIG_INPUT struXMLInput = new HCNetSDK.NET_DVR_XML_CONFIG_INPUT();
        struXMLInput.read();
        struXMLInput.dwSize = struXMLInput.size();
        struXMLInput.lpRequestUrl = stringRequest.getPointer();
        struXMLInput.dwRequestUrlLen = stringRequest.byString.length;
        struXMLInput.lpInBuffer = stringInBuffer.getPointer();
        struXMLInput.dwInBufferSize = stringInBuffer.byString.length;
        struXMLInput.write();

        HCNetSDK.NET_DVR_STRING_POINTER stringXMLOut = new HCNetSDK.NET_DVR_STRING_POINTER();
        stringXMLOut.read();
        HCNetSDK.NET_DVR_STRING_POINTER struXMLStatus = new HCNetSDK.NET_DVR_STRING_POINTER();
        struXMLStatus.read();

        HCNetSDK.NET_DVR_XML_CONFIG_OUTPUT struXMLOutput = new HCNetSDK.NET_DVR_XML_CONFIG_OUTPUT();
        stringInBuffer.read();
        struXMLOutput.dwSize = struXMLOutput.size();
        struXMLOutput.lpOutBuffer = stringXMLOut.getPointer();
        struXMLOutput.dwOutBufferSize = stringXMLOut.size();
        struXMLOutput.lpStatusBuffer = struXMLStatus.getPointer();
        struXMLOutput.dwStatusSize = struXMLStatus.size();
        stringInBuffer.write();
        boolean setConfig = sdkInstance.NET_DVR_STDXMLConfig(loginRes, struXMLInput, struXMLOutput);
        if (!setConfig) {
            log.error(String.format("[%s]下发温度设置[%s]失败:%d", ip, strInbuffer, sdkInstance.NET_DVR_GetLastError()));
        } else {
            stringXMLOut.read();
            String strOutJson = new String(stringXMLOut.byString).trim();
            struXMLStatus.read();
            System.out.println(strOutJson);
        }
        HCNetSDKApiHelper.logout(ip);

    }
}

针对DS-K1F100-D8E 设备下发卡 ,读卡 的开发主要借鉴了别人代码,从中找到部分错误及代码不全,针对这些重新优化

package com.keyou.blzx.controller;

import com.keyou.blzx.controller.hksdk.callback.HCUsbSDK;
import com.sun.jna.NativeLong;
import com.sun.jna.Pointer;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Map;

/**
 * @author ***
 * @description 下发卡 读卡
 * @date 2021-06-18 14:59
 */
public class CardMakeController extends BaseController {
    private static final Log logger = LogFactory.getLog(CardMakeController.class);

    static HCUsbSDK hcusbsdk = HCUsbSDK.INSTANCE;
    static fDEVInfoCallBack fdeviceCallBack = null;
    static HCUsbSDK.USB_SDK_DEVICE_INFO StruDevceInfo = new HCUsbSDK.USB_SDK_DEVICE_INFO();
    static boolean bDevCallBack = false;

    public static void main(String[] args) throws UnsupportedEncodingException {
        //发卡
        //make();

        //读卡
        NativeLong login = login();
        String readKh = active(login );
        valid(login );        
        String card = read(login);
        System.out.println(card);
    }


    /**
     * 枚举设备
     * */
    public static class fDEVInfoCallBack implements HCUsbSDK.fEnumDeviceCallBack {
        public void invoke(HCUsbSDK.USB_SDK_DEVICE_INFO pDevceInfo, Pointer pUser) {
            if ((pDevceInfo.szDeviceName[0] == 'D') && (pDevceInfo.szDeviceName[1] == 'S')
                    && (pDevceInfo.szDeviceName[2] == '-') && (pDevceInfo.szDeviceName[3] == 'K')) {
                StruDevceInfo = pDevceInfo;
                String strName = new String(pDevceInfo.szDeviceName);
                logger.info("枚举到的设备信息:" + strName);
                bDevCallBack = true;
            }

        }
    }
    
    private static NativeLong login() {
        int iError = 0;

        boolean bInit = hcusbsdk.USB_SDK_Init();
        if (bInit) {
            hcusbsdk.USB_SDK_SetLogToFile(3, "C:/USBSDKLog", false);
        }

        if (fdeviceCallBack == null) {
            fdeviceCallBack = new fDEVInfoCallBack();
        }

        boolean bEnum = hcusbsdk.USB_SDK_EnumDevice(fdeviceCallBack, null);
        if (!bEnum) {
            iError = hcusbsdk.USB_SDK_GetLastError();
            logger.error("枚举获取设备失败,原因: " + iError);
            return null;
        }

        HCUsbSDK.USB_SDK_USER_LOGIN_INFO struUserLoginInfo = new HCUsbSDK.USB_SDK_USER_LOGIN_INFO();
        struUserLoginInfo.dwSize = struUserLoginInfo.size();
        struUserLoginInfo.dwTimeout = 5000;

        while (true) {
            if (bDevCallBack) {
                struUserLoginInfo.dwVID = StruDevceInfo.dwVID;
                struUserLoginInfo.dwPID = StruDevceInfo.dwPID;
                struUserLoginInfo.szUserName = "admin".getBytes();
                struUserLoginInfo.szPassword = "12345".getBytes();
                struUserLoginInfo.szSerialNumber = StruDevceInfo.szSerialNumber;
                break;
            }
        }
        struUserLoginInfo.write();
        HCUsbSDK.USB_SDK_DEVICE_REG_RES struRegRes = new HCUsbSDK.USB_SDK_DEVICE_REG_RES();
        struRegRes.dwSize = struRegRes.size();
        struRegRes.write();

        NativeLong lUserID = hcusbsdk.USB_SDK_Login(struUserLoginInfo, struRegRes);// 登录设备
        if (lUserID.intValue() == -1) {
            iError = hcusbsdk.USB_SDK_GetLastError();
            logger.error("设备登陆失败,原因: " + iError);
            hcusbsdk.USB_SDK_Logout(lUserID);
        } else {
            logger.info("登陆成功,lUserID: " + lUserID);
        }

        return lUserID;
    }

    /**
     * 激活卡
     * */
    private static String active(NativeLong lUserID) {
        int iError = 0;
        HCUsbSDK.USB_SDK_WAIT_SECOND struWaitSecond = new HCUsbSDK.USB_SDK_WAIT_SECOND();
        struWaitSecond.dwSize = struWaitSecond.size();
        struWaitSecond.byWait = 0;
        struWaitSecond.write();

        HCUsbSDK.USB_SDK_ACTIVATE_CARD_RES struActivate = new HCUsbSDK.USB_SDK_ACTIVATE_CARD_RES();
        struActivate.dwSize = struActivate.size();
        struActivate.byCardType = 1;
        struActivate.write();

        HCUsbSDK.USB_CONFIG_INPUT_INFO struInput = new HCUsbSDK.USB_CONFIG_INPUT_INFO();
        struInput.lpInBuffer = struWaitSecond.getPointer();
        struInput.dwInBufferSize = struWaitSecond.size();
        struInput.write();

        HCUsbSDK.USB_CONFIG_OUTPUT_INFO struOutput = new HCUsbSDK.USB_CONFIG_OUTPUT_INFO();
        struOutput.lpOutBuffer = struActivate.getPointer();
        struOutput.dwOutBufferSize = struActivate.size();
        struOutput.write();

        boolean bRet =
                hcusbsdk.USB_SDK_GetDeviceConfig(lUserID, HCUsbSDK.USB_SDK_GET_ACTIVATE_CARD, struInput, struOutput);
        if (!bRet) {
            iError = hcusbsdk.USB_SDK_GetLastError();
            logger.error("激活失败,原因: " + iError);
            return "";
        }
        struOutput.read();
        struActivate.read();
        String strSerial = "";
        for (int i = 0; i < struActivate.bySerialLen; i++) {
            int iSerial = struActivate.bySerial[i] & 0xff;
            strSerial = strSerial + new String(Integer.toHexString(iSerial)) + " ";
        }

        logger.info("激活成功,卡号:" + strSerial);
        return strSerial;
    }

    /**
     * (M1卡) 验证扇区密码
     * */
    private static void valid(NativeLong lUserID) {
        int iError = 0;
        HCUsbSDK.USB_SDK_M1_PWD_VERIFY struWaitSecond = new HCUsbSDK.USB_SDK_M1_PWD_VERIFY();
        struWaitSecond.dwSize = struWaitSecond.size();
        struWaitSecond.bySectionNum = hexToByte("1");
        struWaitSecond.byPasswordType = hexToByte("0");
        struWaitSecond.byPassword = hexToByteArray("FFFFFFFFFFFF");
        struWaitSecond.write();

        HCUsbSDK.USB_CONFIG_INPUT_INFO struInput = new HCUsbSDK.USB_CONFIG_INPUT_INFO();
        struInput.lpInBuffer = struWaitSecond.getPointer();
        struInput.dwInBufferSize = struWaitSecond.size();
        struInput.write();

        HCUsbSDK.USB_CONFIG_OUTPUT_INFO struOutput = new HCUsbSDK.USB_CONFIG_OUTPUT_INFO();
        struOutput.lpOutBuffer = struWaitSecond.getPointer();
        struOutput.dwOutBufferSize = struWaitSecond.size();
        struOutput.write();

        boolean bRet =
                hcusbsdk.USB_SDK_SetDeviceConfig(lUserID, HCUsbSDK.USB_SDK_SET_M1_PWD_VERIFY, struInput, struOutput);

        if (!bRet) {
            iError = hcusbsdk.USB_SDK_GetLastError();
            logger.error("设备验证失败原因: " + iError);
            return;
        }
        logger.info("验证成功");
    }

    /**
     * 写卡操作
     * @param lUserID  登录结果
     * @param cardNo 卡号
     * */
    private static void write(NativeLong lUserID, String cardNo) {
        int iError = 0;
        while (cardNo.length() < 32) {
            cardNo = "0" + cardNo;
        }
        if (cardNo.length() > 32) {
            cardNo = cardNo.substring(0, 16);
        }
        HCUsbSDK.USB_SDK_M1_BLOCK_WRITE_DATA struWaitSecond = new HCUsbSDK.USB_SDK_M1_BLOCK_WRITE_DATA();
        struWaitSecond.dwSize = struWaitSecond.size();
//        struWaitSecond.wAddr = hexToByteArray("4");
        struWaitSecond.wAddr = 4;
        struWaitSecond.byDataLen = 16;
        struWaitSecond.byData = hexToByteArray(cardNo);
        struWaitSecond.write();

        HCUsbSDK.USB_CONFIG_INPUT_INFO struInput = new HCUsbSDK.USB_CONFIG_INPUT_INFO();
        struInput.lpInBuffer = struWaitSecond.getPointer();
        struInput.dwInBufferSize = struWaitSecond.size();
        struInput.write();

        HCUsbSDK.USB_CONFIG_OUTPUT_INFO struOutput = new HCUsbSDK.USB_CONFIG_OUTPUT_INFO();
        struOutput.lpOutBuffer = struWaitSecond.getPointer();
        struOutput.dwOutBufferSize = struWaitSecond.size();
        struOutput.write();

        boolean bRet =
                hcusbsdk.USB_SDK_SetDeviceConfig(lUserID, HCUsbSDK.USB_SDK_SET_M1_WRITE_BLOCK, struInput, struOutput);
        if (!bRet) {
            iError = hcusbsdk.USB_SDK_GetLastError();
            logger.error("写卡失败,原因: " + iError);
            makeDevice(lUserID, "3", "3", "2", "3");  //写卡错误是快鸣2下,闪烁2下红灯
            return;
        }
        makeDevice(lUserID, "2", "1", "3", "2");  //写卡成功是慢鸣1下,闪烁2下蓝灯
        logger.info("写卡成功,内容为" + cardNo);
    }

    /**
     * 控制蜂鸣器及显示灯
     * @param lUserID 登录
     * @param buBeepType 蜂鸣类型 0无效,1连续,2慢鸣,3快鸣,4停止
     * @param buBeepCount 鸣叫次数, (只对慢鸣、快鸣有效,且不能为0)
     * @param byFlickerType 闪烁类型 0无效,1连续,2错误,3正确,4停止
     * @param byFlickerCount 闪烁次数(只对错误、正确有效,且不能为0)
     * */
    public static Boolean makeDevice(NativeLong lUserID, String buBeepType, String buBeepCount, String byFlickerType, String byFlickerCount){
        HCUsbSDK.USB_SDK_BEEP_AND_FLICKER fukcjer = new HCUsbSDK.USB_SDK_BEEP_AND_FLICKER();
        fukcjer.dwSize = fukcjer.size();
        fukcjer.byBeepType = hexToByte(buBeepType);
        fukcjer.byBeepCount = hexToByte(buBeepCount);
        fukcjer.byFlickerType = hexToByte(byFlickerType);
        fukcjer.byFlickerCount =  hexToByte(byFlickerCount);
        fukcjer.write();

        HCUsbSDK.USB_CONFIG_INPUT_INFO pInputInfo = new HCUsbSDK.USB_CONFIG_INPUT_INFO();
        pInputInfo.lpInBuffer = fukcjer.getPointer();
        pInputInfo.dwInBufferSize = fukcjer.size();
        pInputInfo.write();

        HCUsbSDK.USB_CONFIG_OUTPUT_INFO pOutInfo = new HCUsbSDK.USB_CONFIG_OUTPUT_INFO();
        pOutInfo.dwOutBufferSize = fukcjer.size();
        pOutInfo.write();

        Boolean bb =hcusbsdk.USB_SDK_SetDeviceConfig(lUserID, HCUsbSDK.USB_SDK_SET_BEEP_AND_FLICKER,pInputInfo,pOutInfo);
        return bb;
    }

    public static byte[] hexToByteArray(String inHex) {
        int hexlen = inHex.length();
        byte[] result;
        if (hexlen % 2 == 1) {
            // 奇数
            hexlen++;
            result = new byte[(hexlen / 2)];
            inHex = "0" + inHex;
        } else {
            // 偶数
            result = new byte[(hexlen / 2)];
        }
        int j = 0;
        for (int i = 0; i < hexlen; i += 2) {
            result[j] = hexToByte(inHex.substring(i, i + 2));
            j++;
        }
        return result;
    }
    public static byte hexToByte(String inHex) {
        return (byte)Integer.parseInt(inHex, 16);
    }

    public static String make(){
        Map<String, Object> map = new HashMap<String, Object>();
        int card = 10000;
        String cardnum = "10000";
        NativeLong lUserID = login();
        try {
            String readKh = active(lUserID);
            valid(lUserID);
            String cardNo = card+ String.valueOf(cardnum);
            write(lUserID, Long.toHexString(Long.valueOf(cardNo)));
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            //退出登录
            hcusbsdk.USB_SDK_Logout(lUserID);
        }
        return "";

    }
    private static String read(NativeLong lUserID) {
        int iError = 0;
        HCUsbSDK.USB_SDK_M1_BLOCK_ADDR struWaitSecond = new HCUsbSDK.USB_SDK_M1_BLOCK_ADDR();
        struWaitSecond.dwSize = struWaitSecond.size();
        struWaitSecond.wAddr = 4;
        struWaitSecond.write();

        HCUsbSDK.USB_SDK_M1_BLOCK_DATA struOut = new HCUsbSDK.USB_SDK_M1_BLOCK_DATA();
        struOut.dwSize = struOut.size();
        struOut.write();

        HCUsbSDK.USB_CONFIG_INPUT_INFO struInput = new HCUsbSDK.USB_CONFIG_INPUT_INFO();
        struInput.lpInBuffer = struWaitSecond.getPointer();
        struInput.dwInBufferSize = struWaitSecond.size();
        struInput.write();

        HCUsbSDK.USB_CONFIG_OUTPUT_INFO struOutput = new HCUsbSDK.USB_CONFIG_OUTPUT_INFO();
        struOutput.lpOutBuffer = struOut.getPointer();
        struOutput.dwOutBufferSize = struOut.size();
        struOutput.write();

        boolean bRet =
                hcusbsdk.USB_SDK_SetDeviceConfig(lUserID, HCUsbSDK.USB_SDK_GET_M1_READ_BLOCK, struInput, struOutput);
        if (!bRet) {
            iError = hcusbsdk.USB_SDK_GetLastError();
            logger.error("读卡失败,原因为" + iError);
            makeDevice(lUserID, "3", "3", "2", "3");
            return "";
        }
        struOutput.read();
        struOut.read();
        String strSerial = "";
        strSerial = bytes2hexStr(struOut.byData);
        makeDevice(lUserID, "2", "1", "3", "2");
        return  String.valueOf(Long.parseLong(strSerial, 16));
    }


    private static final char[] HEX_CHARS = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
    /*
     * byte[]数组转十六进制
     */
    public static String bytes2hexStr(byte[] bytes) {
        int len = bytes.length;
        if (len == 0) {
            return null;
        }
        char[] cbuf = new char[len * 2];
        for (int i = 0; i < len; i++) {
            int x = i * 2;
            cbuf[x] = HEX_CHARS[(bytes[i] >>> 4) & 0xf];
            cbuf[x + 1] = HEX_CHARS[bytes[i] & 0xf];
        }
        return new String(cbuf);
    }

}

具体HCUsbSDK如下:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.keyou.blzx.controller.hksdk.callback;

import com.sun.jna.Native;
import com.sun.jna.NativeLong;
import com.sun.jna.Pointer;
import com.sun.jna.Structure;
import com.sun.jna.win32.StdCallLibrary;

public interface HCUsbSDK extends StdCallLibrary {

    HCUsbSDK INSTANCE = (HCUsbSDK) Native.loadLibrary("F:\\hu\\hik\\demo\\lib\\dll\\HCUsbSDK\\HCUsbSDK",HCUsbSDK.class); //根据自己位置放置

    public static final int MAX_MANUFACTURE_LEN = 32;
    public static final int MAX_DEVICE_NAME_LEN = 32;
    public static final int MAX_SERIAL_NUM_LEN = 48;
    public static final int MAX_USERNAME_LEN = 32;
    public static final int MAX_PASSWORD_LEN = 16;

    public static final int USB_SDK_GET_ACTIVATE_CARD = 0x0104; //激活卡
    public static final int USB_SDK_GET_CERTIFICATE_INFO = 1000;	//获取身份证信息





    public static final int USB_SDK_SET_BEEP_AND_FLICKER = 0x0100;
    public static final int USB_SDK_SET_M1_WRITE_BLOCK = 0x0108;
    public static final int USB_SDK_SET_M1_PWD_VERIFY = 0x0106;
    public static final int USB_SDK_GET_M1_READ_BLOCK = 0x0107;

    public static class USB_SDK_DEVICE_INFO extends Structure{
	public int dwSize;   //结构体大小
	public int dwVID;   //设备VID
	public int dwPID;   //设备PID
        public byte[] szManufacturer = new byte[MAX_MANUFACTURE_LEN/*32*/];//制造商(来自描述符)
        public byte[] szDeviceName = new byte[MAX_DEVICE_NAME_LEN/*32*/];//设备名称(来自描述符)
        public byte[] szSerialNumber = new byte[MAX_SERIAL_NUM_LEN/*48*/];//设备序列号(来自描述符)
	public byte [] byRes = new byte[68];
    }

    public static class USB_SDK_USER_LOGIN_INFO extends Structure{
	public int dwSize; //结构体大小
	public int dwTimeout; //登录超时时间(单位:毫秒)
	public int dwVID;  //设备VID,枚举设备时得到
	public int dwPID;  //设备PID,枚举设备时得到
        public byte[] szUserName = new byte[MAX_USERNAME_LEN/*32*/]; //用户名
        public byte[] szPassword = new byte[MAX_PASSWORD_LEN/*16*/]; //密码
        public byte[] szSerialNumber = new byte[MAX_SERIAL_NUM_LEN/*48*/]; //设备序列号,枚举设备时得到
        public byte[] byRes = new byte[80];
    }

    public static class USB_SDK_DEVICE_REG_RES extends Structure{
	    public int dwSize;   //结构体大小
        public byte[] szDeviceName= new byte[MAX_DEVICE_NAME_LEN /*32*/]; //设备名称
        public byte[] szSerialNumber= new byte[MAX_SERIAL_NUM_LEN /*48*/]; //设备序列号
	    public int dwSoftwareVersion; //软件版本号,高16位是主版本,低16位是次版本
        public byte[] byRes = new byte[40];
    }

    public static class USB_CONFIG_INPUT_INFO extends Structure{
	    public Pointer lpCondBuffer;        //指向条件缓冲区
	    public int dwCondBufferSize;//条件缓冲区大小
	    public Pointer lpInBuffer;          //指向输出缓冲区
	    public int dwInBufferSize;   //输入缓冲区大小
        public byte[] byRes = new byte[48];
    }

    public static class USB_CONFIG_OUTPUT_INFO extends Structure{
	    public Pointer lpOutBuffer;      //指向输出缓冲区
	    public int dwOutBufferSize;  //输出缓冲区大小
        public byte[] byRes = new byte[56];
    }

    public static class USB_SDK_WAIT_SECOND extends Structure{
	    public int dwSize;   //结构体大小
        public byte byWait; // 1Byte操作等待时间(0-一直执行直到有卡响应,其他对应1S单位)
        public byte[] byRes = new byte[27];
    }

    public static class USB_SDK_ACTIVATE_CARD_RES extends Structure{
	    public int dwSize;
        public byte byCardType;// 卡类型(0-TypeA m1卡,1-TypeA cpu卡,2-TypeB,3-125kHz Id卡)
        public byte bySerialLen; //卡物理序列号字节长度
        public byte[] bySerial = new byte[10];//卡物理序列号
        public byte bySelectVerifyLen; //选择确认长度
        public byte[] bySelectVerify = new byte[3]; //选择确认(3字节)
        public byte[] byRes = new byte[12];
    }


    public static class USB_SDK_M1_BLOCK_WRITE_DATA extends Structure{
        public int dwSize;
        public short wAddr;
//        public byte[] wAddr = new byte[8];
        public byte byDataLen;
        public byte byRes1;
        public byte[] byData = new byte[16];
        public byte[] byRes = new byte[8];

    }

    public static class USB_SDK_CERTIFICATE_INFO extends Structure{
            public int dwSize;								//结构体大小
            public short wWordInfoSize;						//文字信息长度
            public short wPicInfoSize;						//相片信息长度
            public short wFingerPrintInfoSize;				//指纹信息长度
            public byte byCertificateType;				//证件类型:0-身份证,1-中国绿卡
            public byte byRes2;
  //         public byte [] byWordInfo =new byte[256];
            public USB_WORD_INFORMATION byWordInfo;	//文字信息
            public byte [] byPicInfo = new byte[1024];	//相片信息
            public byte [] byFingerPrintInfo = new byte[1024];	//指纹信息
            public byte [] byRes = new byte[40];		//
        }

    public static class USB_WORD_INFORMATION extends Structure{
            public byte[] byNmae = new byte [30]; //姓名
            public short sex;    //性别
            public int nationalCode; //民族代码
            public byte[] birthDay = new byte[16]; //出生日期
            public byte[] address = new byte[70]; //住址
            public byte[] byCertificateNumber = new byte[36]; //证件号码
            public byte[] issuingAuthority = new byte[30]; //签发机关
            public byte[] byEffectiveDate = new byte[16]; //起始有效日期
            public byte[] byIneffectiveDate = new byte[16];//截止有效日期
            public byte[] byRes = new byte[36]; //保留字节;

    }

    public static class USB_SDK_BEEP_AND_FLICKER extends Structure{
        public int dwSize;
        public byte byBeepType;
        public byte byBeepCount;
        public byte byFlickerType;
        public byte byFlickerCount;
        public byte[] byRes = new byte[24]; //保留字节;
    }

    public static class USB_SDK_M1_PWD_VERIFY extends Structure{
        public int dwSize;
        public byte byPasswordType;
        public byte bySectionNum;
        public byte[] byRes1 = new byte[2];
        public byte[] byPassword = new byte[6];
        public byte[] byRes = new byte[18];
    }

    public static class USB_SDK_M1_BLOCK_ADDR extends Structure{
        public int dwSize;
        public short wAddr;
        public byte[] byRes = new byte[26];

    }

    public static class USB_SDK_M1_BLOCK_DATA extends Structure{
        public int dwSize;
        public byte[] byData = new byte[16];
        public byte[] byRes = new byte[12];

    }


    public static interface fEnumDeviceCallBack extends StdCallCallback {
        public void invoke(USB_SDK_DEVICE_INFO pDevceInfo, Pointer pUser);
    }

    boolean  USB_SDK_Init();//USB_SDK的初始化
    boolean USB_SDK_Cleanup();//USB_SDK的反初始化
    boolean USB_SDK_SetLogToFile(int dwLogLevel, String strLogDir, boolean bAutoDel);

    int USB_SDK_GetLastError();//获取错误码
    String USB_SDK_GetErrorMsg(int dwErrorCode);//获取错误码对应的信息

    boolean USB_SDK_EnumDevice(fEnumDeviceCallBack cbEnumDeviceCallBack, Pointer pUser);//枚举USB设备

    NativeLong  USB_SDK_Login(USB_SDK_USER_LOGIN_INFO pUsbLoginInfo, USB_SDK_DEVICE_REG_RES pDevRegRes);//登录设备

    boolean USB_SDK_Logout(NativeLong lUserID);//关闭USB设备

    boolean USB_SDK_SetDeviceConfig(NativeLong lUserID, int dwCommand, USB_CONFIG_INPUT_INFO pConfigInputInfo, USB_CONFIG_OUTPUT_INFO pConfigOutputInfo);

    //激活卡:dwCommand对应为USB_SDK_GET_ACTIVATE_CARD,pInputInfo->lpInBuffer对应结构体USB_SDK_WAIT_SECOND,pOutputInfo->lpOutBuffer对应结构体USB_SDK_ACTIVATE_CARD_RES
    boolean USB_SDK_GetDeviceConfig(NativeLong lUserID, int dwCommand, USB_CONFIG_INPUT_INFO pConfigInputInfo, USB_CONFIG_OUTPUT_INFO pConfigOutputInfo);

}

 

 

具体包已上传,可参考https://download.csdn.net/download/qq_40524941/19764369?spm=1001.2014.3001.5503

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
海康DS-TCG205-E车辆识别设备是一种用于车辆识别和布防的先进设备。以下是关于如何设置布防的简要步骤: 1. 安装设备:首先,将DS-TCG205-E设备安装在合适的位置,确保能够准确识别车辆进出的区域。设备可以安装在道路侧面或柱子上,以确保最佳视野。 2. 连接网络:将设备与网络连接,可以通过以太网接口或Wi-Fi连接。确保设备能够正常连接到网络以便进行远程访问和管理。 3. 配置参数:通过设备提供的管理界面,输入相关参数来设置布防。您可以设置识别车辆的相关规则和条件,例如车牌号码、车辆颜色、车辆尺寸等。还可以设置布防区域范围和敏感度级别。 4. 布防设置:选择您希望监控的区域,并设置布防时间段。您可以通过设备的管理界面设置设备在指定时间范围内进行布防,在其他时间段则保持待机状态。 5. 报警通知:设置报警方式,例如通过电子邮件、短信或手机应用程序接收报警通知。您可以选择在检测到违规行为时接收即时报警通知,并立即采取行动。 6. 记录和存储:设备可以将所有识别的车辆信息记录下来,并按照日期和时间进行存储。您可以根据需要查看历史记录,以便了解过去的车辆活动。 总之,通过以上步骤,您可以有效设置布防以确保DS-TCG205-E车辆识别设备能够准确识别车辆、及时报警并记录车辆活动。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值