+ * 所有函数使用 __stdcall 调用约定。{@code IRNETHANDLE} 映射为 Pointer 子类。 + *
+ * + *{@code
+ * IRNetSDK sdk = IRNetSDK.INSTANCE;
+ *
+ * // 启动SDK
+ * int result = sdk.IRNET_ClientStartup(0, null, null, null, null);
+ *
+ * // 创建连接信息
+ * CHANNEL_CLIENTINFO info = CHANNEL_CLIENTINFO.create(
+ * "设备名", "admin", "密码", (byte)0, null, null, 0, null, null);
+ *
+ * // 连接设备
+ * IRNETHANDLE handle = sdk.IRNET_ClientStart("192.168.1.100", info, (short)3000, 0);
+ *
+ * // ... 使用SDK功能 ...
+ *
+ * // 清理
+ * sdk.IRNET_ClientStop(handle);
+ * sdk.IRNET_ClientCleanup();
+ * }
+ *
+ * @see IRNetSDKCallback 回调接口
+ * @see IRNetSDKConst 常量和枚举
+ * @see IRNetSDKStruct 结构体定义
+ */
+@SuppressWarnings({"unused", "SpellCheckingInspection"})
+public interface IRNetSDK extends StdCallLibrary {
+
+ /** 加载 x64 DLL (IRNetSDK64.dll) */
+// IRNetSDK INSTANCE = Native.load(System.getProperty("user.dir") + "\\lib\\Lincseek\\win\\IRNetSDK64", IRNetSDK.class, W32APIOptions.DEFAULT_OPTIONS);
+
+ /** 加载 x86 DLL (IRNetSDK.dll) */
+// IRNetSDK INSTANCE_X86 = Native.load(System.getProperty("user.dir") + "\\lib\\Lincseek\\win\\IRNetSDK", IRNetSDK.class, W32APIOptions.DEFAULT_OPTIONS);
+
+ // ═════════════════════════════════════════════════════════════════════
+ // 第一部分:SDK 生命周期
+ // ═════════════════════════════════════════════════════════════════════
+
+ /**
+ * 初始化SDK,分配SDK资源。
+ * @param m_nMessage 应用程序的一个用户自定义消息
+ * @param m_hWnd 应用程序的一个窗口句柄
+ * @param m_messagecallback 消息回调函数接口
+ * @param context 用户上下文
+ * @param key 授权字符串(默认NULL)
+ * @return 1-表示成功,0-表示失败
+ * @note 设备连接断开、连接成功等消息,会通过回调函数m_messagecallback异步通知
+ * @see IRNET_ClientCleanup
+ */
+ int IRNET_ClientStartup(int m_nMessage, HWND m_hWnd,
+ IRNetSDKCallback.CCICallback m_messagecallback,
+ Pointer context, String key);
+
+ /**
+ * 获取消息。
+ * @param m_sername [in/out] 设备名称
+ * @param m_url [in/out] 设备IP地址
+ * @param m_port [in/out] 设备端口
+ * @param m_ch [in/out] 设备通道
+ * @param wParam [in/out] 消息左参数
+ * @param lParam [in/out] 消息右参数
+ * @return 1表示成功,0表示失败
+ */
+ int IRNET_ClientReadMessage(byte[] m_sername, byte[] m_url,
+ ShortByReference m_port, IntByReference m_ch,
+ IntByReference wParam, Pointer lParam);
+
+ /**
+ * 设置SDK连接设备的超时时间和重试次数。
+ * @param m_waitnum 等待时间(秒),默认6
+ * @param m_trynum 重试次数,默认3
+ * @return TRUE表示成功,FALSE表示失败
+ * @attention 不要把m_waitnum的值设置得太小,通过互联网连接时可能会导致连接失败
+ */
+ boolean IRNET_ClientWaitTime(int m_waitnum, int m_trynum);
+
+ /**
+ * 卸载客户端SDK,释放SDK资源。
+ * @return TRUE表示成功,FALSE表示失败
+ * @see IRNET_ClientStartup
+ */
+ boolean IRNET_ClientCleanup();
+
+ // ═════════════════════════════════════════════════════════════════════
+ // 第二部分:连接与视频显示
+ // ═════════════════════════════════════════════════════════════════════
+
+ /**
+ * 与设备建立连接,并实时预览图像。
+ * @param m_url 设备的IP地址(或转发服务器的IP地址)
+ * @param m_pChaninfo CHANNEL_CLIENTINFO 指针
+ * @param wserport 设备(或转发服务器)的端口号
+ * @param streamtype 连接的码流类型: 0=主码流, 1=子码流(需要设备支持)
+ * @return -1表示失败,其他值为连接句柄
+ * @see IRNET_ClientStop
+ */
+ IRNetSDKStruct.IRNETHANDLE IRNET_ClientStart(String m_url,
+ IRNetSDKStruct.CHANNEL_CLIENTINFO m_pChaninfo,
+ short wserport, int streamtype);
+
+ /**
+ * 停止预览,断开与设备的连接。
+ * @param hHandle 连接句柄(IRNET_ClientStart的返回值)
+ * @return TRUE表示成功,FALSE表示失败
+ */
+ boolean IRNET_ClientStop(IRNetSDKStruct.IRNETHANDLE hHandle);
+
+ /**
+ * 开启图像显示(连接时m_playstart为FALSE时,需手动调用此接口)。
+ * @param hHandle 连接句柄
+ * @param decodesign 释放解码资源标志:1=释放,0=不释放
+ * @return TRUE表示成功,FALSE表示失败
+ */
+ boolean IRNET_ClientStartView(IRNetSDKStruct.IRNETHANDLE hHandle, boolean decodesign);
+
+ /**
+ * 停止图像显示(不断开连接)。
+ * @param hHandle 连接句柄
+ * @return TRUE表示成功,FALSE表示失败
+ */
+ boolean IRNET_ClientStopView(IRNetSDKStruct.IRNETHANDLE hHandle);
+
+ /**
+ * 设置图像显示的窗口。
+ * @param hHandle 连接句柄
+ * @param hWnd 图像窗口(仅Windows直接渲染)
+ * @return TRUE表示成功,FALSE表示失败
+ */
+ boolean IRNET_ClientSetWnd(IRNetSDKStruct.IRNETHANDLE hHandle, HWND hWnd);
+
+ /**
+ * 刷新图像显示的窗口。
+ * @param hHandle 连接句柄
+ * @param rect 需要刷新的区域(NULL表示全窗口)
+ * @return TRUE表示成功,FALSE表示失败
+ */
+ boolean IRNET_ClientRefrenshWnd(IRNetSDKStruct.IRNETHANDLE hHandle, RECT rect);
+
+ /**
+ * 设置图像显示延时(缓冲帧数)。
+ * @param hHandle 连接句柄
+ * @param delaytime 延时时间(帧): 0=实时, 1-100=延时, 值越大延时越大但图像越平滑
+ * @return TRUE表示成功,FALSE表示失败
+ */
+ boolean IRNET_ClientSetDelayTime(IRNetSDKStruct.IRNETHANDLE hHandle, int delaytime);
+
+ /**
+ * 防止图像分裂。
+ * @param hHandle 连接句柄
+ * @param bsplit 防止分裂标志
+ * @return TRUE表示成功,FALSE表示失败
+ */
+ boolean IRNET_ClientPreventImageSplit(IRNetSDKStruct.IRNETHANDLE hHandle, boolean bsplit);
+
+ /**
+ * 获取图像尺寸。
+ * @param hHandle 连接句柄
+ * @param m_pWidth [out] 图像的宽度
+ * @param m_pHeight [out] 图像的高度
+ * @return TRUE表示成功,FALSE表示失败
+ */
+ boolean IRNET_ClientGetVideoSize(IRNetSDKStruct.IRNETHANDLE hHandle,
+ IntByReference m_pWidth, IntByReference m_pHeight);
+
+ /**
+ * 设置是否显示图像。
+ * @param hHandle 连接句柄
+ * @param bShow TRUE=显示视频, FALSE=不显示
+ * @return TRUE表示成功,FALSE表示失败
+ */
+ boolean IRNET_ClientSetImageShow(IRNetSDKStruct.IRNETHANDLE hHandle, boolean bShow);
+
+ /**
+ * 获取客户端状态。
+ * @param hHandle 连接句柄
+ * @return 状态码: -1=正在连接, -1000=无效句柄, 0=成功, 1=用户停止, 2=连接失败,
+ * 3=设备断开, 4=绑定端口失败, 5=内存错误, 6=登录失败,
+ * -102=用户数限制, -103=设备列表已满, -105=通道用户超限,
+ * -106=通道无效, -112=未找到服务器
+ */
+ int IRNET_ClientGetState(IRNetSDKStruct.IRNETHANDLE hHandle);
+
+ /**
+ * 清理显示缓冲区。
+ * @param hHandle 连接句柄
+ * @return TRUE表示成功,FALSE表示失败
+ */
+ boolean IRNET_CleanVideoDisplayBuffer(IRNetSDKStruct.IRNETHANDLE hHandle);
+
+ // ═════════════════════════════════════════════════════════════════════
+ // 第三部分:回调注册
+ // ═════════════════════════════════════════════════════════════════════
+
+ /**
+ * 注册视频显示的回调函数(YUV数据回调)。
+ * @param hHandle 连接句柄
+ * @param ShowCallBack 回调函数
+ * @param context 用户上下文
+ * @return TRUE表示成功,FALSE表示失败
+ */
+ boolean IRNET_ClientShowcallback(IRNetSDKStruct.IRNETHANDLE hHandle,
+ IRNetSDKCallback.ShowCallback ShowCallBack, Pointer context);
+
+ /**
+ * 注册音频解码的回调函数。
+ * @param hHandle 连接句柄
+ * @param AudioDecCallBack 回调函数
+ * @param context 用户上下文
+ * @return TRUE表示成功,FALSE表示失败
+ */
+ boolean IRNET_ClientAudioDeccallback(IRNetSDKStruct.IRNETHANDLE hHandle,
+ IRNetSDKCallback.AudioDecCallback AudioDecCallBack, Pointer context);
+
+ /**
+ * 注册画图回调函数(基于HDC,仅Windows)。
+ * @param hHandle 连接句柄
+ * @param DrawCallBack 回调函数
+ * @param context 用户上下文
+ * @return TRUE表示成功,FALSE表示失败
+ */
+ boolean IRNET_ClientDrawCallBack(IRNetSDKStruct.IRNETHANDLE hHandle,
+ IRNetSDKCallback.DrawCallback DrawCallBack, Pointer context);
+
+ /**
+ * 注册图像显示回调(回调方式,基于HDC)。
+ * @param hHandle 连接句柄
+ * @param DrawCallBack 回调函数
+ * @param context 用户上下文
+ * @return TRUE表示成功,FALSE表示失败
+ */
+ boolean IRNET_ClientShowImageDrawCallback(IRNetSDKStruct.IRNETHANDLE hHandle,
+ IRNetSDKCallback.DrawCallback DrawCallBack, Pointer context);
+
+ /**
+ * 注册测温回调。
+ * @param hHandle 连接句柄
+ * @param pCallBack 回调函数地址
+ * @param tempSpan [in/out] 温跨
+ * @param context 自定义上下文
+ * @return TRUE表示成功,FALSE表示失败
+ */
+ boolean IRNET_ClientRegTempCallBack(IRNetSDKStruct.IRNETHANDLE hHandle,
+ IRNetSDKCallback.TempCallback pCallBack,
+ IRNetSDKStruct.DEV_TEMP_SPAN tempSpan, Pointer context);
+
+ /**
+ * 注册获取红外通道raw数据回调。
+ * @param hHandle 连接句柄
+ * @param pFunc 回调函数地址
+ * @param context 上下文
+ * @return TRUE表示成功,FALSE表示失败
+ */
+ boolean IRNET_ClientRegRawCallback(IRNetSDKStruct.IRNETHANDLE hHandle,
+ IRNetSDKCallback.RawCallback pFunc, Pointer context);
+
+ // ═════════════════════════════════════════════════════════════════════
+ // 第四部分:云台控制
+ // ═════════════════════════════════════════════════════════════════════
+
+ /**
+ * 控制云台。
+ * @param hHandle 连接句柄
+ * @param type 云台控制码(见 IRNetSDKConst 中的 PTZ_* 常量)
+ * @param value 控制参数[1,10]
+ * @param priority 云台控制优先级(需要设备支持)
+ * @param extrabuff 需要发给设备的额外数据
+ * @param extrasize 额外数据大小
+ * @return TRUE表示成功,FALSE表示失败
+ */
+ boolean IRNET_ClientPTZCtrl(IRNetSDKStruct.IRNETHANDLE hHandle,
+ int type, int value, int priority, byte[] extrabuff, int extrasize);
+
+ /**
+ * 设置云台地址。
+ * @param hHandle 连接句柄
+ * @param m_ptzaddr 云台地址
+ * @return TRUE表示成功,FALSE表示失败
+ */
+ boolean IRNET_ClientSetPTZAddr(IRNetSDKStruct.IRNETHANDLE hHandle, byte m_ptzaddr);
+
+ // ═════════════════════════════════════════════════════════════════════
+ // 第五部分:录像与原始数据获取
+ // ═════════════════════════════════════════════════════════════════════
+
+ /**
+ * 设置预录像。
+ * @param hHandle 连接句柄
+ * @param m_benable 使能标志
+ * @param m_buffsize 缓冲区大小(新版SDK中弃用)
+ * @param m_framecount 预录像帧数
+ * @return TRUE表示成功,FALSE表示失败
+ */
+ boolean IRNET_ClientPrerecord(IRNetSDKStruct.IRNETHANDLE hHandle,
+ boolean m_benable, int m_buffsize, int m_framecount);
+
+ /**
+ * 获取通道视频音频压缩信息。
+ * @param hHandle 连接句柄
+ * @param m_pStreamInfo [in/out] VSTREAMINFO结构指针
+ * @return TRUE表示成功,FALSE表示失败
+ */
+ boolean IRNET_ClientGetStreamInfo(IRNetSDKStruct.IRNETHANDLE hHandle,
+ IRNetSDKStruct.VSTREAMINFO m_pStreamInfo);
+
+ /**
+ * 开始获取原始码流。
+ * @param hHandle 连接句柄
+ * @param m_nomalvideo 视频数据回调函数
+ * @param pvideocontext 视频用户上下文
+ * @param m_nomalaudio 音频数据回调函数
+ * @param paudiocontext 音频用户上下文
+ * @return TRUE表示成功,FALSE表示失败
+ */
+ boolean IRNET_ClientStartNomalCap(IRNetSDKStruct.IRNETHANDLE hHandle,
+ IRNetSDKCallback.OriginalVideoCallback m_nomalvideo, Pointer pvideocontext,
+ IRNetSDKCallback.OriginalAudioCallback m_nomalaudio, Pointer paudiocontext);
+
+ /**
+ * 停止获取原始码流。
+ * @param hHandle 连接句柄
+ * @return TRUE表示成功,FALSE表示失败
+ */
+ boolean IRNET_ClientStopNomalCap(IRNetSDKStruct.IRNETHANDLE hHandle);
+
+ // ═════════════════════════════════════════════════════════════════════
+ // 第六部分:远程配置(消息通道)
+ // ═════════════════════════════════════════════════════════════════════
+
+ /**
+ * 打开远程配置消息通道。
+ * @param sername 服务器名称(小于等于24个字符)
+ * @param url 服务器地址
+ * @param username 用户名(小于等于20个字符)
+ * @param password 密码(小于等于20个字符)
+ * @param serport 服务器端口号(默认3000)
+ * @return -1表示失败,其他值为消息通道句柄
+ * @attention 接口调用成功后,必须调用IRNET_ClientMessageClose释放资源
+ * @see IRNET_ClientMessageOpt, IRNET_ClientMessageClose
+ */
+ IRNetSDKStruct.IRNETHANDLE IRNET_ClientMessageOpen(String sername, String url,
+ String username, String password, short serport);
+
+ /**
+ * 远程配置操作(读写设备参数)。
+ * @param hHandle 消息通道句柄
+ * @param opt 命令码(见 MessageOpt 常量)
+ * @param ch 通道号
+ * @param param1 [in/out] 参数1(结构体相关)
+ * @param param2 [in/out] 参数2
+ * @param param3 [in/out] 参数3
+ * @return 一般 TRUE=成功, FALSE=失败
+ */
+ int IRNET_ClientMessageOpt(IRNetSDKStruct.IRNETHANDLE hHandle,
+ int opt, int ch, Pointer param1, Pointer param2, Pointer param3);
+
+ /**
+ * 关闭远程配置消息通道。
+ * @param hHandle 消息通道句柄
+ * @return TRUE表示成功,FALSE表示失败
+ */
+ boolean IRNET_ClientMessageClose(IRNetSDKStruct.IRNETHANDLE hHandle);
+
+ // ═════════════════════════════════════════════════════════════════════
+ // 第七部分:直接获取温度数据
+ // ═════════════════════════════════════════════════════════════════════
+
+ /**
+ * 获取温度数据缓冲区。
+ * @param m_sername 设备名称
+ * @param m_url 设备IP
+ * @param m_username 用户名
+ * @param m_password 密码
+ * @param pbuff [out] 数据缓冲区
+ * @param wserport 设备端口(默认3000)
+ * @return >=0=成功(数据长度), <0=失败
+ */
+ int IRNET_ClientGetTempData(String m_sername, String m_url,
+ String m_username, String m_password, byte[] pbuff, short wserport);
+
+ /**
+ * 保存服务器参数到本地。
+ * @param m_sername 设备名称
+ * @param m_url 设备IP
+ * @param m_username 用户名
+ * @param m_password 密码
+ * @param wserport 设备端口
+ * @return TRUE表示成功,FALSE表示失败
+ */
+ boolean IRNET_ClientSaveServerPara(String m_sername, String m_url,
+ String m_username, String m_password, short wserport);
+
+ // ═════════════════════════════════════════════════════════════════════
+ // 第八部分:固件升级
+ // ═════════════════════════════════════════════════════════════════════
+
+ /**
+ * 开始远程升级设备固件。
+ * @param m_url 设备IP
+ * @param m_username 用户名
+ * @param m_password 密码
+ * @param m_filename 固件文件路径
+ * @param m_hEndEvent 事件句柄(Windows HANDLE)
+ * @param wserport 设备端口
+ * @param m_sername 设备名称
+ * @return -1=失败, 其他=升级句柄
+ */
+ IRNetSDKStruct.IRNETHANDLE IRNET_ClientUpdateStart(String m_url,
+ String m_username, String m_password, String m_filename,
+ Pointer m_hEndEvent, short wserport, String m_sername);
+
+ /**
+ * 停止固件升级并获取结果。
+ * @param hHandle 升级句柄
+ * @return 0=升级成功, 2=升级失败, -102=用户/密码错误
+ */
+ int IRNET_ClientUpdateStop(IRNetSDKStruct.IRNETHANDLE hHandle);
+
+ // ═════════════════════════════════════════════════════════════════════
+ // 第九部分:音频
+ // ═════════════════════════════════════════════════════════════════════
+
+ /**
+ * 设置音频音量。
+ * @param hHandle 连接句柄
+ * @param m_Volume 音量值 0x0000(静音) - 0xFFFF(最大)
+ * @return TRUE表示成功,FALSE表示失败
+ */
+ boolean IRNET_ClientAudioVolume(IRNetSDKStruct.IRNETHANDLE hHandle, short m_Volume);
+
+ /**
+ * 播放音频。
+ * @param hHandle 连接句柄
+ * @return TRUE表示成功,FALSE表示失败
+ * @attention 仅支持Windows平台
+ */
+ boolean IRNET_ClientPlayAudio(IRNetSDKStruct.IRNETHANDLE hHandle);
+
+ /**
+ * 停止播放音频。
+ * @param hHandle 连接句柄
+ * @return TRUE表示成功,FALSE表示失败
+ * @attention 仅支持Windows平台
+ */
+ boolean IRNET_ClientStopAudio(IRNetSDKStruct.IRNETHANDLE hHandle);
+
+ /**
+ * 开始对讲。
+ * @param servername 设备名
+ * @param url 设备IP
+ * @param username 用户名
+ * @param password 密码
+ * @param serport 端口
+ * @param talkcallback 对讲回调
+ * @param samplerate 采样率(默认8000)
+ * @param context 用户上下文
+ * @return -1=只能开启一路对讲, -2=音频采集失败, -3=IP无效, -4=不支持的操作系统, >0=有效句柄
+ * @attention 仅支持Windows平台
+ */
+ IRNetSDKStruct.IRNETHANDLE IRNET_ClientTalkStart(String servername,
+ String url, String username, String password, short serport,
+ IRNetSDKCallback.TalkCallback talkcallback, int samplerate, Pointer context);
+
+ /**
+ * 停止对讲。
+ * @param talkhandle 对讲句柄
+ * @return 1=成功, 0=失败
+ * @attention 仅支持Windows平台
+ */
+ int IRNET_ClientTalkStop(IRNetSDKStruct.IRNETHANDLE talkhandle);
+
+ // ═════════════════════════════════════════════════════════════════════
+ // 第十部分:电子放大
+ // ═════════════════════════════════════════════════════════════════════
+
+ /**
+ * 设置电子放大区域。
+ * @param hHandle 连接句柄
+ * @param pRect 放大矩形区域(相对于图像: 0,0,width,height)
+ * @param bEnable 使能控制
+ * @return TRUE表示成功,FALSE表示失败
+ */
+ boolean IRNET_ClientSetZoomRect(IRNetSDKStruct.IRNETHANDLE hHandle,
+ RECT pRect, boolean bEnable);
+
+ /**
+ * 电子放大移动使能。
+ * @param hHandle 连接句柄
+ * @param bEnable true=启用, false=关闭
+ * @return TRUE表示成功,FALSE表示失败
+ */
+ boolean IRNET_ClientElectronicZoomMoveEnable(IRNetSDKStruct.IRNETHANDLE hHandle, boolean bEnable);
+
+ // ═════════════════════════════════════════════════════════════════════
+ // 第十一部分:环境与测温配置
+ // ═════════════════════════════════════════════════════════════════════
+
+ /**
+ * 设置设备测温环境信息(发射率、距离等)。
+ * @param hHandle 连接句柄
+ * @param devInfo 设备环境信息
+ * @param DeviceMode FALSE=使用PC端参数, TRUE=使用设备端参数
+ * @return TRUE表示成功,FALSE表示失败
+ */
+ boolean IRNET_ClientSetDevInfo(IRNetSDKStruct.IRNETHANDLE hHandle,
+ IRNetSDKStruct.DEV_ENV_INFO devInfo, boolean DeviceMode);
+
+ /**
+ * 获取设备测温环境信息。
+ * @param hHandle 连接句柄
+ * @param devInfo [out] 设备环境信息
+ * @param DeviceMode FALSE=PC端, TRUE=设备端
+ * @return TRUE表示成功,FALSE表示失败
+ */
+ boolean IRNET_ClientGetDevInfo(IRNetSDKStruct.IRNETHANDLE hHandle,
+ IRNetSDKStruct.DEV_ENV_INFO devInfo, boolean DeviceMode);
+
+ /**
+ * 设置设备温跨。
+ * @param hHandle 连接句柄
+ * @param tempSpan 温跨信息
+ * @param DeviceMode FALSE=PC端, TRUE=设备端
+ * @return TRUE表示成功,FALSE表示失败
+ */
+ boolean IRNET_ClientSetTempSpan(IRNetSDKStruct.IRNETHANDLE hHandle,
+ IRNetSDKStruct.DEV_TEMP_SPAN tempSpan, boolean DeviceMode);
+
+ /**
+ * 获取设备温跨。
+ * @param hHandle 连接句柄
+ * @param tempSpan [out] 温跨信息
+ * @param DeviceMode FALSE=PC端, TRUE=设备端
+ * @return TRUE表示成功,FALSE表示失败
+ */
+ boolean IRNET_ClientGetTempSpan(IRNetSDKStruct.IRNETHANDLE hHandle,
+ IRNetSDKStruct.DEV_TEMP_SPAN tempSpan, boolean DeviceMode);
+
+ /**
+ * 设置调色板模式。
+ * @param hHandle 连接句柄
+ * @param enMode 调色板模式(DEV_PALETE_*)
+ * @param DeviceMode FALSE=PC端, TRUE=设备端
+ * @return TRUE表示成功,FALSE表示失败
+ */
+ boolean IRNET_ClientSetPaletteMode(IRNetSDKStruct.IRNETHANDLE hHandle,
+ int enMode, boolean DeviceMode);
+
+ /**
+ * 获取调色板模式。
+ * @param hHandle 连接句柄
+ * @param enMode [out] 调色板模式
+ * @param DeviceMode FALSE=PC端, TRUE=设备端
+ * @return TRUE表示成功,FALSE表示失败
+ */
+ boolean IRNET_ClientGetPaletteMode(IRNetSDKStruct.IRNETHANDLE hHandle,
+ IntByReference enMode, boolean DeviceMode);
+
+ /**
+ * 获取设备温度值(已废弃,建议用MessageOpt代替)。
+ * @param hHandle 连接句柄
+ * @param tempValue [out] 温度值
+ * @param DeviceMode FALSE=PC端, TRUE=设备端
+ * @return TRUE表示成功,FALSE表示失败
+ * @deprecated 此接口废弃,请使用 MESSAGE_CMD_GET_TEMPVALUE_EX 获取
+ */
+ boolean IRNET_ClientGetTemperatureValue(IRNetSDKStruct.IRNETHANDLE hHandle,
+ IRNetSDKStruct.VSNET_TEMP_VALUE tempValue, boolean DeviceMode);
+
+ // ═════════════════════════════════════════════════════════════════════
+ // 第十二部分:图像抓图
+ // ═════════════════════════════════════════════════════════════════════
+
+ /**
+ * 图像抓图。
+ * @param hHandle 连接句柄
+ * @param type 文件类型: EN_FT_SDK_LCR=0(红外LCR图), EN_FT_SDK_CHANNEL_JPG=1, EN_FT_SDK_CHANNEL_BMP=2
+ * @param fileName 文件名(路径+文件名+扩展名)
+ * @param quality 图像质量(0-100),默认100
+ * @param dataAddr [in/out] 图像数据地址(外部分配内存),type为LCR时表示温度数据
+ * @param dataSize [in/out] 数据大小(外部传入内存大小),成功后修改为实际数据大小,失败时修改为0
+ * @return 抓图错误码(见 EN_CEC_* 常量)
+ * @attention type为EN_FT_SDK_LCR时,dataAddr表示温度数据
+ */
+ int IRNET_ClientCapture(IRNetSDKStruct.IRNETHANDLE hHandle, int type,
+ byte[] fileName, int quality, byte[] dataAddr, IntByReference dataSize);
+
+ /**
+ * 开启设备JPEG抓图回传(含温度额外数据)。
+ * @return -1=失败, 其他=抓图句柄
+ * @see IRNET_ClientJpegCapStop
+ */
+ IRNetSDKStruct.IRNETHANDLE IRNET_ClientJpegCapStart(String m_sername,
+ String m_url, String m_username, String m_password, short wserport,
+ IRNetSDKCallback.JpegDataCallback jpegdatacallback, Pointer userdata);
+
+ /**
+ * 开启设备JPEG抓图回传(不含温度额外数据)。
+ */
+ IRNetSDKStruct.IRNETHANDLE IRNET_ClientJpegCapStartGeneral(String m_sername,
+ String m_url, String m_username, String m_password, short wserport,
+ IRNetSDKCallback.JpegDataCallbackGeneral jpegdatacallback, Pointer userdata);
+
+ /**
+ * 触发一次设备抓图回传。
+ * @param hHandle 抓图句柄
+ * @param m_ch 通道
+ * @param m_quality JPEG压缩质量(1=最低, 100=最高)
+ * @return TRUE表示成功,FALSE表示失败
+ */
+ boolean IRNET_ClientJpegCapSingle(IRNetSDKStruct.IRNETHANDLE hHandle, int m_ch, int m_quality);
+
+ /**
+ * 触发一次设备抓图回传(扩展,可选择类型)。
+ * @param hHandle 抓图句柄
+ * @param m_ch 通道
+ * @param m_quality 质量
+ * @param type 抓图类型: 0x1=可见光, 0x10=红外
+ * @return TRUE表示成功,FALSE表示失败
+ */
+ boolean IRNET_ClientJpegCapSingleEx(IRNetSDKStruct.IRNETHANDLE hHandle, int m_ch, int m_quality, int type);
+
+ /**
+ * 停止设备JPEG抓图回传。
+ * @param hHandle 抓图句柄
+ * @return TRUE表示成功,FALSE表示失败
+ */
+ boolean IRNET_ClientJpegCapStop(IRNetSDKStruct.IRNETHANDLE hHandle);
+
+ // ═════════════════════════════════════════════════════════════════════
+ // 第十三部分:视频录像
+ // ═════════════════════════════════════════════════════════════════════
+
+ /**
+ * 开始录像。
+ * @param hHandle 连接句柄
+ * @param filename 文件名(路径+文件名+扩展名)
+ * @param filetype 文件类型(RECDT_MP4, RECDT_AVI 等)
+ * @param framerate 帧率
+ * @return TRUE表示成功,FALSE表示失败
+ * @attention 仅支持Windows平台
+ */
+ boolean IRNET_ClientRecordBegin(IRNetSDKStruct.IRNETHANDLE hHandle,
+ byte[] filename, int filetype, float framerate);
+
+ /** 录像暂停(仅Windows平台)。 */
+ boolean IRNET_ClientRecordPause(IRNetSDKStruct.IRNETHANDLE hHandle);
+
+ /** 录像恢复(仅Windows平台)。 */
+ boolean IRNET_ClientRecordResume(IRNetSDKStruct.IRNETHANDLE hHandle);
+
+ /** 录像结束(仅Windows平台)。 */
+ boolean IRNET_ClientRecordEnd(IRNetSDKStruct.IRNETHANDLE hHandle);
+
+ // ═════════════════════════════════════════════════════════════════════
+ // 第十四部分:图像融合
+ // ═════════════════════════════════════════════════════════════════════
+
+ /**
+ * 开启图像融合(红外图叠加到可见光图)。
+ * @param hMainHandle 红外通道连接句柄
+ * @param hSubHandle 可见光通道连接句柄
+ * @return TRUE表示成功,FALSE表示失败
+ * @attention 仅支持Windows平台
+ */
+ boolean IRNET_ClientFuseStart(IRNetSDKStruct.IRNETHANDLE hMainHandle, IRNetSDKStruct.IRNETHANDLE hSubHandle);
+
+ /** 停止图像融合(仅Windows平台)。 */
+ boolean IRNET_ClientFuseStop(IRNetSDKStruct.IRNETHANDLE hHandle);
+
+ /**
+ * 设置融合强度。
+ * @param hHandle 连接句柄(红外通道)
+ * @param byStrength 融合强度 0-100
+ * @param DeviceMode FALSE=PC端, TRUE=设备端
+ * @return TRUE表示成功,FALSE表示失败
+ */
+ boolean IRNET_ClientSetFusionStrength(IRNetSDKStruct.IRNETHANDLE hHandle, byte byStrength, boolean DeviceMode);
+
+ /** 获取融合强度,返回值<0表示失败。 */
+ int IRNET_ClientGetFusionStrength(IRNetSDKStruct.IRNETHANDLE hHandle, boolean DeviceMode);
+
+ /** 设置融合图像可见光水平偏移。 */
+ boolean IRNET_ClientSetFusionOffsetHorz(IRNetSDKStruct.IRNETHANDLE hHandle, int iOffset, boolean DeviceMode);
+
+ /** 获取融合图像可见光水平偏移。 */
+ int IRNET_ClientGetFusionOffsetHorz(IRNetSDKStruct.IRNETHANDLE hHandle, boolean DeviceMode);
+
+ /** 设置融合图像可见光垂直偏移。 */
+ boolean IRNET_ClientSetFusionOffsetVert(IRNetSDKStruct.IRNETHANDLE hHandle, int iOffset, boolean DeviceMode);
+
+ /** 获取融合图像可见光垂直偏移。 */
+ int IRNET_ClientGetFusionOffsetVert(IRNetSDKStruct.IRNETHANDLE hHandle, boolean DeviceMode);
+
+ /**
+ * 设置融合视图模式。
+ * @param hHandle 连接句柄
+ * @param mode EN_MODE_VIS=1(仅可见光), EN_MODE_FUSION=2(融合)
+ * @param DeviceMode FALSE=PC端, TRUE=设备端
+ * @return TRUE表示成功,FALSE表示失败
+ */
+ boolean IRNET_ClientSetFusionViewMode(IRNetSDKStruct.IRNETHANDLE hHandle, int mode, boolean DeviceMode);
+
+ // ═════════════════════════════════════════════════════════════════════
+ // 第十五部分:入侵检测(仅Linux)
+ // ═════════════════════════════════════════════════════════════════════
+
+ /** 注册入侵检测回调(仅Linux平台)。 */
+ boolean IRNET_ClientRegIntrDetectCallback(IRNetSDKStruct.IRNETHANDLE hHandle,
+ IRNetSDKCallback.IntrDetectCallback pFuncAddr);
+
+ /** 开始入侵检测(仅Linux平台)。 */
+ boolean IRNET_ClientIntrDetectBegin(IRNetSDKStruct.IRNETHANDLE hHandle, int areaUpper);
+
+ /** 结束入侵检测(仅Linux平台)。 */
+ boolean IRNET_ClientIntrDetectEnd(IRNetSDKStruct.IRNETHANDLE hHandle);
+
+ // ═════════════════════════════════════════════════════════════════════
+ // 第十六部分:设备校标
+ // ═════════════════════════════════════════════════════════════════════
+
+ /**
+ * 设备校标。
+ * @param info 设备基本信息
+ * @param type 校标类型(EN_DCT_*)
+ * @param filename 文件名(NULL时使用memaddr)
+ * @param memaddr 内存地址
+ * @param memsize 内存大小
+ * @param group 组
+ * @param context 自定义上下文
+ * @param pCallback 完成回调
+ * @return -1=失败, >0=成功
+ */
+ IRNetSDKStruct.IRNETHANDLE IRNET_DevCalib(IRNetSDKStruct.DEVICE_BASE_INFO info,
+ int type, String filename, byte[] memaddr, int memsize, short group,
+ Pointer context, IRNetSDKCallback.FinishCallback pCallback);
+
+ // ═════════════════════════════════════════════════════════════════════
+ // 第十七部分:RVS服务器(转发视频服务)
+ // ═════════════════════════════════════════════════════════════════════
+
+ /**
+ * 注册转发服务器通道检测回调函数。
+ * @param pchancheck 回调函数
+ * @return TRUE表示成功,FALSE表示失败
+ */
+ boolean IRNET_RVSRegSerCheckCallback(IRNetSDKCallback.RVSChannelCallback pchancheck);
+
+ /**
+ * 启动转发服务并注册通道。
+ * @param m_pRvsInfo 绑定信息
+ * @return TRUE表示成功,FALSE表示失败
+ */
+ boolean IRNET_RVSStartServer(IRNetSDKStruct.RVSINFOREG m_pRvsInfo);
+
+ /**
+ * 注册转发通道报警消息回调函数。
+ * @param hHandle 通道句柄
+ * @param palarmcallback 报警回调
+ * @param context 回调函数上下文
+ * @return TRUE表示成功,FALSE表示失败
+ */
+ boolean IRNET_RVSRegMsgCallback(IRNetSDKStruct.IRNETHANDLE hHandle,
+ IRNetSDKCallback.RVSAlarmCallback palarmcallback, Pointer context);
+
+ /**
+ * 设置服务器ID(用于转发器中的唯一标识)。
+ * @param hHandle 通道句柄
+ * @param pSerID 服务器ID
+ * @return TRUE表示成功,FALSE表示失败
+ */
+ boolean IRNET_RVSSetChanServerID(IRNetSDKStruct.IRNETHANDLE hHandle, String pSerID);
+
+ /**
+ * 开始/停止数据传输。
+ * @param hHandle 通道句柄
+ * @param bStart TRUE=设备发送数据, FALSE=设备停止发送
+ * @return TRUE表示成功,FALSE表示失败
+ */
+ boolean IRNET_ClientMediaData(IRNetSDKStruct.IRNETHANDLE hHandle, boolean bStart);
+
+ /** 停止转发服务并注销通道。 */
+ boolean IRNET_RVSStopServer();
+
+ // ═════════════════════════════════════════════════════════════════════
+ // 第十八部分:转发器(端口转发)
+ // ═════════════════════════════════════════════════════════════════════
+
+ /**
+ * 设置转发器信息。
+ * @param m_pRedirect 转发器配置
+ * @return TRUE表示成功,FALSE表示失败
+ */
+ boolean IRNET_SetRedirectorInfo(IRNetSDKStruct.IRNET_REDIRECTORINFO m_pRedirect);
+
+ /**
+ * 启动转发监听。
+ * @param m_localAddrIP 本地IP(NULL=SDK自动获取)
+ * @return 0=成功, 4=绑定端口失败, 5=内存错误
+ */
+ int IRNET_StartListenClient(String m_localAddrIP);
+
+ /** 停止转发监听。 */
+ boolean IRNET_StopListenClient();
+
+ // ═════════════════════════════════════════════════════════════════════
+ // 第十九部分:串口透传(RS232/RS485)
+ // ═════════════════════════════════════════════════════════════════════
+
+ /**
+ * 打开串口透传通道。
+ * @param m_sername 设备名称
+ * @param m_url 设备地址
+ * @param m_username 用户名
+ * @param m_password 密码
+ * @param iSerialPort 串口号: 0=RS485, 1=RS232
+ * @param pSerialInfo 串口参数
+ * @param fSerialDataCallBack 串口接收回调函数
+ * @param context 用户上下文
+ * @param wserport 设备端口
+ * @return -1=失败, >0=透传串口句柄
+ */
+ IRNetSDKStruct.IRNETHANDLE IRNET_ClientSerialStart(String m_sername,
+ String m_url, String m_username, String m_password, int iSerialPort,
+ IRNetSDKStruct.VSSERIAL_INFO pSerialInfo,
+ IRNetSDKCallback.SerialDataCallback fSerialDataCallBack,
+ Pointer context, short wserport);
+
+ /** 关闭串口透传。 */
+ boolean IRNET_ClientSerialStop(IRNetSDKStruct.IRNETHANDLE hSerial);
+
+ /** 通过串口透传发送数据。 */
+ boolean IRNET_ClientSerialSendNew(IRNetSDKStruct.IRNETHANDLE hSerial,
+ byte[] pSendBuff, int BuffSize);
+
+ /** 串口透传接收暂停。 */
+ boolean IRNET_ClientSerialRecvPause(IRNetSDKStruct.IRNETHANDLE hSerial);
+
+ /** 串口透传接收恢复。 */
+ boolean IRNET_ClientSerialRecvRestart(IRNetSDKStruct.IRNETHANDLE hSerial);
+
+ // ═════════════════════════════════════════════════════════════════════
+ // 第二十部分:ROM/Flash 升级
+ // ═════════════════════════════════════════════════════════════════════
+
+ /**
+ * 上传ROM(非阻塞,通过 IRNET_GetUploadRomRst 查询状态)。
+ */
+ void IRNET_StartUploadRom(String m_sername, String m_url, String m_username,
+ String m_password, short m_wserport, String m_szRomPath);
+
+ /**
+ * 获取ROM上传状态。
+ * @return 2=没有上传事件, 1=正在上传, 0=成功, -1=打开ROM文件失败, -2=读取ROM文件失败,
+ * -3=URL无效, -4=连接失败, -5=登录失败, -6=用户名密码不匹配, -7=线程创建失败
+ */
+ int IRNET_GetUploadRomRst();
+
+ /**
+ * 升级ROM(支持多线程,带回调)。
+ * @return -1=失败, 其他=升级句柄
+ */
+ IRNetSDKStruct.IRNETHANDLE IRNET_UpgradeROM(String m_sername, String m_url,
+ String m_username, String m_password, short m_wserport,
+ String m_szRomPath, IRNetSDKCallback.UpRomCallback callback, Pointer userdata);
+
+ /**
+ * 升级Flash(支持回调)。
+ * @return -1=失败, 其他=升级句柄
+ */
+ IRNetSDKStruct.IRNETHANDLE IRNET_UpgradeFlash(String sername, String url,
+ String username, String password, short wserport,
+ String filepath, IRNetSDKCallback.UpFlashCallback callback, Pointer userdata);
+
+ // ═════════════════════════════════════════════════════════════════════
+ // 第二十一部分:WiFi 搜索
+ // ═════════════════════════════════════════════════════════════════════
+
+ /**
+ * 搜索设备附近的WiFi。
+ * @param m_sername 设备名
+ * @param m_url 设备IP
+ * @param m_username 用户名
+ * @param m_password 密码
+ * @param m_pWifiList [out] WiFi SSID列表
+ * @param wserport 设备端口
+ * @return TRUE表示成功,FALSE表示失败
+ */
+ boolean IRNET_ClientWifiSearch(String m_sername, String m_url,
+ String m_username, String m_password,
+ IRNetSDKStruct.VSNET_WIFI_SSID_LIST m_pWifiList, short wserport);
+
+ // ═════════════════════════════════════════════════════════════════════
+ // 第二十二部分:智能分析
+ // ═════════════════════════════════════════════════════════════════════
+
+ /** 智能分析使能(仅Windows平台)。 */
+ boolean IRNET_ClientIntelligentAnalysisEnable(IRNetSDKStruct.IRNETHANDLE hHandle, boolean bEnable);
+
+ // -- 区域屏蔽 --
+ int IRNET_ClientIntelligentAnalysisAddShield(IRNetSDKStruct.IRNETHANDLE hHandle);
+ int IRNET_ClientIntelligentAnalysisGetShield(IRNetSDKStruct.IRNETHANDLE hHandle);
+ boolean IRNET_ClientIntelligentAnalysisSetShield(IRNetSDKStruct.IRNETHANDLE hHandle, int regionIndex);
+ boolean IRNET_ClientIntelligentAnalysisDeleteShield(IRNetSDKStruct.IRNETHANDLE hHandle, int regionIndex);
+ boolean IRNET_ClientIntelligentAnalysisSaveShield(IRNetSDKStruct.IRNETHANDLE hHandle);
+
+ // -- 目标过滤 --
+ boolean IRNET_ClientIntelligentAnalysisTargetFilterCallback(IRNetSDKStruct.IRNETHANDLE hHandle,
+ IRNetSDKCallback.TargetFilterCallback maxSizeCallback, Pointer maxSizeContext,
+ IRNetSDKCallback.TargetFilterCallback minSizeCallback, Pointer minSizeContext);
+ boolean IRNET_ClientIntelligentAnalysisSetMinTargetFilter(IRNetSDKStruct.IRNETHANDLE hHandle,
+ IntByReference curWidth, IntByReference curHeight);
+ boolean IRNET_ClientIntelligentAnalysisSetMaxTargetFilter(IRNetSDKStruct.IRNETHANDLE hHandle,
+ IntByReference curWidth, IntByReference curHeight);
+ boolean IRNET_ClientIntelligentAnalysisSaveTargetFilter(IRNetSDKStruct.IRNETHANDLE hHandle);
+
+ // -- 警戒线 --
+ int IRNET_ClientIntelligentAnalysisAddCordon(IRNetSDKStruct.IRNETHANDLE hHandle, int arrowDir);
+ int IRNET_ClientIntelligentAnalysisGetCordon(IRNetSDKStruct.IRNETHANDLE hHandle);
+ boolean IRNET_ClientIntelligentAnalysisSetCordon(IRNetSDKStruct.IRNETHANDLE hHandle, int regionIndex);
+ boolean IRNET_ClientIntelligentAnalysisCordonDirc(IRNetSDKStruct.IRNETHANDLE hHandle,
+ boolean isSet, IntByReference cordonDirc);
+ boolean IRNET_ClientIntelligentAnalysisDeleteCordon(IRNetSDKStruct.IRNETHANDLE hHandle, int regionIndex);
+ boolean IRNET_ClientIntelligentAnalysisSaveCordon(IRNetSDKStruct.IRNETHANDLE hHandle);
+
+ // -- 智能分析规则(进入区域/离开区域/物品遗留/物品搬移) --
+ int IRNET_ClientIntelligentAnalysisAddSmart(IRNetSDKStruct.IRNETHANDLE hHandle, int smartType);
+ int IRNET_ClientIntelligentAnalysisGetSmart(IRNetSDKStruct.IRNETHANDLE hHandle, int smartType);
+ boolean IRNET_ClientIntelligentAnalysisSetSmart(IRNetSDKStruct.IRNETHANDLE hHandle, int regionIndex, int smartType);
+ boolean IRNET_ClientIntelligentAnalysisDeleteSmart(IRNetSDKStruct.IRNETHANDLE hHandle, int regionIndex, int smartType);
+ boolean IRNET_ClientIntelligentAnalysisSaveSmart(IRNetSDKStruct.IRNETHANDLE hHandle, int smartType);
+
+ // ═════════════════════════════════════════════════════════════════════
+ // 第二十三部分:报警输出控制
+ // ═════════════════════════════════════════════════════════════════════
+
+ /**
+ * 控制报警输出设备。
+ * @param hHandle 连接句柄
+ * @param devCH 报警通道
+ * @param bOn 1=开, 0=关
+ * @return TRUE表示成功,FALSE表示失败
+ */
+ boolean IRNET_ClientOutPut(IRNetSDKStruct.IRNETHANDLE hHandle, byte devCH, boolean bOn);
+
+ // ═════════════════════════════════════════════════════════════════════
+ // 第二十四部分:多边形测温
+ // ═════════════════════════════════════════════════════════════════════
+
+ /** 多边形测温绘制使能。 */
+ boolean IRNET_ClientPolygonTempMeasureDrawEnable(IRNetSDKStruct.IRNETHANDLE hHandle, boolean bEnable);
+
+ /** 设置多边形测温索引。 */
+ boolean IRNET_ClientPolygonTempMeasureSetIndex(IRNetSDKStruct.IRNETHANDLE hHandle, int index);
+
+ /** 保存多边形测温数据到设备。 */
+ boolean IRNET_ClientPolygonTempMeasureSave(IRNetSDKStruct.IRNETHANDLE hHandle);
+
+ // ═════════════════════════════════════════════════════════════════════
+ // 第二十五部分:BMP抓图优化
+ // ═════════════════════════════════════════════════════════════════════
+
+ /**
+ * BMP抓图(优化)。
+ * @param hHandle 连接句柄
+ * @param m_filename 输出文件名
+ * @return TRUE表示成功,FALSE表示失败
+ */
+ boolean IRNET_ClientBMPOptimize(IRNetSDKStruct.IRNETHANDLE hHandle, String m_filename);
+
+ // ═════════════════════════════════════════════════════════════════════
+ // 第二十六部分:人头检测(人体测温)
+ // ═════════════════════════════════════════════════════════════════════
+
+ /**
+ * 获取人头检测视频尺寸。
+ * @param hHandle 连接句柄
+ * @param videoWidth [out] 视频宽
+ * @param videoHeight [out] 视频高
+ * @return TRUE表示成功,FALSE表示失败
+ */
+ boolean IRNET_ClientGetHeadDetectionVideoSize(IRNetSDKStruct.IRNETHANDLE hHandle,
+ IntByReference videoWidth, IntByReference videoHeight);
+
+ /**
+ * 注册人头检测回调。
+ * @param hHandle 通道句柄
+ * @param callbackfun 回调函数
+ * @param context 自定义上下文
+ * @return TRUE表示成功,FALSE表示失败
+ */
+ boolean IRNET_ClientHeadDetection(IRNetSDKStruct.IRNETHANDLE hHandle,
+ IRNetSDKCallback.HeadAreaCallback callbackfun, Pointer context);
+
+ /**
+ * 设置人体测温头部温度阈值(仅Windows平台)。
+ * @param hHandle 通道句柄
+ * @param threshold 阈值
+ * @return TRUE表示成功,FALSE表示失败
+ */
+ boolean IRNET_ClientSetBodyTemperatureThreshold(IRNetSDKStruct.IRNETHANDLE hHandle, float threshold);
+
+ /**
+ * 设置人体距离校正参数(仅Windows平台)。
+ * @param hHandle 通道句柄
+ * @param par 校正参数
+ * @return TRUE表示成功,FALSE表示失败
+ */
+ boolean IRNET_ClientSetBodyDisCorrParam(IRNetSDKStruct.IRNETHANDLE hHandle,
+ IRNetSDKStruct.VSNET_TED_CORRECTION_S par);
+
+ /**
+ * 获取人体距离校正参数(仅Windows平台)。
+ * @param hHandle 通道句柄
+ * @param par [out] 校正参数
+ * @return TRUE表示成功,FALSE表示失败
+ */
+ boolean IRNET_ClientGetBodyDisCorrParam(IRNetSDKStruct.IRNETHANDLE hHandle,
+ IRNetSDKStruct.VSNET_TED_CORRECTION_S par);
+
+ // ═════════════════════════════════════════════════════════════════════
+ // 第二十七部分:二次标定(测温)
+ // ═════════════════════════════════════════════════════════════════════
+
+ /**
+ * 二次标定开始(TM)。
+ * @return -1=失败, 其他=标定句柄
+ */
+ IRNetSDKStruct.IRNETHANDLE IRNET_ClientSecondCalib4TmStart(String m_sername,
+ String m_url, String m_username, String m_password, short wserport,
+ IRNetSDKCallback.SecondCalibTmCallback seccalibcallback, Pointer userdata);
+
+ /**
+ * 二次标定执行(TM)。
+ * @param hHandle 标定句柄
+ * @param channel 通道号
+ * @param calib_temp 标定温度(℃)
+ * @return 0=成功, 其他=失败
+ */
+ int IRNET_ClientSecondCalib4TmDo(IRNetSDKStruct.IRNETHANDLE hHandle, int channel, float calib_temp);
+
+ /** 二次标定结束。 */
+ boolean IRNET_ClientSecondCalib4TmStop(IRNetSDKStruct.IRNETHANDLE hHandle);
+}
diff --git a/src/main/java/com/inspect/nvr/jna/lincseek/IRNetSDKCallback.java b/src/main/java/com/inspect/nvr/jna/lincseek/IRNetSDKCallback.java
new file mode 100644
index 0000000..2a693fa
--- /dev/null
+++ b/src/main/java/com/inspect/nvr/jna/lincseek/IRNetSDKCallback.java
@@ -0,0 +1,181 @@
+package com.inspect.nvr.jna.lincseek;
+
+import com.sun.jna.Pointer;
+import com.sun.jna.platform.win32.WinDef.HDC;
+import com.sun.jna.win32.StdCallLibrary.StdCallCallback;
+
+/**
+ * IRNetSDK JNA 回调接口映射。
+ * 所有回调均使用 __stdcall (WINAPI) 调用约定。
+ * 回调在 native 线程上触发——不要在回调内部阻塞或调用 JNA 函数。
+ * 注意:回调方法中的句柄参数统一使用 Pointer 而非 IRNETHANDLE,
+ * 因为 JNA 回调机制的 TypeMapper 不一定能自动转换 Pointer 子类。
+ * 若需作为 IRNETHANDLE 使用,调用方可自行 new IRNETHANDLE(peer)。
+ */
+public interface IRNetSDKCallback {
+
+ // ─── 连接 / 消息 ────────────────────────────────────────────────────
+
+ /**
+ * 客户端通道消息回调函数指针
+ */
+ @FunctionalInterface
+ interface CCICallback extends StdCallCallback {
+ void invoke(Pointer hHandle, int wParam, long lParam, Pointer context);
+ }
+
+ // ─── 视频显示 ──────────────────────────────────────────────────────
+
+ @FunctionalInterface
+ interface ShowCallback extends StdCallCallback {
+ void invoke(Pointer m_y, Pointer m_u, Pointer m_v,
+ int stridey, int strideuv, int width, int height, Pointer context);
+ }
+
+ @FunctionalInterface
+ interface DrawCallback extends StdCallCallback {
+ void invoke(HDC hdc, Pointer context);
+ }
+
+ // ─── 音频 ──────────────────────────────────────────────────────────
+
+ @FunctionalInterface
+ interface AudioDecCallback extends StdCallCallback {
+ void invoke(Pointer pBuffer, int size, Pointer context);
+ }
+
+ @FunctionalInterface
+ interface TalkCallback extends StdCallCallback {
+ void invoke(Pointer pbuff, int size, Pointer context);
+ }
+
+ @FunctionalInterface
+ interface RVSChannelCallback extends StdCallCallback {
+ int invoke(String sername, String url, short port, String serialno,
+ byte[] pyhmac, int channels, int alarmInNum, int alarmOutNum,
+ int ch, boolean bLogin, Pointer hChHandle);
+ }
+
+ @FunctionalInterface
+ interface RVSAlarmCallback extends StdCallCallback {
+ void invoke(Pointer hHandle, int wParam, long lParam, Pointer context);
+ }
+
+ // ─── 串口 ──────────────────────────────────────────────────────────
+
+ @FunctionalInterface
+ interface SerialDataCallback extends StdCallCallback {
+ void invoke(Pointer hSerial, Pointer pRecvDataBuff, int buffSize, Pointer context);
+ }
+
+ // ─── JPEG抓图 ──────────────────────────────────────────────────────
+
+ @FunctionalInterface
+ interface JpegDataCallback extends StdCallCallback {
+ void invoke(Pointer hHandle, int mCh, Pointer pBuffer, int size,
+ Pointer extraData, Pointer userdata);
+ }
+
+ @FunctionalInterface
+ interface JpegDataCallbackGeneral extends StdCallCallback {
+ void invoke(Pointer hHandle, int mCh, Pointer pBuffer, int size, Pointer userdata);
+ }
+
+ // ─── 温度 ──────────────────────────────────────────────────────────
+
+ /**
+ * 测温回调
+ * @param hHandle 连接句柄
+ * @param fTemperature 温度数据地址(大小为图像宽*高, 单位K)
+ * @param uWidth 图像宽
+ * @param uHeight 图像高
+ * @param tempSpan 温跨
+ * @param context 用户上下文
+ * @see IRNET_ClientRegTempCallBack
+ */
+ @FunctionalInterface
+ interface TempCallback extends StdCallCallback {
+ void invoke(Pointer hHandle, Pointer fTemperature, int uWidth, int uHeight,
+ IRNetSDKStruct.DEV_TEMP_SPAN tempSpan, Pointer context);
+ }
+
+ @FunctionalInterface
+ interface RawCallback extends StdCallCallback {
+ void invoke(Pointer data, int width, int height, Pointer context);
+ }
+
+ // ─── 视频/音频原始码流 ──────────────────────────────────────────────
+
+ @FunctionalInterface
+ interface OriginalVideoCallback extends StdCallCallback {
+ void invoke(Pointer pbuff, int headsize, int datasize, int timetick,
+ int biskeyframe, Pointer context);
+ }
+
+ @FunctionalInterface
+ interface OriginalAudioCallback extends StdCallCallback {
+ void invoke(Pointer pbuff, int headsize, int datasize, int timetick,
+ int biskeyframe, Pointer context);
+ }
+
+ // ─── 入侵检测 ──────────────────────────────────────────────────────
+
+ @FunctionalInterface
+ interface IntrDetectCallback extends StdCallCallback {
+ void invoke(Pointer hHandle,
+ IRNetSDKStruct.LI_INTRUSION_AREA pArea, int areaCount);
+ }
+
+ @FunctionalInterface
+ interface TargetFilterCallback extends StdCallCallback {
+ void invoke(Pointer hHandle, int targetWidth, int targetHeight, Pointer context);
+ }
+
+ // ─── 人头检测 ──────────────────────────────────────────────────────
+
+ @FunctionalInterface
+ interface HeadAreaCallback extends StdCallCallback {
+ void invoke(Pointer handle, IRNetSDKStruct.VSNET_HEADAREA headArea,
+ int headAreaCnt, Pointer context);
+ }
+
+ // ─── 二次标定 ──────────────────────────────────────────────────────
+
+ @FunctionalInterface
+ interface SecondCalibTmCallback extends StdCallCallback {
+ void invoke(Pointer hHandle, int mCh, int statusCode, Pointer userdata);
+ }
+
+ // ─── 升级 ──────────────────────────────────────────────────────────
+
+ @FunctionalInterface
+ interface UpRomCallback extends StdCallCallback {
+ void invoke(Pointer upromhandle, int upromresult, Pointer userdata);
+ }
+
+ @FunctionalInterface
+ interface UpFlashCallback extends StdCallCallback {
+ void invoke(Pointer upflashhandle, int upflashresult, Pointer userdata);
+ }
+
+ // ─── 完成回调 ──────────────────────────────────────────────────────
+
+ @FunctionalInterface
+ interface FinishCallback extends StdCallCallback {
+ void invoke(int status, String url, String sername, String username,
+ short wserport, Pointer context);
+ }
+
+ // ─── 转发器用户校验 ────────────────────────────────────────────────
+
+ @FunctionalInterface
+ interface UserCheckCallback extends StdCallCallback {
+ int invoke(String url, String username, String password);
+ }
+
+ @FunctionalInterface
+ interface UserConnectCallback extends StdCallCallback {
+ int invoke(String sername, int channel, boolean bStart, String userurl,
+ String username, String password, int transtype, Pointer handle);
+ }
+}
diff --git a/src/main/java/com/inspect/nvr/jna/lincseek/IRNetSDKConst.java b/src/main/java/com/inspect/nvr/jna/lincseek/IRNetSDKConst.java
new file mode 100644
index 0000000..99f037d
--- /dev/null
+++ b/src/main/java/com/inspect/nvr/jna/lincseek/IRNetSDKConst.java
@@ -0,0 +1,808 @@
+package com.inspect.nvr.jna.lincseek;
+
+/**
+ * IRNetSDK JNA 映射 — 常量、枚举、宏定义。
+ * 与 VSNETStructDef.h 及 IRNet.h 中定义对应。
+ */
+public interface IRNetSDKConst {
+
+ // ─────────────────────────────────────────────────────────────────────
+ // 消息类型(CCICallback 中的 wParam)— IRNet.h
+ // ─────────────────────────────────────────────────────────────────────
+ int LAUMSG_LINKMSG = 1; // 连接服务器连接消息
+ int LAUMSG_ALARM = 4; // 传感器报警
+ int LAUMSG_OUTPUTSTATUS = 5; // 报警输出状态
+ int LAUMSG_SERVERRECORD = 11; // 服务器录像状态
+ int LAUMSG_DISKFULL = 23; // 硬盘满
+ int LAUMSG_DISKERROR = 24; // 硬盘错误
+ int LAUMSG_ACCESSVIOLATION = 25; // 非法访问
+ int LAUMSG_SERSTART = 26; // 服务器启动
+ int LAUMSG_SERSTOP = 27; // 服务器停止
+ int LAUMSG_UPDATESTREAMINFO = 30; // 更新码流信息
+ int LAUMSG_ALARMMSG_GLOBAL_TEMP = 117; // 全局测温报警
+ int LAUMSG_ALARMMSG_REGION_TEMP = 118; // 区域测温报警
+ int LAUMSG_ALARMMSG_IN = 119; // 报警输入
+ int LAUMSG_IR_HIGHT_ALARM = 9001; // 红外高温报警
+ int LAUMSG_IR_LOW_ALARM = 9002; // 红外低温报警
+ int LAUMSG_ALARMMSG_FIRE = 9003; // 火警
+ int LAUMSG_ALARMMSG_TEMPDIFF = 9004; // 温度对比报警
+ int LAUMSG_ALARMMSG_ITELLIGENT_ANALYSIS = 9005; // 智能分析
+ int LAUMSG_ALARMMSG_BH_SECURITE_FIRE = 9006; // BH安消一体
+ int LAUMSG_ALARMMSG_GRIDS_TEMP = 9007; // GRIDS报警
+
+ // ─────────────────────────────────────────────────────────────────────
+ // VSNet 报警消息类型 — VSNETStructDef.h
+ // ─────────────────────────────────────────────────────────────────────
+ int VSNETALARMMSG_SERSTART = 1; // 服务器启动
+ int VSNETALARMMSG_MOTION = 2; // 移动侦测报警
+ int VSNETALARMMSG_VIDEOLOST = 3; // 视频丢失报警
+ int VSNETALARMMSG_SENSOR = 4; // 传感器报警
+ int VSNETALARMMSG_DISKFULL = 5; // 硬盘满报警
+ int VSNETALARMMSG_HIDEALARM = 6; // 视频遮挡报警
+ int VSNETALARMMSG_SERSTOP = 7; // 服务器停止
+ int VSNETALARMMSG_DISKERROR = 8; // 硬盘错误报警(SMART)
+ int VSNETALARMMSG_ACCESSVIOLATION = 9; // 非法访问
+ int VSNETALARMMSG_ANALYSESINGLELINEALARM = 11; // 智能分析单线报警
+ int VSNETALARMMSG_ANALYSEDOUBLELINEALARM = 12; // 智能分析双线报警
+ int VSNETALARMMSG_ANALYSEREGIONENTRYALARM = 13; // 智能分析进入区域报警
+ int VSNETALARMMSG_ANALYSEREGIONEXITALARM = 14; // 智能分析离开区域报警
+ int VSNETALARMMSG_ANALYSEHOVERALARM = 15; // 智能分析徘徊区域报警
+ int VSNETALARMMSG_NETANOMALYALARM = 16; // 网络异常报警
+ int VSNETALARMMSG_NVR_PUSENSOR = 17; // NVR PU传感器报警
+ int VSNETALARMMSG_DISKLOST = 18; // 硬盘丢失报警
+ int VSNETALARMMSG_ALARM_IN_SHUT = 34; // 传感器报警停止
+ int VSNETALARMMSG_SGLINEALARM = 100; // 智能分析警戒线报警 (>=100且<=109, 目前有10条警戒线规则)
+ int VSNETALARMMSG_NODISK = 110; // 无硬盘
+ int VSNETALARMMSG_NET_BROKEN = 111; // 网线断开
+ int VSNETALARMMSG_DISKUNHEALTH = 112; // 硬盘不健康
+ int VSNETALARMMSG_PLATECHECK = 113; // 车牌检测报警
+ int VSNETALARMMSG_FR_NETOFF = 114; // 前端设备网络断开报警
+ int VSNETALARMMSG_FR_IPUPDATE = 115; // 前端设备IP地址更新报警
+ int VSNETALARMMSG_IPUPDATE = 116; // 设备IP地址更新报警
+ int VSNETALARMMSG_GLOBAL_TEMP = 117; // 全局温度报警
+ int VSNETALARMMSG_REGION_TEMP = 118; // 区域温度报警
+ int VSNETALARMMSG_ALARM_IN = 119; // 报警输入
+ int VSNETALARMMSG_IPCONFLICT = 120; // IP冲突
+ int VSNETALARMMSG_USBSTATE = 200; // DX USB状态 0:插入 1:拔出
+ int VSNETALARMMSG_AUDIOCH = 201; // DX音频通道
+ int VSNETALARMMSG_DXSWITCHCH = 202; // DX切换通道
+ int VSNETALARMMSG_DVDSTATE = 203; // DX DVD状态 0:插入 1:拔出
+ int VSNETALARMMSG_DISPDVDINFO = 204; // DX通知显示DVD信息
+ int VSNETALARMMSG_HM_INFRARED = 301; // 红外对射报警
+ int VSNETALARMMSG_HM_DEMOLITION = 302; // 防拆报警
+ int VSNETALARMMSG_IR_HIGH_TEMPERATURE_ALARM = 401; // 红外高温报警
+ int VSNETALARMMSG_IR_LOW_TEMPERATURE_ALARM = 402; // 红外低温报警
+ int VSNETALARMMSG_FIRE = 403; // 火警
+ int VSNETALARMMSG_TEMPDIFF = 404; // 温度对比报警
+ int VSNETALARMMSG_SMART_ANALYSIS = 405; // 智能分析报警
+ int VSNETALARMMSG_THRESHOLD = 406; // 阈值报警
+ int VSNETALARMMSG_REGION_THRESHOLD = 407; // 区域阈值报警
+ int VSNETALARMMSG_FRAME_THRESHOLD = 408; // 帧阈值报警
+ int VSNETALARMMSG_BH_SECURITY_FIRE = 409; // 安消一体报警
+ int VSNETALARMMSG_GRIDS_TEMP = 410; // 网格温度报警
+
+ // ─────────────────────────────────────────────────────────────────────
+ // 录像类型 — VSNETStructDef.h
+ // ─────────────────────────────────────────────────────────────────────
+ int HDISK_RECTYPE_HAND = (1 << 0); // 手动
+ int HDISK_RECTYPE_TIMER = (1 << 1); // 定时
+ int HDISK_RECTYPE_MOTION = (1 << 2); // 移动侦测
+ int HDISK_RECTYPE_ALARM = (1 << 3); // 报警
+ int HDISK_RECTYPE_VILOST = (1 << 4); // 视频丢失
+ int HDISK_RECTYPE_VIHIDE = (1 << 5); // 视频遮挡
+ int HDISK_RECTYPE_OTHER = (1 << 6); // 其他
+ int HDISK_RECTYPE_BACKUP = (1 << 7); // 备份
+ int HDISK_RECTYPE_NETANOMALY = (1 << 8); // 网络异常
+ int HDISK_RECTYPE_PLATE = (1 << 9); // 车牌识别触发抓拍
+ int HDISK_RECTYPE_TEMP = (1 << 10); // 全局测温和高温报警
+ int HDISK_RECTYPE_SMART_ANALYSIS = (1 << 11); // 智能分析报警
+ int HDISK_RECTYPE_MQTT_NARI = (1 << 12); // NARI通过MQTT下发snapShot指令
+ int HDISK_RECTYPE_THRESHOLD = (1 << 13); // 阈值测温报警
+ int HDISK_RECTYPE_TEMPDIFF = (1 << 14); // 温度对比报警
+ int HDISK_RECTYPE_MASK = 0xff; // 录像掩码
+
+ // ─────────────────────────────────────────────────────────────────────
+ // 设备类型 — VSNETStructDef.h
+ // ─────────────────────────────────────────────────────────────────────
+ int DEVICE_DVS = 0x01; // 视频服务器
+ int DEVICE_DVR = 0x02; // 硬盘录像机
+ int DEVICE_IPC = 0x03; // 网络摄像机
+ int DEVICE_NVR = 0x04; // 网络录像机
+
+ // ─────────────────────────────────────────────────────────────────────
+ // 用户权限 — VSNETStructDef.h
+ // ─────────────────────────────────────────────────────────────────────
+ int VSNET_USER_RIGHT_ADMIN = 1; // 管理员权限
+ int VSNET_USER_RIGHT_HIOPER = 2; // 高级操作员
+ int VSNET_USER_RIGHT_OPERIAL = 3; // 操作员
+
+ // ─────────────────────────────────────────────────────────────────────
+ // 最大数量限制 — VSNETStructDef.h
+ // ─────────────────────────────────────────────────────────────────────
+ int VSNET_DVR_MAXCH = 64; // 最大通道数
+ int VSNET_DVR_MAXALARMOUT = 16; // 最大报警输出数
+ int VSNET_DVR_MAXTRACKNUM = 16; // 最大轨道数
+ int VSNET_DVR_MAXVONUM = 8; // 最大VO数
+ int VSNET_DVR_MAXSTM = 4; // 最大码流数
+ int VSNET_OSDTITLE_NUM = 6; // OSD标题最大数
+ int VSNET_CAPTURE_OSDSTR_LENTH = 60; // 抓图OSD字符串最大长度
+ int VSNET_NETCFG_IPV6LEN = 48; // IPv6配置长度
+ int VSNET_DVR_GUI_PORT = 10000; // DVR GUI内部通信端口
+ int TEMP_AREA_NUM = 1; // 测温区域数量
+ int MAX_OSDSTRLEN = 200; // OSD字符串最大长度
+ int REGIONTEMPNUM = 8; // 区域测温数量
+ int ALARM_LEVEL_NUM = 5; // 报警等级数
+ int MAX_SSIDNUM = 40; // WiFi SSID最大数量
+ int MAX_FILE_DATA = 10; // 文件数据最大数
+ int LOG_MAX_NUM = 2500; // 日志最大条数
+
+ // ─────────────────────────────────────────────────────────────────────
+ // 云台控制码 — VSNETStructDef.h (enum PTZCtrlCode)
+ // ─────────────────────────────────────────────────────────────────────
+ int PTZ_LEFT = 0; // 左
+ int PTZ_RIGHT = 1; // 右
+ int PTZ_UP = 2; // 上
+ int PTZ_DOWN = 3; // 下
+ int PTZ_IRISADD = 4; // 光圈+
+ int PTZ_IRISDEC = 5; // 光圈-
+ int PTZ_FOCUSADD = 6; // 聚焦+
+ int PTZ_FOCUSDEC = 7; // 聚焦-
+ int PTZ_ZOOMADD = 8; // 变倍+
+ int PTZ_ZOOMDEC = 9; // 变倍-
+ int PTZ_GOTOPOINT = 10; // 转到预置点
+ int PTZ_SETPOINT = 11; // 设置预置点
+ int PTZ_AUTO = 12; // 自动
+ int PTZ_STOP = 13; // 停止
+ int PTZ_LEFTSTOP = 14; // 左停止
+ int PTZ_RIGHTSTOP = 15; // 右停止
+ int PTZ_UPSTOP = 16; // 上停止
+ int PTZ_DOWNSTOP = 17; // 下停止
+ int PTZ_IRISADDSTOP = 18; // 光圈+停止
+ int PTZ_IRISDECSTOP = 19; // 光圈-停止
+ int PTZ_FOCUSADDSTOP = 20; // 聚焦+停止
+ int PTZ_FOCUSDECSTOP = 21; // 聚焦-停止
+ int PTZ_ZOOMADDSTOP = 22; // 变倍+停止
+ int PTZ_ZOOMDECSTOP = 23; // 变倍-停止
+ int PTZ_LIGHT = 24; // 灯光
+ int PTZ_LIGHTSTOP = 25; // 灯光停止
+ int PTZ_RAIN = 26; // 雨刷
+ int PTZ_RAINSTOP = 27; // 雨刷停止
+ int PTZ_TRACK = 28; // 跟踪
+ int PTZ_TRACKSTOP = 29; // 跟踪停止
+ int PTZ_DEVOPEN = 30; // 设备打开
+ int PTZ_DECCLOSE = 31; // 解码器关闭
+ int PTZ_AUTOSTOP = 32; // 自动停止
+ int PTZ_CLEARPOINT = 33; // 清除预置点
+ int PTZ_LEFTUP = 200; // 左上
+ int PTZ_LEFTUPSTOP = 201; // 左上停止
+ int PTZ_RIGHTUP = 202; // 右上
+ int PTZ_RIGHTUPSTOP = 203; // 右上停止
+ int PTZ_LEFTDOWN = 204; // 左下
+ int PTZ_LEFTDOWNSTOP = 205; // 左下停止
+ int PTZ_RIGHTDOWN = 206; // 右下
+ int PTZ_RIGHTDOWNSTOP = 207; // 右下停止
+ int PTZ_LOOP_START = 208; // 开始预置点巡航; value 巡航线路; priority 巡航时间(0,5-1800)
+ int PTZ_LOOP_STOP = 209; // 停止预置点巡航; value 巡航线路
+
+ // ─────────────────────────────────────────────────────────────────────
+ // 硬盘状态
+ // ─────────────────────────────────────────────────────────────────────
+ int HDISK_UNFORMATTED = 0; // 未格式化
+ int HDISK_FORMATTING = 1; // 格式化中
+ int HDISK_FORMATFINISH = 2; // 格式化完成
+
+ // ─────────────────────────────────────────────────────────────────────
+ // FTP连接状态
+ // ─────────────────────────────────────────────────────────────────────
+ int VS_FTP_LINK_OFF = 0; // 连接关闭
+ int VS_FTP_LINK_SUCCESS = 1; // 连接成功
+ int VS_FTP_LINK_FAIL = 2; // 连接失败
+
+ // ─────────────────────────────────────────────────────────────────────
+ // 视频分辨率 — VSNETStructDef.h (enum ENUM_VSNET_VIDEO_RESOLUTION)
+ // ─────────────────────────────────────────────────────────────────────
+ int VSNET_VIDEO_RESOLUTION_QCIF = 0; // 176*144
+ int VSNET_VIDEO_RESOLUTION_CIF = 1; // 352*288
+ int VSNET_VIDEO_RESOLUTION_2CIF = 2; // 704*288
+ int VSNET_VIDEO_RESOLUTION_4CIF = 3; // 704*576 (D1)
+ int VSNET_VIDEO_RESOLUTION_DCIF = 4; // 528*384
+ int VSNET_VIDEO_RESOLUTION_QVGA = 5; // 320*240
+ int VSNET_VIDEO_RESOLUTION_VGA_60HZ = 6; // 640*480
+ int VSNET_VIDEO_RESOLUTION_SVGA_60HZ = 7; // 800*600
+ int VSNET_VIDEO_RESOLUTION_XGA_60HZ = 8; // 1024*768
+ int VSNET_VIDEO_RESOLUTION_SXGA_60HZ = 9; // 1280*1024
+ int VSNET_VIDEO_RESOLUTION_UXGA_60HZ = 10; // 1600*1200
+ int VSNET_VIDEO_RESOLUTION_720P = 11; // 1280*720
+ int VSNET_VIDEO_RESOLUTION_HDTV = 12; // 1920*1080
+ int VSNET_VIDEO_RESOLUTION_SVGA_75HZ = 13; // 800*600
+ int VSNET_VIDEO_RESOLUTION_XGA_75HZ = 14; // 1024*768
+ int VSNET_VIDEO_RESOLUTION_720P_50HZ = 15; // 1280*720 50Hz
+ int VSNET_VIDEO_RESOLUTION_720P_60HZ = 16; // 1280*720 60Hz
+ int VSNET_VIDEO_RESOLUTION_1080P_50HZ = 17; // 1920*1080 50Hz
+ int VSNET_VIDEO_RESOLUTION_1080P_60HZ = 18; // 1920*1080 60Hz
+ int VSNET_VIDEO_RESOLUTION_LTF = 19; // 240*192
+ int VSNET_VIDEO_RESOLUTION_WQVGA1 = 20; // 480*352
+ int VSNET_VIDEO_RESOLUTION_WQVGA2 = 21; // 480*272
+ int VSNET_VIDEO_RESOLUTION_UVGA_50HZ = 22; // 1280*960 50Hz
+ int VSNET_VIDEO_RESOLUTION_UVGA_60HZ = 23; // 1280*960 60Hz
+ int VSNET_VIDEO_RESOLUTION_1080P_30HZ = 24; // 1920*1080 30Hz
+ int VSNET_VIDEO_RESOLUTION_1080I_50HZ = 25; // 1920*1080 50Hz
+ int VSNET_VIDEO_RESOLUTION_1080I_60HZ = 26; // 1920*1080 60Hz
+ int VSNET_VIDEO_RESOLUTION_SXGA_75HZ = 27; // 1280*1024 75Hz
+ int VSNET_VIDEO_RESOLUTION_WXGA_60HZ = 28; // 1280*800 60Hz
+ int VSNET_VIDEO_RESOLUTION_WXGA_75HZ = 29; // 1280*800 75Hz
+ int VSNET_VIDEO_RESOLUTION_SXGAP_60HZ = 30; // 1400*1050 60Hz (SXGA+)
+ int VSNET_VIDEO_RESOLUTION_SXGAP_75HZ = 31; // 1400*1050 75Hz (SXGA+)
+ int VSNET_VIDEO_RESOLUTION_WXGAP_60HZ = 32; // 1440*900 60Hz (WXGA+)
+ int VSNET_VIDEO_RESOLUTION_WSXGAP_60HZ = 33; // 1680*1050 60Hz (WSXGA+)
+ int VSNET_VIDEO_RESOLUTION_WSUVGAP_60HZ = 34; // 1920*1080 60Hz (WSUVGA+)
+ int VSNET_VIDEO_RESOLUTION_1366X768_60HZ = 35; // 1366*768 60Hz
+ int VSNET_VIDEO_RESOLUTION_WXGA_59HZ = 36; // 1280*800 59Hz
+ int VSNET_VIDEO_RESOLUTION_1280X720_59HZ = 37; // 1280*720 59Hz
+ int VSNET_VIDEO_RESOLUTION_1360X768_60HZ = 38; // 1360*768 60Hz
+
+ // ─────────────────────────────────────────────────────────────────────
+ // 抓图错误码
+ // ─────────────────────────────────────────────────────────────────────
+ int EN_CEC_SUCCESS = 0x10; // 成功
+ int EN_CEC_PARAM_INVALID = 0x11; // 参数无效
+ int EN_CEC_PATH_INVALID = 0x12; // 文件路径无效
+ int EN_CEC_MEM_NOT_ENOUGH_RAW = 0x13; // 内存不够存储raw数据
+ int EN_CEC_WRITE_RAW = 0x14; // 写入raw数据失败
+ int EN_CEC_MEM_NOT_ENOUGH_VIS = 0x15; // 内存不够存可见光数据
+ int EN_CEC_WRITE_VIS = 0x16; // 写入可见光数据失败
+ int EN_CEC_MEM_NOT_ENOUGH_PRE = 0x17; // 内存不够存预览数据
+ int EN_CEC_WRITE_PRE = 0x18; // 写入预览数据失败
+ int EN_CEC_WRITE_SENSOR_INFO = 0x19; // 写入传感器信息失败
+ int EN_CEC_WRITE_CALIB_INFO = 0x1a; // 写入校准信息失败
+ int EN_CEC_WRITE_ENV_INFO = 0x1b; // 写入环境信息失败
+ int EN_CEC_WRITE_PALETTE_INFO = 0x1C; // 写入调色板信息失败
+ int EN_CEC_WRITE_STRENGTH_INFO = 0x1D; // 写入强度信息失败
+ int EN_CEC_COLLECT_FILE_INFO = 0x1E; // 写入采集文件信息失败
+ int EN_CEC_MEM_NOT_ENOUGH = 0x1F; // 内存不足
+ int EN_CEC_DECODE_TEMPERATURE = 0x20; // 解析温度失败
+ int EN_CEC_UNDEFINE = 0x21; // 未知错误
+
+ // ─────────────────────────────────────────────────────────────────────
+ // 文件类型
+ // ─────────────────────────────────────────────────────────────────────
+ int EN_FT_SDK_LCR = 0; // LCR红外图
+ int EN_FT_SDK_CHANNEL_JPG = 1; // 通道JPG
+ int EN_FT_SDK_CHANNEL_BMP = 2; // 通道BMP
+
+ // ─────────────────────────────────────────────────────────────────────
+ // 调色板模式
+ // ─────────────────────────────────────────────────────────────────────
+ int DEV_PALETE_WHITEHOT = 0; // 白热
+ int DEV_PALETE_BLACKHOT = 1; // 黑热
+ int DEV_PALETE_FUSION = 2; // 融合
+ int DEV_PALETE_HOTMETAL = 2; // HOTMETAL
+ int DEV_PALETE_RAINBOW = 3; // 彩虹
+ int DEV_PALETE_GLOBOW = 4; // GLOBOW
+ int DEV_PALETE_IRON = 5; // 铁红
+ int DEV_PALETE_IRON2 = 6; // IRON2
+ int DEV_PALETE_SEPIA = 7; // SEPIA
+ int DEV_PALETE_COLOR = 8; // COLOR
+ int DEV_PALETE_COLOR2 = 9; // COLOR2
+ int DEV_PALETE_ICEFIRE = 10; // ICEFIRE
+ int DEV_PALETE_RAIN = 11; // RAIN
+ int DEV_PALETE_REDHOT = 12; // 红热
+ int DEV_PALETE_GREENHOT = 13; // 绿热
+ int DEV_PALETE_GREYRED = 14; // 灰红
+ int DEV_PALETE_LAVA = 15; // 熔岩
+ int DEV_PALETE_INSTALERT = 16; // InstAlert
+ int DEV_PALETE_ARCTIC = 17; // 北极
+
+ // ─────────────────────────────────────────────────────────────────────
+ // 录像文件格式
+ // ─────────────────────────────────────────────────────────────────────
+ int RECDT_INVALID = 10; // 录像格式无效
+ int RECDT_AUTO_BY_FILE_NAME = 11; // 根据文件名自动判断文件格式
+ int RECDT_PRIVATE_MP4 = 12; // 私有mp4文件(只能用私有播放器播放)
+ int RECDT_MP4 = 13; // MP4
+ int RECDT_MOV = 14; // MOV
+ int RECDT_ASF = 15; // ASF
+ int RECDT_AVI = 16; // AVI
+
+ // ─────────────────────────────────────────────────────────────────────
+ // 融合视图模式
+ // ─────────────────────────────────────────────────────────────────────
+ int EN_MODE_VIS = 1; // 可见光视图
+ int EN_MODE_FUSION = 2; // 融合视图
+
+ // ─────────────────────────────────────────────────────────────────────
+ // 设备校准类型
+ // ─────────────────────────────────────────────────────────────────────
+ int EN_DCT_TEMP = 0x40; // 校准温度
+ int EN_DCT_K = 0x41; // K值
+ int EN_DCT_SENSOR = 0x42; // Sensor
+ int EN_DCT_BLIND = 0x43; // 盲元
+ int EN_DCT_TABLE_TEMP = 0x44; // 温度表
+ int EN_DCT_B = 0x45; // B值
+ int EN_DCT_COMPENSATE = 0x46; // 非均匀性补偿
+
+ // ─────────────────────────────────────────────────────────────────────
+ // 智能分析类型
+ // ─────────────────────────────────────────────────────────────────────
+ int EN_IAT_INVALID = 0; // 无效
+ int EN_IAT_CORDON = 1; // 警戒线
+ int EN_IAT_REGION_ENTRY = 2; // 进入区域
+ int EN_IAT_REGION_LEAVE = 3; // 离开区域
+ int EN_IAT_GOODS_LEFT = 4; // 物品遗留
+ int EN_IAT_GOODS_MOVE = 5; // 物品搬移
+ int EN_IAT_TARFILTER_MIN = 6; // 过滤目标-最小尺寸
+ int EN_IAT_TARFILTER_MAX = 7; // 过滤目标-最大尺寸
+ int EN_IAT_REGIONSHIELD = 8; // 区域屏蔽
+
+ // ─────────────────────────────────────────────────────────────────────
+ // 人体校准状态
+ // ─────────────────────────────────────────────────────────────────────
+ int HUMANCALI_COMPLETE = 0; // 完成
+ int HUMANCALI_FFC_IMMINENT = 1; // FFC即将开始
+ int HUMANCALI_WAIT_FOR_COLLECT_DATA = 2; // 等待采集数据
+ int HUMANCALI_COLLECT_DATA_IN_PROGRESS = 3; // 采集数据中
+ int HUMANCALI_CALC_IN_PROGRESS = 4; // 计算中
+
+ // ─────────────────────────────────────────────────────────────────────
+ // 人体校准错误码
+ // ─────────────────────────────────────────────────────────────────────
+ int HUMANCALI_SUCCESS = 0; // 成功
+ int HUMANCALI_FAIL = 1; // 失败
+ int HUMANCALI_BUSY = 2; // 忙
+ int HUMANCALI_TFPA_INSTABILITY = 3; // FPA不稳定
+ int HUMANCALI_COLLECT_DATA_FAIL = 4; // 采集数据失败
+ int HUMANCALI_CALC_FAIL = 5; // 计算失败
+ int HUMANCALI_OBJTEMP_ERROR = 6; // 目标温度错误
+ int HUMANCALI_RAW_INSTABILITY = 7; // Raw不稳定
+
+ // ─────────────────────────────────────────────────────────────────────
+ // 人头框尺寸类型
+ // ─────────────────────────────────────────────────────────────────────
+ int HEADBOX_SIZE_BY_AREA = 0; // 按面积
+ int HEADBOX_SIZE_BY_WIDTH = 1; // 按宽度
+ int HEADBOX_SIZE_BY_HEIGHT = 2; // 按高度
+
+ /**
+ * MessageOpt 命令码 — IRNET_ClientMessageOpt 的 opt 参数。
+ * 共 437 个命令,用于读写设备各项配置参数。
+ */
+ interface MessageOpt {
+ int MESSAGE_SERVERCHS = 1; // 查询通道(探头号)以及数据流数目
+ int MESSAGE_CMD_RESET = 2; // 重启服务器
+ int MESSAGE_CMD_GETGLOBALPARAM = 3; // 获取全局参数
+ int MESSAGE_CMD_SETGLOBALPARAM = 4; // 设置全局参数
+ int MESSAGE_GETCHANNELPARAM = 5; // 获取通道参数
+ int MESSAGE_SETCHANNELPARAM = 6; // 设置通道参数
+ int MESSAGE_CMD_PARAMDEFAULT = 7; // 恢复设备默认参数(普通)
+ int MESSAGE_CMD_GETSERIAL = 8; // 获取串口参数
+ int MESSAGE_CMD_SETSERIAL = 9; // 设置串口参数
+ int MESSAGE_CMD_GETSYSTIME = 10; // 获取系统时间
+ int MESSAGE_CMD_SETSYSTIME = 11; // 设置系统时间
+ int MESSAGE_CMD_GETSERIALNO = 12; // 获取设备序列号
+ int MESSAGE_CMD_GETSYSUSER = 13; // 获取服务器端用户
+ int MESSAGE_CMD_SETSYSUSER = 14; // 设置服务器端用户
+ int MESSAGE_CMD_OUTPUTCTRL = 15; // 控制报警输出(用户操作)
+ int MESSAGE_CMD_OUTPUTSTATUS = 16; // 报警输出状态
+ int MESSAGE_CMD_PTZCMDFILE = 17; // 加载云台控制协议配置文件
+ int MESSAGE_CMD_PTZCMDNAME = 18; // 获取云台控制协议文件名
+ int MESSAGE_CMD_SETSUBCHANNELPARAM = 19; // 设置服务器的子通道参数
+ int MESSAGE_CMD_CAPTUREJPEG = 20; // 远程JPEG抓图(图像暂存于设备)
+ int MESSAGE_CMD_GETDISKSTATE = 21; // 获取硬盘状态
+ int MESSAGE_CMD_FORMATDISK = 22; // 格式化硬盘
+ int MESSAGE_CMD_ENCKEYFRAME = 23; // 使服务器产生一个I帧
+ int MESSAGE_CMD_GETPPPOEPARAM = 24; // 获取PPPOE参数
+ int MESSAGE_CMD_SETPPPOEPARAM = 25; // 设置PPPOE参数
+ int MESSAGE_CMD_GETSERIAL232 = 26; // 获取RS232参数
+ int MESSAGE_CMD_SETSERIAL232 = 27; // 设置RS232参数
+ int MESSAGE_CMD_GETDHCP = 28; // 获取DHCP参数
+ int MESSAGE_CMD_SETDHCP = 29; // 设置DHCP参数
+ int MESSAGE_CMD_GETUPNPCFG = 30; // 获取UPNP配置参数
+ int MESSAGE_CMD_SETUPNPCFG = 31; // 设置UPNP配置参数
+ int MESSAGE_CMD_GETUPNPSTATUS = 32; // 获取UPNP状态
+ int MESSAGE_CMD_GETMAILCFG = 33; // 获取邮件服务器信息
+ int MESSAGE_CMD_SETMAILCFG = 34; // 设置邮件服务器信息
+ int MESSAGE_CMD_GETTIMERCAP = 35; // 获取定时抓图参数
+ int MESSAGE_CMD_SETTIMERCAP = 36; // 设置定时抓图参数
+ int MESSAGE_CMD_GETSYSSUPPORTEX = 37; // 获取系统扩展支持信息
+ int MESSAGE_CMD_GETDVRSENSORALARM = 38; // 获取DVR探头报警参数
+ int MESSAGE_CMD_SETDVRSENSORALARM = 39; // 设置DVR探头报警参数
+ int MESSAGE_CMD_GETENCODETYPE = 40; // 获取编码参数
+ int MESSAGE_CMD_SETENCODETYPE = 41; // 设置编码参数
+ int MESSAGE_CMD_MAILTEST = 42; // 邮件测试
+ int MESSAGE_CMD_GETRTSPPARAMEX = 43; // 获取RTSP参数
+ int MESSAGE_CMD_SETRTSPPARAMEX = 44; // 设置RTSP参数
+ int MESSAGE_CMD_GETTIMEZONE = 45; // 获取服务器时区参数
+ int MESSAGE_CMD_SETTIMEZONE = 46; // 设置服务器时区参数
+ int MESSAGE_CMD_GETCHANNELOSD_EX = 47; // 获取OSD参数(扩展)
+ int MESSAGE_CMD_SETCHANNELOSD_EX = 48; // 设置OSD参数(扩展)
+ int MESSAGE_CMD_GETFLASHINFO = 49; // 获取Flash版本信息
+ int MESSAGE_CMD_GETUPNPPORTINFO = 50; // 获取UPNP端口信息
+ int MESSAGE_CMD_SET_FFCCTRL = 51; // 快门控制
+ int MESSAGE_CMD_GET_CAPTURETYPE = 52; // 获取抓图类型
+ int MESSAGE_CMD_SET_CAPTURETYPE = 53; // 设置抓图类型
+ int MESSSGE_CMD_GET_OSDPARAM = 54; // 获取OSD参数
+ int MESSSGE_CMD_SET_OSDPARAM = 55; // 设置OSD参数
+ int MESSSGE_CMD_GET_IROSDPARAM = 56; // 获取红外OSD参数
+ int MESSSGE_CMD_SET_IROSDPARAM = 57; // 设置红外OSD参数
+ int MESSSGE_CMD_GET_REGIONTEMPPARAM = 58; // 获取区域测温参数(普通)
+ int MESSSGE_CMD_SET_REGIONTEMPPARAM = 59; // 设置区域测温参数(普通)
+ int MESSSGE_CMD_GET_REGIONTEMPALARM = 60; // 获取区域测温报警参数
+ int MESSSGE_CMD_SET_REGIONTEMPALARM = 61; // 设置区域测温报警参数
+ int MESSSGE_CMD_GET_REGIONTEMPVALUE = 62; // 获取区域测温温度值
+ int MESSSGE_CMD_GET_VIDEOOUTMODE = 63; // 获取视频输出模式
+ int MESSSGE_CMD_SET_VIDEOOUTMODE = 64; // 设置视频输出模式
+ int MESSSGE_CMD_GET_TEMPDATA = 65; // 获取温度数据
+ int MESSSGE_CMD_GET_GLOBALTEMPALARM = 66; // 获取全局测温报警参数
+ int MESSSGE_CMD_SET_GLOBALTEMPALARM = 67; // 设置全局测温报警参数
+ int MESSAGE_CMD_GET_IR_VIPARAM = 68; // 获取红外图像视频输入参数
+ int MESSAGE_CMD_SET_IR_VIPARAM = 69; // 设置红外图像视频输入参数
+ int MESSAGE_CMD_GET_IR_DDEPARAM = 70; // 获取红外图像DDE参数
+ int MESSAGE_CMD_SET_IR_DDEPARAM = 71; // 设置红外图像DDE参数
+ int MESSAGE_CMD_GET_IR_STRETCHMODE = 72; // 获取红外图像拉伸模式
+ int MESSAGE_CMD_SET_IR_STRETCHMODE = 73; // 设置红外图像拉伸模式
+ int MESSAGE_CMD_GET_TAUGAINMODE = 74; // 获取TAU增益模式
+ int MESSAGE_CMD_SET_TAUGAINMODE = 75; // 设置TAU增益模式
+ int MESSAGE_CMD_GET_GPSINFO = 76; // 获取GPS信息
+ int MESSAGE_CMD_SET_GPSINFO = 77; // 设置GPS信息
+ int MESSAGE_CMD_GETDVRSYSUSEREX = 78; // 获取设备用户信息
+ int MESSAGE_CMD_SETDVRSYSUSEREX = 79; // 设置设备用户信息
+ int MESSAGE_CMD_REC_REMOTE_BEG = 80; // 远程录像开始
+ int MESSAGE_CMD_REC_REMOTE_END = 81; // 远程录像结束
+ int MESSAGE_CMD_GET_MSDSTATUS = 82; // SD卡空间获取
+ int MESSAGE_CMD_GET_CAL_TEMP_IN_AREA = 83; // 获取框内温度
+ int MESSAGE_CMD_SET_CAL_TEMP_IN_AREA = 84; // 设置框内温度
+ int MESSAGE_CMD_GET_PWMUART_CFG = 85; // 获取电机参数
+ int MESSAGE_CMD_SET_PWMUART_CFG = 86; // 设置电机参数
+ int MESSAGE_CMD_GET_TEMP_ALARM_PARAM = 87; // 温度超限报警
+ int MESSAGE_CMD_SET_TEMP_ALARM_PARAM = 88; // 温度超限报警
+ int MESSAGE_CMD_GET_RADMET_PARAM = 89; // 辐射参数获取
+ int MESSAGE_CMD_SET_RADMET_PARAM = 90; // 辐射参数设置
+ int MESSAGE_CMD_GET_STILLCAPTURE = 91; // 定时抓图控制
+ int MESSAGE_CMD_SET_STILLCAPTURE = 92; // 定时抓图控制
+ int MESSAGE_CMD_GET_ALARM_INPUT_STATUS = 93; // 获取报警输入探头状态
+ int MESSAGE_CMD_GET_TEMPALARMCTRL = 94; // 测温报警控制
+ int MESSAGE_CMD_SET_TEMPALARMCTRL = 95; // 测温报警控制
+ int MESSAGE_CMD_GET_SDCARDFULLCTRL = 96; // SD卡满控制
+ int MESSAGE_CMD_SET_SDCARDFULLCTRL = 97; // SD卡满控制
+ int MESSAGE_CMD_GET_FIREPOINTPARAM = 98; // 获取火点参数
+ int MESSAGE_CMD_SET_FIREPOINTPARAM = 99; // 设置火点参数
+ int MESSAGE_CMD_GET_FIREPOINT = 100; // 获取火点
+ int MESSAGE_CMD_GET_FIREBEHAVIOURPARAM = 101; // 获取火警参数
+ int MESSAGE_CMD_SET_FIREBEHAVIOURPARAM = 102; // 设置火警参数
+ int MESSAGE_CMD_GET_FIREBEHAVIOUR = 103; // 获取火警
+ int MESSAGE_CMD_GET_OSD_REGION_TRANSPARENT_PARAM = 104; // OSD区域透明度参数
+ int MESSAGE_CMD_SET_OSD_REGION_TRANSPARENT_PARAM = 105; // OSD区域透明度参数
+ int MESSAGE_CMD_GET_BUZZER_ENABLE = 106; // 蜂鸣器使能
+ int MESSAGE_CMD_SET_BUZZER_ENABLE = 107; // 蜂鸣器使能
+ int MESSAGE_CMD_GETREMOTEHOST = 108; // 远程主机
+ int MESSAGE_CMD_SETREMOTEHOST = 109; // 远程主机
+ int MESSAGE_CMD_GET_REGIONTEMPALARMCTRL = 110; // 区域温度报警控制
+ int MESSAGE_CMD_SET_REGIONTEMPALARMCTRL = 111; // 区域温度报警控制
+ int MESSAGE_CMD_GET_TEMPMEASURETYPE = 112; // 测温类型的区域测温参数
+ int MESSAGE_CMD_SET_TEMPMEASURETYPE = 113; // 测温类型的区域测温参数
+ int MESSAGE_CMD_GET_AREATEMPCOMPARECTRL = 114; // 区域温度对比控制
+ int MESSAGE_CMD_SET_AREATEMPCOMPARECTRL = 115; // 区域温度对比控制
+ int MESSAGE_CMD_GET_REGIONOSDNAME = 116; // 区域名称OSD
+ int MESSAGE_CMD_SET_REGIONOSDNAME = 117; // 区域名称OSD
+ int MESSAGE_GETALARMPARAM = 118; // 报警参数
+ int MESSAGE_SETALARMPARAM = 119; // 报警参数
+ int MESSAGE_CMD_GETMOTIONPARAM = 120; // 移动侦测参数
+ int MESSAGE_CMD_SETMOTIONPARAM = 121; // 移动侦测参数
+ int MESSAGE_CMD_GETVIDEOMASK = 122; // 视频遮挡参数
+ int MESSAGE_CMD_SETVIDEOMASK = 123; // 视频遮挡参数
+ int MESSAGE_CMD_GETCHANNELOSD = 124; // 视频叠加参数
+ int MESSAGE_CMD_SETCHANNELOSD = 125; // 视频叠加参数
+ int MESSAGE_CMD_AFFIRMUSER = 126; // 验证用户
+ int MESSAGE_CMD_GETTIMEDRESET = 127; // 定时重启
+ int MESSAGE_CMD_SETTIMEDRESET = 128; // 定时重启
+ int MESSAGE_CMD_GETHIDEALARM = 129; // 遮挡报警
+ int MESSAGE_CMD_SETHIDEALARM = 130; // 遮挡报警
+ int MESSAGE_CMD_GETSUBCHANNELPARAM = 131; // 子通道参数
+ int MESSAGE_CMD_GETRECORDPARAM = 132; // 硬盘录像参数
+ int MESSAGE_CMD_SETRECORDPARAM = 133; // 硬盘录像参数
+ int MESSAGE_CMD_GETJPEGCAPPARAM = 134; // JPEG抓图参数
+ int MESSAGE_CMD_SETJPEGCAPPARAM = 135; // JPEG抓图参数
+ int MESSAGE_CMD_GETSENSORALARM = 136; // 探头报警
+ int MESSAGE_CMD_SETSENSORALARM = 137; // 探头报警
+ int MESSAGE_CMD_GETAUDIOPARAM = 138; // 音频参数
+ int MESSAGE_CMD_SETAUDIOPARAM = 139; // 音频参数
+ int MESSAGE_CMD_GETCDMAPARAM = 140; // CDMA参数
+ int MESSAGE_CMD_SETCDMAPARAM = 141; // CDMA参数
+ int MESSAGE_CMD_GETWIFIPARAM = 142; // WiFi参数
+ int MESSAGE_CMD_SETWIFIPARAM = 143; // WiFi参数
+ int MESSAGE_CMD_GETLINKCONFIG = 144; // 连接配置参数
+ int MESSAGE_CMD_SETLINKCONFIG = 145; // 连接配置参数
+ int MESSAGE_CMD_GETDDNSEXPARAM = 146; // DDNS连接参数
+ int MESSAGE_CMD_SETDDNSEXPARAM = 147; // DDNS连接参数
+ int MESSAGE_CMD_GETEXALARMPARAM = 148; // 外部报警参数
+ int MESSAGE_CMD_SETEXALARMPARAM = 149; // 外部报警参数
+ int MESSAGE_CMD_GETHUMITUREPRAM = 150; // 温湿度报警参数
+ int MESSAGE_CMD_SETHUMITUREPRAM = 151; // 温湿度报警参数
+ int MESSAGE_CMD_GETVIDEOOFFSET = 152; // 视频偏移量
+ int MESSAGE_CMD_SETVIDEOOFFSET = 153; // 视频偏移量
+ int MESSAGE_CMD_GETVIDEOMASKAREA = 154; // 视频遮挡区域
+ int MESSAGE_CMD_SETVIDEOMASKAREA = 155; // 视频遮挡区域
+ int MESSAGE_CMD_GETSNMPCONFIG = 156; // SNMP配置参数
+ int MESSAGE_CMD_SETSNMPCONFIG = 157; // SNMP配置参数
+ int MESSAGE_CMD_GETALARMSMS = 158; // 报警短信参数
+ int MESSAGE_CMD_SETALARMSMS = 159; // 报警短信参数
+ int MESSAGE_CMD_GETALARMTYPE = 160; // 探头类型
+ int MESSAGE_CMD_SETALARMTYPE = 161; // 探头类型
+ int MESSAGE_CMD_GETFTP = 162; // FTP信息
+ int MESSAGE_CMD_SETFTP = 163; // FTP信息
+ int MESSAGE_CMD_GETCCDPARAM = 164; // CCD参数
+ int MESSAGE_CMD_SETCCDPARAM = 165; // CCD参数
+ int MESSAGE_CMD_GETPLATFORMINFO = 166; // 平台信息
+ int MESSAGE_CMD_SETPLATFORMINFO = 167; // 平台信息
+ int MESSAGE_CMD_GETVI2VO = 168; // 图像环出使能
+ int MESSAGE_CMD_SETVI2VO = 169; // 图像环出使能
+ int MESSAGE_CMD_GETALARMFTPUPLOAD = 170; // 探头报警图片上传FTP参数
+ int MESSAGE_CMD_SETALARMFTPUPLOAD = 171; // 探头报警图片上传FTP参数
+ int MESSAGE_CMD_GETMOTIONCONTACTEX = 172; // 移动侦测报警联动扩展参数
+ int MESSAGE_CMD_SETMOTIONCONTACTEX = 173; // 移动侦测报警联动扩展参数
+ int MESSAGE_CMD_GETDVRMOTIONALARM = 174; // DVR移动侦测报警参数
+ int MESSAGE_CMD_SETDVRMOTIONALARM = 175; // DVR移动侦测报警参数
+ int MESSAGE_CMD_GETDVRHIDEALARM = 176; // DVR视频遮挡报警参数
+ int MESSAGE_CMD_SETDVRHIDEALARM = 177; // DVR视频遮挡报警参数
+ int MESSAGE_CMD_GETDVROTHERALARM = 178; // DVR其他报警参数
+ int MESSAGE_CMD_SETDVROTHERALARM = 179; // DVR其他报警参数
+ int MESSAGE_CMD_SETBKDISK = 180; // DVR备份硬盘
+ int MESSAGE_CMD_GETSMARTINFO = 181; // DVR硬盘SMART信息
+ int MESSAGE_CMD_GETVIEWPARAM = 182; // V0参数
+ int MESSAGE_CMD_SETVIEWPARAM = 183; // V0参数
+ int MESSAGE_CMD_GETLOOPVIEW = 184; // 轮巡控制参数
+ int MESSAGE_CMD_SETLOOPVIEW = 185; // 轮巡控制参数
+ int MESSAGE_CMD_GETDVRUSER = 186; // DVR用户信息
+ int MESSAGE_CMD_SETDVRUSER = 187; // DVR用户信息
+ int MESSAGE_CMD_GETDVRCHANNELOSD = 188; // DVR视频叠加参数
+ int MESSAGE_CMD_SETDVRCHANNELOSD = 189; // DVR视频叠加参数
+ int MESSAGE_CMD_GETVIDEOOFFSETEX = 190; // 视频偏移量(扩展)
+ int MESSAGE_CMD_SETVIDEOOFFSETEX = 191; // 视频偏移量(扩展)
+ int MESSAGE_CMD_GETDEVICEID = 192; // 设备ID
+ int MESSAGE_CMD_SETDEVICEID = 193; // 设备ID
+ int MESSAGE_CMD_GETKEYBOARDEX = 194; // 键盘参数
+ int MESSAGE_CMD_SETKEYBOARDEX = 195; // 键盘参数
+ int MESSAGE_CMD_GETCHOOSEPTZ = 196; // 选择云台
+ int MESSAGE_CMD_SETCHOOSEPTZ = 197; // 选择云台
+ int MESSAGE_CMD_GETDVRDOUBLEBITS = 198; // 双码流参数
+ int MESSAGE_CMD_SETDVRDOUBLEBITS = 199; // 双码流参数
+ int MESSAGE_CMD_GETPROTOCOLPARAM = 200; // 选择协议
+ int MESSAGE_CMD_SETPROTOCOLPARAM = 201; // 选择协议
+ int MESSAGE_CMD_GETFTPTIMEREC = 202; // FTP定时录像
+ int MESSAGE_CMD_SETFTPTIMEREC = 203; // FTP定时录像
+ int MESSAGE_CMD_GETSUBENCODETYPE = 204; // 子编码参数
+ int MESSAGE_CMD_SETSUBENCODETYPE = 205; // 子编码参数
+ int MESSAGE_CMD_GETPROLOOP = 206; // 预置点巡航
+ int MESSAGE_CMD_SETPROLOOP = 207; // 预置点巡航
+ int MESSAGE_CMD_GETAUDIOSILENT = 208; // 音频静音参数
+ int MESSAGE_CMD_SETAUDIOSILENT = 209; // 音频静音参数
+ int MESSAGE_CMD_GETDVRUSERSTATE = 210; // 用户状态
+ int MESSAGE_CMD_SETDVRUSERSTATE = 211; // 用户状态
+ int MESSAGE_CMD_GETREDUNDANCERECORD = 212; // 冗余录像状态
+ int MESSAGE_CMD_SETREDUNDANCERECORD = 213; // 冗余录像状态
+ int MESSAGE_CMD_GETTHIRDENCODEPARA = 214; // 第三码流参数
+ int MESSAGE_CMD_SETTHIRDENCODEPARA = 215; // 第三码流参数
+ int MESSAGE_CMD_GETTHIRDENCODETYPE = 216; // 第三编码格式
+ int MESSAGE_CMD_SETTHIRDENCODETYPE = 217; // 第三编码格式
+ int MESSAGE_CMD_GETPTZCTRLTIME = 218; // 云台连续控制时长
+ int MESSAGE_CMD_SETPTZCTRLTIME = 219; // 云台连续控制时长
+ int MESSAGE_CMD_GETAUDIOPARAMTYPE = 220; // 音频类型
+ int MESSAGE_CMD_SETAUDIOPARAMTYPE = 221; // 音频类型
+ int MESSAGE_CMD_GETDVRVOPARAM = 222; // DVR的视频输出参数
+ int MESSAGE_CMD_SETDVRVOPARAM = 223; // DVR的视频输出参数
+ int MESSAGE_CMD_GETVLCPARAM = 224; // VLC参数
+ int MESSAGE_CMD_SETVLCPARAM = 225; // VLC参数
+ int MESSAGE_CMD_GETNTPPARAM = 226; // NTP参数
+ int MESSAGE_CMD_SETNTPPARAM = 227; // NTP参数
+ int MESSAGE_CMD_GETBKDISK = 228; // 备份至硬盘
+ int MESSAGE_CMD_GETVIDEOINTERESTAREA = 229; // 视频感兴趣区域参数
+ int MESSAGE_CMD_SETVIDEOINTERESTAREA = 230; // 视频感兴趣区域参数
+ int MESSAGE_CMD_GETVCAABILITY = 231; // 支持的智能分析能力
+ int MESSAGE_CMD_GETCCDPARAMEX = 232; // Sensor参数
+ int MESSAGE_CMD_SETCCDPARAMEX = 233; // Sensor参数
+ int MESSAGE_CMD_GETSTORAGE = 234; // 硬盘信息(新)
+ int MESSAGE_CMD_SETSTORAGE = 235; // 硬盘信息(新)
+ int MESSAGE_CMD_GETSMART = 236; // 硬盘SMART信息(新)
+ int MESSAGE_CMD_GETEXACTTIMEZONE = 237; // 准确的时区
+ int MESSAGE_CMD_SETEXACTTIMEZONE = 238; // 准确的时区
+ int MESSAGE_CMD_GETTRAFFICLIGHTCFG = 239; // 红绿灯配置
+ int MESSAGE_CMD_SETTRAFFICLIGHTCFG = 240; // 红绿灯配置
+ int MESSAGE_CMD_GETRECORDSTREAMTYPE = 241; // 录像与码流类型
+ int MESSAGE_CMD_SETRECORDSTREAMTYPE = 242; // 录像与码流类型
+ int MESSAGE_CMD_GETWIFIMODE = 243; // WiFi模式
+ int MESSAGE_CMD_SETWIFIMODE = 244; // WiFi模式
+ int MESSAGE_CMD_GETALARMSHORTMSGPARAM = 245; // 报警短信参数
+ int MESSAGE_CMD_SETALARMSHORTMSGPARAM = 246; // 报警短信参数
+ int MESSAGE_CMD_GETNETERRORPARAM = 247; // 网络异常报警参数
+ int MESSAGE_CMD_SETNETERRORPARAM = 248; // 网络异常报警参数
+ int MESSAGE_CMD_GETDISKSELECTPARAM = 249; // 设备存储介质
+ int MESSAGE_CMD_SETDISKSELECTPARAM = 250; // 设备存储介质
+ int MESSAGE_CMD_GETDAYNIGHTPARAM = 251; // 日夜转换参数
+ int MESSAGE_CMD_SETDAYNIGHTPARAM = 252; // 日夜转换参数
+ int MESSAGE_CMD_GETVIDEOINTYPE = 253; // 视频输入类型
+ int MESSAGE_CMD_SETVIDEOINTYPE = 254; // 视频输入类型
+ int MESSAGE_CMD_GETWIFIENABLE = 255; // WiFi/3G支持信息
+ int MESSAGE_CMD_GETNOISEMODEPARAM = 256; // 降噪参数
+ int MESSAGE_CMD_SETNOISEMODEPARAM = 257; // 降噪参数
+ int MESSAGE_CMD_GETVPNINFO = 258; // VPN参数
+ int MESSAGE_CMD_SETVPNINFO = 259; // VPN参数
+ int MESSAGE_CMD_GETWIFIINFO = 260; // WiFi信息
+ int MESSAGE_CMD_GETPHOTO_SENSITIVE_TYPE = 261; // 光敏控制类型
+ int MESSAGE_CMD_SETPHOTO_SENSITIVE_TYPE = 262; // 光敏控制类型
+ int MESSAGE_CMD_GET_ENC_VPP_MAIN = 263; // 主码流视频预处理参数
+ int MESSAGE_CMD_SET_ENC_VPP_MAIN = 264; // 主码流视频预处理参数
+ int MESSAGE_CMD_SET_ENC_VPP_SUB = 265; // 子码流视频预处理参数
+ int MESSAGE_CMD_GET_ENC_VPP_SUB = 266; // 子码流视频预处理参数
+ int MESSAGE_CMD_SET_ENC_VPP_THIRD = 267; // 第三码流视频预处理参数
+ int MESSAGE_CMD_GET_ENC_VPP_THIRD = 268; // 第三码流视频预处理参数
+ int MESSAGE_CMD_SET_ENC_PROFILE_MAIN = 269; // 编码级别(主)
+ int MESSAGE_CMD_GET_ENC_PROFILE_MAIN = 270; // 编码级别(主)
+ int MESSAGE_CMD_SET_ENC_PROFILE_SUB = 271; // 编码级别(子)
+ int MESSAGE_CMD_GET_ENC_PROFILE_SUB = 272; // 编码级别(子)
+ int MESSAGE_CMD_SET_ENC_PROFILE_THIRD = 273; // 编码级别(第三)
+ int MESSAGE_CMD_GET_ENC_PROFILE_THIRD = 274; // 编码级别(第三)
+ int MESSAGE_CMD_GET_CCD_RGB_DEFAULT = 275; // Sensor的RGB参数
+ int MESSAGE_CMD_SET_CCD_AI_CHECK = 276; // AI校验值
+ int MESSAGE_CMD_GET_REMOTESTREAMTYPE = 277; // 远程回放上传码流类型
+ int MESSAGE_CMD_SET_REMOTESTREAMTYPE = 278; // 远程回放上传码流类型
+ int MESSAGE_CMD_GET_ENCRYPTIONTYPE = 279; // 加密方式
+ int MESSAGE_CMD_SET_ENCRYPTIONTYPE = 280; // 加密方式
+ int MESSAGE_CMD_GETSENSORPARAM_DEVTYPE = 281; // 远程参数中的设备类型
+ int MESSAGE_CMD_SETSENSORPARAM_DEVTYPE = 282; // 远程参数中的设备类型
+ int MESSAGE_CMD_GETDEVICECFG = 283; // NVR的模数转换配置
+ int MESSAGE_CMD_SETDEVICECFG = 284; // NVR的模数转换配置
+ int MESSAGE_CMD_GETCHANNELRECORDPLANEX = 285; // 通道录像计划
+ int MESSAGE_CMD_SETCHANNELRECORDPLANEX = 286; // 通道录像计划
+ int MESSAGE_CMD_GETMOTIONALARMAREA = 287; // 移动侦测区域
+ int MESSAGE_CMD_SETMOTIONALARMAREA = 288; // 移动侦测区域
+ int MESSAGE_CMD_GET_OSDBORDER = 289; // OSD边框参数
+ int MESSAGE_CMD_SET_OSDBORDER = 290; // OSD边框参数
+ int MESSAGE_CMD_GET_RESOLUTION = 291; // 支持的分辨率
+ int MESSAGE_CMD_GET_QOS_TOS = 292; // 视频QOS优先级
+ int MESSAGE_CMD_SET_QOS_TOS = 293; // 视频QOS优先级
+ int MESSAGE_CMD_GET_SNMP_CFG = 294; // SNMP配置
+ int MESSAGE_CMD_SET_SNMP_CFG = 295; // SNMP配置
+ int MESSAGE_CMD_GET_IPV6_CFG = 296; // IPv6配置
+ int MESSAGE_CMD_SET_IPV6_CFG = 297; // IPv6配置
+ int MESSAGE_CMD_GET_SENSORVERSION = 298; // 获取Sensor版本号
+ int MESSAGE_CMD_GET_WINCALIPARAM = 299; // 窗口校准参数
+ int MESSAGE_CMD_SET_WINCALIPARAM = 300; // 窗口校准参数
+ int MESSAGE_CMD_GET_SMT_ANALY_ADVANCE = 301; // 智能分析-高级参数
+ int MESSAGE_CMD_SET_SMT_ANALY_ADVANCE = 302; // 智能分析-高级参数
+ int MESSAGE_CMD_GET_DAYNIGHTPARAM_EX = 303; // 日夜参数
+ int MESSAGE_CMD_SET_DAYNIGHTPARAM_EX = 304; // 日夜参数
+ int MESSAGE_CMD_GET_IROSD2VISPARAM = 305; // 可见光添加红外OSD参数
+ int MESSAGE_CMD_SET_IROSD2VISPARAM = 306; // 可见光添加红外OSD参数
+ int MESSAGE_CMD_GET_CHANNELTYPE = 307; // 通道类型
+ int MESSAGE_CMD_GET_ANTIFLICKER = 308; // 抗闪烁
+ int MESSAGE_CMD_SET_ANTIFLICKER = 309; // 抗闪烁
+ int MESSAGE_CMD_GET_TEMPREGIONOFFSET = 310; // 测温区域位置偏移
+ int MESSAGE_CMD_SET_TEMPREGIONOFFSET = 311; // 测温区域位置偏移
+ int MESSAGE_CMD_GET_TEMPVALUE_EX = 312; // 获取温度值(扩展)
+ int MESSAGE_CMD_GET_SENSOR_SERIALNO = 313; // 获取Sensor序列号
+ int MESSAGE_CMD_SET_SENSOR_SERIALNO = 314; // 设置Sensor序列号
+ int MESSAGE_CMD_GET_SWITCHMODE = 315; // 切换校准模式
+ int MESSAGE_CMD_SET_SWITCHMODE = 316; // 切换校准模式
+ int MESSAGE_CMD_TAU_FACDEFAULT = 317; // TAU恢复出厂默认
+ int MESSAGE_CMD_TAU_SAVEPARAM = 318; // TAU保存参数
+ int MESSAGE_CMD_GET_TAU_SEGMENT = 319; // TAU段表
+ int MESSAGE_CMD_SET_TAU_SEGMENT = 320; // TAU段表
+ int MESSAGE_CMD_GET_HT_BLACK_CLIPPING = 321; // 黑边裁切
+ int MESSAGE_CMD_SET_HT_BLACK_CLIPPING = 322; // 黑边裁切
+ int MESSAGE_CMD_GET_DENOISEPARAM = 323; // 降噪
+ int MESSAGE_CMD_SET_DENOISEPARAM = 324; // 降噪
+ int MESSAGE_CMD_GET_ROLLPARAM = 325; // 翻转
+ int MESSAGE_CMD_SET_ROLLPARAM = 326; // 翻转
+ int MESSAGE_CMD_GET_DIGITALOUTMODE = 327; // 数字输出模式
+ int MESSAGE_CMD_SET_DIGITALOUTMODE = 328; // 数字输出模式
+ int MESSAGE_CMD_GET_FFCMODE = 329; // FFC模式
+ int MESSAGE_CMD_SET_FFCMODE = 330; // FFC模式
+ int MESSAGE_CMD_GET_FFCFRAMEPARAM = 331; // 自动FFC帧数参数
+ int MESSAGE_CMD_SET_FFCFRAMEPARAM = 332; // 自动FFC帧数参数
+ int MESSAGE_CMD_GET_FFCTEMPPARAM = 333; // 自动FFC温度参数
+ int MESSAGE_CMD_SET_FFCTEMPPARAM = 334; // 自动FFC温度参数
+ int MESSAGE_CMD_GET_VTEMPTEMP = 335; // VTEMP温度参数
+ int MESSAGE_CMD_SET_VTEMPTEMP = 336; // VTEMP温度参数
+ int MESSAGE_CMD_GET_VTEMPREGION = 337; // VTEMP区域参数
+ int MESSAGE_CMD_SET_VTEMPREGION = 338; // VTEMP区域参数
+ int MESSAGE_CMD_GET_KENABLE = 339; // K值有效
+ int MESSAGE_CMD_SET_KENABLE = 340; // K值有效
+ int MESSAGE_CMD_GET_BENABLE = 341; // B值有效
+ int MESSAGE_CMD_SET_BENABLE = 342; // B值有效
+ int MESSAGE_CMD_GET_BLINDENABLE = 343; // 盲元有效
+ int MESSAGE_CMD_SET_BLINDENABLE = 344; // 盲元有效
+ int MESSAGE_CMD_GET_FILTEENABLE = 345; // 时域滤波有效
+ int MESSAGE_CMD_SET_FILTEENABLE = 346; // 时域滤波有效
+ int MESSAGE_CMD_GET_FILTEPARAM = 347; // 时域滤波系数
+ int MESSAGE_CMD_SET_FILTEPARAM = 348; // 时域滤波系数
+ int MESSAGE_CMD_GET_TRAN = 349; // 透传
+ int MESSAGE_CMD_SET_TRAN = 350; // 透传
+ int MESSAGE_CMD_GET_SMART_DATA = 351; // SmartData参数
+ int MESSAGE_CMD_SET_SMART_DATA = 352; // SmartData参数
+ int MESSAGE_CMD_GET_SENSOR_TEMP = 353; // 机芯各位置温度
+ int MESSAGE_CMD_SET_WRITE_FLASH = 354; // 烧写Flash
+ int MESSAGE_CMD_GET_SENSOR_STATE = 355; // 当前Sensor状态
+ int MESSAGE_CMD_GET_OBJTEMP_FLUXRANGE = 356; // 温度辐射范围
+ int MESSAGE_CMD_GET_TAUNUCTABLEINDEXES = 357; // 获取当前支持的NUC Table段索引
+ int MESSAGE_CMD_GET_TAUNUCTABLEFUNCTION = 358; // 获取当前TAU的支持的NUC Table检测功能
+ int MESSAGE_CMD_SET_TAUNUCTABLEFUNCTION = 359; // 设置当前TAU的支持的NUC Table检测功能
+ int MESSAGE_CMD_WNDCALIB_STARTUP = 360; // 窗口校准 启动
+ int MESSAGE_CMD_WNDCALIB_CAPBASEDATA = 361; // 抓取N帧基准的基帧数据
+ int MESSAGE_CMD_WNDCALIB_CAPOBJDATA = 362; // 抓取N帧目标的目标数据
+ int MESSAGE_CMD_WNDCALIB_CALC = 363; // 计算窗口校准系数
+ int MESSAGE_CMD_GET_WEBROMVER = 364; // 获取网页ROM版本
+ int MESSAGE_CMD_FILLLIGHT_ON = 365; // 补光灯开
+ int MESSAGE_CMD_FILLLIGHT_OFF = 366; // 补光灯关
+ int MESSAGE_CMD_GET_ONVIFPARAM = 367; // Onvif参数
+ int MESSAGE_CMD_SET_ONVIFPARAM = 368; // Onvif参数
+ int MESSAGE_CMD_GET_IMAGEFUSEPARAM_EX = 369; // 图像融合参数
+ int MESSAGE_CMD_SET_IMAGEFUSEPARAM_EX = 370; // 图像融合参数
+ int MESSAGE_CMD_GET_FUSEOFFSET = 371; // 融合偏移
+ int MESSAGE_CMD_SET_FUSEOFFSET = 372; // 融合偏移
+ int MESSAGE_CMD_GET_IMAGEFLIPPARAM = 373; // 图像翻转参数
+ int MESSAGE_CMD_SET_IMAGEFLIPPARAM = 374; // 图像翻转参数
+ int MESSAGE_CMD_GET_PIXLETEMPERATURE = 375; // 获取像素点温度
+ int MESSAGE_CMD_SET_PIXLETEMPERATURE = 376; // 设置像素点位置
+ int MESSAGE_CMD_GET_POLYGONTEMPPARAM = 377; // 获取多边形测温区域参数
+ int MESSAGE_CMD_SET_POLYGONTEMPPARAM = 378; // 设置多边形测温区域参数
+ int MESSAGE_CMD_GET_HUMANCALIPARAM = 379; // 获取人体校准参数
+ int MESSAGE_CMD_SET_HUMANCALIPARAM = 380; // 设置人体校准参数
+ int MESSAGE_CMD_GET_TEMPSHIELDPARAM = 381; // 测温屏蔽区域
+ int MESSAGE_CMD_SET_TEMPSHIELDPARAM = 382; // 测温屏蔽区域
+ int MESSAGE_CMD_HUMANCALI_MANUAL = 383; // 人体校准(手动)
+ int MESSAGE_CMD_HUMANCALI_RESTORE = 384; // 人体校准(恢复)
+ int MESSAGE_CMD_GET_HUMANCALI_VISMATCHIR = 385; // 红外和可见光图像对应参数
+ int MESSAGE_CMD_SET_HUMANCALI_VISMATCHIR = 386; // 红外和可见光图像对应参数
+ int MESSAGE_CMD_GET_HUMANCALI_TEMPTABLE = 387; // 人体校准温度表
+ int MESSAGE_CMD_SET_HUMANCALI_TEMPTABLE = 388; // 人体校准温度表
+ int MESSAGE_CMD_GET_TEMPUNIT = 389; // 温度单位
+ int MESSAGE_CMD_SET_TEMPUNIT = 390; // 温度单位
+ int MESSAGE_CMD_GET_TEMPINFOLIST = 391; // 获取全局和各区域温度值信息
+ int MESSAGE_CMD_GET_TEMPALARMCTRLEX = 392; // 测温报警控制(支持4个等级)
+ int MESSAGE_CMD_SET_TEMPALARMCTRLEX = 393; // 测温报警控制(支持4个等级)
+ int MESSAGE_CMD_GET_REGIONTEMPALARMCTRLEX = 394; // 区域温度报警控制(支持4个等级)
+ int MESSAGE_CMD_SET_REGIONTEMPALARMCTRLEX = 395; // 区域温度报警控制(支持4个等级)
+ int MESSAGE_CMD_GET_GB28181PARAM = 396; // GB28181参数
+ int MESSAGE_CMD_SET_GB28181PARAM = 397; // GB28181参数
+ int MESSAGE_CMD_GET_REGIONTEMPPARAM_EX2 = 398; // 区域测温参数(支持24个区域)
+ int MESSAGE_CMD_SET_REGIONTEMPPARAM_EX2 = 399; // 区域测温参数(支持24个区域)
+ int MESSAGE_CMD_GET_POLYGONTEMPPARAM_EX = 400; // 多边形测温参数(支持24个区域)
+ int MESSAGE_CMD_SET_POLYGONTEMPPARAM_EX = 401; // 多边形测温参数(支持24个区域)
+ int MESSAGE_CMD_GET_SMARTANALYSIS_ENABLE = 402; // 智能分析功能使能
+ int MESSAGE_CMD_SET_SMARTANALYSIS_ENABLE = 403; // 智能分析功能使能
+ int MESSAGE_CMD_GET_SMARTANALYSIS_ALARM = 404; // 智能分析联动报警
+ int MESSAGE_CMD_SET_SMARTANALYSIS_ALARM = 405; // 智能分析联动报警
+ int MESSAGE_CMD_GET_TEMPOSDMODE = 406; // 温度OSD模式
+ int MESSAGE_CMD_SET_TEMPOSDMODE = 407; // 温度OSD模式
+ int MESSAGE_CMD_GET_GPSINFO_ABIF = 408; // GPS信息(ABIF)
+ int MESSAGE_CMD_GET_CENTER_OSD = 409; // 中心点OSD使能
+ int MESSAGE_CMD_SET_CENTER_OSD = 410; // 中心点OSD使能
+ int MESSAGE_CMD_PARAMDEFAULT_DEEP = 411; // 恢复默认参数(深度)
+ int MESSAGE_CMD_GET_ONVIFPORT = 412; // Onvif端口号
+ int MESSAGE_CMD_SET_ONVIFPORT = 413; // Onvif端口号
+ int MESSAGE_CMD_GET_DAYNIGHT_STATE = 414; // 日夜状态
+ int MESSAGE_CMD_GET_FLAME_DETECT_PARAM = 415; // 火焰检测参数
+ int MESSAGE_CMD_SET_FLAME_DETECT_PARAM = 416; // 火焰检测参数
+ int MESSAGE_CMD_FLAME_DETECT_PARAM_RESET = 417; // 火焰检测参数复位
+ int MESSAGE_CMD_SET_GRIDSPARAM = 418; // 设置宫格参数
+ int MESSAGE_CMD_GET_GRIDSPARAM = 419; // 设置宫格参数
+ int MESSAGE_CMD_GET_GETREGIONTEMPVALUE_EX2 = 420; // 获取各区域温度值(64个区域)
+ int MESSAGE_CMD_SET_MANUAL_FOCUS = 421; // 手动聚焦开始
+ int MESSAGE_CMD_SET_MANUAL_FOCUS_STOP = 422; // 手动聚焦结束
+ int MESSAGE_CMD_GET_FOCUSPOS = 423; // 获取聚焦位置
+ int MESSAGE_CMD_SET_FOCUSPOS = 424; // 设置聚焦位置
+ int MESSAGE_CMD_SET_FOCUSCTRL = 425; // 自动聚焦控制
+ int MESSAGE_CMD_GET_IMGFREEZE = 426; // 获取图像冻结参数
+ int MESSAGE_CMD_SET_IMGFREEZE = 427; // 设置图像冻结参数
+ int MESSAGE_CMD_GET_EXPOSUREPARAMEX = 428; // 获取曝光参数(扩展)
+ int MESSAGE_CMD_SET_EXPOSUREPARAMEX = 429; // 设置曝光参数(扩展)
+ int MESSAGE_CMD_GETVIPARAM = 430; // 获取视频参数
+ int MESSAGE_CMD_SETVIPARAM = 431; // 设置视频参数
+ int MESSAGE_CMD_GET_AGCPARAM_EX = 432; // 获取红外AGC参数
+ int MESSAGE_CMD_SET_AGCPARAM_EX = 433; // 设置红外AGC参数
+ int MESSAGE_CMD_GET_TEMPPARAM_EX = 434; // 获取测温相关参数
+ int MESSAGE_CMD_SET_TEMPPARAM_EX = 435; // 设置测温相关参数
+ int MESSAGE_CMD_GET_GETREGIONTEMPVALUE_EX = 436; // 获取各区域温度值(24个区域)
+ int MESSAGE_CMD_MAX = 437; // 最大值
+ }
+}
diff --git a/src/main/java/com/inspect/nvr/jna/lincseek/IRNetSDKStruct.java b/src/main/java/com/inspect/nvr/jna/lincseek/IRNetSDKStruct.java
new file mode 100644
index 0000000..5b0c2f8
--- /dev/null
+++ b/src/main/java/com/inspect/nvr/jna/lincseek/IRNetSDKStruct.java
@@ -0,0 +1,1111 @@
+package com.inspect.nvr.jna.lincseek;
+
+import com.sun.jna.Pointer;
+import com.sun.jna.Structure;
+import com.sun.jna.platform.win32.WinDef.HWND;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * IRNetSDK JNA 结构体映射(VSNETStructDef.h + IRNet.h 中的结构体)。
+ * 所有结构体使用 __stdcall 对齐,通过 {@link com.sun.jna.win32.W32APITypeMapper} 处理。
+ * 注意:字符串字段使用 byte[] 以确保编码安全;解码时使用 Native.toString(bytes, "GBK")。
+ */
+@SuppressWarnings("unused")
+public interface IRNetSDKStruct {
+
+ // ═════════════════════════════════════════════════════════════════════
+ // 核心句柄类型
+ // ═════════════════════════════════════════════════════════════════════
+
+ /**
+ * IRNETHANDLE — 不透明连接句柄(typedef void*)
+ */
+ class IRNETHANDLE extends Pointer {
+ /** 无效句柄,对应C中的 (IRNETHANDLE)-1,即 (void*)-1 */
+ public static final IRNETHANDLE INVALID_HANDLE_VALUE = new IRNETHANDLE(-1);
+
+ public IRNETHANDLE() { super(0); }
+ public IRNETHANDLE(long peer) { super(peer); }
+ }
+
+ // ═════════════════════════════════════════════════════════════════════
+ // CHANNEL_CLIENTINFO — 客户端通道信息结构
+ // ═════════════════════════════════════════════════════════════════════
+
+ @Structure.FieldOrder({
+ "m_sername", "m_username", "m_password", "m_tranType", "m_playstart",
+ "m_ch", "m_hVideohWnd", "m_hChMsgWnd", "m_nChmsgid", "m_buffnum",
+ "m_useoverlay", "nColorKey", "url", "m_messagecallback", "context"
+ })
+ class CHANNEL_CLIENTINFO extends Structure {
+ @Deprecated public String m_sername; // 服务器名
+ @Deprecated public String m_username; // 用户名
+ @Deprecated public String m_password; // 密码
+ public short m_tranType; // 传输类型
+ public short m_playstart; // 是否启动预览, 0=不自动启动
+ public byte m_ch; // 通道
+ public HWND m_hVideohWnd; // 视频窗口句柄(仅Windows)
+ public HWND m_hChMsgWnd; // 消息窗口句柄
+ public int m_nChmsgid; // 消息ID
+ public int m_buffnum; // 缓冲帧数
+ public int m_useoverlay; // 是否使用覆盖
+ public int nColorKey; // 颜色键(COLORREF)
+ public byte[] url = new byte[40]; // 设备URL/IP
+ public IRNetSDKCallback.CCICallback m_messagecallback; // 消息回调
+ public Pointer context; // 用户上下文
+
+ /**
+ * 创建通道信息(使用 String 类型,JNA 自动转换为 native 字符串)。
+ * 推荐改用 Safe 内部类以避免编码问题。
+ */
+ public static CHANNEL_CLIENTINFO create(
+ String sername, String username, String password,
+ byte channel, HWND videoWnd, HWND msgWnd, int msgId,
+ IRNetSDKCallback.CCICallback callback, Pointer context) {
+ CHANNEL_CLIENTINFO info = new CHANNEL_CLIENTINFO();
+ info.m_sername = sername;
+ info.m_username = username;
+ info.m_password = password;
+ info.m_tranType = 3;
+ info.m_playstart = 0;
+ info.m_ch = channel;
+ info.m_hVideohWnd = videoWnd;
+ info.m_hChMsgWnd = msgWnd;
+ info.m_nChmsgid = msgId;
+ info.m_buffnum = 10;
+ info.m_useoverlay = 0;
+ info.m_messagecallback = callback;
+ info.context = context;
+ return info;
+ }
+
+ /**
+ * 创建通道信息并填充 url 字段(推荐使用)。
+ */
+ public static CHANNEL_CLIENTINFO createWithUrl(
+ String sername, String username, String password,
+ byte channel, String deviceUrl, HWND videoWnd, HWND msgWnd, int msgId,
+ IRNetSDKCallback.CCICallback callback, Pointer context) {
+ CHANNEL_CLIENTINFO info = create(sername, username, password, channel,
+ videoWnd, msgWnd, msgId, callback, context);
+ if (deviceUrl != null) {
+ byte[] urlBytes = deviceUrl.getBytes();
+ System.arraycopy(urlBytes, 0, info.url, 0,
+ Math.min(urlBytes.length, info.url.length));
+ }
+ return info;
+ }
+
+ @Override
+ protected List