开发版本-developer——01 first commit

This commit is contained in:
wbzhan
2019-07-08 18:24:03 +08:00
parent 5a10dfa182
commit 8693efe121
386 changed files with 7069 additions and 1951 deletions
Binary file not shown.
+894
View File
@@ -0,0 +1,894 @@
//
// GWNet.h
// GWNet
//
// Created by apple on 16/11/1.
// Copyright © 2016年 YHQ. All rights reserved.
//
#import <Foundation/Foundation.h>
#ifndef GWNetSingleton
#define GWNetSingleton [GWNet shareInstance]
#endif
/**
接口回调block
@param success 仅代表网络请求是否成功,不代表相应的操作结果,具体的要从errorCode判断
@param errorCode 错误码, 0 代表没有错误,其它每个数字字符串代表确定的错误原因
@param errorString 描述具体的错误原因
@param json 具体的返回数据
*/
typedef void(^GWNetCompletionBlock)(BOOL success, NSString *errorCode, NSString *errorString, NSDictionary *json);
//调接口时会话ID错误发出的通知,会话ID超时/错误时所有接口无法调用,应该让用户重新登录获取新的Session。每个接口处理过于麻烦,所以增加通知。
extern NSString * const kGWNetSessionIdErrorNotification;
@interface GWNet : NSObject
@property (nonatomic, assign) BOOL connectWithHttps;/**< 以https的方式连接我们的服务器.默认为NO,用http的方式连接 */
@property(nonatomic,assign)NSInteger theTag;//这个相当于Tag
@property(nonatomic,copy)NSString* theTagString;//这个相当于String类型的Tag
#pragma mark - 获取单例
/**获取单例,注意,本程序并不是全单例,而是半单例,本程序并没有重写alloc方法,所以alloc出来的依然是独立的地址*/
+(instancetype)shareInstance;//获取单例
#pragma mark - 设置为输出日志
-(void)stOutputLog:(BOOL)outputLog;
#pragma mark - 必需设置的参数,如果不设置这些参数,会导致SDK传递的信息不正确
/**
中文简体 中文繁体 英文 日语 韩语 德语 俄语
zh-Hans zh-Hant en ja ko de ru ,其它语言请自行查询
*/
@property(nonatomic,copy)NSString* theAppLanguage;//设置SDK的语言,如果服务器支持的话,服务器会返回相应的语言,默认为iOS系统语言
@property(nonatomic,copy)NSString* theAppVersion;//APP的版本,类似于 2.3.4.7 这样的版本号,默认为 0.0.0.0
@property(nonatomic,copy)NSString* theAppName;//App名称,请尽可能提供相应的名称
@property(nonatomic,copy)NSString* theAppId;//APPID要与技威公司联系申请,否则SDK不能正常使用
@property(nonatomic,copy)NSString* theAppToken;//AppToken要与技威公司联系申请,否则SDK不能正常使用
/**
服务器列表,自建服务器时才需要设置
默认:
@[@"api1.cloudlinks.cn",//中国大陆第一台
@"api2.cloudlinks.cn",//中国大陆第二台
@"api3.cloud-links.net",//外国第一台
@"api4.cloud-links.net"];//外国第二台
*/
@property(nonatomic,copy)NSArray<NSString*>* serverList;
#pragma mark - 账号基础接口
#pragma mark 登录
/**
登录
回调数据:
"error_code" 返回码(0:成功,其他值代表失败)
"UserID" 用户ID
P2PVerifyCode p2p校验码1
P2PVerifyCode2 p2p校验码2
Email 用户邮箱地址
NickName 用户昵称
CountryCode 手机号国际代码
PhoneNO 手机号
ImageID 头像ID(0:系统默认头像)
SessionID 会话ID(调用其他接口时用到
@param name 1 手机号码(手机号登录可以用不带国码,也可以用 国码-手机号码(如(国码中的+号也可以省略):86-13800008888 或 +86-13800008888)登录,但是,如果用户信息表中如果存在两个手机号相同而国码不相同时必需用“国码-手机号码”. 2 邮箱 3 ID号(如:10000|0x80000000 = -2147473648, -2147473648&0x7fffffff = 10000,01000是显示给用户的ID号,传给服务器可以为-2147473648也可以为01000)
@param pwd 密码,需要32位的md5加密处理,如果提供明文密码,内部会自动加密
@param token 苹果设备Token,用来远程推送,可空,空时则无法推送
@param timeZone App用户当前时区,传输格式分钟,例:东八区 480
@param completion 请求完成回调
*/
-(void)loginWithUserName:(NSString*)name//可以为手机,如 +86-15200002222,或者邮箱地址,或者ID号,例如-2147473648
withPassword:(NSString*)pwd//密码,需要32位的md5加密处理,如果提供明文密码,内部会自动加密
withAppleToken:(NSString*)token//苹果设备Token,用来远程推送,可空,空时则无法推送
withTimeZone:(NSInteger)timeZone//App用户当前时区,传输格式分钟,例:东八区 480
completion:(GWNetCompletionBlock)completion;//请求完成回调
#pragma mark 第三方登录
/**
第三方登录
调用接口时,先判断是哪个平台登录,platformType参数1表示微信,4表示Facebook,5表示LINE,客户使用此接口时还可使用2表示匿名登录3表示混合登录
匿名登录是通过取设备的特征信息生成UID(User Identification), unionID参数可传设备的UDID, user,pwd可不传,option每次传"3"即可
混合登录是用第三方平台已有系统账号作为特征信息之一生成UID,第三方可以是微信,facebook,line等, unionID参数正常传, user,pwd可不传,option每次传"3"即可
option传"1"时表示正常的登录,第一次登录时,账号还没有生成,此时不能传"1", 先传"2"或"3",传"2"表示绑定再有的Yoosee账号,此时user,pwd参数不能为空,传"3"时,服务器会自动生成一个Yoosee账号,生成账号后再调用初始化密码接口后,即可正常使用此账号
@param platformType 平台,1表示微信 2表示匿名登录 3表示混合登录 4表示Facebook 5表示LINE,此参数不可空
@param unionID 第三方平台验证后传回的唯一标识符,如果是匿名登录,提供设备的唯一标识即可,不可空
@param user Yoosee用户名,第三方平台登录后,绑定账号时要传,其它情况下可不传.可为手机,如+86-15200002222,或邮箱,或ID号,如010000,
@param pwd Yoosee账号密码,第三方平台登录后,绑定账号时要传,其它情况下可不传
@param token 苹果设备Token,用来远程推送,可空,空时则无法推送
@param option 1 仅登录 2绑定老用户并登录 3登录,若不存在则自动注册
@param storeID 商城ID,需要商城版功能时必须上传,可空,不懂的话留空即可
@param nickName 昵称,此参数传入微信,line等授权后的昵称作为账号默认的昵称
@param timeZone App用户当前时区,传输格式分钟,例:东八区 480
@param completion 回调
*/
-(void)thirdLoginWithPlatformType:(NSString*)platformType//平台,1.微信 2.匿名登录 3 混合登录 4.Facebook 5.LINE,此参数不可空
withUnionID:(NSString*)unionID//第三方平台的唯一标识符,如果是匿名登录,提供设备的唯一标识即可,不可空
withUser:(NSString*)user//用户名,可为手机,如+86-15200002222,或邮箱,或ID号,如010000,绑定账号时不可空
withPassword:(NSString*)pwd//密码,需要32位的md5加密处理,如果提供明文密码,内部会自动加密,绑定账号时不可空
withAppleToken:(NSString*)token//苹果设备Token,用来远程推送,可空,空时则无法推送
withOption:(NSString*)option//1仅登录 2绑定老用户并登录 3登录,若不存在则自动注册
withStoreID:(NSString*)storeID//商城ID,需要商城版功能时必须上传,可空,不懂的话留空即可
withNickName:(NSString*)nickName//此参数传入微信,line等授权后的昵称作为账号默认的昵称
timeZone:(NSInteger)timeZone//App用户当前时区,传输格式分钟,例:东八区 480
completion:(GWNetCompletionBlock)completion;//请求完成回调
/**
第三方登陆后,初始化密码
第三方登陆后,会自动生成一个Yoosee账号,但未生成密码,调用此接口配置密码
@param password 密码
@param userId yoosee用户Id
@param sessionId 会话Id
@param completion 回调
*/
- (void)thirdLoginInitPassword:(NSString *)password
withUserId:(NSString *)userId
sessionId:(NSString *)sessionId
completion:(GWNetCompletionBlock)completion;
#pragma mark 退出登录
/**
退出登录
@param userId 用户ID,数据从登录时返回的json里获取
@param sessionId 会话ID,数据从登录时返回的json里获取
@param completion 回调
*/
-(void)unLoginWithUserId:(NSString*)userId//这个应该从登录时返回的json里获取
withSessionId:(NSString*)sessionId//这个应该从登录时返回的json里获取
completion:(GWNetCompletionBlock)completion;//请求完成回调
#pragma mark 邮箱注册
-(void)regEmailWithEmail:(NSString*)name //邮箱地址
withPwd:(NSString*)pwd //密码,需要32位的md5加密处理,如果提供明文密码,内部会自动加密
withRePwd:(NSString*)rePwd//再次密码,两次的密码应当一致
completion:(GWNetCompletionBlock)completion;//请求完成回调
#pragma mark - 邮箱注册(增加邮箱验证码)
-(void)regEmailWithEmail:(NSString*)name //邮箱地址
withPwd:(NSString*)pwd //密码,需要32位的md5加密处理,如果提供明文密码,内部会自动加密
withRePwd:(NSString*)rePwd //再次密码,两次的密码应当一致
withIsValidMail:(NSString *)isValidMail //邮箱是否需要校验:1需要,0或空不需要
withMailCode:(NSString *)mailCode //邮箱验证码
completion:(GWNetCompletionBlock)completion; //请求完成回调
#pragma mark - 发送邮箱验证码
- (void)sendEmailCodeWithEmail:(NSString *)email //邮箱地址
withSendType:(NSString *)sendType //类型:注册请求0,绑定邮箱1,验证历史邮箱2
completion:(GWNetCompletionBlock)completion;//请求完成回调
#pragma mark - 历史注册邮箱邮箱校验时验证码检测
- (void)mailCodeCheckWithUserID:(NSString *)userID //用户ID
withSessionID:(NSString *)sessionID //会话ID
withUserPwd:(NSString *)userPwd //帐号密码(32位MD5值)
withEmail:(NSString *)email //邮箱地址
withMailCode:(NSString *)mailCode //邮箱验证码
completion:(GWNetCompletionBlock)completion;//请求完成回调
#pragma mark - 获取支持手机注册的国家编码
/**
获取支持手机注册的国家编码列表
国家编码之间由’|’分隔,例如:86|44|233
@param completion 回调
*/
- (void)getContryCodesSupportedTelephoneRegisterWithCompletion:(GWNetCompletionBlock)completion;
#pragma mark 手机号注册
/**
手机号注册
@param num 手机号
@param cCode 国码,中国为 86,不要写成+86
@param pwd 密码,需要32位的md5加密处理,如果提供明文密码,内部会自动加密
@param rePwd 再次密码
@param smsCode 短信验证码
@param completion 回调
*/
-(void)regPhoneWithNum:(NSString*)num//手机号
withCountryCode:(NSString*)cCode//国码,中国为 86,不要写成+86
withPassword:(NSString*)pwd//密码,需要32位的md5加密处理,如果提供明文密码,内部会自动加密
withRePwd:(NSString*)rePwd//再次密码
withSmsCode:(NSString*)smsCode//短信验证码
completion:(GWNetCompletionBlock)completion;//请求完成回调
#pragma mark 发验证码
/**
发验证码,注册时用,手机找回的时候不要用这个方法.此接口针对同一手机号及客户端IP有严格的调用限制策略。前端调用接口时服务器返回“0(发送验证码成功)”、“27或10902025(获取手机验证码太频繁)”后,客户端必须限定用户在120秒内不能再调用此接口。
@param code 国码
@param num 手机号
@param completion 回调
*/
-(void)sendSmsWithCountryCode:(NSString*)code//国码
withPhoneNum:(NSString*)num//手机号
completion:(GWNetCompletionBlock)completion;//请求完成回调
#pragma mark 验证验证码
/**
验证验证码是否输入正确,手机注册时用,手机找回的时候不要用这个方法
@param code 国码
@param num 手机号
@param vCode 短信验证码
@param completion 回调
*/
-(void)checkSmsWithCountryCode:(NSString*)code//国码
withPhoneNum:(NSString*)num//手机号
withVerifyCode:(NSString*)vCode//短信验证码
completion:(GWNetCompletionBlock)completion;//请求完成回调
#pragma mark 通过邮箱找回
/**
通过邮箱找回密码,会向这个邮箱发一封找回的邮件,按照操作能重置密码
@param email 邮箱
@param completion 回调
*/
-(void)findFromEmailWithEmail:(NSString*)email//会向这个邮箱发一封找回的邮件,仅此而已
completion:(GWNetCompletionBlock)completion;//请求完成回调
#pragma mark 通过手机找回来重置密码必需严格按顺序按照下面3步执行,过程中会用到2个不同的vKey,都是由服务器返回
#pragma mark 1.手机找回
/**
手机找回,服务器会自动向手机发验证码,不需要调用上面发验证码的方法
@param countryCode 国码,中国为 86,不要写成+86
@param num 手机号
@param completion 回调
*/
-(void)findFromPhoneWithCountryCode:(NSString*)countryCode//国码,中国为 86,不要写成+86
withPhoneNum:(NSString*)num//手机号
completion:(GWNetCompletionBlock)completion;//请求完成回调
#pragma mark 2.验证手机找回
/**
验证手机找回,用这个方法来验证刚才通过找回的验证码是否正确
@param theId 从手机找回返回的json里获取
@param vKey 从手机找回返回的json里获取
@param cCode 国码
@param num 手机号
@param smsCode 短信验证码
@param completion 回调
*/
-(void)checkFindFromPhoneWithID:(NSString*)theId//这个应该从返回的json里获取
withVkey:(NSString*)vKey//这个应该从返回的json里获取
withCountryCode:(NSString*)cCode//国码
withPhoneNum:(NSString*)num//手机号
withSmsCode:(NSString*)smsCode//短信验证码
completion:(GWNetCompletionBlock)completion;//请求完成回调
#pragma mark 3.通过手机重置密码
/**
通过手机重置密码
@param theId 从手机找回返回的json里获取
@param vkey 从手机找回返回的json里获取
@param pwd 密码,需要32位的md5加密处理,如果提供明文密码,内部会自动加密
@param rePwd 确认密码
@param completion 回调
*/
-(void)reSetPasswordWithId:(NSString*)theId//这个应该从返回的json里获取
withVkey:(NSString*)vkey//这个应该从返回的json里获取
withNewPwd:(NSString*)pwd//密码,需要32位的md5加密处理,如果提供明文密码,内部会自动加密
withRePwd:(NSString*)rePwd//再次密码
completion:(GWNetCompletionBlock)completion;//请求完成回调
#pragma mark 检查账号是否存在
/**
检查要注册的账号是否存在
@param account 账号,邮箱或者手机
@param completion 回调
*/
-(void)checkAccountIsExistWithAccount:(NSString*)account//账号可以是邮箱或者手机
completion:(GWNetCompletionBlock)completion;//请求完成回调
#pragma mark 获取账户信息
/**
获取账户信息
返回数据:
Email 绑定的邮箱
CountryCode 绑定的国码
PhoneNO 绑定的手机号码
@param userID 用户ID
@param sessionID 会话ID
@param completion 回调
*/
-(void)gtUserInfoWithUserID:(NSString*)userID//这个应该从登录时返回的json里获取
withSessionID:(NSString*)sessionID//这个应该从登录时返回的json里获取
completion:(GWNetCompletionBlock)completion;//请求完成回调
#pragma mark 设置账户安全信息
/**
设置账户安全信息,用于绑定邮箱和手机号
@param userID 用户ID
@param sessionID 会话ID
@param email 邮箱,此参数当bFlag传"2"或者"0"时有效,为空则解除绑定邮箱
@param cCode 国码,此参数当bFlag传"1"或者"0"时有效,为空则解除绑定手机
@param phone 手机号,此参数当bFlag传"1"或者"0"时有效,为空则解除绑定手机,绑定的手机应该是未被注册过的手机
@param Pwd 密码,绑定邮箱或者手机需要验证密码,需要32位的md5加密处理,如果提供明文密码,内部会自动加密
@param bFlag //绑定标志(0:同时绑定手机和邮箱 1:仅绑定手机 2:仅绑定邮箱) 不可空
@param sms 验证码,绑定手机的时候需要提供手机验证码,先调发验证码接口
@param completion 回调
*/
-(void)stUserInfoWithUserID:(NSString*)userID//这个应该从登录时返回的json里获取
withSessionID:(NSString*)sessionID//这个应该从登录时返回的json里获取
withEmail:(NSString*)email//绑定邮箱,此参数当bFlag=2或者0时有效,为空则解除绑定邮箱
withCountryCode:(NSString*)cCode//国码,此参数当bFlag=1或者0时有效,为空则解除绑定手机
withPhoneNum:(NSString*)phone//手机号,此参数当bFlag=1或者0时有效,为空则解除绑定手机,绑定的手机应该是未被注册过的手机
withUserPwd:(NSString*)Pwd//绑定邮箱或者手机需要验证密码,需要32位的md5加密处理,如果提供明文密码,内部会自动加密
withBindFlag:(NSString*)bFlag//绑定标志(0:同时绑定手机和邮箱 1:仅绑定手机 2:仅绑定邮箱) 不可空
withSms:(NSString*)sms//当绑定手机的时候需要提供手机验证码,可以调发验证码的接口就行了
completion:(GWNetCompletionBlock)completion;//请求完成回调
#pragma mark 设置账户信息(增加邮箱验证码)
-(void)stUserInfoWithUserID:(NSString*)userID//这个应该从登录时返回的json里获取
withSessionID:(NSString*)sessionID//这个应该从登录时返回的json里获取
withEmail:(NSString*)email//绑定邮箱,此参数当bFlag=2或者0时有效,为空则解除绑定邮箱
withCountryCode:(NSString*)cCode//国码,此参数当bFlag=1或者0时有效,为空则解除绑定手机
withPhoneNum:(NSString*)phone//手机号,此参数当bFlag=1或者0时有效,为空则解除绑定手机,绑定的手机应该是未被注册过的手机
withUserPwd:(NSString*)Pwd//绑定邮箱或者手机需要验证密码,需要32位的md5加密处理,如果提供明文密码,内部会自动加密
withBindFlag:(NSString*)bFlag//绑定标志(0:同时绑定手机和邮箱 1:仅绑定手机 2:仅绑定邮箱) 不可空
withSms:(NSString*)sms//当绑定手机的时候需要提供手机验证码,可以调发验证码的接口就行了
withIsValidMail:(NSString *)isValidMail//邮箱是否需要校验:1需要,0或空不需要
withMailCode:(NSString *)mailCode//邮箱验证码
completion:(GWNetCompletionBlock)completion;//请求完成回调
#pragma mark - 修改用户账号密码
/**
修改用户账号密码
@param userID 用户iD
@param sessionID 会话ID
@param oldPwd 账号的原密码,需要32位的md5加密处理,如果提供明文密码,内部会自动加密
@param pwd 账号的新密码,需要32位的md5加密处理,如果提供明文密码,内部会自动加密
@param rePwd 确认新密码
@param completion 回调
*/
-(void)changeUserPasswordWithUserID:(NSString*)userID//用户iD
withSessionID:(NSString*)sessionID//会话ID
withOldPwd:(NSString*)oldPwd//账号的原密码,需要32位的md5加密处理,如果提供明文密码,内部会自动加密
withPwd:(NSString*)pwd//账号的新密码,需要32位的md5加密处理,如果提供明文密码,内部会自动加密
withRePwd:(NSString*)rePwd//两次确认的新密码,需要32位的md5加密处理,如果提供明文密码,内部会自动加密
completion:(GWNetCompletionBlock)completion;//请求完成回调
#pragma mark - 设备同步接口
#pragma mark 设备同步-增加设备
/**
增加设备
@param userID 用户ID
@param sessionID 会话ID
@param modifyTime 客户端本地修改时的UTC时间戳
@param deviceID 设备ID
@param devicePwd 设备加密后的密码
@param remarkName 设备昵称
@param permission 权限(初始为0,表示不支持权限配置)
@param completion 回调
*/
-(void)addDeviceWithUserID:(NSString*)userID//用户ID
sessionID:(NSString*)sessionID//会话ID
modifyTime:(NSString*)modifyTime//客户端本地修改时的UTC时间戳
deviceID:(NSString*)deviceID//设备ID
devicePwd:(NSString*)devicePwd//设备加密后的密码
remarkName:(NSString*)remarkName//设备昵称
permission:(NSInteger)permission//权限(初始为0,表示不支持权限配置)
completion:(GWNetCompletionBlock)completion;
#pragma mark 设备同步-删除设备
/**
删除设备,服务器不会真删除,只把状态标识变为0,下次拉取数据时设备还会返回
@param userID 用户ID
@param sessionID 会话ID
@param modifyTime 客户端本地修改时的UTC时间戳
@param deviceID 设备ID
@param completion 回调
*/
-(void)deleteDeviceWithUserID:(NSString*)userID//用户ID
sessionID:(NSString*)sessionID//会话ID
modifyTime:(NSString*)modifyTime//客户端本地修改时的UTC时间戳
deviceID:(NSString*)deviceID//设备ID
completion:(GWNetCompletionBlock)completion;
#pragma mark 设备同步-修改设备
/**
修改设备,修改一台设备信息
@param userID 用户ID
@param sessionID 会话ID
@param modifyTime 客户端本地修改时的UTC时间戳
@param deviceID 设备ID
@param devicePwd 设备加密后的密码
@param remarkName 设备昵称
@param permission 权限,不可通过此接口更改设备权限
@param completion 回调
*/
-(void)modifyDeviceWithUserID:(NSString*)userID//用户ID
sessionID:(NSString*)sessionID//会话ID
modifyTime:(NSString*)modifyTime//客户端本地修改时的UTC时间戳
deviceID:(NSString*)deviceID//设备ID
devicePwd:(NSString*)devicePwd//设备加密后的密码
remarkName:(NSString*)remarkName//设备昵称
permission:(NSInteger)permission
completion:(GWNetCompletionBlock)completion;
#pragma mark 设备同步-批量更新设备
/**
设备同步-批量更新设备
参数 DeviceInfo 格式说明(两台设备信息之间用英式','分隔,各个信息字段用英式'|'分隔),如
"操作选项1|修改时间1|设备信息版本号1|分组ID1|设备ID1|权限1|秘钥1|备注名1,操作选项2|修改时间2|设备信息版本号2|分组ID2|设备ID2|权限2|秘钥2|备注名2"
操作选项取值:1(添加)、2(删除)、3(修改),最大包含200台设备信息。
@param userID 用户ID
@param sessionID 会话ID
@param deviceInfo 设备信息,要更改的设备信息,按上面说明的格式填写
@param completion 回调
*/
-(void)upgradeDevicesWithUserID:(NSString*)userID//用户ID
sessionID:(NSString*)sessionID//会话ID
deviceInfo:(NSString*)deviceInfo//设备信息
completion:(GWNetCompletionBlock)completion;
#pragma mark 设备同步-拉取设备信息
/**
设备同步-拉取设备信息
回调数据说明:
DeviceInfo格式,和批量更新不完全一致(两台设备信息之间用英式','分隔,各个信息字段用英式'|'分隔),如:
"修改时间1|设备信息版本号1|分组ID1|设备ID1|权限1|秘钥1|备注名1|状态1,修改时间2|设备信息版本号2|分组ID2|设备ID2|权限2|秘钥2|备注名2|状态2"
这里的“状态”取值:0(已标记为删除【实际上不会真正删除数据】,APP不要显示)、1(正常)。
@param userID 用户ID
@param sessionID 会话ID
@param preDeviceID 上次拉取时获取到的最后一个设备ID(第一次拉取填0
@param requestCount 请求拉取的设备数量(每次最大200个)
@param upgradeFlag 本地缓存的列表最后更新标志,传"0"即可
@param upgCheckList 要获取哪些设备有固件更新,格式为"设备ID1|设备ID2"
@param completion 回调
*/
-(void)loadDevicesWithUserID:(NSString*)userID//用户ID
sessionID:(NSString*)sessionID//会话ID
preDeviceID:(NSString*)preDeviceID//上次拉取时获取到的最后一个设备ID(第一次拉取填0)
requestCount:(NSUInteger)requestCount//请求拉取的设备数量(每次最大200个)
upgradeFlag:(NSString*)upgradeFlag//本地缓存的列表最后更新标志
upgCheckList:(NSString*)upgCheckList
completion:(GWNetCompletionBlock)completion;
#pragma mark - 分享接口
#pragma mark 锁定设备绑定主人的功能
/**
锁定设备绑定主人的功能
锁定后其它用户不能再对此设备进行绑定主人操作
同时此接口可查询设备是否已经被绑定了
@param deviceID 设备ID
@param userID 用户ID
@param sessionID 登陆会话ID
@param completion 绑定完成后的block
*/
- (void)lockBindingDevice:(NSString *)deviceID
withUserID:(NSString *)userID
sessionID:(NSString *)sessionID
completion:(GWNetCompletionBlock)completion;
#pragma mark 绑定主人
/**
绑定主人
关于权限的定义,Permission是8字节整型,总共有64个bit,从低位到高位分配如下:
Bit0: 表示是否启用权限管理功能
Bit1: 表示是否是设备的主人(主人不受其他权限位的影响;不是主人才需要根据权限位的定义处理)
Bit2:表示是否有基本权限(看视频、截屏、录制本地视频、查看当前流量,调整画质[分辨率])
Bit3:表示是否有摇头权限
Bit4:表示是否有语音(含对讲)权限;
Bit5:表示是否有回放(包含云回放)权限
Bit6:表示是否有布撤防权限;
Bit7:表示是否有开锁(支持锁的设备才显示开锁权限设置)权限;
Bit8:表示是否有接收设备消息(报警、门铃、呼叫等)推送权限;
Bit9: 表示是否开启接收设备消息(当Bit8为1,此位才有效);
Bit10 表示设备离线后是否开启接收离线通知(0:关闭离线通知,1:开启离线通知);
@param deviceID 设备ID
@param userID 用户(主人)ID
@param sessionID 登陆会话ID
@param modifyTime 绑定时时间戳
@param deviceInfoVersion 设备信息版本号(现在传 0,后续可使用不同版本号对应不同的加密方式等)
@param groupID 分组ID(现在传 0,表示不支持设备分组)
@param permission 权限(必须是开启权限功能且是主人,按权限值计算)
@param secretKey 设备加密后的密码(主人密码)
@param guestKey 设备加密后的访客密码
@param remarkName 设备备注名称
@param keyID 由DeviceID+Rkey组成(其中DeviceID、RKey需要加密)
@param customID 顾客ID,获取不到时应传入0
@param macAddr Mac地址,长度固定为12,获取不到时用0填充
@param isSupport 是否支持权限管理,1代表支持,0或者传空代表不支持
@param completion 绑定完成后的block
*/
- (void)bindDevice:(NSString *)deviceID
withUserID:(NSString *)userID
sessionID:(NSString *)sessionID
modifyTime:(NSString *)modifyTime
deviceInfoVersion:(NSString *)deviceInfoVersion
groupID:(NSString *)groupID
permission:(NSInteger)permission
secretKey:(NSString *)secretKey
guestKey:(NSString *)guestKey
remarkName:(NSString *)remarkName
keyID:(UInt64)keyID
customID:(int)customID//顾客ID,获取不到时应传入0
macAddr:(NSString *)macAddr//Mac地址,长度固定为12,获取不到时用0填充
isSupport:(BOOL)isSupport//是否支持权限管理,1代表支持,0或者传空代表不支持
completion:(GWNetCompletionBlock)completion;
#pragma mark 获取邀请码
/**
获取邀请码,此接口已经不用,改用获取邀请链接
@param deviceID 设备ID
@param userID 用户(主人)ID
@param sessionID 登陆会话ID
@param permission 权限(必须是开启权限功能且是主人)
@param completion 绑定完成后的block
*/
- (void)getInviteCodeWithUserID:(NSString *)userID
sessionID:(NSString *)sessionID
deviceID:(NSString *)deviceID
permission:(NSInteger)permission
completion:(GWNetCompletionBlock)completion DEPRECATED_MSG_ATTRIBUTE("use getShareLinkWithUserID:sessionID:deviceID:permission:guestID:guestRemark:appendMsg:completion:");
#pragma mark 获取邀请链接
/**
获取邀请链接
返回ShareLink:分享链接(包含链接作用类型、邀请码、分享者的昵称、分享者APP的版本号、设备ID)。链接作用类型=1 代表是分享功能的链接
@param userID 用户(主人)ID
@param sessionID 登陆会话ID
@param deviceID 设备ID
@param permission 权限(必须是开启权限功能且是主人)
@param guestID 访客ID(二维码或链接分享时传空)
@param guestRemark 访客备注名(二维码或链接分享时传空)
@param appendMsg 留言(二维码或链接分享时传空)
@param completion 回调
*/
- (void)getShareLinkWithUserID:(NSString *)userID
sessionID:(NSString *)sessionID
deviceID:(NSString *)deviceID
permission:(NSInteger)permission
guestID:(NSString *)guestID
guestRemark:(NSString *)guestRemark
appendMsg:(NSString *)appendMsg
completion:(GWNetCompletionBlock)completion;
#pragma mark 获取访客列表
/**
获取访客列表
@param userID 用户(主人)ID
@param sessionID 登陆会话ID
@param deviceID 设备ID
@param completion 绑定完成后的block
*/
- (void)getGuestListWithUserID:(NSString *)userID
sessionID:(NSString *)sessionID
deviceID:(NSString *)deviceID
completion:(GWNetCompletionBlock)completion;
#pragma mark 删除访客信息
/**
删除访客信息
@param userID 用户(主人)ID
@param sessionID 登陆会话ID
@param deviceID 设备ID
@param guestID 访客ID
@param completion 绑定完成后的block
*/
- (void)deleteGuestWithUserID:(NSString *)userID
sessionID:(NSString *)sessionID
deviceID:(NSString *)deviceID
guestID:(NSString *)guestID
completion:(GWNetCompletionBlock)completion;
#pragma mark 删除主人信息(解绑)
/**
删除主人信息(解绑)
@param userID 用户(主人)ID
@param sessionID 登陆会话ID
@param deviceID 设备ID
@param packageOption 是否有增值业务
@param completion 绑定完成后的block
*/
- (void)deleteOwnerWithUserID:(NSString *)userID
sessionID:(NSString *)sessionID
deviceID:(NSString *)deviceID
packageOption:(BOOL)packageOption
completion:(GWNetCompletionBlock)completion;
#pragma mark 获取设备密码
/**
获取设备密码
@param userID 用户(主人)ID
@param sessionID 登陆会话ID
@param deviceID 设备ID
@param completion 绑定完成后的block
*/
- (void)getSharedDevicePasswordWithUserID:(NSString *)userID
sessionID:(NSString *)sessionID
deviceID:(NSString *)deviceID
completion:(GWNetCompletionBlock)completion;
#pragma mark 获取被分享的设备信息(访客添加被分享的设备)
/**
获取被分享的设备信息(访客添加被分享的设备)
@param userID 用户(访客)ID
@param sessionID 登陆会话ID
@param inviteCode 邀请码(设备主人分享得到,二维码或文本)
@param modifyTime 客户端本地修改时的UTC时间戳
@param completion 绑定完成后的block
*/
- (void)getSharedDeviceInfomationWithUserID:(NSString *)userID
sessionID:(NSString *)sessionID
inviteCode:(NSString *)inviteCode
modifyTime:(NSString *)modifyTime
completion:(GWNetCompletionBlock)completion;
#pragma mark 修改权限
/**
修改权限
@param userID 用户ID
@param sesssionID 会话ID
@param deviceID 设备ID
@param guestID 访客ID
@param permission 权限值
@param completion 回调
*/
- (void)modifyPermissionWithUserID:(NSString *)userID
sessionID:(NSString *)sessionID
deviceID:(NSString *)deviceID
guestID:(NSString *)guestID
permission:(NSString *)permission
completion:(GWNetCompletionBlock)completion;
#pragma mark 主人分享时获取访客信息
/**
主人分享时获取访客信息
@param userID 主人ID
@param sessionID 会话ID
@param deviceID 设备ID
@param guestAccount 要分享的访客ID
@param completion 回调
*/
- (void)getGuestInfoWithUserID:(NSString *)userID
sessionID:(NSString *)sessionID
deviceID:(NSString *)deviceID
guestAccount:(NSString *)guestAccount
completion:(GWNetCompletionBlock)completion;
#pragma mark 修改访客备注
/**
修改访客备注
@param userID 主人ID
@param sessionID 会话ID
@param deviceID 设备ID
@param guestID 访客ID
@param remarkName 修改后的备注名
@param completion 回调
*/
- (void)modifyGuestRemarknameWithUserID:(NSString *)userID
sessionID:(NSString *)sessionID
deviceID:(NSString *)deviceID
guestID:(NSString *)guestID
remarkName:(NSString *)remarkName
completion:(GWNetCompletionBlock)completion;
#pragma mark 修改用户昵称
/**
修改用户昵称
@param userID 用户ID
@param sessionID 会话ID
@param nickName 昵称
@param completion 回调
*/
- (void)modifyNicknameWithUserID:(NSString *)userID
sessionID:(NSString *)sessionID
nickName:(NSString *)nickName
completion:(GWNetCompletionBlock)completion;
#pragma mark 主人/访客解除接收推送
/**
主人/访客解除接收推送
@param userID 用户ID
@param sessionID 会话ID
@param deviceID 设备ID
@param completion 回调
*/
- (void)cancelReceivePushWithUserID:(NSString *)userID
sessionID:(NSString *)sessionID
deviceID:(NSString *)deviceID
completion:(GWNetCompletionBlock)completion;
#pragma mark 预配网
/**
预配网
只有智能联机时调此接口,告诉服务器,设备将开始配网
设备连接到网络后,会以两种方式通知手机,一是局域网发包,二是p2p消息通知,调此接口后,将wifi信息发给服务器,服务器以这个信息判断是哪台设备正在配网。配网成功后,两种方式哪种先收到就处理哪种
@param deviceID 设备ID
@param wifiInfo wifi信息,用来核对是哪个设备正在配网,wifi用户名+密码
@param userID 用户ID
@param sessionID 会话ID
@param completion 回调
*/
- (void)tellServceDevice:(NSString *)deviceID
willLinkWifi:(NSString *)wifiInfo
withUserID:(NSString *)userID
sessionID:(NSString *)sessionID
completion:(GWNetCompletionBlock)completion;
#pragma mark 设置设备离线推送状态
/**
设置设备离线推送状态,默认为开,设备离线后,会给app推送一条消息
@param on 离线推送状态
@param userID 用户ID
@param sessionID 会话ID
@param deviceID 设备ID
@param completion 回调
*/
- (void)setDeviceOffinePushState:(BOOL)on
withUserID:(NSString *)userID
sessionID:(NSString *)sessionID
deviceID:(NSString *)deviceID
completion:(GWNetCompletionBlock)completion;
#pragma mark - app开启权限管理
/**
app开启权限管理,适用于固件升级后支持权限管理,需要app开启权限管理
@param userID 用户ID
@param sessionID 会话ID
@param deviceID 设备ID
@param completion 回调
*/
- (void)openAuthorityWithUserID:(NSString *)userID
sessionID:(NSString *)sessionID
deviceID:(NSString *)deviceID
completion:(GWNetCompletionBlock)completion;
#pragma mark - 检查设备绑定状态
/**
检查设备绑定状态
@param deviceID 设备ID
@param userID 用户(主人)ID
@param sessionID 登陆会话ID
@param completion 绑定完成后的block
*/
- (void)getBindedStatusDevice:(NSString *)deviceID
withUserID:(NSString *)userID
sessionID:(NSString *)sessionID
completion:(GWNetCompletionBlock)completion;
#pragma mark 已联网方式转分享模式
/**
已联网方式转分享模式
@param deviceID 设备ID
@param userID 用户(主人)ID
@param sessionID 登陆会话ID
@param modifyTime 绑定时时间戳
@param deviceInfoVersion 设备信息版本号(现在传 0,后续可使用不同版本号对应不同的加密方式等)
@param groupID 分组ID(现在传 0,表示不支持设备分组)
@param permission 权限(必须是开启权限功能且是主人,按权限值计算)
@param secretKey 设备加密后的密码(主人密码)
@param guestKey 设备加密后的访客密码
@param remarkName 设备备注名称
@param isSupport 是否支持权限管理,1代表支持,0或者传空代表不支持
@param completion 绑定完成后的block
*/
- (void)switchOwnerDevice:(NSString *)deviceID
withUserID:(NSString *)userID
sessionID:(NSString *)sessionID
modifyTime:(NSString *)modifyTime
deviceInfoVersion:(NSString *)deviceInfoVersion
groupID:(NSString *)groupID
permission:(NSInteger)permission
secretKey:(NSString *)secretKey
guestKey:(NSString *)guestKey
remarkName:(NSString *)remarkName
isSupport:(BOOL)isSupport
completion:(GWNetCompletionBlock)completion;
#pragma mark 灰度控制app是否展示开启启动图
/**
灰度控制app是否展示开启启动图
@param userID 用户(主人)ID
@param sessionID 登陆会话ID
@param completion 回调
*/
- (void)shouldShowSplashADWithUserID:(NSString *)userID
sessionID:(NSString *)sessionID
completion:(GWNetCompletionBlock)completion;
#pragma mark - 自定义服务器地址请求
/**
自定义链接请求,适用于单独的Web API或者测试
@param urlStr 请求链接
@param paras 除了公共参数之外的参数
@param completion 回调
*/
- (void)requestWithURLString:(NSString *)urlStr parameters:(NSDictionary *)paras completion:(GWNetCompletionBlock)completion;
@end
+102
View File
@@ -0,0 +1,102 @@
//
// GWNetError.h
// Yoosee
//
// Created by zengyuying on 17/1/9.
// Copyright © 2017年 Gwelltimes. All rights reserved.
//
//以下是根据新服务器网络接口错误码定义的宏,原为16进制的值,因为GWNet返回的是NSString,所以直接定义为字符串
#define GWNET_RET_OPERATION_SUCCESS @"0" //成功
#define GWNET_RET_SHOW_SERVER_MESSAGE_1 @"10001" //app直接显示服务器返回的错误字符串
#define GWNET_RET_SHOW_SERVER_MESSAGE_2 @"10901061" //app直接显示服务器返回的错误字符串
#define GWNET_RET_SYSTEM_MAINTENANCE_ERROR @"10901060" //系统正在维护,请稍后再试
#define GWNET_RET_PASSWORD_HAS_BEEN_INITED_ERROR @"10902076" //密码已被初始化过,无法再初始化
#define GWNET_RET_COUNTRY_CODE_FORMAT_ERROR @"10902075" //国家码数据格式不正确
#define GWNET_RET_REGIEST_FAILED @"10902072" //注册失败
#define GWNET_RET_GET_PHONE_CODE_REACH_CEILING @"10902026" //获取手机验证码已到达上限
#define GWNET_RET_GET_PHONE_CODE_TOO_TIMES @"10902025" //获取手机验证码太频繁
#define GWNET_RET_SEND_VERIFY_CODE_FAILED @"10902024" //发送手机验证码失败
#define GWNET_RET_SEND_VERIFY_EMAIL_FAILED @"10902023" //发送验证邮件失败
#define GWNET_RET_EMAIL_USED @"10902021" //邮箱已被使用
#define GWNET_RET_PHONE_USED @"10902020" //手机号已被使用
#define GWNET_RET_ACCOUNT_DISABLED @"10902013" //帐号不可用_不可用的原因在error中返回帐号状态编号
#define GWNET_RET_SESSION_ID_ERROR @"10902012" //会话ID不正确
#define GWNET_RET_ACCOUNT_NOT_EXIST @"10902011" //用户不存在
#define GWNET_RET_PHONE_CODE_TIMEOUT @"10902010" //手机验证码超时
#define GWNET_RET_PHONE_CODE_ERROR @"10902009" //手机验证码不正确
#define GWNET_RET_LACK_COUNTRY_CODE @"10902007" //请在手机号前输入国码
#define GWNET_RET_BIND_ACCOUNT_PASSWORD_ERROR @"10902005" //绑定的用户密码错误
#define GWNET_RET_BIND_ACCOUNT_NOT_EXIST @"10902004" //绑定的用户不存在
#define GWNET_RET_ACCOUNT_PASSWORD_ERROR @"10902003" //用户密码错误
#define GWNET_RET_THIRD_ACCOUNT_NOT_EXIST @"10902002" //第三方账号不存在
#define GWNET_RET_THIRD_ACCOUNT_EXIST @"10902001" //第三方账号已存在
#define GWNET_RET_SERVICE_NOT_SUPPORT @"10901071" //服务器不支持此项服务
#define GWNET_RET_PASSWORD_FORMAT_ERROR @"10901024" //密码数据格式不符合要求
#define GWNET_RET_EMAIL_FORMAT_ERROR @"10901023" //邮箱地址数据格式不符合要求
#define GWNET_RET_PHONE_FORMAT_ERROR @"10901022" //手机号数据格式不符合要求
#define GWNET_RET_LACK_PARAMETER_ERROR @"10901020" //缺少输入参数
#define GWNET_RET_GET_EMAIL_CODE_TOO_OFTEN @"10902027" //获取邮件太频繁
#define GWNET_RET_GET_EMAIL_CODE_COUNT_LIMIT @"10902028" //获取邮件已到达30分钟内的上限
#define GWNET_RET_EMAIL_CODE_ERROR @"10902029" //邮件验证码不正确
#define GWNET_RET_EMAIL_CODE_TIMEOUT @"10902030" //邮件验证码超时
//同步设备列表相关
#define GWNET_RET_ADD_DEVICE_ALREADY_EXIST @"1090200A" //设备已存在,不能重复添加
#define GWNET_RET_MODIFY_DEVICE_NOT_EXIST @"1090200B" //设备信息不存在
#define GWNET_RET_MODIFY_DEVICE_SERVER_NEWER @"1090200C" //服务器上的记录比客户端的新,客户端需要重新加载
#define GWNET_RET_DEVICE_ID_REPEATED @"1090200D" //设备ID重复
#define GWNET_RET_LOAD_DEVICE_ALREADY_LAST @"1090200E" //您的设备列表已经是最新的,不需要从服务器拉取了
//设备分享
#define GWNET_RET_SHARING_DEVICE_HAS_NO_OWNER @"10905002" //此设备还没有主人
#define GWNET_RET_SHARING_DEVICE_HAS_OWNER @"10905001" //此设备已有主人
#define GWNET_RET_SHARING_DEVICE_HAS_BE_LOCKED_AND_IS_BEENING_BINDED @"10905003" //此设备已被锁定,正在绑定主人信息
#define GWNET_RET_SHARING_DEVICE_HAS_BE_LOCKED @"10905004" //此设备已被他人锁定及绑定主人信息
#define GWNET_RET_SHARING_INSUFFICIONT_USER_PERMISSIONS @"10905005" //必须是主人权限才能操作
#define GWNET_RET_SHARING_CREATE_INVATE_CODE_FAIL @"10905007" //创建邀请码失败
#define GWNET_RET_SHARING_INVATE_CODE_INVANIDATE @"10905008" //邀请码无效(不存在或超时)
#define GWNET_RET_SHARING_IS_OWNER @"10905009" //已经是主人
#define GWNET_RET_SHARING_IS_VISITOR @"10905010" //已经是访客
#define GWNET_RET_PARAMETER_ERROR @"10901025" //参数错误
//设备数量限制
#define GWNET_RET_ADD_DEVICE_COUNT_LIMIT @"10905014" //添加的当前设备数量已达到上限
#define GWNET_RET_ADD_PAST_DEVICE_COUNT_LIMIT @"10905014" //添加的历史设备数量已达到上限
#define GWNET_RET_DEVICE_BINDED_COUNT_LIMIT @"10905014" //当前设备被绑定的次数已达到上限
//权限管理
#define GWNET_RET_VISITOR_HAS_DELETE_DEVICE @"10905017" //配置权限时访客已删除该设备
//以下错误码在客户端暂时没用到,有需要时再进行定义
//需要用到再定义 #define @"10902074" //验证码为空
//需要用到再定义 #define @"10902073" //验证码不存在
//需要用到再定义 #define @"10902022" //为了你的帐号安全,请输入邮箱地址
//需要用到再定义 #define @"10902014" //重置密码链接无效
//需要用到再定义 #define @"10902008" //系统分配账号失败
//需要用到再定义 #define @"10902006" //获取绑定的用户信息失败
//需要用到再定义 #define @"109013E9" //请换用其他服务器接口
//需要用到再定义 #define @"10901070" //访问受限制
//需要用到再定义 #define @"10901061" //这里的内容动态生成,APP直接显示此内容
//需要用到再定义 #define @"10901053" //APP客户号(内置主版本号)错误
//需要用到再定义 #define @"10901052" //APP信息不存在
//需要用到再定义 #define @"10901051" //此APP已被冻结
//需要用到再定义 #define @"10901050" //APP信息(AppID、AppToken、包名等)不正确
//需要用到再定义 #define @"10901040" //系统配置错误
//需要用到再定义 #define @"1090103E" //请换用其他服务器接口
//需要用到再定义 #define @"10901030" //发现非法字符
//需要用到再定义 #define @"10901027" //参数超出范围
//需要用到再定义 #define @"10901026" //用户ID必须以0开头
//需要用到再定义 #define @"10901021" //输入数据格式错误
//需要用到再定义 #define @"10901012" //文件操作失败
//需要用到再定义 #define @"10901011" //文件不存在
//需要用到再定义 #define @"10901010" //文件打开失败
//需要用到再定义 #define @"10901004" //数据库操作异常
//需要用到再定义 #define @"10901003" //数据库记录集为空
//需要用到再定义 #define @"10901002" //数据库操作失败
//需要用到再定义 #define @"10901001" //数据库连接失败
+47
View File
@@ -0,0 +1,47 @@
//
/** @file GWP2P.h @brief 该文件包含GWP2P SDK所有头文件 */
// P2PSDK
//
// Created by apple on 17/2/24.
// Copyright © 2017年 gwell. All rights reserved.
//
// 用户接口
#import "GWNet.h"
#import "GWNetError.h"
//设置
#import "GWP2PClient.h" //初始化连接
#import "GWP2PClient+DeviceInfomation.h"
#import "GWP2PClient+PictureAndSound.h"
#import "GWP2PClient+Defense.h"
#import "GWP2PClient+Alarm.h"
#import "GWP2PClient+Record.h"
#import "GWP2PClient+SceneMode.h"
#import "GWP2PClient+APMode.h"
#import "GWP2PClient+Sensor.h"
#import "GWP2PClient+WhiteLight.h"
#import "GWP2PClient+GarageLight.h"
#import "GWP2PClient+HXVision.h"
#import "GWP2PDefine.h"
//监控、视频通话、回放
#import "GWP2PPlayer.h" //播放器基类
#import "GWP2PVideoPlayer.h" //监控、视频通话时使用
#import "GWP2PPlaybackPlayer.h" //回放使用
#import "GWP2PPlayerDefine.h"
//配网
#import "GWP2PDeviceLinker.h" //设备联网
//模型
#import "GWP2PDevice.h" //设备
#import "GWP2PLanDevice.h" //局域网搜索到的设备
//服务器加密
#import "MD5Manager.h"
@@ -0,0 +1,62 @@
//
/** @file GWP2PClient+APMode.h @brief 处理AP模式的分类 */
// P2PSDK
//
// Created by apple on 17/3/7.
// Copyright © 2017年 gwell. All rights reserved.
//
#import "GWP2PClient.h"
/**
@brief 处理AP模式的分类
*/
@interface GWP2PClient (APMode)
/**
切换设备模式:从连网模式至AP模式
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)setDeviceFromNetworkModeToAPModeWithDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
切换设备模式:AP配网单机模式切换到普通单机模式,单机模式指令,必需连接AP配网模式的设备wifi才能使用
设备处于AP配网模式时,会发出配网提示音,执行这条指令后,不再发出配网提示音
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)setDeviceFromConfigNetworkAPModeToNormalAPModeWithCompletionBlock:(CompletionBlock)completionBlock;
/**
获取设备是否连接过wifi (若设备不支持,只会超时,此bug待日后更新)
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)getDeviceWiFiHasBeSettedWithCompletionBlock:(CompletionBlock)completionBlock;
/**
AP模式下设置设备wifi,设置后设备切回连网模式并连接设置的wifi (若设备不支持,只会超时,此bug待日后更新)
@param wifiName wifi名
@param wifiPassword wifi密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)setDeviceWifiInAPModeWithWifiName:(NSString *)wifiName
wifiPassword:(NSString *)wifiPassword
completionBlock:(CompletionBlock)completionBlock;
/**
AP模式下设置设备wifi密码
@param wifiPassword wifi密码:8-16位
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)setDeviceWifiPassword:(NSString *)wifiPassword inAPModeWithCompletionBlock:(CompletionBlock)completionBlock;
@end
+293
View File
@@ -0,0 +1,293 @@
//
/** @file GWP2PClient+Alarm.h @brief 处理设备报警的分类 */
// P2PSDK
//
// Created by apple on 17/3/2.
// Copyright © 2017年 gwell. All rights reserved.
//
#import "GWP2PClient.h"
/**
邮箱加密方式
*/
typedef enum GWP2PAlarmEmailEncryptType {
GWP2PAlarmEmailEncryptTypeNone, /**< 不加密 */
GWP2PAlarmEmailEncryptTypeSSL, /**< SSL加密 */
GWP2PAlarmEmailEncryptTypeTLS, /**< TLS加密 */
}GWP2PAlarmEmailEncryptType;
/**
解除报警推送账号的操作类型
*/
typedef enum GWUnbindAlarmAccountOperationType {
GWUnbindAlarmAccountOperationTypeUnbindAlarmAccount = 0,/**< 解除设备报警推送账号(当前登陆服务器的) */
GWUnbindAlarmAccountOperationTypeStopDoorBellPush = 1,/**< 停止门铃推送至当前账号(当前登陆服务器的) */
}GWUnbindAlarmAccountOperationType;
/**
@brief 处理设备报警的分类
*/
@interface GWP2PClient (Alarm)
#pragma mark - 设备报警设置
/**
设置设备移动侦测状态
获取设备移动侦测状态请调 getMultipledeviceStatusWithDeviceID:password:completionBlock:
@param motionDetetionOn 移动侦测是否打开
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)setDeviceMotionDetetionState:(BOOL)motionDetetionOn
withDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
设置设备移动侦测灵敏度
获取设备移动侦测灵敏度请调 getMultipledeviceStatusWithDeviceID:password:completionBlock:
@param motionDetetionSensitivity 移动侦测灵敏度:0-6,数值越大,灵敏度越高
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)setDeviceMotionDetetionSensitivity:(NSUInteger)motionDetetionSensitivity
withDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
设置设备物件追踪状态
获取设备物件追踪状态请调 getMultipledeviceStatusWithDeviceID:password:completionBlock:
@param objectTrackingOn 物件追踪是否打开
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)setDeviceObjectTrackingState:(BOOL)objectTrackingOn
withDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
设置设备蜂鸣器状态
获取设备蜂鸣器状态请调 getMultipledeviceStatusWithDeviceID:password:completionBlock:
@param buzzTime 蜂鸣时长,单位为分,可设数字有:0(关闭), 1, 2, 3
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)setDeviceBuzzerState:(NSUInteger)buzzTime
withDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
设置设备人体红外开关状态
获取设备人体红外开关状态请调 getMultipledeviceStatusWithDeviceID:password:completionBlock:
如果获取不到设备人体红外开关状态,调用些方法无效
@param humanInfraredOn 人体红外是否打开
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)setDeviceHumanInfraredState:(BOOL)humanInfraredOn
withDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
设置设备有线报警输入开关状态
获取设备蜂有线报警输入开关状态请调 getMultipledeviceStatusWithDeviceID:password:completionBlock:
如果获取不到设备有线报警输入开关状态,调用些方法无效
@param wiredAlarmInputOn 有线报警输入是否打开
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)setDeviceWiredAlarmInputState:(BOOL)wiredAlarmInputOn
withDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
设置设备有线报警输出开关状态
获取设备蜂有线报警输出开关状态请调 getMultipledeviceStatusWithDeviceID:password:completionBlock:
如果获取不到设备有线报警输出开关状态,调用些方法无效
@param wiredAlarmOutputOn 有线报警输出是否打开
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)setDeviceWiredAlarmOutputState:(BOOL)wiredAlarmOutputOn
withDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
获取设备报警时推送的绑定账号
completionBlock返回字典:
@"account count" 绑定账号的个数
@"account maxCount" 设备最大可绑定账号的个数
@"accounts" 绑定的账号,类型为 NSArray<NSString *> *
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)getDeviceBindedAlarmAccountWithDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
设置设备报警时推送的绑定账号
@param accounts 要绑定的账号数组(多个账号),参数为字符串,绑定成功后覆盖原来的数据。账号为登陆技威web服务器后返回的经过 & 0x7fffffff 位处理的数字账号,在yoosee上显示的以0开头的账号
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)setDeviceBindedAlarmAccounts:(NSArray<NSString *> *)accounts
withDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
获取设备报警邮箱
completionBlock字典返回:
@"email" 绑定的邮箱,类型:NSString
@"email is verified" 邮箱是否验证,类型:BOOL YES表示未验证,NO表示已验证
@"surport SMTP" 设备是否支持SMTP邮箱,类型:BOOL
@"password is right" SMTP邮箱密码是否正确,类型:BOOL
@"SMTP server" SMTP服务器,类型:NSString
@"SMTP port" SMTP端口,类型:NSNumber
@"SMTP user" SMTP用户,类型:NSString
@"SMTP password" SMTP密码,类型:NSString
@"encrypt type" 加密类型,类型:GWP2PAlarmEmailEncryptType
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)getDeviceAlarmEmailWithDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
设置设备报警邮箱,设置后返回的数据不准确,再调获取接口获取邮箱数据
老设备,不支持SMTP,是否支持SMTP在获取报警邮箱时得到,则用技威服务器的邮箱发送邮件至设置邮箱
新设备,支持SMTP,报警时,若完整地设置邮箱(SMTP及密码都通过验证),用设置的邮箱发送邮件至设置的邮箱自己
一些常用的邮箱SMTP服务器与端口号:
腾讯: smtp.qq.com 465
yahoo: smtp.mail.yahoo.com 465
google: 173.194.193.108 465, 173.194.67.108 465, smtp.gmail.com 465
189: smtp.189.cn 465
hotEmail: smtp.live.com 465
网易: smtp.163.com 25
新浪: smtp.sina.com.cn 465
completionBlock返回:获取后的邮箱密码等数据可能不准确,可参考的是邮箱是否验证成功,SMTP邮箱密码是否正确
@"success" BOOL类型,操作是否成功
@"email" 绑定的邮箱,类型:NSString
@"email is verified" 邮箱是否验证,类型:NSNumber 1表示未验证,0表示已验证,这个与其它逻辑相反,要注意
@"surport SMTP" 设备是否支持SMTP邮箱,类型:NSNumber @(BOOL)
@"password is right" SMTP邮箱密码是否正确,类型:NSNumber @(BOOL)
@param alarmEmail 报警邮箱地址, 解绑时要传 @"0",否则解绑不成功
@param deviceID 设备ID
@param devicePassword 设备密码
@param isSupportSMTP 设备是否支持SMTP邮箱:获取报警邮箱时可获取此参数;若设备支持,必须传入SMTP的服务器、端口、用户名、用户密码才能绑定邮箱,此参数也必须为YES
@param SMTPServer SMTP服务器
@param SMTPPort SMTP服务器端口
@param SMTPUser SMTP用户名:设备报警时用来发送邮件
@param SMTPPassword SMTP密码 或者 SMTP授权码
@param encryptType 加密类型
@param emailTile 邮件主题:设备报警时发送邮件的标题
@param emailContent 邮件内容:设备报警时发送邮件的内容
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)setDeviceAlarmEmail:(NSString *)alarmEmail
withDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
isSupportSMTP:(BOOL)isSupportSMTP
SMTPServer:(NSString *)SMTPServer
SMTPPort:(NSUInteger)SMTPPort
SMTPUser:(NSString *)SMTPUser
SMTPPassword:(NSString *)SMTPPassword
encryptType:(GWP2PAlarmEmailEncryptType)encryptType
emailTitle:(NSString *)emailTile
emailContent:(NSString *)emailContent
completionBlock:(CompletionBlock)completionBlock;
#pragma mark - 设备报警后操作
/**
设备报警时,关闭蜂鸣器
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)closeBuzzerWhenDeviceIsAlarmingWithDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
设备报警时解除关联的当前报警账号
@param deviceID 设备ID
@param devicePassword 设备密码
@param operationType 操作类型,有
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)unbindDeviceCurrentAlarmAccountWithDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
operationType:(GWUnbindAlarmAccountOperationType)operationType
completionBlock:(CompletionBlock)completionBlock;
@end
@@ -0,0 +1,128 @@
//
/** @file GWP2PClient+Defense.h @brief 处理布撤防和预置位的分类 */
// P2PSDK
//
// Created by apple on 17/3/2.
// Copyright © 2017年 gwell. All rights reserved.
//
#import "GWP2PClient.h"
/**
操作预置位方式
*/
typedef enum GWPresetPositionOperationType {
GWPresetPositionOperationTypeTurnTo,/**< 转向某预置位 */
GWPresetPositionOperationTypeSet,/**< 在当前设备摄像头角度下增加给定索引的预置位,若给定索引设置过预置位,则覆盖原信息 */
GWPresetPositionOperationTypeQuery,/**< 查看所有预置位信息 */
GWPresetPositionOperationTypeDelete,/**< 删除某索引的预置位 */
} GWPresetPositionOperationType;
/**
@brief 定时布防模型,一个 GWSheduleDefencesModel 对象对应一条定时布防数据
*/
@interface GWSheduleDefencesModel : NSObject
@property (nonatomic, assign) BOOL on; /**< 此定时布防是否打开 */
@property (nonatomic, assign) NSUInteger index; /**< 此布防在设备的位置,一个设备最多五组布防 */
@property (nonatomic, assign) NSUInteger startTime_Hour; /**< 开始于多少小时 */
@property (nonatomic, assign) NSUInteger startTime_Minute; /**< 开始于多少分 */
@property (nonatomic, assign) NSUInteger endTime_Hour; /**< 结束于多少小时 */
@property (nonatomic, assign) NSUInteger endTime_Minute; /**< 结束于多少分 */
//每天的开关状态
@property (nonatomic, assign) BOOL mondayOn; /**< 周一是否打开 */
@property (nonatomic, assign) BOOL tuesdayOn; /**< 周二是否打开 */
@property (nonatomic, assign) BOOL wednesdayOn; /**< 周三是否打开 */
@property (nonatomic, assign) BOOL thursdayOn; /**< 周四是否打开 */
@property (nonatomic, assign) BOOL fridayOn; /**< 周五是否打开 */
@property (nonatomic, assign) BOOL saturdayOn; /**< 周六是否打开 */
@property (nonatomic, assign) BOOL sundayOn; /**< 周日是否打开 */
@end
/**
@brief 处理布撤防和预置位的分类
*/
@interface GWP2PClient (Defense)
#pragma mark - 普通布撤防操作
/**
设置设备布防状态
普通布防只是布防与不布防的操作,定时布防有很多数据,参见 GWSheduleDefencesModel
@param defenceStateOn 布防的开关状态
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)setDeviceDefenceState:(BOOL)defenceStateOn
withDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
#pragma mark - 定时布防操作
/**
获取设备定时布撤防数据:返回的字典中 @"schedule defences" 键对应一个 包含 GWSheduleDefencesModel 的数组
这个接口可判断设备是否支持定时布防,设置接口判断不了
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)getDeviceSheduleDefenceDataWithDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
设置设备定时布撤防:每一次设置都会覆盖原来的布防记录,且index自动从0开始排
若接口调用不成功,请先调获取定时布防数据接口判断设备是否支持,如果设备不支持,只会返回连接失败
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)setDeviceSheduleDefenceData:(NSArray<GWSheduleDefencesModel *> *)sheduleDefencesArray
withDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
#pragma mark 预置位操作
/**
操作设备预置位
功能介绍:摇头机转动位置,可以让用户设置几个特定的点,记住摇头机的位置(如门、窗或者其他位置),设置好之后,发转向预置位指令,摇头机将转动到记住的位置
获取时completionBlock返回信息 :
@"preset position indexes" 键对应一个保存已有预置位索引值的数组 NSMutableArray<NSNumber *> *
indexesArray传值:
查看时indexesArray传nil或空数组。
转向某预置位时传一个元素,传多个取第一个,传nil或空数组取索引值为0的预置位。
添加预置位时传一个元素,一次只能添加一个预置位,传多个取第一个元素,传nil或空数组取索引值为0的预置位。
删除时传一个或多个元素,一次能删除多个预置位。不能传空数组或nil
@param operationType GWPresetPositionOperationType枚举值
@param indexesArray 保存预置位索引值的数组:索引值范围为0-4,一个设备最多5个预置位,索引值不能重复如@[@(0), @(3)]。
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)operateDevicePresetPositionWithOperationType:(GWPresetPositionOperationType)operationType
presetPositionIndexArray:(NSArray<NSNumber *> *)indexesArray
deviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
@end
@@ -0,0 +1,556 @@
//
/** @file GWP2PClient+DeviceInfomation.h @brief 该文件为P2PClient获取和设置设备状态信息的分类 */
// P2PSDK
//
// Created by apple on 17/2/24.
// Copyright © 2017年 gwell. All rights reserved.
//
#import "GWP2PClient.h"
/**
设备网络连接类型
*/
typedef NS_ENUM(NSUInteger, GWDeviceNetworkType) {
GWDeviceNetworkTypeWired,/**< 有线 */
GWDeviceNetworkTypeWifi, /**< wifi */
};
/**
设备的RTSP密码模式
*/
typedef NS_ENUM(NSUInteger, GWDeviceRTSPPasswordMode) {
GWDeviceRTSPPasswordModeClosed = 0, /**< RTSP功能关闭 */
GWDeviceRTSPPasswordModeOpenAndPasswordNeedless = 1, /**< RTSP功能打开,但不需要密码 */
GWDeviceRTSPPasswordModeOpenAndPasswordNeeded = 2, /**< RTSP功能打开,并需要密码 */
GWDeviceRTSPPasswordModeUnSetted = 3, /**< 设备支持RTSP功能,但没有设置过模式,设备初始化后会返回此值,如果设备返回此值,要调确认RTSP接口,再进行RTSP密码的设置,模式的修改等操作 */
GWDeviceRTSPPasswordModeNOSuchFile = 4, /**< 设备支持RTSP功能,但没有支持文件,也要判断为不支持 */
GWDeviceRTSPPasswordModeUnSurpurted = 999, /**< 设备不支持RTSP功能,设备模型初始化时附此值,方便后面判断 */
};
/**
@brief 该分类可获取和设置设备各种状态信息
*/
@interface GWP2PClient (DeviceInfomation)
#pragma mark - 获取设备状态
/**
获取多项设备状态:以下key返回结果里没有时表示设备不支持该功能
completionBlock返回:
@"defence state" (布防状态): 类型:BOOL (YES 布防 , NO 撤防)
@"buzzer state" (蜂鸣器蜂鸣时长): 0 off , 1 2 3 min 蜂鸣时长 类型:NSNumber
@"motion detect state"(移动侦测状态): 类型:BOOL (NO off; YES on)
@"record type" (录像类型) : manual; alarm; schedule 返回字典, record type 键对应 GWP2PRecordType 枚举
@"manually record state" (手动录像开关) : 类型:BOOL (NO off; YES on)
@"planed record time" (计划录像时间):返回字典,对应的值为 NSNumber类型,保存开始时间的时分,结束时间的时分四个键值对(24小时制)
@"video format" (视频格式) 返回字符串 : NTSC , PAL 返回字典:
@"alarm record time" (报警录像时间)0 表示1分钟, 1 表示2分钟 2 表示3分钟
@"net type" (网络类型) : 0 有线; 1 wifi;
@"volume" (音量): 0-9整数
@"auto update" (自动升级): NO off; YES on
@"body infrared state" (人体红外状态) : NO off; YES on
@"wired alarm input" (有线报警输入状态) : NO off; YES on
@"wired alarm output" (有线报警输出状态) : NO off; YES on
@"time zone" (时区) : @(0-24)
@"password" (用户密码)
@"image reverse state" (图像倒转状态)返回BOOL值 : @(NO) 非倒转; @(YES) 是倒转
@"prerecord state" (预录像状态) : NO off YES on
@"motion detect sensityvity" (移动侦测灵敏度) : 0-6 数值越大,灵敏度越高 -1表示返回数值有误
@"lamp state" (灯光控制状态) : NO off YES on
@"visitor password" (访客密码) : 由非0开头的数字组成
@"focus zoom" (变焦 变倍) : 0 都没有; 1 只有变倍; 2 只有变焦; 3 变倍变焦都有
@"AP Mode" AP模式) : 0 不支持; 1 支持(mode!=ap); 2 支持(mode=ap)
@"type" (设备主类型): GWDeviceType 类型,(如IPC、NPC...) (设备返回的主类型不准)
@"subtype" (设备子类型): GWDeviceSubtype 类型,(如30只支持86831支持868+情景模式;32支持868+情景模式+分享)
@"preset position suppurted" (是否支持预置位): @(BOOL) NO 不支持; YES 支持
@"RTSP password mode" (RTSP密码模式,此项有值说明支持RTSP模式,没有值说明设备不支持) @(GWDeviceRTSPPasswordMode)
@"confirm RTSP password mode" (需不需要确认RTSP密码模式,需要时,调确认RTSP密码模式接口后才能正常配置RTSP密码)
@"white light suppurted" (是否支持白光灯功能) @(BOOL)
@"white light on" (白光灯灯关是否打开) @(BOOL)
@"sound control suppurted" (是否支持声音控制功能) @(BOOL)
@"white light brightness" (白光灯亮度) @(int)
@"433 doorbell suppurted" (是否支持433门铃传感器) @(BOOL)
@"object tracking" (物件追踪,字典里没有表示不支持) @(BOOL)
@param deviceID 设备ID
@param password 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)getMultipleDeviceStatusWithDeviceID:(NSString *)deviceID
password:(NSString *)password
completionBlock:(CompletionBlock)completionBlock;
/**
获取设备信息
completionBlock 返回字典对应的key:
@"firmware version" 固件版本
@"uBoot uersion" uBoot版本
@"kernel version" 内核版本
@"system version" 系统版本
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)getDeviceInfomationWithDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
#pragma mark - 下载文件
/**
从设备下载文件,下载结果在 GWP2PClientProtocol 的方法 client:didDownloadFile:withFilePath:deviceID: 中
@param deviceID 设备ID
@param devicePassword 设备密码
@param remoteFilePath 远程文件路径,一般由设备返回
@param localFilePath 下载后文件在本地的保存路径,文件在沙盒中的保存路径(包括文件名及文件扩展名),下载成功后文件直接保存在此路径
@return 下载是否开始
*/
- (BOOL)downloadFileWithDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
remoteFilePath:(NSString *)remoteFilePath
localFilePath:(NSString *)localFilePath;
/**
从设备下载报警时的截图, 下载结果在 GWP2PClientProtocol 的 client:didDownloadFile:withFilePath:deviceID:result: 方法中回调
@param deviceID 设备ID
@param devicePassword 设备密码
@param pictureNumber 报警时截图的数量,设备推送报警时,会推送此数据
@param toDownloadIndex 要下载的图片索引, <= (pictureNumber - 1)
@param remoteFilePath 图片的路径,设备推送报警时,会推送此数据
@param localFilePath 下载后图片在本地的保存路径,图片在沙盒中的保存路径(包括图片名及图片扩展名),下载成功后文件直接保存在此路径
@return 下载是否开始
*/
- (BOOL)downloadAlarmPictureWithDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
pictureNumber:(NSUInteger)pictureNumber
toDownloadIndex:(NSUInteger)toDownloadIndex
remoteFilePath:(NSString *)remoteFilePath
localFilePath:(NSString *)localFilePath;
#pragma mark - 网络
/**
获取设备搜索到的Wifi列表
获取网络类型请调 getMultipledeviceStatusWithDeviceID:password:completionBlock:
completionBlock返回字典:
@"wifi count" : wifi数目
@"current wifi index" : 正在使用的wifi索引值 索引值从0开始
@"wifi list" : wifi列表数组,数组内一个字典对应一个wifi的信息(wifi名,是否加密,wifi强度,加密类型) @[@{@"wifi name" : @"wifi名", @"has encrypted" : @(YES), @"wifi strength" : @"wifi强度"}, @"encrypted type" : @(0)];]
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)getDeviceWifiListWithDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
设置设备网络连接类型,即在有线和wifi之间切换
@param networkType 网络类型
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)setDeviceNetworkType:(GWDeviceNetworkType)networkType
withDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
不再使用
连网模式下设置设备当前Wifi,设置后设备会连接到设置的wifi,此接口只支持WPA加密的wifi
@param deviceID 设备ID
@param devicePassword 设备密码
@param encrypted wifi是否加密(可由获取到的wifi列表得到),传获取wifi列表字典中的@"has encrypted"对应的值
@param wifiName wifi名
@param wifiPassword wifi密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)setDeviceWifiInNetworkModeWithDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
wifiHasBeEncrypted:(BOOL)encrypted
wifiName:(NSString *)wifiName
wifiPassword:(NSString *)wifiPassword
completionBlock:(CompletionBlock)completionBlock DEPRECATED_ATTRIBUTE;
/**
连网模式下设置设备当前Wifi,设置后设备会连接到设置的wifi,新的接口,老的接口只支持WPA加密的wifi,此接口支持WEP加密和WPA加密的wifi
@param deviceID 设备ID
@param devicePassword 设备密码
@param encryptedType wifi加密类型(可由获取到的wifi列表得到),传获取wifi列表字典中的@"encrypted type"对应的值
@param wifiName wifi名
@param wifiPassword wifi密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)setDeviceWifiInNetworkModeWithDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
wifiEncryptedType:(NSInteger)encryptedType
wifiName:(NSString *)wifiName
wifiPassword:(NSString *)wifiPassword
completionBlock:(CompletionBlock)completionBlock;
#pragma mark - 时间时区
/**
获取设备时间 : 返回 年 月 日 时 分 的数值, 不是NSDate,避免时区出错
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)getDeviceTimeWithDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
设置设备时间
@param date 要设置的时间
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)setDeviceTime:(NSDate *)date
withDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
设置设备时区
获取时区请调 getMultipledeviceStatusWithDeviceID:password:completionBlock:
@param timeZone 要设置的时区,可设置如下数字:-11, -10, -9, -8, -7, -6, -5, -4, -3.5, -3, -2, -1, 0, 1, 2, 3, 3.5, 4, 4.5, 5, 5.5, 6, 6.5, 7, 8, 9, 9.5, 10, 11, 12
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)setDeviceTimeZone:(float)timeZone
withDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
#pragma mark - 安全
#pragma mark 密码
/**
设置初始密码,重置设备后,设备没有密码(管理员)时调用,如果有密码,密码一般为123,具体请查看设备说明书
必须保证手机与设备在同一局域网中,否则回调只会收到参数错误. 这一接口在发指令时一定要确保手机与设备在同一局域网中,指令将deviceID转成4位设备IP的最后一位,若不在同一局域网,获取不到设备IP,指令不会成功
@param initialPassword 初始密码,必须为包含字母、数字、其它字符中两种的6~30位的字符串
@param deviceID 设备ID,直接传设备ID,内部处理成IP地址,也可以传4位IP的最后一位数字
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)setDeviceInitialPassword:(NSString *)initialPassword
withDeviceID:(NSString *)deviceID
completionBlock:(CompletionBlock)completionBlock;
/**
设置管理员密码,设备已经有密码(管理员)时调用
@param oldPassword 老的管理员密码,可能为简单的初始密码,如123
@param newPassword 新的管理员密码,必须为包含字母、数字、其它字符中两种的6~30位的字符串,否则会返回参数错误
@param deviceID 设备ID
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)setDeviceAdministratorPasswordWithOldPassword:(NSString *)oldPassword
newPassword:(NSString *)newPassword
deviceID:(NSString *)deviceID
completionBlock:(CompletionBlock)completionBlock;
/**
设置访客密码,有管理员密码时调用
@param newVisitorPassword 新的访客密码(必须为非零开头的小于等于9位的数字)
@param administratorPassword 管理员密码
@param deviceID 设备ID
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)setDeviceVisitorPassword:(NSString *)newVisitorPassword
withAdministratorPassword:(NSString *)administratorPassword
deviceID:(NSString *)deviceID
completionBlock:(CompletionBlock)completionBlock;
#pragma mark RTSP密码
/**
设置RTSP密码
不能获取密码
@param rtspPassword 要设置的RTSP密码
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)setDeviceRTSPPassword:(NSString *)rtspPassword
withDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
设置RTSP密码模式
获取RTSP模式请调 getMultipledeviceStatusWithDeviceID:password:completionBlock:
@param rtspPasswordMode rtsp密码模式
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)setDeviceRTSPPasswordMode:(GWDeviceRTSPPasswordMode)rtspPasswordMode
withDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
确认RTSP密码模式
新设备或查询RTSP密码模式为 GWDeviceRTSPPasswordModeUnSetted == 3 时,需要向设备发此指令,告诉设备开启RTSP密码的配置功能,之后才能正常设置RTSP密码
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)confirmDeviceRTSPPasswordModeWithDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
#pragma mark - 更新
/**
设置自动更新状态
如果获取不到设备的自动更新状态,表明设备不支持,调此方法是收不到回调数据,只会超时
获取自动更新状态请调 getMultipledeviceStatusWithDeviceID:password:completionBlock:
@param isAutoUpdate 是否自动更新
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)setDeviceAutoUpdateState:(BOOL)isAutoUpdate
withDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
检查设备是否可更新
completionBlock返回字典对应的键值:
@"current version" 当前固件版本
@"update version" 待更新的版本
@"can update" (是否可更新):对应值为 NSNumber 包装的 BOOL 类型
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)checkDeviceUpdateWithDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
执行设备更新
执行更新后下载进度在 GWP2PClientProtocol 协议的 [GWP2PClientProtocol client:updateProgress:resultCode:ofDeviceID:]方法中进行监听
completionBlock返回字典对应的键值:
@"has begin update" (是否开始更新):对应值为 NSNumber 包装的 BOOL 类型
@"update progress" (更新进度):对应值为 NSNumber 包装的 int 类型
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)performUpdateWithDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
取消设备更新(此命令收不到设备回调)
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)cancelUpdateWithDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
#pragma mark - 获取设备分辨率,IP地址,MAC(网卡)地址
/**
获取设备分辨率,IP地址,MAC(网卡)地址
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)getDeviceResolutionAndIpAndMacAddressWithDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
#pragma mark - 获取用户及设备列表在线状态等信息
/**
获取好友用户及设备列表在线状态等信息,此指令不能同时发两条,第二条要等第一条回调后再发,网络超时为25s
completionBlock返回字典数据结构:
@{ @"result" : @(NO),
@"description" : @"success",
@"操作描述" : @"获取好友用户及设备列表在线状态等信息",
@"status" : @[ @{//一个字典对应一个设备或一个好友用户信息
@"deviceID" : @"设备ID或好友用户ID",
@"defence flag" : @(-1),//布防状态获取的时间标识,此值越大,表示获取的时间越晚,用于判断是否要刷新布防状态. -1表示不支持或设备不在线
@"defence state" : @(-1),//-1表示不支持或设备不在线
@"online state" : @(YES),//接口一定支持
@"subtype" : @(-1)//-1表示不支持或设备不在线
}
]
}
@param deviceIDsArray 设备ID数组,如果是用户(GWNet登陆的用户)ID,请在数字前加0,用于区分是设备ID还是用户ID
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)getDevicesOrUersStatusWithDeviceIDs:(NSArray<NSString *> *)deviceIDsArray
completionBlock:(CompletionBlock)completionBlock;
#pragma mark - NVR设备
/**
获取设备NVR信息
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)getDeviceNVRInfomationWithDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
#pragma mark - 更新设备id
/**
更新设备id
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)updateDeviceIdWithDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
#pragma mark - 获取当前全景相机的配置信息
/**
获取当前全景相机的配置信息
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
-(void)getFisheyeDeviceInfoWithDeviceId:(NSString*)deviceID
devicePassword:(NSString*)devicePassword
completionBlock:(CompletionBlock)completionBlock;
#pragma mark - 恢复出厂设置
/**
恢复出厂设置
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)setDeviceRestoreFactorySettingsWithDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
#pragma mark -自动变焦
/**
自动变焦 设置(set)变焦镜头马达当前位置的方法声明
@param deviceID 设备ID
@param password 设备密码
@param params 对接参数
@param completionBlock 与设备交互完成后的回调Block
*/
-(void)setAutoZoomWithId:(NSString*)deviceID
password:(NSString*)password
params:(int)params
completionBlock:(CompletionBlock)completionBlock;
/**
自动变焦 获取变焦镜头马达当前位置方法声明
@param deviceID 设备ID
@param password 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
-(void)getAutoZoomWithId:(NSString*)deviceID
password:(NSString*)password
completionBlock:(CompletionBlock)completionBlock;
@end
@@ -0,0 +1,77 @@
//
// GWP2PClient+GarageLight.h
// GWP2P
//
// Created by duxiaoyan on 2018/6/26.
// Copyright © 2018年 apple. All rights reserved.
//
#import <GWP2P/GWP2P.h>
@interface GWP2PClient (GarageLight)
/**
获取车库灯状态
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)getGarageLightStatusWithDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
设置车库灯手动开关白光灯
@param on 车库灯手动开关白光灯,1开;0关
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)setGarageLightWhiteLightOn:(BOOL)on
deviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
设置车库灯白光灯控制模式
@param mode 车库灯白光灯控制模式,0—关闭;1—晚上开灯;2—晚上+PIR触发开灯;3—PIR开灯
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)setGarageLightWhiteLightMode:(NSInteger)mode
deviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
设置车库灯驱逐按钮
@param on 驱逐按钮开关,1开;0关
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)setGarageLightExpelOn:(BOOL)on
DeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
设置车库灯项目PIR触发亮灯时间
@param lightUpTime 车库灯项目PIR触发亮灯时间
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)setGarageLightPirLightUpTime:(NSUInteger)lightUpTime
deviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
@end
@@ -0,0 +1,48 @@
//
// GWP2PClient+HXVision.h
// GWP2P
//
// Created by duxiaoyan on 2018/7/27.
// Copyright © 2018年 apple. All rights reserved.
//
#import <GWP2P/GWP2P.h>
#import <Foundation/Foundation.h>
#import "GWP2PPlayerDefine.h"
#import <UIKit/UIKit.h>
/**
操作预置位方式
*/
typedef enum GWHXVisonPreseSubcmdType {
GWHXVisonPreseSubcmdTypeAdd,//增加
GWHXVisonPreseSubcmdTypeDelete,//删除
GWHXVisonPreseSubcmdTypeGoTo,//转向
GWHXVisonPreseSubcmdTypeGet,//获取
} GWHXVisonPreseSubcmdType;
@interface GWP2PClient (HXVision)
#pragma mark 汇讯视通预置位操作
/**
操作设备预置位
@param subcmdType GWHXVisonPreseSubcmdType枚举值
@param index 预置位,add、goto传0-4get传0delete传bit0-bit4对应值,例如5个预置位都删除,传31
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)operateHXVisonDevicePresetWithSubCmdType:(GWHXVisonPreseSubcmdType)subcmdType
presetIndex:(NSInteger)index
deviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
-(void)hxVison3DGestureCommand:(GWP2PHXVison3DGestureZoomType)zoomType
withDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
point:(CGPoint)point
size:(CGSize)size;
- (void)sendHXCommandTypeandOption:(int)option;
@end
@@ -0,0 +1,117 @@
//
/** @file GWP2PClient+PictureAndSound.h @brief 处理图像和声音的分类 */
// P2PSDK
//
// Created by apple on 17/2/28.
// Copyright © 2017年 gwell. All rights reserved.
//
#import "GWP2PClient.h"
/**
视频制式枚举
*/
typedef enum GWP2PSetVideoFormat{
GWP2PSetVideoFormatNTSC,
GWP2PSetVideoFormatPAL
}GWP2PSetVideoFormat;
/**
彩色模式
*/
typedef enum GWP2PColorMode{
GWP2PColorModeBlackWhite,/**< 黑白色/开启红外灯 */
GWP2PColorModeColorful,/**< 彩色/关闭红外灯 */
}GWP2PColorMode;
/**
@brief 处理图像声音的分类
*/
@interface GWP2PClient (PictureAndSound)
/**
设置设备视频制式: NTSC , PAL 两种
获取视频制式请调 getMultipledeviceStatusWithDeviceID:password:completionBlock:
@param videoFormat 视频制式的枚举
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)setDeviceVideoFormat:(GWP2PSetVideoFormat)videoFormat
withDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
设置设备音量
获取音量请调 getMultipledeviceStatusWithDeviceID:password:completionBlock:
@param volume 0-9的整数
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)setDeviceVolume:(NSUInteger)volume
withDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
设置图像倒转状态
获取图像倒转状态请调 getMultipledeviceStatusWithDeviceID:password:completionBlock:
@param isImageReversed 图像是否倒转
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)setDeviceImageReverseState:(BOOL)isImageReversed
withDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
获取设备指示灯状态
返回 BOOL值, 指示灯是否打开
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)getDeviceIndicatorLightStatusWithDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
设置设备指示灯状态
@param on 指示灯开头状态
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)setDeviceIndicatorLightStatus:(BOOL)on
withDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
设置设备色彩模式
@param colorMode 色彩模式
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)setDeviceColorMode:(GWP2PColorMode)colorMode
withDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
@end
+226
View File
@@ -0,0 +1,226 @@
//
/** @file GWP2PClient+Record.h @brief 处理设备录制的分类 */
// P2PSDK
//
// Created by apple on 17/3/6.
// Copyright © 2017年 gwell. All rights reserved.
//
#import "GWP2PClient.h"
/**
录像类型
*/
typedef enum GWP2PRecordType{
GWP2PRecordTypeManual,/**< 手动 */
GWP2PRecordTypeAlarm,/**< 报警时录像 */
GWP2PRecordTypeSchedule,/**< 定时录像 */
}GWP2PRecordType;
/**
录像质量
*/
typedef enum GWP2PRecordDefinition {
GWP2PRecordDefinitionTopSpeed, /**< 极速*/
GWP2PRecordDefinitionFluent, /**< 流畅 */
GWP2PRecordDefinitionStandardDefinition, /**< 标清 */
GWP2PRecordDefinitionHighDefinition, /**< 高清 */
GWP2PRecordDefinitionSuperDefinition, /**< 超清 */
}GWP2PRecordDefinition;
/**
@brief 回放文件模型
*/
@interface GWPlaybackFileModel : NSObject
@property (nonatomic, assign) NSInteger discID; /**< 文件在存储设备的标识 播放时用 */
@property (nonatomic, assign) NSInteger year; /**< 文件时间 年 */
@property (nonatomic, assign) NSInteger month; /**< 文件时间 月 */
@property (nonatomic, assign) NSInteger day; /**< 文件时间 日 */
@property (nonatomic, assign) NSInteger hour; /**< 文件时间 时 */
@property (nonatomic, assign) NSInteger minute; /**< 文件时间 分 */
@property (nonatomic, assign) NSInteger second; /**< 文件时间 秒 */
@property (nonatomic, strong) NSDate *date;/**< 记录上面的时间 */
@property (nonatomic, copy) NSString *cType; /**< 文件类型 一个字符 */
@property (nonatomic, assign) NSInteger time; /**< 文件播放时长 若不支持,则为-1 */
@property (nonatomic, assign) NSInteger month_yoosee; //yoosee专用
@end
/**
@brief 处理设备录制的分类
*/
@interface GWP2PClient (Record)
#pragma mark - 录像设置
/**
获取设备SD卡信息
completionBlock返回:
@"storage exist" (存储是否存在,一般为SD卡): BOOL类型
@"storage count" (存储单元数量) NSNumber类型
@"total storage" (总存储空间) NSNumber类型
@"free storage" (可用空间) NSNumber类型
@"unit" : 返回空间数据的单位 M(兆)
@"SD Card ID" : SD卡ID,用于后面对SD卡操作,如格式化
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)getDeviceStorageInfomationWithDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
设置设备录像类型
获取设备录像类型请调 getMultipledeviceStatusWithDeviceID:password:completionBlock:
@param recordType 录像类型
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)setDeviceRecordType:(GWP2PRecordType)recordType
withDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
设置设备预录像开关状态
获取设备预录像开关状态请调 getMultipledeviceStatusWithDeviceID:password:completionBlock:
@param prerecordOn 预录像是否打开
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)setDevicePrerecordState:(BOOL)prerecordOn
withDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
设置设备报警后的录像时间
获取设备报警录像时间请调 getMultipledeviceStatusWithDeviceID:password:completionBlock:
@param alarmRecordTime 报警录像时间,单位:分 范围(1 ,2,3)
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)setDeviceAlarmRecordTime:(NSUInteger)alarmRecordTime
withDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
设置设备计划录像时间
获取设备报警录像时间请调 getMultipledeviceStatusWithDeviceID:password:completionBlock:
@param fromHour 录像时间开始于几时 (24小时制)
@param fromMinute 录像时间开始于几分
@param toHour 录像时间结束于几时 (24小时制)
@param toMinute 录像时间结束于几分
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)setDevicePlanedRecordTimeWithFromHour:(NSUInteger)fromHour
fromMinute:(NSUInteger)fromMinute
toHour:(NSUInteger)toHour
toMinute:(NSUInteger)toMinute
deviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
设置手动录像开关状态:没有SD卡时,设置无效
获取手动录像开关状态请调 getMultipledeviceStatusWithDeviceID:password:completionBlock:
@param manuallyRecordOn 手动录像是否打开
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)setDeviceManuallyRecordState:(BOOL)manuallyRecordOn
withDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
格式化设备SD卡
@param SDCardID SD卡ID,获取SD卡信息时得到
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)formatDeviceSDCard:(NSUInteger)SDCardID
withDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
获取录像质量
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)getDeviceRecordDefinitionWithDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
设置录像质量
@param recordDefinition 枚举值
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)setDeviceRecordDefinition:(GWP2PRecordDefinition)recordDefinition
withDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
#pragma mark - 获取回话文件
/**
获取设备回放文件
一次只能获取64个文件,如果给定的时间差大于64个文件,会分多次获取,一次返回多次获取文件,为保证每次数据都能正常返回,若无特殊要求,两次给定的时间差尽量小点
completionBlock返回字典:
@"files" 键对应一个 NSMutableArray<GWPlaybackFileModel *> *
@param deviceID 设备ID
@param devicePassword 设备密码
@param startDate 获取的文件早于给定的时间,如果传nil,会默认为1970-1-1 00:00
@param endDate 获取的文件晚于给定的时间,如果传nil,会默认为2050-1-1 00:00
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)getDevicePlaybackFilesWithDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
startDate:(NSDate *)startDate
endDate:(NSDate *)endDate
completionBlock:(CompletionBlock)completionBlock;
@end
@@ -0,0 +1,242 @@
//
/** @file GWP2PClient+SceneMode.h @brief 处理情景模式的分类 */
// P2PSDK
//
// Created by apple on 17/3/6.
// Copyright © 2017年 gwell. All rights reserved.
//
#import "GWP2PClient.h"
/**
情景模式
*/
typedef NS_ENUM(NSUInteger, GWP2PSceneMode) {
GWP2PSceneModeAtHome = 1,/**< 在家 */
GWP2PSceneModeGoOut, /**< 外出 */
GWP2PSceneModeSleep, /**< 睡眠 */
};
/**
@brief 情景模式,一个 GWSceneModeModel 对象对应一条情景模(定时组、防防护计划)式数据
*/
@interface GWSceneModeModel : NSObject
@property (nonatomic, assign) BOOL on; /**< 此情景模式是否打开 */
@property (nonatomic, assign) NSUInteger index; /**< 此情景模式在设备的位置, 一个设备最多6个 index为0-5 */
@property (nonatomic, assign) NSUInteger startTime_Hour; /**< 开始于多少小时 */
@property (nonatomic, assign) NSUInteger startTime_Minute; /**< 开始于多少分 */
@property (nonatomic, assign) GWP2PSceneMode workMode; /**< 工作模式 */
//每天的开关状态
@property (nonatomic, assign) BOOL mondayOn; /**< 周一是否打开 */
@property (nonatomic, assign) BOOL tuesdayOn; /**< 周二是否打开 */
@property (nonatomic, assign) BOOL wednesdayOn; /**< 周三是否打开 */
@property (nonatomic, assign) BOOL thursdayOn; /**< 周四是否打开 */
@property (nonatomic, assign) BOOL fridayOn; /**< 周五是否打开 */
@property (nonatomic, assign) BOOL saturdayOn; /**< 周六是否打开 */
@property (nonatomic, assign) BOOL sundayOn; /**< 周日是否打开 */
@end
/**
防护模式
*/
typedef NS_ENUM(NSInteger, GWProtectionPlanMode) {
GWProtectionPlanModeNotSurpport, /**< 设备不支持 */
GWProtectionPlanModeOut = 1, /**< 外出 值和固件保持一致 */
GWProtectionPlanModeAtHome, /**< 在家 */
};
/**
防护计划模型
*/
@interface GWProtectionPlanModel : NSObject<NSCopying>
@property (nonatomic, assign) BOOL enable; /**< 是否生效 */
@property (nonatomic, assign) GWProtectionPlanMode mode; /**< 防护模式 */
@property (nonatomic, assign) NSUInteger hour; /**< 时间:时 */
@property (nonatomic, assign) NSUInteger minute; /**< 时间:分 */
@end
/**
各传感器的防护设置状态
*/
typedef NS_ENUM(uint8_t, GWProtectionSettingState) {
GWProtectionSettingStateNotSurpport, /**< 设备不支持 */
GWProtectionSettingStateOn = 1, /**< 状态开 */
GWProtectionSettingStateOff, /**< 状态关 */
};
/**
防护设置模型
*/
@interface GWProtectionSettingModel : NSObject
@property (nonatomic, assign) GWProtectionPlanMode protectionMode;
@property (nonatomic, assign) GWProtectionSettingState motionDetectState; /**< 移动侦测 */
@property (nonatomic, assign) NSInteger alarmSensitivity;/**< 报警灵敏度,同之前的移动侦测灵敏度 0-6表示灵敏度值,7表示不支持 */
@property (nonatomic, assign) GWProtectionSettingState objectTrackingState; /**< 物件追踪 */
@property (nonatomic, assign) GWProtectionSettingState humanBodyInfraredState; /**< 人体红外 */
@property (nonatomic, assign) GWProtectionSettingState externalAlarmInputState; /**< 外部报警输入 */
@property (nonatomic, assign) GWProtectionSettingState externalAlarmOutputState; /**< 外部报警输出 */
@property (nonatomic, assign) GWProtectionSettingState externalSensorState; /**< 外部传感器 */
@end
/**
@brief 处理情景模式的分类
*/
@interface GWP2PClient (SceneMode)
/**
设置设备的情景模式,仅868情景模式设备支持
@param mode 情景模式,1,表示在家
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)setDeviceSceneMode:(GWP2PSceneMode)mode
withDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
获取设备所有情景模式
completionBlock返回字典
@"device scene models" 键对应一个数组 NSArray<GWSceneModeModel *> *
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)getDeviceSceneModelsWithDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
设置设备一个情景模式(定时组、防护计划)
非情景模式设备不要调用该指令,虽然可能会成功。发送命令给设备后,设备就会自动在指定的时间开启相应的模式
@param aSceneModeModel 一个情景模式的模型
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)setADeviceSceneModel:(GWSceneModeModel *)aSceneModeModel
withDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
删除设备一个情景模式(定时组、防护计划)
非情景模式设备不要调用该指令,虽然可能会成功。
@param aSceneModeIndex 一个情景模式的索引值
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)removeADeviceSceneModelAtIndex:(NSUInteger)aSceneModeIndex
withDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
//设置优化由于和之前的情景模式比较相似,因此放到这个分类里面
/**
获取设备的防护计划
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)getDeviceProtectionPlansWithDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
设置设备的防护计划
@param protectionPlansArray 防护计划数组
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)setDeviceProtectionPlans:(NSArray<GWProtectionPlanModel *> *)protectionPlansArray
withDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
设置设备的防护计划模式
@param protectionPlanMode 防护计划模式
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)setDeviceProtectionPlanMode:(GWProtectionPlanMode)protectionPlanMode
withDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
获取设备对应模式的防护设置
completionBlock返回数据 @“protection setting” 对应一个类 GWProtectionSettingModel
@param protectionMode 防护模式
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)getDeviceProtectionSettingsWithProtectionMode:(GWProtectionPlanMode)protectionMode
deviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
设置防护模式
@param protectionSetting 设置项类,如果获取时设备不支持那一项,设置时也请传不支持
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)setDeviceProtectionSettings:(GWProtectionSettingModel *)protectionSetting
deviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
设置报警推送间隔
@param timeinterval 报警推送间隔,可设的值有 10 60 300 600 1800,单位为秒
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)setDeviceAlarmTimeinterval:(NSInteger)timeinterval
withDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
@end
+581
View File
@@ -0,0 +1,581 @@
//
/** @file GWP2PClient+Sensor.h @brief 处理传感器的分类 */
// P2PSDK
//
// Created by apple on 17/3/13.
// Copyright © 2017年 gwell. All rights reserved.
//
#import "GWP2PClient.h"
#pragma mark - 串口透传数据类型
#pragma pack(1) //告诉编译器,后面的数据类型以1(括号内参数)个字节的方式对齐
/**
@brief 串口透传App采用IPC1的方式,串口设备收到的数据结构
*/
struct sUserDefineMesg {
unsigned char UserCmdType;// 第1个字节 命令标识,串口透传为 31
unsigned int RemotePhoneID; // 第2~5共4个字节 存储远程手机端ID:把Yoosee上看到的数据账号,转化为4个字节(32位)的二进制数据,把二进制的最高位(第32位)由0转为1,得到的数据就是实际传送到设备的数据.而串口工具显示还要按字节倒一下顺序,将得到的新的32位的二进制数据,分成4个8位的二进制数据,显示时用16进制,最后把4个数的顺序倒过来显示.
unsigned char cDataLength; // 第6个字节 最大值为251 sendData数据的字节数
char *sendData; // 从第6个字节开始,最多251个字节
};
#pragma pack() //结束自定义对齐,采用默认的对齐方式.iOS情况下,是位宽为8字节,结构体对齐方式为按4字节对齐。
/**
串口透传发送模式,App发送串口透传信息,数据前要以字符串“IPC1”或“IPC2”开头,所以分两种发送模式,详情请查阅技威硬件的"串口通信操作说明"
*/
typedef NS_ENUM(NSUInteger, GWSerialTransmissionSendingMode) {
/**
串口透传,数据结构前带有"IPC1"的字符串,
IPC设备会把消息类型(31),发送者账号ID,二进制数据的字节大小,二进制数据推送给串口设备,串口设备收到的数据结构具体格式参见结构体 sUserDefineMesg
*/
GWSerialTransmissionSendingModeIPC1,
/**
串口透传,数据结构前带有"IPC2"的字符串,
IPC设备只把二进制数据推送给串口设备
*/
GWSerialTransmissionSendingModeIPC2,
/**
串口透传,数据中不带"IPC1"或"IPC2",由用户自己定义数据,满足一些特殊的客户需求
*/
GWSerialTransmissionSendingModeOther,
};
#pragma mark - 情景模式设备数据模型
/**
@brief 情景模式设备传感器唯一标识,由三个值标记,硬件规范。特殊传感器(移动侦测和攻防)不需要标识.
*/
typedef struct GWSceneModeDeviceSensorIdentify {
NSUInteger data0;
NSUInteger data1;
NSUInteger data2;
} GWSceneModeDeviceSensorIdentify;
/**
特殊传感器类型
*/
typedef NS_ENUM(NSUInteger, GWSceneModeDeviceSpecialSensorType) {
GWSceneModeDeviceSpecialSensorTypeMotionDetect, /**< 0 移动侦测 */
GWSceneModeDeviceSpecialSensorTypeAttack, /**< 1 防攻击 */
GWSceneModeDeviceSpecialSensorTypeMAX = 8, //
};
/**
普通传感器及遥控
*/
typedef NS_ENUM(NSUInteger, GWSceneModeDeviceCommonSensorType) {
//传感器对应的UI (有无开关,有无情景模式)
GWSceneModeDeviceCommonSensorTypeRemoteController, /**< 0 遥控器 (无, 无) */
GWSceneModeDeviceCommonSensorTypeDoorSwitch , /**< 1 门磁 (有, 有) */
GWSceneModeDeviceCommonSensorTypeSmokeTransducer, /**< 2 烟雾传感器 (有, 有) */
GWSceneModeDeviceCommonSensorTypeGasSensor , /**< 3 瓦斯探测传感器 (有, 有) */
GWSceneModeDeviceCommonSensorTypeLight, /**< 4 电灯 (有, 无) */
GWSceneModeDeviceCommonSensorTypeCurtain, /**< 5 窗帘 (有, 无) */
GWSceneModeDeviceCommonSensorTypeScocket, /**< 6 插座 (有, 无) */
GWSceneModeDeviceCommonSensorTypePIR, /**< 7 人体红外 (有, 有) */
GWSceneModeDeviceCommonSensorTypeWaterInvade, /**< 8 水浸 (有, 有) */
GWSceneModeDeviceCommonSensorTypeUrgency, /**< 9 急救 (有, 有) */
GWSceneModeDeviceCommonSensorTypeWarningSpeaker, /**< 10 警号 (有, 无) */
GWSceneModeDeviceCommonSensorTypeAirConditioner /**< 11 空调传感器 (有, 无) */
};
/**
情景模式设备传感器类型
1 特殊传感器 :移动侦测、防攻击
0 普通传感器和遥控器 普通传感器类型有:1为门磁;2为烟雾;3为瓦斯;4为电灯;5为窗帘;7为插座;等等...
*/
typedef enum GWSceneModeDeviceSensorMainType{
GWSceneModeDeviceSensorTypeCommonSensorOrRemoteController, /**< 0 普通传感器及遥控 */
GWSceneModeDeviceSensorTypeSpecialSensor, /**< 1 特殊传感器 */
} GWSceneModeDeviceSensorMainType;
/**
@brief 情景模式设备传感器类型,硬件规范,用两个值来标识类型
*/
typedef struct GWSceneModeDeviceSensorType {
GWSceneModeDeviceSensorMainType type; /**< 特殊传感器、普通传感器或遥控器 */
NSUInteger subType;/**< 根据type的不同,表示不同的传感器 */
} GWSceneModeDeviceSensorType;
/**
情景模式设备 类型插座的传感器的操作类型
*/
typedef enum GWSensorLikeSocketOperationType {
GWSensorLikeSocketOperationTypeQuery = 1,//情景模式设备, 查询 类似插座传感器的开关状态
GWSensorLikeSocketOperationTypeOpen,//情景模式设备, 打开 类似插座传感器的开关
GWSensorLikeSocketOperationTypeClose,//情景模式设备, 关闭 类似插座传感器的开关
GWSensorLikeSocketOperationTypeHalfOpen,//情景模式设备, 使类型插座传感器的开关处于 半开 状态
} GWSensorLikeSocketOperationType;
/** @brief 情景模式设备 各种传感器类型值及功能情况
名称 type subType 有无开关 有无情景模式 有无传感器唯一标识 是否支持名字
移动侦测 1 0 有 有 无 否 特殊传感器
防攻击 1 1 有 有 无 否 特殊传感器
遥控器 0 0 无 无 有 是 下面都是普通传感器或遥控器
门磁 0 1 有 有 有 是
烟雾传感器 0 2 有 有 有 是
瓦斯探测传感器 0 3 有 有 有 是
电灯 0 4 有 无 有 是
窗帘 0 5 有 无 有 是
插座 0 6 有 无 有 是
人体红外 0 7 有 有 有 是
水浸 0 8 有 有 有 是
急救 0 9 有 有 有 是
警号 0 10 有 无 有 是
空调传感器 0 11 有 无 有 是
*/
@interface GWSceneModeDeviceSensorModel : NSObject
//2个值唯一标识某个传感器 硬件规范
@property (nonatomic, assign) GWSceneModeDeviceSensorType sensorType;/**< 传感器类型。从硬件获取到,操作传感器时用,不要更改 */
//3个值唯一标识某个传感器 硬件规范
@property (nonatomic, assign) GWSceneModeDeviceSensorIdentify identify;/**< 传感器唯一标识,特殊传感器(移动侦测、攻防)不用标识。从硬件获取到,操作传感器时用,不要更改。 */
@property (nonatomic, assign) NSUInteger bindedPresetPositionIndex;/**< 绑定的预置位索引 */
//在家模式
@property (nonatomic, assign) BOOL enableAtHome;/**< 在家模式是否开启 */
@property (nonatomic, assign) BOOL enablePushAtHome;/**< 在家模式推送是否开启 */
@property (nonatomic, assign) BOOL enableSnapshotAtHome;/**< 在家模式快照是否开启 */
@property (nonatomic, assign) BOOL enableRecordAtHome;/**< 在家模式录像是否开启 */
@property (nonatomic, assign) NSUInteger warningToneAtHome;/**< 在家模式的报警声音类型 */
//外出模式
@property (nonatomic, assign) BOOL enableGoOut;/**< 外出模式是否开启 */
@property (nonatomic, assign) BOOL enablePushGoOut;/**< 外出模式推送是否开启 */
@property (nonatomic, assign) BOOL enableSnapshotGoOut;/**< 外出模式快照是否开启 */
@property (nonatomic, assign) BOOL enableRecordGoOut;/**< 外出模式录像是否开启 */
@property (nonatomic, assign) NSInteger warningToneGoOut;/**< 外出模式的报警声音类型 */
//睡眠模式
@property (nonatomic, assign) BOOL enableSleep;/**< 睡眠模式是否开启 */
@property (nonatomic, assign) BOOL enablePushSleep;/**< 睡眠模式推送是否开启 */
@property (nonatomic, assign) BOOL enableSnapshotSleep;/**< 睡眠模式快照是否开启 */
@property (nonatomic, assign) BOOL enableRecordSleep;/**< 睡眠模式录像是否开启 */
@property (nonatomic, assign) NSUInteger warningToneSleep;/**< 睡眠模式的报警声音类型 */
@property (nonatomic, copy) NSString *name;/**< 传感器名字 */
@property (nonatomic, assign) BOOL nameHasBeChanged;/**< 名字是否被改过 */
@property (nonatomic, assign) int bLampStatu;/**< 开关状态 */
@end
#pragma mark - GWP2PClient
/**
@brief 处理传感器的分类
传感器接口分情景模式和非情景模式两种,调用接口时要先调[GWP2PClient getMultipleDeviceStatusWithDeviceID:password:completionBlock:]获取设备子类型,然后和 GWP2PDeviceIPCSubtype 子类型枚举值进行比较,注释里面支持情景模式的设备类型,请调用情景模式设备传感器接口操作传感器,不支持的请调用普通传感器接口操作传感器
*/
@interface GWP2PClient (Sensor)
#pragma mark - 普通设备传感器
/**
获取设备已连接的传感器及遥控器
completionBlock返回字典中:
@"sensors" 键对应一个数组(NSMutableArray<NSDictionary *> *),数组中一个字典对应一个设备连接的传感器
传感器的字典中,index 键对应的值为传感器连接设备的防区位置,0-7为遥控器,8-63为普通传感器,64-71为特殊传感器,操作传感器时用做标识, description 键对应的值为字符串描述的传感器类型
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)getDeviceConnectedSensorsWithDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
获取已连接传感器的开关状态(遥控器不支持)
completionBlock返回字典中:
@"swithches status" 键对应一个数组(NSMutableArray<NSDictionary *> *,数组中的字典个数与传入sensorIndexesArray的NSNumber个数对应,且index相同,字典中 on 键对应的值为BOOL封装的NSNumber类型,表示index下的传感器有没有打开
@param sensorIndexesArray 传感器的索引数组,索引范围为8-71(遥控器没有开关状态),不要重复,若所传的索引未添加传感器,获取到的开关状态会为YES
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)getDeviceSwitchStateOfConnectedSensorsWithSensorIndexes:(NSArray<NSNumber *> *)sensorIndexesArray
deviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
获取传感器绑定的预置位(报警时转向预置位)(遥控器不支持)
获取前先调 getMultipledeviceStatusWithDeviceID:password:completionBlock: 获取设备是否支持预置位功能(返回字典中没有支持预置位键 preset position suppurted 就是不支持),支持才获取
completionBlock返回字典中:
@"sensor index" 键对应的值为传感器索引
@"preset position index" 键对应绑定的预置位索引值(0-4),255 表示未绑定预置位
@"alarm type" 暂时不用
@param sensorIndex 传感器的索引值,绑定预置位只支持索引值范围为8-15(普通传感器)、64-71(特殊传感器),其它的不支持
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)getDevicePresetPositionBindedByConnectedSensorWithSensorIndex:(NSUInteger)sensorIndex
deviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
让传感器绑定预置位(报警时转向预置位)(遥控器不支持)
设备不支持时调用无效
@param presetPositionIndex 预置位索引值
@param sensorIndex 传感器的索引值,绑定预置位只支持索引值范围为8-15(普通传感器)、64-71(特殊传感器),其它的不支持
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)bindPresetPosition:(NSUInteger)presetPositionIndex
withConnectedSensor:(NSUInteger)sensorIndex
deviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
获取传感器的名字 (一次获取所有已连接传感器的名字)
先调用该接口,看看设备是否支持传感器名字存储,老版本设备不支持,app的名字操作在本地也要同时存储
completionBlock返回字典中:
@"sensor names" 键对应一个数组(NSMutableArray<NSDictionary *> *),数组中的每个字典对应一个传感器的索引(键为 index)和名字(键为 name)
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)getDeviceSensorNamesWithDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
设置传感器的名字 (一次只能设置一个传感器的名字)
@param sensorName 要设置的传感器名字,长度为1-16位
@param sensorIndex 传感器索引值
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)setDeviceSensorName:(NSString *)sensorName
withSensorIndex:(NSUInteger)sensorIndex
deviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
操作一个传感器或遥控器
添加传感器时,先调增加指令,再一直按传感器的发送信号按钮发出信号,设备接收到添加指令然后搜索传感器信号,搜索到传感器信号后才会连接传感器
遥控器当初设计时只是用来布防、撤防和紧急报警,遥控器的报警都是紧急报警,报警时,设备是没有传防区和通道给我们的服务器,所以服务器传到app的防区和通道是一个垃圾值,这时没有参考意义。
如果想要知道是哪个遥控器报警,请把遥控器绑定在普通传感器和特殊传感器的索引值上,当成传感器用
@param sensorIndex 传感器索引值: 0-7为遥控器,8-63为普通传感器,64-71为特殊传感器,删除时若传入索引未连接传感器,可能会返回删除成功
@param operationType 操作类型:只支持增加、删除
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)operateASensor:(NSUInteger)sensorIndex
withOperationType:(P2POperationType)operationType
deviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
设置一个传感器(不包括遥控器)的开关状态
@param sensorIndex 传感器索引值: 不支持遥控器,8-63为普通传感器,64-71为特殊传感器
@param switchOn 是不是打开
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)setASensor:(NSUInteger)sensorIndex
switchState:(BOOL)switchOn
deviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
#pragma mark - 情景模式设备传感器
/**
情景模式设备 获取所有传感器信息(包括遥控器、普通传感器、特殊传感器)
completionBlock返回字典中:
@"sensors" 键对应一个 NSArray<GWSceneModeDeviceSensorModel *> * 数组
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)sceneModeDeviceGetSensorsInfomationWithDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
情景模式设备 操作一个插座类型的传感器的开关状态
添加传感器时,先调指令,再一直按传感器的发送信号按钮发出信号,设备接收到添加指令然后搜索到传感器信号后才会连接传感器
插座类型的判断条件
sensorType.type == 0 && //主类型为普通传感器或遥控器
(sensorType.subType == GWSceneModeDeviceCommonSensorTypeScocket || //子类型为 插座
sensorType.subType == GWSceneModeDeviceCommonSensorTypeLight || //子类型为 电灯
sensorType.subType == GWSceneModeDeviceCommonSensorTypeCurtain || //子类型为 窗帘
sensorType.subType == GWSceneModeDeviceCommonSensorTypeWarningSpeaker || //子类型为 警号
sensorType.subType == GWSceneModeDeviceCommonSensorTypeAirConditioner) //子类型为 空调传感器
@param sensorIdentify 传感器标识,由设备获取
@param sensorType 传感器类型,由设备获取,类型和标识都要传对
@param operationType 操作类型,四个枚举值
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)sceneModeDeviceOperateSwitchStateOfSensorLikeSocket:(GWSceneModeDeviceSensorIdentify)sensorIdentify
withSensorType:(GWSceneModeDeviceSensorType)sensorType
operationType:(GWSensorLikeSocketOperationType)operationType
deviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
情景模式设备 设置遥控器名字
@param remoteControlName 遥控器名字,16个字节,大于16个字节后的忽略
@param remoteControlIdentify 遥控器标识,由设备获取
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)sceneModeDeviceSetRemoteControlName:(NSString *)remoteControlName
withSensorIdentify:(GWSceneModeDeviceSensorIdentify)remoteControlIdentify
deviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
情景模式设备 设置传感器名字
@param sensorName 遥控器名字,16个字节,大于16个字节后的忽略,设为空时传 @""
@param sensorIdentify 传感器标识,由设备获取
@param sensorType 传感器类型,由设备获取,类型和标识都要传对
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)sceneModeDeviceSetSensorName:(NSString *)sensorName
withSensorIdentify:(GWSceneModeDeviceSensorIdentify)sensorIdentify
sensorType:(GWSceneModeDeviceSensorType)sensorType
deviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
情景模式设备 删除一个遥控器
@param remoteControlIdentify 遥控器标识,由设备获取
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)sceneModeDeviceRemoveARemoteControl:(GWSceneModeDeviceSensorIdentify)remoteControlIdentify
deviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
情景模式设备 删除一个传感器
@param sensorType 传感器类型,由设备获取
@param sensorIdentify 传感器标识,由设备获取,类型和标识都要传对
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)sceneModeDeviceRemoveASensor:(GWSceneModeDeviceSensorIdentify)sensorIdentify
withSensorType:(GWSceneModeDeviceSensorType)sensorType
deviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
情景模式设备 连接一个传感器或遥控器
连接传感器时,先调指令,再一直按传感器的发送信号按钮发出信号,设备接收到添加指令然后搜索到传感器信号后才会连接传感器
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)sceneModeDeviceConnectASensorOrRemoteControlWithDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
情景模式设备 通过二维码扫描连接一个传感器或遥控器
@param codeString 二维码扫描到的字符串
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)sceneModeDeviceConnectASensorOrRemoteControlWithQRCode:(NSString *)codeString
deviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
情景模式设备 设置特殊传感器(包括移动侦测和防攻击。其它的传感器调此指令,即使返回成功,也无实际设置效果)
包括设置情景模式,预置位(需要设备支持)
@param sensorModel 传感器模型
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)sceneModeDeviceSetASpecialSensor:(GWSceneModeDeviceSensorModel *)sensorModel
withDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
情景模式设备 设置普通传感器情景模式
传感器是否支持情景模式参考 GWSceneModeDeviceSensorModel 的注释
@param sensorModel 传感器模型,只设置情景模式(在家、外出、睡眠三种情景模式的开关,提示音,推送,抓拍,录像情况),模型中其它的数据不处理
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)sceneModeDeviceSetSceneMode:(GWSceneModeDeviceSensorModel *)sensorModel
withDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
情景模式设备 设置普通传感器预置位(需要设备支持,设置时先获取预置位信息)
@param presetPositionIndex 预置位索引
@param sensorIdentify 传感器标识,由设备获取,类型和标识都要传对
@param sensorType 传感器类型,由设备获取
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)sceneModeDeviceSetCommonSensorPresetPosition:(NSUInteger)presetPositionIndex
withSensorIdentify:(GWSceneModeDeviceSensorIdentify)sensorIdentify
sensorType:(GWSceneModeDeviceSensorType)sensorType
deviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
#pragma mark - 门铃开锁
/**
门铃设备开锁
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)doorbellDeviceUnlockWithDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
#pragma mark - 设置访客开锁权限
/**
设置访客开锁权限
@param onOrOff 访客是否拥有开锁权限
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)setVisitorUnlockAuthorityState:(BOOL)onOrOff
withDeviceId:(NSString *)deviceID
devicePassword:(NSString*)devicePassword
completionBlock:(CompletionBlock)completionBlock;
#pragma mark - 串口透传
/**
发送串口透传数据
如果
@param data 要发送的二进制数据,以GWSerialTransmissionSendingModeIPC1和GWSerialTransmissionSendingModeIPC2两种模式的数据长度必须在0~252字节之间,不能为0和252个字节,用户不需要在此data中增加"IPC1""IPC2",通过选择第二个参数的玫举值内部拼接好了.以GWSerialTransmissionSendingModeOther模式发送时,数据长度范围为0-256字节,用户需要在此data中增加命令标识,如"ALERTOR"等
@param sendingMode 发送模式
@param deviceID 设备ID,如果在同一局域网内,采用IPC1模式发送数据,串口设备收到的账号为IP,用此IP也能给手机发送数据
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)sendSerialTransmissionData:(NSData *)data
withSendingMode:(GWSerialTransmissionSendingMode)sendingMode
deviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
@end
@@ -0,0 +1,260 @@
//
// GWP2PClient+WhiteLight.h
// GWP2P
//
// Created by USER on 2018/4/20.
// Copyright © 2018年 apple. All rights reserved.
//
#import <GWP2P/GWP2P.h>
/**
白光灯定时动作模型,每天到达这个时间,设备怎么执行白光灯的开关动作
*/
@interface GWWhiteLightScheduleModel : NSObject <NSCopying>
@property (nonatomic, assign) BOOL on;/**< 此时间点是开灯还是关灯 */
@property (nonatomic, assign) NSUInteger hour;/**< 时,取值 0-23 */
@property (nonatomic, assign) NSUInteger munite;/**< 分 取值 0-59 */
@property (nonatomic, assign) BOOL enable;/**< 此时间设置是否生效 */
@end
/**
设备声控抓拍截图的图片模型
*/
@interface GWSoundControlPictureModel : NSObject
@property (nonatomic, assign) NSInteger year; /**< 图片生成时间 年 */
@property (nonatomic, assign) NSInteger month; /**< 图片生成时间 月 */
@property (nonatomic, assign) NSInteger day; /**< 图片生成时间 日 */
@property (nonatomic, assign) NSInteger hour; /**< 图片生成时间 时 */
@property (nonatomic, assign) NSInteger minute; /**< 图片生成时间 分 */
@property (nonatomic, assign) NSInteger second; /**< 图片生成时间 秒 */
@property (nonatomic, assign) NSInteger number; /**< 如果1秒内有多张抓图,这个值代表第几张,一般是0 */
@property (nonatomic, copy) NSString *type; /**< 字母"V" 区别于设备其它图片类型 */
@property (nonatomic, copy) NSString *path; /**< 图片在设备中的路径,调下载文件接口需要传入此路径 */
@end
@interface GWP2PClient (WhiteLight)
#pragma mark - 白光灯
/**
设置白光灯开关状态
所有时间只能一次修改,不能一次只改一个时间点
获取开关状态及支不支持白光灯功能请调 getMultipledeviceStatusWithDeviceID:password:completionBlock:
@param on 开关状态
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)setDeviceWhiteLightState:(BOOL)on
withDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
获取白光灯定时动作设置
设置和获取两条指令不能同时调,内部可能会把两条指令的回调搞混
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)getDeviceWhiteLightSchedulesWithDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
设置白光灯定时动作,最多能设置6个时间
设置和获取两条指令不能同时调,内部可能会把两条指令的回调搞混
@param modelsArray 时间设置模型数组,多于6个时间会返回参数错误,数据模型里的时间数据不能重复
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)setDeviceWhiteLightSchedules:(NSArray<GWWhiteLightScheduleModel *> *)modelsArray
withDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
白光的 自动亮灯模式 开关
@param on YES:开 NO:关
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)setDeviceWhiteLightAutomaticMode:(BOOL)on
withDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
白光的 预设开关灯时间模式 开关
@param on YES:开 NO:关
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)setDeviceWhiteLightTimingMode:(BOOL)on
withDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
#pragma mark - 声控
/**
设置白光灯亮度,这个功能是在做声控时才加的,只有支持声控的设备才支持此功能
获取亮度请调 getMultipledeviceStatusWithDeviceID:password:completionBlock:
@param brightnessPersent 亮度百分比,取值范围0-100,建议设置范围为10-100
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)setDeviceWhiteLightBrightness:(NSUInteger)brightnessPersent
withDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
获取声控拍照截图
返回数据格式:@{@"picktures" : @[ GWSoundControlPictureModel ]}
@param fromDate 开始时间,如果传nil,会默认为1970-1-1 00:00:01
@param toDate 结束时间,如果传nil,会默认为2050-1-1 00:00:01
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)getDeviceSoundControlPickturesFromDate:(NSDate *)fromDate
toDate:(NSDate *)toDate
deviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
获取声控状态
目前设备支持 录像(record),拍照(capture),情景切换(work mode),灯光控制(lampligh) 4种声控状态
返回数据包括4种声控是否单独打开,及声控总开关状态"sound control",总开关关闭后,其它4种声控都无效
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)getDeviceSoundControlStateWithDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
设置声控总状态
是否能让声音控制生效
@param on 是否打开
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)setDeviceSoundControlState:(BOOL)on
withDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
设置声控录像状态
声音控制能否控制录像
@param on 是否打开
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)setDeviceSoundControlRecordState:(BOOL)on
withDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
设置声控拍照状态
声音控制能否控制拍照
@param on 是否打开
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)setDeviceSoundControlCaptureState:(BOOL)on
withDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
设置声控情景切换状态
声音控制能否切换情景状态
@param on 是否打开
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)setDeviceSoundControlWorkModeState:(BOOL)on
withDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
设置声控灯光控制状态
声音控制能否控制灯光开关
@param on 是否打开
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)setDeviceSoundControlLamplighState:(BOOL)on
withDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
/**
设置旧灯光开关状态
@param on 是否打开
@param deviceID 设备ID
@param devicePassword 设备密码
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)setOldLightState:(BOOL)on
withDeviceID:(NSString *)deviceID
devicePassword:(NSString *)devicePassword
completionBlock:(CompletionBlock)completionBlock;
@end
+223
View File
@@ -0,0 +1,223 @@
//
/** @file GWP2PClient.h @brief P2P客户端及其协议,连接与断连P2P服务器,获取连接状态,获取AP模式ID等 */
// P2PSDK
//
// Created by apple on 16/12/9.
// Copyright © 2016年 gwell. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "GWP2PDefine.h"
@class GWP2PClient;
#pragma mark - GWP2PClientProtocol
/**
@brief P2P客户端协议,包含接收设备报警和文件下载等回调
*/
@protocol GWP2PClientProtocol <NSObject>
@optional
/**
接收到设备报警推送(包括门铃响铃推送的一种,而且是设备常用的一种):
alarmDictionary字典各键对应的信息
@"alarm type" : 报警类型 GWSensorAlarmType 枚举值
@"can delete binded push ID" : 是否支持删除绑定的推送ID,即能否解除当前账号的报警推送
@"sensor name" : 传感器名字
报警图片,由于情景模式设备与其它的设备图片存储方式不一样,因此可能返回@"scene mode device picture"与@"common device picture"两个键中的一个或两个,如果返回两个,要先判断设备类型,再用对应的图片路径去获取图片才能获取到
@"scene mode device picture" : 情景模式设备报警图片, 对应一个字典
@"common device picture" : 普通设备报警图片, 对应一个字典
图片对应的字典@{@"path" : 图片在设备的路径,用来下载图片, @"picture number" : @"报警时,设备截图数量"}
@param client GWP2PClient类
@param alarmDictionary 保存报警信息的字典
*/
- (void)client:(GWP2PClient *)client receavedDeviceAlarm:(NSDictionary<NSString *, id> *)alarmDictionary;
/**
串口透传接收到门铃的响铃推送,门铃响铃有两种方式推送到手机端:
一是通过报警推送, 其报警类型@"alarm type"的值为 GWSensorAlarmTypeDoorbellPush , 即 13,
二是通过串口透传,此方法接收到的报警信息就是通过串口透传推送的,
ringingDictionary字典各键对应的信息:
@"device ID" : @"设备id";
@"cmd" : @"串口透传命令";
@param client GWP2PClient类
@param ringingDictionary 保存响铃信息的字典
*/
- (void)client:(GWP2PClient *)client receavedDoorbellRingingBySerialTransmission:(NSDictionary<NSString *, id> *)ringingDictionary;
/**
下载文件回调
@param client GWP2PClient 类
@param filePath 若下载成功,此路径为本地存储路径,若下载失败,此路径为远程路径或nil
@param deviceID 设备ID
@param success 是否下载成功
@param resultDictionary 保存下载失败原因的字典
*/
- (void)client:(GWP2PClient *)client didDownloadFile:(BOOL)success withFilePath:(NSString *)filePath deviceID:(NSString *)deviceID result:(NSDictionary<NSString *, NSString *> *)resultDictionary;
/**
更新进度
给设备发送更新命令后,设备开始更新,此方法会不停的调用,返回更新进度百分比,此方法在主线程运行,方便UI处理
@param client GWP2PClient 类
@param persent 更新到百分之多少
@param resultCode NSNumber对应更新结果:1更新中 65更新完成
@param deviceID 设备ID
*/
- (void)client:(GWP2PClient *)client updateProgress:(NSInteger)persent resultCode:(NSNumber *)resultCode ofDeviceID:(NSString *)deviceID;
/**
收到串口透传的数据
@param client GWP2PClient 类
@param data 串口透传回来的二进制数据,最大为248个字节
*/
- (void)client:(GWP2PClient *)client receavedSerialTransmissionData:(NSDictionary *)data;
/**
P2P库接收到通知,包括 设备升级、系统消息、权限通知等
@param client GWP2PClient 类
@param noti 通知数据字典
"PermissionMessage"
"AppNeedUpdate"
"SystemMessage"
*/
- (void)client:(GWP2PClient *)client didReceivedNotification:(NSDictionary *)userInfo;
@end
#pragma mark - GWP2PClient类
/**
@brief 控制设备的类,用单例,连接与断连P2P服务器,获取连接状态,获取AP模式ID等
*/
@interface GWP2PClient : NSObject
/**
收到设备不支持的回调
由于给设备发指令,收到设备回复时,是以指令类型去判断是哪条消息,而有的指令设备不支持这一数据覆盖了指令类型,所以设备不支持对应不到具体指令,只能单独传出来
*/
@property (nonatomic, copy) void (^deviceNotSupportBlock)(GWP2PClient *client, NSString *deviceID);
@property (nonatomic, assign) P2PLinkStatus linkStatus; /**< p2p连接状态 */
@property (nonatomic, weak) id<GWP2PClientProtocol> delegate;/**< GWP2PClient的代理,一些设备事件的通知对象 */
@property (nonatomic, assign) BOOL isAPMode;/**< 是不是AP模式。此属性只保存上次与路由器交互后的数据,调 getDeviceIDInAPMode 方法会重新与路由器交互更新APMode状态,每次app进入前台时会更新APMode状态 */
@property (nonatomic, copy) NSString *serverList; /**< P2P服务器列表,自建服务器需要设置此属性,格式"|p2p1.cloudlinks.cn|p2p2.cloudlinks.cn|p2p3.cloud-links.net" */
#pragma mark 获取单例
/**
* 获取单例
*/
+ (instancetype)sharedClient;
#pragma mark 连接服务器
/**
@method
@abstract 连接服务器
@discussion 程序启动时首先要连接服务器,才能与设备通信。如果只需支持某一公司的设备,那么请向技威的技术支持咨询获取你们的客户ID
@param account 用户账号,不是注册时的邮箱,手机号,是登陆或注册时返回的值取后31位:[json[@"UserID"] intValue] & 0x7fffffff
@param codeStr1 用户账号登陆成功后返回的 P2PVerifyCode1 , 为固定值
@param codeStr2 用户账号登陆成功后返回的 P2PVerifyCode2 , 为固定值
@param sessionID1 用户账号登陆成功后返回的 sessionId1 , 每次登陆返回值不固定
@param sessionID2 用户账号登陆成功后返回的 sessionId2 , 每次登陆返回值不固定
@param customerIDsArray 技威客户公司id数组,传nil表示支持所有技威方案的设备。数组内传了几个公司的ID,连接后就支持对应公司的设备。最多支持10个。传入的ID值不正确时,支持不了设备,都传0时与传nil效果一样。要了解具体客户ID,请联系技威客服。
@result 返回值代表是否连接成功
*/
- (BOOL)connectWithAccount:(NSString *)account
codeStr1:(NSString *)codeStr1
codeStr2:(NSString *)codeStr2
sessionID1:(NSString *)sessionID1
sessionID2:(NSString *)sessionID2
customerIDs:(NSArray <NSNumber *> *)customerIDsArray;
/**
@method
@abstract 连接服务器(为支持P2P通知消息增加三个参数)
@discussion 程序启动时首先要连接服务器,才能与设备通信。如果只需支持某一公司的设备,那么请向技威的技术支持咨询获取你们的客户ID
@param account 用户账号,不是注册时的邮箱,手机号,是登陆或注册时返回的值取后31位:[json[@"UserID"] intValue] & 0x7fffffff
@param codeStr1 用户账号登陆成功后返回的 P2PVerifyCode1 , 为固定值
@param codeStr2 用户账号登陆成功后返回的 P2PVerifyCode2 , 为固定值
@param sessionID1 用户账号登陆成功后返回的 sessionId1 , 每次登陆返回值不固定
@param sessionID2 用户账号登陆成功后返回的 sessionId2 , 每次登陆返回值不固定
@param customerIDsArray 技威客户公司id数组,传nil表示支持所有技威方案的设备。数组内传了几个公司的ID,连接后就支持对应公司的设备。最多支持10个。传入的ID值不正确时,支持不了设备,都传0时与传nil效果一样。要了解具体客户ID,请联系技威客服。
@param appVersion 向技威申请得到的AppVersion(格式如00.46.03.03)
@param messageLanguage P2P通知消息语言,请传nil,设置无效,目前根据系统语言判定。
@param lastSystemMessageID 最后一个系统消息ID
@param lastAuthorityMessageID 权限系统消息ID,配网时传密码也会走这个消息
@result 返回值代表是否连接成功
*/
- (BOOL)connectWithAccount:(NSString *)account
codeStr1:(NSString *)codeStr1
codeStr2:(NSString *)codeStr2
sessionID1:(NSString *)sessionID1
sessionID2:(NSString *)sessionID2
customerIDs:(NSArray <NSNumber *> *)customerIDsArray
appVersion:(NSString *)appVersion
messageLanguage:(NSString *)messageLanguage
lastSystemMessageID:(NSString *)lastSystemMessageID
lastAuthorityMessageID:(NSString *)lastAuthorityMessageID;
/**
@abstract 断开连接
*/
- (void)disconnect;
/**
AP模式下获取设备ID,只有当设备为AP模式且手机连接到设备的wifi时才能成功获取并更新设备的APMode状态
@return 设备ID。返回值不为0时可确定设备处于AP模式;返回值为0时可能为AP,也可能是手机未连接到设备wifi
*/
- (NSUInteger)getDeviceIDInAPMode;
#pragma mark - 发送二进制数据给设备
/**
直接向设备发送原始数据,本接口是为满足一些客户定制的需求,一般用户不需要直接使用此接口,具体的数据格式根据功能来定,请咨询技威客服
在 GWP2PClient 的分类中各接口都是把各个功能的数据封装好后,进行调用.为了满足一些客户的特殊要求,公开这条接口,让客户自己去封装数据,回调的数据也是 NSData 类型,定制功能使用此接口时,用户需要自己将数据封装成 NSData 类型,然后传入此接口参数data中,封装时一定要注意字节对齐.
如果是 GWP2PClient 分类中有的指令,调这条接口直接发二进制数据是收不到回调数据的
此接口发送后不能连续发这个条指令,必需要上一条数据返回时才能发下一条指令
@param deviceID 设备ID
@param devicePassword 设备密码
@param data 要发送的数据,数据结构是由技威定义的结构体,封装成NSData时一定要注意字节对齐
@param completionBlock 与设备交互完成后的回调Block
*/
- (void)sendBinaryDataToDevice:(NSString *)deviceID
withDevicePassword:(NSString *)devicePassword
data:(NSData *)data
completionBlock:(CompletionBlock)completionBlock;
@end
+143
View File
@@ -0,0 +1,143 @@
//
/** @file GWP2PDefine.h @brief 定义的各种类型枚举,错误类型,密码强弱,操作类型,报警类型等 */
// P2PSDK
//
// Created by apple on 17/2/28.
// Copyright © 2017年 gwell. All rights reserved.
//
#ifndef GWP2PDefine_h
#define GWP2PDefine_h
@class GWP2PClient;
/**
给设备发消息后的回调block,block都没有在主线程调用,操作UI时,请注意回到主线程
关于返回结果中设备ID的说明:如果手机和设备处理同一局域网,会直接通过局域网发消息给设备,这时发消息传递的设备ID不是实际的设备ID号,而是设备在局域网中IPV4地址的4位数字的最后一位,其值小于等于255,设备消息返回后,block字典中的"device ID"字段返回的也是中IPV4地址的4位数字的最后一位,而不是设备ID
@abstract 由用户自己定义,实现与设备交互后的操作
@param client GWP2PClient单例,调用此指针,避免循环引用
@param success 是否与设备通信成功(不代表设备指令成功)
@param dataDictionary 返回数据,与设备通信成功后返回所请求的数据,不成功会返回失败原因,具体指令是否成功会保存在此字典的GWP2PMessageResult键对应的 NSNumber包装的BOOL值中:YES表示成功,可以取具体数据或操作设备成功;NO表示失败,GWP2PMessageDescription键对应的值中会描述具体原因.若有特殊要求,可取 GWP2PMessageErrorValue 键对应的NSNumber 包装的 P2PClientMessageError 枚举值,查看具体错误原因
*/
typedef void (^CompletionBlock)(GWP2PClient *client, BOOL success, NSDictionary<NSString *, id> *dataDictionary);
//CompletionBlock返回字典中对应的常量字符串
static NSString *const GWP2PMessageDeviceNotSurported = @"device not surported";/**< 设备不支持 */
static NSString *const GWP2PMessageDescription = @"description";/**< 具体的描述 */
static NSString *const GWP2PMessageResult = @"result";/**< 结果 对应NSNumber包装的BOOL类型 */
static NSString *const GWP2PMessageFailure = @"failure"; /**< 失败 */
static NSString *const GWP2PMessageSuccess = @"success"; /**< 成功 */
static NSString *const GWP2PMessageErrorValue = @"error value"; /**< NSNumber 包装的 P2PClientMessageError 枚举值 */
/**
发送设备指令后返回的错误类型
*/
typedef NS_ENUM(NSUInteger, P2PClientMessageError) {
P2PClientMessageErrorNone, /**< 没有错误 */
P2PClientMessageErrorPasswordFail, /**< 密码错误 */
P2PClientMessageErrorTimeOut, /**< 超时 */
P2PClientMessageErrorIOSPushError, /**< ios内部错误 */
P2PClientMessageErrorNoRight, /**< 没有权限 */
P2PClientMessageErrorSendFailed = 5, /**< 因缓存不够发送失败 */
P2PClientMessageErrorDeviceOffline = 6, /**< 设备离线 */
P2PClientMessageErrorMessageIsSending = 9996, /**< 当前请求正在进行 */
P2PClientMessageErrorParameterError = 9997, /**< 传递参数错误 */
P2PClientMessageErrorOtherError = 9998, /**< 其它错误,返回结果一般会描述错误原因 */
P2PClientMessageErrorUnKnow = 9999 /**< 未知错误,返回结果一般不会描述错误原因 */
};
typedef NS_ENUM(NSUInteger, P2PLinkStatus) {
P2PLinkStatusOK = 0, /**< 连接成功 */
P2PLinkStatusLinking, /**< 连接操作正在进行还没成功 */
P2PLinkStatusDNSParseFailed, /**< DNS解析错误 */
P2PLinkStatusCheckListServerFailed, /**< 列表服务器没有响应 */
P2PLinkStatusGetServerListTimeOut, /**< 获取服务器列表超时 */
P2PLinkStatusWaitHeartbeatFailed, /**< 等待P2P服务器心跳失败 */
P2PLinkStatusLoginAnother, /**< 在其他设备登录了 */
P2PLinkStatusUnknown /**< 未知 */
};
/**
管理员密码强度,设置密码时不能为弱密码
*/
typedef NS_ENUM(NSUInteger, P2PAdministratorPasswordStrength) {
P2PAdministratorPasswordStrengthInValidate, /**< 无效 */
P2PAdministratorPasswordStrengthWeak, /**< 弱 */
P2PAdministratorPasswordStrengthMiddle, /**< 中 */
P2PAdministratorPasswordStrengthStrong, /**< 强 */
};
/**
设备操作类型
*/
typedef NS_ENUM(NSUInteger, P2POperationType) {
P2POperationTypeInsert, /**< 增加 */
P2POperationTypeDelete, /**< 删除 */
P2POperationTypeUpdate, /**< 修改 */
};
/**
设备报警类型
*/
typedef NS_ENUM(NSUInteger, GWSensorAlarmType) {
GWSensorAlarmTypeNone,
GWSensorAlarmTypeExternal = 1, /**< 1 外部报警 */
GWSensorAlarmTypeMotionDetect, /**< 2 移动侦测 */
GWSensorAlarmTypeForce, /**< 3 紧急 */
GWSensorAlarmTypeDebug, /**< 4 调试 */
GWSensorAlarmTypeLine = 5, /**< 5 有线 */
GWSensorAlarmTypeVOL, /**< 6 低电压 */
GWSensorAlarmTypePIR, /**< 7 人体红外 */
GWSensorAlarmTypeDefence, /**< 8 布防 */
GWSensorAlarmTypeCancelDefence, /**< 9 撤防 */
GWSensorAlarmTypeBatteryLowVoltage = 10,/**< 10 电池低电 */
GWSensorAlarmTypeParameterUpdateToServer,/**< 11 参数上传服务器 */
GWSensorAlarmTypeTemperatureHumidity, /**< 12 温湿度 */
GWSensorAlarmTypeDoorbellPush, /**< 13 门铃推送 */
GWSensorAlarmTypeForceFromKeypress, /**< 14 按键触发报警(UI 显示紧急报警) */
GWSensorAlarmTypeRecordFail = 15, /**< 15 录像失败 */
GWSensorAlarmTypeEmailTooOften, /**< 16 邮箱发送过于频繁 */
GWSensorAlarmTypeUARTInput, /**< 17 串口输入报警 */
GWSensorAlarmTypeProberFire, /**< 18 防火报警 */
GWSensorAlarmTypeProberGas, /**< 19 煤气泄漏 */
GWSensorAlarmTypeProberSteal, /**< 20 防盗报警 */
GWSensorAlarmTypeProberAround = 21, /**< 21 周界报警 */
GWSensorAlarmTypeProberForce, /**< 22 */
GWSensorAlarmTypeProber120, /**< 23 医疗求救 */
GWSensorAlarmTypeProberPreventDisconnect,/**< 24 防拆报警 */
GWSensorAlarmTypeProberCommunicationTiming,/**< 25 定时通讯 */
GWSensorAlarmTypeProberLowPower = 26, /**< 26 低电报警 */
GWSensorAlarmTypeProberLowPowerRecovery,/**< 27 低电恢复报警 */
GWSensorAlarmTypeProberPowerOn, /**< 28 开机报警 */
GWSensorAlarmTypeProberPowerOff, /**< 29 关机报警 */
GWSensorAlarmTypeProberDefence, /**< 30 布防 */
GWSensorAlarmTypeProberCancelDefence = 31,/**< 31 撤防 */
GWSensorAlarmTypeProberEXT, /**< 32 门磁报警 */
GWSensorAlarmTypeSound, /**< 33 声音报警 */
GWSensorAlarmTypePIR1, /**< 34 */
GWSensorAlarmTypeRecordAlert, /**< 35 录像 */
GWSensorAlarmTypeExternalAttact = 36, /**< 36 外部攻击 */
GWSensorAlarmTypeSensorAlarm, /**< 37 传感器报警 */
GWSensorAlarmTypeForceSOS, /**< 38 sos */
GWSensorAlarmTypeKeepSilent, /**< 39 silent */
GWSensorAlarmTypeSmoke, /**< 40 smoke */
GWSensorAlarmTypeGas = 41, /**< 41 gas */
GWSensorAlarmTypeDoorMagnet, /**< 42 door magnet */
GWSensorAlarmTypeTemprature, /**< 43 temprature */
GWSensorAlarmTypeHumidity, /**< 44 humidity */
GWSensorAlarmTypePIRAlarm, /**< 45 pir */
GWSensorAlarmTypeUARTRecord = 46, /**< 46 UART RECORD */
GWSensorAlarmTypeEmergencyCall, /**< 47 紧急呼叫 */
GWSensorAlarmTypeMAX,
};
#endif /* GWP2PDefine_h */
+172
View File
@@ -0,0 +1,172 @@
//
/** @file GWP2PDevice.h @brief 设备模型和相关枚举 */
// P2PSDK
//
// Created by zengyuying on 17/3/31.
// Copyright © 2017年 gwell. All rights reserved.
//
#import <Foundation/Foundation.h>
/**
设备类型,设备的一些功能要根据设备类型来判断
目前设备返回的类型不准确,做功能判断时都用设备子类型 GWP2PDeviceIPCSubtype
*/
typedef NS_ENUM(NSUInteger, GWP2PDeviceType) {
GWP2PDeviceTypeUnknown = 0,
GWP2PDeviceTypeNPC = 2,
GWP2PDeviceTypeDoorbell = 5,
GWP2PDeviceTypeIPC = 7,
GWP2PDeviceTypeNVR = 11,
};
//设备加密功能选项枚举值
typedef NS_ENUM(uint64_t, GWDeviceFunctionType) {
GWDeviceFunctionVoiceControl = 1 << 0, //声控功能
GWDeviceFunctionBattryInside = 1 << 1, //内置电池
GWDeviceFunction2kVideo = 1 << 2, //2K分辨率的图像
GWDeviceFunction4kVideo = 1 << 3,//4K分辨率的图像
GWDeviceFunctionSoundPos = 1 << 4,//听声辨位
GWDeviceFunctionMotionTrack = 1 << 5,//物件追踪
GWDeviceFunctionPanoPuzzle = 1 << 6,//全景拼图
GWDeviceFunctionOneButtonCall = 1 <<7,//按钮呼叫
GWDeviceFunctionGarageLight = 1 << 8,//智能车库灯
GWDeviceFunctionHXVsion = 1 << 9,//汇讯视通
};
/**
IPC设备(DeviceType=7)的设备子类型,目前只有IPC有子类型
*/
typedef NS_ENUM(NSUInteger, GWP2PDeviceIPCSubtype) {
GWP2PDeviceIPCSubtypeNormal = 0, //摇头机,全功能
GWP2PDeviceIPCSubtypeSimple, //卡片机, 不带马达
GWP2PDeviceIPCSubtype38X38, //38板,不带马达,不带人体红外,不带回音消除
GWP2PDeviceIPCSubtypeDoorbell, //门铃,不带马达,带语音优化
GWP2PDeviceIPCSubtypeCostdown, //costdown版的摇头机,不带人体红外,不带外部无线传感器. 不带回音消除
GWP2PDeviceIPCSubtype38Module,
GWP2PDeviceIPCSubtypeNvrPtz = 6, //预留
GWP2PDeviceIPCSubtypeNvrNoPtz, //预留
GWP2PDeviceIPCSubtypeSmarthome868, //支持 868 + 情景模式
GWP2PDeviceIPCSubtypeRsv4, //预留 9
GWP2PDeviceIPCSubtype130wNormal, //130w,摇头机,全功能
GWP2PDeviceIPCSubtype130wSimple = 11, //130w,卡片机, 不带马达
GWP2PDeviceIPCSubtype130w38X38, //130w,38板,不带马达,不带人体红外,不带回音消除
GWP2PDeviceIPCSubtype130wDoorbell, //130w,门铃,不带马达,带语音优化
GWP2PDeviceIPCSubtype130wCostdown, //130w,costdown版的摇头机,不带人体红外,不带外部无线传感器. 不带回音消除
GWP2PDeviceIPCSubtype130w38Module,
GWP2PDeviceIPCSubtype130wNvrPtz = 16, //预留
GWP2PDeviceIPCSubtype130wNvrNoPtz, //预留
GWP2PDeviceIPCSubtype130WSmarthome868, //支持 868 + 情景模式
GWP2PDeviceIPCSubtype130wRsv4, //预留 19
GWP2PDeviceIPCSubtype200wNormal, //200w,摇头机,全功能
GWP2PDeviceIPCSubtype200wSimple = 21, //200w,卡片机, 不带马达
GWP2PDeviceIPCSubtype200w38X38, //200w,38板,不带马达,不带人体红外,不带回音消除
GWP2PDeviceIPCSubtype200wDoorbell, //200w,门铃,不带马达,带语音优化
GWP2PDeviceIPCSubtype200wCostdown, //200w,costdown版的摇头机,不带人体红外,不带外部无线传感器. 不带回音消除
GWP2PDeviceIPCSubtype200w38Module,
GWP2PDeviceIPCSubtype200wNvrPtz = 26, //预留
GWP2PDeviceIPCSubtype200wNvrNoPtz, //预留
GWP2PDeviceIPCSubtype200WSmarthome868, //支持 868 + 情景模式
GWP2PDeviceIPCSubtype200wRsv4, //预留 29
GWP2PDeviceIPCSubtype868, //只支持 868
GWP2PDeviceIPCSubtypeSmarthome = 31, //支持 868 + 情景模式
GWP2PDeviceIPCSubtypeSmarthomeShare, //支持 868 + 情景模式 + 分享, 这种设备很少
GWP2PDeviceIPCSubtypeSC1135Fisheye360D, //360全景
GWP2PDeviceIPCSubtypeSC1135Fisheye180D, //180全景
GWP2PDeviceIPCSubtypeSC3035Fisheye360D, //360全景
GWP2PDeviceIPCSubtypeSC3035Fisheye180D = 36, //180全景
};
/**
鱼眼设备分类,渲染使用,不要修改
*/
typedef NS_ENUM(NSUInteger, GWP2PFisheyeType) {
GWP2PFisheyeType360 = 0, //360鱼眼
GWP2PFisheyeType180 = 1, //180鱼眼
GWP2PFisheyeTypeUnkown = 999,
};
/**
360鱼眼设备视频显示的形状
*/
typedef NS_ENUM(NSUInteger, GWP2PFisheyeShapeType) {
GWP2PFisheyeShapeTypeCircle = 0, //圆形 360鱼眼使用
GWP2PFisheyeShapeType180HalfSphere, //180°半球 180鱼眼使用
GWP2PFisheyeShapeTypeCylider, //圆柱 360鱼眼使用
GWP2PFisheyeShapeTypeBowle, //碗状 360鱼眼使用
GWP2PFisheyeShapeTypeFourSplit //四分屏 360鱼眼使用
};
/**
设备视频比例
*/
typedef NS_ENUM(NSUInteger, GWP2PDeviceVideoRatio) {
GWP2PDeviceVideoRatio16X9 = 0, //大部分设备为默认的16:9
GWP2PDeviceVideoRatio4X3, //130w的设备4:3
GWP2PDeviceVideoRatio1X1, //360全景1:1
};
/**
@brief 设备模型,提供一些基础的可能用到的设备属性和设备判断方法,开发时要用到的其它设备数据此模型没有时,可在此模型的基础上新建子类
*/
@interface GWP2PDevice : NSObject
/** 设备ID */
@property (nonatomic, copy) NSString *deviceID;
/** 设备昵称 */
@property (nonatomic, copy) NSString *deviceName;
/** 设备密码 */
@property (nonatomic, copy) NSString *devicePassword;
/** 设备类型 */
@property (nonatomic, assign) GWP2PDeviceType deviceType;
/** 设备子类型 */
@property (nonatomic, assign) GWP2PDeviceIPCSubtype deviceSubtype;
/**
是否鱼眼设备
*/
+ (BOOL)isFisheyeDevice:(GWP2PDeviceIPCSubtype)deviceSubtype;
/**
是否支持摇头功能
只能用于判断IPC(DeviceType=7)的设备子类型支持摇头功能
*/
+ (BOOL)isSupportRotateIPCDevice:(GWP2PDeviceIPCSubtype)deviceSubtype;
/**
获取鱼眼类型 180or360
@param deviceSubtype 设备子类型
@return 鱼眼类型枚举值
*/
+ (GWP2PFisheyeType)getFisheyeTypeWithSubtype:(GWP2PDeviceIPCSubtype)deviceSubtype;
/**
根据IPC子类型获取视频比例
@param deviceSubtype 设备子类型
@return 视频比例枚举值
*/
+ (GWP2PDeviceVideoRatio)getVideoRatioWithSubtype:(GWP2PDeviceIPCSubtype)deviceSubtype;
@end
+138
View File
@@ -0,0 +1,138 @@
//
/** @file GWP2PDeviceLinker.h @brief 设备配网的类和协议 */
// GWP2PDeviceLinker
//
// Created by apple on 17/5/2.
// Copyright © 2017年 apple. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "GWP2PLanDevice.h"
extern NSString * const DUPLICATE_DEVICE_ID_NOTIFICATION;
@class GWP2PDeviceLinker;
/**
设备通过任何方式联网成功后,会通过这个Block进行回调设备信息。目前配网并不是100%可靠,主要是因为设备联网成功后是通过广播消息的形式在局域网发送消息通知APP端的,如果有多台设备在同一个局域网同时联网,会有干扰。
1、设备是通过局域网广播的方式通知APP联网成功的,所以手机所在网络需要与设备配置网络处于同一个局域网,才能收到消息。
2、由于iOS平台没有权限控制WiFi,通过设备的AP模式联网时,如果在配网成功后,手机没有自动连接到给设备配置的WiFi,是收不到配网成功消息的,此时建议在UI上添加一个按钮,让用户在听到设备“连接成功”的提示音后进行点击,点击后将设备添加到本地列表。
3、设备联网成功后,会在20秒内发送多次消息。
*/
typedef void (^DeviceLinkInBlock)(NSDictionary *deviceDict);
/**
AP配网时,设备在收到WiFi及密码信息后,在断开AP热点去联网前,会回调相关信息
@param deviceId 设备ID
@param isSupport 是否支持AP模式联网
*/
typedef void (^DeviceReceiveBlock)(NSString *deviceId, BOOL isSupport);
/**
@brief 设备配网回调协议
*/
@protocol GWPP2PDeviceLinkerProtocol <NSObject>
/**
局域网里面有设备联网成功后,都会回调此方法。
@param deviceDict 设备信息
*/
- (void)p2pDeviceLinker:(GWP2PDeviceLinker *)linker deviceLinkSuccess:(NSDictionary *)deviceDict;
@end
/**
@brief 设备配网的类
*/
@interface GWP2PDeviceLinker : NSObject
/** 协议 */
@property (nonatomic, weak) id <GWPP2PDeviceLinkerProtocol> delegate;
/** 局域网设备列表 */
@property (nonatomic, strong) NSMutableArray <GWP2PLanDevice *> *lanDevices;
/** 智能联机是否发送声波 默认YES */
@property (nonatomic, assign) BOOL smarkLinkSoundEnable;
/**
单例初始化
*/
+ (instancetype)shareInstance;
/**
刷新局域网设备。lanDevices每30刷新,调用此方法马上发送一次刷新指令。
*/
- (void)refreshLanDevices;
/**
智能联机,内部会同时发送声波、空中发包、SimpleConfig数据
此接口停用,请调 [GWP2PDeviceLinker p2pSmartLinkDeviceWithWiFiSSID:password:useSimpleConfig:deviceLinkIn:]
一定要将手机连接上设备要连接的wifi,才能收到DeviceLinkInBlock连接成功的回调
@param ssid 设备需要连接的WiFi SSID
@param password 设备需要连接的WiFi 密码
@param deviceLinkInBlock 设备连接到网络的回调,会回调多次,调接口时需要处理一下
*/
- (void)p2pSmartLinkDeviceWithWiFiSSID:(NSString *)ssid
password:(NSString *)password
deviceLinkIn:(DeviceLinkInBlock)deviceLinkInBlock DEPRECATED_ATTRIBUTE;
/**
智能联机,内部会同时发送声波及用另一种方式发送数据(空中发包或SimpleConfig
调此接口后一定要调 [GWP2PDeviceLinker p2pStopSmartLink 方法停止发送声波,空中发包,及SimpleConfig数据
一定要将手机连接上设备要连接的wifi,才能收到DeviceLinkInBlock连接成功的回调
@param ssid 设备需要连接的WiFi SSID,手机一定要连到此wifi才能收到回调,目前设备只支持2.4Gwifi
@param password 设备需要连接的WiFi 密码
@param useSimpleConfig 是否用SimpleConfig方式进行配网,传YES采用SimpleConfig和声波发wifi数据,传NO采用声波和空中发包发wifi数据
@param deviceLinkInBlock 设备连接到网络的回调,会回调多次,调接口时需要处理一下
*/
- (void)p2pSmartLinkDeviceWithWiFiSSID:(NSString *)ssid
password:(NSString *)password
useSimpleConfig:(BOOL)useSimpleConfig
deviceLinkIn:(DeviceLinkInBlock)deviceLinkInBlock;
/**
停止智能联机,请在设备联网成功后手动调用停止
*/
- (void)p2pStopSmartLink;
/**
AP配网。在连接到支持AP配网的设备的热点(GW_AP_XXXXXX)后,调用此方法给设备发送WiFi帐号及密码,以及要给设备初始化的管理密码
@param ssid wifi名称
@param wifiPassword wifi密码
@param devicePassword 设备密码
@param deviceReceiveBlock 设备收到WiFi信息的回调,准备断开AP热点去连接WiFi。
@param deviceLinkInBlock 设备连接到网络的回调
*/
- (void)p2pAPLinkDeviceWithWiFiSSID:(NSString *)ssid
wifiPassword:(NSString *)wifiPassword
devicePassword:(NSString *)devicePassword
deviceReceive:(DeviceReceiveBlock)deviceReceiveBlock
deviceLinkIn:(DeviceLinkInBlock)deviceLinkInBlock;
/**
停止AP配网。如果配网中途停止,调此方法停止发送数据,正常配网成功不需要调此方法
*/
- (void)p2pStopAPLink;
@end
+47
View File
@@ -0,0 +1,47 @@
//
/** @file GWP2PLanDevice.h @brief 局域网设备模型 */
// UDPSocket
//
// Created by apple on 17/5/2.
// Copyright © 2017年 apple. All rights reserved.
//
// 局域网搜索的返回的设备信息
#import <Foundation/Foundation.h>
#import "GWP2PDevice.h"
/**
@brief 局域网设备模型
*/
@interface GWP2PLanDevice : NSObject
/** 设备ID */
@property (nonatomic, copy) NSString *deviceId;
/** 新设备ID(重复的设备号升级) */
@property (nonatomic, copy) NSString *upgradeDeviceId;
/** 设备类型 */
@property (nonatomic, assign) GWP2PDeviceType deviceType;
/** 设备IP地址 */
@property (nonatomic, copy) NSString *ipAddress;
/** 搜索到的时间 */
@property (nonatomic, assign) NSTimeInterval lanTimeInterval;
/** 是否设置过密码 */
@property (nonatomic, assign) BOOL isInitPassword;
/** 是否支持RTSP */
@property (nonatomic, assign) NSInteger isSupportRtsp;
/** 客户ID */
@property (nonatomic, assign) NSInteger customID;
/** MAC地址12个字母 */
@property (nonatomic, copy) NSString *macAddress;
/** 设备加密功能选项 */
@property (nonatomic, assign) uint64_t deviceFuciton;
@end
@@ -0,0 +1,80 @@
//
/** @file GWP2PPlaybackPlayer.h @brief 回放播放器 */
// P2PSDK
//
// Created by zengyuying on 17/3/31.
// Copyright © 2017年 gwell. All rights reserved.
//
//
#import "GWP2PPlayer.h"
#import "GWP2PDevice.h"
#import "GWP2PClient+Record.h"
/**
@brief 回放播放器,继承自GWP2PPlayer
*/
@interface GWP2PPlaybackPlayer : GWP2PPlayer
/** 当前播放的文件 */
@property (nonatomic, readonly) GWPlaybackFileModel *playbackFile;
/** 当前播放的时间,单位:微秒μs,可监听此时间变化更新播放进度条*/
@property (nonatomic, readonly) uint64_t currentTime;
/** 当前文件总时长,单位:微秒μs,开始播放时设备端会返回这个时间,正常情况下与playbackFile中的time是一样的,建议使用这个totalTime*/
@property (nonatomic, readonly) uint64_t totalTime;
/** 回放的状态 */
@property (nonatomic, readonly) GWP2PPlaybackState playbackState;
/**
播放设备远程录像文件,原理和监控设备是一样的,需要先呼叫连接设备
@param deviceId 设备ID
@param password 设备密码
@param playbackFile 回放文件对象,由GWP2PClient+Record中的获取回放文件列表方法获取
@param callingBlock 正在呼叫回调,详见block定义注释
@param acceptBlock 接收呼叫回调,详见block定义注释
@param rejectBlock 拒绝连接回调,详见block定义注释
@param readyBlock 连接就绪回调,详见block定义注释
*/
- (void)p2pCallPlaybackFileWithDeviceId:(NSString *)deviceId
password:(NSString *)password
playbackFile:(GWPlaybackFileModel *)playbackFile
calling:(P2PCallingBlock)callingBlock
accept:(P2PAcceptBlock)acceptBlock
reject:(P2PRejectBlock)rejectBlock
ready:(P2PReadyBlock)readyBlock;
/**
播放远程录像文件,如果已经连接上设备,调用此方法即可快速切换回放文件
@param playbackFile 回放文件对象
*/
- (void)p2pPlayPlaybackFile:(GWPlaybackFileModel *)playbackFile;
/**
暂停或者继续播放
*/
- (void)p2pPauseOrResume;
/**
快进或者取消快进
*/
- (void)p2pFastForwardOrCancel;
/**
指定播放时间
@param seekTime 播放时间(单位是微秒,如要跳到第45秒,传入45*1000*1000)
*/
- (void)p2pSeekToTime:(uint64_t)seekTime;
@end
+167
View File
@@ -0,0 +1,167 @@
//
/** @file GWP2PPlayer.h @brief 播放器基类与其协议 */
// P2PSDK
//
// Created by zengyuying on 17/3/8.
// Copyright © 2017年 gwell. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import "GWP2PPlayerDefine.h"
@class GWP2PPlayer;
/**
正在呼叫设备
@param parameters 目前只有一个参数. kP2PCallingIsSameDomainKey:设备与手机是否在同个局域网
*/
typedef void (^P2PCallingBlock)(NSDictionary *parameters);
/**
设备接受了呼叫请求,回调相关参数
@param parameters kP2PCallAcceptIsVideo960PKey:视频是否960P
kP2PCallAcceptIsVideoWidescreenKey:是否是否宽屏(16:9)
*/
typedef void (^P2PAcceptBlock)(NSDictionary *parameters);
/**
设备拒绝了呼叫,回调错误详情
@param error 错误枚举,详见枚举中的注释
@param errorCode 错误码,连接超时时会返回这个错误,详细说明连接超时的原因,详见错误枚举下方的说明
*/
typedef void (^P2PRejectBlock)(GWP2PCallError error, NSString *errorCode);
/**
连接上设备并准备就绪,开始显示画面
*/
typedef void (^P2PReadyBlock)(void);
/**
截图完成回调
@param screenshot UIImage格式截图
@param timeInterval 截图时间戳,注意仅对鱼眼设备有效,转换成时间格式使用时区[NSTimeZone timeZoneForSecondsFromGMT:0]
*/
typedef void (^ScreenshotCompletionBlock)(UIImage *screenshot, NSTimeInterval timeInterval);
/**
@brief 播放器基类的协议
*/
@protocol GWP2PPlayerProtocol <NSObject>
/**
player内部对view添加了手势,每次手势触发时回调
普通设备:swipe(上下左右)
鱼眼设备:tap(单击\双击),pan,pinch
@param gesture 手势
*/
- (void)p2pPlayer:(GWP2PPlayer *)player recieveGestureRecognizer:(UIGestureRecognizer *)gesture;
/**
更新时间戳
@param player 播放器对象
@param pts 显示时间戳(Presentation Time Stamp)
*/
- (void)p2pPlayer:(GWP2PPlayer *)player updatePTS:(NSTimeInterval)pts;
@end
/**
@brief 播放器基类
*/
@interface GWP2PPlayer : NSObject
/** 播放器ViewController */
@property (nonatomic, readonly) UIViewController *viewController;
/** 是否正在播放, 从call开始就为YES,播放中断置为NO */
@property (nonatomic, assign, readonly) BOOL isPlaying;
/** 无声播放 */
@property (nonatomic, assign, getter=isSilent) BOOL silent;
/** 静音, 当`silent=YES`时`mute=YES` */
@property (nonatomic, assign, getter=isMute) BOOL mute;
/** 手势开关 默认开启 (usePano=YES时无效)*/
@property (nonatomic, assign) BOOL enableGesture;
/** 代理 */
@property (nonatomic, weak) id <GWP2PPlayerProtocol> delegate;
/** 是否使用新全景模式(半球,圆柱,画卷,四分,混合,广角)播放 */
@property (nonatomic, assign, readonly) BOOL usePano;
/** 当前全景视频pts,转化成时间戳(秒)=pts/(1000*1000) */
@property (nonatomic, assign, readonly) uint64_t panoPTS;
/**
构造方法
@param usePano 是否使用新全景进行播放。目前所有情况都使用新全景库播放,此接口现在等价于默认的init方法。
@return 实例
*/
- (instancetype)initWithUsingPano:(BOOL)usePano;
/**
停止监控/视频/回放
*/
- (void)p2pStop;
/**
截图
@param completionBlock 回调
*/
- (void)p2pScreenshot:(ScreenshotCompletionBlock)completionBlock;
/**
开始录制视频,当播放器销毁、视频监控中断、切换分辨率时,都会自动停止录制并保存视频
@param savePath 视频保存路径
@param eventHandler 录制开始、异常等事件回调
@param saveAlbum 是否将录制的视频保存到系统相册,将会占用应用沙盒和系统相册两份空间
*/
- (void)startRecordWithSavePath:(NSString *)savePath saveToPhotosAlbum:(BOOL)saveAlbum eventHandler:(MP4RecordEventHandler)eventHandler;
/**
停止录制视频并保存视频
*/
- (void)stopRecord;
/**
设置全景模式
*/
@property (nonatomic, assign) PanoMode showMode;
/**
设置全景切边参数,主要是中心点偏移、边缘剪切
@param x 切边中心点x,范围0~1
@param y 切边中心点y,范围0~1
@param ratio 边缘切边比例,范围0~1
*/
- (void)setCutParam:(float)x y:(float)y ratio:(float)ratio;
/**
设置开启关闭自动巡航
*/
- (void)setWideAngleAuto:(BOOL)isAuto ;
@end
+179
View File
@@ -0,0 +1,179 @@
//
// GWP2PPlayerDefine.h
// GWP2P
//
// Created by WangShunXing on 2019/3/5.
// Copyright © 2019 apple. All rights reserved.
//
#ifndef GWP2PPlayerDefine_h
#define GWP2PPlayerDefine_h
/**
* 呼叫设备回调的参数字典的key常量声明
*/
extern NSString * const kP2PCallingIsSameDomainKey; //与对方是否在同个局域网
extern NSString * const kP2PCallAcceptIsVideo960PKey; //对方视频是否960P
extern NSString * const kP2PCallAcceptIsVideoWidescreenKey; //对方视频是否宽屏(16:9)
extern NSString * const kP2PCallAcceptVideoScaleKey; //视频画面边缘切边比例,NSNumber(float),范围0~1
extern NSString * const kP2PCallAcceptVideoCenterKey; //视频画面中心点, NSValue(CGPoint),范围(0,0)~(1,1)
typedef NS_ENUM(NSUInteger, GWP2PCallWay) {//呼叫方式
GWP2PCallWayInitiative = 0, //主动呼叫设备
GWP2PCallWayPassive, //被动呼叫,指NPC设备呼叫APP(通过用户ID)
};
typedef NS_ENUM(NSUInteger, GWP2PCallType) {//呼叫类型(主动呼叫设备时)
GWP2PCallTypeMonitor = 0, //监控
GWP2PCallTypeVideo, //视频通话(NPC设备)
GWP2PCallTypePlayback, //回放
};
typedef NS_ENUM(NSUInteger, GWP2PCallStatus) { //呼叫状态
GWP2PCallStatusNone = 0, //默认
GWP2PCallStatusCalling, //呼叫中
GWP2PCallStatusRejected, //呼叫被对方拒绝
GWP2PCallStatusAccepted, //呼叫被对方接受
GWP2PCallStatusReady, //连接准备就绪
};
typedef NS_ENUM(NSUInteger, GWP2PPlaybackState) { //回放状态
GWP2PPlaybackStateNone, //默认
GWP2PPlaybackStatePause, //暂停
GWP2PPlaybackStatePlaying, //正常播放中
GWP2PPlaybackStateFastForward, //快进中
GWP2PPlaybackStateStop //停止
};
/**
呼叫失败的错误枚举
*/
typedef NS_ENUM(NSUInteger, GWP2PCallError) {
GWP2PCallErrorNone = 0, //0无原因
GWP2PCallErrorDesidNotEnable, //1对方的ID 被禁用
GWP2PCallErrorDesidOverDate, //2对方的ID 过期了
GWP2PCallErrorDesidNotAcitve, //3对方的ID 尚未激活
GWP2PCallErrorDesidOffline, //4对方离线
GWP2PCallErrorDesidBusy, //5对方忙线中
GWP2PCallErrorDesidPowerDown, //6对方已关机
GWP2PCallErrorNoHelper, //7没有找到协助人
GWP2PCallErrorHangUp, //8对方已经挂断
GWP2PCallErrorTimeout, //9连接超时
GWP2PCallErrorInterError, //10内部错误
GWP2PCallErrorRingTimeout, //11无人接听
GWP2PCallErrorPwdWrong, //12密码错误(在远程监控时用到密码,在视频通话是不需要)
GWP2PCallErrorConnFail,
GWP2PCallErrorNotSupport,
};
/**
CallErrorCode 呼叫失败(连接超时)还会返回具体错误的16进制errorCode
由服务器定义,更多可在http://gwellserver2:8008/进行查询
*/
//0x2010200A UDP转发服务器握手失败
//0x20102009 连接tcp转发服务器成功,等待配对失败
//0x20102008 连接tcp转发服务器失败
//0x20102007 申请多路径传输,握手超时
//0x20102006 申请多路径传输超时
//0x20102005 局域网点对点连接失败
//0x20102004 发出呼叫,等待目标ID的地址信息超时
//0x20102003 传输数据中出现传输超时
//0x20102002 连接状态准备好,尝试传输数据超时
/**
全景模式
- PM_NONE: 黑屏,切换此模式无效
- PM_HALF_SPHERE: 半球
- PM_CYLINDER: 圆柱
- PM_SCROLL: 画卷
- PM_FOUR_SCREEN: 四画面
- PM_MIX: 混合
- PM_WIDE_ANGLE: 广角
- PM_QUAD: 四边形,适用于普通监控
*/
typedef NS_ENUM(NSUInteger, PanoMode) {
PM_NONE,
PM_HALF_SPHERE,
PM_CYLINDER,
PM_SCROLL,
PM_FOUR_SCREEN,
PM_MIX,
PM_WIDE_ANGLE,
PM_QUAD
};
/**
录制过程中的事件
*/
typedef NS_ENUM(NSUInteger, MP4RecordEvent) {
MP4RecordEventStart, /**< 等到视频流关键帧,开始录像 */
MP4RecordEventStop, /**< 停止录像 */
MP4RecordEventRatioChanged, /**< 切换了视频分辨率,停止录像 */
};
/**
定义录制过程中的事件回调代码块
*/
typedef void(^MP4RecordEventHandler)(MP4RecordEvent stopEvent);
/**
控制镜头转向
*/
typedef NS_ENUM(NSUInteger, GWP2PPTZDirection) {
GWP2PPTZDirectionLeft = 0, //左
GWP2PPTZDirectionRight, //右
GWP2PPTZDirectionUp, //上
GWP2PPTZDirectionDown, //下
};
/**
视频清晰度
*/
typedef NS_ENUM(NSUInteger, GWP2PPTZDefinition) {
GWP2PPTZDefinitionLD = 0, //流畅,NPC:320*240 IPC:320*180
GWP2PPTZDefinitionSD, //标清,NPC:640*480 IPC:640*360
GWP2PPTZDefinitionHD, //高清,NPC:None IPC:1280*720
};
/**
播放控制回调
*/
typedef NS_ENUM(NSUInteger, GWP2PPlaybackControl) {
GWP2PPlaybackControlPlay, //播放
GWP2PPlaybackControlPause, //暂停
GWP2PPlaybackControlStop, //停止
GWP2PPlaybackControlFileEnd, //文件播放完毕
GWP2PPlaybackControlFastForward, //快进
GWP2PPlaybackControlFastForwardCancel, //取消快进
GWP2PPlaybackControlNextFile, //切换文件播放
GWP2PPlaybackControlSeekTime, //指定时间播放
};
/**
汇讯视通控制镜头
*/
typedef NS_ENUM(NSUInteger, GWP2PHXVisonDirection) {
GWP2PHXVisonDirectionLeft = 0, //左
GWP2PHXVisonDirectionRight, //右
GWP2PHXVisonDirectionUp, //上
GWP2PHXVisonDirectionDown, //下
GWP2PHXVisonDirectionShort, //缩小
GWP2PHXVisonDirectionLong, //放大
GWP2PHXVisonDirectionStop, //停止
};
/**
汇讯视通3D手势
*/
typedef NS_ENUM(NSUInteger, GWP2PHXVison3DGestureZoomType)
{
GWP2PHXVison3DGestureZoomTele = 0, //3D放大
GWP2PHXVison3DGestureZoomWide, //3D缩小
GWP2PHXVison3DGestureZoomLocate, //3D定位移动
};
#endif /* GWP2PPlayerDefine_h */
+188
View File
@@ -0,0 +1,188 @@
//
/** @file GWP2PVideoPlayer.h @brief 监控和视频通话的播放器 */
// P2PSDK
//
// Created by zengyuying on 17/4/7.
// Copyright © 2017年 gwell. All rights reserved.
//
#import "GWP2PPlayer.h"
#import "GWP2PPlayerDefine.h"
#import "GWP2PDevice.h"
@class GWP2PVideoPlayer;
/**
NPC设备主动呼叫的通知
参数有设备ID和是否在同个局域网
userInfo:@{@"deviceId":deviceId,kP2PCallingIsSameDomainKey:@(BOOL)}
*/
extern NSString * const kGWP2PDeviceIsCallingNotification;
/**
@brief GWP2PVideoPlayerProtocol协议包含监控时的设备状态信息的回调,按需要选择性实现
*/
@protocol GWP2PVideoPlayerProtocol <GWP2PPlayerProtocol>
@optional
/**
观看人数变化回调
触发场景:
1.呼叫设备后开始监控时
2.观看人数变化时(其他监控者加入或者断开)
3.高清-标清,高清-流畅,两种情况的分辨率互相切换时(标清-流畅切换不触发)
@param currentNumber 当前观看人数
*/
- (void)p2pVideoPlayer:(GWP2PVideoPlayer *)player numberOfAudiencesChange:(NSUInteger)currentNumber;
/**
监控网速发生改变,每秒回调一次
@param player 播放器
@param speed 网速
*/
- (void)p2pVideoPlayer:(GWP2PVideoPlayer *)player networkSpeedChanged:(NSInteger)speed;
/**
远程录像(SD卡录像)状态发送改变
@param parameters 参数 @"isRemoteRecording":@(BOOL),是否正在录像
@"hasSDCard":@(BOOL),是否有SD卡
@"isRecordFalse":@(BOOL),是否录制失败,可能SD卡损坏
*/
- (void)p2pVideoPlayer:(GWP2PVideoPlayer *)player remoteSDCardRecordStateChange:(NSDictionary *)parameters;
/**
布防状态发生改变
@param isDefenceOn 改变后的布防状态. YES:布防状态,NO:撤防状态
*/
- (void)p2pVideoPlayer:(GWP2PVideoPlayer *)player defenceStateChange:(BOOL)isDefenceOn;
@end
/**
@brief 监控和视频通话的播放器,继承自GWP2PPlayer
*/
@interface GWP2PVideoPlayer : GWP2PPlayer
/** 代理 */
@property (nonatomic, weak) id <GWP2PVideoPlayerProtocol> delegate;
/** 手势操作水平翻转 */
@property (nonatomic, assign) BOOL isFlipHorizontal;
/** 手势操作垂直翻转 */
@property (nonatomic, assign) BOOL isFlipVertical;
/**
呼叫一个设备,进行监控
@param deviceId 设备ID
@param password 设备密码
@param definition 默认清晰度
@param callingBlock 正在呼叫回调,详见block定义注释
@param acceptBlock 接收呼叫回调,详见block定义注释
@param rejectBlock 拒绝连接回调,详见block定义注释
@param readyBlock 连接就绪回调,详见block定义注释
*/
- (void)p2pCallDeviceWithDeviceId:(NSString *)deviceId
password:(NSString *)password
definition:(GWP2PPTZDefinition)definition
calling:(P2PCallingBlock)callingBlock
accept:(P2PAcceptBlock)acceptBlock
reject:(P2PRejectBlock)rejectBlock
ready:(P2PReadyBlock)readyBlock;
/**
呼叫一个NPC设备,进行视频对讲,目前只有NPC一种设备存在对讲视频对讲功能,所以不需要设备类型等参数
@param deviceId 设备ID
@param password 设备密码
@param callingBlock 正在呼叫回调,详见block定义注释
@param acceptBlock 接收呼叫回调,详见block定义注释
@param rejectBlock 拒绝连接回调,详见block定义注释
@param readyBlock 连接就绪回调,详见block定义注释
*/
- (void)p2pCallNPCDeviceWithDeviceId:(NSString *)deviceId
password:(NSString *)password
calling:(P2PCallingBlock)callingBlock
accept:(P2PAcceptBlock)acceptBlock
reject:(P2PRejectBlock)rejectBlock
ready:(P2PReadyBlock)readyBlock;
/**
接受当前的设备呼叫请求
@param acceptBlock 接收呼叫回调,详见block定义注释
@param rejectBlock 拒绝连接回调,详见block定义注释
@param readyBlock 连接就绪回调,详见block定义注释
*/
- (void)p2pAcceptCallingWithaccept:(P2PAcceptBlock)acceptBlock
reject:(P2PRejectBlock)rejectBlock
ready:(P2PReadyBlock)readyBlock;
/**
讲话开关。开启时向设备发送麦克风音频,默认关闭。
@param enable YES:开启,NO:关闭
*/
- (void)p2pEnableSpeak:(BOOL)enable;
/**
控制摇头机镜头转向
@param direction 转动方向枚举
*/
- (void)p2pTurnDirection:(GWP2PPTZDirection)direction;
/**
设置视频清晰度
@param definition 清晰度枚举
*/
- (void)p2pSetDefinition:(GWP2PPTZDefinition)definition;
/**
控制汇讯视通镜头转向
@param direction 镜头转动方向
*/
- (void)p2pHXVsionTurnDirection:(GWP2PHXVisonDirection)direction;
/**
汇讯视通3D手势
@param zoomType 3D手势类型
@param point 手势坐标
@param size 手势大小,当定位移动时,宽高必须传0
*/
- (void)p2pHXVsionOperate3DGesture:(GWP2PHXVison3DGestureZoomType)zoomType point:(CGPoint)point size:(CGSize)size;
/**
开始摄像
@param view 显示画面视图
*/
- (void)startCameraWithAddView:(UIView *)view;
/**
停止摄像
*/
- (void)stopCamera;
/**
切换摄像镜头
*/
- (void)switchCamera;
@end
+59
View File
@@ -0,0 +1,59 @@
//
// MD5Manager.h
// 2cu
//
// Created by wutong on 15/12/16.
// Copyright © 2015年 guojunyi. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface MD5Manager : NSObject
/*
函数功能: 密码转换
szPassword: 130位字符串
返回: 10位以下的unsigned int型数字
*/
+(unsigned int)GetTreatedPassword:(const char*) szPassword;
/*
函数功能:md5加密 兼容rtsp密码时会用到
szInputBuffer: 630位字符串 (如果输入字符串位数不在6~30之间,或者输入10位以下的纯数字,则不作任何处理,直接返回NO)
szOutputBuffer: 32个字节的字符串,用来保存md5密码后的数据
返回: YES成功加密,结果保存在szOutputBuffer中;NO加密失败
*/
+(BOOL)GetMD5PasswordWithSrc:(const char*)szInputBuffer Dst:(char*)szOutputBuffer;
/*
函数功能:服务器保存的设备密码的解密函数(应用场景:从服务器获取设备列表)
szSrcData:密文
szUserID:登陆账号关联的ID
szOutputBuffer:用于保存明文的缓存,由用户提供
iLength:用于保存明文的缓存的长度
返回值:0-成功 1-因输出缓存太小而执行失败
*/
+(unsigned int)PassswrodDecrypt:(char*)szSrcData UserID:(char*)szUserID Dst:(char*)szOutputBuffer Len:(unsigned int)iLength;
/*
函数功能:服务器保存的设备密码的加密函数(应用场景:上传设备列表到服务器)
szSrcData:明文
szUserID:登陆账号关联的ID
szOutputBuffer:用于保存密文的缓存,由用户提供
iLength:用于保存密文的缓存的长度
返回值:0-成功 1-因输出缓存太小而执行失败
*/
+(unsigned int)PasswordEncrypt:(char*)szSrcData UserID:(char*)szUserID Dst:(char*)szOutputBuffer Len:(unsigned int)iLength;
/*
函数功能:base64解密,扫描二维码用到。
*/
+(char *)lib_base64_decode:(const char* )data len:(int)data_len;
/**
加密设备ID,用于绑定主人验证
*/
+ (UInt64)getSecretDeviceIdWithDeviceId:(NSString *)deviceId;
@end
Binary file not shown.
+6
View File
@@ -0,0 +1,6 @@
framework module GWP2P {
umbrella header "GWP2P.h"
export *
module * { export * }
}
+496
View File
@@ -0,0 +1,496 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>files</key>
<dict>
<key>Headers/GWNet.h</key>
<data>
N5pUkPs/Hy2Ho7CTNdJM9v0GRz0=
</data>
<key>Headers/GWNetError.h</key>
<data>
XuUZaxW3FCFUD7kCae84h1j4pZM=
</data>
<key>Headers/GWP2P.h</key>
<data>
z+OqKE12S658by3dE2WRiaJTBEU=
</data>
<key>Headers/GWP2PClient+APMode.h</key>
<data>
YWt9QyVQpV7H7yUIgxv9XF970ZQ=
</data>
<key>Headers/GWP2PClient+Alarm.h</key>
<data>
DJxIDvTazePmEIyx1zw3Slq4S4k=
</data>
<key>Headers/GWP2PClient+Defense.h</key>
<data>
6zVrEuqquHTWEi6JVxlqsemeWSs=
</data>
<key>Headers/GWP2PClient+DeviceInfomation.h</key>
<data>
GbWYbr66mmA7NUaBI4U60Bj0h+c=
</data>
<key>Headers/GWP2PClient+GarageLight.h</key>
<data>
wzZkqszej4Vt5j8CpUVj0GK5Kp4=
</data>
<key>Headers/GWP2PClient+HXVision.h</key>
<data>
pOIg8MCG63LtQgHpcJ9AoCyFNcI=
</data>
<key>Headers/GWP2PClient+PictureAndSound.h</key>
<data>
UpLweCptlUapxU4NycpkJR0wEsU=
</data>
<key>Headers/GWP2PClient+Record.h</key>
<data>
qysAbglaNAte6kAvCsuJo2b1b8s=
</data>
<key>Headers/GWP2PClient+SceneMode.h</key>
<data>
Hy2dYM269SmcX0k0DhF1dfsuiQ4=
</data>
<key>Headers/GWP2PClient+Sensor.h</key>
<data>
RqSbrK4aKGQI1YWKjt3a0UmuTKI=
</data>
<key>Headers/GWP2PClient+WhiteLight.h</key>
<data>
9J4uDjnYUHd7HUAuaYfEDz617jU=
</data>
<key>Headers/GWP2PClient.h</key>
<data>
wfW/FSLqnWLcNollxT+5k9p0xYI=
</data>
<key>Headers/GWP2PDefine.h</key>
<data>
r9RrEnUXS7+K+O5UH0HbOWOqfOk=
</data>
<key>Headers/GWP2PDevice.h</key>
<data>
RgsP3k7cqDz9MKc/o+C6MkJ01ws=
</data>
<key>Headers/GWP2PDeviceLinker.h</key>
<data>
0JxhyxTXFCy6G9ANACOwexCritE=
</data>
<key>Headers/GWP2PLanDevice.h</key>
<data>
RXa69pb9SgCjBkt6JUle2Om5fgM=
</data>
<key>Headers/GWP2PPlaybackPlayer.h</key>
<data>
iykJtuJYz3sGX/SbtOolvpf9tq8=
</data>
<key>Headers/GWP2PPlayer.h</key>
<data>
BVS74XH9oIh1SzC2yr6laNrGTzc=
</data>
<key>Headers/GWP2PPlayerDefine.h</key>
<data>
fcuQv9+oqRae0wAdcXWGDOAEFlw=
</data>
<key>Headers/GWP2PVideoPlayer.h</key>
<data>
lOAShVbPkdpBQ+UijARKgf82rUc=
</data>
<key>Headers/MD5Manager.h</key>
<data>
AUNlmZF9J/diTQOhzm0T2eaVNZs=
</data>
<key>Info.plist</key>
<data>
qJVlMog86xUFYdTivMuZae3v5Rg=
</data>
<key>Modules/module.modulemap</key>
<data>
XcT9XFrNnzUM0pWy50W8LSAt3wk=
</data>
</dict>
<key>files2</key>
<dict>
<key>Headers/GWNet.h</key>
<dict>
<key>hash</key>
<data>
N5pUkPs/Hy2Ho7CTNdJM9v0GRz0=
</data>
<key>hash2</key>
<data>
G4QevGNQ/qXoUVMeBj8owHPjPvVVHniejAFYPsJxnj0=
</data>
</dict>
<key>Headers/GWNetError.h</key>
<dict>
<key>hash</key>
<data>
XuUZaxW3FCFUD7kCae84h1j4pZM=
</data>
<key>hash2</key>
<data>
ysqvbpkuGegIXAq56wPNE0OE5H9jUvX0N0v5Z/wnnqw=
</data>
</dict>
<key>Headers/GWP2P.h</key>
<dict>
<key>hash</key>
<data>
z+OqKE12S658by3dE2WRiaJTBEU=
</data>
<key>hash2</key>
<data>
dCgEpTWpQ8DXxE5/SO4IMBr3pBGY7pJIvEmZLOvOZCs=
</data>
</dict>
<key>Headers/GWP2PClient+APMode.h</key>
<dict>
<key>hash</key>
<data>
YWt9QyVQpV7H7yUIgxv9XF970ZQ=
</data>
<key>hash2</key>
<data>
82Tv12fHc/l4At8i/gM6aaO8JuxyvcrvETTgy+Afki4=
</data>
</dict>
<key>Headers/GWP2PClient+Alarm.h</key>
<dict>
<key>hash</key>
<data>
DJxIDvTazePmEIyx1zw3Slq4S4k=
</data>
<key>hash2</key>
<data>
XBMvs4Zk38Q/FY/h+jWQwQSAAm9KbKFLW8LpZ/Bv+DM=
</data>
</dict>
<key>Headers/GWP2PClient+Defense.h</key>
<dict>
<key>hash</key>
<data>
6zVrEuqquHTWEi6JVxlqsemeWSs=
</data>
<key>hash2</key>
<data>
Qxne7/XR3Nc14rWHGwHTohf8bKLm/AyPiCuFpEwyc5s=
</data>
</dict>
<key>Headers/GWP2PClient+DeviceInfomation.h</key>
<dict>
<key>hash</key>
<data>
GbWYbr66mmA7NUaBI4U60Bj0h+c=
</data>
<key>hash2</key>
<data>
x9/09sgHeTyP+LND/0ilr94x7y+QbAA92lX28uhWEEY=
</data>
</dict>
<key>Headers/GWP2PClient+GarageLight.h</key>
<dict>
<key>hash</key>
<data>
wzZkqszej4Vt5j8CpUVj0GK5Kp4=
</data>
<key>hash2</key>
<data>
n9H5jfgOS9nJ7gEGNu/YaG1n8PHxb3h4mukeUw/+V5c=
</data>
</dict>
<key>Headers/GWP2PClient+HXVision.h</key>
<dict>
<key>hash</key>
<data>
pOIg8MCG63LtQgHpcJ9AoCyFNcI=
</data>
<key>hash2</key>
<data>
oi/0YLKo9ylqnNiPKdGKCAX4UWJsGny8kdSl6PZhVWA=
</data>
</dict>
<key>Headers/GWP2PClient+PictureAndSound.h</key>
<dict>
<key>hash</key>
<data>
UpLweCptlUapxU4NycpkJR0wEsU=
</data>
<key>hash2</key>
<data>
YsAo3oH7aawUP8nqlQy9YcdQJYy+gex0dZeA4fybWNg=
</data>
</dict>
<key>Headers/GWP2PClient+Record.h</key>
<dict>
<key>hash</key>
<data>
qysAbglaNAte6kAvCsuJo2b1b8s=
</data>
<key>hash2</key>
<data>
Fav1TFzUIHgOkvzrFrVy+OWRTO1K0TGy9Xqdoavpo24=
</data>
</dict>
<key>Headers/GWP2PClient+SceneMode.h</key>
<dict>
<key>hash</key>
<data>
Hy2dYM269SmcX0k0DhF1dfsuiQ4=
</data>
<key>hash2</key>
<data>
0dgzLlfhUDZTBxIkRFcZ/7FZZK6uSO9ia8H6ou2PiJk=
</data>
</dict>
<key>Headers/GWP2PClient+Sensor.h</key>
<dict>
<key>hash</key>
<data>
RqSbrK4aKGQI1YWKjt3a0UmuTKI=
</data>
<key>hash2</key>
<data>
7Mi6k1ye8HIp1lquPjGw1YZLtlv5nYZbBPfxZisDPT4=
</data>
</dict>
<key>Headers/GWP2PClient+WhiteLight.h</key>
<dict>
<key>hash</key>
<data>
9J4uDjnYUHd7HUAuaYfEDz617jU=
</data>
<key>hash2</key>
<data>
L4tdz86JCfSfMpiS21NXZX4st6+3Oy2gkpGzEB2ZY+4=
</data>
</dict>
<key>Headers/GWP2PClient.h</key>
<dict>
<key>hash</key>
<data>
wfW/FSLqnWLcNollxT+5k9p0xYI=
</data>
<key>hash2</key>
<data>
OSfHL++HoGY8D/KgFmrpfvbWwxBdh0o3Tabc/tdLCRw=
</data>
</dict>
<key>Headers/GWP2PDefine.h</key>
<dict>
<key>hash</key>
<data>
r9RrEnUXS7+K+O5UH0HbOWOqfOk=
</data>
<key>hash2</key>
<data>
Ob8/WyjnDAv6VByM99FsjKfTvFdZI0BZ2D613tzhiSM=
</data>
</dict>
<key>Headers/GWP2PDevice.h</key>
<dict>
<key>hash</key>
<data>
RgsP3k7cqDz9MKc/o+C6MkJ01ws=
</data>
<key>hash2</key>
<data>
li6sGL0KHKeXgwn2DMy1d5sNaf5K4xI586VfMdVeFRk=
</data>
</dict>
<key>Headers/GWP2PDeviceLinker.h</key>
<dict>
<key>hash</key>
<data>
0JxhyxTXFCy6G9ANACOwexCritE=
</data>
<key>hash2</key>
<data>
GGQjb2C8KCwBno1XtmFdP0mELm8psWwvljEnt4vQRww=
</data>
</dict>
<key>Headers/GWP2PLanDevice.h</key>
<dict>
<key>hash</key>
<data>
RXa69pb9SgCjBkt6JUle2Om5fgM=
</data>
<key>hash2</key>
<data>
Rl1ulWSt760pG+kTzP8pIP7hmZc5O6SgoTOFPXgMQ2Q=
</data>
</dict>
<key>Headers/GWP2PPlaybackPlayer.h</key>
<dict>
<key>hash</key>
<data>
iykJtuJYz3sGX/SbtOolvpf9tq8=
</data>
<key>hash2</key>
<data>
Jqb9K/MeeBrysIqt+gFWF+p54P41nwsM3dhu2NDc/BU=
</data>
</dict>
<key>Headers/GWP2PPlayer.h</key>
<dict>
<key>hash</key>
<data>
BVS74XH9oIh1SzC2yr6laNrGTzc=
</data>
<key>hash2</key>
<data>
Knlii/rz3zOtRep6fo7zWwqJHfOVDok/waC4U3BMUNQ=
</data>
</dict>
<key>Headers/GWP2PPlayerDefine.h</key>
<dict>
<key>hash</key>
<data>
fcuQv9+oqRae0wAdcXWGDOAEFlw=
</data>
<key>hash2</key>
<data>
Fnf+HHRAxj+8iepgneNvleh8DmPWWThZSDSLOctYFy8=
</data>
</dict>
<key>Headers/GWP2PVideoPlayer.h</key>
<dict>
<key>hash</key>
<data>
lOAShVbPkdpBQ+UijARKgf82rUc=
</data>
<key>hash2</key>
<data>
Otq4vl7WvvjiyuFaYsRLgvOpz0bS0SyFQzlZjqYl0Ec=
</data>
</dict>
<key>Headers/MD5Manager.h</key>
<dict>
<key>hash</key>
<data>
AUNlmZF9J/diTQOhzm0T2eaVNZs=
</data>
<key>hash2</key>
<data>
Y6AKHotGffuSL2JJvsdQ+xggWQ53jO07IwE2uckzWss=
</data>
</dict>
<key>Modules/module.modulemap</key>
<dict>
<key>hash</key>
<data>
XcT9XFrNnzUM0pWy50W8LSAt3wk=
</data>
<key>hash2</key>
<data>
mnXQFIUc7B+/60q91QbFv5vHNA0qnQJxxr3exyl8oJU=
</data>
</dict>
</dict>
<key>rules</key>
<dict>
<key>^</key>
<true/>
<key>^.*\.lproj/</key>
<dict>
<key>optional</key>
<true/>
<key>weight</key>
<real>1000</real>
</dict>
<key>^.*\.lproj/locversion.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>1100</real>
</dict>
<key>^Base\.lproj/</key>
<dict>
<key>weight</key>
<real>1010</real>
</dict>
<key>^version.plist$</key>
<true/>
</dict>
<key>rules2</key>
<dict>
<key>.*\.dSYM($|/)</key>
<dict>
<key>weight</key>
<real>11</real>
</dict>
<key>^</key>
<dict>
<key>weight</key>
<real>20</real>
</dict>
<key>^(.*/)?\.DS_Store$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>2000</real>
</dict>
<key>^(Frameworks|SharedFrameworks|PlugIns|Plug-ins|XPCServices|Helpers|MacOS|Library/(Automator|Spotlight|LoginItems))/</key>
<dict>
<key>nested</key>
<true/>
<key>weight</key>
<real>10</real>
</dict>
<key>^.*</key>
<true/>
<key>^.*\.lproj/</key>
<dict>
<key>optional</key>
<true/>
<key>weight</key>
<real>1000</real>
</dict>
<key>^.*\.lproj/locversion.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>1100</real>
</dict>
<key>^Base\.lproj/</key>
<dict>
<key>weight</key>
<real>1010</real>
</dict>
<key>^Info\.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>20</real>
</dict>
<key>^PkgInfo$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>20</real>
</dict>
<key>^[^/]+$</key>
<dict>
<key>nested</key>
<true/>
<key>weight</key>
<real>10</real>
</dict>
<key>^embedded\.provisionprofile$</key>
<dict>
<key>weight</key>
<real>20</real>
</dict>
<key>^version\.plist$</key>
<dict>
<key>weight</key>
<real>20</real>
</dict>
</dict>
</dict>
</plist>