You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

1124 lines
29 KiB

#if 1
#pragma once
#ifndef NWEB_H
#define NWEB_H
//#include "structures.h"
#include "define_inc.h"
#include "zlog.h"
#include "cv.h"
#include "utility.h"
#include "onvif_data.h"
#ifdef GY_OS_NOVA
#include "bbox_receive.h"
#endif
#include <sys/types.h>
#include <sys/socket.h>
#if defined GY_OS_AMBA || defined GY_OS_NOVA
#include <stdbool.h>
#endif
#ifdef GY_OS_WIN
#include "opencv2/highgui/highgui_c.h"
#include "opencv2/imgproc/imgproc_c.h"
#endif
#include <curl/curl.h>
#include <curl/easy.h>
#include <sys/prctl.h>
#ifdef GY_OS_AMBA
//#include "face_parser.h"
#endif
#ifdef __cplusplus
extern "C" {
#include <stdint.h>
#include <stdlib.h>
#endif
#define CONTENT_BUFSIZE MAX_IMG_BUFF_SIZE
#define LOG_BUFSIZE (BUFSIZE<<1)
#define NW_ERROR 1
#define NW_SORRY 2
#define NW_LOG 3
#define LINE_BUFSIZE 7*8192 //512
#define MAX_SIZE_POINT 6
#define MAX_NUMBER_PAGE 59
#define HEADER_BUFSIZE 1024
#define WEBPYTHONBUFFER_LENSIZE 256
#define WEBPYTHONBUFFER_ROWSIZE 256
#define MAX_GET_PYTHON_BUFFER_ROW_SIZE 8
#ifdef GY_OS_NOVA
#define MEMORY_SIZE 256*1024
#endif
#ifdef GY_OS_AMBA
#define MEMORY_SIZE 512*1024
#endif
#define MAX_SERVICE_SIZE 256
#define MAX_SIZE_A_OSD_OBJECT 11
#define MAX_SIZE_A_SP_OBJECT 6
//trigger types
#define TRIGGER_OUTSIDE_INSIDE 1
#define TRIGGER_INSIDE_OUTSIDE 2
#define TRIGGER_INSIDE_INSIDE 3
#define TRIGGER_OUTSIDE_OUTSIDE 4
/*typedef struct
{
int x;
int y;
} Point;*/
/*typedef struct {
char* recvBuffer;
char* contentBuffer;
} BufferPtr;*/
/*typedef struct {
time_t recv_time;
int frames;
} SecData;*/
typedef struct
{
struct tm * snapshot_time;
time_t snapshot_time_mktime;
time_t snapshot_msecs_time;
char snapshot_addr[MAX_IMG_SIZE];
int snapshot_size;
}SnapHDInfo;
typedef struct
{
char weight_repository[35];
int enable_weight_to_run;
}WeightFileInfo;
typedef struct
{
char email_address1[50];
char email_address2[50];
char email_address3[50];
char email_address4[50];
char email_address5[50];
char email_address[50];
char smtp_server[50];
int smtp_auth_mode;
char smtp_port[10];
int smtp_auth;
char auth_account[50];
char auth_password[50];
} IPCAMServiceInfo;
typedef struct
{
int checked;
char detect_event_id[20];
char detect_event_name[50];
char post_event_name[MAX_MSG_LEN * 10];
char counter_name[MAX_MSG_LEN * 10];
int counter_increment;
//TriggerData [MAX_DETECT_OBJECTS];
} TriggerEvent;
typedef struct
{
bool isActive;
/*char levenshtein_distance[10];
char min_characters[10];
char max_characters[10];
char confidence[10];*/
char enable_traffic_light[10];
//char enable_social_distance[10];
#ifdef GY_OS_AMBA
CvMat* PerspectiveTransformArray;
#endif
char detection_time[20];
char metadata1[BUFSIZE];
char metadata2[BUFSIZE];
char metadata_stop[50];
char link_to_counter[10];
char enable_direction1[10];
char enable_direction2[10];
char direction1[10];
char direction2[10];
int no_parking_time;
int no_parking_time_in_minute;
int queuing_count;
int prev_queuing_num;
int queuing_trigger_event_idx;
char ptz_zone_to_preset[20];
TriggerEvent trigger_event[MAX_TRIGGER_EVENT];
CPoint Points[6];
int min_x_points;
int max_x_points;
int min_y_points;
int max_y_points;
f_CPoint onvif_Points[6];
int parking_space;
int parking_line;
//Social Distance
float set_distance;
char world_distance_unit[10];
float world_distance[DETECTION_POINTS_COUNT];
int distance_violation_count;
int prev_distance_violation_num;
time_t prev_distance_violation_time;
time_t recent_distance_violation_start_time;
int distance_trigger_event_idx;
//float LinearFormula[DETECTION_POINTS_COUNT][3]; //4 edges, each edge has it's ax+by+c =0 values
//char* MovingDirection[DETECTION_POINTS_COUNT];
int point_num;
int obj_tracking_id_in_zone[MAX_OBJ_TRACKING_ID_IN_ZONE];
int last_obj_tracking_id_in_zone[MAX_OBJ_TRACKING_ID_IN_ZONE];
int last_two_obj_tracking_id_in_zone[MAX_OBJ_TRACKING_ID_IN_ZONE];
int check_if_missing;
char enable_speed[10];
char enable_radar_speed[10];
char enable_ivs_zone[10];
float world_distance_side1;
float world_distance_side2;
char world_time_unit[20];
char obj_max_proportion_in_zone[10];
char obj_min_proportion_in_zone[10];
//int speed_upper_bound;//<EFBFBD>Ч<EFBFBD><EFBFBD><EFBFBD>set_distance
//int speed_lower_bound;//<EFBFBD>Ч<EFBFBD><EFBFBD><EFBFBD>set_distance
//char confidence3[10];
#if defined GY_OS_AMBA
//jvc setting
int jvc_enable_detect;
int jvc_person_check;
int jvc_vehicle_check;
int jvc_person_confidence;
int jvc_vehicle_confidence;
int jvc_behavior;
int jvc_obj_size;
int jvc_detect_priority;
int jvc_detect_mode;
int jvc_detect_fov;
int jvc_trigger_delay_time;
int jvc_trigger_times;
int jvc_queuing_count;
int jvc_enable_direction1;
int jvc_direction1;
char jvc_counter_name[50];
int jvc_counter_value;
int jvc_density_value;
int jvc_enable_ptz;
int jvc_ptz_tracking_time;
int jvc_ptz_fov;
int jvc_ptz_auto_intercept;
int jvc_ptz_preset_intercept;
int jvc_ptz_zone_to_preset;
#endif
} DetectionZoneInfo;
typedef struct
{
int channel_idx;
int enable_anpr;
int enable_face;
int enable_traffic;
int enable_logo;
int enable_add_face_frequent_list;
int tab_view_width;
int tab_view_height;
float tab_view_width_ratio;
float tab_view_height_ratio;
float speed_view_width_ratio;
float speed_view_height_ratio;
char camera_name[20];
char obj_max_proportion[10];
char obj_min_proportion[10];
char levenshtein_distance[10];
char min_characters[10];
char max_characters[10];
int i_plate_filter_times;
int i_plate_filter_time;
int i_plate_free_time;
char confidence[10]; //<EFBFBD><EFBFBD><EFBFBD>P Plate
char confidence2[10]; //<EFBFBD><EFBFBD><EFBFBD>q Traffic
char confidence3[10]; //<EFBFBD>S<EFBFBD><EFBFBD><EFBFBD>Ψ<EFBFBD> None
char confidence4[10]; //<EFBFBD>S<EFBFBD><EFBFBD><EFBFBD>Ψ<EFBFBD> None
int enable_traffic_light_zone;
//int enable_social_distance_zone;
char traffic_light_color[20];
//CvMat* PerspectiveTransformArray;
char enable_lpr_db[10];
char enable_PTZ[10];
char enable_track[10];
char ivs_mode[10];
char ptz_tracking_fov_min[10];
char ptz_tracking_fov_max[10];
char ptz_enable_tracking[10];
char ptz_tracking_resume_dwell[10];
int ptz_tracking_by_enter_zone;
int ptz_tracking_mode;
int ptz_sensitivity;
int iVideo_source_w;
int iVideo_source_h;
char enable_tracking_limits[10];
char ptz_pan_left_limit[20];
char ptz_pan_right_limit[20];
char ptz_tilt_up_limit[20];
char ptz_tilt_down_limit[20];
char ptz_speed[20];
char enable_unknown_object[10];
char enable_ivs_person_detection[10];
char assign_ivs_object_to[100];
char enable_ambulance[10];
char enable_blank_plate[10];
char enable_stop_sign[10];
char enable_ivs_fix_mode[10];
char enable_show_unknown_object[10];
char enable_ivs_and_ai[10];
char enable_lpr_upon_triggered[10];
char dwell_lpr_upon_triggered[10];
char unknown_object_max_proportion[10];
char unknown_object_min_proportion[10];
char confidence_unknown_object[10];
char confidence2_unknown_object[10];
char dwell_unknown_object[10];
char dwell_minute_focus_on[10];
char person_obj_fov[10];
char getnetwork_buffer_id[10];
char red_light_zone[10];
char no_give_way_zone_to_protect[10];
char no_give_way_zone_to_keep_away[10];
char no_give_way_zone_to_protect_2[10];
char no_give_way_zone_to_keep_away_2[10];
int count_zone;
} ChannelInfo;
typedef struct
{
char enable_person_independent[10];
char enable_onvif_profile_m[10];
char enable_crop_mode[10];
char nms_thres[10];
char tracking_id_dwell[10];
char enable_cloud[10];
char enable_special_edition[10];
char enable_python[10];
char enable_python_file[50];
char enable_low_cpu_usage[10];
char cloud_enable_snap[10];
char cloud_enable_notification[10];
char cloud_account[256];
char cloud_password[256];
char cloud_notification_dwell[10];
char cloud_statue[MEMORY_SIZE];
char language[50];
char enable_display_properties[10];//enable to show color
char enable_display_OSD[10];
char enable_special_char[10];
char enable_bounding_box[10];
char enable_dwell_bounding_box[10];
char force_i_to_one[10];
char force_o_to_zero[10];
char enable_plate_angle_correction[10];
char enable_ai_mirror[10];
char ai_mirror_feature[10];
char enable_cloud_v2[10];
char cloud_v2_notification_dwell[10];
char cloud_v2_content[BUFSIZE_V3];
char enable_cloud_record_v2[10];
char cloud_record_v2_notification_dwell[10];
char cloud_record_v2_content[BUFSIZE_V3];
char cloud_v2_statue[MEMORY_SIZE];
char cloud_record_v2_statue[MEMORY_SIZE];
char enable_post_only_if_both_detected[10];
char enable_getalarmmotion_snap[10];
char getimage_encoder_id[10];
char getimage_encoder_id_HD[10];
char osd_encoder_id[10];
char osd_font_size[10];
char osd_outline_lilin[10];
char enable_osd_bottom[10];
char osd_bottom_bg_tran[10];
char osd_bottom_content[BUFSIZE_V3];
char sensors_type[10];
char enable_sync_external_lpr_db[10];
char external_lpr_db_IP[256];
char external_lpr_db_port[10];
char external_lpr_db_username[60];
char external_lpr_db_password[60];
char enable_email_notification[10];
char enable_system_logs[10];
char enable_email_jpeg[10];
char send_counter_at_specific_hour[10];
char email_reset_time_interval[20];
char enable_ftp[10];
char ftp_url[256];
char ftp_port[25];
char ftp_username[256];
char ftp_password[256];
char ftp_remote_directory[1024];
char ftp_jpeg_file_name_format[10 + 1];
char ftp_jpeg_file_name[60];
} SystemSettingInfo;
typedef struct
{
char post_protocol[10 + 1];
char post_event_method[10+1];
char post_event_name[60];
char post_host_ip[256];
char post_host_port[5+1];
char post_url[8192];//BUFSIZE_V2
char post_username[60];
char post_password[60];
char post_content[MAX_IMG_SIZE];
char post_customized_header[8192];
//unsigned char post_content_bin[MAX_HTTP_BUFFER];
char post_sequence[60];
char post_file_format[10 + 1];
char post_jpeg_file_name_format[10 + 1];
char post_jpeg_file_name[60];
char post_timeout[10];
int check_if_delivering;
} PostEventInfo;
typedef struct
{
char email_content[BUFSIZE_V3];
//unsigned char email_content_bin[MAX_HTTP_BUFFER];
} EmailInfo;
typedef struct {
//int nListIndex;
char counter_name[36 + 1];
int counter_zone;
char counter_cust_name[256];
char counter_unit[16 + 1];
int reset_value;
int reset_year;
int reset_month;
int reset_month_day;
int reset_week_day;
int reset_hour;
int reset_min;
int reset_sec;
int gmt_year;
int gmt_month;
int gmt_month_day;
int gmt_week_day;
int gmt_hour;
int gmt_min;
int gmt_sec;
int next_year;
int next_month;
int next_month_day;
int next_week_day;
int next_hour;
int next_min;
int next_sec;
char ReportTimeInterval[30];
char ResetTime[50];
int already_reset;
int counter_count;
time_t timetResetAt;
time_t next_timetResetAt;
char enable_reset_time_interval[10 + 1];
char reset_time_interval[36 + 1];
char reset_at[36 + 1];
char enable_time_range[10 + 1];
char time_range_from[36 + 1];
char time_range_to[36 + 1];
time_t timetTimeRangeFrom;
time_t timetTimeRangeTo;
char link_to_post_event_name[256];
char post_interval[36 + 1];
int dwell_time;
char dwell_unit[10 + 1];
//char MetaOut1[512][50];
//int metadata1_num;
char enable_reset_only_cloud[10 + 1];
char enable_linked_to_dwell_time[10 + 1];
time_t last_post_time;
} EventCounterInfo;
typedef struct {
char counter_a[20];
char counter_a_name[50];
char counter_a_zone[10];
char counter_b[20];
char counter_b_name[50];
char counter_b_zone[10];
char counter_c_name[50];
char report_max_value[20];
char enable_report[10];
char counter_mode[20];
char initial_icon[50];
char output_icon[50];
char detection_output[100];
} ReportCounterInfo;
typedef struct {
char snmp_event_name[256];
char snmp_version[10];
char snmp_group_name[256];
char snmp_host_ip[256];
char snmp_host_port[10];
char snmp_oid[256];
char snmp_value[BUFSIZE];
char snmp_type[20];
int check_if_delivering;
} SNMPManagementInfo;
//20201027 sophia add
//read from [ipcam /usr/local/bin/nvclient -k user.password0 /usr/local/bin/nvclient -k user.account0 ...9]
//save to config.json account_setting->account_data
typedef struct {
char account_username[256];
char account_password[256];
char account_port[50];
char account_mirror[20];
char account_flip[20];
char account_rotate[20];
char account_aida_port[50];
int account_type; //default ?
int account_status; //default ?
} AccountDataInfo;
typedef struct {
//pthread_t thread_id;
SOCKET sock;
int channel_id;
double fps;
//time_t last_recv_time;
//SecData recent_sec_data[FPS_AVG_SECS];
int isGetAlarmMotion;
//int isFirstAlarmMotion;
int isWebSocketConnect;
int isNvrRequest;
int isCredentialRequest;
#if defined GY_OS_AMBA || defined GY_OS_NOVA
int isUdpSocket; //20201112 sophia add
#endif //GY_OS_AMBA
uchar* prev_frame_data;
//int iIsWebsocketHybi00;
#if defined GY_OS_AMBA
//int iIsAIRelay;
#endif
int debug_type;
int used;
} SocketInfo;
typedef struct {
char curl_url[8192];
char curl_sendbuf[8192];
char method[32];
char username[64];
char password[64];
char port[10]; //strtol(q_info->host_port, NULL, 10)
} CURL_SEND;
typedef struct {
int tof_version;
bool tof_debug;
int tof_install_angle;
bool tof_enable_camera;
bool enable_tof_ground;
bool enable_tof_wall;
char tof_camera_ip[256];
char tof_camera_port[10];
char tof_camera_sub_url[8192];
char tof_auth_key[8192];
bool tof_ip_setting;
char tof_camera_username[512];
char tof_camera_password[512];
char distance_options[10];
char distance_min_max[10];
char distance_threshold[20];
char height_options[10];
char height_min_max[10];
char height_threshold[20];
char ground_x[10];
char ground_y[10];
} TofInfo;
typedef struct {
char enable_heartbeat[10];
char events_default_version[10];
char heartbeat_dwell[10];
char heartbeat_link_to_post_event_name[256];
char dwell_to_the_same_location[10];
char enable_snmp_heartbeat[10];
char snmp_heartbeat_dwell[10];
char snmp_heartbeat_link_to_post_event_name[256];
char enable_only_once_to_post[10];
char enable_obj_once_to_post[10];
char enable_location_once_to_post[10];
char enable_nvr_once_to_getalarmmotion[10];
char enable_8592_once_to_getalarmmotion[10];
char heatmap_max[20];
char enable_heatmap[10];
char heatmap_frequency[20];
char lpr_title[256];
char enable_counter_snap[10];
char enable_barcode_qr[10];
char enable_check_ptz_start_autotracking[10];
char enable_check_ptz_end_autotracking[10];
char ptz_start_autotracking_link_to_post_event_name[256];
char ptz_end_autotracking_link_to_post_event_name[256];
} HeartbeatInfo;
typedef struct {
char sPlateNumber[100];
time_t t_FirstGetTime;
time_t t_UpdateTime;
time_t t_LoopTime;
int iGetCounter;
int iIfUse;
float box_x;
float box_y;
float box_w;
float box_h;
float last_box_x;
float last_box_y;
float last_box_w;
float last_box_h;
float last_box_center_x;
float last_box_center_y;
int iPlateZoomOutCounter;
int iPlateZoomInCounter;
int iTrackingID;
//int iTrackingIDidx;
int existing_dash;
char car_type_name[20];
int check_if_counted[MAX_DETECTION_ZONE];
} PlateRecoder;
typedef struct {
//char name[30];
//int class_id;
time_t t_FirstGetTime;
time_t t_UpdateTime;
int iGetCounter;
int iIfUse;
float box_x;
float box_y;
float box_w;
float box_h;
//float left_x;
//float top_y;
int iTrackingID;
//int iTrackingIDidx;
int check_if_counted[MAX_DETECTION_ZONE];
} ObjectRecoder;
typedef struct {
char name[30];
char sPlateNumber[100];
time_t t_FirstGetTime_total;
time_t t_FirstGetTime;
time_t t_UpdateTime;
int iIfUse;
float box_x;
float box_y;
float box_w;
float box_h;
int check_if_post[MAX_DETECTION_ZONE];
int check_if_cloud;
int check_if_cloud_v2;
int check_if_cloud_record_v2;
int check_if_email;
int check_if_ftp;
int check_if_getalarmmotion;
int object_id;
int zone_idx;
//int the_same_id;
float count_trigger;
//detection_pos ori_Data;
//int iIsInvisible;
//time_t t_InvisibleStartTime;
//time_t t_InvisibleUpdateTime;
} PostRecoder;
typedef struct {
int locked;
int used;
float box_x;
float box_y;
float box_w;
float box_h;
} MotionAreaInfo;
typedef struct {
int color_mode;//image.dn.switch //0 auto mode; 1 day mode; 2 night mode; 3 schedule mode
int light_sensor_value;//image.dn.luminosity
int day_to_night_threshold;//image.dn.luminosity.dtn
int night_to_day_threshold;//image.dn.luminosity.ntd
int dwell_sec_in_auto_mode;//image.dn.switch.dwell
int day_to_night_time_of_schedule;//image.dn.schedule.day
int night_to_day_time_of_schedule;//image.dn.schedule.night
int hour_day_to_night;
int min_day_to_night;
int total_min_day_to_night;
int hour_night_to_day;
int min_night_to_day;
int total_min_night_to_day;
int current_day_or_night_mode;//result // day : 1 ; night : 2
int last_day_or_night_mode;
int check_if_switch_happened[MAX_SIZE_SWITCH_HAPPENED];
//int ircut;
//int irledfar;
//int irlednear;
int iAutoModeSwitchCount;
} ImageDn;
typedef struct {
int id;
int flag_protected;
int x;
int y;
int w;
int h;
int color;
int size;
int show_sec;
int bg_tran; //0~255
int outline_sw; //0:off 1:on
char text[256];
} OSDInfo;
typedef struct {
int flag_protected;
float speed;
char speed_unit[256];
float res_width;
float res_height;
float x;
float y;
} SpeedInfo;
extern char g_aWebPythonBuffer2D[WEBPYTHONBUFFER_LENSIZE][WEBPYTHONBUFFER_ROWSIZE];
extern unsigned int g_uiWebPythonCurrentBufferIndex;
extern unsigned int g_uiWebPythonLastBufferIndex;
extern unsigned int g_cWebPythonBufferSignal;
extern unsigned int g_cWebPythonDeleteStatus;
extern char g_cWebPythonName[50];
extern unsigned int g_cWebPythonStatus;
extern unsigned int python_check_webstatus; // <EFBFBD><EFBFBD><EFBFBD>}<EFBFBD><EFBFBD> plugin <EFBFBD>ɥΪ<EFBFBD>
extern bool isGYNetReady;
//=====================
//sophia add 2020/09/24
#if defined GY_OS_AMBA || defined GY_OS_NOVA
#include "alm_queue.h"
typedef struct {
SOCKET sock;
//stALMNode *head;
//stALMNode *tail;
//int iIsWebsockethybi00;
} SocketInfo_ALM;
//extern SocketInfo_ALM socketRecord_ALM[MAX_CLIENT_SOCKET];
extern int bHttpServerMainStart;
extern int bPreloadHttpServerMainStart;
#endif //GY_OS_AMBA
//=====================
extern int g_check_ping_OK;
extern int g_sdk_version;
extern int CheckIsExistingSpeed;
extern SocketInfo socketRecords[MAX_CLIENT_SOCKET];
extern ChannelInfo viewChannelData[MAX_AI_ENGINE_VIEW];
extern DetectionZoneInfo viewDetectionZone[MAX_AI_ENGINE_VIEW][MAX_DETECTION_ZONE];
extern SystemSettingInfo SystemSetting;
extern PostEventInfo postEventList[MAX_POST_EVENTS];
#ifdef GY_OS_V_SERIES
#else
extern EventCounterInfo eventCounterList[MAX_EVENT_COUNTERS];
extern ReportCounterInfo reportCounterList[MAX_REPORT_COUNTERS];
extern SNMPManagementInfo SNMPManagementList[MAX_SNMP_MANAGEMENT];
#endif
extern AccountDataInfo accountData[MAX_ACCOUNT_DATA_NUM]; //20201027 sophia add
extern IPCAMServiceInfo IPCAMService;
extern SnapHDInfo snapHDList[MAX_SNAP_HD_LIST];
extern WeightFileInfo weightfileList[MAX_WEIGHT_FILE_LIST];
extern char WeightFileModeName[35];
extern EmailInfo emailData;
extern HeartbeatInfo heartbeatData;
#ifdef GY_OS_AMBA
extern TofInfo tofData;
#endif
#if defined GY_OS_AMBA || defined GY_OS_NOVA
extern PlateRecoder g_PlateRecorderList[MAX_PLATE_RECORDER];
#endif
extern ObjectRecoder g_ObjectRecorderList[MAX_OBJECT_RECORDER];
extern PostRecoder g_PostRecorderList[MAX_POST_RECODER_SIZE];
extern PostRecoder g_longterm_PostRecorderList[MAX_POST_RECODER_SIZE];
//extern MotionAreaInfo g_Motion_Area_Data[MAX_MOTION_AREA];
#if defined GY_OS_AMBA || defined GY_OS_NOVA
extern ImageDn imageDnData;
#endif
#ifdef GY_OS_AMBA
extern OSDInfo OSDData[MAX_SIZE_OSD_ARRAY];
extern SpeedInfo SpeedData[MAX_SIZE_SP_ARRAY];
#endif
extern int g_PlateFilterTimes; //Times
extern int g_PlateFilterTime; //Second
extern int g_PlateRecorderFreeTime; //Second
#ifdef GY_OS_AMBA
extern int g_face_frame_uid;
#endif
extern int g_IsRadarDevice;
extern char radar_json_data[4096];
extern int unlockingKeyInnoFR_success;
extern int unlockingKeyInnoFR;
extern int g_IsSDK_3_0;
extern int g_IsToFDevice;
extern int g_IsCustomWeight;
extern int g_IsHelm_without_car;
extern float g_min_tof_range;
extern int g_min_tof_range_x;
extern int g_min_tof_range_y;
extern float g_max_tof_range;
extern int g_max_tof_range_x;
extern int g_max_tof_range_y;
extern int g_bIsSendTofPCD;
extern int g_bIsWritingPCD;
extern float g_ground_tof_range;
extern float g_min_tof_degree;
extern float g_min_tof_height;
extern float g_min_tof_distance;
extern float g_max_tof_degree;
extern float g_max_tof_height;
extern float g_max_tof_distance;
extern float g_ground_tof_degree;
extern float g_ground_tof_height;
extern float g_ground_tof_distance;
extern double g_tof_device_height;
extern int g_ori_yuv_width;
extern int g_ori_yuv_height;
extern int g_ori_half_yuv_width;
extern int g_ori_half_yuv_height;
//extern int sockNum[4];
extern zlog_category_t *zc;
extern double begin_clock;
extern float confidence_limit;
extern int AI_fps;
#ifdef REBOOT_BY_CPU_GPU_USAGE
extern int CPU_usage_int;
extern int GPU_usage_int;
#endif
extern char CPU_usage[256];
extern char GPU_usage[256];
extern char Buffer_ver[BUFSIZE];
//extern bool enable_loop_getalarmmotion;
//extern int times_of_enable_loop_getalarmmotion;
extern int g_write_config_file_dirty_flag;
extern int g_match_mac;
extern char g_mac_address[256];
extern int enable_only_show_metadata1;
extern char websocket_alarm[CONTENT_BUFSIZE];
extern int g_i_get_cpu_loading;
//extern CURLM* g_multi_handle;
extern CURL* g_http_handle;
//extern int g_handle_count;
extern int g_alter_something;
extern int g_count_alter;
extern long g_image_HD_pasue_time;
extern int g_video_start_HD;
extern int g_current_max_num_image_buff;
extern int g_osdTime_sw;
extern long g_osdSysTimeStamp;
extern int g_osdSysTimeZoneInfo;
extern int check_if_correct_post;
extern int check_if_run_post;
extern long g_post_SysTimeStamp;
int run_http_server(char *option, void* _zc, CNNType cnn_type/*, int layer_count, network nets[], char **names[], image **alphabet, float nms[]*/, float thresh, float hier_thresh, int dont_show, int ext_output, int save_labels,
char *mac_address, char *ip_address, int http_port, LicenseType licenseType, AdvanceLicenseType advLicenseType, AuthFailStatusCode afsCode, size_t layerFeatureType[], char* strLicenseType);
//int caculate_ftp_of_each_sockets(SOCKET sock, int *sock_record_idx);
#ifdef GY_OS_NOVA
size_t SetHttpRequest_sock(QueueInfo *q_info, char* sendBuffer, char* method);
#endif
size_t SetHttpRequest(QueueInfo* q_info, char* sendBuffer, char* method);
size_t SetHttpResponse(char* sendBuffer, int httpCode, char* contentType, size_t contentLen, char* content);
void Create_ptz_socket();
void SetHttpRequest_ptz(char* cgi_url, char* sOutput_data, char* username, char* password);
//void SetHttpRequest_ptz();
//size_t SetHttpRequest_ptz(QueueInfo *q_info, char* sendBuffer, char* method);
size_t SetHttpResponse_server(char* sendBuffer, int httpCode, char* contentType, size_t contentLen, char* content);
void replace_one_line_in_a_file(char *path, int line, char *newline);
#if 0
void GetAidaPort();
#endif
void update_enable_only_show_metadata1(int temp_enable_only_show_metadata1);
size_t get_service_from_ipcam(char * response_from_ipcam);
size_t get_control_io_from_ipcam(char * response_from_ipcam);
void copy_ipcam_smtp_service_to_gynet();
void copy_control_io_to_gynet();
void sync_other_camera_lpr_db();
void *net_curl_https_post_push_info(void *ptr);
void *net_curl_https_post_push_info_attached_image(void *ptr);
void net_curl_ftp_post_push_info_attached_image(char* image_buff, int image_buff_size);
void net_curl_ftp_build_folder();
#ifdef GY_OS_AMBA
size_t SetSNMPRequest(QueueInfo *q_info);
#endif
void *net_curl_https_get_other_lpr_db(void *ptr);
extern char id[512];
extern char pass[512];
extern char strUnlockingKey[MAX_MSG_LEN];
extern char strLicenseStatus[MAX_MSG_LEN];
extern char g_device_name[512];
extern int g_IsPTZDevice;
extern int g_check_if_no_brand;
extern int g_check_if_OK_getfeatures;
extern int g_check_if_OK_thermal;
void memset_snapshot_addr();
void build_one_smart_event(char * myname, char * myvalue);
void build_one_gpio(char * myname, char * myvalue);
void* auto_build_smart_events(void * ptr);
void* auto_build_smart_events_di_vi(void * ptr);
void build_one_set_for_quality_basic(char * myname, char * myvalue);
#ifdef GY_OS_AMBA
void build_one_set_for_tof_basic(char * myname, char * myvalue);
#endif
void* auto_set_quality_basic(void * ptr);
#ifdef GY_OS_AMBA
void* auto_set_tof_basic(void * ptr);
#endif
size_t build_resolution_changed(char * response_from_ipcam);
extern pthread_t resolution_changed_thread;
void* auto_resolution_changed(void * ptr);
#ifdef GY_OS_AMBA
void* check_current_resolution(void * ptr);
void set_run_check_current_resolution(int set_value);
int get_run_check_current_resolution();
#endif
void write_to_stream_width_and_stream_height(int stream_width, int stream_height);
int get_g_check_if_different_width_or_height();
void build_reboot(char * myname, char * myvalue);
void ipcam_getfeatures();
void* auto_reboot(void * ptr);
void build_system(char * myname, char * myvalue);
void* auto_system(void * ptr);
void sync_image_rotation_thread();
int is_connection_authorized(char* recvBuffer, SOCKET *client_socket, int isTcpTunnel);
void import_lpr_list_file(char *headerBuffer, char *multiPartBoundary, int bIsMultipart, char *contentBuffer, long nTotalContentLen);
void *import_lpr_list_file_thread(void *ptr);
#ifdef GY_OS_AMBA
void *import_face_list_file_thread(void *ptr);
#endif
void get_snap_with_profile_id(int i_profileid, int enable_check_profile_id);
#ifdef GY_OS_NOVA
void *pre_connection_handler(void *socket_temp);
#endif
void *thread_getimage(void *ptr);
void *thread_getimage_hd(void *ptr);
#ifdef GY_OS_NOVA
void *thread_get_nova_driver(void *ptr);
#endif
char *removeHTTPHeader(char *buffer, int *bodySize);
void getPicture(int socketfd, int bSize, int current_profile_id, int enable_check_profile_id);
int get_g_framesize_width();
int get_g_framesize_height();
void web_process(SOCKET* client_socket, char* recvBuffer, int recv_buff_size, char* contentBuffer/*, int layer_count, network nets[], char **names[], image **alphabet, float nms[]*/, float thresh, float hier_thresh, int dont_show, int ext_output, int save_labels, int http_port, LicenseType licenseType, AdvanceLicenseType advLicenseType, AuthFailStatusCode afsCode, size_t layerFeatureType[], char* strLicenseType, int* isGetalarmMotion, int sock_info_idx);
#ifdef GY_OS_AMBA
int get_g_check_if_change_preset();
void set_g_check_if_change_preset_to_zero();
void *import_radarbg_thread(void *ptr);
void import_radarbg(char *headerBuffer, char *multiPartBoundary, int bIsMultipart, char *contentBuffer, long nTotalContentLen);
#endif
void update_system_time();
int get_g_control_alarm_gpio();
void set_g_control_alarm_gpio_to_zero();
void set_g_control_alarm_gpio_to_one();
#ifdef GY_OS_NOVA
void start_nova_driver();
void get_nova_driver(int socketfd);
#endif
#ifdef __cplusplus
}
#endif
#endif
#endif