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

/*
 * HCNetSDK.java
 *
 * Created on 2009-9-14, 19:31:34
 */

/**
 * @author Xubinfeng
 */

package com.sincere.haikang.libutils;

import com.sun.jna.Native;
import com.sun.jna.NativeLong;
import com.sun.jna.Pointer;
import com.sun.jna.Structure;
import com.sun.jna.Union;
import com.sun.jna.examples.win32.GDI32.RECT;
import com.sun.jna.examples.win32.W32API;
import com.sun.jna.examples.win32.W32API.HWND;
import com.sun.jna.ptr.ByteByReference;
import com.sun.jna.win32.StdCallLibrary;
import com.sun.jna.ptr.IntByReference;
import com.sun.jna.ptr.NativeLongByReference;
import com.sun.jna.ptr.ShortByReference;

//SDK接口说明,HCNetSDK.dll

//windows gdi接口,gdi32.dll in system32 folder, 在设置遮挡区域,移动侦测区域等情况下使用
public interface HCEHomeCMS extends StdCallLibrary {

    HCEHomeCMS INSTANCE = (HCEHomeCMS) Native.loadLibrary("C:\\lib\\HCEHomeCMS",
            HCEHomeCMS.class);
    /***宏定义***/
    //常量

    public static final int MAX_NAMELEN = 16;    //DVR本地登陆名
    public static final int MAX_RIGHT = 32;    //设备支持的权限(1-12表示本地权限,13-32表示远程权限)
    public static final int NAME_LEN = 32;    //用户名长度
    public static final int PASSWD_LEN = 16;    //密码长度
    public static final int MAX_DEVICE_ID_LEN = 256;    //设备ID长度
    public static final int NET_EHOME_SERIAL_LEN = 12;  //设备序列号长度

    public static class NET_EHOME_DEV_REG_INFO extends Structure {
        public int dwSize;
        public int dwNetUnitType;            //根据EHomeSDK协议预留,目前没有意义
        public byte[] byDeviceID = new byte[MAX_DEVICE_ID_LEN]; //设备ID
        public byte[] byFirmwareVersion = new byte[24];    //固件版本
        public NET_EHOME_IPADDRESS struDevAdd;         //设备注册上来是,设备的本地地址
        public int dwDevType;                  //设备类型
        public int dwManufacture;              //设备厂家代码
        public byte[] byPassWord = new byte[32];             //设备登陆CMS的密码,由用户自行根据需求进行验证
        public byte[] sDeviceSerial = new byte[NET_EHOME_SERIAL_LEN/*12*/];    //设备序列号,数字序列号
        public byte[] byRes = new byte[52];
    }

    public static class NET_EHOME_SERVER_INFO extends Structure {
        public int dwSize;
        public int dwKeepAliveSec;
        public int dwTimeOutCount;
        public NET_EHOME_IPADDRESS struTCPAlarmSever = new NET_EHOME_IPADDRESS();
        public NET_EHOME_IPADDRESS struUDPAlarmSever = new NET_EHOME_IPADDRESS();
        public int dwAlarmServerType;
        public NET_EHOME_IPADDRESS struNTPSever = new NET_EHOME_IPADDRESS();
        public int dwNTPInterval;
        public NET_EHOME_IPADDRESS struPictureSever = new NET_EHOME_IPADDRESS();
        public int dwPicServerType;
        public NET_EHOME_BLACKLIST_SEVER struBlackListServer = new NET_EHOME_BLACKLIST_SEVER();
        public byte[] byRes = new byte[128];
    }

    public static class NET_EHOME_BLACKLIST_SEVER extends Structure {
        public NET_EHOME_IPADDRESS struAdd = new NET_EHOME_IPADDRESS();
        public byte[] byServerName = new byte[32];
        public byte[] byUserName = new byte[32];
        public byte[] byPassWord = new byte[32];
        public byte[] byRes = new byte[64];
    }

    public static class NET_EHOME_LOCAL_ACCESS_SECURITY extends Structure {
        public int dwSize;
        public byte byAccessSecurity;
        public byte[] byRes = new byte[127];
    }

    public static class NET_EHOME_AMS_ADDRESS extends Structure {
        public int dwSize;
        public byte byEnable;
        public byte[] byRes1 = new byte[3];
        public NET_EHOME_IPADDRESS struAddress = new NET_EHOME_IPADDRESS();
        public byte[] byRes2 = new byte[32];
    }

    public static class NET_EHOME_IPADDRESS extends Structure {
        public byte[] szIP = new byte[128];
        public short wPort;     //端口
        public byte[] byRes = new byte[2];
    }

    public static interface DEVICE_REGISTER_CB extends StdCallCallback {
        public boolean invoke(NativeLong lUserID, int dwDataType, Pointer pOutBuffer, int dwOutLen, NET_EHOME_SERVER_INFO pInBuffer, int dwInLen, Pointer pUser);
    }

    public static class NET_EHOME_CMS_LISTEN_PARAM extends Structure {
        public NET_EHOME_IPADDRESS struAddress;  //本地监听信息,IP为0.0.0.0的情况下,默认为本地地址,多个网卡的情况下,默认为从操作系统获取到的第一个
        public DEVICE_REGISTER_CB fnCB; //报警信息回调函数
        public Pointer pUserData;   //用户数据
        public byte[] byRes = new byte[32];
    }

    public static interface fVoiceDataCallBack extends StdCallCallback {
        public void invoke(NativeLong iVoiceHandle, byte[] pRecvDataBuffer, int dwBufSize, int dwEncodeType, byte byAudioFlag, Pointer pUser);
    }

    public static class NET_EHOME_VOICETALK_PARA extends Structure {
        public boolean bNeedCBNoEncData; //需要回调的语音类型:0-编码后语音,1-编码前语音(语音转发时不支持)
        public fVoiceDataCallBack cbVoiceDataCallBack; //用于回调音频数据的回调函数
        public int dwEncodeType;    //SDK赋值,SDK的语音编码类型,0- OggVorbis,1-G711U,2-G711A,3-G726,4-AAC,5-MP2L2,6-PCM
        public Pointer pUser;    //用户参数
        public byte byVoiceTalk;    //0-语音对讲,1-语音转发
        public byte byDevAudioEnc;  //输出参数,设备的音频编码方式 0- OggVorbis,1-G711U,2-G711A,3-G726,4-AAC,5-MP2L2,6-PCM
        public byte[] byRes = new byte[62];//Reserved, set as 0. 0
    }

    //预览请求
    public static class NET_EHOME_PREVIEWINFO_IN extends Structure {
        public int iChannel;                        //通道号
        public int dwStreamType;                    // 码流类型,0-主码流,1-子码流, 2-第三码流
        public int dwLinkMode;                        // 0:TCP方式,1:UDP方式,2: HRUDP方式
        public NET_EHOME_IPADDRESS struStreamSever;     //流媒体地址
    }

    public static class NET_EHOME_PREVIEWINFO_IN_V11 extends Structure {
        public int iChannel;
        public int dwStreamType;
        public int dwLinkMode;
        public NET_EHOME_IPADDRESS struStreamSever;
        public byte byDelayPreview;
        public byte[] byRes = new byte[31];
    }

    public static class NET_EHOME_PREVIEWINFO_OUT extends Structure {
        public NativeLong lSessionID;
        public byte[] byRes = new byte[128];
    }

    public static class NET_EHOME_PUSHSTREAM_IN extends Structure {
        public int dwSize;
        public NativeLong lSessionID;
        public byte[] byRes = new byte[128];
    }


    public static class NET_EHOME_PUSHSTREAM_OUT extends Structure {
        public int dwSize;
        public byte[] byRes = new byte[128];
    }


    public static class NET_EHOME_PTXML_PARAM extends Structure {
        public Pointer pRequestUrl;        //请求URL
        public int dwRequestUrlLen;    //请求URL长度
        public Pointer pCondBuffer;        //条件缓冲区(XML格式数据)
        public int dwCondSize;         //条件缓冲区大小
        public Pointer pInBuffer;          //输入缓冲区(XML格式数据)
        public int dwInSize;           //输入缓冲区大小
        public Pointer pOutBuffer;         //输出缓冲区(XML格式数据)
        public int dwOutSize;          //输出缓冲区大小
        public int dwReturnedXMLLen;   //实际从设备接收到的XML数据的长度
        public byte[] byRes = new byte[32];          //保留
    }


    public static class NET_EHOME_XML_CFG extends Structure {
        public Pointer pCmdBuf;    //字符串格式命令,参见1.2.3
        public int dwCmdLen;   //pCmdBuf长度
        public Pointer pInBuf;     //输入数据,远程配置报文公用定义
        public int dwInSize;   //输入数据长度
        public Pointer pOutBuf;    //输出缓冲<ConfigXML>
        public int dwOutSize;  //输出缓冲区长度
        public int dwSendTimeOut;  //数据发送超时时间,单位ms,默认5s
        public int dwRecvTimeOut;  //数据接收超时时间,单位ms,默认5s
        public Pointer pStatusBuf;     //返回的状态参数(XML格式),如果不需要,可以置NULL
        public int dwStatusSize;   //状态缓冲区大小(内存大小)
        public byte[] byRes = new byte[24];
    }

    public static class NET_EHOME_XML_REMOTE_CTRL_PARAM extends Structure {
        public int dwSize;
        public Pointer lpInbuffer;
        public int dwInBufferSize;
        public int dwSendTimeOut;
        public int dwRecvTimeOut;
        public Pointer lpOutBuffer;     //输出缓冲区
        public int dwOutBufferSize;  //输出缓冲区大小
        public Pointer lpStatusBuffer;   //状态缓冲区,若不需要可置为NULL
        public int dwStatusBufferSize;  //状态缓冲区大小
        public byte[] byRes = new byte[16];
    }

    ;


    public static class NET_DVR_STRING_POINTER extends Structure {
        public byte[] byString = new byte[2 * 1024];
    }

    public static class NET_EHOME_CONFIG extends Structure {
        public Pointer pCondBuf;
        public int dwCondSize;
        public Pointer pInBuf;
        public int dwInSize;
        public Pointer pOutBuf;
        public int dwOutSize;
        public byte[] byRes = new byte[40];
    }

    public static class NET_EHOME_DEVICE_INFO extends Structure {
        public int dwSize;
        public int dwChannelNumber;
        public int dwChannelAmount;
        public int dwDevType;
        public int dwDiskNumber;
        public byte[] sSerialNumber = new byte[128];
        public int dwAlarmInPortNum;
        public int dwAlarmInAmount;
        public int dwAlarmOutPortNum;
        public int dwAlarmOutAmount;
        public int dwStartChannel;
        public int dwAudioChanNum;
        public int dwMaxDigitChannelNum;
        public int dwAudioEncType;
        public byte[] sSIMCardSN = new byte[128];
        public byte[] sSIMCardPhoneNum = new byte[32];
        public int dwSupportZeroChan;
        public int dwStartZeroChan;
        public int dwSmartType;
        public byte[] byRes = new byte[160];
    }

    ;

    public static class NET_EHOME_REC_FILE_COND extends Structure {
        public int dwChannel; //通道号
        public int dwRecType;//录像类型:0xff-全部类型,0-定时录像,1-移动报警,2-报警触发,3-报警|动测,4-报警&动测,5-命令触发,6-手动录像,7-震动报警,8-环境报警,9-智能报警(或者取证录像),10(0x0a)-PIR报警,11(0x0b)-无线报警,12(0x0c)-呼救报警,13(0x0d)-全部报警 
        public NET_EHOME_TIME struStartTime = new NET_EHOME_TIME();//开始时间
        public NET_EHOME_TIME struStopTime = new NET_EHOME_TIME();//结束时间
        public int dwStartIndex;//查询起始位置,从0开始 
        public int dwMaxFileCountPer;//单次搜索最大文件个数,最大文件个数,需要确定实际网络环境,建议最大个数为8 
        public byte[] byRes = new byte[64];
    }

    ;

    public static class NET_EHOME_REC_FILE extends Structure {
        public int dwSize;
        public byte[] sFileName = new byte[100];
        public NET_EHOME_TIME struStartTime = new NET_EHOME_TIME();
        public NET_EHOME_TIME struStopTime = new NET_EHOME_TIME();
        public int dwFileSize;
        public int dwFileMainType;
        public int dwFileSubType;
        public int dwFileIndex;
        public byte[] byRes = new byte[128];
    }

    ;

    public static class NET_EHOME_TIME extends Structure {
        public short wYear;//年
        public byte byMonth;//月
        public byte byDay;//日 
        public byte byHour;//时
        public byte byMinute;//分
        public byte bySecond;//秒 
        public byte byRes1;//保留
        public short wMSecond;//毫秒 
        public byte[] byRes2 = new byte[2];
    }

    //初始化,反初始化
    boolean NET_ECMS_Init();

    boolean NET_ECMS_Fini();

    //获取错误码
    int NET_ECMS_GetLastError();

    //获取版本号
    int NET_ECMS_GetBuildVersion();

    boolean NET_ECMS_SetSDKLocalCfg(int enumType, Pointer lpInBuff);

    boolean NET_ECMS_GetSDKLocalCfg(int enumType, Pointer lpOutBuff);

    //开启关闭监听
    NativeLong NET_ECMS_StartListen(NET_EHOME_CMS_LISTEN_PARAM lpCMSListenPara);

    boolean NET_ECMS_StopListen(NativeLong iHandle);

    boolean NET_ECMS_GetDevConfig(NativeLong lUserID, int dwCommand, NET_EHOME_CONFIG lpConfig, int dwConfigSize);

    //注销设备
    boolean NET_ECMS_ForceLogout(NativeLong lUserID)
    ;

    boolean NET_ECMS_SetLogToFile(int iLogLevel, String strLogDir, boolean bAutoDel);

    NativeLong NET_ECMS_StartVoiceTalk(NativeLong lUserID, int dwVoiceChan, NET_EHOME_VOICETALK_PARA pVoiceTalkPara);

    boolean NET_ECMS_StopVoiceTalk(NativeLong iVoiceHandle);

    boolean NET_ECMS_StopVoiceTalkWithStmServer(NativeLong lUserID, NativeLong lSessionID);

    boolean NET_ECMS_SendVoiceTransData(NativeLong iVoiceHandle, String pSendBuf, int dwBufSize);

    boolean NET_ECMS_StartGetRealStream(NativeLong lUserID, NET_EHOME_PREVIEWINFO_IN pPreviewInfoIn, NET_EHOME_PREVIEWINFO_OUT pPreviewInfoOut); //lUserID由SDK分配的用户ID,由设备注册回调时fDeviceRegisterCallBack返回

    boolean NET_ECMS_StartGetRealStreamV11(NativeLong lUserID, NET_EHOME_PREVIEWINFO_IN_V11 pPreviewInfoIn, NET_EHOME_PREVIEWINFO_OUT pPreviewInfoOut);

    boolean NET_ECMS_StopGetRealStream(NativeLong lUserID, NativeLong lSessionID);

    boolean NET_ECMS_StartPushRealStream(NativeLong lUserID, NET_EHOME_PUSHSTREAM_IN pPushInfoIn, NET_EHOME_PUSHSTREAM_OUT pPushInfoOut);

    boolean NET_ESTREAM_StopPreview(NativeLong lPreviewHandle);

    boolean NET_ESTREAM_StopListenPreview(NativeLong lPreivewListenHandle);

    //透传
    boolean NET_ECMS_GetPTXMLConfig(NativeLong iUserID, NET_EHOME_PTXML_PARAM lpPTXMLParam);

    boolean NET_ECMS_PutPTXMLConfig(NativeLong iUserID, NET_EHOME_PTXML_PARAM lpPTXMLParam);

    boolean NET_ECMS_PostPTXMLConfig(NativeLong iUserID, NET_EHOME_PTXML_PARAM lpPTXMLParam);

    boolean NET_ECMS_DeletePTXMLConfig(NativeLong iUserID, NET_EHOME_PTXML_PARAM lpPTXMLParam);

    boolean NET_ECMS_XMLConfig(NativeLong iUserID, NET_EHOME_XML_CFG pXmlCfg, int dwConfigSize);

    boolean NET_ECMS_XMLRemoteControl(NativeLong lUserID, NET_EHOME_XML_REMOTE_CTRL_PARAM lpCtrlParam, int dwCtrlSize);

    //获取查下句柄
    NativeLong NET_ECMS_StartFindFile_V11(NativeLong lUserID, int lSearchType, Pointer pFindCond, int dwCondSize);

    NativeLong NET_ECMS_FindNextFile_V11(NativeLong lHandle, Pointer pFindData, int dwDataSize);

    boolean NET_ECMS_StopFindFile(NativeLong lHandle);
    //boolean  NET_ECMS_StartPlayBack(NativeLong lUserID, NET_EHOME_PLAYBACK_INFO_IN pPlaybackInfoIn, NET_EHOME_PLAYBACK_INFO_OUT pPlaybackInfoOut);
    //boolean  NET_ECMS_StartPushPlayBack(NativeLong lUserID, NET_EHOME_PUSHPLAYBACK_IN struPushPlayBackIn, NET_EHOME_PUSHPLAYBACK_OUT struPushPlayBackOut);

}

interface GDI32 extends W32API {
    GDI32 INSTANCE = (GDI32) Native.loadLibrary("gdi32", GDI32.class, DEFAULT_OPTIONS);

    public static final int TRANSPARENT = 1;

    int SetBkMode(HDC hdc, int i);

    HANDLE CreateSolidBrush(int icolor);
}