#ifndef __IMOS_SDK_DEF_H__
#define __IMOS_SDK_DEF_H__
#ifdef __cplusplus
extern "C"{
#endif /* __cplusplus */
#if 0
#endif
/*******************************************************************************
编译选项
*******************************************************************************/
#if defined(WIN32)
#if defined(IMOS_EXPORTS_DLL)
#define IMOS_EXPORT __declspec( dllexport )
#else
#if defined(IMOS_AS_STATIC_LIB)
#define IMOS_EXPORT
#else
#define IMOS_EXPORT __declspec( dllimport )
#endif
#endif
#else
#define IMOS_EXPORT
#endif
/* 函数标准调用约定 */
#ifdef WIN32
#define STDCALL __stdcall
#else
#ifdef i386
#define STDCALL __attribute__((stdcall))
#else
#define STDCALL
#endif
#endif
#if 0
#endif
/*******************************************************************************
通用数据类型定义
*******************************************************************************/
/** @brief 8位有符号整型 */
#ifndef CHAR
typedef char CHAR;
#endif
/** @brief 8位无符号整型 */
#ifndef UCHAR
typedef unsigned char UCHAR;
#endif
/** @brief 16位有符号整型 */
#ifndef SHORT
typedef short SHORT;
#endif
/** @brief 16位无符号整型 */
typedef unsigned short USHORT;
/** @brief 32位有符号整型 */
typedef long LONG;
/** @brief 32位无符号整型 */
typedef unsigned long ULONG;
/** @brief 有符号整型 */
typedef int INT;
/** @brief 无符号整型 */
typedef unsigned int UINT;
/** @brief 64位有符号整型 */
#if defined (_MSC_VER)
typedef __int64 DLONG;
#else
typedef long long DLONG;
#endif
/** @brief 64位无符号整型 */
#if defined (_MSC_VER)
typedef unsigned __int64 DULONG;
#else
typedef unsigned long long DULONG;
#endif
/** @brief 双精度数据类型 */
typedef double DOUBLE;
/** @brief 浮点数据类型 */
typedef float FLOAT;
/** @brief 布尔型 */
typedef unsigned long BOOL_T;
/** @brief 表示长度数据类型 */
typedef unsigned long SIZE_T;
/** @brief 表示时间数据类型 */
typedef long TIME_T;
typedef unsigned char UINT8;
typedef unsigned short UINT16;
typedef unsigned int UINT32;
/** @brief VOID型 */
#define VOID void
/** @brief 表示通用句柄类型 */
typedef VOID* HANDLE;
/** @brief IMOS ID 数据类型 */
typedef DULONG IMOS_ID;
/** @brief 通用句柄类型 IMOS_HANDLE */
#ifndef IMOS_HANDLE
#if defined (WIN32)
typedef HANDLE IMOS_HANDLE;
#else
typedef int IMOS_HANDLE;
#endif
#endif
/** @brief 函数参数类型定义 */
#define IN
#define OUT
#define INOUT
/** @brief IMOS编程规范布尔值 */
#define BOOL_TRUE ((BOOL_T) 1)
#define BOOL_FALSE ((BOOL_T) 0)
#ifndef NULL
#define NULL (void *)0
#endif
#if 0
#endif
/*******************************************************************************
SDK 错误码/状态码
*******************************************************************************/
/* 通用成功 */
#define ERR_COMMON_SUCCEED 0x000000 /**< 执行成功 */
/*********************** SDK 状态码定义(257 - 356) *****************************/
#define ERR_SDK_LOG_CLOSE 257 /**< SDK 日志关闭 */
#define ERR_SDK_DEVICE_STREAM_FULL 259 /**< 设备流已满 */
#define ERR_SDK_DEVICE_STREAM_CLOSED 260 /**< 设备流已关闭 */
#define ERR_SDK_DEVICE_STREAM_NONEXIST 261 /**< 设备流不存在 */
#define ERR_SDK_USER_PASSWORD_CHANGE 262 /**< 用户密码修改 */
#define ERR_SDK_USER_DELETED 263 /**< 用户已删除 */
/*********************** SDK 错误码定义(357 - 506) *****************************/
#define ERR_SDK_COMMON_FAIL 357 /**< 操作失败 */
#define ERR_SDK_COMMON_INVALID_PARAM 358 /**< 输入参数非法 */
#define ERR_SDK_COMMON_NO_MEMORY 359 /**< 系统内存不足 */
#define ERR_SDK_COMMON_SYS_FAIL 360 /**< 系统通用错误,Q: 暂未使用 */
#define ERR_SDK_COMMON_FAIL_STAT 361 /**< 读取文件(目录)状态失败 */
#define ERR_SDK_COMMON_FILE_NONEXIST 362 /**< 文件不存在 */
#define ERR_SDK_USER_NOT_AUTHORIZED 457 /**< 用户未授权 */
#define ERR_SDK_USERFULL 458 /**< 用户已满 */
#define ERR_SDK_USERNONEXIST 459 /**< 用户不存在 */
#define ERR_SDK_USER_PASSWD_INVALID 460 /**< 用户密码错误 */
#define ERR_SDK_USER_KEEPALIVEFAIL 461 /**< SDK保活失败 */
#define ERR_SDK_NOTINIT 462 /**< SDK未初始化 */
#define ERR_SDK_REINIT 463 /**< SDK已初始化 */
#define ERR_SDK_CREATE_THREAD_FAIL 466 /**< 创建线程失败 */
#define ERR_SDK_NOENOUGH_BUF 467 /**< 缓冲区太小: 接收设备数据的缓冲区 */
#define ERR_SDK_SOCKET_LSN_FAIL 468 /**< 创建socket listen失败 */
#define ERR_SDK_SUBSCRIBE_FULL 470 /**< 本用户订阅已满, 设备侧用户订阅已满的错误码不能返回 */
#define ERR_SDK_COMMAND_SEND_FAIL 471 /**< 请求发送失败 */
#define ERR_SDK_COMMAND_TIMEOUT 472 /**< 请求超时 */
#define ERR_SDK_UPDATE_NOTADMIN 473 /**< 非admin用户无法升级 */
#define ERR_SDK_UPDATE_INVALID 474 /**< 升级 未开始 */
#define ERR_SDK_UPDATE_INPROCESS 475 /**< 升级 处理中 */
#define ERR_SDK_UPDATE_NOMEMORY 476 /**< 升级 内存空间不够 */
#define ERR_SDK_UPDATE_FILE_OPEN_ERR 477 /**< 升级 打开镜像文件出错 */
#define ERR_SDK_UPDATE_DEVICE_ERR 478 /**< 升级 FLASH出错 */
#define ERR_SDK_UPDATE_BUSY 479 /**< 不能同时加载多个升级进程 */
#define ERR_SDK_UPDATE_FAIL_TIMEOUT 480 /**< 升级超时 */
#define ERR_SDK_IP_CONFLICT 486 /**< IP地址冲突 */
#define ERR_SDK_NETWORKMODE_NOTSUPPORT 487 /**< 网口模式不支持 */
/*********************** SDK 业务模块错误码定义(507-656) *******************/
/* 设备维护相关(507 - 556) */
#define ERR_SDK_INVALID_CONFIGFILE 507 /**< 配置文件无效 */
/* 媒体相关(557 - 606) */
#define ERR_SDK_BIAUDIO_AUDIOBCAST_FULL 557 /**< 语音业务已满 */
#define ERR_SDK_STOR_RESOURCE_NOTINIT 558 /**< 存储资源未分配 */
/* 云台相关(607 - 656) */
#define ERR_SDK_PTZ_TRACK_ISUSED 612 /**< 轨迹已使用,无法删除*/
#define ERR_SDK_PTZ_SERIALMODE_MISMATCH 614 /**< 串口模式不匹配*/
#define ERR_SDK_PTZ_TRACK_NOT_EXIST 618 /**< 轨迹不存在*/
#define ERR_SDK_PTZ_MODE_CRUISE_FULL 626 /**< 模式路径轨迹点个数已满 */
/*********************** SDK 播放器错误码定义(657 - 756) ****************************/
#define ERR_SDK_XP_INIT_FAILED 657 /**< 播放器初始化失败 */
#define ERR_SDK_XP_PORT_ALLOC_FAILED 658 /**< 播放器通道分配失败 */
#define ERR_SDK_XP_PORT_NOT_EXIST 659 /**< 播放器通道不存在 */
#define ERR_SDK_XP_START_STREAM_FAILED 660 /**< 播放器启流失败 */
#define ERR_SDK_XP_START_PLAY_FAILED 662 /**< 开始播放失败 */
#define ERR_SDK_XP_FILE_PLAY_FINISHED 669 /**< 文件已播放完 */
#define ERR_SDK_XP_DISK_CAPACITY_WARN 670 /**< 硬盘剩余空间低于阈值 */
#define ERR_SDK_XP_DISK_CAPACITY_NOT_ENOUGH 671 /**< 硬盘剩余�