TuyaOS Link SDK 移植

更新时间:2022-11-24 09:20:05下载pdf

本文介绍了 TuyaOS Link SDK 中提供的源文件修改说明和功能说明。修改后,TuyaOS Link SDK 能够更方便地在各种基于嵌入式 C 的环境中运行,例如 RTOS、Linux 等,并进行调整以使用特定的 TLS 和特定硬件平台接口适配,最终使设备连接上涂鸦 IoT 平台。

SDK 结构

该 SDK 的 C 代码文件通过以下目录结构提供:

  • certs:设备私钥,设备证书,服务端 CA 根证书
  • docs:参考文档
  • libraries:外部依赖库 - MQTT client, HTTP client, mbedTLS
  • interface: 平台必要移植接口,SDK 功能接口
  • include:SDK 有文件,API接口
  • src:SDK 源代码
  • platform:平台移植接口适配
  • utils:通用工具模块
  • examples:例程

此 SDK 中的所有 makefile 都是使用上面记录的文件夹结构配置的,因此移动或重命名文件夹将需要对 makefile 进行修改。

集成 SDK

本小节介绍了为了使 Link SDK 在您的平台上运行而需要实现的 API 调用。并罗列了设备 SDK 在任何平台上运行所需的功能。

Link SDK 接口遵循驱动程序模型,其中只有原型由 Link SDK 本身定义,而相关的应用逻辑实现则由您来完成,您需要将 SDK 调整为所使用的平台。

系统

  • void* system_malloc(size_t n);

    分配所需的内存空间,并返回一个指向它的指针。

  • void* system_calloc(size_t n, size_t size);

    分配所需的内存空间,并返回一个指向它的指针, 设置分配的内存初始化为零。

  • void system_free(void *ptr);

    释放之前调用 system_mallocsystem_callocsystem_realloc 所分配的内存空间。

  • uint64_t system_ticks();

    系统毫秒滴答计数器。

  • uint32_t system_timestamp();

    获取时间戳。

网络

SDK 需要通过 MQTT 和 HTTP 协议与服务端交互,所有通信需要基于 TLS 连接,需要您的平台具备 TCP/IP 协议栈实现以下 API,SDK 中包含了 Linux环境下基于 mbedTLS 库作为依赖实现的以下接口的示例。如果您平台已集成 mbedTLS,可使用 Linux 平台下的 platform/linux/mbedtls/network_mbedtls_wrapper.c 接口封装适配快速接入; 如果您的平台没有 mbedTLS 可以参考 mbedtls 移植指导 完成移植。

  • int network_tls_init(Network *pNetwork, const TLSConnectParams *TLSParams);

    初始化 TLS Network 网络连接管理结构对象。

  • int network_tls_connect(Network *pNetwork, const TLSConnectParams *TLSParams);

    建立 TLS 连接,TLSParams 参数为可选参数,如果传入参数为 NULL,默认使用初始化的连接参数。

  • int network_tls_write(Network*, unsigned char*, size_t);

    Write to the TLS network buffer.

  • int network_tls_read(Network*, unsigned char*, size_t);

    Read from the TLS network buffer.

  • int network_tls_disconnect(Network *pNetwork);

    断开 TLS 连接。

  • int network_tls_destroy(Network *pNetwork);

    释放 TLS 连接上下文。

数据存储

SDK 在运行过程中需要持久化储存一些配置信息在您的设备中,需要平台提供持久化的 KV 接口。

  • int local_storage_set(const char* key, const uint8_t* buffer, size_t length);

    写入数据到 KV 系统中。

  • int local_storage_get(const char* key, uint8_t* buffer, size_t* length);

    从 KV 系统中读取数据。

  • int local_storage_del(const char* key);

    从 KV 系统中删除数据。