Files
TencentOS-tiny/components/connectivity/qcloud-iot-hub-sdk/3rdparty/README.md
daishengdong 3e631cd96a update qcloud sdk
1. iot-hub sdk update to 3.2.0
2. iot-explorer update to 3.1.1
2020-05-07 11:11:04 +08:00

120 lines
9.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 腾讯云物联网设备端 C-SDK
腾讯云物联网设备端 C-SDK 依靠安全且性能强大的数据通道,为物联网领域开发人员提供设备端快速接入云端,并和云端进行双向通信的能力。
在版本v3.1.0之后SDK对编译环境代码及目录结构进行了重构优化提高了可用性和可移植性。
本SDK仅适用于物联网通信平台IoT Hub对于物联网开发平台请访问 [IoT Explorer C-SDK](https://github.com/tencentyun/qcloud-iot-explorer-sdk-embedded-c)
## 一、C-SDK 适用范围
C-SDK 采用模块化设计,分离核心协议服务与硬件抽象层,并提供灵活的配置选项和多种编译方式,适用于不同设备的开发平台和使用环境。
#### 1. 具备网络通讯能力并使用Linux/Windows操作系统的设备
对于具备网络通讯能力并使用标准 Linux/Windows 系统的设备比如PC/服务器/网关设备及较高级的嵌入式设备比如树莓派等等可直接在该设备上编译运行SDK。
对于需要交叉编译的嵌入式 Linux 设备如果开发环境的toolchain具备glibc或类似的库可以提供包括socket通讯select同步IO动态内存分配获取时间/休眠/随机数/打印函数以及临界数据保护如Mutex机制仅在需要多线程时等系统调用则只要做简单适配比如在CMakeLists.txt或make.settings里面修改交叉编译器的设定就可以编译运行SDK。
#### 2. 具备网络通讯能力并采用RTOS系统的设备
对于具备网络通讯能力并采用RTOS的物联网设备C-SDK需要针对不同的RTOS做移植适配工作目前C-SDK已经适配了包括FreeRTOS/RT-Thread/TencentOS tiny等多个面向物联网的RTOS平台。
在RTOS设备移植SDK时如果平台提供了类似newlib的C运行库和类似lwIP的嵌入式TCP/IP协议栈则移植适配工作也可以轻松完成。
#### 3. MCU+通讯模组的设备
对于不具备网络通讯能力的MCU一般采用MCU+通讯模组的方式通讯模组包括WiFi/2G/4G/NB-IoT一般提供了基于串口的AT指令协议供MCU进行网络通讯。针对这种场景C-SDK 封装了AT-socket网络层网络层之上的核心协议和服务层无须移植。并提供了基于FreeRTOS和不带操作系统nonOS两种方式的HAL实现具体可以参考docs目录文档。
除此之外腾讯云物联网还提供了专用的AT指令集如果通讯模组实现了该指令集则设备接入和通讯更为简单所需代码量更少针对这种场景请参考面向腾讯云定制AT模组专用的 [MCU AT SDK](https://github.com/tencentyun/qcloud-iot-sdk-tencent-at-based.git)
## 二、SDK 目录结构简介
#### 1. 目录结构及顶层文件简介
| 名称 | 说明 |
| ------------------ | ------------------------------------------------------------ |
| CMakeLists.txt | cmake编译描述文件 |
| CMakeSettings.json | visual studio下的cmake配置文件 |
| cmake_build.sh | Linux下使用cmake的编译脚本 |
| make.settings | Linux下使用Makefile直接编译的配置文件 |
| Makefile | Linux下使用Makefile直接编译 |
| device_info.json | 设备信息文件当DEBUG_DEV_INFO_USED=OFF时将从该文件解析出设备信息 |
| docs | 文档目录SDK在不同平台下使用说明文档。 |
| external_libs | 第三方软件包组件如mbedtls |
| samples | 应用示例 |
| include | 提供给用户使用的外部头文件 |
| platform | 平台相关的源码文件目前提供了针对不同OS(Linux/Windows/FreeRTOS/nonOS)TLS(mbedtls)以及AT模组下的实现。 |
| sdk_src | SDK核心通信协议及服务代码 |
| tools | SDK配套的编译及代码生成脚本工具 |
## 三、SDK 编译方式说明
C-SDK 支持三种编译方式:
- cmake 方式
- Makefile 方式
- 代码抽取方式
编译方式以及编译配置选项的详细说明请参考docs目录文档 **C-SDK_Build编译环境及配置选项说明**
## 四、SDK 示例体验
C-SDK的samples目录有使用各个功能的示例关于运行示例的详细说明请参考docs目录各个文档
## 五、注意事项
#### 多设备连接
从版本3.2.0开始SDK支持多个设备作为客户端同时访问物联网后台并对多线程环境下的接口使用进行优化增强具体请参考docs目录文档**C-SDK_MTMC多线程多设备支持**
该版本以面向对象方式对状态变量和参数进行封装对外部接口的影响是证书设备进行初始化上有变化其他的接口都没有变化用户只要参考相关示例修改_setup_connect_init_params函数即可。
#### OTA升级API变化
从SDK版本3.0.3开始OTA升级支持了断点续传当固件下载过程中如果因为网络异常或其他原因被打断可以将已经下载的固件部分保存在下次恢复下载时候可以不用从零开始下载而是从未下载的部分开始。
在支持这一新特性之后OTA相关API的使用方法发生了变化对于从3.0.2及以前的版本升级的用户,需要修改用户逻辑代码,否则固件下载会失败,请参考**samples/ota/ota_mqtt_sample.c**进行修改。
#### 代码命名变化
为了提高代码可读性保证命名规范SDK 3.1.0版本对部分变量、函数及宏命名进行了变更对于从3.0.3及以前的版本升级的用户可以在Linux环境下面执行tools/update_from_old_SDK.sh脚本对自己的用户代码执行名字替换替换完成就可以直接使用新版本的SDK。
| 旧命名 | 新命名 |
| ------------------ | ------------------------------------------------------------ |
| QCLOUD_ERR_SUCCESS | QCLOUD_RET_SUCCESS |
| QCLOUD_ERR_MQTT_RECONNECTED | QCLOUD_RET_MQTT_RECONNECTED |
| QCLOUD_ERR_MQTT_MANUALLY_DISCONNECTED | QCLOUD_RET_MQTT_MANUALLY_DISCONNECTED |
| QCLOUD_ERR_MQTT_CONNACK_CONNECTION_ACCEPTED | QCLOUD_RET_MQTT_CONNACK_CONNECTION_ACCEPTED |
| QCLOUD_ERR_MQTT_ALREADY_CONNECTED | QCLOUD_RET_MQTT_ALREADY_CONNECTED |
| MAX_SIZE_OF_DEVICE_SERC | MAX_SIZE_OF_DEVICE_SECRET |
| devCertFileName | dev_cert_file_name |
| devPrivateKeyFileName | dev_key_file_name |
| devSerc | device_secret |
| MAX_SIZE_OF_PRODUCT_KEY | MAX_SIZE_OF_PRODUCT_SECRET |
| product_key | product_secret。 |
| DEBUG | eLOG_DEBUG |
| INFO | eLOG_INFO |
| WARN | eLOG_WARN |
| ERROR | eLOG_ERROR |
| DISABLE | eLOG_DISABLE |
| Log_writter | IOT_Log_Gen |
| qcloud_iot_dyn_reg_dev | IOT_DynReg_Device |
| IOT_SYSTEM_GET_TIME | IOT_Get_SysTime |
```
#! /bin/bash
sed -i "s/QCLOUD_ERR_SUCCESS/QCLOUD_RET_SUCCESS/g" `grep -rwl QCLOUD_ERR_SUCCESS ./*`
sed -i "s/QCLOUD_ERR_MQTT_RECONNECTED/QCLOUD_RET_MQTT_RECONNECTED/g" `grep -rwl QCLOUD_ERR_MQTT_RECONNECTED ./*`
sed -i "s/QCLOUD_ERR_MQTT_MANUALLY_DISCONNECTED/QCLOUD_RET_MQTT_MANUALLY_DISCONNECTED/g" `grep -rwl QCLOUD_ERR_MQTT_MANUALLY_DISCONNECTED ./*`
sed -i "s/QCLOUD_ERR_MQTT_CONNACK_CONNECTION_ACCEPTED/QCLOUD_RET_MQTT_CONNACK_CONNECTION_ACCEPTED/g" `grep -rwl QCLOUD_ERR_MQTT_CONNACK_CONNECTION_ACCEPTED ./*`
sed -i "s/QCLOUD_ERR_MQTT_ALREADY_CONNECTED/QCLOUD_RET_MQTT_ALREADY_CONNECTED/g" `grep -rwl QCLOUD_ERR_MQTT_ALREADY_CONNECTED ./*`
sed -i "s/MAX_SIZE_OF_DEVICE_SERC/MAX_SIZE_OF_DEVICE_SECRET/g" `grep -rwl MAX_SIZE_OF_DEVICE_SERC ./*`
sed -i "s/devCertFileName/dev_cert_file_name/g" `grep -rwl devCertFileName ./*`
sed -i "s/devPrivateKeyFileName/dev_key_file_name/g" `grep -rwl devPrivateKeyFileName ./*`
sed -i "s/devSerc/device_secret/g" `grep -rwl devSerc ./*`
sed -i "s/MAX_SIZE_OF_PRODUCT_KEY/MAX_SIZE_OF_PRODUCT_SECRET/g" `grep -rwl MAX_SIZE_OF_PRODUCT_KEY ./*`
sed -i "s/product_key/product_secret/g" `grep -rwl product_key ./*`
sed -i "s/DEBUG/eLOG_DEBUG/g" `grep -rwl DEBUG ./*`
sed -i "s/INFO/eLOG_INFO/g" `grep -rwl INFO ./*`
sed -i "s/WARN/eLOG_WARN/g" `grep -rwl WARN ./*`
sed -i "s/ERROR/eLOG_ERROR/g" `grep -rwl ERROR ./*`
sed -i "s/DISABLE/eLOG_DISABLE/g" `grep -rwl DISABLE ./*`
sed -i "s/Log_writter/IOT_Log_Gen/g" `grep -rwl Log_writter ./*`
sed -i "s/qcloud_iot_dyn_reg_dev/IOT_DynReg_Device/g" `grep -rwl qcloud_iot_dyn_reg_dev ./*`
sed -i "s/IOT_SYSTEM_GET_TIME/IOT_Get_SysTime/g" `grep -rwl IOT_SYSTEM_GET_TIME ./*`
```