update qcloud sdk
1. iot-hub sdk update to 3.2.0 2. iot-explorer update to 3.1.1
This commit is contained in:
120
components/connectivity/qcloud-iot-hub-sdk/3rdparty/tools/build_scripts/internal_make_funcs.mk
vendored
Normal file
120
components/connectivity/qcloud-iot-hub-sdk/3rdparty/tools/build_scripts/internal_make_funcs.mk
vendored
Normal file
@@ -0,0 +1,120 @@
|
||||
define CompLib_Map
|
||||
$(eval \
|
||||
COMP_LIB_COMPONENTS += \
|
||||
$(if \
|
||||
$(filter y,$(FEATURE_$(strip $(1)))),$(strip $(2)) \
|
||||
) \
|
||||
)
|
||||
endef
|
||||
|
||||
define CompInc_Map
|
||||
$(eval \
|
||||
COMP_LIB_COMPONENTS_INCLUDES += \
|
||||
$(if \
|
||||
$(filter y,$(FEATURE_$(strip $(1)))),$(strip $(2)) \
|
||||
) \
|
||||
)
|
||||
endef
|
||||
|
||||
# 31, red. 32, green. 33, yellow. 34, blue. 35, magenta. 36, cyan. 37, white.
|
||||
define Brief_Log
|
||||
@if [ "$1" = "CC" ]; then \
|
||||
if echo "$@"|grep -q "\.so$$"; then \
|
||||
COLOR_MARK="\e[1;32m"; \
|
||||
elif echo "$@"|grep -q "\.ko$$"; then \
|
||||
COLOR_MARK="\e[1;35m"; \
|
||||
else \
|
||||
COLOR_MARK="\e[1;36m"; \
|
||||
fi \
|
||||
elif [ "$1" = "AR" ]; then \
|
||||
COLOR_MARK="\e[1;33m"; \
|
||||
elif [ "$1" = "LD" ]; then \
|
||||
COLOR_MARK="\e[1;31m"; \
|
||||
fi; \
|
||||
echo -ne "$${COLOR_MARK}";
|
||||
|
||||
@if [ "$2" = "" ]; then \
|
||||
FIRST_DEP="$(firstword $(filter-out FORCE,$?))"; \
|
||||
SPACE_BAR=" "; \
|
||||
if [ "$${FIRST_DEP}" != "" ]; then \
|
||||
FIRST_DEP="$$(basename $${FIRST_DEP})"; \
|
||||
fi; \
|
||||
printf "\r%-40s%s\n" "[$1] $$(expr substr $$(basename $@) 1 30)" "<= $${FIRST_DEP} $${SPACE_BAR}"; \
|
||||
else \
|
||||
printf "\r%-40s%s\n" "[$1] $$(expr substr $(2) 1 30)" "<= $${FIRST_DEP} $${SPACE_BAR}"; \
|
||||
fi
|
||||
|
||||
@for i in $(wordlist 2,100,$^); do \
|
||||
printf "%-40s%s\n" "" " $$(basename $${i})"; \
|
||||
done
|
||||
@echo -ne "\e[0m"
|
||||
endef
|
||||
|
||||
define CC_Log
|
||||
@if [ "$2" = "" ]; then \
|
||||
FIRST_DEP="$(firstword $(filter-out FORCE,$?))"; \
|
||||
SPACE_BAR=" "; \
|
||||
if [ "$${FIRST_DEP}" != "" ]; then \
|
||||
FIRST_DEP="$$(basename $${FIRST_DEP})"; \
|
||||
fi; \
|
||||
printf "\r%-40s%s\n" "[CC] $$(expr substr $$(basename $@) 1 30)" "<= $${FIRST_DEP} $${SPACE_BAR}"; \
|
||||
else \
|
||||
printf "\r%-40s%s\n" "[CC] $$(expr substr $(2) 1 30)" "<= $${FIRST_DEP} $${SPACE_BAR}"; \
|
||||
fi
|
||||
|
||||
@for i in $(wordlist 2,100,$^); do \
|
||||
printf "%-40s%s\n" "" " $$(basename $${i})"; \
|
||||
done
|
||||
endef
|
||||
|
||||
define AR_Log
|
||||
@if [ "$2" = "" ]; then \
|
||||
FIRST_DEP="$(firstword $(filter-out FORCE,$?))"; \
|
||||
SPACE_BAR=" "; \
|
||||
if [ "$${FIRST_DEP}" != "" ]; then \
|
||||
FIRST_DEP="$$(basename $${FIRST_DEP})"; \
|
||||
fi; \
|
||||
printf "\r%-40s%s\n" "[AR] $$(expr substr $$(basename $@) 1 30)" "<= $${FIRST_DEP} $${SPACE_BAR}"; \
|
||||
else \
|
||||
printf "\r%-40s%s\n" "[AR] $$(expr substr $(2) 1 30)" "<= $${FIRST_DEP} $${SPACE_BAR}"; \
|
||||
fi
|
||||
|
||||
@for i in $(wordlist 2,100,$^); do \
|
||||
printf "%-40s%s\n" "" " $$(basename $${i})"; \
|
||||
done
|
||||
endef
|
||||
|
||||
define Compile_Result
|
||||
@echo ""
|
||||
@echo "========================================================================="
|
||||
@echo "o BUILD COMPLETE WITH FOLLOWING CONFIGS:"
|
||||
@echo "----"
|
||||
@( \
|
||||
$(foreach V,$(SWITCH_VARS), \
|
||||
$(if $(findstring FEATURE_,$(V)), \
|
||||
printf "%-36s : %-s\n" " $(V)" "$($(V))"; \
|
||||
) \
|
||||
) )
|
||||
|
||||
@echo ""
|
||||
@echo "o RELEASE PACKAGE LAYOUT:"
|
||||
@echo "----"
|
||||
@cd $(FINAL_DIR) && echo -n " " && pwd && echo "" && \
|
||||
find . -print | awk '!/\.$$/ { \
|
||||
for (i = 1; i < NF-1; i++) { \
|
||||
printf("| "); \
|
||||
} \
|
||||
print "+-- "$$NF}' FS='/' | sed 's!\(.*\)! &!g'
|
||||
@echo ""
|
||||
|
||||
@echo "o BINARY FOOTPRINT CONSIST:"
|
||||
@echo "----"
|
||||
@chmod a+x $(SCRIPT_DIR)/stats_static_lib.sh
|
||||
@$(SCRIPT_DIR)/stats_static_lib.sh $(FINAL_DIR)/lib/$(COMP_LIB)
|
||||
@$(SCRIPT_DIR)/stats_static_lib.sh $(FINAL_DIR)/lib/$(PLATFORM_LIB)
|
||||
|
||||
@echo "========================================================================="
|
||||
@echo ""
|
||||
endef
|
||||
|
||||
|
103
components/connectivity/qcloud-iot-hub-sdk/3rdparty/tools/build_scripts/parse_make_settings.mk
vendored
Normal file
103
components/connectivity/qcloud-iot-hub-sdk/3rdparty/tools/build_scripts/parse_make_settings.mk
vendored
Normal file
@@ -0,0 +1,103 @@
|
||||
include $(SCRIPT_DIR)/internal_make_funcs.mk
|
||||
|
||||
SETTING_VARS := \
|
||||
BUILD_TYPE \
|
||||
PLATFORM_CC \
|
||||
PLATFORM_AR \
|
||||
PLATFORM_OS \
|
||||
|
||||
SWITCH_VARS := \
|
||||
FEATURE_MQTT_COMM_ENABLED \
|
||||
FEATURE_COAP_COMM_ENABLED \
|
||||
FEATURE_OTA_COMM_ENABLED \
|
||||
FEATURE_MQTT_DEVICE_SHADOW \
|
||||
FEATURE_AUTH_WITH_NOTLS \
|
||||
FEATURE_GATEWAY_ENABLED \
|
||||
FEATURE_LOG_UPLOAD_ENABLED \
|
||||
FEATURE_MULTITHREAD_ENABLED \
|
||||
FEATURE_DEV_DYN_REG_ENABLED \
|
||||
FEATURE_AT_TCP_ENABLED \
|
||||
FEATURE_AT_UART_RECV_IRQ \
|
||||
FEATURE_AT_OS_USED \
|
||||
FEATURE_AT_DEBUG \
|
||||
FEATURE_DEBUG_DEV_INFO_USED \
|
||||
FEATURE_OTA_USE_HTTPS \
|
||||
|
||||
$(foreach v, \
|
||||
$(SETTING_VARS) $(SWITCH_VARS), \
|
||||
$(eval export $(v)=$($(v))) \
|
||||
)
|
||||
|
||||
$(foreach v, \
|
||||
$(SWITCH_VARS), \
|
||||
$(if $(filter y,$($(v))), \
|
||||
$(eval CFLAGS += -D$(subst FEATURE_,,$(v)))) \
|
||||
)
|
||||
|
||||
|
||||
ifeq (debug,$(strip $(BUILD_TYPE)))
|
||||
CFLAGS += -DIOT_DEBUG -g -O2
|
||||
endif
|
||||
|
||||
ifneq (linux,$(strip $(PLATFORM_OS)))
|
||||
ifeq (y,$(strip $(FEATURE_SDKTESTS_ENABLED)))
|
||||
$(error FEATURE_SDKTESTS_ENABLED with gtest framework just supports to be enabled on PLATFORM_OS = linux!)
|
||||
endif
|
||||
else
|
||||
ifeq (y,$(strip $(FEATURE_SDKTESTS_ENABLED)))
|
||||
CFLAGS += -DSDKTESTS_ENABLED
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq (y,$(strip $(FEATURE_OTA_COMM_ENABLED)))
|
||||
ifeq (MQTT,$(strip $(FEATURE_OTA_SIGNAL_CHANNEL)))
|
||||
ifneq (y,$(strip $(FEATURE_MQTT_COMM_ENABLED)))
|
||||
$(error FEATURE_OTA_SIGNAL_CHANNEL = MQTT requires FEATURE_MQTT_COMM_ENABLED = y!)
|
||||
endif
|
||||
CFLAGS += -DOTA_MQTT_CHANNEL
|
||||
else
|
||||
ifeq (COAP,$(strip $(FEATURE_OTA_SIGNAL_CHANNEL)))
|
||||
ifneq (y,$(strip $(FEATURE_COAP_COMM_ENABLED)))
|
||||
$(error FEATURE_OTA_SIGNAL_CHANNEL = COAP requires FEATURE_COAP_COMM_ENABLED = y!)
|
||||
endif
|
||||
CFLAGS += -DOTA_COAP_CHANNEL
|
||||
else
|
||||
$(error FEATURE_OTA_SIGNAL_CHANNEL must be MQTT or COAP!)
|
||||
endif # COAP
|
||||
endif # MQTT
|
||||
endif # OTA Enabled
|
||||
|
||||
ifeq (CERT,$(strip $(FEATURE_AUTH_MODE)))
|
||||
ifeq (y,$(strip $(FEATURE_AUTH_WITH_NOTLS)))
|
||||
$(error FEATURE_AUTH_MODE = CERT requires FEATURE_AUTH_WITH_NOTLS = n!)
|
||||
endif
|
||||
CFLAGS += -DAUTH_MODE_CERT
|
||||
else
|
||||
ifeq (KEY,$(strip $(FEATURE_AUTH_MODE)))
|
||||
CFLAGS += -DAUTH_MODE_KEY
|
||||
else
|
||||
$(error FEATURE_AUTH_MODE must be CERT or KEY!)
|
||||
endif
|
||||
endif # Auth mode
|
||||
|
||||
ifeq (y, $(strip $(FEATURE_SYSTEM_COMM_ENABLED)))
|
||||
CFLAGS += -DSYSTEM_COMM
|
||||
endif
|
||||
|
||||
ifeq (y, $(strip $(FEATURE_LOG_UPLOAD_ENABLED)))
|
||||
CFLAGS += -DLOG_UPLOAD
|
||||
endif
|
||||
|
||||
ifeq (y, $(strip $(FEATURE_AT_TCP_ENABLED)))
|
||||
CFLAGS += -DAT_TCP_ENABLED
|
||||
ifeq (y, $(strip $(FEATURE_AT_UART_RECV_IRQ)))
|
||||
CFLAGS += -DAT_UART_RECV_IRQ
|
||||
endif
|
||||
ifeq (y, $(strip $(FEATURE_AT_OS_USED)))
|
||||
CFLAGS += -DAT_OS_USED
|
||||
endif
|
||||
ifeq (y, $(strip $(FEATURE_AT_DEBUG)))
|
||||
CFLAGS += -DFEATURE_AT_DEBUG
|
||||
endif
|
||||
endif
|
||||
|
5
components/connectivity/qcloud-iot-hub-sdk/3rdparty/tools/build_scripts/rules-tests.mk
vendored
Normal file
5
components/connectivity/qcloud-iot-hub-sdk/3rdparty/tools/build_scripts/rules-tests.mk
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
.PHONY: run_demo_test demo_test_clean run_unit_test run_multi_thread_test \
|
||||
coap_run_demo_test coap_demo_test_clean
|
||||
|
||||
tests: run_demo_test run_unit_test run_multi_thread_test coap_run_demo_test
|
||||
|
104
components/connectivity/qcloud-iot-hub-sdk/3rdparty/tools/build_scripts/rules.mk
vendored
Normal file
104
components/connectivity/qcloud-iot-hub-sdk/3rdparty/tools/build_scripts/rules.mk
vendored
Normal file
@@ -0,0 +1,104 @@
|
||||
iot_sdk_objects = $(patsubst %.c,%.o, $(IOTSDK_SRC_FILES))
|
||||
iot_platform_objects = $(patsubst %.c,%.o, $(IOTPLATFORM_SRC_FILES))
|
||||
|
||||
.PHONY: config mbedtls clean final-out samples tests
|
||||
|
||||
all: config mbedtls ${COMP_LIB} ${PLATFORM_LIB} final-out samples tests
|
||||
$(call Compile_Result)
|
||||
|
||||
${COMP_LIB}: ${iot_sdk_objects}
|
||||
$(call Brief_Log,"AR")
|
||||
$(TOP_Q) \
|
||||
$(AR) rcs $@ $(iot_sdk_objects)
|
||||
|
||||
$(TOP_Q) \
|
||||
rm ${iot_sdk_objects}
|
||||
|
||||
${PLATFORM_LIB}: ${iot_platform_objects}
|
||||
$(call Brief_Log,"AR")
|
||||
$(TOP_Q) \
|
||||
$(AR) rcs $@ $(iot_platform_objects)
|
||||
|
||||
$(TOP_Q) \
|
||||
rm ${iot_platform_objects}
|
||||
|
||||
config:
|
||||
$(TOP_Q) \
|
||||
mkdir -p ${TEMP_DIR}
|
||||
|
||||
mbedtls:
|
||||
ifeq (,$(filter -DAUTH_WITH_NOTLS,$(CFLAGS)))
|
||||
$(TOP_Q) \
|
||||
make -s -C $(THIRD_PARTY_PATH)/mbedtls lib -e CC=$(PLATFORM_CC) AR=$(PLATFORM_AR)
|
||||
|
||||
$(TOP_Q) \
|
||||
cp -RP $(THIRD_PARTY_PATH)/mbedtls/library/libmbedtls.* \
|
||||
$(THIRD_PARTY_PATH)/mbedtls/library/libmbedx509.* \
|
||||
$(THIRD_PARTY_PATH)/mbedtls/library/libmbedcrypto.* \
|
||||
$(TEMP_DIR)
|
||||
|
||||
$(TOP_Q) \
|
||||
cd $(TEMP_DIR) && $(AR) x libmbedtls.a \
|
||||
&& $(AR) x libmbedx509.a \
|
||||
&& $(AR) x libmbedcrypto.a
|
||||
endif
|
||||
|
||||
${iot_sdk_objects}:%.o:%.c
|
||||
$(TOP_Q) echo '' > $(TOP_DIR)/include/config.h
|
||||
$(call Brief_Log,"CC")
|
||||
$(TOP_Q) \
|
||||
$(PLATFORM_CC) $(CFLAGS) -c $^ -o $@
|
||||
|
||||
${iot_platform_objects}:%.o:%.c
|
||||
$(call Brief_Log,"CC")
|
||||
$(TOP_Q) \
|
||||
$(PLATFORM_CC) $(CFLAGS) -c $^ -o $@
|
||||
|
||||
final-out :
|
||||
$(TOP_Q) \
|
||||
mkdir -p ${FINAL_DIR} ${DIST_DIR} ${FINAL_DIR}/lib \
|
||||
${FINAL_DIR}/include ${FINAL_DIR}/bin
|
||||
|
||||
$(TOP_Q) \
|
||||
mv ${COMP_LIB} ${FINAL_DIR}/lib/ && \
|
||||
mv ${PLATFORM_LIB} ${FINAL_DIR}/lib
|
||||
|
||||
$(TOP_Q) \
|
||||
cp -rf $(TOP_DIR)/include $(FINAL_DIR)/
|
||||
|
||||
$(TOP_Q) \
|
||||
cp -rf $(TOP_DIR)/certs $(FINAL_DIR)/bin/
|
||||
|
||||
ifeq (,$(filter -DAUTH_WITH_NOTLS,$(CFLAGS)))
|
||||
$(TOP_Q) \
|
||||
mv ${TEMP_DIR}/*.a ${FINAL_DIR}/lib/
|
||||
endif
|
||||
|
||||
$(TOP_Q) \
|
||||
rm -rf ${TEMP_DIR}
|
||||
|
||||
#include $(SCRIPT_DIR)/rules-tests.mk
|
||||
|
||||
samples:
|
||||
$(TOP_Q) \
|
||||
make -s -C $(SAMPLE_DIR)
|
||||
|
||||
TLSDIR = $(THIRD_PARTY_PATH)/mbedtls
|
||||
clean:
|
||||
$(TOP_Q) \
|
||||
rm -rf ${TEMP_DIR}
|
||||
|
||||
$(TOP_Q) \
|
||||
rm -rf ${DIST_DIR}
|
||||
|
||||
ifeq (,$(filter -DAUTH_WITH_NOTLS,$(CFLAGS)))
|
||||
ifeq ($(TLSDIR), $(wildcard $(THIRD_PARTY_PATH)/mbedtls))
|
||||
$(TOP_Q) \
|
||||
make -s -C $(THIRD_PARTY_PATH)/mbedtls clean
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq (,$(filter -DSDKTESTS_ENABLED,$(CFLAGS)))
|
||||
$(TOP_Q) \
|
||||
rm -rf $(TEST_LIB_DIR)
|
||||
endif
|
65
components/connectivity/qcloud-iot-hub-sdk/3rdparty/tools/build_scripts/stats_static_lib.sh
vendored
Normal file
65
components/connectivity/qcloud-iot-hub-sdk/3rdparty/tools/build_scripts/stats_static_lib.sh
vendored
Normal file
@@ -0,0 +1,65 @@
|
||||
#! /bin/bash
|
||||
|
||||
TARGET=$1
|
||||
TEMPD=$(mktemp -d -t STATD-XXXX)
|
||||
TEMPF=$(mktemp -t STATF-XXXX)
|
||||
|
||||
#echo "TARGET = ${TARGET}"
|
||||
#echo "STAGED = ${STAGED}"
|
||||
#echo "TEMPD = ${TEMPD}"
|
||||
|
||||
if [ ! -f ${TARGET} ] || [ ! -d ${STAGED} ]; then
|
||||
echo "Invalid Env"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
cp ${TARGET} ${TEMPD}
|
||||
cd ${TEMPD}
|
||||
ar xf $(basename ${TARGET})
|
||||
rm -f $(basename ${TARGET})
|
||||
${STRIP} *.o > /dev/null 2>&1
|
||||
|
||||
NAME=$1
|
||||
for obj in $(ls *.o); do
|
||||
dir=$(find ${STAGED} -name ${obj}|xargs dirname|xargs basename)
|
||||
printf "%-12s %-32s %s\n" $(basename $1) ${obj} $(du -b ${obj}|awk '{ print $1 }')
|
||||
done | sort > ${TEMPF}
|
||||
|
||||
MODS=$(cat ${TEMPF}|awk '{ print $1 }'|sort -u)
|
||||
|
||||
TOTAL=$(cat ${TEMPF}|awk '{ sum += $3 } END { print sum }')
|
||||
# echo "TOTAL = ${TOTAL}"
|
||||
|
||||
SMODS=$( \
|
||||
for mod in ${MODS}; do \
|
||||
MSIZE=$(grep "^${mod}" ${TEMPF}|awk '{ sum += $3 } END { print sum }'); \
|
||||
printf "%-8s %s\n" \
|
||||
$(awk -v a=${MSIZE} -v b=${TOTAL} 'BEGIN { printf("%.2f%%\n", a/b*100); }') \
|
||||
"${mod}"; \
|
||||
done | sort -nr | awk '{ print $2 }' \
|
||||
)
|
||||
|
||||
echo ""
|
||||
for mod in ${SMODS}; do
|
||||
MSIZE=$(grep "^${mod}" ${TEMPF}|awk '{ sum += $3 } END { print sum }')
|
||||
OBJS=$(grep "^${mod}" ${TEMPF}|awk '{ print $2 }')
|
||||
for obj in ${OBJS}; do
|
||||
FSIZE=$(grep "\<${obj}\>" ${TEMPF}|awk '{ print $3 }')
|
||||
printf " %-8s %28s | %-8s %8s %-8s\n" \
|
||||
$(awk -v a=${FSIZE} -v b=${MSIZE} 'BEGIN { printf("%.2f%%\n", a/b*100); }') \
|
||||
"${obj}" "${mod}" "${FSIZE} /" "${MSIZE}"
|
||||
done | sort -nr
|
||||
echo " -----------------------------------------------------------------"
|
||||
done
|
||||
|
||||
echo ""
|
||||
for mod in ${MODS}; do
|
||||
MSIZE=$(grep "^${mod}" ${TEMPF}|awk '{ sum += $3 } END { print sum }')
|
||||
printf " %-8s %-12s %16s\n" \
|
||||
$(awk -v a=${MSIZE} -v b=${TOTAL} 'BEGIN { printf("%.2f%%\n", a/b*100); }') \
|
||||
"[ ${mod} ]" "${MSIZE} Bytes"
|
||||
done | sort -nr
|
||||
|
||||
cd "${OLDPWD}"
|
||||
rm -rf ${TEMPD}
|
||||
rm -f ${TEMPF}
|
11
components/connectivity/qcloud-iot-hub-sdk/3rdparty/tools/build_scripts/update_gtest.sh
vendored
Normal file
11
components/connectivity/qcloud-iot-hub-sdk/3rdparty/tools/build_scripts/update_gtest.sh
vendored
Normal file
@@ -0,0 +1,11 @@
|
||||
#!/bin/bash
|
||||
|
||||
GOOGLE_TEST="external_libs/googletest"
|
||||
|
||||
if [ ! -d ${GOOGLE_TEST} ]; then
|
||||
git clone -q packages/gtest_module.git ${GOOGLE_TEST}
|
||||
else
|
||||
cd ${GOOGLE_TEST}
|
||||
git pull -q
|
||||
cd -
|
||||
fi
|
11
components/connectivity/qcloud-iot-hub-sdk/3rdparty/tools/build_scripts/update_mbedtls.sh
vendored
Normal file
11
components/connectivity/qcloud-iot-hub-sdk/3rdparty/tools/build_scripts/update_mbedtls.sh
vendored
Normal file
@@ -0,0 +1,11 @@
|
||||
#!/bin/bash
|
||||
|
||||
MBEDTLS_DIR="external_libs/mbedtls"
|
||||
|
||||
if [ ! -d ${MBEDTLS_DIR} ]; then
|
||||
git clone -q packages/mbedtls_module.git ${MBEDTLS_DIR}
|
||||
else
|
||||
cd ${MBEDTLS_DIR}
|
||||
git pull -q
|
||||
cd -
|
||||
fi
|
17
components/connectivity/qcloud-iot-hub-sdk/3rdparty/tools/cmake_scripts/config.h.in
vendored
Normal file
17
components/connectivity/qcloud-iot-hub-sdk/3rdparty/tools/cmake_scripts/config.h.in
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
#cmakedefine AUTH_MODE_CERT
|
||||
#cmakedefine AUTH_MODE_KEY
|
||||
#cmakedefine AUTH_WITH_NOTLS
|
||||
#cmakedefine GATEWAY_ENABLED
|
||||
#cmakedefine COAP_COMM_ENABLED
|
||||
#cmakedefine OTA_MQTT_CHANNEL
|
||||
#cmakedefine SYSTEM_COMM
|
||||
#cmakedefine DEV_DYN_REG_ENABLED
|
||||
#cmakedefine LOG_UPLOAD
|
||||
#cmakedefine IOT_DEBUG
|
||||
#cmakedefine DEBUG_DEV_INFO_USED
|
||||
#cmakedefine AT_TCP_ENABLED
|
||||
#cmakedefine AT_UART_RECV_IRQ
|
||||
#cmakedefine AT_OS_USED
|
||||
#cmakedefine AT_DEBUG
|
||||
#cmakedefine OTA_USE_HTTPS
|
||||
#cmakedefine MULTITHREAD_ENABLED
|
12
components/connectivity/qcloud-iot-hub-sdk/3rdparty/tools/cmake_scripts/convert.sh
vendored
Normal file
12
components/connectivity/qcloud-iot-hub-sdk/3rdparty/tools/cmake_scripts/convert.sh
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
#!/bin/bash
|
||||
|
||||
if [ $1 == "linux" ]; then
|
||||
find $2 -type f -name "*.h" -print -o -name "*.c" -print | xargs -i sed -i '1 s/^\xef\xbb\xbf//' {}
|
||||
echo "Convert source files to Unix format!!!"
|
||||
elif [ $1 == "windows" ]; then
|
||||
find $2 -type f -name "*.h" -print -o -name "*.c" -print | xargs -i sed -i '1 s/^/\xef\xbb\xbf&/' {}
|
||||
echo "Convert source files to Windows format!!!"
|
||||
else
|
||||
echo "Invaild argument!"
|
||||
echo "Please choose windows or linux !!!"
|
||||
fi
|
352
components/connectivity/qcloud-iot-hub-sdk/3rdparty/tools/codegen.py
vendored
Normal file
352
components/connectivity/qcloud-iot-hub-sdk/3rdparty/tools/codegen.py
vendored
Normal file
@@ -0,0 +1,352 @@
|
||||
#!/usr/bin/python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import json
|
||||
import sys
|
||||
import os
|
||||
import argparse
|
||||
import glob
|
||||
#import cStringIO
|
||||
|
||||
reload(sys)
|
||||
sys.setdefaultencoding("utf-8")
|
||||
|
||||
try: import simplejson as json
|
||||
except: import json
|
||||
|
||||
|
||||
# {"version":"1.0","properties":[{"id":"light_switch","name":"电灯开关","desc":"控制电灯开灭","required":true,"mode":"rw","define":{"type":"bool","mapping":{"0":"关","1":"开"}}},{"id":"color","name":"颜色","desc":"灯光颜色","mode":"rw","define":{"type":"enum","mapping":{"0":"Red","1":"Green","2":"Blue"}}},{"id":"brightness","name":"颜色","desc":"灯光颜色","mode":"rw","define":{"type":"int","unit":"%","unitDesc":"亮度百分比","min":"0","max":"100"}},{"id":"name","name":"灯位置名称","desc":"灯位置名称:书房、客厅等","mode":"rw","required":true,"define":{"type":"string","min":"0","max":"64"}}]}
|
||||
class TEMPLATE_CONSTANTS:
|
||||
VERSION = "version"
|
||||
TYPE = "type"
|
||||
NAME = "name"
|
||||
ID = "id"
|
||||
MIN = "min"
|
||||
MAX = "max"
|
||||
DEFINE = "define"
|
||||
PROPERTIES = "properties"
|
||||
EVENTS = "events"
|
||||
MAPPING = "mapping"
|
||||
UNIT = "unit"
|
||||
UNITDESC = "unitDesc"
|
||||
REQUIRED = "required"
|
||||
MODE = "mode"
|
||||
|
||||
|
||||
|
||||
class iot_enum:
|
||||
def __init__(self, parent, name, index):
|
||||
self.parent = parent
|
||||
self.id = name
|
||||
self.index = index
|
||||
|
||||
def get_c_macro_name(self):
|
||||
return "e_{}_{}".format(self.parent.upper(), self.id.upper())
|
||||
|
||||
def get_define_str(self):
|
||||
return "#define {} {}".format(self.get_c_macro_name(), self.index)
|
||||
|
||||
class iot_field:
|
||||
def __init__(self,id, name, index, field_obj):
|
||||
self.default_value = ""
|
||||
self.enums = []
|
||||
self.index = index
|
||||
self.id = id
|
||||
self.name = name
|
||||
self.type_name = field_obj["define"]["type"]
|
||||
|
||||
if self.type_name == "bool":
|
||||
self.type_define = "TYPE_DEF_TEMPLATE_BOOL"
|
||||
self.type_id = "TYPE_TEMPLATE_BOOL"
|
||||
self.default_value = "0"
|
||||
elif self.type_name == "enum":
|
||||
self.type_define = "TYPE_DEF_TEMPLATE_ENUM"
|
||||
self.type_id = "TYPE_TEMPLATEENUM"
|
||||
if TEMPLATE_CONSTANTS.DEFINE not in field_obj:
|
||||
raise ValueError("错误:{} 字段定义中未找到枚举定义{} 字段".format(name, TEMPLATE_CONSTANTS.DEFINE))
|
||||
|
||||
enum_defs = field_obj["define"]["mapping"]
|
||||
|
||||
|
||||
for enum_id in enum_defs:
|
||||
enum_name = enum_defs[enum_id]
|
||||
current_enum = iot_enum(self.id, enum_name, enum_id)
|
||||
self.enums.append(current_enum)
|
||||
if self.default_value == "":
|
||||
self.default_value = enum_id
|
||||
if self.default_value == "":
|
||||
raise ValueError("错误:{} 字段默认值 {} 非法".format(name, field_obj["default"]))
|
||||
|
||||
elif self.type_name == "float":
|
||||
self.type_define = "TYPE_DEF_TEMPLATE_FLOAT"
|
||||
self.type_id = "TYPE_TEMPLATE_FLOAT"
|
||||
|
||||
self.min_value = field_obj["define"]["min"]
|
||||
self.max_value = field_obj["define"]["max"]
|
||||
self.default_value = field_obj["define"]["start"]
|
||||
if float(self.default_value) < float(self.min_value) or float(self.default_value) > float(self.max_value):
|
||||
raise ValueError("错误:{} 字段 default 指定的默认值超出 min~max 取值范围".format(name))
|
||||
elif self.type_name == "int":
|
||||
self.type_define = "TYPE_DEF_TEMPLATE_INT"
|
||||
self.type_id = "TYPE_TEMPLATE_INT"
|
||||
|
||||
self.min_value = field_obj["define"]["min"]
|
||||
self.max_value = field_obj["define"]["max"]
|
||||
self.default_value = field_obj["define"]["start"]
|
||||
if int(self.default_value) < int(self.min_value) or int(self.default_value) > int(self.max_value):
|
||||
raise ValueError("错误:{} 字段 default 指定的默认值超出 min~max 取值范围".format(name))
|
||||
elif self.type_name == "string":
|
||||
self.type_define = "TYPE_DEF_TEMPLATE_STRING"
|
||||
self.type_id = "TYPE_TEMPLATE_STRING"
|
||||
|
||||
self.min_value = field_obj["define"]["min"]
|
||||
self.max_value = field_obj["define"]["max"]
|
||||
self.default_value = "{'\\0'}"
|
||||
elif self.type_name == "timestamp":
|
||||
self.type_define = "TYPE_DEF_TEMPLATE_TIME"
|
||||
self.type_id = "TYPE_TEMPLATE_TIME"
|
||||
self.default_value = 0
|
||||
else:
|
||||
raise ValueError('{} 字段 数据类型 type={} 取值非法,有效值应为:bool,enum,int,float,string'.format(name, field_obj["type"]))
|
||||
|
||||
def get_id_c_macro_name(self):
|
||||
return "TC_IOT_PROP_{}".format(self.id)
|
||||
|
||||
def get_id_c_member_name(self):
|
||||
return "m_{}".format(self.id)
|
||||
|
||||
def get_id_default_value(self):
|
||||
return "{}".format(self.default_value)
|
||||
|
||||
def get_id_define_str(self):
|
||||
return "#define {} {}".format(self.get_id_c_macro_name(), self.index)
|
||||
|
||||
def get_struct_field_declare(self):
|
||||
if self.type_id == "TYPE_TEMPLATE_STRING":
|
||||
return "TYPE_DEF_TEMPLATE_STRING m_{}[{}+1];".format(self.id, str(self.max_value))
|
||||
else:
|
||||
return "{} m_{};".format(self.type_define, self.id)
|
||||
|
||||
def get_global_field_declare(self):
|
||||
if self.type_id == "TYPE_TEMPLATE_STRING":
|
||||
return "TYPE_DEF_TEMPLATE_STRING sg_{}[{}+1]={};".format(self.id, str(self.max_value),"{0}")
|
||||
else:
|
||||
return "{} sg_{} = {};".format(self.type_define, self.id, self.default_value)
|
||||
|
||||
def get_meta_define_str(self, var_name):
|
||||
return '{{ "{}", &{}.{}, {} }},' \
|
||||
.format(self.id, var_name, self.get_id_c_member_name(), self.type_id)
|
||||
class iot_event:
|
||||
def __init__(self,id, name, index, event):
|
||||
self.index = index
|
||||
self.id = id
|
||||
self.name = name
|
||||
self.event_type = event["type"]
|
||||
self.desc = event["desc"]
|
||||
self.event_properties = []
|
||||
self.event_property_count = 0
|
||||
|
||||
for property in event["params"]:
|
||||
self.event_properties.append(iot_field(property["id"], property["name"], self.event_property_count, property))
|
||||
self.event_property_count += 1
|
||||
|
||||
|
||||
def get_sigle_event_info(self):
|
||||
event_info = ""
|
||||
event_info += "\n id:{} name:\"{}\" type:\"{}\"\n".format(self.id, self.name, self.event_type)
|
||||
event_info += " property_count:{} \n params:[".format(self.event_property_count)
|
||||
|
||||
for field in self.event_properties:
|
||||
event_info += "\n para:{} type:{}".format(field.id, field.type_id)
|
||||
|
||||
event_info += "\n ]"
|
||||
return event_info
|
||||
|
||||
def gen_sigle_event_info(self):
|
||||
resault = ""
|
||||
event_para_info = ""
|
||||
event_property_info = ""
|
||||
event_var_info = ""
|
||||
for field in self.event_properties:
|
||||
event_para_info += "static {}\n".format(field.get_global_field_declare())
|
||||
event_property_info += "\n {"
|
||||
if field.type_id == "TYPE_TEMPLATE_STRING":
|
||||
event_property_info += ".key = \"{}\", .data = sg_{}, .type = {}".format(field.id, field.id, field.type_id)
|
||||
else:
|
||||
event_property_info += ".key = \"{}\", .data = &sg_{}, .type = {}".format(field.id, field.id, field.type_id)
|
||||
event_property_info += "},"
|
||||
event_var_info += "static DeviceProperty g_propertyEvent_{}[] = ".format(self.id)
|
||||
resault += event_para_info + event_var_info + "{\n"+event_property_info + "\n};\n"
|
||||
return resault
|
||||
|
||||
|
||||
|
||||
class iot_struct:
|
||||
def __init__(self, model):
|
||||
self.version = model["version"]
|
||||
self.fields = []
|
||||
self.field_id = 0
|
||||
self.events = []
|
||||
self.event_id = 0
|
||||
for field_define in model["properties"]:
|
||||
if TEMPLATE_CONSTANTS.NAME not in field_define:
|
||||
raise ValueError("错误:字段定义中未找到 Name 字段")
|
||||
self.fields.append(iot_field(field_define["id"], field_define["name"], self.field_id, field_define))
|
||||
self.field_id += 1
|
||||
|
||||
for event in model["events"]:
|
||||
if TEMPLATE_CONSTANTS.NAME not in event:
|
||||
raise ValueError("错误:字段定义中未找到 Name 字段")
|
||||
self.events.append(iot_event(event["id"], event["name"], self.event_id, event))
|
||||
self.event_id += 1
|
||||
|
||||
|
||||
def dump_data_info(self):
|
||||
print("dump iot struct,counts:{}".format(self.field_id))
|
||||
for temp_field in self.fields:
|
||||
if temp_field.type_name == "enum":
|
||||
print("{} {} {} {} ".format(temp_field.id, temp_field.type_name, temp_field.default_value, temp_field.type_define))
|
||||
print("enums:{")
|
||||
for enum in temp_field.enums:
|
||||
print("{} ".format(enum.get_c_macro_name()))
|
||||
print("}")
|
||||
else:
|
||||
print("{} {} {} {}\n".format(temp_field.id, temp_field.type_name, temp_field.default_value,
|
||||
temp_field.type_define))
|
||||
def dump_event_info(self):
|
||||
count = 0
|
||||
event_str = ""
|
||||
event_str += ("#define EVENT_COUNTS ({})\n").format(self.event_id)
|
||||
for event_d in self.events:
|
||||
event_str += "{}\n".format(event_d.gen_sigle_event_info())
|
||||
count += 1
|
||||
return event_str
|
||||
|
||||
def data_config_macro_define(self, struct_Template="sDataPoint",var_gTemplate="sg_DataTemplate"):
|
||||
define_str = ""
|
||||
define_str += "/*-----------------data config start -------------------*/ \n\n"
|
||||
define_str += "#define TOTAL_PROPERTY_COUNT {}\n\n".format(self.field_id)
|
||||
define_str += "static {} {}[TOTAL_PROPERTY_COUNT];\n\n".format(struct_Template, var_gTemplate)
|
||||
return define_str
|
||||
|
||||
def declare_product_data_struct(self, struct_name="ProductDataDefine", var_gname="sg_ProductData"):
|
||||
result = ""
|
||||
result += "typedef struct _" + struct_name + " {\n"
|
||||
for field in self.fields:
|
||||
result += " {}\n".format(field.get_struct_field_declare())
|
||||
result += "} " + struct_name + ";\n\n"
|
||||
result += "static " + struct_name + " "+var_gname + ";\n\n"
|
||||
return result
|
||||
|
||||
def property_data_initializer(self, struct_name="ProductDataDefine", var_gProduct="sg_ProductData", var_gTemplate="sg_DataTemplate"):
|
||||
count = 0
|
||||
init_str = ""
|
||||
init_str += "static void _init_data_template(void)\n{\n"
|
||||
#init_str += " memset((void *) & {}, 0, sizeof({}));\n".format(var_gProduct, struct_name)
|
||||
|
||||
for field in self.fields:
|
||||
|
||||
if field.type_define == "TYPE_DEF_TEMPLATE_STRING":
|
||||
init_str += " {}.{}[0] = {};\n".format(var_gProduct, field.get_id_c_member_name(), "'\\0'")
|
||||
init_str += " {}[{}].data_property.data = {}.{};\n".format(var_gTemplate, count, var_gProduct, field.get_id_c_member_name())
|
||||
else:
|
||||
init_str += " {}.{} = {};\n".format(var_gProduct, field.get_id_c_member_name(),field.get_id_default_value())
|
||||
init_str += " {}[{}].data_property.data = &{}.{};\n".format(var_gTemplate, count, var_gProduct, field.get_id_c_member_name())
|
||||
init_str += " {}[{}].data_property.key = \"{}\";\n".format(var_gTemplate, count, field.id)
|
||||
init_str += " {}[{}].data_property.type = {};\n\n".format(var_gTemplate, count, field.type_id)
|
||||
count += 1
|
||||
init_str += "};\n"
|
||||
return init_str;
|
||||
|
||||
def gen_data_config(self):
|
||||
data_config = ""
|
||||
data_config +="{}".format(self.data_config_macro_define())
|
||||
data_config +="{}".format(self.declare_product_data_struct())
|
||||
data_config += "{}".format(self.property_data_initializer())
|
||||
return data_config
|
||||
|
||||
def gen_event_config(self):
|
||||
resault = ""
|
||||
event_config = ""
|
||||
events_var = ""
|
||||
event_str = ""
|
||||
|
||||
event_config += ("\n#define EVENT_COUNTS ({})\n\n").format(self.event_id)
|
||||
events_var += "\nstatic sEvent g_events[]={\n"
|
||||
for event_d in self.events:
|
||||
event_config += "{}\n".format(event_d.gen_sigle_event_info())
|
||||
event_str += "\n {"
|
||||
event_str += "\n .event_name = \"{}\",".format(event_d.id)
|
||||
event_str += "\n .type = \"{}\",".format(event_d.event_type)
|
||||
event_str += "\n .timestamp = 0,"
|
||||
event_str += "\n .eventDataNum = sizeof(g_propertyEvent_{})/sizeof(g_propertyEvent_{}[0]),".format(event_d.id, event_d.id)
|
||||
event_str += "\n .pEventData = g_propertyEvent_{},".format(event_d.id)
|
||||
event_str +="\n },"
|
||||
resault += event_config + events_var + event_str + "\n};\n"
|
||||
return resault
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(description='Iothub datatemplate and events config code generator.', usage='use "./codegen.py -c xx/config.json" gen config code')
|
||||
parser.add_argument('-c','--config', dest='config',metavar='xxx.json', required=False,default='xxx.json',
|
||||
help='copy the generated file (data_config.c and events_config.c) to datatemplate_sample dir '
|
||||
'or your own code dir with datatemplate. '
|
||||
'\nconfig file can be download from tencent iot-hub platfrom. https://console.cloud.tencent.com/iotcloud')
|
||||
parser.add_argument('-d','--dest', dest='dest', required=False,default='.',
|
||||
help='Dest directory for generated code files, no / at the end.')
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
config_path = args.config
|
||||
if not os.path.exists(config_path):
|
||||
print(u"错误:配置文件不存在,请重新指定数据模板配置文件路径,请参考用法 ./codegen.py -c xx/data_template.json".format(config_path))
|
||||
return 1
|
||||
|
||||
config_dir = os.path.dirname(config_path)
|
||||
if config_dir:
|
||||
config_dir += "/"
|
||||
|
||||
f = open(config_path, "r")
|
||||
try:
|
||||
thingmodel = json.load(f)
|
||||
if 'properties' not in thingmodel:
|
||||
thingmodel.properties = []
|
||||
|
||||
if 'events' not in thingmodel:
|
||||
thingmodel.events = []
|
||||
|
||||
print(u"加载 {} 文件成功".format(config_path))
|
||||
except ValueError as e:
|
||||
print(u"错误:文件格式非法,请检查 {} 文件是否是 JSON 格式。".format(config_path))
|
||||
return 1
|
||||
|
||||
if TEMPLATE_CONSTANTS.PROPERTIES not in thingmodel:
|
||||
print(u"错误:{} 文件中未发现 DataTemplate 属性字段,请检查文件格式是否合法。".format(config_path))
|
||||
return 1
|
||||
|
||||
try:
|
||||
snippet = iot_struct(thingmodel)
|
||||
|
||||
output_data_config_file_name = args.dest + "/data_config.c"
|
||||
output_file = open(output_data_config_file_name, "w")
|
||||
output_file.write("{}".format(snippet.gen_data_config()))
|
||||
output_file.close()
|
||||
|
||||
output_event_config_file_name = args.dest + "/events_config.c"
|
||||
output_file = open(output_event_config_file_name, "w")
|
||||
output_file.write("#ifdef EVENT_POST_ENABLED\n{}\n#endif\n".format(snippet.gen_event_config()))
|
||||
output_file.close()
|
||||
|
||||
|
||||
print(u"文件 {} 生成成功".format(output_data_config_file_name))
|
||||
print(u"文件 {} 生成成功".format(output_event_config_file_name))
|
||||
|
||||
return 0
|
||||
except ValueError as e:
|
||||
print(e)
|
||||
return 1
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
sys.exit(main())
|
||||
|
230
components/connectivity/qcloud-iot-hub-sdk/3rdparty/tools/example_config.json
vendored
Normal file
230
components/connectivity/qcloud-iot-hub-sdk/3rdparty/tools/example_config.json
vendored
Normal file
@@ -0,0 +1,230 @@
|
||||
{
|
||||
"version": "1.0",
|
||||
"properties": [
|
||||
{
|
||||
"id": "time",
|
||||
"name": "time",
|
||||
"required": false,
|
||||
"desc": "",
|
||||
"mode": "rw",
|
||||
"define": {
|
||||
"type": "timestamp"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "float",
|
||||
"name": "float",
|
||||
"required": false,
|
||||
"desc": "",
|
||||
"mode": "r",
|
||||
"define": {
|
||||
"type": "float",
|
||||
"min": "-10",
|
||||
"max": "10",
|
||||
"start": "-5",
|
||||
"step": "0.5",
|
||||
"unit": "cm"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "light_switch",
|
||||
"name": "电灯开关",
|
||||
"required": true,
|
||||
"desc": "控制电灯开灭",
|
||||
"mode": "rw",
|
||||
"define": {
|
||||
"type": "bool",
|
||||
"mapping": {
|
||||
"0": "关",
|
||||
"1": "开"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "color",
|
||||
"name": "颜色",
|
||||
"desc": "灯光颜色",
|
||||
"mode": "rw",
|
||||
"define": {
|
||||
"type": "enum",
|
||||
"mapping": {
|
||||
"0": "Red",
|
||||
"1": "Green",
|
||||
"2": "Blue"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "brightness",
|
||||
"name": "亮度",
|
||||
"required": false,
|
||||
"desc": "灯光亮度",
|
||||
"mode": "rw",
|
||||
"define": {
|
||||
"type": "int",
|
||||
"min": "-9",
|
||||
"max": "100",
|
||||
"start": "-1",
|
||||
"step": "5",
|
||||
"unit": "cm"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "name",
|
||||
"name": "灯位置名称",
|
||||
"desc": "灯位置名称:书房、客厅等",
|
||||
"mode": "rw",
|
||||
"required": true,
|
||||
"define": {
|
||||
"type": "string",
|
||||
"min": "1",
|
||||
"max": "64"
|
||||
}
|
||||
}
|
||||
],
|
||||
"events": [
|
||||
{
|
||||
"id": "all_function",
|
||||
"name": "ALL_FUNCTION",
|
||||
"required": false,
|
||||
"desc": "",
|
||||
"params": [
|
||||
{
|
||||
"id": "bool",
|
||||
"name": "bool",
|
||||
"desc": "",
|
||||
"define": {
|
||||
"type": "bool",
|
||||
"mapping": {
|
||||
"0": "关",
|
||||
"1": "开"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "int",
|
||||
"name": "int",
|
||||
"desc": "",
|
||||
"define": {
|
||||
"type": "int",
|
||||
"min": "1",
|
||||
"max": "100",
|
||||
"start": "1",
|
||||
"step": "1",
|
||||
"unit": "cm"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "str",
|
||||
"name": "str",
|
||||
"desc": "",
|
||||
"define": {
|
||||
"type": "string",
|
||||
"min": "1",
|
||||
"max": "64"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "float",
|
||||
"name": "float",
|
||||
"desc": "",
|
||||
"define": {
|
||||
"type": "float",
|
||||
"min": "0",
|
||||
"max": "100",
|
||||
"start": "0",
|
||||
"step": "1.5",
|
||||
"unit": "cm"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "enum1",
|
||||
"name": "enum1",
|
||||
"desc": "",
|
||||
"define": {
|
||||
"type": "enum",
|
||||
"mapping": {
|
||||
"0": "color",
|
||||
"1": "door"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "time",
|
||||
"name": "time",
|
||||
"desc": "",
|
||||
"define": {
|
||||
"type": "timestamp"
|
||||
}
|
||||
}
|
||||
],
|
||||
"type": "alert"
|
||||
},
|
||||
{
|
||||
"id": "status_report",
|
||||
"name": "DeviceStatus",
|
||||
"desc": "Report the device status我是中文",
|
||||
"type": "info",
|
||||
"required": true,
|
||||
"params": [
|
||||
{
|
||||
"id": "status",
|
||||
"name": "running_state",
|
||||
"desc": "Report current device running state",
|
||||
"define": {
|
||||
"type": "bool",
|
||||
"mapping": {
|
||||
"0": "normal",
|
||||
"1": "fault"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "message",
|
||||
"name": "Message",
|
||||
"desc": "Some extra message",
|
||||
"define": {
|
||||
"type": "string",
|
||||
"min": "1",
|
||||
"max": "64"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "hardware_fault",
|
||||
"name": "Hardware_fault",
|
||||
"required": false,
|
||||
"desc": "Report hardware fault",
|
||||
"params": [
|
||||
{
|
||||
"id": "name",
|
||||
"name": "Name",
|
||||
"desc": "Name like: memory,tf card, censors ...",
|
||||
"define": {
|
||||
"type": "string",
|
||||
"min": "1",
|
||||
"max": "64"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "error_code",
|
||||
"name": "Error_Code",
|
||||
"desc": "Error code for fault",
|
||||
"define": {
|
||||
"type": "int",
|
||||
"unit": "",
|
||||
"step": "1",
|
||||
"min": "0",
|
||||
"max": "2000",
|
||||
"start": "0"
|
||||
}
|
||||
}
|
||||
],
|
||||
"type": "fault"
|
||||
}
|
||||
],
|
||||
"profile": {
|
||||
"productID": "C0NEMO9UO0"
|
||||
}
|
||||
}
|
296
components/connectivity/qcloud-iot-hub-sdk/3rdparty/tools/run-clang-tidy
vendored
Normal file
296
components/connectivity/qcloud-iot-hub-sdk/3rdparty/tools/run-clang-tidy
vendored
Normal file
@@ -0,0 +1,296 @@
|
||||
#!/usr/bin/env python
|
||||
#
|
||||
#===- run-clang-tidy.py - Parallel clang-tidy runner ---------*- python -*--===#
|
||||
#
|
||||
# The LLVM Compiler Infrastructure
|
||||
#
|
||||
# This file is distributed under the University of Illinois Open Source
|
||||
# License. See LICENSE.TXT for details.
|
||||
#
|
||||
#===------------------------------------------------------------------------===#
|
||||
# FIXME: Integrate with clang-tidy-diff.py
|
||||
|
||||
"""
|
||||
Parallel clang-tidy runner
|
||||
==========================
|
||||
|
||||
Runs clang-tidy over all files in a compilation database. Requires clang-tidy
|
||||
and clang-apply-replacements in $PATH.
|
||||
|
||||
Example invocations.
|
||||
- Run clang-tidy on all files in the current working directory with a default
|
||||
set of checks and show warnings in the cpp files and all project headers.
|
||||
run-clang-tidy.py $PWD
|
||||
|
||||
- Fix all header guards.
|
||||
run-clang-tidy.py -fix -checks=-*,llvm-header-guard
|
||||
|
||||
- Fix all header guards included from clang-tidy and header guards
|
||||
for clang-tidy headers.
|
||||
run-clang-tidy.py -fix -checks=-*,llvm-header-guard extra/clang-tidy \
|
||||
-header-filter=extra/clang-tidy
|
||||
|
||||
Compilation database setup:
|
||||
http://clang.llvm.org/docs/HowToSetupToolingForLLVM.html
|
||||
"""
|
||||
|
||||
from __future__ import print_function
|
||||
|
||||
import argparse
|
||||
import glob
|
||||
import json
|
||||
import multiprocessing
|
||||
import os
|
||||
import re
|
||||
import shutil
|
||||
import subprocess
|
||||
import sys
|
||||
import tempfile
|
||||
import threading
|
||||
import traceback
|
||||
import yaml
|
||||
|
||||
is_py2 = sys.version[0] == '2'
|
||||
|
||||
if is_py2:
|
||||
import Queue as queue
|
||||
else:
|
||||
import queue as queue
|
||||
|
||||
def find_compilation_database(path):
|
||||
"""Adjusts the directory until a compilation database is found."""
|
||||
result = './'
|
||||
while not os.path.isfile(os.path.join(result, path)):
|
||||
if os.path.realpath(result) == '/':
|
||||
print('Error: could not find compilation database.')
|
||||
sys.exit(1)
|
||||
result += '../'
|
||||
return os.path.realpath(result)
|
||||
|
||||
|
||||
def make_absolute(f, directory):
|
||||
if os.path.isabs(f):
|
||||
return f
|
||||
return os.path.normpath(os.path.join(directory, f))
|
||||
|
||||
|
||||
def get_tidy_invocation(f, clang_tidy_binary, checks, tmpdir, build_path,
|
||||
header_filter, extra_arg, extra_arg_before, quiet):
|
||||
"""Gets a command line for clang-tidy."""
|
||||
start = [clang_tidy_binary]
|
||||
if header_filter is not None:
|
||||
start.append('-header-filter=' + header_filter)
|
||||
else:
|
||||
# Show warnings in all in-project headers by default.
|
||||
start.append('-header-filter=^' + build_path + '/.*')
|
||||
if checks:
|
||||
start.append('-checks=' + checks)
|
||||
if tmpdir is not None:
|
||||
start.append('-export-fixes')
|
||||
# Get a temporary file. We immediately close the handle so clang-tidy can
|
||||
# overwrite it.
|
||||
(handle, name) = tempfile.mkstemp(suffix='.yaml', dir=tmpdir)
|
||||
os.close(handle)
|
||||
start.append(name)
|
||||
for arg in extra_arg:
|
||||
start.append('-extra-arg=%s' % arg)
|
||||
for arg in extra_arg_before:
|
||||
start.append('-extra-arg-before=%s' % arg)
|
||||
start.append('-p=' + build_path)
|
||||
if quiet:
|
||||
start.append('-quiet')
|
||||
start.append(f)
|
||||
return start
|
||||
|
||||
|
||||
def merge_replacement_files(tmpdir, mergefile):
|
||||
"""Merge all replacement files in a directory into a single file"""
|
||||
# The fixes suggested by clang-tidy >= 4.0.0 are given under
|
||||
# the top level key 'Diagnostics' in the output yaml files
|
||||
mergekey="Diagnostics"
|
||||
merged=[]
|
||||
for replacefile in glob.iglob(os.path.join(tmpdir, '*.yaml')):
|
||||
content = yaml.safe_load(open(replacefile, 'r'))
|
||||
if not content:
|
||||
continue # Skip empty files.
|
||||
merged.extend(content.get(mergekey, []))
|
||||
|
||||
if merged:
|
||||
# MainSourceFile: The key is required by the definition inside
|
||||
# include/clang/Tooling/ReplacementsYaml.h, but the value
|
||||
# is actually never used inside clang-apply-replacements,
|
||||
# so we set it to '' here.
|
||||
output = { 'MainSourceFile': '', mergekey: merged }
|
||||
with open(mergefile, 'w') as out:
|
||||
yaml.safe_dump(output, out)
|
||||
else:
|
||||
# Empty the file:
|
||||
open(mergefile, 'w').close()
|
||||
|
||||
|
||||
def check_clang_apply_replacements_binary(args):
|
||||
"""Checks if invoking supplied clang-apply-replacements binary works."""
|
||||
try:
|
||||
subprocess.check_call([args.clang_apply_replacements_binary, '--version'])
|
||||
except:
|
||||
print('Unable to run clang-apply-replacements. Is clang-apply-replacements '
|
||||
'binary correctly specified?', file=sys.stderr)
|
||||
traceback.print_exc()
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
def apply_fixes(args, tmpdir):
|
||||
"""Calls clang-apply-fixes on a given directory."""
|
||||
invocation = [args.clang_apply_replacements_binary]
|
||||
if args.format:
|
||||
invocation.append('-format')
|
||||
if args.style:
|
||||
invocation.append('-style=' + args.style)
|
||||
invocation.append(tmpdir)
|
||||
subprocess.call(invocation)
|
||||
|
||||
|
||||
def run_tidy(args, tmpdir, build_path, queue):
|
||||
"""Takes filenames out of queue and runs clang-tidy on them."""
|
||||
while True:
|
||||
name = queue.get()
|
||||
invocation = get_tidy_invocation(name, args.clang_tidy_binary, args.checks,
|
||||
tmpdir, build_path, args.header_filter,
|
||||
args.extra_arg, args.extra_arg_before,
|
||||
args.quiet)
|
||||
sys.stdout.write(' '.join(invocation) + '\n')
|
||||
subprocess.call(invocation)
|
||||
queue.task_done()
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(description='Runs clang-tidy over all files '
|
||||
'in a compilation database. Requires '
|
||||
'clang-tidy and clang-apply-replacements in '
|
||||
'$PATH.')
|
||||
parser.add_argument('-clang-tidy-binary', metavar='PATH',
|
||||
default='clang-tidy-6.0',
|
||||
help='path to clang-tidy binary')
|
||||
parser.add_argument('-clang-apply-replacements-binary', metavar='PATH',
|
||||
default='clang-apply-replacements-6.0',
|
||||
help='path to clang-apply-replacements binary')
|
||||
parser.add_argument('-checks', default=None,
|
||||
help='checks filter, when not specified, use clang-tidy '
|
||||
'default')
|
||||
parser.add_argument('-header-filter', default=None,
|
||||
help='regular expression matching the names of the '
|
||||
'headers to output diagnostics from. Diagnostics from '
|
||||
'the main file of each translation unit are always '
|
||||
'displayed.')
|
||||
parser.add_argument('-export-fixes', metavar='filename', dest='export_fixes',
|
||||
help='Create a yaml file to store suggested fixes in, '
|
||||
'which can be applied with clang-apply-replacements.')
|
||||
parser.add_argument('-j', type=int, default=0,
|
||||
help='number of tidy instances to be run in parallel.')
|
||||
parser.add_argument('files', nargs='*', default=['.*'],
|
||||
help='files to be processed (regex on path)')
|
||||
parser.add_argument('-fix', action='store_true', help='apply fix-its')
|
||||
parser.add_argument('-format', action='store_true', help='Reformat code '
|
||||
'after applying fixes')
|
||||
parser.add_argument('-style', default='file', help='The style of reformat '
|
||||
'code after applying fixes')
|
||||
parser.add_argument('-p', dest='build_path',
|
||||
help='Path used to read a compile command database.')
|
||||
parser.add_argument('-extra-arg', dest='extra_arg',
|
||||
action='append', default=[],
|
||||
help='Additional argument to append to the compiler '
|
||||
'command line.')
|
||||
parser.add_argument('-extra-arg-before', dest='extra_arg_before',
|
||||
action='append', default=[],
|
||||
help='Additional argument to prepend to the compiler '
|
||||
'command line.')
|
||||
parser.add_argument('-quiet', action='store_true',
|
||||
help='Run clang-tidy in quiet mode')
|
||||
args = parser.parse_args()
|
||||
|
||||
db_path = 'compile_commands.json'
|
||||
|
||||
if args.build_path is not None:
|
||||
build_path = args.build_path
|
||||
else:
|
||||
# Find our database
|
||||
build_path = find_compilation_database(db_path)
|
||||
|
||||
try:
|
||||
invocation = [args.clang_tidy_binary, '-list-checks']
|
||||
invocation.append('-p=' + build_path)
|
||||
if args.checks:
|
||||
invocation.append('-checks=' + args.checks)
|
||||
invocation.append('-')
|
||||
subprocess.check_call(invocation)
|
||||
except:
|
||||
print("Unable to run clang-tidy.", file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
# Load the database and extract all files.
|
||||
database = json.load(open(os.path.join(build_path, db_path)))
|
||||
files = [make_absolute(entry['file'], entry['directory'])
|
||||
for entry in database]
|
||||
|
||||
max_task = args.j
|
||||
if max_task == 0:
|
||||
max_task = multiprocessing.cpu_count()
|
||||
|
||||
tmpdir = None
|
||||
if args.fix or args.export_fixes:
|
||||
check_clang_apply_replacements_binary(args)
|
||||
tmpdir = tempfile.mkdtemp()
|
||||
|
||||
# Build up a big regexy filter from all command line arguments.
|
||||
file_name_re = re.compile('|'.join(args.files))
|
||||
|
||||
try:
|
||||
# Spin up a bunch of tidy-launching threads.
|
||||
task_queue = queue.Queue(max_task)
|
||||
for _ in range(max_task):
|
||||
t = threading.Thread(target=run_tidy,
|
||||
args=(args, tmpdir, build_path, task_queue))
|
||||
t.daemon = True
|
||||
t.start()
|
||||
|
||||
# Fill the queue with files.
|
||||
for name in files:
|
||||
if file_name_re.search(name):
|
||||
task_queue.put(name)
|
||||
|
||||
# Wait for all threads to be done.
|
||||
task_queue.join()
|
||||
|
||||
except KeyboardInterrupt:
|
||||
# This is a sad hack. Unfortunately subprocess goes
|
||||
# bonkers with ctrl-c and we start forking merrily.
|
||||
print('\nCtrl-C detected, goodbye.')
|
||||
if tmpdir:
|
||||
shutil.rmtree(tmpdir)
|
||||
os.kill(0, 9)
|
||||
|
||||
return_code = 0
|
||||
if args.export_fixes:
|
||||
print('Writing fixes to ' + args.export_fixes + ' ...')
|
||||
try:
|
||||
merge_replacement_files(tmpdir, args.export_fixes)
|
||||
except:
|
||||
print('Error exporting fixes.\n', file=sys.stderr)
|
||||
traceback.print_exc()
|
||||
return_code=1
|
||||
|
||||
if args.fix:
|
||||
print('Applying fixes ...')
|
||||
try:
|
||||
apply_fixes(args, tmpdir)
|
||||
except:
|
||||
print('Error applying fixes.\n', file=sys.stderr)
|
||||
traceback.print_exc()
|
||||
return_code=1
|
||||
|
||||
if tmpdir:
|
||||
shutil.rmtree(tmpdir)
|
||||
sys.exit(return_code)
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
22
components/connectivity/qcloud-iot-hub-sdk/3rdparty/tools/update_from_old_SDK.sh
vendored
Normal file
22
components/connectivity/qcloud-iot-hub-sdk/3rdparty/tools/update_from_old_SDK.sh
vendored
Normal file
@@ -0,0 +1,22 @@
|
||||
#! /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 ./*`
|
||||
|
Reference in New Issue
Block a user