Skip to content

Commit 57c7011

Browse files
author
spikelin
committed
v3.2.0: merge from enhance-oo branch
1 parent e2e5dd7 commit 57c7011

File tree

163 files changed

+7915
-7340
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

163 files changed

+7915
-7340
lines changed

.clang-format

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
BasedOnStyle: Google
2+
BreakBeforeBraces: Linux
3+
AlignConsecutiveDeclarations: true
4+
AlignConsecutiveMacros: true
5+
AlignConsecutiveAssignments: true
6+
AllowShortFunctionsOnASingleLine: Inline
7+
AllowShortIfStatementsOnASingleLine: false
8+
IndentWidth: 4
9+
ColumnLimit: 120

CMakeLists.txt

+11-10
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ set(FEATURE_MQTT_COMM_ENABLED ON)
2525
set(FEATURE_MQTT_DEVICE_SHADOW ON)
2626

2727
# 是否打开CoAP通道的总开关
28-
set(FEATURE_COAP_COMM_ENABLED ON)
28+
set(FEATURE_COAP_COMM_ENABLED OFF)
2929

3030
# 是否打开MQTT通道网关功能
3131
set(FEATURE_GATEWAY_ENABLED ON)
@@ -42,8 +42,11 @@ set(FEATURE_AUTH_MODE "KEY")
4242
# 接入认证是否不使用TLS,证书方式必须选择使用TLS,密钥认证可选择不使用TLS
4343
set(FEATURE_AUTH_WITH_NOTLS OFF)
4444

45+
# 是否打开多线程功能支持
46+
set(FEATURE_MULTITHREAD_ENABLED ON)
47+
4548
# 是否使能设备动态注册
46-
set(FEATURE_DEV_DYN_REG_ENABLED OFF)
49+
set(FEATURE_DEV_DYN_REG_ENABLED ON)
4750

4851
# 是否打开日志上报云端功能
4952
set(FEATURE_LOG_UPLOAD_ENABLED OFF)
@@ -54,27 +57,24 @@ set(FEATURE_DEBUG_DEV_INFO_USED OFF)
5457
# 是否打开获取iot后台时间功能
5558
set(FEATURE_SYSTEM_COMM_ENABLED ON)
5659

60+
# 是否使用HTTPS下载固件
61+
set(FEATURE_OTA_USE_HTTPS ON)
62+
5763
# 是否打开AT模组TCP功能
5864
set(FEATURE_AT_TCP_ENABLED OFF)
5965

6066
# 设置AT模组设备(目前只支持esp8266)
6167
set(AT_DEVICE_NAME "esp8266")
6268

6369
# 是否打开AT模组中断接收功能
64-
set(FEATURE_AT_UART_RECV_IRQ ON)
70+
set(FEATURE_AT_UART_RECV_IRQ OFF)
6571

6672
# 是否打开AT模组多线程功能
67-
set(FEATURE_AT_OS_USED ON)
73+
set(FEATURE_AT_OS_USED OFF)
6874

6975
# 是否打开AT模组调试功能
7076
set(FEATURE_AT_DEBUG OFF)
7177

72-
# 是否编译Linux多线程测试例程
73-
set(FEATURE_MULTITHREAD_TEST_ENABLED ON)
74-
75-
# 是否使用HTTPS下载固件
76-
set(FEATURE_OTA_USE_HTTPS ON)
77-
7878
######################CONFIG END######################################
7979

8080
# 设置CMAKE使用编译工具及编译选项
@@ -141,6 +141,7 @@ option(GATEWAY_ENABLED "Enable GATEWAY" ${FEATURE_GATEWAY_ENABLED})
141141
option(AUTH_WITH_NOTLS "Enable AUTH_WITH_NOTLS" ${FEATURE_AUTH_WITH_NOTLS})
142142
option(COAP_COMM_ENABLED "Enable COAP_COMM" ${FEATURE_COAP_COMM_ENABLED})
143143
option(SYSTEM_COMM "Enable SYSTEM_COMM" ${FEATURE_SYSTEM_COMM_ENABLED})
144+
option(MULTITHREAD_ENABLED "Enable Multi-thread support" ${FEATURE_MULTITHREAD_ENABLED})
144145
option(DEV_DYN_REG_ENABLED "Enable DEV_DYN_REG" ${FEATURE_DEV_DYN_REG_ENABLED})
145146
option(LOG_UPLOAD "Enable LOG_UPLOAD" ${FEATURE_LOG_UPLOAD_ENABLED})
146147
option(DEBUG_DEV_INFO_USED "Enable DEBUG_DEV_INFO_USED" ${FEATURE_DEBUG_DEV_INFO_USED})

README.md

+4
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,10 @@ C-SDK的samples目录有使用各个功能的示例,关于运行示例的详
6161

6262
## 五、注意事项
6363

64+
#### 多设备连接
65+
从版本3.2.0开始,SDK支持多个设备作为客户端同时访问物联网后台,并对多线程环境下的接口使用进行优化增强,具体请参考docs目录文档**C-SDK_MTMC多线程多设备支持**
66+
该版本以面向对象方式对状态变量和参数进行封装,对外部接口的影响是证书设备进行初始化上有变化,其他的接口都没有变化,用户只要参考相关示例修改_setup_connect_init_params函数即可。
67+
6468
#### OTA升级API变化
6569
从SDK版本3.0.3开始,OTA升级支持了断点续传,当固件下载过程中如果因为网络异常或其他原因被打断,可以将已经下载的固件部分保存,在下次恢复下载时候可以不用从零开始下载,而是从未下载的部分开始。
6670
在支持这一新特性之后,OTA相关API的使用方法发生了变化,对于从3.0.2及以前的版本升级的用户,需要修改用户逻辑代码,否则固件下载会失败,请参考**samples/ota/ota_mqtt_sample.c**进行修改。

cmake_build.sh

+7-3
Original file line numberDiff line numberDiff line change
@@ -31,19 +31,23 @@ elif [ "$#" -eq "1" -a $1 == "clean" ]; then
3131
rm -rf build
3232
exit
3333
elif [ "$#" -eq "1" -a $1 == "code-check" ]; then
34+
# code-check requires clang-tidy and cpplint
35+
# sudo apt install clang-tidy
36+
# pip install cpplint
3437
echo "run code check"
3538
rm -rf build
3639
mkdir -p build
3740
cd build
3841
cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON ..
3942
echo "clang-tidy check begin"
4043
clang_extra_arg="-extra-arg=-I/usr/lib/gcc/x86_64-linux-gnu/7/include -extra-arg=-I/usr/lib/gcc/x86_64-linux-gnu/7/include-fixed"
41-
clang_check_rules="-checks=-clang-analyzer-osx*"
42-
run-clang-tidy ${clang_extra_arg} ${clang_check_rules} >../code-check-clang-tidy.txt
44+
clang_check_rules="-checks=-clang-analyzer-osx*,-clang-analyzer-security.insecureAPI.strcpy,-clang-diagnostic-missing-braces,-clang-diagnostic-varargs"
45+
../tools/run-clang-tidy ${clang_extra_arg} ${clang_check_rules} >../code-check-clang-tidy.txt
4346
echo "clang-tidy check end"
4447
echo "cpplint check begin"
4548
cd ..
46-
cpplint_rules="--filter=-whitespace/line_length,-readability/casting,-build/include_subdir,-whitespace/braces,-whitespace/comments,-whitespace/blank_line,-whitespace/parens,-whitespace/semicolon,-whitespace/end_of_line,-whitespace/comma"
49+
# find ./samples/ ./include/ ./sdk_src/ ./platform/ -name *.c -o -name *.h | xargs clang-format -i
50+
cpplint_rules="--filter=-whitespace/line_length,-readability/casting,-build/include_subdir,-whitespace/braces,-whitespace/comments,-whitespace/blank_line,-whitespace/parens,-whitespace/semicolon,-whitespace/end_of_line,-whitespace/ending_newline,-whitespace/comma,-build/header_guard,-runtime/int,-runtime/printf,-readability/todo,-build/include_order,-build/include_what_you_use"
4751
cpplint_coverage="include/ samples/ platform/ sdk_src/"
4852
cpplint ${cpplint_rules} --recursive ${cpplint_coverage} &>./code-check-cpplint.txt
4953
echo "cpplint check end"

docs/C-SDK_API及可变参数说明.md

+7-9
Original file line numberDiff line numberDiff line change
@@ -51,21 +51,16 @@ C-SDK 的使用可以根据具体场景需求,配置相应的参数,满足
5151
| 5 | IOT_MQTT_Subscribe | 订阅 MQTT 主题 |
5252
| 6 | IOT_MQTT_Unsubscribe | 取消订阅已订阅的 MQTT 主题 |
5353
| 7 | IOT_MQTT_IsConnected | 查看当前 MQTT 是否已连接 |
54-
| 8 | IOT_MQTT_GetErrCode | 获取IOT_MQTT_Construct失败的错误码 |
54+
| 8 | IOT_MQTT_IsSubReady | 查询对应的主题是否已经订阅成功 |
55+
| 9 | IOT_MQTT_GetDeviceInfo | 获取该 MQTTclien对应的设备信息 |
56+
| 10 | IOT_MQTT_StartLoop | 多线程环境下,启动 MQTTclient后台Yield线程 |
57+
| 11 | IOT_MQTT_StopLoop | 多线程环境下,停止 MQTTclient后台Yield线程 |
5558

5659
- 接口使用说明
5760
```
5861
MQTT构造时候除了提供设备信息,还需要提供一个回调函数,用于接收消息包括连接状态通知,订阅主题是否成功,QoS1消息是否发布成功等等事件通知。订阅主题时则需提供另一个回调函数,用于接收该主题的消息下发。具体接口使用方式可以参考docs/IoT_Hub目录的mqtt_sample_快速入门文档。
5962
```
6063

61-
- 多线程环境使用说明
62-
SDK对于MQTT接口在多线程环境下的使用有如下注意事项:
63-
```
64-
1. 不允许多线程调用IOT_MQTT_Yield,IOT_MQTT_Construct以及IOT_MQTT_Destroy
65-
2. 可以多线程调用IOT_MQTT_Publish,IOT_MQTT_Subscribe及IOT_MQTT_Unsubscribe
66-
3. IOT_MQTT_Yield 作为从socket读取并处理MQTT报文的函数,应保证一定的执行时间,避免被长时间挂起或抢占
67-
```
68-
6964
### 2. 设备影子接口
7065
关于设备影子功能介绍,可以参考[设备影子详情](https://cloud.tencent.com/document/product/634/11918)
7166

@@ -88,6 +83,7 @@ SDK对于MQTT接口在多线程环境下的使用有如下注意事项:
8883
| 15 | IOT_Shadow_JSON_Construct_OverwriteReport | 在JSON文档中添加reported字段,覆盖更新 |
8984
| 16 | IOT_Shadow_JSON_ConstructReportAndDesireAllNull | 在JSON文档中添加reported字段,同时清空desired字段 |
9085
| 17 | IOT_Shadow_JSON_ConstructDesireAllNull | 在JSON文档中添加 "desired": null 字段 |
86+
| 18 | IOT_Shadow_Get_Mqtt_Client | 获取该ShadowClient对应的MQTTclient |
9187

9288
### 3. CoAP 接口
9389

@@ -100,6 +96,7 @@ SDK对于MQTT接口在多线程环境下的使用有如下注意事项:
10096
| 5 | IOT_COAP_GetMessageId | 获取 COAP Response 消息 msgId |
10197
| 6 | IOT_COAP_GetMessagePayload | 获取 COAP Response 消息内容 |
10298
| 7 | IOT_COAP_GetMessageCode | 获取 COAP Response 消息错误码 |
99+
| 9 | IOT_COAP_GetDeviceInfo | 获取该 COAPclien对应的设备信息 |
103100

104101
### 4. OTA 接口
105102
关于 OTA 固件下载功能介绍,可以参考[设备固件升级](https://cloud.tencent.com/document/product/634/14674)
@@ -154,6 +151,7 @@ SDK对于MQTT接口在多线程环境下的使用有如下注意事项:
154151
| 4 | IOT_Gateway_Publish | 发布 MQTT 消息 |
155152
| 5 | IOT_Gateway_Subscribe | 订阅 MQTT 主题 |
156153
| 6 | IOT_Gateway_Unsubscribe | 取消订阅已订阅的 MQTT 主题 |
154+
| 18 | IOT_Gateway_Get_Mqtt_Client | 获取该GatewayClient对应的MQTTclient |
157155

158156
### 8. 动态注册接口
159157

docs/C-SDK_Build编译环境及配置选项说明.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ sdk_src为SDK的核心逻辑及协议相关代码,一般不需要修改,其
5959
| FEATURE_OTA_SIGNAL_CHANNEL | MQTT/COAP | OTA信令通道类型 |
6060
| FEATURE_AUTH_MODE | KEY/CERT | 接入认证方式 |
6161
| FEATURE_AUTH_WITH_NOTLS | ON/OFF | OFF: TLS使能, ON: TLS关闭 |
62+
| FEATURE_MULTITHREAD_ENABLED | ON/OFF | 是否使能SDK对多线程环境的支持 |
6263
| FEATURE_DEV_DYN_REG_ENABLED | ON/OFF | 设备动态注册开关 |
6364
| FEATURE_LOG_UPLOAD_ENABLED | ON/OFF | 日志上报开关 |
6465
| FEATURE_DEBUG_DEV_INFO_USED | ON/OFF | 设备信息获取来源开关 |
@@ -68,7 +69,7 @@ sdk_src为SDK的核心逻辑及协议相关代码,一般不需要修改,其
6869
| FEATURE_AT_UART_RECV_IRQ | ON/OFF | AT模组中断接受功能开关 |
6970
| FEATURE_AT_OS_USED | ON/OFF | AT模组多线程功能开关 |
7071
| FEATURE_AT_DEBUG | ON/OFF | AT模组调试功能开关 |
71-
| FEATURE_MULTITHREAD_TEST_ENABLED | ON/OFF | 是否编译Linux多线程测试例程 |
72+
7273

7374
配置选项之间存在依赖关系,当依赖选项的值为有效值时,部分配置选项才有效,主要如下:
7475

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# C-SDK 多线程及多设备支持
2+
3+
多线程及多设备支持实例需要首先使能编译配置开关FEATURE_MULTITHREAD_ENABLED
4+
5+
## Multi-Thread 多线程环境使用说明
6+
7+
设备端 C-SDK 支持在多线程多任务环境下使用,但是对接口的使用有一定规范。
8+
比如对于MQTT接口在多线程环境下的使用有如下注意事项:
9+
```
10+
1. 不允许多线程调用IOT_MQTT_Yield,IOT_MQTT_Construct以及IOT_MQTT_Destroy
11+
2. 可以多线程调用IOT_MQTT_Publish,IOT_MQTT_Subscribe及IOT_MQTT_Unsubscribe
12+
3. IOT_MQTT_Yield 作为从socket读取并处理MQTT报文的函数,应保证一定的执行时间,避免被长时间挂起或抢占
13+
```
14+
在多线程环境下,建议可以使用 IOT_MQTT_StartLoop 和 IOT_MQTT_StopLoop 来启动和停止后台 IOT_MQTT_Yield 线程,则在需要读取报文的时候不再需要主动调用IOT_MQTT_Yield函数,由后台线程来读取并处理MQTT报文。
15+
使用示例可以参考 samples/mqtt/multi_thread_mqtt_sample
16+
17+
其他模块接口的使用可以参考MQTT接口的使用
18+
19+
## Multi-Client 多设备接入使用
20+
21+
在SDK版本3.2.0之后,支持同时使用多个设备接入。SDK采用面向对象方式对状态变量和参数进行封装,使得比如一个MQTT/Shadow Client实例可以对应一个设备,通过提供多个设备三元组,创建多个Client实例,则可以同时进行多个设备的接入和通讯。
22+
具体的示例代码可以参考 samples/multi_client 下面的sample,通过创建多个线程,每个线程里面创建各自的 MQTT/Shadow Client,则相当于多个设备在同时访问后台服务。
23+
24+

docs/C-SDK_Porting跨平台移植概述.md

+10-10
Original file line numberDiff line numberDiff line change
@@ -30,22 +30,22 @@ HAL层主要有几大块的移植,分别是OS相关的、网络及TLS相关的
3030
SDK在 **platform/os** 目录示例了Linux、Windows、FreeRTOS及nonOS四个场景的硬件抽象层实现,可以参考最相近的目录展开目标平台的移植。
3131

3232
#### OS相关接口
33+
以下函数跟线程/互斥锁/信号量相关的,只有在使能多线程/多任务情况下(MULTITHREAD_ENABLED)才需要移植
3334

3435
| 序号 | 函数名 | 说明 |
3536
| ---- | ---------------------- | ------------------------------------------ |
3637
| 1 | HAL_Malloc | 动态申请内存块 |
3738
| 2 | HAL_Free | 释放内存块 |
3839
| 3 | HAL_ThreadCreate | 线程创建 |
39-
| 4 | HAL_ThreadDestroy | 线程销毁 |
40-
| 5 | HAL_MutexCreate | 创建互斥锁 |
41-
| 6 | HAL_MutexDestroy | 销毁互斥锁 |
42-
| 7 | HAL_MutexLock | mutex 加锁 |
43-
| 8 | HAL_MutexUnlock | mutex 解锁 |
44-
| 9 | HAL_SemaphoreCreate | 创建信号量 |
45-
| 10 | HAL_SemaphoreDestroy | 销毁信号量 |
46-
| 11 | HAL_SemaphoreWait | 等待信号量 |
47-
| 12 | HAL_SemaphorePost | 释放信号量 |
48-
| 13 | HAL_SleepMs | 休眠 |
40+
| 4 | HAL_MutexCreate | 创建互斥锁 |
41+
| 5 | HAL_MutexDestroy | 销毁互斥锁 |
42+
| 6 | HAL_MutexLock | mutex 加锁 |
43+
| 7 | HAL_MutexUnlock | mutex 解锁 |
44+
| 8 | HAL_SemaphoreCreate | 创建信号量 |
45+
| 9 | HAL_SemaphoreDestroy | 销毁信号量 |
46+
| 10 | HAL_SemaphoreWait | 等待信号量 |
47+
| 11 | HAL_SemaphorePost | 释放信号量 |
48+
| 12 | HAL_SleepMs | 休眠 |
4949

5050
#### 网络及TLS相关的HAL接口
5151

include/config.h

+17-16
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,17 @@
1-
/* #undef AUTH_MODE_CERT */
2-
#define AUTH_MODE_KEY
3-
/* #undef AUTH_WITH_NOTLS */
4-
#define GATEWAY_ENABLED
5-
#define COAP_COMM_ENABLED
6-
#define OTA_MQTT_CHANNEL
7-
#define SYSTEM_COMM
8-
/* #undef DEV_DYN_REG_ENABLED */
9-
/* #undef LOG_UPLOAD */
10-
/* #undef IOT_DEBUG */
11-
/* #undef DEBUG_DEV_INFO_USED */
12-
/* #undef AT_TCP_ENABLED */
13-
/* #undef AT_UART_RECV_IRQ */
14-
/* #undef AT_OS_USED */
15-
/* #undef AT_DEBUG */
16-
#define OTA_USE_HTTPS
1+
/* #undef AUTH_MODE_CERT */
2+
#define AUTH_MODE_KEY
3+
/* #undef AUTH_WITH_NOTLS */
4+
#define GATEWAY_ENABLED
5+
/* #undef COAP_COMM_ENABLED */
6+
#define OTA_MQTT_CHANNEL
7+
#define SYSTEM_COMM
8+
#define DEV_DYN_REG_ENABLED
9+
/* #undef LOG_UPLOAD */
10+
/* #undef IOT_DEBUG */
11+
/* #undef DEBUG_DEV_INFO_USED */
12+
/* #undef AT_TCP_ENABLED */
13+
/* #undef AT_UART_RECV_IRQ */
14+
/* #undef AT_OS_USED */
15+
/* #undef AT_DEBUG */
16+
#define OTA_USE_HTTPS
17+
#define MULTITHREAD_ENABLED

0 commit comments

Comments
 (0)