ifish/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/libAVCtrlIOS/P2PCInterface.h

1185 lines
35 KiB
C++
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef _P2PC_INTERFACE_H_
#define _P2PC_INTERFACE_H_
#ifdef WIN32
#define PACKED
#else
#define PACKED __attribute__((packed))
#endif
#define MAX_P2PCH_NS 4 //最大通道数目前是4 请不要做更改
#define UPDATE_FLAG_SUPPORT
#define KTRUE 1
#define KFALSE 0
#define DWORD unsigned int //32bits
#define WORD unsigned short //16bits
#define BYTE unsigned char //8bits
#define KBOOL unsigned int //32bits
#define UINT64 unsigned long long //64bits
enum{
DEV_TYPE_NULL,
DEV_TYPE_SERVER,
DEV_TYPE_NPC, // 2
DEV_TYPE_MOBILE,
DEV_TYPE_PC,
DEV_TYPE_DOORBELL,
DEV_TYPE_ALERTOR,
DEV_TYPE_IPC, // 7
DEV_TYPE_LOCK, //8
DEV_TYPE_WIFI, //9
DEV_TYPE_QQ_IPC, //10
DEV_TYPE_NVR,
};
enum
{
IPC_DEV_SUB_TYPE_NORMAL, ////摇头机,全功能
IPC_DEV_SUB_TYPE_SIMPLE, ////卡片机, 不带马达,
IPC_DEV_SUB_TYPE_38X38, ////38板不带马达不带人体红外 不带回音消除
IPC_DEV_SUB_TYPE_DOORBELL,//门铃 ,不带马达,带语音优化
IPC_DEV_SUB_TYPE_COSTDOWN_IPC, //costdown版的摇头机不带人体红外不带外部无线传感器. 不带回音消除
IPC_DEV_SUB_TYPE_38_MODULE,
IPC_DEV_SUB_TYPE_NVR_PTZ,//预留
IPC_DEV_SUB_TYPE_NVR_NO_PTZ,//预留
IPC_DEV_SUB_TYPE_SMARTHOME_868,//预留
IPC_DEV_SUB_TYPE_Rsv4,//预留 //9
IPC_DEV_SUB_TYPE_130W_NORMAL, ////摇头机,全功能
IPC_DEV_SUB_TYPE_130W_SIMPLE, ////卡片机, 不带马达,
IPC_DEV_SUB_TYPE_130W_38X38, ////38板不带马达不带人体红外 不带回音消除
IPC_DEV_SUB_TYPE_130W_DOORBELL,//门铃 ,不带马达,带语音优化
IPC_DEV_SUB_TYPE_130W_COSTDOWN_IPC, //costdown版的摇头机不带人体红外不带外部无线传感器. 不带回音消除
IPC_DEV_SUB_TYPE_130W_38_MODULE,
IPC_DEV_SUB_TYPE_130W_NVR_PTZ,//预留
IPC_DEV_SUB_TYPE_130W_NVR_NO_PTZ,//预留
IPC_DEV_SUB_TYPE_130W_SMARTHOME_868,//预留
IPC_DEV_SUB_TYPE_130W_Rsv4,//预留 //19
IPC_DEV_SUB_TYPE_200W_NORMAL, ////摇头机,全功能
IPC_DEV_SUB_TYPE_200W_SIMPLE, ////卡片机, 不带马达,
IPC_DEV_SUB_TYPE_200W_38X38, ////38板不带马达不带人体红外 不带回音消除
IPC_DEV_SUB_TYPE_200W_DOORBELL,//门铃 ,不带马达,带语音优化
IPC_DEV_SUB_TYPE_200W_COSTDOWN_IPC, //costdown版的摇头机不带人体红外不带外部无线传感器. 不带回音消除
IPC_DEV_SUB_TYPE_200W_38_MODULE,
IPC_DEV_SUB_TYPE_200W_NVR_PTZ,//预留
IPC_DEV_SUB_TYPE_200W_NVR_NO_PTZ,//预留
IPC_DEV_SUB_TYPE_200W_SMARTHOME_868,//预留
IPC_DEV_SUB_TYPE_200W_Rsv4,//预留 //29
IPC_DEV_SUB_TYPE_FISHEYE,//鱼眼
IPC_DEV_SUB_TYPE_SMARTHOME,//868 + 情景模式
IPC_DEV_SUB_TYPE_SMARTHOME_FISHEYE, //
IPC_DEV_SUB_TYPE_SC1135_FISHEYE_360D,
IPC_DEV_SUB_TYPE_SC1135_FISHEYE_180D,
IPC_DEV_SUB_TYPE_SC3035_FISHEYE_360D,
IPC_DEV_SUB_TYPE_SC3035_FISHEYE_180D,
IPC_DEV_SUB_TYPE_MAX
};
#define CONN_TYPE_VIDEO_CALL 0x00
#define CONN_TYPE_MONITOR 0x01
#define CONN_TYPE_FILE_TRANS 0x02
#define VIDEO_ABILITY_320x240 (1<<0)
#define VIDEO_ABILITY_640x480 (1<<1)
#define VIDEO_ABILITY_1280x720 (1<<2)
#define VIDEO_ABILITY_1920x1080 (1<<3)
//sP2PInitPrm.vRejectSignal() 中参数dwErrorOption 的枚举定义表示p2p连接失败的原因
enum
{
CALL_ERROR_NONE=0, //无原因
CALL_ERROR_DESID_NOT_ENABLE, // 对方的ID 被禁用
CALL_ERROR_DESID_OVERDATE, // 对方的ID 过期了
CALL_ERROR_DESID_NOT_ACTIVE, // 对方的ID 尚未激活
CALL_ERROR_DESID_OFFLINE, // 对方离线
CALL_ERROR_DESID_BUSY, // 对方忙线中
CALL_ERROR_DESID_POWERDOWN, //对方已关机
CALL_ERROR_NO_HELPER, // 没有找到协助人
CALL_ERROR_HANGUP, // 对方已经挂断
CALL_ERROR_TIMEOUT, // 连接超时
CALL_ERROR_INTER_ERROR, // 内部错误
CALL_ERROR_RING_TIMEOUT, // 无人接听
CALL_ERROR_PW_WRONG, //密码错误( 在远程监控时用到密码,在视频通话是不需要)
CALL_ERROR_CONN_FAIL,
CALL_ERROR_NOT_SUPPORT,
};
enum
{
MESG_TYPE_GET_SETTING, // 0
MESG_TYPE_SET_SETTING, // 1
MESG_TYPE_RET_SETTING,
MESG_TYPE_GET_REC_LIST,
MESG_TYPE_RET_REC_LIST,
MESG_TYPE_MESSAGE,
MESG_TYPE_DEBUG_LOG_ON,
MESG_TYPE_DEBUG_LOG_OFF,
MESG_TYPE_DEBUG_LOG_SUBMIT,
MESG_TYPE_ALARM_CALL,
MESG_TYPE_GET_DATETIME,
MESG_TYPE_SET_DATETIME, // 11
MESG_TYPE_RET_DATETIME, // 12
MESG_TYPE_GET_EMIAL, // 13
MESG_TYPE_SET_EMIAL, // 14
MESG_TYPE_RET_EMIAL, // 15
MESG_TYPE_GET_WIFILIST, // 16
MESG_TYPE_SET_WIFILIST, // 17
MESG_TYPE_RET_WIFILIST, // 18
MESG_TYPE_GET_ALARMCODE_STATUS, // 19
MESG_TYPE_SET_ALARMCODE_STATUS, // 20
MESG_TYPE_RET_ALARMCODE_STATUS, // 21
MESG_TYPE_GET_APPID, // 22
MESG_TYPE_SET_APPID, // 23
MESG_TYPE_RET_APPID, // 24
MESG_TYPE_SET_INIT_PASSWD, // 25
MESG_TYPE_RET_INIT_PASSWD, // 26
MESG_TYPE_USER_CMD, // 27
MESG_TYPE_USER_CMD_RET, // 28
MESG_TYPE_UPG_CHEK_VERSION, // 29
MESG_TYPE_UPG_CHEK_VERSION_RET, // 30
MESG_TYPE_UPG_FILE_TO_DOWNLOAD, // 31
MESG_TYPE_UPG_FILE_TO_DOWNLOAD_RET, // 32
MESG_TYPE_UPG_FILE_CANCEL_DOWNLOAD, // 33
MESG_TYPE_UPG_FILE_CANCEL_DOWNLOAD_RET, //34
MESG_TYPE_UPG_CHEK_CUR_VERSION, // 35
MESG_TYPE_UPG_CHEK_CUR_VERSION_RET, //36
MESG_TYPE_UPG_CREATE_WHOLEFLASH_TO_FILE, // 37
MESG_TYPE_UPG_CREATE_WHOLEFLASH_TO_FILE_RET, // 38
MESG_TYPE_GET_SYS_VERSION, // 39
MESG_TYPE_GET_SYS_VERSION_RET, // 40
MESG_TYPE_CLEAR_MULTI_CODE, // 41
MESG_TYPE_CLEAR_MULTI_CODE_RET, // 42
MESG_TYPE_CLEAR_FILES, // 43
MESG_TYPE_CLEAR_FILES_RET, // 44
MESG_TYPE_DRBL_ACK_GET = 58,
MESG_TYPE_DRBL_ACK_RET, // 59
MESG_TYPE_DRBLCALL, //60
MESG_TYPE_DRBL_HOSTSTA_RET, // 61
MESG_TYPE_DEV_CHKCODE_SEND, // 62
MESG_TYPE_DRBL_CHKCODE_SEND, // 63
MESG_TYPE_DEV_UNLOCK_DRBL, // 64
MESG_TYPE_UNLOCK_DRBL_RET, // 65
MESG_TYPE_GET_SDCARD_INFO = 80,
MESG_TYPE_SET_FORMAT_SDCARD = 81,
MESG_TYPE_GET_DEFENCE_SWITCH_STATE, //82 获取防区开关
MESG_TYPE_SET_DEFENCE_SWITCH_STATE, //83 设置防区开关
MESG_TYPE_RET_DEFENCE_SWITCH_STATE, //84 设置返回值
MESG_TYPE_UART1_GPIO_CTL, //85
MESG_TYPE_UART1_GPIO_CTL_RET, //86
MESG_TYPE_SET_MOTOR_PRESET_POS = 87, //预置位
MESG_TYPE_RET_MOTOR_PRESET_POS = 88,
MESG_TYPE_GET_ALARM_TYPE_MOTOR_PRESET_POS,//89
MESG_TYPE_SET_ALARM_TYPE_MOTOR_PRESET_POS,//90
MESG_TYPE_RET_ALARM_TYPE_MOTOR_PRESET_POS,//91 预置位
MESG_TYPE_SET_GPIO_CTL = 95,
MESG_TYPE_RET_GPIO_CTL, //值96
MESG_TYPE_GET_LOWVOLTAGE_STATE, //97
MESG_TYPE_SET_LOWVOLTAGE_STATE, //98
MESG_TYPE_RET_LOWVOLTAGE_STATE, //99
MESG_TYPE_GET_ALARM_CENTER_PARAM, // 100
MESG_TYPE_SET_ALARM_CENTER_PARAM, // 101
MESG_TYPE_RET_ALARM_CENTER_PARAM, //102
MESG_TYPE_GET_IP_CONFIG,//103
MESG_TYPE_SET_IP_CONFIG,//104
MESG_TYPE_RET_IP_CONFIG,//105
MESG_TYPE_GET_CSC_ATTR,//106
MESG_TYPE_SET_CSC_ATTR,//107
MESG_TYPE_RET_CSC_ATTR,//108
MESG_TYPE_SET_REMOTE_REBOOT,//109
MESG_TYPE_RET_REMOTE_REBOOT,//110
MESG_TYPE_GET_IRLED_STATE,//111
MESG_TYPE_SET_IRLED_STATE,//112
MESG_TYPE_RET_IRLED_STATE,//113
MESG_TYPE_SET_CERINFO, //114
MESG_TYPE_RET_CERINFO, //115
MESG_TYPE_GET_MOTOR_POS, //116
MESG_TYPE_RET_MOTOR_POS, //117
MESG_TYPE_GET_LOG_FILE, // 118
MESG_TYPE_RET_LOG_FILE, //119
MESG_TYPE_DEFENSE_NOTIFY, // 120
MESG_TYPE_GET_ALARM_INFO, // 121
MESG_TYPE_RET_ALARM_INFO, //122
MESG_TYPE_WHITELIST_RET,//123
MESG_TYPE_SET_CUSTOM_CMD, // 124
MESG_TYPE_RET_CUSTOM_CMD, // 125
MEST_TYPE_SET_FOCUS_LENS,//126
MESG_TYPE_CUSTOM_CMD_NO_VERRIFY_SET, // 127
MESG_TYPE_CUSTOM_CMD_NO_VERRIFY_RET, // 128
#ifdef PUSH_SERVER_REMOTE_CONFIG_SUPPORT
MESG_TYPE_SET_PUSH_SERVER_CONFIG_CMD,//129
MESG_TYPE_RET_PUSH_SERVER_CONFIG_CMD,//130
#endif
MESG_TYPE_GET_NVR_INFO = 131,
MESG_TYPE_RET_NVR_INFO,
MESG_TYPE_WORKMODE_SETTING =149, //DSD
//150 till 210 will be use on the smartJack device
MESG_TYPE_GET_DEVICE_LANGUAGE = 211,
MESG_TYPE_SET_DEVICE_LANGUAGE, //212
MESG_TYPE_RET_DEVICE_LANGUAGE, //213
MESG_TYPE_GET_SCHEDULE_DEFENCE_INFO, //214 获取布撤防
MESG_TYPE_SET_SCHEDULE_DEFENCE_INFO, //215
MESG_TYPE_QRCODE_LEARN_CODE =216,
//MESG_TYPE_QRCODE_LEARN_CODE_RET,//
MESG_TYPE_SEND_UART2_DATA = 218,//
MESG_TYPE_GET_UART2_DATA,//219
MESG_TYPE_GET_MEMBER_LIST=220,
MESG_TYPE_GET_MEMBER_LIST_RET=221,
MESG_TYPE_MAIN_NONEED_PASSPWD=222,
MESG_TYPE_MAIN_NEED_PASSPWD = 223, //223 获取和修改433传感器名字 预置位转动好后截图
MESG_TYPE_SETORGET_LENS_FOCUS_PARAMS = 224, // 自动变焦 获取和设置变焦镜头马达当前位置的命令是一样滴 消息头命令
MESG_TYPE_GET_FTP, // 225
MESG_TYPE_SET_FTP, // 226
MESG_TYPE_RET_FTP, // 227
MESG_TYPE_GET_FISHEYE = 228, //获取当前全景相机配置信息
MESG_TYPE_SET_FISHEYE,//229 设置当前全景相机配置信息
MESG_TYPE_RET_FISHEYE,//230 返回当前全景相机配置信息
MESG_TYPE_EXT_ALARM_INFO =228,//科立信海思方案
MESG_TYPE_SET_AUTO_TEST_MODE=232,
MESG_TYPE_SET_AUTO_TEST_CAPTURE,
MESG_TYPE_TEST_IOS_PUSH,
MESG_TYPE_SET_AUTO_TEST_VOICELINK,//235
MESG_TYPE_SET_AUTO_TEST_STATS_SAVE,// 保存句柄、内存统计信息
MESG_TYPE_RET_RECORD_STATE = 237, //设备当前的录像状态、有没有TF卡
MESG_TYPE_TO_UART2_CMD,//238
MESG_TYPE_SET_VIDEO_CLEAR_LEVEL = 239, /**< 设置录像质量 */
MESG_TYPE_GET_VIDEO_CLEAR_LEVEL = 240, /**< 获取录像质量 */
MESG_TYPE_RET_VIDEO_CLEAR_LEVEL = 241, /**< 录像质量返回 */
MESG_TYPE_GET_IF_WIFI_SETTED = 242,
MESG_TYPE_RET_IF_WIFI_SETTED = 243,
MESG_TYPE_SET_STA_WIFI_INFO = 244, //ap转sta时设置wifi密码
MESG_TYPE_RET_STA_WIFI_INFO = 245,
MESG_TYPE_SET_WELOCK_INFO,//246
MESG_TYPE_GET_WELOCK_INFO,//247
MESG_TYPE_RET_WELOCK_INFO,//248
MESG_TYPE_DEVICE_NOT_SUPPORT_RET = 0XFF,
};
enum{
MESG_SUBTYPE_SETTING_WORKMODE_DEFAULT,//0
MESG_SUBTYPE_SETTING_IPC_WORKMODE, //1
MESG_SUBTYPE_SETTING_IPC_WORKMODE_RET,//2
MESG_SUBTYPE_SETTING_SENSOR_WORKMODE,//3
MESG_SUBTYPE_SETTING_SENSOR_WORKMODE_RET,//4
MESG_SUBTYPE_SETTING_SCHEDULE_WORKMODE,//5
MESG_SUBTYPE_SETTING_SCHEDULE_WORKMODE_RET,//6
MESG_SUBTYPE_DELETE_SCHEDULE,//7
MESG_SUBTYPE_DELETE_SCHEDULE_RET,//8
MESG_SUBTYPE_GET_CURRENTWORKMODE,//9
MESG_SUBTYPE_GET_CURRENTWORKMODE_RET,//10
MESG_SUBTYPE_GET_SENSORWORKMODE,//11
MESG_SUBTYPE_GET_SENSORWORKMODE_RET,//12
MESG_SUBTYPE_GET_WORKMODE_SCHEDULE, //13
MESG_SUBTYPE_GET_WORKMODE_SCHEDULE_RET,//14
MESG_SUBTYPE_SETTING_ALL_SENSOR_SWITCH,//15
MESG_SUBTYPE_SETTING_ALL_SENSOR_SWITCH_RET,//16
MESG_SUBTYPE_GET_ALL_SENSOR_SWITCH,//17
MESG_SUBTYPE_GET_ALL_SENSOR_SWITCH_RET,//18
MESG_SUBTYPE_SET_LOW_VOL_TIMEINTERVAL,//19
MESG_SUBTYPE_SET_LOW_VOL_TIMEINTERVAL_RET,//20
MESG_SUBTYPE_GET_LOW_VOL_TIMEINTERVAL,//21
MESG_SUBTYPE_GET_LOW_VOL_TIMEINTERVAL_RET,//22
MESG_SUBTYPE_DELETE_ONE_CONTROLER,//23
MESG_SUBTYPE_DELETE_ONE_CONTROLER_RET,//24
MESG_SUBTYPE_DELETE_ONE_SENSOR,//25
MESG_SUBTYPE_DELETE_ONE_SENSOR_RET,//26
MESG_SUBTYPE_CHANGE_CONTROLER_NAME,//27
MESG_SUBTYPE_CHANGE_CONTROLER_NAME_RET,//28
MESG_SUBTYPE_CHANGE_SENSOR_NAME,//29
MESG_SUBTYPE_CHANGE_SENSOR_NAME_RET,//30
MESG_SUBTYPE_INTO_LEARN_STATE,//31
MESG_SUBTYPE_INTO_LEARN_STATE_RET,//32
MESG_SUBTYPE_TURN_SENSOR,//33
MESG_SUBTYPE_TURN_SENSOR_RET,//34
MESG_SUBTYPE_SHARE_TO_MEMBER,//35
MESG_SUBTYPE_SHARE_TO_MEMBER_RET,//36
MESG_SUBTYPE_GOT_SHARE_MESG,//37
MESG_SUBTYPE_GOT_SHARE_MESG_RET,//38
MESG_SUBTYPE_DEV_RECV_MEMBER_FEEDBACK,//39
MESG_SUBTYPE_ADMIN_DELETE_ONE_MEMBER,//40
MESG_SUBTYPE_ADMIN_DELETE_ONE_MEMBER_RET,//41
MESG_SUBTYPE_DELETE_DEV,//42
MESG_SUBTYPE_DELETE_DEV_RET,//43
MESG_SUBTYPE_SET_ONE_SPECIAL_ALARM=46, //46
MESG_SUBTYPE_SET_ONE_SPECIAL_ALARM_RET, //47
MESG_SUBTYPE_GET_ALL_SPECIAL_ALARM, //48
MESG_SUBTYPE_GET_ALL_SPECIAL_ALARM_RET, //49
MESG_SUBTYPE_DEAL_LAMP, //50
MESG_SUBTYPE_DEAL_LAMP_RET, //51
MESG_SUBTYPE_KEEPCLIENT, //52
MESG_SUBTYPE_KEEPCLIENT_RET, //53
MESG_SUBTYPE_CONTROL_LED=60,//60 //2016-7-19 设置指示灯led
MESG_SUBTYPE_CONTROL_LED_RET=61, //61
MESG_SUBTYPE_GET_LED_STATU,//62 //2016-7-19 获取指示灯led
MESG_SUBTYPE_GET_LED_STATU_RET,//63
MESG_SUBTYPE_SET_SESOR_PRESET_POS = 64,
MESG_SUBTYPE_SET_SESOR_PRESET_POS_RET,//65
MESG_SUBTYPE_MAX
};
enum{
MESG_SUBTYPE_GET_MONITOR_LOG,//0
MESG_SUBTYPE_GET_MONITOR_LOG_RET,//1
MESG_SUBTYPE_GET_433_SENSOR_NAME,//2 获取433传感器名字
MESG_SUBTYPE_GET_433_SENSOR_NAME_RET,//3
MESG_SUBTYPE_EDIT_433_SENSOR_NAME,//4 修改433传感器名字
MESG_SUBTYPE_EDIT_433_SENSOR_NAME_RET,//5
MESG_SUBTYPE_SETTING_LIGHT_CONTROL,//6
MESG_SUBTYPE_SETTING_LIGHT_CONTROL_RET,//7
MESG_SUBTYPE_GET_LIGHT_CONTROL_SETTING,//8
MESG_SUBTYPE_GET_LIGHT_CONTROL_SETTING_RET,//9
MESG_SUBTYPE_SET_IRCUT_ADCVALUE,//10
MESG_SUBTYPE_SET_IRCUT_ADCVALUE_RET,//11
MESG_SUBTYPE_GET_IRCUT_ADCVALUE,//12
MESG_SUBTYPE_GET_IRCUT_ADCVALUE_RET,//13
MESG_SUBTYPE_SET_MANUAL_GRAY,//14 manual to gray mode
MESG_SUBTYPE_GET_MANUAL_GRAY,//15 manual to gray mode
MESG_SUBTYPE_SET_MANUAL_GRAY_RET,//16
MESG_SUBTYPE_TURNTO_PRESETPOS_OK =17 //17
};
enum{
MESG_SDCARD_DONOT_HAVE_ENOUGH_SPACE=2, //2
MESG_SDCARD_NOT_EXIST, //3
MESG_MONITOR_LOG_FILE_NOT_EXIST,//4
MESG_GET_MONITOR_LOG_NOT_SUPPORT,//5
};
enum
{
OS_ARM_LINUX,
OS_ANDROID,
OS_IOS,
OS_MAC,
OS_WINDOWS,
OS_X86_LINUX,
OS_NONE = 0xFF,
};
enum
{
PUSH_MESG_TYPE_SYSTEM,
PUSH_MESG_TYPE_VERIFY,
PUSH_MESG_TYPE_NORMAL,
PUSH_MESG_TYPE_ALARM,
PUSH_MESG_TYPE_CALLING,
PUSH_MESG_TYPE_BELL,
};
enum
{
ID_STATUS_OFFLINE,
ID_STATUS_ONLINE,
ID_STATUS_INACTIVE,
};
#define MAX_FRIENDS_NS 256
typedef struct sFriendsType
{
DWORD dwFriendsCount;
DWORD dwFriends[MAX_FRIENDS_NS];
BYTE bStatus[MAX_FRIENDS_NS];
BYTE bType[MAX_FRIENDS_NS];
}PACKED sFriendsType;
typedef struct sFriendsTypeV2
{
DWORD dwFriendsCount; //好友总数
BYTE bRequestResult; //请求结果等于0则代表请求失败
BYTE bReseve[3];
DWORD dwFriends[MAX_FRIENDS_NS]; //好友ID注意实际读取时为dwFriends[dwFriendsCount];
DWORD dwFriendsIdProperty[MAX_FRIENDS_NS]; //好友ID属性注意实际读取时为bFriendsIdProperty[dwFriendsCount];
BYTE bStatus[MAX_FRIENDS_NS]; //好友在线状态注意实际读取时为bStatus[dwFriendsCount];
BYTE bDevType[MAX_FRIENDS_NS]; //好友帐号大类型注意实际读取时为bDevType[dwFriendsCount];
BYTE bSubType[MAX_FRIENDS_NS]; //好友帐号子类型注意实际读取时为bSubType[dwFriendsCount];
BYTE bDefenceState[MAX_FRIENDS_NS]; //设备布防状态注意实际读取时为bSubType[dwFriendsCount], 0xFF则不支持Index服务器获取,需要从设备端获取此值;
DWORD dwDefenceFlag[MAX_FRIENDS_NS];
}PACKED sFriendsTypeV2;
/*
dwFriendsIdProperty 好友ID属性说明
Bit 0 : 1 代表该设备是支持设备布撤防信息和设备子类型上传服务器的, 0 则反之
*/
typedef struct sCallingPrmType
{
KBOOL fgBCalled;
DWORD dwHisID;
DWORD dwHisDevType;
KBOOL fgInSameDomain;
KBOOL fgSuperCall;
DWORD dwRemoteChNs;
DWORD dwCallPrm[4];
}sCallingPrmType;
#if 1 //def SUPPORT_GET_REMOTE_FILE
enum
{
GET_FILE_CMD_ERR_NONE,
GET_FILE_CMD_ERR_PW_INCRRECT,
GET_FILE_CMD_ERR_IP_FREEZE,
GET_FILE_CMD_ERR_NO_SUCH_FILE,
GET_FILE_CMD_ERR_NOT_ALLOWED,
GET_FILE_CMD_ERR_READ_FILE_FAIL,
GET_FILE_CMD_ERR_BUZY,
GET_FILE_CMD_ERR_MEMORY_LIMITED,
GET_FILE_CMD_ERR_TIMEOUT,
};
#endif
//网络库的初始化参数
typedef struct sP2PInitPrm
{
DWORD dw3CID; // 本机ID ; 调试时可以使用: dw3CID=2000, dwR1=0x5a8d47b0, dwR2=0x4fd73aa3
DWORD dwCode1; // 检验码1
DWORD dwCode2; // 检验码2
char * pHostName; // 服务器表,请传入: "|www.cloudlinks.cn|www.cloud-links.net|www.gwelltimes.com"
DWORD dwChNs; // 本机通道数目请设为1
DWORD dwChBufSize[MAX_P2PCH_NS]; // 每个通道的缓存大小,请统一设置为(1024*512)
DWORD dwPassword; //密码,请设为十进制数: 123456
DWORD dwCustomerID[10];
DWORD SessionID1; // App端需要填写此ID,设备端不填
DWORD SessionID2; // App端需要填写此ID,设备端不填
// 被呼叫 时,当有人拨打进来,通过此函数 告知上层。
// 主叫时,拨打已经通了。对方正在响铃,也回调此函数。
// fgBCalled : TRUE 表示 被呼叫, FALSE 表示主叫。
// dwHisID : 对方ID 号。
// fgInSameDomain :对方跟本机在 同一个局域网里。
// fgMonitorOnly : 暂时没有用。
// dwRemoteChNs : 暂时没有用。
void (* vCallingSignal )(sCallingPrmType *sCallPrm);
//呼叫被拒绝或者连接断开的回调函数
// fgBCalled : TRUE 表示 被呼叫, FALSE 表示主叫。
// dwErrorOption: 断开的原因,请参见前述枚举。
// dwErrorCode : 断开的错误码非0时要在UI呈现给用户
void (* vRejectSignal )(BOOL fgBCalled, DWORD dwErrorOption, DWORD dwErrorCode);
//接听回调函数, 当对方接通了或本机接听了来电,通过此函数告知上层。
// fgBCalled : TRUE 表示 被呼叫, FALSE 表示主叫。
void (* vAcceptSignal )(BOOL fgBCalled, DWORD *pdwPrm);
// 连接OK 回调函数,当主叫时对方已经接听并且连接通道一切就绪,告诉上层开始传输音视频。
void (* vP2PConnReady)(void);
void (* vRecvRemoteMessage)(DWORD dwSrcID, KBOOL fgHasCheckdPassword, void *pMesg, DWORD dwMesgSize);
void (* vSendMessageAck)(DWORD dwDesID, DWORD dwMesgID, DWORD dwError);
void (* vFriendsStatusUpdate)(sFriendsType * pFriends);
void (*vIndexFriendsStatusUpdate)(sFriendsTypeV2 *pFriends);
#ifdef UPDATE_FLAG_SUPPORT
void (* vFlagUpdate)(DWORD *pdwFlags );
#endif
//【远程获取文件结果回调】
//参数-dwDesID: 目标设备ID
//参数-pFilename: 文件名
//参数-dwErrorCode: 错误代码(详情见上枚举)
void (* vGetFileCmdACK)(DWORD dwDesID, char *pFilename, DWORD dwErrorCode);
void (* LoginInAnotherOne)(DWORD LoginStatus); //APP在别处登录
}sP2PInitPrm;
#ifdef UPDATE_FLAG_SUPPORT
void vP2PSetUpdateFlag(DWORD *pdwFlag);
#endif
enum
{
MESG_ERROR_NONE,
MESG_ERROR_PASSWORD_FAIL ,
MESG_ERROR_TIMEOUT,
MESG_IOS_PUSH_ERROR,
MESG_ERROR_NO_RIGHT,
};
KBOOL fgP2PInit(sP2PInitPrm * pPrm); // 网络库初始化
void vP2PExit(void); // 网络库退出并释放资源
/*
函数DWORD ReLogin(DWORD SessionID1, DWORD SessionID2)
功能P2P重新登录
返回值: 0 成功; 1 P2P未初始化 ; 2 参数错误 ;
*/
DWORD ReLogin(DWORD SessionID1, DWORD SessionID2);
KBOOL fgP2PLinkOK(void); // 查看网络库状态.(类似与QQ 是否在线)
//呼叫一个ID
// dwId: 对方ID 号。
// fgSuperCall: KTRUE:监控, KFALSE : 视频电话。
// dwPassword : 如果视频监控,此为对方的监控密码。
// 16-code 48 手机号
KBOOL fgP2PCall(UINT64 u64Id, KBOOL fgSuperCall, DWORD dwPassword, DWORD *pdwPrm, char *strPushMesg);
void vP2PHungup(KBOOL fgWaitFinish); // 挂断连接
void vP2PAccept(DWORD *pdwPrm); // 接受呼叫
KBOOL fgP2PSendRemoteMessage(DWORD dwDesID, DWORD dwRemotePW, DWORD dwMesgID, void * pMesg, DWORD dwMesgSize, char * pPushMesg, DWORD dwPushMesgLen, DWORD dwType);
KBOOL fgGetFriendsStatusFromP2PServer(DWORD *pFriendsTable, DWORD dwCount);
KBOOL fgGetFriendsStatusFromIndexServer(DWORD *pFriendsTable, DWORD dwCount);
//--------------------------------------------
//【获取远程文件】
//参数-dwDesID: 目标设备ID号。
//参数-dwPassword: 远程设备的密码。
//参数-pRemoteFilename: 远程文件的文件名(带完整路径)
//参数-pLocalSaveFilename: 存到本地的文件名(带完整路径)
BOOL fgP2PGetRemoteFile(DWORD dwDesID, DWORD dwPassword, char *pRemoteFilename, char *pLocalSaveFilename);
//--------------------------------------------
//【获取远程文件的进度】
//返回值- 0 ~ 100 的整数
DWORD dwP2PGetFileProgress(void);
//--------------------------------------------
//【取消(中断) 获取远程文件】
void vP2PCancelGetRemoteFile(void);
///////////////////////////////////////////////////////////////
//////////////////////////
enum
{
PACKET_TYPE_AV_DATA = 0,
PACKET_TYPE_HEADER_ONLY ,
PACKET_TYPE_USR_DATA,
};
//AV 数据分组头结构
typedef struct sAVBlockHeaderType
{
BYTE bHeaderFlag[4]; // 分组头标记 0xFF 0xFF 0xFF 0x88
BYTE bVersion; // 版本号
BYTE bPacketType; // 此分组的类型,
WORD wAudioPackCnt; //当前分组中音频帧的数量
DWORD dwVideoDataLen; //当前分组中视频数据的长度
UINT64 u64VPTS; //当前分组中视频帧时间戳uS为单位
UINT64 u64APTS; //当前分组中音频帧时间戳uS为单位
}PACKED sAVBlockHeaderType;
typedef struct sAVInfoType
{
WORD AudioType: 3; //音频编码格式
WORD AudioCodecOption: 4; //音频编码的参数
WORD AudioMode: 1; // 音频模式: 单声道/双声道
WORD AudioBitWidth: 2; // 音频位宽目前只支持16bit
WORD AudioSampleRate : 3; // 音频采样率
WORD SampleNumPerFrame : 3; //每帧数据里的采样数
DWORD VideoType: 4; /// 视频类型目前只支持H264
DWORD VideoWidth: 12; // 视频像素宽度
DWORD VideoHeight: 10; //视频像素高度
DWORD videoFrameRate: 6; // 视频帧率
}PACKED sAVInfoType;
//AV 信息分组数据结构
typedef struct sAVBlockHeader2Type
{
BYTE bHeaderFlag[4]; // 分组头标记 0xFF 0xFF 0xFF 0x88
BYTE bVersion; // 版本号
BYTE bPacketType; // 此分组的类型
sAVInfoType sAvInfo; //音视频格式信息
UINT64 u64VPTS; //当前分组中视频帧时间戳uS为单位
UINT64 u64APTS; //当前分组中音频帧时间戳uS为单位
}PACKED sAVBlockHeader2Type;
/////音频类型
enum
{
AUDIO_TYPE_NONE = 0,
AUDIO_TYPE_G711A ,
AUDIO_TYPE_G711U ,
AUDIO_TYPE_PT_G726 ,
AUDIO_TYPE_PT_AAC,
AUDIO_TYPE_PT_AMR,
AUDIO_TYPE_PT_ADPCMA,
AUDIO_TYPE_MAX,
};
///AMR音频编码选项
enum
{
AMR_FORMAT_MMS,
AMR_FORMAT_IF1,
AMR_FORMAT_IF2,
AMR_FORMAT_NONE,
};
//音频模式 单声道/立体声
enum
{
AUDIO_SOUND_MODE_MOMO =0,/*mono*/
AUDIO_SOUND_MODE_STEREO =1,/*stereo*/
AUDIO_SOUND_MODE_NONE ,
};
// 音频采样位宽
enum
{
AUDIO_BIT_WIDTH_8 = 0, /* 8bit width */
AUDIO_BIT_WIDTH_16 = 1, /* 16bit width*/
AUDIO_BIT_WIDTH_32 = 2, /* 32bit width*/
AUDIO_BIT_WIDTH_NONE,
};
////音频采样率
enum
{
AUDIO_SAMPLE_RATE_8K = 0, /* 8K samplerate*/
AUDIO_SAMPLE_RATE_11K , /* 11.025K samplerate*/
AUDIO_SAMPLE_RATE_16K , /* 16K samplerate*/
AUDIO_SAMPLE_RATE_22K , /* 22.050K samplerate*/
AUDIO_SAMPLE_RATE_24K , /* 24K samplerate*/
AUDIO_SAMPLE_RATE_32K , /* 32K samplerate*/
AUDIO_SAMPLE_RATE_44K , /* 44.1K samplerate*/
AUDIO_SAMPLE_RATE_48K , /* 48K samplerate*/
};
////音频每帧采样数
enum
{
SAMPLE_NUM_80 = 0,
SAMPLE_NUM_160 ,
SAMPLE_NUM_320 ,
SAMPLE_NUM_480 ,
SAMPLE_NUM_1024 ,
SAMPLE_NUM_2048 ,
};
///视频类型
enum
{
VIDEO_TYPE_NONE = 0 ,
VIDEO_TYPE_H264 ,
VIDEO_TYPE_MPEG4 ,
VIDEO_TYPE_JPEG,
VIDEO_TYPE_MJPEG,
};
//user data bCommandType
enum
{
USR_CMD_PTZ_CTL, //云台控制
USR_CMD_VIDEO_CTL, // 视频控制
USR_CMD_REMOTLY_DEFENCE_CTL, //
USR_CMD_REMOTLY_PLAY_CTL,
USR_CMD_AUDIO_ONLY,
USR_CMD_FM1188_CTL,
USR_CMD_CURRENT_USERS_NS,
USR_CMD_CAR_DIR_CTL, // 车子方向控制
USR_CMD_FILE_INFO,
USER_CMD_FOCALIZE = 0x09,
USR_CMD_RECORD_STATUS,
USR_CMD_MAX_NS,
};
//bCommandOption
enum
{
USR_CMD_OPTION_PTZ_TURN_LEFT,
USR_CMD_OPTION_PTZ_TURN_RIGHT,
USR_CMD_OPTION_PTZ_TURN_UP,
USR_CMD_OPTION_PTZ_TURN_DOWN,
};
enum
{
USR_CMD_OPTION_VIDEO_PAUSE, //暂停
USR_CMD_OPTION_VIDEO_RESUME, // 继续
USR_CMD_OPTION_VIDEO_FAST_FORWARD, // 快进
USR_CMD_OPTION_VIDEO_SLOW_FORWARD, //慢进
USR_CMD_OPTION_VIDEO_STEP, // 单步
USR_CMD_OPTION_VIDEO_LD, //high definition NPC:640*480 IPC:640*360
USR_CMD_OPTION_VIDEO_FL, //low definition NPC:320*240 IPC:320*180
USR_CMD_OPTION_VIDEO_HD, //low definition NPC:None IPC:1280*720
};
//bCommandOption
enum
{
USR_CMD_OPTION_START_DEFENCE,
USR_CMD_OPTION_STOP_DEFENCE,
USR_CMD_OPTION_READ_DEFENCE_STATUS,
USR_CMD_OPTION_WRITE_DEFENCE_STATUS,
};
//bCommandOption
enum
{
USR_CMD_OPTION_NONE,
USR_CMD_OPTION_FILE_INFO, //begin PTS = (((UINT64)(pUserData->dwCmdData[0])<<32) |pUserData->dwCmdData[1]);//End PTS = (((UINT64)(pUserData->dwCmdData[2])<<32) |pUserData->dwCmdData[3]);
USR_CMD_OPTION_FILE_END, //
USR_CMD_OPTION_PAUSE,
USR_CMD_OPTION_PAUSE_RET,
USR_CMD_OPTION_RESUME,
USR_CMD_OPTION_RESUME_RET,
USR_CMD_OPTION_JUMP,//memcpy(&u64JumpTargetPTS , pUsrCmd->dwCmdData, sizeof(UINT64) );
USR_CMD_OPTION_JUMP_RET, //pUserData->dwCmdData[0] : true , false
USR_CMD_OPTION_NEXT_FILE, //memcpy(&sTargetNextFile, pUsrCmd->dwCmdData, sizeof(sRecFilenameType) );
USR_CMD_OPTION_NEXT_FILE_RET, ////pUserData->dwCmdData[0] : true , false
USR_CMD_OPTION_STOP,
USR_CMD_OPTION_STOP_RET,//pUserData->dwCmdData[0] : true , false
USR_CMD_OPTION_PLAY,
USR_CMD_OPTION_PLAY_RET,//pUserData->dwCmdData[0] : true , false
USR_CMD_OPTION_FAST_PLAY, //快进播放
USR_CMD_OPTION_FAST_PLAY_RET,
USR_CMD_OPTION_FAST_PLAY_CANCEL, //不要快进
USR_CMD_OPTION_FAST_PLAY_CANCEL_RET
};
////用户数据分组结构
typedef struct sUsrDataBlockHeaderType
{
BYTE bHeaderFlag[4];
BYTE bVersion;
BYTE bPacketType; ////PACKET_TYPE_USR_DATA
BYTE bCommandType; //
BYTE bCommandOption;
DWORD dwCmdData[5]; //保留
}PACKED sUsrDataBlockHeaderType;
////////////////////////////////////////////////////////////////
#define SUPPORT_REC_TO_FILE
#define GBOOL unsigned int
/////////////////////av encode interface///////////////////////////
GBOOL fgStartAVEncAndSend(DWORD dwVideoFrameRate);
void vStopAVEncAndSend(void);
GBOOL fgFillVideoRawFrame(BYTE *pbData, DWORD dwSize, DWORD dwWidth, DWORD dwHeight, GBOOL fgX2Reflection);
void vFillAudioRawData(BYTE *pbData, DWORD dwSize);
GBOOL fgSendUserData(DWORD dwCmd, DWORD dwOption , BYTE * pData, DWORD dwDataLen) ;
///////////////////////end of av encode interface///////////////////////////////////
typedef struct GAVFrame
{
BYTE *data[3];
int linesize[3];
int width;
int height;
uint64_t pts;
}GAVFrame;
#define CONN_TYPE_VIDEO_CALL 0x00
#define CONN_TYPE_MONITOR 0x01
#define CONN_TYPE_FILE_TRANS 0x02
#define CONN_TYPE_PLAY_REC_FILE 0x02
typedef struct sRecAndDecPrm
{
DWORD dwConnectType;//以前是传的1或者0 现在需要改一改
void (* vRecvUserDataCallBack )(DWORD dwCmd, DWORD dwOption , DWORD * pdwData, DWORD dwDataLen);
void (*vRecvAVHeader)(sAVInfoType * pAVInfo) ;
void (*vRecvAVData)(BYTE *pAudioData, DWORD dwAudioDataLen, DWORD dwFrames, UINT64 u64APTS, BYTE *pVideoData, DWORD dwVideoLen, UINT64 u64VPTS) ;
}sRecAndDecPrm;
////////////////////////av decode interface //////////////////////////////////
GBOOL fgStartRecvAndDec(sRecAndDecPrm *psInitPrm);
void vStopRecvAndDec(void);
GBOOL fgGetAudioDataToPlay(BYTE * pDesBuf, DWORD dwSize) ;
GBOOL fgGetVideoFrameToDisplay(GAVFrame ** pFrame);
void vReleaseVideoFrame(void) ;
void vSetSupperDrop(KBOOL fgDrop);
//////////////////////end of av decode interface////////////////////////////////
//暂停两者不播放
#ifdef SUPPORT_REC_TO_FILE
GBOOL fgStartRecordToFile(char *pFileName);
void vStopRecord(void);
#endif
BOOL fgGetServerIPAddr(DWORD *pdwIPAddr,WORD *pwPort,const DWORD dwSerType);
#ifdef __cplusplus
class ShapeWarp
{
public:
ShapeWarp();
~ShapeWarp();
//key status
const static int KEY_NONE = -1;
const static int KEY_DOWN = 0;
const static int KEY_UP = 1;
const static int KEY_MOVE = 2;
//animation
const static int ANI_NONE = 0;
const static int ANI_ZOOM_AUTO_IN = 1;
const static int ANI_ZOOM_AUTO_OUT = 2;
const static int ANI_FLING = 3;
const static int ROTE_SLOWLY = 4;
// graph mode
const static int MANUL = 0; //manual
const static int PANORAMA = 1; //panorama
const static int PLAN = 2; //plan
//GestrueMode
const static int GESTRUE_MODE_NONE = -1;
const static int GESTRUE_MODE_FINGER = 0;
const static int GESTRUE_MODE_SENSOR = 1;
//fisheye position
const static int FISHEYE_TOP = 0;
const static int FISHEYE_BOTTOM = 1;
const static int FISHEYE_WALL = 2;
//fisheye type
const static int FISHEYE_360 = 0;
const static int FISHEYE_180 = 1;
// shape type
const static int SHAPE_CIRCLE = 0;
const static int SHAPE_180_HALF_SPHERE = 1;
const static int SHAPE_CYLIDER = 2;
const static int SHAPE_BOWLE = 3;
const static int SHAPE_QUAD = 4;
typedef void (*ShapeNotify)(int MsgType, int MsgAction);
//-------------------- method --------------------------//
/*Description:init data
*Arguments:
* width --- texture width,
* height --- texture height,
* w_width --- windows width,
* w_height --- windows height,
* instalType --- shape type, sphere, cylinder , 180°...
* *cVersion --- IOS version
* deviceID ----- camara ID
* *cUUID --- phone UUID.
* iUniformMatrix ---shader Matrix id
* iFishEyeType --- FISHEYE_180, FISHEYE_360
*/
void initData(int width, int height, int w_width, int w_height, int installType, const char *cVersion, long deviceID, const char* cUUID, long iUniformMatrix, int iFishEyeType);
/*
*release render data
*/
void releaseData();
/*
* must call initData() firstly
*/
void ChangeScreen(int width, int height, int isFullScreen);
/*
*draw shapes
*/
void drawself();
/*
*Description:zoom out
*Arguments: x, y Zoom out position on screen
*/
void setZoomOut(int x, int y);
/*
*Description:zoom out without position
*
*/
void setZoomOut();
/*
*Description:zoom in
*Arguments: x, y Zoom in position on screen
*/
void setZoomIN(int x, int y);
/*
*Description:zoom in without position
*
*/
void setZoomIN();
/*
*Description:move a step when drag,
*Arguments: x, y velocity of x and y derection on scrren
*
*/
void setFling(float x, float y);
/*
*Description: move a step when drag,
*Arguments: x, y position in screen
*Arguments: dx, dy distance of moved
*/
void setMoveStep(float x, float y, float dx, float dy);
/*
*sing tap
*/
void singalTap();
/*
* Description: set a key status, eg. up move and down
* Arguments:
* KEY_NONE
* KEY_DOWN
* KEY_UP
* KEY_MOVE
*/
void setKeyStatus(int key);
/*
*
*/
void buildMaps(int w, int h);
/*
*Description: set a sensor quarter
*/
void setTrackerQuat(float x, float y, float z, float w);
/*
*get gesture mode
*/
int getGestureMode();
/*
*Description: set a Gesture mode eg. sensor finger
*Arguments:
*GESTRUE_MODE_NONE
*GESTRUE_MODE_FINGER
*GESTRUE_MODE_SENSOR
*/
void setGestureMode(int mode);
/*
*Description: set fish eye position , must be used before initData method.
*FISHEYE_TOP default.
*Arguments:iPostion FISHEYE_TOP --- top, FISHEYE_BOTTOM --- bottom, FISHEYE_WALL --- wall;
*
*/
void setFisheyePosition(int iPostion);
/*
*Description: set a notify function , must be used after initData method.
*
*/
void setNotifyFunction(ShapeNotify ShapeNotify);
/*
* Description: set max scale after spread.
*/
void setMaxScale(float maxScale);
/*
* Description: set the speed of drift.
*/
void setDriftSpeed(float speed);
};
#endif
//return bytes per second
DWORD dwGetAvBytesPerSec();
/*
BYTE bMainVersion = (wValue >> 8) & 0xff
BYTE bSubVersion = wValue & 0xff
*/
WORD wGetSDKVersion();
#define LINK_OK 0 //link success
#define LINK_ERROR_NONE 0x20104001 //no error, opertion is running.
#define LINK_DNS_PARSE_FAILED 0x20104002 //parse DNS failed
#define LINK_CHECK_LISTSERVER_RESPONSE_FAILED 0x20104003 //response from ListServer is invalidate
#define LINK_GET_SERVERLIST_TIMEOUT 0x20104004 //get servers form ListServer timeout
#define LINK_GET_P2PSERVER_HEARTBEAT_RESPONSE_FAILED 0x20104005 //wait heart beat from P2PServer failed
#define LINK_LOGIN_ANOTHER_MACHINE 0x20104006 // login with another App Or Pc
unsigned int iP2PLinkStatus();
#endif //_P2PC_INTERFACE_H