#pragma once

//#include "CameraParams.h"

#define PXIEL_FORMAT_FLOAT32 0x81200001                  //flaot32像素格式

#define TEMP_REGION_COUNT 22                             //全部区域个数
#define TEMP_MAX_POINT_NUM 10                            //点区域做多个数
#define TEMP_MAX_POLY_NUM 10                             //多边形区域做多个数
#define TEMP_MAX_LINE_NUM 1                              //线区域做多个数
#define TEMP_MAX_CIRCLE_NUM 1                            //圆区域做多个数

#define TEMP_MAX_POLY_LINE_COUNT 20                      //多边形区域边的最大个数
#define TEMP_MAX_MULTI_ALARM_COUNT 4                     //多区域报警可配置的组数
#define TEMP_MAX_DISPLAY_WINDOW_COUNT 5                  //显示设置窗口可配置的组数

#define TEMP_CHUNK_ID_TEST 0x00510002                    //测温区域信息
#define TEMP_CHUNK_ID_ALARM 0x00510003                   //测温警告信息
#define TEMP_CHUNK_ID_RAW_DATA 0x00510004                //全屏灰度数据
#define TEMP_CHUNK_ID_FULL_SCREEN_DATA 0x00510005        //全屏温度数据
#define TEMP_CHUNK_ID_MIN_MAX_TEMP 0x00510006            //最低温最高温
#define TEMP_CHUNK_ID_OSD_INFO 0x00510007                //OSD相关参数

#define TEMP_ROI_TYPE_POINT 0
#define TEMP_ROI_TYPE_LINE 1
#define TEMP_ROI_TYPE_POLYGON 2
#define TEMP_ROI_TYPE_CIRCLE 3

#define TEMP_ALARM_LEVER_PRE 0        //报警等级-预警
#define TEMP_ALARM_LEVER_WARN 1       //报警等级-警告
#define TEMP_ALARM_LEVER_NORMAL 2     //报警等级-正常
#define TEMP_ALARM_LEVER_RECOVER 3    //报警等级-解除等级
#define TEMP_ALARM_TYPE_MAX 0         //报警类型-最大值
#define TEMP_ALARM_TYPE_MIN 1         //报警类型-最小值
#define TEMP_ALARM_TYPE_AVG 2         //报警类型-平均值
#define TEMP_ALARM_TYPE_DIFFER 3      //报警类型-差异值

#define OSD_BY_NONE    0           //OSD不显示
#define OSD_BY_CAMERA  1           //相机显示OSD
#define OSD_BY_CLIENT  2           //软件层显示OSD



//设置的ROI类型
enum ROIActionType
{
	ROI_ACTION_TYPE_POINT = 0,       //点
	ROI_ACTION_TYPE_POLYGON,         //多边形
	ROI_ACTION_TYPE_LINE,            //线
	ROI_ACTION_TYPE_CIRCLE,          //圆
	ROI_ACTION_TYPE_UNDEFINE,
};

//报警源
enum AlarmSourceType
{
	ALARM_SOURCE_TYPE_MAX = 0,    //最大温度   
	ALARM_SOURCE_TYPE_MIN,        //最小温度
	ALARM_SOURCE_TYPE_AVG,        //平均温度
	ALARM_SOURCE_TYPE_VAR,        //温度差异
};

//报警条件
enum AlarmConditionType
{
	ALARM_CONDITION_TYPE_MORE = 0,    //大于   
	ALARM_CONDITION_TYPE_LESS,        //小于
	ALARM_CONDITION_TYPE_NONE,        //无  
};


typedef struct
{
    unsigned char pointNum;     // 点测温个数，最大10个
    unsigned char boxNum;       // 框测温个数，最大10个
    unsigned char lineNum;      // 线测温个数，最多1条
	unsigned char circleNum;    // 圆测温个数，最多1个
    unsigned char total;        // 上者之和
	unsigned char res[3];
} IFR_TM_REGION_NUM;

//点
typedef struct
{
    int x;
    int y;
} IFR_POINT;


//多边形区域
typedef struct
{
	unsigned int pointNum;              //<多边形实际顶点数
	unsigned int circleRadius;          //<测温区域圆半径
	IFR_POINT circlepoint;              //<测温区域的圆心半径
	IFR_POINT pointList[TEMP_REGION_COUNT];            //<顶点坐标
} IFR_POLYGON;


//单个区域测温结果
typedef struct
{
    unsigned char       enable;             ///<是否启用：0-否,1-是
    unsigned char       regionId;           ///<区域ID
    unsigned char       reserved[34];       ///<保留字段
    unsigned int        regiontype;         ///<区域类型 0：点 1：线 2：多边形  3:圆
    char                name[32];           ///<区域名称
    unsigned int        emissionRate;       ///<发射率: [1，100]
    int                 minTmp;             ///<最低温度: [-400, 10000]，单位0.1℃
    int                 maxTmp;             ///<最高温度: [-400, 10000]，单位0.1℃
    int                 avrTmp;             ///<平均温度: [-400, 10000]，单位0.1℃
    int                 diffTmp;            ///<温差： [0, 10400]，单位0.1℃
    IFR_POINT           points[2];          ///<保存测试结果中的最高温和最低温坐标，归一化到0-1000，数组下标: 0-最高温，1-最低温
    IFR_POLYGON         polygon;            ///<多边形区域
} IFR_OUTCOME_INFO;


//温度结果列表
typedef struct
{
    IFR_TM_REGION_NUM   regionNum;              ///<有效测温区域数量
    unsigned char       reserved[8];            ///<保留
	IFR_OUTCOME_INFO    ifrOutcome[TEMP_REGION_COUNT];         ///<测温结果
} IFR_OUTCOME_LIST;

//报警上传信息结构体
typedef struct
{
    unsigned char regionId;                     ///<框序号
    unsigned char alarmkey;                     ///<当前区域报警是否开启开关，上层默认配置开启
    unsigned char alarmRule;                    ///<规则:0-大于 1-小于
	unsigned char reserved0;                    ///<预留
    unsigned int regiontype;                    ///<区域类型 0：点 1：线 2：多边形 3:圆
    unsigned int alarmType;                     ///<报警类型:0-最高温报警,1-最低温度，2-平均温度,3-温差
    unsigned int alarmLevel;                    ///<报警级别：0-预警，1-报警，2-正常，3-解除预警
    int measureTmpData;                         ///<测量值，单位0.1℃
    int ruleTmpData;                            ///<规则设定值，单位0.1℃
    IFR_POLYGON polygon;                        ///<区域位置
    IFR_POINT points[2];                        ///<保存测试结果中的最高温和最低温坐标，归一化到0-1000，数组下标: 0-最高温，1-最低温
	unsigned char reserved1[16];                ///<预留
} IFR_ALARM_INFO;


//区域温差报警上传信息结构体
typedef struct
{
    unsigned char regionSet[2];                 ///温差报警区域ID号，每对2个区域
	unsigned char alarmkey;                     ///<当前区域报警是否开启开关
	unsigned char reserved0;                    ///<预留
    unsigned int alarmType;                     ///<报警类型:0-最高温报警,1-最低温度，2-平均温度,3-温差
    unsigned char alarmRule;                    ///<规则:0-大于 1-小于
    unsigned char reserved1[3];
    unsigned int alarmLevel;                    ///<报警级别：0-预警，1-报警，2-正常，3-解除预警
	int measureTmpData[2];                      ///<温度报警区域测量值，单位0.1℃，与regionSet对应
    int ruleTmpData;                            ///<规则设定值，单位0.1℃
    unsigned char reserved2[4];                 ///<预留
} IFR_DIFF_ALARM_INFO;


typedef struct
{
	IFR_ALARM_INFO alarmOutcome[TEMP_REGION_COUNT]; ///<单区域报警结果
    IFR_DIFF_ALARM_INFO alarmDiffOutcome[4];         ///区域间温差报警结果
}IFR_ALARM_UPLOAD_INFO;

//全屏温度信息
typedef struct
{
    int nMaxTemp;
    int nMinTemp;
    unsigned char reserved[4];
} IFR_FULL_SCREEN_MAX_MIN_INFO;

//测温区域显示规则
typedef struct {
	unsigned int    regionDispIndex;                    /**< 区域显示规则索引号 */
	unsigned int    regionDispEnable;                   /**< 测温区域显示使能 */
	unsigned int    regionMaxTempDispEnable;            /**< 区域最大温度显示使能 */
	unsigned int    regionMinTempDispEnable;            /**< 区域最小温度显示使能 */
	unsigned int    regionAvgTempDispEnable;            /**< 区域最小温度显示使能 */
	unsigned int    regionAlarmDispEnable;              /**< 区域告警状态显示使能 */
} IRF_REGION_DISP_INFO;

//区域测温图像叠加特征信息结构体
typedef struct {
	unsigned int           legendDisplayEnable;    /**< 图例（温度条）是否使能 1 使能 0 不使能 */
	unsigned int           osdProcessor;           /**< 红外相机OSD叠加控制器选择 0 无叠加 1 相机叠加 2 客户端叠加 */
	IRF_REGION_DISP_INFO   regionDispRules[TEMP_REGION_COUNT];
} IRF_OSD_INFO;





