第三方设备SDK硬件平台移植教程

第三方设备SDK为IntoYun为物联网开发者推出的开源项目,其目的是帮助开发者快速搭建与IntoYun平台安全的数据通道,方便终端与IntoYun云端的双向通道。 项目请参考第三方设备SDK

目前SDK支持的硬件平台包括桌面PC(Linux/MacOS/Windows)ESP8266ESP32,后续我们将支持更多的硬件平台,用户也可以自己移植到其他的硬件平台。具体移植方法如下。

下载工程

请根据文档自动代码生成,随意选择一种硬件平台,自动生成工程并下载工程。

下载的工程目录说明如下:

+-- lib                             : 库目录
+-- src                             : 源文件目录
    +-- intoyun-iotkit-sdk          : 第三方设备SDK
        +-- docs                    : SDK文档
        +-- example                 : SDK示例工程
        +-- platform                : 硬件平台HAL层实现
            +-- inc                 : 硬件平台HAL层头文件
            +-- src                 : 硬件平台HAL层源文件
        +-- sdk                     : SDK 实现源码
    +-- apps                        : 用户应用代码
+-- intoyuniot.ini                  : intoyuniot配置文件
+-- README.md                       : 项目说明文件

创建硬件平台

src/intoyun-iotkit-sdk/platform/srctemplate复制并创建一个新增硬件平台的文件夹,实现新增文件夹内的HAL层接口,文件夹内文件包括:

+-- src
    +-- hal_os_interface.c              : 基础HAL层接口,需实现。
    +-- hal_tcp_interface.c             : 如果采取Mqtt通讯协议,需支持。
    +-- hal_udp_interface.c             : 如果实现CoAP通讯协议,需实现。
    +-- hal_tls_interface.c             : 无需实现。
    +-- hal_dtls_interface.c            : 无需实现。

用户需实现如下接口:

文件名 函数名 是否实现 函数说明
hal_os_interface.c HAL_MutexCreate 可选 创建一个互斥量, 用于同步控制, 目前SDK仅支持单线程应用, 可实现为空函数
HAL_MutexDestroy 可选 销毁一个互斥量, 用于同步控制, 目前SDK仅支持单线程应用, 可实现为空函数
HAL_MutexLock 可选 加锁一个互斥量, 用于同步控制, 目前SDK仅支持单线程应用, 可实现为空函数
HAL_MutexLock 可选 解锁一个互斥量, 用于同步控制, 目前SDK仅支持单线程应用, 可实现为空函数
HAL_Malloc 必须实现 申请一片堆上内存
HAL_Free 必须实现 释放一片堆上内存
HAL_SystemReboot 可选 设备重启
HAL_UptimeMs 必须实现 时钟函数, 获取本设备从加电以来到目前时间点已经过去的毫秒数
HAL_Srandom 必须实现 随机数函数, 接受一个无符号数作为范围, 返回0到该数值范围内的随机无符号数
HAL_Random 必须实现 随机数播种函数, 使HAL_Random的返回值每个执行序列各不相同, 类似srand
HAL_Print 必须实现 打印函数, 用于向串口或其它标准输出打印日志或调试信息
hal_tcp_interface.c HAL_TCP_Establish 可选 建立一个TCP连接, 包含了域名解析的动作和TCP连接的建立
HAL_TCP_Destroy 可选 销毁一个TCP连接, 用于MQTT功能, HTTPS功能
HAL_TCP_Write 可选 在指定时间内, 向TCP连接发送流数据, 并返回发送的字节数
HAL_TCP_Read 可选 在指定时间内, 从TCP连接读取流数据, 并返回读到的字节数
hal_udp_interface.c HAL_UDP_create 可选 创建一个UDP socket
HAL_UDP_close 可选 关闭一个UDP socket
HAL_UDP_write 可选 阻塞的向一个UDP socket中发送数据包, 并返回发送的字节数
HAL_UDP_read 可选 阻塞的从一个UDP socket中读取数据包, 并返回读到的字节数
HAL_UDP_readTimeout 可选 在指定时间内, 从一个UDP socket中读取数据包, 返回读到的字节数
HAL_UDP_recvfrom 可选 在指定时间内, 从一个UDP socket中读取指定远程域名的数据包, 返回读到的字节数
HAL_UDP_sendto 可选 阻塞的向一个UDP socket中发送数据包到指定远程域名, 并返回发送的字节数
HAL_UDP_joinmulticast 可选 加入广播组
hal_tls_interface.c HAL_SSL_Establish 可选 建立一个TLS连接, 用于MQTT功能, HTTPS功能
HAL_SSL_Destroy 可选 销毁一个TLS连接, 用于MQTT功能, HTTPS功能
HAL_SSL_Read 可选 从一个TLS连接中读数据, 用于MQTT功能, HTTPS功能
HAL_SSL_Write 可选 向一个TLS连接中写数据, 用于MQTT功能, HTTPS功能
hal_dtls_interface.c HAL_DTLSSession_create 可选 初始化DTLS资源并建立一个DTLS会话, 用于CoAP功能
HAL_DTLSSession_free 可选 销毁一个DTLS会话并释放DTLS资源, 用于CoAP功能
HAL_DTLSSession_write 可选 从DTLS连接中读数据, 用于CoAP功能
HAL_DTLSSession_read 可选 向DTLS连接中写数据, 用于CoAP功能

编译环境搭建

请根据硬件平台搭建编译开发环境。