#ifndef __IKONKE_MODULE_DEFINE_H_____________________________
#define __IKONKE_MODULE_DEFINE_H_____________________________

#include "tl_common.h"

// choose the type of equipment, ZC(Coordinator), ZR(Router), ZED(End Device).
#define Z30_DEVICE_ZC						(0)
#define Z30_DEVICE_ZR						(1)
#define Z30_DEVICE_ZED						(2)
#define Z30_DEVICE_ZED_SLEEPY				(3)

#define Z30_DEVICE_DTYPE					(Z30_DEVICE_ZR)
#define Z30_DEVICE_OTA_ENABLE				true
#define Z30_DEVICE_AGING_ENABLE				true
// Real time IO operation, no optimization!!!
#define _IO									volatile

#define CLUSTER_BASIC_ID					0X0000	// Basic Cluster用于获取子设备基本信息
#define CLUSTER_POWER_ID					0X0001	// 电量
#define CLUSTER_IDENTIFY_ID					0X0003	// Identify
#define CLUSTER_GROUPS_ID					0X0004	// Groups
#define CLUSTER_SCENES_ID					0X0005	// Scenes
#define CLUSTER_ONOFF_ID					0X0006	// 开关
#define CLUSTER_LEVEL_CONTROL_ID			0X0008	// Level Control
#define CLUSTER_IAS_ZONE_ID					0X0500	// IAS Zone(安防探测设备)
#define CLUSTER_IAS_WD_ID					0X0502	// IAS WD(安防报警设备)
#define CLUSTER_TEMP_ID						0X0402	// 温度
#define CLUSTER_HUMI_ID						0X0405	// 湿度
#define CLUSTER_WINDOW_COVERING_ID			0X0102	// 窗帘
#define CLUSTER_ELECTRICAL_MEASUREMENT_ID	0X0B04	// 电气测量
#define CLUSTER_OPTTUNNEL_ID				0XFCC0	// 自定义Cluster-0XFC01，用于实现私有协议
#define CLUSTER_MULTI_CONTROL_ON_OFF_ID		0XFCC6	// 自定义，用于实现ON-OFF多控,只用于绑定表是否多控判断
#define CLUSTER_MULTI_CONTROL_WINDOW_COVERING_OPTTUNNEL_ID	0XFCC7	// 自定义Cluster， 用于实现window-covering多控
#define CLUSTER_UNKNOW						0XFFFF

#define ATTRIBUTE_UNKNOW					0XFFFF

//未知的GPIO引脚定义
#define	PORT_UNKNOW							0xFF
#define PIN_UNKNOW							0XFF

typedef enum kk_error_type {
	KET_OK = 0,							// 正常（成功）

	KET_FAILED = -1,					// 失败
	KET_ERR_TIMEOUT = -2,				// 操作超时
	KET_ERR_MALLOC_FAILED = -3,			// malloc失败
	KET_NO_RESPONSE = -4,				//不需要ack

	KET_ERR_INVALID_FD = -100,			// 无效的FD
	KET_ERR_OPEN_FAIL = -101,			// 文件/socket等打开失败
	KET_ERR_CLOSE_FAILED = -102,		// 文件/socket等关闭失败
	KET_ERR_READ_FAILED = -103,			// 文件/socket等读取失败
	KET_ERR_WRITE_FAILED = -104,		// 文件/socket等写入失败

	KET_ERR_INVALID_POINTER = -200,		// 无效指针
	KET_ERR_INVALID_PARAM = -201,		// 无效参数

	KET_ERR_CMD_FORMAT = -301,			// 指令格式错误
	KET_ERR_CMD_PARSE_FAILED = -302,	// 指令解析错误
	KET_ERR_CMD_INVALID = -303,			// 指令无效
	KET_ERR_CMD_FAILED = -304,			// 指令操作失败

	KET_ERR_NON_EXIST = -900,			// 不存在
	KET_ERR_NO_PERMISSIONS = -901,		// 没有权限
	KET_ERR_PROCESS_ABORT = -902,		// 异常中断
	KET_ERR_NOT_READY = -903,			// not ready
	KET_ERR_OPRATE_ILLEGAL = -904,		// 非法操作
	KET_ERR_CRC_WRONG = -905,			// 校验错误
	KET_ERR_CONTENT_MISMATCH = -906,	// 内容不匹配
	KET_ERR_INSUFFICIENT_SPACE = -907,	// 空间不足
	KET_ERR_OPRATE_FAILED = -908,		// 操作失败
	KET_ERR_OPRATE_IN_PROGRESS = -908,	// 操作进行中
	KET_ERR_UNKNOW = -999,				// 位置错误
}kk_err_t;

typedef enum { Z3D_COORDINATOR = 0, Z3D_ROUTER, Z3D_ENDDEVICE }Z3DevTypeEm;

typedef void (*pFUNC_VOID)(void *);

typedef struct tag_common_opt_callback_st {
	pFUNC_VOID pfunc;
	void *param;
}CommonOptCallbackSt;

#endif
