概念
SDK内部事件回调
这是一个 struct TciCB 结构, 包含多个回调函数成员,用于处理sdk内部事件。
例如:登录状态通知(on_status)、升级通知、获取图片(snapshot)、能力查询(get_feature)等。
使用 TciSetCallback()来注册.
APP命令回调
这个回调处理用户在APP上的操作请求。使用 TciSetCmdHandler() 注册。
请求和所需应答的内容的描述参见 P2P命令及其数据结构. (TgCloudCmd.h 和 TgCloudCmdEx.h)
设备能力
APP会查询设备能力,根据能力展示对应的UI.
摄像机在sdk事件回调的 TciCB::get_feature() 成员里,返回设备的能力查询.
能力查询参数和返回值的详细描述在 设备能力描述
设备绑定(注册)状态
设备要绑定到用户才能正常使用。平台和设备固件都有(要)记录绑定标志。 固件记录为未绑定(新机或复位)时,要走绑定流程. 绑定成功会在on_status()里收到 STATUS_LOGON 状态, 固件要设置本地标志(以后每次重启都会收到 STATUS_LOGON, 所以只需保存一次) 固件记录为绑定但平台为未绑定(设备离线时用户在App端解绑), 会收到 STATUS_DELETED 状态,设备要清除保存的标志并复位重启
SDK调用流程
一般客户/一般设备
- 包含头文件 TgCloudApi.h
- 调用 TciSetCallback(const struct TciCB *cbs) 注册sdk事件回调函数集合.。
- 调用 TciSetCmdHandler(const TGCMDHANDLER cb) 注册用户命令处理回调函数。
- 如果愿意, 可以调用 TciSetLogOption() 禁用SDK日志输出到控制台和设置SDK日志大小。这不是必需的
- 调用 TciInit() 初始化SDK
- 本地保存的设备否添加标志 isRegistered = ReadRegistrationFlagFromFlash();
- 当前连接方式 ConnectionWay = WiFi or Lan(有线或4G)
- 如果 isRegistered==0 && ConnectionWay==WiFi, 设置wifi模块进入AP模式,调用 TciConfigWifi(GWM_AP) 配置wifi。
如果同时指定 GWM_QRCODE 标志,sdk会启动扫描二维码的功能。在APP上用AP方式或让设备扫描APP生成的二维码给设备配网。
TciConfigWifi()会阻塞直到配网成功。然后调用 TciStart(0, NNN)。
- 如果 isRegistered==0 && ConnectionWay==Lan, 先配置本地网络,然后调用 TciStart(0, NNN).
在用APP扫描设备ID的二维码来添加设备。
- 如果 isRegistered != 0, 配置本地网络,调用 TciStart(1, NNN)
- 如果 !isRegistered 并且在 on_status 回调收到 STATUS_LOGON, 设置 isRegistered=1, 并保存到flash
- 任何时候在 on_status 回调收到 STATUS_DELETED,清除 isRegistered 标志和其它设置,设备进入复位状态
- 调用 TciSendFrameEx() 向sdk传送音视频
- 有报警事件发生和事件结束时,调用 TciSetEventEx() 来通知SDK.
SDK调用流程
特殊情况
从 TciConfigWifi()到 TciStart(),sdk内部是有数据要传递的。但有的硬件(例如WiFi模块
为 MT7601, 同时不能对WiFi模块硬复位)配置,在从AP模切换到STA模式时系统必须重启。
这时需要:
- 在 TciConfigWifi() 后调用 TciGetRegisterConfiguration() 把待传递的数据从sdk内部取出来保存
- 重启后略过 TciConfigWifi(),读取保存的数据调用 TciSetRegisterConfiguration() 把数据重新传入sdk。
- 等待本地网络ok后再调用 TciStart() 完成添加操作。
RTC客户/设备免注册
这类设备使用自己的方式配网(不调用SDK的 TciConfigWifi()), 并且免去了注册流程。调用过程:
- 设备端初始化过程同上面的步骤 1~5.
- 执行 TciStart(1, NNN); 即 TciStart() 第一个参数固定为1.
免注册设备的SDK调用流程
执行上面的操作前,客户的平台要先调用探鸽平的下述接口激活设备