Files
dvr/include/hk-net-sdk.h
2026-02-08 08:58:29 +08:00

350 lines
18 KiB
C

#ifndef _HIK_NET_SDK_H_
#define _HIK_NET_SDK_H_
//#if defined(_WIN32) || defined(_WIN64)
//#if (defined HK_NET_LIBRARY)
//#define HK_NET_API __declspec(dllexport) bool __stdcall
//#else
//#define HK_NET_API __declspec(dllimport) bool __stdcall
//#endif
//#define CALLBACK __stdcall
//#else
//#define HK_NET_API bool
//#define CALLBACK
//#endif
#include "hk-net-sdk-define.h"
#ifdef __cplusplus
extern "C"
{
#endif
#ifndef _HK_DISCOVERY_DEVICE_CB_FUNC_DEF_
#define _HK_DISCOVERY_DEVICE_CB_FUNC_DEF_
typedef bool(CALLBACK *DISCOVERY_DEVICE_CB_FUNC)(SSADPINFO st_dev_info, void *p_user_data);
#endif
//广播发现接口
HK_NET_API hk_discovery_init(PHKHANDLE p_h, DISCOVERY_DEVICE_CB_FUNC p_func, void *p_user);
HK_NET_API hk_discovery_send_inquiry(HKHANDLE h);
HK_NET_API hk_discovery_stop(PHKHANDLE p_h);
HK_NET_API hk_discovery_modify_ip(HKHANDLE h, const char *pc_src_ip, const char *pc_passwd, bool b_dhcp, const char *pc_ip, const char *pc_netmask, const char *pc_gateway, const char *pc_dns1, const char *pc_dns2);
//总的初始化与反初始化接口,无论设备多少只调用一次
HK_NET_API hk_net_sdk_init(const char *pc_path);//"/usr/local/HKNetDeviceSDK"
HK_NET_API hk_net_sdk_uninit();
enum{
STREAM_TYPE_MAIN = 0,
STREAM_TYPE_SUB = 1,
STREAM_TYPE_MAX,
};
//设备操作相关接口
//初始化,反初始化
HK_NET_API hk_net_dev_init(PHKHANDLE p_h);
//指定初始化,不用再调用以下接口
//hk_net_dev_login
//hk_net_dev_set_realplay_callback
//hk_net_dev_start_realplay
//hk_net_dev_set_temperature_stream_callback
//hk_net_dev_start_temperature_stream_realplay
HK_NET_API hk_net_dev_init_ex(PHKHANDLE p_h, int i_type, const char *pc_ip, unsigned int port, const char *pc_mac, const char *pc_sn, const char *pc_user, const char *pc_pwd,
REALTIME_VIDEO_CB_FUNC p_vs_func, void *p_vs_user, REALTIME_TEMPERATURE_STREAM_CB_FUNC p_ts_func, void *p_ts_user );
HK_NET_API hk_net_dev_uninit(PHKHANDLE p_h);
#ifndef _HK_EXCEPTION_CB_FUNC_DEF_
#define _HK_EXCEPTION_CB_FUNC_DEF_
//ui_type: 1-网络预览异常, 2-预览时重连, 3-预览时重连成功
typedef bool(CALLBACK *EXCEPTION_CB_FUNC)(unsigned int ui_type, unsigned int lhandle, void *p_user_data);
#endif
HK_NET_API hk_net_dev_set_exception_callback(HKHANDLE h, EXCEPTION_CB_FUNC p_func, void *p_user);
//登陆登出接口
HK_NET_API hk_net_dev_login(HKHANDLE h, int i_type, const char *pc_ip, unsigned int port, const char *pc_mac, const char *pc_sn, const char *pc_user, const char *pc_pwd);
HK_NET_API hk_net_dev_login_nvr(HKHANDLE h, const char *pc_ip, unsigned int port, const char *pc_mac, const char *pc_sn, const char *pc_user, const char *pc_pwd);
HK_NET_API hk_net_dev_logout(HKHANDLE h);
HK_NET_API hk_net_dev_get_sn(HKHANDLE h, char *pc_sn, int *ui_len);
HK_NET_API hk_net_dev_get_cfg_version(HKHANDLE h, char pc_dev_type[64], char pc_software_version[64], char pc_system_version[64], char pc_hardware_version[64]);
//IP设置
HK_NET_API hk_net_dev_set_ip(HKHANDLE h, bool b_dhcp, char *pc_ip, char *pc_netmask, char *pc_gateway, char *pc_dns1, char *pc_dns2);
HK_NET_API hk_net_dev_get_ip(HKHANDLE h, bool *b_dhcp, char *pc_ip, char *pc_netmask, char *pc_gateway, char *pc_dns1, char *pc_dns2);
//重启
HK_NET_API hk_net_dev_reboot(HKHANDLE h);
//时间设置
HK_NET_API hk_net_dev_set_time(HKHANDLE h, unsigned int ui_year, unsigned int ui_month, unsigned int ui_day, unsigned int ui_hour, unsigned int ui_mintue, unsigned int ui_second);
//支持的分辨率列表
HK_NET_API hk_net_dev_get_support_resolutions(HKHANDLE h, unsigned int channel, int i_stream_type, struct video_resolution result[10], int *p_num);//i_stream_type: STREAM_TYPE_MAIN/STREAM_TYPE_SUB
//分辨率设置
HK_NET_API hk_net_dev_set_resolution(HKHANDLE h, unsigned int channel, int i_stream_type, unsigned short us_width, unsigned short us_height);//i_stream_type: STREAM_TYPE_MAIN/STREAM_TYPE_SUB
//主码流分辨率获取
HK_NET_API hk_net_dev_get_resolution(HKHANDLE h, unsigned int channel, unsigned short *pus_width, unsigned short *pus_height);
HK_NET_API hk_net_dev_get_channel_num(HKHANDLE h, unsigned int *pui_channel_num, unsigned int *pui_start_channel_num, unsigned int *pui_ip_channel_num, unsigned int *pui_start_ip_channel_num);
//获取温度矩阵宽高
HK_NET_API hk_net_dev_get_temperature_resolution(HKHANDLE h, unsigned short *pus_width, unsigned short *pus_height);
//获取红外/可见光实时图像
HK_NET_API hk_net_dev_set_realplay_callback(HKHANDLE h, REALTIME_VIDEO_CB_FUNC p_func, void *p_user);
HK_NET_API hk_net_dev_start_realplay(HKHANDLE h, unsigned int ui_channel_no, int i_stream_type);//i_stream_type: STREAM_TYPE_MAIN/STREAM_TYPE_SUB
HK_NET_API hk_net_dev_stop_transferdata(HKHANDLE h, unsigned int ui_channel_no);
HK_NET_API hk_net_dev_stop_realplay(HKHANDLE h, unsigned int ui_channel_no);
//实时分析及温度相关接口
#ifndef _HK_REALTIME_TEMPERATURE_RULE_CB_FUNC_DEF_
#define _HK_REALTIME_TEMPERATURE_RULE_CB_FUNC_DEF_
typedef bool(CALLBACK *REALTIME_TEMPERATURE_RULE_CB_FUNC)(const char *pc_ana, LOCAL_TEMPERATURE_INFO local_info, void *p_user_data);
#endif
//设置测温分析,此接口需hk_net_dev_start_temperature_stream_realplay接口调用成功并获取到回调数据后再调用,规则不会存储到设备中
HK_NET_API hk_net_dev_set_temperature_rule(HKHANDLE h, unsigned short us_width, unsigned short us_height, STRU_ANA_INFO *pv_ana_info, unsigned int ui_cnt);
//抓图
HK_NET_API hk_net_dev_capture_ir_jpg(HKHANDLE h, char *pc_name);
HK_NET_API hk_net_dev_capture_vi_jpg(HKHANDLE h, char *pc_name);
HK_NET_API hk_net_dev_capture_temperature_data(HKHANDLE h, char *puc_temperature_data, unsigned int *pui_temp_len);
//pc_data, 14位时间,例:"20210802151515"
HK_NET_API hk_net_dev_save_ir_to_national_grid_image(HKHANDLE h, const char *pc_date, char *puc_jpg_data, unsigned int ui_jpg_len, const char *pc_file);
HK_NET_API hk_net_dev_append_temperature_to_national_grid_image(HKHANDLE h, const char *pc_date, const char *pc_file);
//实时温度流
HK_NET_API hk_net_dev_set_temperature_stream_callback(HKHANDLE h, REALTIME_TEMPERATURE_STREAM_CB_FUNC p_func, void *p_user);
HK_NET_API hk_net_dev_start_temperature_stream_realplay(HKHANDLE h);
HK_NET_API hk_net_dev_stop_temperature_stream_realplay(HKHANDLE h);
HK_NET_API hk_net_dev_record_realdata(HKHANDLE h, unsigned int ui_channel, const char *pc_file);
HK_NET_API hk_net_dev_stop_record_realdata(HKHANDLE h, unsigned int ui_channel);
enum{
PALETTE_IRON2 = 0,//铁红2
PALETTE_BLACKHOT = 1,//黑热
PALETTE_WHITEHOT = 2,//白热
PALETTE_RAINBOW = 3,//彩虹
PALETTE_MAX = 4,
};
//调色板设置
HK_NET_API hk_net_dev_set_palette(HKHANDLE h, int i_palette);
HK_NET_API hk_net_dev_get_palette(HKHANDLE h, int *pi_palette);
//基础参数配置,距离单位米
HK_NET_API hk_net_dev_get_thermometry_basic_config(HKHANDLE h, float *pf_emiss, float *pf_dist);
HK_NET_API hk_net_dev_thermometry_basic_config(HKHANDLE h, float f_emiss, float f_dist);
HK_NET_API hk_net_dev_get_all_temperature_paras(HKHANDLE h, float *pf_emiss, float *pf_dist, float *pf_env_temp, float *pf_hum);
HK_NET_API hk_net_dev_set_all_temperature_paras(HKHANDLE h, float f_emiss, float f_dist, float f_env_temp, float f_hum);
HK_NET_API hk_net_dev_capture_one_frame(HKHANDLE h);
HK_NET_API hk_net_dev_get_max_temperature(HKHANDLE h, float *fp_max, unsigned short *us_max_x, unsigned short *us_max_y);
HK_NET_API hk_net_dev_get_min_temperature(HKHANDLE h, float *fp_min, unsigned short *us_min_x, unsigned short *us_min_y);
HK_NET_API hk_net_dev_get_avg_temperature(HKHANDLE h, float *fp_avg);
HK_NET_API hk_net_dev_get_temperature_from_ana(HKHANDLE h, const char *pc_ana, struct STRU_ANA_TEMPERATURE *temperature );
HK_NET_API hk_net_dev_get_temperature_rule_points(HKHANDLE h, const char *pc_ana, struct STRU_POINT *points, unsigned int *pui_count);
//测温规则设置,会存储到设备中
//此组方法不推荐使用
//pc_rules: R01:1,1;10,10;-L02:2,2;10,10;-P03:5,5;-
HK_NET_API hk_net_dev_del_preset_temperature_rules(HKHANDLE h, unsigned int ui_preset_no);
HK_NET_API hk_net_dev_set_preset_temperature_rules(HKHANDLE h, unsigned int ui_preset_no, float pf_emiss, float pf_dist, const char *pc_rules, unsigned int ui_rules_len);
HK_NET_API hk_net_dev_get_preset_temperature_rules(HKHANDLE h, unsigned int ui_preset_no, float *pf_emiss, float *pf_dist, char *pc_rules, unsigned int *pui_rules_len);
//推荐使用以下接口
HK_NET_API hk_net_dev_set_preset_temperature_rules_v20(HKHANDLE h, unsigned int ui_preset, STRU_NDSWN_RULE *pc_rules, unsigned int ui_lens);
HK_NET_API hk_net_dev_get_preset_temperature_rules_v20(HKHANDLE h, unsigned int ui_preset, STRU_NDSWN_RULE *pc_rules, unsigned int *pui_lens);
//报警规则设置,会存储到设备中,报警条件的温度均按摄氏度计算,调用相关接口时先调用hk_net_dev_set_temperature_unit将测温单位切换为摄氏度。
//此组方法不推荐使用
//pc_rules:R01:Max>10;P02:Min<5;P03:Avg>10;
HK_NET_API hk_net_dev_del_preset_temperature_alarm_rules(HKHANDLE h, unsigned int ui_preset_id);
HK_NET_API hk_net_dev_set_preset_temperature_alarm_rules(HKHANDLE h, unsigned int ui_preset_id, char *pc_rules, unsigned int ui_lens);
HK_NET_API hk_net_dev_get_preset_temperature_alarm_rules(HKHANDLE h, unsigned int ui_preset_id, char *pc_rules, unsigned int *pui_lens);
//推荐使用以下接口
HK_NET_API hk_net_dev_set_preset_temperature_alarm_rules_v20(HKHANDLE h, unsigned int i_preset, STRU_NDSWN_ALARM *pc_alarms, unsigned int ui_lens);
HK_NET_API hk_net_dev_get_preset_temperature_alarm_rules_v20(HKHANDLE h, unsigned int i_preset, STRU_NDSWN_ALARM *pc_alarms, unsigned int *pui_lens);
//区域报警规则设置,会存储到设备中
//此组方法不推荐使用
HK_NET_API hk_net_dev_del_preset_diff_temperature_alarm_rules(HKHANDLE h, unsigned int ui_preset_id);
HK_NET_API hk_net_dev_set_preset_diff_temperature_alarm_rules(HKHANDLE h, unsigned int ui_preset_id, char *pc_rules, unsigned int ui_lens);
HK_NET_API hk_net_dev_get_preset_diff_temperature_alarm_rules(HKHANDLE h, unsigned int ui_preset_id, char *pc_rules, unsigned int *pui_lens);
//推荐使用以下接口
HK_NET_API hk_net_dev_set_preset_diff_temperature_alarm_rules_v20(HKHANDLE h, unsigned int ui_preset, STRU_NDSWN_DIFF_ALARM *pc_diff_alarms, unsigned int ui_lens);
HK_NET_API hk_net_dev_get_preset_diff_temperature_alarm_rules_v20(HKHANDLE h, unsigned int ui_preset, STRU_NDSWN_DIFF_ALARM *pc_diff_alarms, unsigned int *pui_lens);
//设置预置位温度回调
HK_NET_API hk_net_dev_set_realtime_temperature_callback_v20(HKHANDLE h, NDSWN_REALTIME_TEMPERATURE_CB_FUNC p_fun, void *p_user);
//开启与关闭预置位测温
HK_NET_API hk_net_dev_start_realtime_temperature_v20(HKHANDLE h);
HK_NET_API hk_net_dev_stop_realtime_temperature_v20(HKHANDLE h);
//设置布防回调
HK_NET_API hk_net_dev_set_temperature_alarm_callback_v20(HKHANDLE h, NDSWN_REALTIME_TEMPERATURE_ALARM_CB_FUNC p_fun, void *p_user);
//开启与关闭布防
HK_NET_API hk_net_dev_start_realtime_alarm_v20(HKHANDLE h);
HK_NET_API hk_net_dev_stop_realtime_alarm_v20(HKHANDLE h);
HK_NET_API hk_net_dev_get_temperature_meas_range(HKHANDLE h, unsigned int *pui_cnt, struct HK_NET_MEAS_RANGE *pst_range);
HK_NET_API hk_net_dev_get_curr_temperature_meas_range(HKHANDLE h, unsigned int *ui_meas_range, float *f_range_min, float *f_range_max);
HK_NET_API hk_net_dev_set_temperature_meas_range(HKHANDLE h, unsigned int ui_meas_range);
HK_NET_API hk_net_dev_is_support_auto_change_meas(HKHANDLE h, bool *pb_auto_meas_range);
HK_NET_API hk_net_dev_is_auto_temperature_meas_range(HKHANDLE h, bool *pb_auto_meas_range);
HK_NET_API hk_net_dev_set_auto_temperature_meas_range(HKHANDLE h, bool b_auto_meas_range);
//设置与获取测温单位
#ifndef _HK_NET_TEMPERTATURE_UNIT_
#define _HK_NET_TEMPERTATURE_UNIT_
enum {
HK_TEMPERATURE_UNIT_CELSIUS = 0,//摄氏度
HK_TEMPERATURE_UNIT_FAHRENHEIT,//华氏度
HK_TEMPERATURE_UNIT_MAX,
};
#endif
HK_NET_API hk_net_dev_set_temperature_unit(HKHANDLE h, int e_type);
HK_NET_API hk_net_dev_get_temperature_unit(HKHANDLE h, int* pe_type);
//视频叠加温度配置,会存储到设备中
HK_NET_API hk_net_dev_set_video_overlay_temperature_info(HKHANDLE h, bool b_enable);
HK_NET_API hk_net_dev_get_video_overlay_temperature_info(HKHANDLE h, bool *pb_enable);
HK_NET_API hk_net_dev_get_osd(HKHANDLE h, unsigned int ui_channel_no, STRU_OSD_CONFIG &st_config);
HK_NET_API hk_net_dev_set_osd(HKHANDLE h, unsigned int ui_channel_no, STRU_OSD_CONFIG st_config);
//调焦-
HK_NET_API hk_net_dev_zoom_in(HKHANDLE h, unsigned int ui_channel_no, int i_stop);
//调焦+
HK_NET_API hk_net_dev_zoom_out(HKHANDLE h, unsigned int ui_channel_no, int i_stop);
//聚焦-
HK_NET_API hk_net_dev_focus_near(HKHANDLE h, unsigned int ui_channel_no, int i_stop);
//聚焦+
HK_NET_API hk_net_dev_focus_far(HKHANDLE h, unsigned int ui_channel_no, int i_stop);
//光圈-
HK_NET_API hk_net_dev_iris_close(HKHANDLE h, unsigned int ui_channel_no, int i_stop);
//光圈+
HK_NET_API hk_net_dev_iris_open(HKHANDLE h, unsigned int ui_channel_no, int i_stop);
//开灯
HK_NET_API hk_net_dev_open_light(HKHANDLE h);
//关灯
HK_NET_API hk_net_dev_close_light(HKHANDLE h);
//开雨刷
HK_NET_API hk_net_dev_open_wiper(HKHANDLE h);
//关雨刷
HK_NET_API hk_net_dev_close_wiper(HKHANDLE h);
enum{
PTZ_TILT_UP = 0, //上
PTZ_TILT_DOWN = 1,//下
PTZ_PAN_LEFT = 2,//左
PTZ_PAN_RIGHT = 3,//右
PTZ_UP_LEFT = 4,//左上
PTZ_UP_RIGHT = 5,//右上
PTZ_DOWN_LEFT = 6,//左下
PTZ_DOWN_RIGHT = 7,//右下
PTZ_PAN_AUTO = 8,//左右自动扫描
};
HK_NET_API hk_net_dev_ptz_control(HKHANDLE h, int ptz_control_type, int i_speed, int i_stop);//i_speed: 1~7
//预置点设置
HK_NET_API hk_net_dev_ptz_set_preset(HKHANDLE h, int i_preset_index);
//召回预置点
HK_NET_API hk_net_dev_ptz_goto_preset(HKHANDLE h, int i_preset_index);
//删除预置点
HK_NET_API hk_net_dev_ptz_del_preset(HKHANDLE h, int i_preset_index);
//清空预置点
HK_NET_API hk_net_dev_ptz_clear_all_preset(HKHANDLE h);
//获取预置点列表
HK_NET_API hk_net_dev_ptz_get_preset_list(HKHANDLE h, STRU_PRESET_CONFIG *p_preset, unsigned int *pui_count);
HK_NET_API hk_net_dev_ptz_preset_modify_name(HKHANDLE h, unsigned int ui_preset_id, unsigned char *puc_name, unsigned int ui_len);
#ifndef LIBRARY_SUPPORT_ONLY_HEIKA
//同步视场角
HK_NET_API hk_net_dev_synchronzie_fov(HKHANDLE h);
//nvr--------------------------------------------------------start
//NVR相关
//NVR相关接口仅针对海康NVR
HK_NET_API hk_net_dev_get_channels_config(HKHANDLE h, STRU_NVR_IP_CHANNEL *pst_ip_channels, unsigned int *ui_cnt);
//获取NVR文件列表
HK_NET_API hk_net_dev_get_file_list(HKHANDLE h, unsigned int channel, HK_NVR_FILE_COND st_condtion, HK_NVR_FILE_INFO *pst_file_list, unsigned int *ui_cnt);
//文件名回放
HK_NET_API hk_net_dev_play_back_by_name(HKHANDLE h, char *pc_name, int *i_handle);
//时间回放
HK_NET_API hk_net_dev_play_back_by_time(HKHANDLE h, unsigned int channel, HK_NVR_FILE_COND st_condition, int *i_handle);
HK_NET_API hk_net_dev_play_back_stop(HKHANDLE h, int i_handle);
//回放时下载文件
HK_NET_API hk_net_dev_play_back_save_data(HKHANDLE h, int i_handle, char *pc_name);
//回放时下载停止
HK_NET_API hk_net_dev_play_back_stop_save(HKHANDLE h, int i_handle);
//回放数据帧回调
HK_NET_API hk_net_dev_play_back_set_callback(HKHANDLE h, PLAY_BACK_VIDEO_CB_FUNC cb_func, void *p_user);
//回放控制
enum{
PLAYBACK_START = 0,//开始播放
PLAYBACK_STOP = 1,//停止播放
PLAYBACK_PAUSE = 2,//暂停播放
PLAYBACK_RESTART = 3,//恢复播放
PLAYBACK_FAST = 4,//快放
PLAYBACK_SLOW = 5,//慢放
PLAYBACK_NORMAL = 6,//正常速度
};
HK_NET_API hk_net_dev_play_back_control(HKHANDLE h, unsigned int i_handle, int i_control);
//以下所有接口在调用hk_net_dev_play_back_by_time时均不支持
HK_NET_API hk_net_dev_play_back_set_pos(HKHANDLE h, unsigned int i_handle, int i_pos);
//获取回放总时长与总帧数
HK_NET_API hk_net_dev_play_back_get_total_time(HKHANDLE h, unsigned int i_handle, unsigned int *pui_times);
HK_NET_API hk_net_dev_play_back_get_total_frames(HKHANDLE h, unsigned int i_handle, unsigned int *pui_frames);
//获取回放当前进度相关接口,通过回调方式以下四个接口会return false
HK_NET_API hk_net_dev_play_back_control_seek_time(HKHANDLE h, unsigned int i_handle, int i_year, int i_month, int i_day, int i_hour, int i_mintue, int i_second);
HK_NET_API hk_net_dev_play_back_get_time(HKHANDLE h, unsigned int i_handle, unsigned int *pui_time);
HK_NET_API hk_net_dev_play_back_get_frame(HKHANDLE h, unsigned int i_handle, unsigned int *pui_frame);
HK_NET_API hk_net_dev_play_back_get_pos(HKHANDLE h, unsigned int i_handle, unsigned int *pui_pos);
//nvr--------------------------------------------------------end
#endif
#ifndef LIBRARY_SUPPORT_ONLY_HEIKA
//判断是否支持调焦
HK_NET_API hk_net_dev_get_len_adjust_method(HKHANDLE h, unsigned int *pui_method);
HK_NET_API hk_net_dev_set_len_pos(HKHANDLE h, unsigned int ui_len_pos);
HK_NET_API hk_net_dev_get_len_pos(HKHANDLE h, unsigned int *pui_len_pos);
//自动聚集
HK_NET_API hk_net_dev_auto_focus(HKHANDLE h, unsigned int ui_channel_no);
//亮度与对比度设置
HK_NET_API hk_net_dev_set_brightness_and_contrast(HKHANDLE h, unsigned int ui_channel_no, int i_brightness, int i_contrast);
HK_NET_API hk_net_dev_get_brightness_and_contrast(HKHANDLE h, unsigned int ui_channel_no, int *pi_brightness, int *pi_contrast);
#endif
#ifdef __cplusplus
}
#endif
#endif