Skip to content

Commit 4f3306c

Browse files
author
spikelin
committed
v3.1.0 C-SDK refactor
1 parent 758c48e commit 4f3306c

File tree

343 files changed

+126416
-4
lines changed

Some content is hidden

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

343 files changed

+126416
-4
lines changed

.gitignore

+6-4
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,20 @@
11
/.idea/
22
./build/
3+
/build
34
*.o
45
*.a
56
/*.cproject
67
/*.autotools
78
/.project
89
/output
9-
/sdk-tests/unit_test/unit_test.BASE
10-
/sdk-tests/unit_test/unit_test.LOCAL
11-
/sdk-tests/unit_test/unit_test.REMOTE
1210
.DS_Store
1311
*.DS_Store
1412
*.crt
1513
*.key
1614
sdk-tests/certs/unittest_private.key
1715
sdk-tests/certs/unittest_private.key
18-
.vscode/settings.json
16+
/.vscode/settings.json
17+
/.vs
18+
upload-fail-save.log
19+
local_fw_info.json
20+
ota.bin

CMakeLists.txt

+207
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,207 @@
1+
# 项目信息
2+
project (QCloud_IoT_SDK C)
3+
4+
# CMake 最低版本号要求
5+
cmake_minimum_required (VERSION 3.5)
6+
7+
######################CONFIG BEGIN####################################
8+
# 编译类型: release/debug
9+
set(BUILD_TYPE "release")
10+
11+
# 代码抽取,ON表示根据配置抽取源码到ouput/qcloud_iot_c_sdk目录
12+
set(EXTRACT_SRC OFF)
13+
14+
# 编译工具链
15+
set(COMPILE_TOOLS "gcc")
16+
set(PLATFORM "linux")
17+
18+
#set(COMPILE_TOOLS "MSVC")
19+
#set(PLATFORM "windows")
20+
21+
# 是否打开MQTT通道的总开关
22+
set(FEATURE_MQTT_COMM_ENABLED ON)
23+
24+
# 是否打开设备影子的总开关
25+
set(FEATURE_MQTT_DEVICE_SHADOW ON)
26+
27+
# 是否打开CoAP通道的总开关
28+
set(FEATURE_COAP_COMM_ENABLED ON)
29+
30+
# 是否打开MQTT通道网关功能
31+
set(FEATURE_GATEWAY_ENABLED ON)
32+
33+
# 是否打开OTA固件升级总开关
34+
set(FEATURE_OTA_COMM_ENABLED ON)
35+
36+
# OTA信令通道类型:MQTT/COAP
37+
set(FEATURE_OTA_SIGNAL_CHANNEL "MQTT")
38+
39+
# MQTT/CoAP接入认证方式,使用证书认证:CERT;使用密钥认证:KEY
40+
set(FEATURE_AUTH_MODE "KEY")
41+
42+
# 接入认证是否不使用TLS,证书方式必须选择使用TLS,密钥认证可选择不使用TLS
43+
set(FEATURE_AUTH_WITH_NOTLS OFF)
44+
45+
# 是否使能设备动态注册
46+
set(FEATURE_DEV_DYN_REG_ENABLED ON)
47+
48+
# 是否打开日志上报云端功能
49+
set(FEATURE_LOG_UPLOAD_ENABLED ON)
50+
51+
# 是否打开事件上报功能
52+
set(FEATURE_EVENT_POST_ENABLED ON)
53+
54+
# 是否打开代码中获取设备信息功能,OFF时将从device_info.json中读取设备信息
55+
set(FEATURE_DEBUG_DEV_INFO_USED OFF)
56+
57+
# 是否打开获取iot后台时间功能
58+
set(FEATURE_SYSTEM_COMM_ENABLED ON)
59+
60+
# 是否打开AT模组TCP功能
61+
set(FEATURE_AT_TCP_ENABLED OFF)
62+
63+
# 设置AT模组设备(目前只支持esp8266)
64+
set(AT_DEVICE_NAME "esp8266")
65+
66+
# 是否打开AT模组中断接收功能
67+
set(FEATURE_AT_UART_RECV_IRQ ON)
68+
69+
# 是否打开AT模组多线程功能
70+
set(FEATURE_AT_OS_USED ON)
71+
72+
# 是否打开AT模组调试功能
73+
set(FEATURE_AT_DEBUG OFF)
74+
75+
# 是否编译Linux多线程测试例程
76+
set(FEATURE_MULTITHREAD_TEST_ENABLED ON)
77+
78+
######################CONFIG END######################################
79+
80+
# 设置CMAKE使用编译工具及编译选项
81+
if (PLATFORM STREQUAL "linux" AND COMPILE_TOOLS STREQUAL "gcc")
82+
set(CMAKE_C_COMPILER ${COMPILE_TOOLS})
83+
if(${BUILD_TYPE} STREQUAL "release")
84+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror -Wall -Wno-error=sign-compare -Wno-error=format -Os -pthread") # 编译选项
85+
elseif(${BUILD_TYPE} STREQUAL "debug")
86+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -Werror -Wall -Wno-error=sign-compare -Wno-error=format -Os -pthread") # 编译选项
87+
endif()
88+
elseif (PLATFORM STREQUAL "linux" AND COMPILE_TOOLS STREQUAL "arm-none-linux-gnueabi-gcc")
89+
set(CMAKE_C_COMPILER ${COMPILE_TOOLS})
90+
if(${BUILD_TYPE} STREQUAL "release")
91+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror -Wall -Wno-error=sign-compare -Wno-error=format -Os -pthread") # 编译选项
92+
elseif(${BUILD_TYPE} STREQUAL "debug")
93+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -Werror -Wall -Wno-error=sign-compare -Wno-error=format -Os -pthread") # 编译选项
94+
endif()
95+
elseif (PLATFORM STREQUAL "windows" AND COMPILE_TOOLS STREQUAL "MSVC")
96+
# 去除相应的警告
97+
add_definitions(-D_CRT_SECURE_NO_WARNINGS -D_WINSOCK_DEPRECATED_NO_WARNINGS -D_USE_32BIT_TIME_T)
98+
if(CMAKE_C_FLAGS MATCHES "/W[0-4]")
99+
string(REGEX REPLACE "/W[0-4]" "/W2" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
100+
else()
101+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W2")
102+
endif()
103+
else ()
104+
#用户自定义
105+
set(CMAKE_C_COMPILER ${COMPILE_TOOLS}) # 编译工具
106+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror -Wall -Wno-error=sign-compare -Wno-error=format -Os") # 编译选项
107+
message(WARNING "User defined platform or compile tools!")
108+
endif()
109+
110+
# 解析配置
111+
if(${BUILD_TYPE} STREQUAL "release")
112+
option(IOT_DEBUG "Enable IOT_DEBUG" OFF)
113+
elseif(${BUILD_TYPE} STREQUAL "debug")
114+
option(IOT_DEBUG "Enable IOT_DEBUG" ON)
115+
else()
116+
message(FATAL_ERROR "INVAILD BUILD_TYPE:${BUILD_TYPE}!")
117+
endif()
118+
119+
if(${FEATURE_AUTH_MODE} STREQUAL "KEY")
120+
option(AUTH_MODE_KEY "Enable AUTH_MODE_KEY" ON)
121+
option(AUTH_MODE_CERT "Enable AUTH_MODE_CERT" OFF)
122+
elseif(${FEATURE_AUTH_MODE} STREQUAL "CERT" AND ${FEATURE_AUTH_WITH_NOTLS} STREQUAL "OFF")
123+
option(AUTH_MODE_KEY "Enable AUTH_MODE_KEY" OFF)
124+
option(AUTH_MODE_CERT "Enable AUTH_MODE_CERT" ON)
125+
option(AUTH_WITH_NOTLS "Enable AUTH_WITH_NOTLS" OFF)
126+
else()
127+
message(FATAL_ERROR "INVAILD AUTH_MODE:${FEATURE_AUTH_MODE} WITH AUTH_WITH_NOTLS:${FEATURE_AUTH_WITH_NOTLS}!")
128+
endif()
129+
130+
if(${FEATURE_OTA_COMM_ENABLED} STREQUAL "ON")
131+
if(${FEATURE_OTA_SIGNAL_CHANNEL} STREQUAL "MQTT" AND ${FEATURE_MQTT_COMM_ENABLED} STREQUAL "ON" )
132+
option(OTA_MQTT_CHANNEL "Enable TA_MQTT_CHANNEL" ON)
133+
elseif(${FEATURE_OTA_SIGNAL_CHANNEL} STREQUAL "COAP" AND ${FEATURE_COAP_COMM_ENABLED} STREQUAL "ON")
134+
option(OTA_MQTT_CHANNEL "Enable TA_MQTT_CHANNEL" OFF)
135+
else()
136+
message(FATAL_ERROR "INVAILD OTA_SIGNAL_CHANNEL:${FEATURE_OTA_SIGNAL_CHANNEL} OR DISABLED OTA_COMM, MQTT_COMM, COAP_COMM!")
137+
endif()
138+
endif()
139+
140+
option(GATEWAY_ENABLED "Enable GATEWAY" ${FEATURE_GATEWAY_ENABLED})
141+
option(AUTH_WITH_NOTLS "Enable AUTH_WITH_NOTLS" ${FEATURE_AUTH_WITH_NOTLS})
142+
option(COAP_COMM_ENABLED "Enable COAP_COMM" ${FEATURE_COAP_COMM_ENABLED})
143+
option(SYSTEM_COMM "Enable SYSTEM_COMM" ${FEATURE_SYSTEM_COMM_ENABLED})
144+
option(EVENT_POST_ENABLED "Enable EVENT_POST" ${FEATURE_EVENT_POST_ENABLED})
145+
option(DEV_DYN_REG_ENABLED "Enable DEV_DYN_REG" ${FEATURE_DEV_DYN_REG_ENABLED})
146+
option(LOG_UPLOAD "Enable LOG_UPLOAD" ${FEATURE_LOG_UPLOAD_ENABLED})
147+
option(DEBUG_DEV_INFO_USED "Enable DEBUG_DEV_INFO_USED" ${FEATURE_DEBUG_DEV_INFO_USED})
148+
149+
option(AT_TCP_ENABLED "Enable AT_TCP" ${FEATURE_AT_TCP_ENABLED})
150+
151+
if(AT_TCP_ENABLED STREQUAL "ON")
152+
option(AT_UART_RECV_IRQ "Enable AT_UART_RECV_IRQ" ${FEATURE_AT_UART_RECV_IRQ})
153+
option(AT_OS_USED "Enable AT_UART_RECV_IRQ" ${FEATURE_AT_OS_USED})
154+
option(AT_DEBUG "Enable AT_DEBUG" ${FEATURE_AT_DEBUG})
155+
else()
156+
option(AT_UART_RECV_IRQ "Enable AT_UART_RECV_IRQ" OFF)
157+
option(AT_OS_USED "Enable AT_UART_RECV_IRQ" OFF)
158+
option(AT_DEBUG "Enable AT_DEBUG" OFF)
159+
endif()
160+
161+
configure_file (
162+
"${PROJECT_SOURCE_DIR}/tools/cmake_scripts/config.h.in"
163+
"${PROJECT_SOURCE_DIR}/include/config.h"
164+
@ONLY
165+
)
166+
167+
# 头文件目录
168+
include_directories(${PROJECT_SOURCE_DIR}/include
169+
${PROJECT_SOURCE_DIR}/include/exports
170+
${PROJECT_SOURCE_DIR}/platform/at_device/esp8266
171+
${PROJECT_SOURCE_DIR}/sdk_src/internal_inc
172+
${PROJECT_SOURCE_DIR}/external_libs/mbedtls/include)
173+
174+
file(GLOB src_include ${PROJECT_SOURCE_DIR}/include/*.h)
175+
file(GLOB src_inc_export ${PROJECT_SOURCE_DIR}/include/exports/*.h)
176+
file(COPY ${src_include} DESTINATION ${PROJECT_SOURCE_DIR}/output/${BUILD_TYPE}/include)
177+
file(COPY ${src_inc_export} DESTINATION ${PROJECT_SOURCE_DIR}/output/${BUILD_TYPE}/include/exports)
178+
179+
if(${EXTRACT_SRC} STREQUAL "ON" AND NOT DEFINED SAMPLE_ONLY)
180+
file(GLOB src_internal_inc ${PROJECT_SOURCE_DIR}/sdk_src/internal_inc/*.h)
181+
file(COPY ${src_include} DESTINATION ${PROJECT_SOURCE_DIR}/output/qcloud_iot_c_sdk/include)
182+
file(COPY ${src_inc_export} DESTINATION ${PROJECT_SOURCE_DIR}/output/qcloud_iot_c_sdk/include/exports)
183+
file(COPY ${src_internal_inc} DESTINATION ${PROJECT_SOURCE_DIR}/output/qcloud_iot_c_sdk/sdk_src/internal_inc)
184+
185+
if(AT_TCP_ENABLED STREQUAL "ON")
186+
file(GLOB src_at_inc ${PROJECT_SOURCE_DIR}/platform/at_device/${AT_DEVICE_NAME}/*.h)
187+
file(COPY ${src_at_inc} DESTINATION ${PROJECT_SOURCE_DIR}/output/qcloud_iot_c_sdk/platform)
188+
endif()
189+
endif()
190+
191+
# 添加源代码目录
192+
if(NOT DEFINED SAMPLE_ONLY)
193+
add_subdirectory(${PROJECT_SOURCE_DIR}/sdk_src)
194+
add_subdirectory(${PROJECT_SOURCE_DIR}/platform)
195+
add_subdirectory(${PROJECT_SOURCE_DIR}/external_libs/mbedtls)
196+
endif()
197+
198+
add_subdirectory(${PROJECT_SOURCE_DIR}/samples)
199+
if(SAMPLE_ONLY STREQUAL "ON")
200+
message(STATUS "Only compile samples!")
201+
endif()
202+
203+
# 证书及设备信息
204+
if(NOT DEFINED SAMPLE_ONLY)
205+
file(COPY ${PROJECT_SOURCE_DIR}/certs DESTINATION ${PROJECT_SOURCE_DIR}/output/${BUILD_TYPE}/bin)
206+
file(COPY ${PROJECT_SOURCE_DIR}/device_info.json DESTINATION ${PROJECT_SOURCE_DIR}/output/${BUILD_TYPE}/bin)
207+
endif()

CMakeSettings.json

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
{
2+
"configurations": [
3+
{
4+
"name": "x86-Debug",
5+
"generator": "Ninja",
6+
"configurationType": "Debug",
7+
"inheritEnvironments": [
8+
"msvc_x86"
9+
],
10+
"buildRoot": "${projectDir}\\build\\${name}",
11+
"installRoot": "${projectDir}\\build\\install\\${name}",
12+
"cmakeCommandArgs": "",
13+
"buildCommandArgs": "-v",
14+
"ctestCommandArgs": ""
15+
}
16+
]
17+
}

LICENSE

+31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
Tencent is pleased to support the open source community by making IoT Hub available.
2+
3+
Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved.
4+
5+
If you have downloaded a copy of the IoT Hub binary from Tencent, please note that the IoT Hub binary is licensed under the MIT License.
6+
7+
If you have downloaded a copy of the IoT Hub source code from Tencent, please note that IoT Hub source code is licensed under the MIT License,
8+
9+
except for the third-party components listed below which are subject to different license terms. Your integration of IoT Hub into your own projects may require compliance with the MIT License,
10+
11+
as well as the other licenses applicable to the third-party components included within IoT Hub.
12+
13+
A copy of the MIT License is included in this file.
14+
15+
Open Source Software Licensed under the MIT License: The below software in this distribution may have been modified by Tencent (“Tencent Modifications”). All Tencent Modifications are Copyright (C) 2016 THL A29 Limited.
16+
--------------------------------------------------------------------
17+
1. cpp-feather-ini-parser 1.42
18+
Copyright (c) 2014 Turbine1991
19+
20+
2. Dirent 1.22
21+
Copyright (c) 2015 Toni Rönkkö
22+
23+
24+
Terms of the MIT License:
25+
--------------------------------------------------------------------
26+
27+
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
28+
29+
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
30+
31+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

0 commit comments

Comments
 (0)