/*
 * 类库常量
 *
 *  Created on: 2023年7月27日
 *      Author: SIMTUTAI
 */
#ifndef BASE_constant_H_
#define BASE_constant_H_

#include <iostream>
#include <vector>

using namespace std;

/**
 * @ingroup constant
 * @namesapce stt::constant
 * @brief 常量(如系统变量，控件类型、数据类型、对齐方式等)
 */
namespace stt::constant {

/**
 * @brief 系统变量
 */
class SysVar{
public:
	/**当前时间*/
	static const string Now;
	/**当前小时（24H）*/
	static const string Hour;
	/**当前小时（12H）*/
	static const string Hour12;
	/**当前分钟*/
	static const string Minute;
	/**当前秒*/
	static const string Second;
	/**登录秒数*/
	static const string LoginTime;
	/**累计工作秒数*/
	static const string WorkTime;
	/**上电时间*/
	static const string PoweronTime;
	/**当前用户ID*/
	static const string UserID;
	/**当前用户名*/
	static const string UserName;
	/**当前用户组*/
	static const string UserGrp;
	/**当前语言*/
	static const string Language;
	/**总线消息（收）*/
	static const string RcvMsg;
	/**总线消息（发）*/
	static const string SndMsg;
	/**NULL变量*/
	static const string NullVar;
	/**进度条百分值*/
	static const string PrgressRat;
	/**进度条提示消息*/
	static const string PrgressMsg;
	/**版本时间戳*/
	static const string VerStamp;
	/**内部预留整型0*/
	static const string ResvInt0;
	/**内部预留整型1*/
	static const string ResvInt1;
	/**内部预留整型2*/
	static const string ResvInt2;
	/**内部预留整型3*/
	static const string ResvInt3;
	/**WIFI状态*/
	static const string WifiStatus;
	/**当前WIFI*/
	static const string WifiSsid;
	/**4G/5G状态*/
	static const string FGStatus;
	/**当前4G/5G*/
	static const string FGSsid;
	/**网口_0 IP*/
	static const string ETH0_IP;
	/**网口_1 IP*/
	static const string ETH1_IP;
	/**WIFI IP*/
	static const string WLAN_IP;
	/**移动网络IP*/
	static const string FG_IP;
	/**最后触屏时间*/
	static const string LAST_TOUCH;
	/**期限状态*/
	static const string LOCKStatus;
	/**当前输入值*/
	static const string CurrentInput;
	/**输入键盘上限*/
	static const string InputUL;
	/**输入键盘下限*/
	static const string InputLL;
	/**OTA状态*/
	static const string OTAStatus;
	/**OTA提示信息*/
	static const string OTAMsg;
	/**屏序列号*/
	static const string SN;
	/**当前报警数*/
	static const string WarningQty;
};
/**
 * @brief 文本标签格式
 */
class LabelFormat{
public:
	enum{
		/**常规文本*/
	    TEXT 		= 	0,
		/**数值*/
		NUMERICAL 	= 	1,
		/**货币*/
		CURRENCY 	= 	2,
		/**日期*/
		DATETIME	=	3,
		/**百分比*/
		PERCENT		=	4,
		/**科学计数*/
		SECIENCE	=	5,
	};
};
/**
 * @brief 控件类型
 */
class WidgetType{
public:
	enum{
		/**弧形进度条*/
		Arc 	= 1,
		/**进度条*/
		Bar		= 2,
		/**按钮*/
		Button  = 3,
		/**扩展按钮(保留)*/
		ButtonEx= 4,
		/**画布*/
		Canvas	= 5,
		/**图表*/
		Chart	= 6,
		/**下拉框*/
		Dropdown= 7,
		/**图片*/
		Image	= 8,
		/**标签*/
		Label	= 9,
		/**LED灯*/
		Led		= 10,
		/**列表*/
		List	= 11,
		/**码表*/
		Meter	= 12,
		/**页面*/
		Page	= 13,
		/**二维码*/
		QRCode	= 14,
		/**滚轮*/
		Roller	= 15,
		/**滑动器*/
		Slider	= 16,
		/**圆形进度*/
		Spinner	= 17,
		/**开关*/
		Switch	= 18,
		/**基础表格*/
		Table	= 19,
		/**扩展表格*/
		TableEx = 20,
		/**输入框*/
		TextArea= 21,
		/**视频*/
		Video	= 22,
		/**画线*/
		Line	= 23,
		/**面板*/
		Panel	= 24,
		/**贴磁*/
		Tile	= 25,
		/**贴磁视图*/
		TileView= 26,
	};

};
/**
 * @brief LV部件
 */
class Part{
public:
	enum{
		/**主体*/
		Main         = 0x000000,
		/**滚动条*/
		ScrollBar    = 0x010000,
		/**指示条或块*/
		Indic    	 = 0x020000,
		/**滑块或下拉钮*/
		Knob         = 0x030000,
		/**选中项*/
		Selected     = 0x040000,
		/**子项*/
		Items        = 0x050000,
		/**刻度*/
		Ticks        = 0x060000,
		/**光标*/
		Cursor       = 0x070000,
		/**自定义*/
		Custom_First = 0x080000,
		/**以上的集合，特定使用*/
		Any          = 0x0F0000,
	};
};
/**
 * @brief 语言
 */
class Language{
public:
	/**简体中文*/
	static const string zh_CN;
	/**繁体中文*/
	static const string zh_TW;
	/**Русский язык*/
	static const string ru_RU;
	/**English*/
	static const string en_US;
	/**اللغة العربية*/
	static const string ar_AR;
	/**Français*/
	static const string fr_FR;
	/**Deutsch*/
	static const string de_DE;
	/**한국어*/
	static const string ko_KR;
	/**Español*/
	static const string es_ES;
	/**にほんご*/
	static const string ja_JP;
	/**Tiếng Kinh*/
	static const string vi_VN;
};
/**
 * @brief 控件状态
 */
class WidgetState{
public:
	enum {
		/**默认松开*/
	    DEFAULT     =  0x0000,
		/**Checked*/
	    CHECKED     =  0x0001,
		/**获得焦点*/
	    FOCUSED     =  0x0002,
		/**通过键盘获得焦点*/
	    FOCUS_KEY   =  0x0004,
		/**由编码器编辑*/
	    EDITED      =  0x0008,
		/**鼠标悬停*/
	    HOVERED     =  0x0010,
		/**按下*/
	    PRESSED     =  0x0020,
		/**正在滚动*/
	    SCROLLED    =  0x0040,
		/**禁用*/
	    DISABLED    =  0x0080,
		/**自定义*/
	    USER_1      =  0x1000,
		/**自定义*/
	    USER_2      =  0x2000,
		/**自定义*/
	    USER_3      =  0x4000,
		/**自定义*/
	    USER_4      =  0x8000,
		/**任意状态，特殊用途*/
	    ANY = 0xFFFF,
	};
};
/**
 * @brief LV事件
 * （对应LVGL事件，详细说明请参考官网Ver8.3）
 */
class Event{
public:
	enum{
	    ALL = 0,

	    /**以下为输入设备事件*/
		/**被按下*/
	    PRESSED,
		/**正在被按下 (按下时，连续发出本事件)*/
	    PRESSING,
		/**仍在被按下，但光标/手指滑出了对象*/
	    PRESS_LOST,
		/**按下后在短时间(<400ms)内松开。滚动时不调用*/
	    SHORT_CLICKED,
		/**被长时间(>400ms)按下。滚动时不调用。*/
	    LONG_PRESSED,
		/**被长时间(>400ms)按下，每100ms发送一次。滚动时不调用。*/
	    LONG_PRESSED_REPEAT,
		/**被点击。滚动时不调用，不管长按。*/
	    CLICKED,
		/**在松开对象时调用*/
	    RELEASED,
		/**滚动开始, 事件参数是指向滚动动画的指针, 可以修改*/
	    SCROLL_BEGIN,
		/**滚动结束*/
	    SCROLL_END,
		/**滚动中*/
	    SCROLL,
		/**触摸屏手势*/
	    GESTURE,
		/**键盘按下键值*/
	    KEY,
		/**获得焦点*/
	    FOCUSED,
		/**失去焦点*/
	    DEFOCUSED,
		/**失去焦点但仍然被选中*/
	    LEAVE,
		/**执行高级碰撞测试*/
	    HIT_TEST,

	    /**以下为绘制控件事件*/
	    COVER_CHECK,
	    REFR_EXT_DRAW_SIZE,
	    DRAW_MAIN_BEGIN,
	    DRAW_MAIN,
	    DRAW_MAIN_END,
	    DRAW_POST_BEGIN,
	    DRAW_POST,
	    DRAW_POST_END,
	    DRAW_PART_BEGIN,
	    DRAW_PART_END,

	    /** 以下是特殊事件*/
	    VALUE_CHANGED,       /**< 值变化（比如滑块滑动）*/
	    INSERT,              /**< 插入文本（事件数据是char *）*/
	    REFRESH,             /**< （用户）通知控件刷新*/
	    READY,               /**< 处理完成*/
	    CANCEL,              /**< 取消处理*/

	    /** 其他事件*/
	    DELETE,              /** 控件正在被删除*/
	    CHILD_CHANGED,       /**< 子控件（增、删、改）变化*/
	    CHILD_CREATED,       /**< 子控件（增）变化*/
	    CHILD_DELETED,       /**< 子控件（删）变化*/
	    SCREEN_UNLOAD_START, /**< 屏幕卸载加载*/
	    SCREEN_LOAD_START,   /**< 屏幕开始加载*/
	    SCREEN_LOADED,       /**< 屏幕加载完成*/
	    SCREEN_UNLOADED,     /**< 屏幕卸载完成*/
	    SIZE_CHANGED,        /**< 控件位置、尺寸变化*/
	    STYLE_CHANGED,       /**< 控件风格样式变化*/
	    LAYOUT_CHANGED,      /**< 布局变化造成子控件位置改变*/
	    GET_SELF_SIZE,       /**< 获取控件内尺寸*/

	    _LAST,               /** 上述定义的事件数量*/

	    PREPROCESS = 0x80,
	};
};
/**
 * @brief 控件对齐方式
 */
class ALIGN{
public:
	enum {
		/**不对齐*/
	    DEFAULT = 0,
		/**内侧上左*/
	    TOP_LEFT,
		/**内侧上中*/
	    TOP_MID,
		/**内侧上右*/
	    TOP_RIGHT,
		/**内侧下左*/
	    BOTTOM_LEFT,
		/**内侧*/
	    BOTTOM_MID,
		/**内侧*/
	    BOTTOM_RIGHT,
		/**内侧*/
	    LEFT_MID,
		/**内侧*/
	    RIGHT_MID,
		/**中心*/
	    CENTER,
		/**外侧上左，上边界的上侧*/
	    OUT_TOP_LEFT,
		/**外侧上中，上边界的上侧*/
	    OUT_TOP_MID,
		/**外侧上右，上边界的上侧*/
	    OUT_TOP_RIGHT,
		/**外侧下左，下边界的下侧*/
	    OUT_BOTTOM_LEFT,
		/**外侧下中，下边界的下侧*/
	    OUT_BOTTOM_MID,
		/**外侧下右，下边界的下侧*/
	    OUT_BOTTOM_RIGHT,
		/**外侧左上，左边界的左侧*/
	    OUT_LEFT_TOP,
		/**外侧左中，左边界的左侧*/
	    OUT_LEFT_MID,
		/**外侧左下，左边界的左侧*/
	    OUT_LEFT_BOTTOM,
		/**外侧右上，右边界的右侧*/
	    OUT_RIGHT_TOP,
		/**外侧右中，右边界的右侧*/
	    OUT_RIGHT_MID,
		/**外侧右下，右边界的右侧*/
	    OUT_RIGHT_BOTTOM,
	};
};

/**
 * @brief 文本对齐方式
 */
class TextAlign{
public:
	enum {
		/**自动*/
	    AUTO,
		/**靠左*/
	    LEFT,
		/**居中*/
	    CENTER,
		/**靠右*/
	    RIGHT,
	};
};
/**
 * @brief 变量类型
 */
class DataType{
public:
	enum {
		/**32位带符号整型*/
		T_INT 		= 0,
		/**浮点*/
		T_FLOAT 	= 1,
		/**字符串*/
		T_VCHAR 	= 2,
		/**64位带符号整型*/
		T_LONG 		= 3,
		/**配方对象*/
		T_RCP 		= 4,
		/**表格*/
		T_TABLE		= 5,
		/**表视图*/
		T_TABLEVIEW	= 6,
		/**32位带符号整型*/
		D_INT 		= 10,
		/**32位无符号整型*/
		D_UINT 		= 11,
		/**浮点*/
		D_FLOAT 	= 12,
		/**字符串*/
		D_VCHAR 	= 13,
		/**布尔型/开关型*/
		D_BOOL 		= 14,
		/**64位带符号整型*/
		D_LONG 		= 15,
		/**16位符号整型*/
		D_INT16		= 16,
		/**16位无符号整型*/
		D_UINT16	= 17,
		/**16位BCD*/
		D_BCD16		= 18,
		/**32位BCD*/
		D_BCD32		= 19,
		/**未知*/
		T_NONE 		= 60,
	};
};
/**
 * @brief 设备状态
 */
class MachineSta{
public:
	enum {
		/**离线*/
		MACHINE_OFFLINE	= 0,
		/**在线*/
		MACHINE_ONLINE 	= 1,
		/**未初始化*/
		MACHINE_UNINIT	= 2
	};
};
/**
 * @brief 窗体打开方式
 */
class PageMode{
public:
	enum {
		/**打新窗体并关闭已有窗体*/
		NEWWIN	= 0,
		/**在现有窗体上弹窗*/
		MODAL 	= 1,
		/**嵌入窗体到控件*/
		EMBEDDED= 2,
		/**悬浮*/
		DRIFT 	= 3,
	};
};
/**
 * @brief 消息对话框大小
 */
class MSGBOX_SIZE{
public:
	enum {
		/**小*/
		small,
		/**中*/
		medium,
		/**大*/
		large,
		/**最大*/
		larger,
	};
};
/**
 * @brief 消息对话框字体大小
 */
class MSGBOX_FONT{
public:
	enum {
		/**小*/
		small,
		/**中*/
		medium,
		/**大*/
		large,
	};
};
/**
 * @brief 消息框类型
 */
class MSGBOX_TYPE{
public:
	enum {
		/**提示*/
		TIP,
		/**警告*/
		WARNING,
		/**确认*/
		CONFIRM,
		/**输入*/
		INPUT,
	};
};
/**
 * @brief 消息框类型
 */
class PROGRESS_TYPE{
public:
	enum {
		/**倒计时*/
		COUNT_DOWN,
		/**变量值*/
		VARIABLE,
	};
};
/**
 * @brief 消息框按钮
 */
class MSGBOX_BTN{
public:
	enum {
		/**取消/关闭*/
		CLOSE,
		/**确认*/
		OK,
		/**保留1*/
		EXT1,
		/**保留2*/
		EXT2,
	};
};
/**
 * @brief 键盘模式
 */
class IME{
public:
	enum {
		/**小写字母*/
		LC 		=	0,
		/**大写字母*/
		UC		= 	1,
		/**纯数字*/
		DIGITAL	=	2,
		/**符号及数字*/
		SYMBOL	= 	3,
		/**T9拼音*/
		T9		=	4,
		/**全键盘拼音*/
		K26		=	5,
		/**无*/
		NA		=	6,
		/**用户自定义*/
		CUSTOM	=	7
	};
};
/**
 * @brief 变量动作
 */
class SIT_DBOBJ{
public:
	enum {
		/**置ON*/
		ON,
		/**置OFF*/
		OFF,
		/**取反*/
		CNV,
		/**按1松0*/
		PON,
		/**按0松1*/
		POF,
		/**周期切换*/
		CSW,
		/**写入常数*/
		DO_WRC,
		/**递加*/
		DO_ADD,
		/**递减*/
		DO_SUB,
		/**按住按钮时周期递加（至上限）*/
		PR_ADD,
		/**按住按钮时周期递减（至下限）*/
		PR_SUB,
		/**周期往复变化*/
		CC_SWT,
		/**周期递增（至上限）*/
		AU_ADD,
		/**周期递减（至下限）*/
		AU_SUB,
		/**周期循环递增*/
		CC_ADD,
		/**周期循环递减*/
		CC_SUB,
		/**往复递增（从低到高）*/
		SW_ADD,
		/**往复递减（从高到低）*/
		SW_SUB,
		/**按住按钮时周期递加（往复）*/
		PC_ADD,
		/**按住按钮时周期递减（往复）*/
		PC_SUB,
		/**按住按钮时周期递加（循环）*/
		PB_ADD,
		/**按住按钮时周期递减（循环）*/
		PB_SUB,
		/**循环递增（从低到高）*/
		CB_ADD,
		/**循环递减（从高到低）*/
		CB_SUB,
		/**枚举计数用*/
		MAX
	};
};
/**
 * @brief 系统功能
 */
class SIT_EPOBJ {
public:
	enum {
		/**设置界面*/
		SETTINGS,
		/**系统设置*/
		SYSINFO,
		/**日期时间*/
		LOCALTIME,
		/**背光*/
		BACKLIGHT,
		/**以太网*/
		IP,
		/**wifi*/
		WIFI,
		/**4g*/
		FG,
		/**物联网*/
		WEB,
		/**密码*/
		PASS,
		/**网络测试*/
		NETTEST,
		/**wifi连接*/
		WIFILINK,
		/**重启系统*/
		REBOTT,
		/**OTA设置*/
		NETOTA,
		/**文件管理器*/
		FILEBROWER,
		/**串口测试*/
		COMTEST,
		/**分期*/
		STAGES,
		/**枚举计数用*/
		MAX
	};
};
/**
 * @brief 长文本显示模式
 */
class LabelLongMode{
public:
	enum {
		/**宽度不变，高度撑开*/
		WRAP 			=	0,
		/**宽度不变，超出部分显示...*/
		DOT				= 	1,
		/**宽度不变，超出可滑动*/
		SCROLL			=	2,
		/**宽度不变，循环滚动*/
		SCROLL_CIRCULAR	= 	3,
		/**宽度不变，切除超出部分*/
		CLIP			=	4,
	};
};
/**
 * @brief 数据库类型
 */
class DBTYPE{
public:
	enum {
		/**Sqlite*/
		SQLITE3,
		/**MySQL*/
		MYSQL,
		/**PostgreSQL*/
		POSTGRESQL,
		/**MSSql*/
		MSSQL,
		/**Redis*/
		REDIS,
	};
};
/**
 * @HIDECA 内置图标
 * @brief 内置图标
 */
class ICON{
public:
	enum {
		/**子弹*/
		BULLET,
		/**音频*/
		AUDIO,
		/**视频*/
		VIDEO,
		/**列表*/
		LIST,
		/**√*/
		OK,
		/**×*/
		CLOSE,
		/**电源*/
		POWER,
		/**设置*/
		SETTINGS,
		/**HOME*/
		HOME,
		/**下载*/
		DOWNLOAD,
		/**驱动*/
		DRIVE,
		/**刷新*/
		REFRESH,
		/**静音*/
		MUTE,
		/**中音*/
		VOLUME_MID,
		/**最大音*/
		VOLUME_MAX,
		/**图像*/
		IMAGE,
		/**TINT*/
		TINT,
		/**上一个*/
		PREV,
		/**播放*/
		PLAY,
		/**暂停*/
		PAUSE,
		/**停止*/
		STOP,
		/**下一个*/
		NEXT,
		/**弹出*/
		EJECT,
		/**左*/
		LEFT,
		/**右*/
		RIGHT,
		/**加*/
		PLUS,
		/**减*/
		MINUS,
		/**睁眼*/
		EYE_OPEN,
		/**闭眼*/
		EYE_CLOSE,
		/**警告*/
		WARNING,
		/**随机播放*/
		SHUFFLE,
		/**上*/
		UP,
		/**下*/
		DOWN,
		/**循环*/
		LOOP,
		/**目录*/
		DIRECTORY,
		/**上传*/
		UPLOAD,
		/**电话*/
		CALL,
		/**剪切*/
		CUT,
		/**复制*/
		COPY,
		/**保存*/
		SAVE,
		/**条*/
		BARS,
		/**信封*/
		ENVELOPE,
		/**充电*/
		CHARGE,
		/**粘贴*/
		PASTE,
		/**铃铛*/
		BELL,
		/**键盘*/
		KEYBOARD,
		/**GPS*/
		GPS,
		/**文件*/
		FILE,
		/**WIFI*/
		WIFI,
		/**电量满*/
		BATTERY_FULL,
		/**电量3*/
		BATTERY_3,
		/**电量2*/
		BATTERY_2,
		/**电量1*/
		BATTERY_1,
		/**电量空*/
		BATTERY_EMPTY,
		/**USB*/
		USB,
		/**蓝牙*/
		BLUETOOTH,
		/**垃圾*/
		TRASH,
		/**编辑*/
		EDIT,
		/**退格*/
		BACKSPACE,
		/**SD卡*/
		SD_CARD,
		/**换行*/
		NEW_LINE,
		/**DUMMY*/
		DUMMY,
	};
	/**
	 * @LEVEL0
	 * @brief 获取内置字体图标资源
	 * @param icon
	 * @return
	 */
	static const char * get(uint8_t icon);
};
/**
 * @brief 事件采集中的比较条件
 */
class EVENT_COMPARE{
public:
	enum {
		/**置OFF*/
		OFF,
		/**置ON*/
		ON,
		/**OFF->ON*/
		OFF_ON,
		/**ON->OFF*/
		ON_OFF,
		/**小于*/
		LE,
		/**大于*/
		GR,
		/**等于*/
		EQ,
		/**大于等于*/
		GR_EQ,
		/**小于等于*/
		LE_EQ,
		/**不等于*/
		NotEQ,
	};
};
/**
 * @brief LV标志
 */
class FLAG {
public:
	enum {
		/**使能隐藏*/
		HIDDEN          = (1L << 0),
		/**使能点击*/
		CLICKABLE       = (1L << 1),
		/**使能点击时聚焦*/
		CLICK_FOCUSABLE = (1L << 2),
		/**使能切换*/
		CHECKABLE       = (1L << 3),
		/**使能滚动*/
		SCROLLABLE      = (1L << 4),
		/**使能弹性滚动*/
		SCROLL_ELASTIC  = (1L << 5),
		/**使能惯性滚动*/
		SCROLL_MOMENTUM = (1L << 6),
		/**只允许滚动一个捕获子控件*/
		SCROLL_ONE      = (1L << 7),
		/**允许传递水平滚动到父控件*/
		SCROLL_CHAIN_HOR = (1L << 8),
		/**允许传递垂直滚动到父控件*/
		SCROLL_CHAIN_VER = (1L << 9),
		/**允许传递滚动到父控件*/
		SCROLL_CHAIN     = (SCROLL_CHAIN_HOR | SCROLL_CHAIN_VER),
		/**当聚焦时自动滚动来让对象可见*/
		SCROLL_ON_FOCUS = (1L << 10),
		/**可有上下键滚动*/
		SCROLL_WITH_ARROW  = (1L << 11),
		/**父控件可滑动时可捕获此控件*/
		SNAPPABLE       = (1L << 12),
		/**按压锁定*/
		PRESS_LOCK      = (1L << 13),
		/**将所有事件传递到父控件*/
		EVENT_BUBBLE    = (1L << 14),
		/**将所有手势传递到父控件*/
		GESTURE_BUBBLE  = (1L << 15),
		/**运行更准确的点击测试*/
		ADV_HITTEST     = (1L << 16),
		/**使能控件位置可由布局管理器调整*/
		IGNORE_LAYOUT   = (1L << 17),
		/**父控件滑动时不滑动此子控件且忽略布局调整*/
		FLOATING        = (1L << 18),
		/**不以父控件边界剪切子控件内容*/
		OVERFLOW_VISIBLE = (1L << 19),
		/**自定义标志，由布局使用*/
		LAYOUT_1        = (1L << 23),
		/**自定义标志，由布局使用*/
		LAYOUT_2        = (1L << 24),
		/**自定义标志，由控件使用*/
		WIDGET_1        = (1L << 25),
		/**自定义标志，由控件使用*/
		WIDGET_2        = (1L << 26),
		/**自定义标志，由用户使用*/
		USER_1          = (1L << 27),
		/**自定义标志，由用户使用*/
		USER_2          = (1L << 28),
		/**自定义标志，由用户使用*/
		USER_3          = (1L << 29),
		/**自定义标志，由用户使用*/
		USER_4          = (1L << 30),
	};
};
/**
 * @brief 圆弧模式
 */
class ARC_Mode{
public:
	enum {
		/**常规，正向*/
	    NORMAL,
		/**对称*/
	    SYMMETRICAL,
		/**反向*/
	    REVERSE
	};
};
/**
 * @brief 指示条模式
 */
class BAR_Mode{
public:
	enum {
		/**常规 */
	    NORMAL,
		/**对称模式: 可以指定下限值为负，从中间位置(对应零值)开始绘制，小于零往左绘制，大于零往右绘制。 */
		SYMMETRICAL,
		/**范围模式: 与对称模式类似，但可以通过setStartValue设置起始值，然后可以从这个起始值绘制指示器。 */
	    RANGE
	};
};
/**
 * @brief 动画效果
 */
class ANIM_TYPE {
public:
	enum {
		/**文字内容变化*/
		TEXT,
		/**文字(前景)颜色变化*/
		FOREGROUND,
		/**背景颜色变化*/
		BACKGROUND,
		/**边框颜色变化*/
		BORDER,
		/**水平移动*/
		HORIZONAL_MOVE,
		/**垂直移动*/
		VERTICAL_MOVE,
		/**大小变化*/
		SIZE_CHANGE
	};
};
/**
 * @brief 渐变方向
 */
class GradDir {
public:
	enum {
		/**不渐变*/
	    NONE,
		/**从上到下*/
	    VER,
		/**从左到右*/
	    HOR,
	};
};
/**
 * @brief 滚动条方向
 */
class ScrollDir {
public:
	enum {
		/**不滚动*/
	    NONE     = 0x00,
		/**向左1*/
	    LEFT     = (1 << 0),		//1
		/**向右2*/
	    RIGHT    = (1 << 1),		//2
		/**向上3*/
	    TOP      = (1 << 2),		//4
		/**向下8*/
	    BOTTOM   = (1 << 3),		//8
		/**水平滚动3*/
	    HOR      = LEFT | RIGHT,	//3
		/**垂直滚动12*/
	    VER      = TOP 	| BOTTOM,	//12
		/**水平+垂直15*/
	    ALL      = HOR 	| VER,		//15
	};
};
/**
 * @brief 日志等级
 */
class DebugLevel{
public:
	enum {
		/**关闭*/
		NO,
		/**只输出LOG*/
	    LOG,
		/**输出LOG、WARN*/
	    WARN,
		/**输出LOG、WARN、ERR*/
	    ERR,
	};
};

/**
 * @brief CURL参数
 */
class CURLOPT{
public:
	enum {
		/**URL地址*/
		URL 			= 	10002,
		/**提交字段*/
		POSTFIELDS		=	10015,
		/**写函数*/
		WRITEFUNCTION	=	20011,
		/**写数据*/
		WRITEDATA		=	10001,
		/**要连接的端口号，如果未写则使用默认端口*/
		PORT			=	3,
		/**使用的代理名称*/
		PROXY			=	10004,
		/** 获取时使用的密码选项" */
		USERPWD			=	10005,
		/** 与代理一起使用的 "用户:密码"" */
		PROXYUSERPWD	=	10006,
		/** 要获取的范围，以 ASCII 字符串形式指定 */
		RANGE			=	10007,
		/** 指定要上传的文件流（作为输入） */
		READDATA		=	10009,
		/** 用于接收错误信息的缓冲区，必须至少为 CURL_ERROR_SIZE 字节大。
		 * 如果不使用，错误信息将发送到 stderr。 */
		ERRORBUFFER		=	10010,
		/**读函数*/
		READFUNCTION	=	20012,
		/** 在此秒数后超时读取操作 */
		TIMEOUT			=	13,
		/** 如果使用了 INFILE，可以用于告知 libcurl 被发送文件的实际大小。这允许更好的错误检查并验证上传是否成功。-1 表示未知大小。*/
		INFILESIZE		=	14,
		/** 设置引用页面 */
		REFERER			=	10016,
		/** 设置 FTP PORT 字符串（接口名称，命名或数字 IP 地址）
		     使用 '-' 以使用默认地址。 */
		FTPPORT			=	10017,
		/**设置用户代理字符串*/
		USERAGENT		=	10018,
		/** 如果下载在 "低速时间" 秒内接收的字节数低于 "低速限制"，操作将被中止。
		   * 例如，如果您的连接速度相当快，在 20 秒内如果低于 2000 字节/秒，则中止。
		   * * 设置 "低速限制" */
		LOW_SPEED_LIMIT	=	19,
		/** 设置 "低速时间" */
		LOW_SPEED_TIME	=	20,
		/**设置续传偏移量*/
		RESUME_FROM		=	21,
		/**请求中的 cookie*/
		COOKIE			=	10022,
		/**请求头*/
		HTTPHEADER		=	10023,
		/**post请求*/
		HTTPPOST		=	10024,
		/**私有 SSL 证书的文件名称 */
		SSLCERT			=	10025,
		/** SSL 或 SSH 私钥的密码 */
		KEYPASSWD		=	10026,
		CRLF			=	27,
		/** 发送 QUOTE 命令的链接列表 */
		QUOTE			=	10028,

		HEADERDATA		=	10029,
		/**指向一个文件以读取初始 cookies*/
		COOKIEFILE		=	10031,
		/**指定ssl版本*/
		SSLVERSION		=	32,
		/**要使用的 HTTP 时间条件*/
		TIMECONDITION	=	33,
		/** 与上述条件一起使用的时间。指定为自 1970 年 1 月 1 日以来的秒数 */
		TIMEVALUE		=	34,
		CUSTOMREQUEST	=	10036,
		/** FILE 句柄以替代 stderr 使用 */
		STDERR			=	10037,
		/** 发送后转 QUOTE 命令的链接列表 */
		POSTQUOTE		=	10039,
		VERBOSE			=	41,
		HEADER			=	42,
		NOPROGRESS		=	43,
		NOBODY			=	44,
		/** 在 HTTP 错误代码 >= 400 时不输出 */
		FAILONERROR		=	45,
		/**上传*/
		UPLOAD			=	46,
		/**POST请求*/
		POST			=	47,
		DIRLISTONLY		=	48,
		/** 上传时追加而不是覆盖！ */
		APPEND			=	50,
		/** 指定是否从 .netrc 或 URL 读取用户+密码。
		   * 这必须是 CURL_NETRC_* 枚举之一。 */
		NETRC			=	51,
		FOLLOWLOCATION	=	52,
		/** 以文本/ASCII 格式传输数据 */
		TRANSFERTEXT	=	53,
		/**PUT*/
		PUT				=	54,
		/** 传递给 CURLOPT_PROGRESSFUNCTION 和 CURLOPT_XFERINFOFUNCTION 回调的数据 */
		PROGRESSDATA	=	10057,
		AUTOREFERER		=	58,
		/**代理的端口*/
		PROXYPORT		=	59,
		/**POST 输入数据的大小*/
		POSTFIELDSIZE	=	60,
		/** 通过 HTTP 代理隧道非 HTTP 操作 */
		HTTPPROXYTUNNEL	=	61,
		/** 设置用于作为出站网络接口的接口字符串 */
		INTERFACE		=	62,
		KRBLEVEL		=	10063,
		/** 设置是否在 SSL 握手中验证对等方，设置为 1 以验证。 */
		SSL_VERIFYPEER	=	64,
		/** 用于验证对等证书的 CApath 或 CAfile
		   该选项仅在 SSL_VERIFYPEER 为 true 时使用 */
		CAINFO			=	10065,
		/** 最大 HTTP 重定向数 */
		MAXREDIRS		=	68,
		/** 传递一个长整型设置为 1 以获取请求文档的日期,传递零以关闭。 */
		FILETIME		=	69,
		/** 指向一个 telnet 选项的链接列表 */
		TELNETOPTIONS	=	10070,
		/** 最大缓存活跃连接数 */
		MAXCONNECTS		=	71,
		/** 设置为明确使用新连接进行即将到来的传输。谨慎使用 */
		FRESH_CONNECT	=	74,
		/** 设置为明确禁止即将到来的传输连接在完成时被重用。谨慎使用*/
		FORBID_REUSE	=	75,
		/** 设置为包含随机数据的文件名，以便 libcurl 在进行 SSL 连接时
		   用于初始化随机引擎。 */
		RANDOM_FILE		=	10076,
		EGDSOCKET		=	10077,
		/**超时连接操作*/
		CONNECTTIMEOUT	=	78,
		HEADERFUNCTION	=	20079,
		/** 设置此值以强制 HTTP 请求回到 GET。只有在第一次使用 POST、PUT 或自定义请求后才能真正使用。 */
		HTTPGET			=	80,
		/** 设置是否在 SSL 握手中验证对等证书的公用名称，
		   设置 1 检查存在性，2 确保其与提供的主机名匹配。 */
		SSL_VERIFYHOST	=	81,
		/** 指定在完成操作后写入所有已知 cookies 的文件名。
		   将文件名设置为 "-"（破折号）以使其转到 stdout。 */
		COOKIEJAR		=	10082,
		/** 指定要使用的 SSL 密码 */
		SSL_CIPHER_LIST	=	10083,
		/**指定要使用的 HTTP 版本*/
		HTTP_VERSION	=	84,
		FTP_USE_EPSV	=	85,
		/** 存储 SSL 证书的文件类型（"DER"、"PEM"、"ENG"） */
		SSLCERTTYPE		=	10086,
		/** 存储私有 SSL 密钥的文件名 */
		SSLKEY			=	10087,
		/** 存储私有 SSL 密钥的文件类型（"DER"、"PEM"、"ENG"） */
		SSLKEYTYPE		=	10088,
		/** SSL 子系统的加密引擎 */
		SSLENGINE		=	10089,
		/** 将 SSL 子系统的加密引擎设置为默认值*/
		SSLENGINE_DEFAULT=	90,
		/** DNS 缓存超时 */
		DNS_CACHE_TIMEOUT=	92,
		/** 发送预传输 QUOTE 命令的链表 */
		PREQUOTE		=	10093,
		/** 设置调试函数 */
		DEBUGFUNCTION	=	20094,
		/** 设置调试函数的数据 */
		DEBUGDATA		=	10095,
		/** 将此标记为 cookie 会话的开始 */
		COOKIESESSION	=	96,
		/** 用于验证对等证书的 CApath 目录
		   该选项仅在 SSL_VERIFYPEER 为 true 时使用 */
		CAPATH			=	10097,

		BUFFERSIZE		=	98,
		NOSIGNAL		=	99,
		/** 提供一个 CURLShare 用于对非线程安全数据进行互斥 */
		SHARE			=	10100,
		/** 表示代理的类型。接受的值为 CURLPROXY_HTTP（默认），
		   CURLPROXY_HTTPS，CURLPROXY_SOCKS4，CURLPROXY_SOCKS4A 和
		   CURLPROXY_SOCKS5。 */
		PROXYTYPE		=	101,
		ACCEPT_ENCODING	=	10102,
		/** 设置指向私有数据的指针 */
		PRIVATE			=	10103,
		/** 设置 HTTP 响应头中 HTTP 200 的别名 */
		HTTP200ALIASES	=	10104,
		/**在跟随位置时继续发送认证（用户名+密码）*/
		UNRESTRICTED_AUTH=	105,
		/** 明确切换 FTP 引擎是否使用 EPRT 命令（
		   它还会禁用 LPRT 尝试）。默认情况下，将始终尝试这两个
		   命令，然后才是传统的 PORT 命令。 */
		FTP_USE_EPRT	=	106,
		HTTPAUTH		=	107,
		/** 设置 ssl 上下文回调函数，目前仅适用于 OpenSSL ssl_ctx
		   作为第二个参数。该函数必须符合
		   curl_ssl_ctx_callback 原型。 */
		SSL_CTX_FUNCTION=	20108,
		/** 设置 ssl 上下文回调函数的第三个参数的数据 */
		SSL_CTX_DATA	=	10109,
		FTP_CREATE_MISSING_DIRS=110,
		PROXYAUTH		=	111,
		/** FTP 选项，改变与获取响应相关的超时（以秒为单位）。
		   这与传输超时时间不同，基本上要求 FTP 服务器及时
		   确认命令。 */
		FTP_RESPONSE_TIMEOUT=112,
		IPRESOLVE		=	113,
		/**将此选项设置为限制从 HTTP 或 FTP 服务器下载的文件大小。*/
		MAXFILESIZE		=	114,
		/**指定正在上传的文件的大小。-1 意味着未知。*/
		INFILESIZE_LARGE=	30115,
		/**设置续传偏移量*/
		RESUME_FROM_LARGE=	30116,
		/**设置将从 HTTP 或 FTP 服务器下载的最大数据大小。*/
		MAXFILESIZE_LARGE=	30117,
		NETRC_FILE		=	10118,
		/** 为 FTP 启用 SSL/TLS，选择一个：
		   USESSL_TRY     - 尝试使用 SSL，否则继续
		   USESSL_CONTROL - 控制连接使用 SSL 或失败
		   USESSL_ALL     - 所有通信使用 SSL 或失败
		*/
		USE_SSL			=	119,
		POSTFIELDSIZE_LARGE=30120,
		TCP_NODELAY		=	121,

		FTPSSLAUTH		=	129,
		/** 用于设置 IO 控制函数指针 */
		IOCTLFUNCTION	=	20130,
		IOCTLDATA		=	10131,
		FTP_ACCOUNT		=	10134,
		/**写入COOKIE队列*/
		COOKIELIST		=	10135,
		/** 忽略 Content-Length */
		IGNORE_CONTENT_LENGTH=136,
		/** 设置为非零值以跳过在 227 PASV FTP 服务器响应中接收到的 IP 地址。*/
		FTP_SKIP_PASV_IP=	137,
		/**选择在执行 FTP 时使用的 "文件方法"*/
		FTP_FILEMETHOD	=	138,
		/** 绑定socket的本地端口号 */
		LOCALPORT		=	139,
		/** 尝试的端口数量，包括设置的第一个 LOCALPORT。
		   因此，设置为 1 将仅尝试第一个，不进行额外尝试。 */
		LOCALPORTRANGE	=	140,
		/**仅连接不传输数据*/
		CONNECT_ONLY	=	141,
		/** 用于转换网络编码的自定义函数（替代 libcurl 内的 iconv 调用） */
		CONV_FROM_NETWORK_FUNCTION=20142,
		/** 用于将数据转换到网络编码的自定义函数（替代 libcurl 内的 iconv 调用） */
		CONV_TO_NETWORK_FUNCTION=20143,
		/** 用于从 UTF8 转换的自定义函数（仅用于 SSL 证书处理） */
		CONV_FROM_UTF8_FUNCTION=20144,
		/** 设置发送的最大速度（字节/秒） */
		MAX_SEND_SPEED_LARGE=30145,
		/** 设置接收的最大速度（字节/秒） */
		MAX_RECV_SPEED_LARGE=30146,
		/** 当 USER/PASS 验证失败时，发送的备用命令字符串 */
		FTP_ALTERNATIVE_TO_USER=10147,
		/* 用于设置socket选项的回调函数 */
		SOCKOPTFUNCTION	=	20148,
		SOCKOPTDATA		=	20149,
		/** 设置为 0 以禁用此传输的会话 ID 重用，默认启用（== 1） */
		SSL_SESSIONID_CACHE=150,
		/** 允许的 SSH 身份验证方法 */
		SSH_AUTH_TYPES	=	151,
		/** 用于 SCP/SFTP 公钥/私钥身份验证 */
		SSH_PUBLIC_KEYFILE=	10152,
		SSH_PRIVATE_KEYFILE=10153,
		/** 认证后发送 CCC（清除命令通道） */
		FTP_SSL_CCC		=	154,
		/** 与 TIMEOUT 和 CONNECTTIMEOUT 相同，但有毫秒分辨率 */
		TIMEOUT_MS		=	155,
		CONNECTTIMEOUT_MS=	156,
		/** 设置为零以禁用 libcurl 的解码，从而传递原始的主体数据（即使被编码/压缩） */
		HTTP_TRANSFER_DECODING=157,
		HTTP_CONTENT_DECODING=158,
		/** 为支持的协议（如 SFTP/SCP/FILE）在远程服务器上创建文件和目录时的权限 */
		NEW_FILE_PERMS	=	159,
		NEW_DIRECTORY_PERMS=160,
		/**设置重定向时 POST 的行为*/
		POSTREDIR		=	161,
		/** 用于 SCP/SFTP 验证主机公钥的 MD5 值 */
		SSH_HOST_PUBLIC_KEY_MD5=10162,
		OPENSOCKETFUNCTION=	20163,
		OPENSOCKETDATA	=	10164,
		/** 用于 POST 可变输入字段 */
		COPYPOSTFIELDS	=	10165,
		/**在通过 HTTP 代理进行 FTP 时设置传输模式*/
		PROXY_TRANSFER_MODE=166,
		/** 用于在输入流中进行查找的回调函数 */
		SEEKFUNCTION	=	20167,
		SEEKDATA		=	10168,
		/** CRL 文件 */
		CRLFILE			=	10169,
		/** 签发者证书 */
		ISSUERCERT		=	10170,
		/** （IPv6）地址范围 */
		ADDRESS_SCOPE	=	171,
		/** 收集证书链信息，并在传输完成后通过 CURLINFO_CERTINFO 获取 */
		CERTINFO		=	172,
		/** 用于获取时使用的用户名和密码 */
		USERNAME		=	10173,
		PASSWORD		=	10174,
		/** 用于通过代理获取时使用的用户名和密码 */
		PROXYUSERNAME	=	10175,
		PROXYPASSWORD	=	10176,
		NOPROXY			=	10177,
		/** TFTP 传输的块大小 */
		TFTP_BLKSIZE	=	178,
		/** Socks 服务 */
		SOCKS5_GSSAPI_SERVICE=10179,
		SOCKS5_GSSAPI_NEC=	180,
		/**设置允许用于传输的协议的位掩码*/
		PROTOCOLS		=	181,

		REDIR_PROTOCOLS	=	182,
		/** 设置要使用的 SSH knownhost 文件名 */
		SSH_KNOWNHOSTS	=	10183,
		/** 设置 SSH 主机密钥回调*/
		SSH_KEYFUNCTION	=	20184,
		/** 设置 SSH 主机密钥回调的自定义指针 */
		SSH_KEYDATA		=	10185,
		/** 设置 SMTP 邮件发送者 */
		MAIL_FROM		=	10186,
		/** 设置 SMTP 邮件接收者列表 */
		MAIL_RCPT		=	10187,
		/** FTP: 在 PASV 前发送 PRET */
		FTP_USE_PRET	=	188,
		/** RTSP 请求方法 (OPTIONS, SETUP, PLAY 等...) */
		RTSP_REQUEST	=	189,
		/** RTSP 会话标识符 */
		RTSP_SESSION_ID	=	10190,
		/** RTSP 流 URI */
		RTSP_STREAM_URI	=	10191,
		/** 在 RTSP 请求中使用的 Transport 头 */
		RTSP_TRANSPORT	=	10192,
		/** 手动初始化客户端 RTSP CSeq */
		RTSP_CLIENT_CSEQ=	193,
		/** 手动初始化服务器 RTSP CSeq */
		RTSP_SERVER_CSEQ=	194,
		INTERLEAVEDATA	=	10195,
		INTERLEAVEFUNCTION=	20196,
		/** 开启通配符匹配 */
		WILDCARDMATCH	=	197,
		/** 目录匹配回调，在下载单个文件（块）开始之前调用 */
		CHUNK_BGN_FUNCTION=	20198,
		/** 目录匹配回调，在文件（块）下载完成或跳过之后调用 */
		CHUNK_END_FUNCTION=	20199,
		/**改变通配符匹配的匹配*/
		FNMATCH_FUNCTION=	20200,
		/**自定义块数据指针*/
		CHUNK_DATA		=	10201,
		FNMATCH_DATA	=	10202,
		RESOLVE			=	10203,
		/** 设置用于 TLS 认证的用户名和密码 */
		TLSAUTH_USERNAME=	10204,
		TLSAUTH_PASSWORD=	10205,
		/** 设置 TLS 认证类型 */
		TLSAUTH_TYPE	=	10206,
		TRANSFER_ENCODING=	207,
		/**用于关闭套接字的回调函数*/
		CLOSESOCKETFUNCTION=20208,
		CLOSESOCKETDATA	=	10209,
		GSSAPI_DELEGATION=	210,
		/** 设置用于 DNS 解析的名称服务器 */
		DNS_SERVERS		=	10211,
		/** 接受操作的超时时间（当前仅适用于 FTP），以毫秒为单位 */
		ACCEPTTIMEOUT_MS=	212,
		/** 设置 TCP 保活 */
		TCP_KEEPALIVE	=	213,
		TCP_KEEPIDLE	=	214,
		TCP_KEEPINTVL	=	215,
		/**使用位掩码启用/禁用特定 SSL 功能*/
		SSL_OPTIONS		=	216,
		/** 设置 SMTP 认证发起者 */
		MAIL_AUTH		=	10217,
		/** 启用/禁用 SASL 初始响应 */
		SASL_IR			=	218,
		XFERINFOFUNCTION=	20219,
		XOAUTH2_BEARER	=	10220,
		DNS_INTERFACE	=	10221,
		DNS_LOCAL_IP4	=	10222,
		DNS_LOCAL_IP6	=	10223,
		/** 直接设置身份认证选项 */
		LOGIN_OPTIONS	=	10224,
		/** 启用/禁用 TLS NPN 扩展（不启用可能导致 HTTP/2 在 SSL 上失败） */
		SSL_ENABLE_NPN	=	225,
		/** 启用/禁用 TLS ALPN 扩展（没有可能导致 http2 在 SSL 上失败） */
		SSL_ENABLE_ALPN	=	226,
		/** 等待 HTTP 请求的响应时间，其中包含
		   Expect: 100-continue 头，发送数据之前等待的时间。 */
		EXPECT_100_TIMEOUT_MS=227,
		PROXYHEADER		=	10228,
		HEADEROPT		=	229,
		/** 用于验证对等体公钥的公钥，采用 DER 形式
		   仅在 SSL_VERIFYPEER 为 true 时使用此选项 */
		PINNEDPUBLICKEY	=	10230,
		/** Unix 域套接字的路径 */
		UNIX_SOCKET_PATH=	10231,
		/** 设置是否验证证书状态。 */
		SSL_VERIFYSTATUS=	232,
		/** 设置是否启用 TLS false start。 */
		SSL_FALSESTART	=	233,
		PATH_AS_IS		=	234,
		/** 代理服务名称 */
		PROXY_SERVICE_NAME=	10235,
		/** 服务名称 */
		SERVICE_NAME	=	10236,
		PIPEWAIT		=	237,
		/** 设置 curl 在给定没有协议的 URL 时使用的协议 */
		DEFAULT_PROTOCOL=	10238,
		/** 设置流的权重，1 - 256（默认值为 16） */
		STREAM_WEIGHT	=	239,
		/** 设置流对另一个 CURL 句柄的依赖 */
		STREAM_DEPENDS	=	10240,
		STREAM_DEPENDS_E=	10241,
		/** 不向服务器发送任何 tftp 选项请求 */
		TFTP_NO_OPTIONS	=	242,
		CONNECT_TO		=	10243,
		/** 设置 TCP 快速打开 */
		TCP_FASTOPEN	=	244,
		/** 如果服务器早期以 HTTP 状态码 >= 300 响应，则继续发送数据 */
		KEEP_SENDING_ON_ERROR=245,
		/** 用于验证代理证书的 CApath 或 CAfile
		   仅在 PROXY_SSL_VERIFYPEER 为 true 时使用此选项 */
		PROXY_CAINFO	=	10246,
		/** 用于验证代理证书的 CApath 目录
		   仅在 PROXY_SSL_VERIFYPEER 为 true 时使用此选项 */
		PROXY_CAPATH	=	10247,
		/** 设置是否验证代理在 SSL 握手中的证书，
		   设置为 1 以进行验证。 */
		PROXY_SSL_VERIFYPEER=248,
		/** 设置是否验证 SSL 握手中代理证书的公共名称，
		   设置为 1 以检查存在性，设置为 2 以确保与提供的主机名匹配。 */
		PROXY_SSL_VERIFYHOST=249,
		PROXY_SSLVERSION=	250,
		/** 设置用于代理的 TLS 认证用户名和密码 */
		PROXY_TLSAUTH_USERNAME=10251,
		PROXY_TLSAUTH_PASSWORD=10252,
		/** 设置用于代理的 TLS 认证类型 */
		PROXY_TLSAUTH_TYPE=	10253,
		/** 保存代理私有 SSL 证书的文件名 */
		PROXY_SSLCERT	=	10254,
		/** 保存代理 SSL 证书的文件类型（"DER", "PEM", "ENG"） */
		PROXY_SSLCERTTYPE=	10255,
		/** 保存代理私有 SSL 密钥的文件名 */
		PROXY_SSLKEY	=	10256,
		/** 保存代理私有 SSL 密钥的文件类型（"DER", "PEM", "ENG"） */
		PROXY_SSLKEYTYPE=	10257,
		/** 代理的 SSL 私钥密码 */
		PROXY_KEYPASSWD	=	10258,
		/** 指定用于代理的 SSL 密码 */
		PROXY_SSL_CIPHER_LIST=10259,
		/** 代理的 CRL 文件 */
		PROXY_CRLFILE	=	10260,
		PROXY_SSL_OPTIONS=	261,
		/** 要使用的预代理名称。 */
		PRE_PROXY		=	10262,
		/** 用于验证代理公钥的公钥，采用 DER 形式
		   仅在 PROXY_SSL_VERIFYPEER 为 true 时使用此选项 */
		PROXY_PINNEDPUBLICKEY=10263,
		ABSTRACT_UNIX_SOCKET=10264,
		SUPPRESS_CONNECT_HEADERS=265,
		REQUEST_TARGET	=	10266,
		SOCKS5_AUTH		=	267,
		/** 启用/禁用 SSH 压缩 */
		SSH_COMPRESSION	=	268,
		/** 发送 MIME 数据。 */
		MIMEPOST		=	269

	};
};

/**
 * @brief CURL结果码
 */
class CURLCODE{
public:
	enum {
		/**OK*/
		OK 							= 	0,
		/**不支持的协议*/
		UNSUPPORTED_PROTOCOL		=	1,
		/**初始化失败*/
		FAILED_INIT					=	2,
		/**URL 格式错误*/
		URL_MALFORMAT				=	3,
		/**无法解析代理*/
		COULDNT_RESOLVE_PROXY		=	5,
		/**无法解析主机*/
		COULDNT_RESOLVE_HOST		=	6,
		/**无法连接*/
		COULDNT_CONNECT				=	7,
		/**服务器回复异常*/
		WEIRD_SERVER_REPLY			=	8,
		/**远程访问被拒绝*/
		REMOTE_ACCESS_DENIED		=	9,
		/**FTP 传输异常回复*/
		FTP_WEIRD_PASS_REPLY		=	11,
		/**FTP 被动模式异常回复*/
		FTP_WEIRD_PASV_REPLY		=	13,
		/**FTP 227 格式异常*/
		FTP_WEIRD_227_FORMAT		=	14,
		/**无法获取 FTP 主机*/
		FTP_CANT_GET_HOST			=	15,
		/**FTP 无法设置类型*/
		FTP_COULDNT_SET_TYPE		=	17,
		/**部分文件*/
		PARTIAL_FILE				=	18,
		/**FTP 无法获取文件*/
		FTP_COULDNT_RETR_FILE		=	19,
		/**引用命令失败*/
		QUOTE_ERROR					=	21,
		/**HTTP 返回错误*/
		HTTP_RETURNED_ERROR			=	22,
		/**写入错误*/
		WRITE_ERROR					=	23,
		/**上传失败*/
		UPLOAD_FAILED				=	25,
		/**无法打开/读取文件*/
		READ_ERROR					=	26,
		/**内存不足*/
		OUT_OF_MEMORY				=	27,
		/**操作超时*/
		OPERATION_TIMEDOUT			=	28,
		/**FTP 端口操作失败*/
		FTP_PORT_FAILED				=	30,
		/**REST 命令失败*/
		FTP_COULDNT_USE_REST		=	31,
		/**RANGE 命令失败*/
		RANGE_ERROR					=	33,
		/**HTTP POST 错误*/
		HTTP_POST_ERROR				=	34,
		/**SSL 连接错误*/
		SSL_CONNECT_ERROR			=	35,
		/**无法恢复下载*/
		BAD_DOWNLOAD_RESUME			=	36,
		/**无法读取文件*/
		FILE_COULDNT_READ_FILE		=	37,
		/**LDAP 绑定失败*/
		LDAP_CANNOT_BIND			=	38,
		/**LDAP 搜索失败*/
		LDAP_SEARCH_FAILED			=	39,
		/**被回调中止*/
		ABORTED_BY_CALLBACK			=	42,
		/**函数参数错误*/
		BAD_FUNCTION_ARGUMENT		=	43,
		/**CURLOPT_INTERFACE 失败*/
		INTERFACE_FAILED			=	45,
		/**重定向过多*/
		TOO_MANY_REDIRECTS			=	47,
		/**用户指定了未知选项*/
		UNKNOWN_OPTION				=	48,
		/**Telnet 选项语法错误*/
		TELNET_OPTION_SYNTAX		=	49,
		/**对等体证书或指纹未通过验证*/
		PEER_FAILED_VERIFICATION	=	51,
		/**未接收到任何内容*/
		GOT_NOTHING					=	52,
		/**找不到 SSL 加密引擎*/
		SSL_ENGINE_NOTFOUND			=	53,
		/**无法设置默认 SSL 加密引擎*/
		SSL_ENGINE_SETFAILED		=	54,
		/**发送网络数据失败*/
		SEND_ERROR					=	55,
		/**接收网络数据失败*/
		RECV_ERROR					=	56,
		/**本地证书出现问题*/
		SSL_CERTPROBLEM				=	58,
		/**无法使用指定的密码*/
		SSL_CIPHER					=	59,
		/**CA 证书问题*/
		SSL_CACERT					=	60,
		/**编码未识别或错误*/
		BAD_CONTENT_ENCODING		=	61,
		/**LDAP URL 无效*/
		LDAP_INVALID_URL			=	62,
		/**文件大小超过限制*/
		FILESIZE_EXCEEDED			=	63,
		/**请求的 FTP SSL 级别失败*/
		USE_SSL_FAILED				=	64,
		/**发送数据需要回退但失败*/
		SEND_FAIL_REWIND			=	65,
		/**SSL 引擎初始化失败*/
		SSL_ENGINE_INITFAILED		=	66,
		/**用户名、密码或类似信息未被接受*/
		LOGIN_DENIED				=	67,
		/**服务器上未找到文件*/
		TFTP_NOTFOUND				=	68,
		/**服务器上的权限问题*/
		TFTP_PERM					=	69,
		/**服务器磁盘空间不足*/
		REMOTE_DISK_FULL			=	70,
		/**非法的 TFTP 操作*/
		TFTP_ILLEGAL				=	71,
		/**未知传输 ID*/
		TFTP_UNKNOWNID				=	72,
		/**文件已存在*/
		REMOTE_FILE_EXISTS			=	73,
		/**没有这样的用户*/
		TFTP_NOSUCHUSER				=	74,
		/**转换失败*/
		CONV_FAILED					=	75,
		/**需要注册转换回调*/
		CONV_REQD					=	76,
		/**无法加载 CACERT 文件，缺失或格式错误*/
		SSL_CACERT_BADFILE			=	77,
		/**远程文件未找到*/
		REMOTE_FILE_NOT_FOUND		=	78,
		/**SSH 层的错误*/
		SSH							=	79,
		/** SSL 连接关闭失败*/
		SSL_SHUTDOWN_FAILED			=	80,
		/**socket尚未准备好发送/接收*/
		AGAIN						=	81,
		/**无法加载 CRL 文件，缺失或格式错误*/
		SSL_CRL_BADFILE				=	82,
		/**颁发者检查失败*/
		SSL_ISSUER_ERROR			=	83,
		/**PRET 命令失败*/
		FTP_PRET_FAILED				=	84,
		/**RTSP CSeq 编号不匹配*/
		RTSP_CSEQ_ERROR				=	85,
		/**RTSP 会话 ID 不匹配*/
		RTSP_SESSION_ERROR			=	86,
		/**无法解析 FTP 文件列表*/
		FTP_BAD_FILE_LIST			=	87,
		/**块回调报告错误*/
		CHUNK_FAILED				=	88,
		/**没有可用连接，会话将被排队*/
		NO_CONNECTION_AVAILABLE		=	89,
		/**指定的固定公钥不匹配*/
		SSL_PINNEDPUBKEYNOTMATCH	=	90,
		/**证书状态无效*/
		SSL_INVALIDCERTSTATUS		=	91,
		/**HTTP/2 帧层中的流错误*/
		HTTP2_STREAM				=	92

	};
};

/**
 * @brief 人脸识别模块请求码
 */
class EASENCODE{
public:
	enum {
		 /** 请求（命令）回复消息，成功时带数据或失败时带原因 */
		 MID_REPLY 					=	0x00,
		 /** 通知主机，例如人脸的位置或角度 */
		 MID_NOTE  					=	0x01,
		 /** 发送图像到主机 */
		 MID_IMAGE 					= 	0X02,
		 // 主机到模块（H->M）
		 /** 停止并清除所有正在处理的消息，进入待机模式 */
		 MID_RESET					=	0x10,
		 /** ping 模块并获取状态 */
		 MID_GETSTATUS				=	0x11,
		 /** 验证摄像头前的人 */
		 MID_VERIFY					=	0x12,
		 /** 注册并登记摄像头前的人 */
		 MID_ENROLL					=	0x13,
		 /** 拍照并保存 */
		 MID_SNAPIMAGE				=	0x16,
		 /** 获取已保存图像的大小 */
		 MID_GETSAVEDIMAGE			=	0x17,
		 /** 上传图像 */
		 MID_UPLOADIMAGE			=	0x18,
		 /** 使用一帧图像进行注册和登记 */
		 MID_ENROLL_SINGLE			=	0X1D,
		 /** 删除指定用户 */
		 MID_DELUSER				=	0x20,
		 /** 删除所有注册用户 */
		 MID_DELALL					=	0x21,
		 /** 获取用户信息 */
		 MID_GETUSERINFO			=	0x22,
		 /** 重置人脸状态 */
		 MID_FACERESET				=	0x23,
		 /** 获取所有用户 ID */
		 MID_GET_ALL_USERID			=	0x24,
		 /** 获取版本信息 */
		 MID_GET_VERSION			=	0x30,
		 /** 请求模块进入 OTA 模式 */
		 MID_START_OTA				=	0x40,
		 /** 请求模块退出 OTA 模式 */
		 MID_STOP_OTA				=	0x41,
		 /** 查询当前 OTA 状态 */
		 MID_GET_OTA_STATUS			=	0x42,
		 /** OTA 头数据 */
		 MID_OTA_HEADER				=	0x43,
		 /** 数据包，携带实际固件数据 */
		 MID_OTA_PACKET				=	0x44,
		 /** 初始化加密通信 */
		 MID_INIT_ENCRYPTION		=	0x50,
		 /** 配置 UART 波特率 */
		 MID_CONFIG_BAUDRATE		=	0x51,
		 /** 设置释放加密密钥（警告!!!：一旦设置，密钥将无法修改） */
		 MID_SET_RELEASE_ENC_KEY	=	0x52,
		 /** 设置调试加密密钥 */
		 MID_SET_DEBUG_ENC_KEY		=	0x53,
		 /** 获取日志文件 */
		 MID_GET_LOGFILE			=	0x60,
		 /** 上传日志文件命令到云 */
		 MID_UPLOAD_LOGFILE			=	0x61,
		 /** 上传日志文件命令到云 */
		 MID_UVC_DIR				=	0x76,
		 /** 工厂测试 */
		 MID_FACTORY_TEST			=	0xC0,
		 /** DDR 测试 */
		 MID_DDR_TEST = 0xC1,
		 /** 设置阈值等级 */
		 MID_SET_THRESHOLD_LEVEL	=	0xD4,
		 /** 准备关机 */
		 MID_POWERDOWN				=	0xED,
		 /** 调试模式 */
		 MID_DEBUG_MODE				=	0xF0,
		 /** 获取调试信息的大小 */
		 MID_GET_DEBUG_INFO			=	0xF1,
		 /** 上传调试信息 */
		 MID_UPLOAD_DEBUG_INFO		=	0xF2,
		 /** 进入演示模式，验证流程将跳过特征比较步骤 */
		 MID_DEMOMODE				=	0xFE,
		 /** 保留 */
		 MID_MAX					=	0xFF,
		 /** 集成 */
		 MID_ENROLL_ITG				=	0x26,
		 /** 从图像注册 */
		 MID_ENROLL_FROM_IMAGE		=	0x91,
		 /** 文件传输数据包 */
		 MID_TRANS_FILE_PACKET		=	0x90
	};
};
/**
 * @brief 人脸识别模块响应码
 */
class EASENREPLY{
public:
	enum {
		/**成功*/
		MR_SUCCESS    				=	0,
		/**模块拒绝该命令*/
		MR_REJECTED					= 	1,
		/**算法被中止*/
		MR_ABORTED					= 	2,
		/**摄像头打开失败*/
		MR_FAILED4_CAMERA			=	4,
		/**未知错误*/
		MR_FAILED4_UNKNOWNREASON	=	5,
		/**无效参数*/
		MR_FAILED4_INVALIDPARAM		=	6,
		/**内存不足*/
		MR_FAILED4_NOMEMORY			=	7,
		/**没有用户登记*/
		MR_FAILED4_UNKNOWNUSER		=	8,
		/**超过最大用户数量*/
		MR_FAILED4_MAXUSER			=	9,
		/**该人脸已被登记*/
		MR_FAILED4_FACEENROLLED		=	10,
		/**活体检测失败*/
		MR_FAILED4_LIVENESSCHECK	=	12,
		/**超过时间限制*/
		MR_FAILED4_TIMEOUT			=	13,
		/**授权失败*/
		MR_FAILED4_AUTHORIZATION	=	14,
		/**摄像头视场测试失败*/
		MR_FAILED4_CAMERAFOV		=	15,
		/**摄像头质量测试失败*/
		MR_FAILED4_CAMERAQUA		=	16,
		/**摄像头结构测试失败*/
		MR_FAILED4_CAMERASTRU		=	17,
		/**启动超时*/
		MR_FAILED4_BOOT_TIMEOUT		=	18,
		/**读取文件失败*/
		MR_FAILED4_READ_FILE		=	19,
		/**写入文件失败*/
		MR_FAILED4_WRITE_FILE		=	20,
		/**必须设置加密*/
		MR_FAILED4_NO_ENCRYPT		=	21

	};
};
/**
 * @brief 指纹模块响应码
 */
class AS608REPLY{
public:
	enum {
		/**指令执行完毕或 OK*/
		MR_OK						=	0X00,
		/**数据包接收错误*/
		MR_PACK_RECIVE_ERR			=	0X01,
		/**传感器上没有手指*/
		MR_NOFINGER					=	0X02,
		/**录入指纹图像失败*/
		MR_ENROLLERR				=	0X03,
		/**指纹库满*/
		MR_TOODRY					=	0X04,
		/**指纹图像太干、太淡而生不成特征*/
		MR_TOOWET					=	0X05,
		/**指纹图像太乱而生不成特征*/
		MR_TOOMESSY					=	0X06,
		/**指纹图像正常，但特征点太少（或面积太小）而生不成特征*/
		MR_TOOFEW					=	0X07,
		/** 指纹不匹配*/
		MR_NOMATCH					=	0X08,
		/**没搜索到指纹*/
		MR_NOSEARCH					=	0X09,
		/**特征合并失败*/
		MR_MERGEERR					=	0x0a,
		/**访问指纹库时地址序号超出指纹库范围*/
		MR_OUTRAGE					=	0x0b,
		/**从指纹库读模板出错或无效*/
		MR_READCHAERR				=	0x0c,
		/**上传特征失败*/
		MR_UPLOADCHAERR				=	0x0d,
		/**模块不能接受后续数据包*/
		MR_LOSTDATA					=	0x0e,
		/**上传图像失败*/
		MR_UPLOADPICERR				=	0x0f,
		/**删除模板失败*/
		MR_DELCHAERR				=	0x10,
		/**清空指纹库失败*/
		MR_EMPTYCHAERR				=	0x11,
		/**口令不正确*/
		MR_PWERR					=	0x13,
		/**缓冲区内没有有效原始图而生不成图像*/
		MR_NOIMG					=	0x15,
		/**读写 FLASH 出错*/
		MR_FLAHSERR					=	0x18,
		/**未定义错误*/
		MR_UNDEFERR					=	0x19,
		/**无效寄存器号*/
		MR_NOREG					=	0x1a,
		/**寄存器设定内容错误号*/
		MR_REGERR					=	0x1b,
		/**记事本页码指定错误*/
		MR_NOTEPAGEERR				=	0x1c,
		/**端口操作失败*/
		MR_PORTERR					=	0x1d,
		/**自动注册（enroll）失败*/
		MR_AUTOENROLLERR			=	0x1e,
		/**指纹库满*/
		MR_CHARFULL					=	0x1f
	};
};

/**
 * @brief 指纹模块请求码
 */
class AS608CODE{
public:
	enum {
		/**获取指纹图像*/
		PS_GetImage				=	0x01,
		/**生成特征*/
		PS_GenChar				=	0X02,
		/**对比两次指纹*/
		PS_Match				=	0x03,
		/**生成指纹模板*/
		PS_RegModel				=	0x05,
		/**储存模板*/
		PS_StoreChar			=	0x06,
		/**搜索指纹*/
		PS_HighSpeedSearch		=	0x1b,
		/**删除单个指纹*/
		PS_Empty				=	0x0d,
		/**生成特征*/
		PS_DeletChar			=	0x0c,
		/**自动注册*/
		PS_AutoEnroll 			=	0x31,
		/**自动验证*/
		PS_AutoIdentify 		=	0x32,
		/**取消指令*/
		PS_Cancel				=	0x30,
		/**下载图像*/
		PS_DownImage			=	0x0b,
		/**下载模板*/
		PS_DownChar				=	0x09,
		/**上传图像*/
		PS_UpImage				=	0x0a,
		/**上传模板*/
		PS_UpChar				=	0x08,
		/**下载到上位机图片状态*/
		PS_UpImgStatus			=   0x88,
		/**上传到模块图片状态*/
		PS_DnImgStatus			=   0x99
	};
};

/**
 * @brief 系统内置外部按键码值
 */
class SysKeyCode{
public:
	enum{
		/**
		 * @brief ok/确认键
		 */
		OK=240,
		/**
		 * @brief cancel/取消键
		 */
		CANCEL=241
	};
};
}



#endif /* BASE_constant_H_ */
