5.Agent Tiny
以彩灯应用举例,Agent Tiny工作原理如下:
使用场景
开发者只需实现平台抽象层接口,即可对接OceanConncet平台。
功能
Agent Tiny互联互通中间件为用户提供以下几类接口:
开发流程
Agent Tiny典型场景的开发流程:
根据Agent Tiny提供的头文件说明,实现atiny_cmd_ioctl接口。该接口有三个参数,参数cmd为命令类型,参数arg的内存空间由Agent Tiny分配,其内容填充视cmd而异,如读数据相关命令,由device侧填充,Agent Tiny使用,如写数据命令,则由agent Tiny填充,device侧使用。参数len指arg所指向的内存空间长度,device侧填充或读取时,务必防止溢出。
根据Agent Tiny提供的头文件说明,实现atiny_event_notify接口。该接口有三个参数,参数stat为事件类型,参数arg是 Agent Tiny根据事件类型,传递给device侧的具体的事件信息,len为arg长度,device侧使用时务分防止溢出。
调用atiny_init初始化Agent Tiny,获取对应的Agent Tiny句柄,开发者应处理该接口返回值,返回错误时,句柄无效。
创建一个新任务,栈大小建议不小于4K,调用atiny_bind,启动Agent Tiny。atiny_bind调用成功后不再返回,atiny_bind内部实现了Agent Tiny的主体任务。
互斥锁错误码
Agent Tiny对外接口和依赖接口,可能存在的错误,统一用以下错误码。
序号 | 定义 | 实际数值 | 描述 | 参考解决方案 |
---|---|---|---|---|
1 | ATINY_OK | 0 | 正常返回码 | |
2 | ATINY_ARG_INVALID | -1 | 非法参数 | 确保入参合法 |
3 | ATINY_BUF_OVERFLOW | -2 | 缓冲区溢出 | 确保缓冲区充足 |
4 | ATINY_MSG_CONGEST | -3 | 消息拥塞 | 暂缓数据上报 |
5 | ATINY_MALLOC_FAILED | -4 | 内存申请失败 | 检查内存是否有泄漏 |
6 | ATINY_RESOURCE_NOT_FOUND | -5 | 数据上报类型非法 | 检查数据类型是否正确 |
7 | ATINY_RESOURCE_NOT_ENOUGH | -6 | 系统资源不足 | 检查系统资源,比如信号量,套接字个数等,是否配置过少,或是否有泄漏 |
8 | ATINY_CLIENT_UNREGISTERED | -7 | AgentTiny注册失败 | 检查psk,服务器信息等是否正确 |
9 | ATINY_SOCKET_CREATE_FAILED | -8 | 网络套接字创建失败 | 检查网络配置和参数是否正确 |
平台差异性
无。
atiny_cmd_ioctl和atiny_event_notify禁止调用atiny_deinit,atiny_data_report,atiny_init,atiny_bind四个Agent Tiny对外接口,否则可能产生死锁,或其他异常。
调用atiny_deinit之前务必确认已调用atiny_bin,否则atiny_deinit将一直阻塞,调用完atiny_deinit后,对应的Agent Tiny句柄将失效,禁止再使用。
承载atiny_bind的任务栈大小建议不小于4K,任务优先级视系统情况而定,太低可能会导致接收丢包,发送延迟等现象。
实例描述
本实例实现如下流程:
实现atiny_cmd_ioctl和atiny_event_notify。
调用atiny_init初始化AgentTiny。
调用atiny_bind启动AgentTiny。
编程示例
前提条件:
在工程配置中,WITH_DTLS编译选项打开。
代码实现如下:
结果验证
- 登录OceanConncet测试平台:
https://139.159.209.89:8843/index.html#/device
请在OceanConnect平台上提前注册账号。