xuxinyi 4 bulan lalu
melakukan
ae7c2a11d8

+ 272 - 0
.config

@@ -0,0 +1,272 @@
+CONFIG___ZEUSOS__=y
+CONFIG_VENDOR_USING_QS100=y
+CONFIG_BSP_USING_FLASH_LEN=16
+CONFIG_BSP_USING_FLASH_BLOCK_SIZE=4
+CONFIG_BSP_USING_FLASH_WRITE_GRAN=8
+CONFIG_ZOS_TICK_PER_SECOND=1000
+
+#
+# On-chip Peripheral Drivers
+#
+
+#
+# hardware
+#
+CONFIG_BSP_USING_CONSOLE=y
+CONFIG_BSP_CONSOLE_DEVICE_NAME="uart0"
+CONFIG_BSP_CONSOLE_DEVICE_BAUD=115200
+CONFIG_BSP_CONSOLE_DEVICE_RECV_BUFFER_SIZE=128
+CONFIG_BSP_USING_PIN=y
+CONFIG_BSP_USING_UART=y
+CONFIG_BSP_USING_UART0=y
+CONFIG_BSP_USING_UART1=y
+CONFIG_BSP_USING_UART2=y
+CONFIG_BSP_USING_I2C=y
+CONFIG_BSP_USING_I2C0=y
+CONFIG_BSP_USING_SPI=y
+CONFIG_BSP_USING_SPI0=y
+CONFIG_BSP_USING_PWM=y
+CONFIG_BSP_USING_PWM0=y
+CONFIG_BSP_USING_PWM0_PIN=13
+CONFIG_BSP_USING_PM=y
+CONFIG_BSP_USING_PM_DTIMER=y
+CONFIG_BSP_USING_RTC=y
+CONFIG_BSP_USING_RTC_ALARM=y
+CONFIG_BSP_USING_FLASH=y
+CONFIG_BSP_USING_ADC=y
+CONFIG_BSP_USING_ADC0=y
+CONFIG_BSP_USING_MO=y
+# end of hardware
+# end of On-chip Peripheral Drivers
+
+#
+# drivers
+#
+# CONFIG_PKG_USING_FLEXIBLE_BUTTON is not set
+# CONFIG_PKG_USING_EC11 is not set
+# CONFIG_PKG_USING_SPI_LCD is not set
+# CONFIG_PKG_USING_MPU6XXX is not set
+# CONFIG_PKG_USING_OLED is not set
+# CONFIG_PKG_USING_SFUD is not set
+# CONFIG_PKG_USING_SHT2X is not set
+# CONFIG_PKG_USING_SHT3X is not set
+# CONFIG_PKG_USING_TOUCH is not set
+# end of drivers
+
+#
+# kernel
+#
+# CONFIG_ZOS_NAME_MAX_7 is not set
+CONFIG_ZOS_NAME_MAX_15=y
+# CONFIG_ZOS_NAME_MAX_31 is not set
+CONFIG_ZOS_NAME_MAX=15
+
+#
+# Inter-task communication and synchronization
+#
+CONFIG_ZOS_USING_MUTEX=y
+CONFIG_ZOS_USING_SEMAPHORE=y
+CONFIG_ZOS_USING_EVENT=y
+CONFIG_ZOS_USING_MESSAGEQUEUE=y
+# end of Inter-task communication and synchronization
+
+CONFIG_ZOS_USING_DLOG=y
+CONFIG_ZOS_DLOG_BUF_SIZE=1024
+CONFIG_ZOS_DLOG_ENABLE_COLOR=y
+CONFIG_PKG_VSNPRINTF_SUPPORT_DECIMAL_SPECIFIERS=y
+CONFIG_PKG_VSNPRINTF_SUPPORT_EXPONENTIAL_SPECIFIERS=y
+CONFIG_PKG_VSNPRINTF_SUPPORT_WRITEBACK_SPECIFIER=y
+CONFIG_PKG_VSNPRINTF_SUPPORT_LONG_LONG=y
+CONFIG_PKG_VSNPRINTF_CHECK_FOR_NUL_IN_FORMAT_SPECIFIER=y
+# CONFIG_PKG_VSNPRINTF_SUPPORT_MSVC_STYLE_INTEGER_SPECIFIERS is not set
+CONFIG_PKG_VSNPRINTF_INTEGER_BUFFER_SIZE=32
+CONFIG_PKG_VSNPRINTF_DECIMAL_BUFFER_SIZE=32
+CONFIG_PKG_VSNPRINTF_DEFAULT_FLOAT_PRECISION=6
+CONFIG_PKG_VSNPRINTF_MAX_INTEGRAL_DIGITS_FOR_DECIMAL=9
+CONFIG_PKG_VSNPRINTF_LOG10_TAYLOR_TERMS=4
+CONFIG_ZOS_USING_KERNEL_DEBUG=y
+# CONFIG_KLOG_GLOBAL_LEVEL_ERROR is not set
+CONFIG_KLOG_GLOBAL_LEVEL_WARNING=y
+# CONFIG_KLOG_GLOBAL_LEVEL_INFO is not set
+# CONFIG_KLOG_GLOBAL_LEVEL_DEBUG is not set
+CONFIG_KLOG_GLOBAL_LEVEL=1
+CONFIG_KLOG_USING_COLOR=y
+CONFIG_KLOG_WITH_FUNC_LINE=y
+# end of kernel
+
+#
+# components
+#
+
+#
+# AI
+#
+# CONFIG_PKG_USING_TINYMAIX is not set
+# end of AI
+
+#
+# Cloud
+#
+CONFIG_PKG_USING_HTTP_CLIENT=y
+# CONFIG_HTTP_CLIENT_USING_SECURE is not set
+# CONFIG_HTTP_CLIENT_DEBUG is not set
+CONFIG_HTTP_CLIENT_AUTHB_SIZE=128
+CONFIG_HTTP_CLIENT_CHUNK_SIZE=1024
+CONFIG_HTTP_CLIENT_SEND_BUF_SIZE=1024
+CONFIG_HTTP_CLIENT_MAX_HOST_LEN=128
+CONFIG_HTTP_CLIENT_MAX_URL_LEN=512
+CONFIG_HTTP_CLIENT_MAX_RECV_WAIT_MS=5000
+CONFIG_HTTP_PORT=80
+CONFIG_HTTPS_PORT=443
+CONFIG_PKG_USING_MQTTCLIENT=y
+# CONFIG_MQTT_NETWORK_TYPE_TLS is not set
+# CONFIG_MQTT_LOG_IS_SALOF is not set
+CONFIG_MQTT_LOG_LEVEL=4
+CONFIG_MQTT_VERSION=4
+CONFIG_MQTT_KEEP_ALIVE_INTERVAL=100
+CONFIG_MQTT_THREAD_STACK_SIZE=4096
+CONFIG_MQTT_THREAD_PRIO=5
+CONFIG_MQTT_THREAD_TICK=50
+CONFIG_MQTT_MAX_PACKET_ID=0xFFFE
+CONFIG_MQTT_TOPIC_LEN_MAX=64
+CONFIG_MQTT_ACK_HANDLER_NUM_MAX=64
+CONFIG_MQTT_DEFAULT_BUF_SIZE=1024
+CONFIG_MQTT_DEFAULT_CMD_TIMEOUT=4000
+CONFIG_MQTT_MAX_CMD_TIMEOUT=20000
+CONFIG_MQTT_MIN_CMD_TIMEOUT=1000
+CONFIG_MQTT_RECONNECT_DEFAULT_DURATION=1000
+CONFIG_PKG_USING_MQTT_IOT_AUTH=y
+# CONFIG_PKG_USING_MQTT_TEST is not set
+# CONFIG_PKG_USING_ONENETCLOUD is not set
+# end of Cloud
+
+#
+# File system
+#
+# CONFIG_PKG_USING_FLASHDB is not set
+CONFIG_PKG_USING_FAL=y
+CONFIG_FAL_DEBUG_CONFIG=y
+CONFIG_FAL_DEBUG=1
+CONFIG_FAL_PART_HAS_TABLE_CFG=y
+# CONFIG_FAL_USING_SFUD_PORT is not set
+CONFIG_ZOS_USING_VFS=y
+CONFIG_VFS_MOUNTPOINT_MAX=4
+CONFIG_VFS_FILESYSTEM_TYPES_MAX=4
+CONFIG_VFS_FD_MAX=16
+CONFIG_ZOS_USING_AUTO_MOUNT=y
+# CONFIG_ZOS_USING_VFS_DEVFS is not set
+CONFIG_ZOS_USING_VFS_LFS=y
+
+#
+# Little filesystem module
+#
+CONFIG_LFS_NAME_MAX=255
+CONFIG_LFS_FILE_MAX=512
+CONFIG_LFS_LOOKAHEAD_SIZE=8
+CONFIG_LFS_THREADSAFE=y
+# end of Little filesystem module
+
+CONFIG_ZOS_USING_VFS_SHELL_CMD=y
+# CONFIG_ZOS_USING_VFS_USING_SPI_FLASH is not set
+# end of File system
+
+#
+# GUI
+#
+# CONFIG_PKG_USING_LVGL is not set
+# end of GUI
+
+#
+# IoT
+#
+# CONFIG_PKG_USING_AT is not set
+# CONFIG_PKG_USING_NETUTILS is not set
+# end of IoT
+
+#
+# Language
+#
+CONFIG_PKG_USING_CJSON=y
+# end of Language
+
+#
+# C standard library adapter
+#
+CONFIG_ZOS_USING_LIBC_ADAPTER=y
+CONFIG_ZOS_USING_NEWLIB_ADAPTER=y
+CONFIG_ZOS_USING_ARMCCLIB_ADAPTER=y
+# end of C standard library adapter
+
+# CONFIG_ZOS_USING_OTA is not set
+
+#
+# security
+#
+CONFIG_PKG_USING_ZOS_CRYPTO=y
+
+#
+# mbedtls
+#
+CONFIG_SECURITY_USING_MBEDTLS=y
+CONFIG_MBEDTLS_SSL_MAX_CONTENT_LEN=16384
+CONFIG_MBEDTLS_HAVE_TIME=y
+# CONFIG_MBEDTLS_DEBUG_C is not set
+# CONFIG_MBEDTLS_SSL_SRV_C is not set
+CONFIG_MBEDTLS_SSL_PROTO_DTLS=y
+CONFIG_MBEDTLS_SSL_DTLS_ANTI_REPLAY=y
+CONFIG_MBEDTLS_SSL_DTLS_HELLO_VERIFY=y
+# end of mbedtls
+# end of security
+
+#
+# utils
+#
+
+#
+# Shell
+#
+CONFIG_ZOS_USING_SHELL=y
+CONFIG_SHELL_TASK_NAME="shell"
+CONFIG_SHELL_TASK_PRIORITY=13
+CONFIG_SHELL_TASK_STACK_SIZE=2048
+CONFIG_SHELL_USING_HISTORY=y
+CONFIG_SHELL_HISTORY_LINES=5
+CONFIG_SHELL_USING_DESCRIPTION=y
+# CONFIG_SHELL_ECHO_DISABLE_DEFAULT is not set
+CONFIG_SHELL_CMD_SIZE=80
+CONFIG_SHELL_PROMPT_SIZE=256
+CONFIG_SHELL_ARG_MAX=10
+# CONFIG_SHELL_USING_AUTH is not set
+# end of Shell
+# end of utils
+# end of components
+
+#
+# SDK DEMO Config
+#
+# CONFIG_BSP_USING_ZeusOS_DEMO is not set
+# CONFIG_BSP_USING_HARDWARE_DEMO is not set
+# CONFIG_BSP_USING_ClOUD_DEMO is not set
+# CONFIG_BSP_USING_MQTT_DEMO is not set
+# CONFIG_BSP_USING_SLEEP_DEMO is not set
+# CONFIG_BSP_USING_HTTP_DEMO is not set
+# CONFIG_BSP_USING_HTTP_FOTA is not set
+# CONFIG_BSP_USING_SFUD_DEMO is not set
+# CONFIG_BSP_USING_FAL_DEMO is not set
+# CONFIG_BSP_USING_VFS_DEMO is not set
+# CONFIG_BSP_USING_FLASHDB_DEMO is not set
+# CONFIG_BSP_USING_LVGL_DEMO is not set
+# end of SDK DEMO Config
+
+#
+# QS-100 DEMO Config
+#
+# CONFIG_BSP_USING_CTIOT_DEMO is not set
+# CONFIG_BSP_USING_CMIOT_DEMO is not set
+# end of QS-100 DEMO Config
+
+#
+# Cloud platform configuration
+#
+# CONFIG_PKG_USING_CMIOT is not set
+# end of Cloud platform configuration

+ 245 - 0
.config.old

@@ -0,0 +1,245 @@
+CONFIG___ZEUSOS__=y
+CONFIG_VENDOR_USING_QS100=y
+CONFIG_BSP_USING_FLASH_LEN=16
+CONFIG_BSP_USING_FLASH_BLOCK_SIZE=4
+CONFIG_BSP_USING_FLASH_WRITE_GRAN=8
+CONFIG_ZOS_TICK_PER_SECOND=1000
+
+#
+# On-chip Peripheral Drivers
+#
+
+#
+# hardware
+#
+CONFIG_BSP_USING_CONSOLE=y
+CONFIG_BSP_CONSOLE_DEVICE_NAME="uart0"
+CONFIG_BSP_CONSOLE_DEVICE_BAUD=115200
+CONFIG_BSP_CONSOLE_DEVICE_RECV_BUFFER_SIZE=128
+CONFIG_BSP_USING_PIN=y
+CONFIG_BSP_USING_UART=y
+CONFIG_BSP_USING_UART0=y
+CONFIG_BSP_USING_UART1=y
+CONFIG_BSP_USING_UART2=y
+CONFIG_BSP_USING_I2C=y
+CONFIG_BSP_USING_I2C0=y
+CONFIG_BSP_USING_SPI=y
+CONFIG_BSP_USING_SPI0=y
+CONFIG_BSP_USING_PWM=y
+CONFIG_BSP_USING_PWM0=y
+CONFIG_BSP_USING_PWM0_PIN=13
+CONFIG_BSP_USING_PM=y
+CONFIG_BSP_USING_PM_DTIMER=y
+CONFIG_BSP_USING_RTC=y
+CONFIG_BSP_USING_RTC_ALARM=y
+CONFIG_BSP_USING_FLASH=y
+CONFIG_BSP_USING_ADC=y
+CONFIG_BSP_USING_ADC0=y
+CONFIG_BSP_USING_MO=y
+# end of hardware
+# end of On-chip Peripheral Drivers
+
+#
+# drivers
+#
+# CONFIG_PKG_USING_FLEXIBLE_BUTTON is not set
+# CONFIG_PKG_USING_BH1750 is not set
+# CONFIG_PKG_USING_EC11 is not set
+# CONFIG_PKG_USING_SPI_LCD is not set
+# CONFIG_PKG_USING_MPU6XXX is not set
+# CONFIG_PKG_USING_OLED is not set
+# CONFIG_PKG_USING_SFUD is not set
+# CONFIG_PKG_USING_SHT2X is not set
+# CONFIG_PKG_USING_SHT3X is not set
+# CONFIG_PKG_USING_TOUCH is not set
+# end of drivers
+
+#
+# kernel
+#
+# CONFIG_ZOS_NAME_MAX_7 is not set
+CONFIG_ZOS_NAME_MAX_15=y
+# CONFIG_ZOS_NAME_MAX_31 is not set
+CONFIG_ZOS_NAME_MAX=15
+
+#
+# Inter-task communication and synchronization
+#
+CONFIG_ZOS_USING_MUTEX=y
+CONFIG_ZOS_USING_SEMAPHORE=y
+CONFIG_ZOS_USING_EVENT=y
+CONFIG_ZOS_USING_MESSAGEQUEUE=y
+# end of Inter-task communication and synchronization
+
+CONFIG_ZOS_USING_DLOG=y
+CONFIG_ZOS_DLOG_BUF_SIZE=1024
+CONFIG_ZOS_DLOG_ENABLE_COLOR=y
+CONFIG_PKG_VSNPRINTF_SUPPORT_DECIMAL_SPECIFIERS=y
+CONFIG_PKG_VSNPRINTF_SUPPORT_EXPONENTIAL_SPECIFIERS=y
+CONFIG_PKG_VSNPRINTF_SUPPORT_WRITEBACK_SPECIFIER=y
+CONFIG_PKG_VSNPRINTF_SUPPORT_LONG_LONG=y
+CONFIG_PKG_VSNPRINTF_CHECK_FOR_NUL_IN_FORMAT_SPECIFIER=y
+# CONFIG_PKG_VSNPRINTF_SUPPORT_MSVC_STYLE_INTEGER_SPECIFIERS is not set
+CONFIG_PKG_VSNPRINTF_INTEGER_BUFFER_SIZE=32
+CONFIG_PKG_VSNPRINTF_DECIMAL_BUFFER_SIZE=32
+CONFIG_PKG_VSNPRINTF_DEFAULT_FLOAT_PRECISION=6
+CONFIG_PKG_VSNPRINTF_MAX_INTEGRAL_DIGITS_FOR_DECIMAL=9
+CONFIG_PKG_VSNPRINTF_LOG10_TAYLOR_TERMS=4
+CONFIG_ZOS_USING_KERNEL_DEBUG=y
+# CONFIG_KLOG_GLOBAL_LEVEL_ERROR is not set
+CONFIG_KLOG_GLOBAL_LEVEL_WARNING=y
+# CONFIG_KLOG_GLOBAL_LEVEL_INFO is not set
+# CONFIG_KLOG_GLOBAL_LEVEL_DEBUG is not set
+CONFIG_KLOG_GLOBAL_LEVEL=1
+CONFIG_KLOG_USING_COLOR=y
+CONFIG_KLOG_WITH_FUNC_LINE=y
+# end of kernel
+
+#
+# components
+#
+
+#
+# AI
+#
+# CONFIG_PKG_USING_TINYMAIX is not set
+# end of AI
+
+#
+# Cloud
+#
+# CONFIG_PKG_USING_HTTP_CLIENT is not set
+# CONFIG_PKG_USING_MQTTCLIENT is not set
+# CONFIG_PKG_USING_ONENETCLOUD is not set
+# end of Cloud
+
+#
+# File system
+#
+# CONFIG_PKG_USING_FLASHDB is not set
+CONFIG_PKG_USING_FAL=y
+CONFIG_FAL_DEBUG_CONFIG=y
+CONFIG_FAL_DEBUG=1
+CONFIG_FAL_PART_HAS_TABLE_CFG=y
+# CONFIG_FAL_USING_SFUD_PORT is not set
+CONFIG_ZOS_USING_VFS=y
+CONFIG_VFS_MOUNTPOINT_MAX=4
+CONFIG_VFS_FILESYSTEM_TYPES_MAX=4
+CONFIG_VFS_FD_MAX=16
+CONFIG_ZOS_USING_AUTO_MOUNT=y
+# CONFIG_ZOS_USING_VFS_DEVFS is not set
+CONFIG_ZOS_USING_VFS_LFS=y
+
+#
+# Little filesystem module
+#
+CONFIG_LFS_NAME_MAX=255
+CONFIG_LFS_FILE_MAX=512
+CONFIG_LFS_LOOKAHEAD_SIZE=8
+CONFIG_LFS_THREADSAFE=y
+# end of Little filesystem module
+
+CONFIG_ZOS_USING_VFS_SHELL_CMD=y
+# CONFIG_ZOS_USING_VFS_USING_SPI_FLASH is not set
+# end of File system
+
+#
+# GUI
+#
+# CONFIG_PKG_USING_LVGL is not set
+# end of GUI
+
+#
+# IoT
+#
+# CONFIG_PKG_USING_AT is not set
+# CONFIG_PKG_USING_NETUTILS is not set
+# end of IoT
+
+#
+# Language
+#
+CONFIG_PKG_USING_CJSON=y
+# end of Language
+
+#
+# C standard library adapter
+#
+CONFIG_ZOS_USING_LIBC_ADAPTER=y
+CONFIG_ZOS_USING_NEWLIB_ADAPTER=y
+CONFIG_ZOS_USING_ARMCCLIB_ADAPTER=y
+# end of C standard library adapter
+
+# CONFIG_ZOS_USING_OTA is not set
+
+#
+# security
+#
+CONFIG_PKG_USING_ZOS_CRYPTO=y
+
+#
+# mbedtls
+#
+CONFIG_SECURITY_USING_MBEDTLS=y
+CONFIG_MBEDTLS_SSL_MAX_CONTENT_LEN=16384
+CONFIG_MBEDTLS_HAVE_TIME=y
+# CONFIG_MBEDTLS_DEBUG_C is not set
+# CONFIG_MBEDTLS_SSL_SRV_C is not set
+CONFIG_MBEDTLS_SSL_PROTO_DTLS=y
+CONFIG_MBEDTLS_SSL_DTLS_ANTI_REPLAY=y
+CONFIG_MBEDTLS_SSL_DTLS_HELLO_VERIFY=y
+# end of mbedtls
+# end of security
+
+#
+# utils
+#
+
+#
+# Shell
+#
+CONFIG_ZOS_USING_SHELL=y
+CONFIG_SHELL_TASK_NAME="shell"
+CONFIG_SHELL_TASK_PRIORITY=13
+CONFIG_SHELL_TASK_STACK_SIZE=2048
+CONFIG_SHELL_USING_HISTORY=y
+CONFIG_SHELL_HISTORY_LINES=5
+CONFIG_SHELL_USING_DESCRIPTION=y
+# CONFIG_SHELL_ECHO_DISABLE_DEFAULT is not set
+CONFIG_SHELL_CMD_SIZE=80
+CONFIG_SHELL_PROMPT_SIZE=256
+CONFIG_SHELL_ARG_MAX=10
+# CONFIG_SHELL_USING_AUTH is not set
+# end of Shell
+# end of utils
+# end of components
+
+#
+# SDK DEMO Config
+#
+# CONFIG_BSP_USING_ZeusOS_DEMO is not set
+# CONFIG_BSP_USING_HARDWARE_DEMO is not set
+# CONFIG_BSP_USING_ClOUD_DEMO is not set
+# CONFIG_BSP_USING_MQTT_DEMO is not set
+# CONFIG_BSP_USING_SLEEP_DEMO is not set
+# CONFIG_BSP_USING_HTTP_DEMO is not set
+# CONFIG_BSP_USING_HTTP_FOTA is not set
+# CONFIG_BSP_USING_SFUD_DEMO is not set
+# CONFIG_BSP_USING_FAL_DEMO is not set
+# CONFIG_BSP_USING_VFS_DEMO is not set
+# CONFIG_BSP_USING_FLASHDB_DEMO is not set
+# CONFIG_BSP_USING_LVGL_DEMO is not set
+# end of SDK DEMO Config
+
+#
+# QS-100 DEMO Config
+#
+# CONFIG_BSP_USING_CTIOT_DEMO is not set
+# CONFIG_BSP_USING_CMIOT_DEMO is not set
+# end of QS-100 DEMO Config
+
+#
+# Cloud platform configuration
+#
+# CONFIG_PKG_USING_CMIOT is not set
+# end of Cloud platform configuration

+ 9 - 0
.gitignore

@@ -0,0 +1,9 @@
+demo
+firmware
+build
+__pycache__
+hook
+iot
+tools
+.sconsign.dblite
+cconfig.h

+ 46 - 0
Kconfig

@@ -0,0 +1,46 @@
+mainmenu "ZeusOS Configuration"
+#Define the relative path to root directory of os code
+OS_ROOT=../..
+BSP_HAL=QS100
+
+config __ZEUSOS__
+    bool
+    default y
+    
+config VENDOR_USING_QS100
+    bool
+    select BSP_USING_PIN
+    select BSP_USING_UART
+    select BSP_USING_UART0
+    select BSP_USING_RTC
+    select BSP_USING_FLASH
+    select BSP_USING_MO
+    select MBEDTLS_HAVE_TIME
+    select ZOS_USING_DLOG
+    select SECURITY_USING_MBEDTLS
+    select PKG_USING_CJSON
+    select ZOS_USING_SHELL
+    default y
+config BSP_USING_FLASH_LEN
+    int 
+    default 16
+
+config BSP_USING_FLASH_BLOCK_SIZE
+    int 
+    default 4
+
+config BSP_USING_FLASH_WRITE_GRAN
+    int 
+    default 8
+
+config ZOS_TICK_PER_SECOND
+     int 
+     default 1000
+
+source "$OS_ROOT/base/Kconfig"
+source "$OS_ROOT/drivers/Kconfig"
+source "$OS_ROOT/kernel/Kconfig"
+source "$OS_ROOT/components/Kconfig"
+source "$OS_ROOT/demos/Kconfig"
+source "demo/Kconfig"
+source "iot/Kconfig"

+ 13 - 0
QS100_mv.py

@@ -0,0 +1,13 @@
+import os
+import shutil
+vendor_file = os.getcwd()
+
+def remove_file():
+    shutil.move("./flash.bin", "./firmware/allbins")
+    shutil.move("./ram.bin", "./firmware/allbins")
+    shutil.move("./zos.map", "./firmware/allbins")
+    shutil.move("./zos.elf", "./firmware/allbins")
+
+if __name__ == '__main__':
+    remove_file()
+    print('SDK编译完成,正在生成固件')

+ 14 - 0
SConscript

@@ -0,0 +1,14 @@
+# for module compiling
+import os
+Import('OS_ROOT')
+
+cwd = str(Dir('#'))
+objs = []
+list = os.listdir(cwd)
+
+for d in list:
+    path = os.path.join(cwd, d)
+    if os.path.isfile(os.path.join(path, 'SConscript')):
+        objs = objs + SConscript(os.path.join(d, 'SConscript'))
+
+Return('objs')

+ 37 - 0
SConstruct

@@ -0,0 +1,37 @@
+import os
+import sys
+import osconfig
+
+if os.getenv('OS_ROOT'):
+    OS_ROOT = os.getenv('OS_ROOT')
+else:
+    OS_ROOT = os.path.normpath(os.getcwd() + './../../')
+
+sys.path = sys.path + [os.path.join(OS_ROOT, './tools/scripts')]
+try:
+    from build_tools import *
+except:
+    print('Cannot found zos root directory, please check OS_ROOT')
+    print(OS_ROOT)
+    exit(-1)
+
+RESULT = 'zos.' + osconfig.RESULT_SUFFIX
+
+env = Environment(tools = ['mingw'],
+    AS = osconfig.AS, ASFLAGS = osconfig.AFLAGS,
+    CC = osconfig.CC, CCFLAGS = osconfig.CFLAGS,
+    AR = osconfig.AR, ARFLAGS = '-rc',
+    CXX = osconfig.CXX, CXXFLAGS = osconfig.CXXFLAGS,
+    LINK = osconfig.LINK, LINKFLAGS = osconfig.LFLAGS)
+env.PrependENVPath('PATH', osconfig.COMPILER_PATH)
+
+Export('OS_ROOT')
+Export('osconfig')
+
+# prepare building environment
+objs = SetupCompile(env, OS_ROOT, has_libcpu=False)
+
+Import('kernel_vdir')
+
+# make a building
+StartCompile(RESULT, objs)

+ 28 - 0
applications/SConscript

@@ -0,0 +1,28 @@
+from build_tools import *
+
+pwd  = PresentDir()
+
+src  = []
+src  += Glob('src/*.c')
+
+CPPPATH = [pwd + '/inc']
+
+
+if IsDefined(['PKG_USING_LVGL']):
+    src += Glob("lvgl/*.c")
+    CPPPATH += [pwd + '/lvgl']
+    #以下是gui guider 生成文件
+    CPPPATH += [pwd + '/custom']
+    CPPPATH += [pwd + '/generated']
+    CPPPATH += [pwd + '/guider_customer_fonts']
+    src  += Glob('custom/*.c')
+    src  += Glob('generated/*.c')
+    src  += Glob('generated/guider_fonts/*.c')
+    src  += Glob('generated/images/*.c')
+    
+
+group = AddCodeGroup('applications', src, depend = [''], CPPPATH = CPPPATH)
+
+Return("group")
+
+

+ 65 - 0
applications/inc/fal_cfg.h

@@ -0,0 +1,65 @@
+/*
+ * Copyright (c) 2006-2018, RT-Thread Development Team
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Change Logs:
+ * Date           Author       Notes
+ * 2018-05-17     armink       the first version
+ */
+
+#ifndef _FAL_CFG_H_
+#define _FAL_CFG_H_
+
+#include <zos.h>
+#include <zos_config.h>
+
+
+/* ===================== Flash device Configuration ========================= */
+extern const struct fal_flash_dev zos_onchip_flash;
+
+#ifdef FAL_USING_SFUD_PORT
+#define NOR_FLASH_DEV_NAME             "norflash0"
+extern struct fal_flash_dev nor_flash0;
+#define FAL_FLASH_DEV_TABLE                                          \
+{                                                                    \
+    &zos_onchip_flash,                                               \
+    &nor_flash0,                                                     \
+}
+
+#else
+
+#define FAL_FLASH_DEV_TABLE                                          \
+{                                                                    \
+    &zos_onchip_flash,                                               \
+}
+#endif
+/* flash device table */
+
+/* ====================== Partition Configuration ========================== */
+#ifdef FAL_PART_HAS_TABLE_CFG
+
+
+#ifdef FAL_USING_SFUD_PORT
+
+#define FAL_PART_TABLE                                                               \
+{                                                                                    \
+    {FAL_PART_MAGIC_WORD, "filesystem",     "zos_onchip",          0,   BSP_USING_FLASH_LEN * 1024, 0}, \
+    {FAL_PART_MAGIC_WORD,   "easyflash", NOR_FLASH_DEV_NAME,         0, 20*1024, 0}, \
+    {FAL_PART_MAGIC_WORD,    "download", NOR_FLASH_DEV_NAME, 20*1024, 1024*1024, 0}, \
+}
+
+
+#else
+
+#define FAL_PART_TABLE                                                               \
+{                                                                                    \
+    {FAL_PART_MAGIC_WORD,        "filesystem",     "zos_onchip",          0,   BSP_USING_FLASH_LEN * 1024, 0}, \
+}
+
+#endif
+/* partition table */
+
+#endif /* FAL_PART_HAS_TABLE_CFG */
+
+#endif /* _FAL_CFG_H_ */

+ 28 - 0
applications/inc/fs_cfg.h

@@ -0,0 +1,28 @@
+/**
+ ***********************************************************************************************************************
+ * Copyright (c) 2019-2029, ZeusOS Team
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
+ * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ *
+ * @file        fs_cfg.c
+ *
+ * @brief       filesystem auto mount definition
+ *
+ * @revision
+ * Date         Author          Notes
+ * 2024-03-01   ZeusOS Team     Add ZeusOS adaptation layer
+ ***********************************************************************************************************************
+ */
+#include "vfs.h"
+const struct vfs_mountinfo fs_mount_info[] = {    
+    /*       point,          part,        fs_type,  auto_format */
+    {           "/", "filesystem",      "littlefs",              1},
+    // {           "/ef", "easyflash",      "littlefs",              1},
+};

+ 202 - 0
applications/inc/zos_config.h

@@ -0,0 +1,202 @@
+#ifndef __ZOS_CONFIG_H__
+#define __ZOS_CONFIG_H__
+
+#define __ZEUSOS__
+#define VENDOR_USING_QS100
+#define BSP_USING_FLASH_LEN 16
+#define BSP_USING_FLASH_BLOCK_SIZE 4
+#define BSP_USING_FLASH_WRITE_GRAN 8
+#define ZOS_TICK_PER_SECOND 1000
+
+/* On-chip Peripheral Drivers */
+
+/* hardware */
+
+#define BSP_USING_CONSOLE
+#define BSP_CONSOLE_DEVICE_NAME "uart0"
+#define BSP_CONSOLE_DEVICE_BAUD 115200
+#define BSP_CONSOLE_DEVICE_RECV_BUFFER_SIZE 128
+#define BSP_USING_PIN
+#define BSP_USING_UART
+#define BSP_USING_UART0
+#define BSP_USING_UART1
+#define BSP_USING_UART2
+#define BSP_USING_I2C
+#define BSP_USING_I2C0
+#define BSP_USING_SPI
+#define BSP_USING_SPI0
+#define BSP_USING_PWM
+#define BSP_USING_PWM0
+#define BSP_USING_PWM0_PIN 13
+#define BSP_USING_PM
+#define BSP_USING_PM_DTIMER
+#define BSP_USING_RTC
+#define BSP_USING_RTC_ALARM
+#define BSP_USING_FLASH
+#define BSP_USING_ADC
+#define BSP_USING_ADC0
+#define BSP_USING_MO
+/* end of hardware */
+/* end of On-chip Peripheral Drivers */
+
+/* drivers */
+
+/* end of drivers */
+
+/* kernel */
+
+#define ZOS_NAME_MAX_15
+#define ZOS_NAME_MAX 15
+
+/* Inter-task communication and synchronization */
+
+#define ZOS_USING_MUTEX
+#define ZOS_USING_SEMAPHORE
+#define ZOS_USING_EVENT
+#define ZOS_USING_MESSAGEQUEUE
+/* end of Inter-task communication and synchronization */
+#define ZOS_USING_DLOG
+#define ZOS_DLOG_BUF_SIZE 1024
+#define ZOS_DLOG_ENABLE_COLOR
+#define PKG_VSNPRINTF_SUPPORT_DECIMAL_SPECIFIERS
+#define PKG_VSNPRINTF_SUPPORT_EXPONENTIAL_SPECIFIERS
+#define PKG_VSNPRINTF_SUPPORT_WRITEBACK_SPECIFIER
+#define PKG_VSNPRINTF_SUPPORT_LONG_LONG
+#define PKG_VSNPRINTF_CHECK_FOR_NUL_IN_FORMAT_SPECIFIER
+#define PKG_VSNPRINTF_INTEGER_BUFFER_SIZE 32
+#define PKG_VSNPRINTF_DECIMAL_BUFFER_SIZE 32
+#define PKG_VSNPRINTF_DEFAULT_FLOAT_PRECISION 6
+#define PKG_VSNPRINTF_MAX_INTEGRAL_DIGITS_FOR_DECIMAL 9
+#define PKG_VSNPRINTF_LOG10_TAYLOR_TERMS 4
+#define ZOS_USING_KERNEL_DEBUG
+#define KLOG_GLOBAL_LEVEL_WARNING
+#define KLOG_GLOBAL_LEVEL 1
+#define KLOG_USING_COLOR
+#define KLOG_WITH_FUNC_LINE
+/* end of kernel */
+
+/* components */
+
+/* AI */
+
+/* end of AI */
+
+/* Cloud */
+
+#define PKG_USING_HTTP_CLIENT
+#define HTTP_CLIENT_AUTHB_SIZE 128
+#define HTTP_CLIENT_CHUNK_SIZE 1024
+#define HTTP_CLIENT_SEND_BUF_SIZE 1024
+#define HTTP_CLIENT_MAX_HOST_LEN 128
+#define HTTP_CLIENT_MAX_URL_LEN 512
+#define HTTP_CLIENT_MAX_RECV_WAIT_MS 5000
+#define HTTP_PORT 80
+#define HTTPS_PORT 443
+#define PKG_USING_MQTTCLIENT
+#define MQTT_LOG_LEVEL 4
+#define MQTT_VERSION 4
+#define MQTT_KEEP_ALIVE_INTERVAL 100
+#define MQTT_THREAD_STACK_SIZE 4096
+#define MQTT_THREAD_PRIO 5
+#define MQTT_THREAD_TICK 50
+#define MQTT_MAX_PACKET_ID 0xFFFE
+#define MQTT_TOPIC_LEN_MAX 64
+#define MQTT_ACK_HANDLER_NUM_MAX 64
+#define MQTT_DEFAULT_BUF_SIZE 1024
+#define MQTT_DEFAULT_CMD_TIMEOUT 4000
+#define MQTT_MAX_CMD_TIMEOUT 20000
+#define MQTT_MIN_CMD_TIMEOUT 1000
+#define MQTT_RECONNECT_DEFAULT_DURATION 1000
+#define PKG_USING_MQTT_IOT_AUTH
+/* end of Cloud */
+
+/* File system */
+
+#define PKG_USING_FAL
+#define FAL_DEBUG_CONFIG
+#define FAL_DEBUG 1
+#define FAL_PART_HAS_TABLE_CFG
+#define ZOS_USING_VFS
+#define VFS_MOUNTPOINT_MAX 4
+#define VFS_FILESYSTEM_TYPES_MAX 4
+#define VFS_FD_MAX 16
+#define ZOS_USING_AUTO_MOUNT
+#define ZOS_USING_VFS_LFS
+
+/* Little filesystem module */
+
+#define LFS_NAME_MAX 255
+#define LFS_FILE_MAX 512
+#define LFS_LOOKAHEAD_SIZE 8
+#define LFS_THREADSAFE
+/* end of Little filesystem module */
+#define ZOS_USING_VFS_SHELL_CMD
+/* end of File system */
+
+/* GUI */
+
+/* end of GUI */
+
+/* IoT */
+
+/* end of IoT */
+
+/* Language */
+
+#define PKG_USING_CJSON
+/* end of Language */
+
+/* C standard library adapter */
+
+#define ZOS_USING_LIBC_ADAPTER
+#define ZOS_USING_NEWLIB_ADAPTER
+#define ZOS_USING_ARMCCLIB_ADAPTER
+/* end of C standard library adapter */
+
+/* security */
+
+#define PKG_USING_ZOS_CRYPTO
+
+/* mbedtls */
+
+#define SECURITY_USING_MBEDTLS
+#define MBEDTLS_SSL_MAX_CONTENT_LEN 16384
+#define MBEDTLS_HAVE_TIME
+#define MBEDTLS_SSL_PROTO_DTLS
+#define MBEDTLS_SSL_DTLS_ANTI_REPLAY
+#define MBEDTLS_SSL_DTLS_HELLO_VERIFY
+/* end of mbedtls */
+/* end of security */
+
+/* utils */
+
+/* Shell */
+
+#define ZOS_USING_SHELL
+#define SHELL_TASK_NAME "shell"
+#define SHELL_TASK_PRIORITY 13
+#define SHELL_TASK_STACK_SIZE 2048
+#define SHELL_USING_HISTORY
+#define SHELL_HISTORY_LINES 5
+#define SHELL_USING_DESCRIPTION
+#define SHELL_CMD_SIZE 80
+#define SHELL_PROMPT_SIZE 256
+#define SHELL_ARG_MAX 10
+/* end of Shell */
+/* end of utils */
+/* end of components */
+
+/* SDK DEMO Config */
+
+/* end of SDK DEMO Config */
+
+/* QS-100 DEMO Config */
+
+/* end of QS-100 DEMO Config */
+
+/* Cloud platform configuration */
+
+/* end of Cloud platform configuration */
+
+#endif /* __ZOS_CONFIG_H__ */
+

+ 10 - 0
applications/inc/zos_main.h

@@ -0,0 +1,10 @@
+#ifndef __ZOS_MAIN_H__
+#define __ZOS_MAIN_H__
+
+#include "zos_util.h"
+
+
+zos_err_t mo_network_init(void); //Detect the network connection status, and return: ZOS_EOK, failure return: ZOS_ERROR
+
+#endif /* __ZOS_MAIN_H__ */
+

+ 107 - 0
applications/src/demo_network.c

@@ -0,0 +1,107 @@
+#include "zos.h"
+#include "zos_config.h"
+#include "zos_mo.h"
+#include "sys/time.h"
+
+//检测网络是否连接成功,成功返回:ZOS_EOK,失败返回:ZOS_ERROR
+zos_err_t mo_network_init(void)
+{
+	zos_int8_t i = 60;
+	zos_uint8_t rssi,ber,cgact;
+	radio_info_t radio_info;
+	
+	char *str = ZOS_NULL;
+	str = zos_malloc(50);
+
+	zos_kprintf("nb power by psm:%d\r\n",zos_pm_get_poweron_from_deepsleep());
+	zos_kprintf("nb power type:%d\r\n",zos_pm_get_poweron_reason());
+	zos_kprintf("nb reset type:%d\r\n",zos_pm_get_reset_reason());
+	mo_get_imei(str,50);
+	str[15] = '\0';
+	zos_kprintf("IMEI = %s\r\n",str);
+	if(mo_get_imsi(str,50) != ZOS_EOK)
+	{
+		zos_kprintf("Please check the SIM card\r\n",str);
+		zos_free(str);
+		return ZOS_ERROR;
+	}
+	str[15] = '\0';
+	zos_kprintf("IMSI = %s\r\n",str);
+
+	mo_get_iccid(str,50);
+	str[20] = '\0';
+	zos_kprintf("ICCID = %s\r\n",str);
+	zos_free(str);
+	
+	do{
+		if(mo_get_csq(&rssi,&ber) == ZOS_EOK)
+		{
+			zos_kprintf("csq = %d\r\n",rssi);
+			if(rssi<32)
+			{
+				break;
+			}
+		}
+		zos_task_msleep(1000);
+	}while(i--);
+
+	if(i>0)
+	{
+		do{
+			if(mo_get_cgact(&cgact) == ZOS_EOK)
+			{
+				zos_kprintf("cgact=%d\r\n",cgact);
+				if(cgact == 1)
+				{
+					break;
+				}
+			}
+			zos_task_msleep(1000);
+		}while(i--);
+		if(i <= 0)
+		{
+			zos_kprintf("module connect to net failed\r\n");
+			return ZOS_ERROR;
+		}
+		zos_task_msleep(1000);
+		time_t t = time(NULL);
+		
+		zos_kprintf("%lld\r\n",zos_rtc_get());
+		zos_kprintf("%lld\r\n",time(NULL));
+		zos_kprintf("%s\r\n",ctime(&t));
+
+		struct tm *data = localtime(&t);
+		zos_kprintf("date:%d-%d-%d time:%d-%d-%d\r\n",data->tm_year + 1900 ,data->tm_mon + 1,data->tm_mday,data->tm_hour,data->tm_min,data->tm_sec);
+		zos_task_msleep(1000);
+		zos_kprintf("get radio info %d\r\n",mo_get_radio(&radio_info));
+		zos_kprintf("cell info:%d,%d,%d,%d,%d,%d,%d\r\n",
+        radio_info.earfcn,
+        radio_info.pci,
+        radio_info.cell_id,
+        radio_info.signal_power,
+        radio_info.rsrq,
+        radio_info.ecl,
+        radio_info.snr);
+		zos_kprintf("Module connect to net successful\r\n");	
+		return ZOS_EOK;	
+	}
+	zos_kprintf("module connect to net failed\r\n");
+	return ZOS_ERROR;
+}
+
+
+
+#ifdef ZOS_USING_SHELL
+//以下为shell命令相关函数和命令定义,如果不需要shell命令控制,可以全部删除
+void demo_network(int argc, char *agrv[])
+{
+	mo_network_init();
+}
+#include "shell.h"
+SH_CMD_EXPORT(demo_network,demo_network, "network demo");
+
+#endif
+
+
+
+

+ 252 - 0
applications/src/zos_main.c

@@ -0,0 +1,252 @@
+/**
+ * @defgroup zos main
+ */
+
+#include "zos_config.h"
+#include "zos.h"
+#include "zos_version.h"
+#include "zos_main.h"
+#ifdef ZOS_USING_OTA
+#include "zos_ota.h"
+#endif
+
+#include <unistd.h>
+#include <fcntl.h>
+#include <vfs.h>
+//如果想用带颜色的
+#define DBG_TAG "zos_main"		//代表文件名或者特定信息
+//#define DBG_LVL DBG_ERROR		//仅 LOG_E 会打印
+//#define DBG_LVL DBG_WARNING	//LOG_W 、LOG_E 都会打印
+//#define DBG_LVL DBG_INFO		//LOG_I 、LOG_W 、LOG_E 都会打印
+#define DBG_LVL DBG_LOG			//LOG_D 、LOG_I 、LOG_W 、LOG_E 都会打印
+#include "zos_dbg.h"			//想要支持颜色打印,必须先定义上面的信息,再引用 zos_dbg.h
+
+#include "mqttclient.h"
+//任务全局变量
+zos_task_t user_main_task_Handle = ZOS_NULL;
+
+//如果在 user_main_task 任务里面进行复杂程序,请将任务的栈改大一些
+#define USER_MAIN_STACK_SIZE       10240
+
+#include "shell.h"
+#define FILE_NAME "test.txt"
+#define FILE_NAME_NEW "test_new.txt"
+
+zos_task_t emqx_mqtt_handle = ZOS_NULL;/* 创建任务句柄 */
+zos_task_t emqx_mqtt_publish_handle = ZOS_NULL;/* LED任务句柄 */
+
+
+static void emqx_topic_handler(void* client, message_data_t* msg)
+{
+    (void) client;
+    MQTT_LOG_I("-----------------------------------------------------------------------------------");
+    MQTT_LOG_I("%s:%d %s()...\ntopic: %s\nmessage:%s", __FILE__, __LINE__, __FUNCTION__, msg->topic_name, (char*)msg->message->payload);
+    MQTT_LOG_I("-----------------------------------------------------------------------------------");
+}
+
+void emqx_mqtt_publish_task(void *parameter)
+{
+    mqtt_client_t *client = (mqtt_client_t *)parameter;
+
+    char buf[200] = { 0 };
+    mqtt_message_t msg;
+    memset(&msg, 0, sizeof(msg));
+    sprintf(buf, "welcome to mqttclient, this is a publish test...");
+
+    zos_task_msleep(2000);
+
+    mqtt_list_subscribe_topic(client);
+    
+    int count = 0;
+
+    while(1) {
+        msg.payload = (void *) buf;
+        sprintf(buf, "{\"imei\":\"862016050958211\",\"Content\":\"{\\\"count\\\":\\\"%d\\\",\\\"humidity\\\":\\\"454\\\",\\\"bat\\\":\\\"1234\\\"}\"}", count);
+        count++;  // 递增计数
+
+        msg.qos = 0;
+        mqtt_publish(client, "sys/357185336717381/post", &msg);
+        zos_task_msleep(10000);
+    }
+
+    emqx_mqtt_publish_handle = ZOS_NULL;
+    zos_task_exit();
+}
+
+void emqx_mqtt_task(void  *parameter)
+{
+    int res;
+    mqtt_client_t *client = NULL;
+    
+    LOG_D("\nwelcome to mqttclient test...\n");
+
+    mqtt_log_init();
+
+    client = mqtt_lease();
+
+    mqtt_set_port(client, "1883");
+
+    mqtt_set_host(client, "14.103.101.132");
+    mqtt_set_client_id(client, "357185336717381");
+    mqtt_set_user_name(client, "test1");
+    mqtt_set_password(client, "123456");
+    mqtt_set_clean_session(client, 1);
+
+    mqtt_connect(client);
+    
+    mqtt_subscribe(client, "sys/357185336717381/down", QOS0, emqx_topic_handler);
+    
+    emqx_mqtt_publish_handle = zos_task_create("emqx_publish",emqx_mqtt_publish_task,client,2048, ZOS_TASK_PRIORITY_NORMAL1);
+    if(emqx_mqtt_publish_handle != ZOS_NULL)
+    {
+        zos_task_startup(emqx_mqtt_publish_handle);
+    }
+    emqx_mqtt_handle = ZOS_NULL;
+    zos_task_exit();    
+}
+
+
+void file_operation_sample(void)
+{
+    int fd, size, str_len;
+    char *str[3] = {"1234567890", "ABCDEFGHIJ", "abcdefghij"};
+    char bufread[35];
+    off_t offset = 0;
+    char* str_ptr;    
+    struct stat filestat;
+
+    fd = open(FILE_NAME, O_RDWR | O_CREAT | O_TRUNC);
+    if (fd < 0)
+    {        
+        LOG_E("open file err");
+        return;
+    }
+    else
+    {        
+        LOG_W("open(create) file:%s", FILE_NAME);
+        str_ptr = str[0];
+        str_len = strlen(str_ptr);
+        size = write(fd, str_ptr, str_len);
+        LOG_W("write %d byte from offset %d :%s", size, offset, str_ptr);
+    }
+
+    offset = 10;
+    if (lseek(fd, offset, SEEK_SET) != -1)
+    {
+        str_ptr = str[1];
+        str_len = strlen(str_ptr);
+        size = write(fd, str_ptr, str_len);
+        LOG_W("write %d byte from offset %d :%s", size, offset, str_ptr);
+    }
+
+    offset = 20;
+    if (lseek(fd, offset, SEEK_SET) != -1)
+    {
+        str_ptr = str[2];
+        str_len = strlen(str_ptr);
+        size = write(fd, str_ptr, str_len);
+        LOG_W("write %d byte from offset %d :%s", size, offset, str_ptr);
+    }
+
+    offset = 0;
+    if (lseek(fd, offset, SEEK_SET) != -1)
+    {
+        memset(bufread, 0, sizeof(bufread));
+        size = read(fd, bufread, sizeof(bufread));        
+        LOG_W("read %d byte from offset %d :%s", size, offset, bufread);
+    }
+
+    if(fstat(fd, &filestat) != -1)
+    {
+        LOG_W("the filesize of %s is :%d", FILE_NAME, filestat.st_size);
+    }
+
+    if(close(fd) != -1)
+    {
+        LOG_W("close file:%s", FILE_NAME);
+    }
+
+    // if(rename(FILE_NAME, FILE_NAME_NEW) != -1)
+    // {
+    //     LOG_W("rename %s to %s", FILE_NAME, FILE_NAME_NEW);
+    // }
+
+    if(stat(FILE_NAME, &filestat) != -1)
+    {
+        LOG_W("the filesize of %s is :%d", FILE_NAME, filestat.st_size);
+    }
+
+    // if (unlink(FILE_NAME_NEW) != -1)
+    // {
+    //     LOG_W("rm file:%s", FILE_NAME_NEW);
+    // }
+}
+
+SH_CMD_EXPORT(test_file, file_operation_sample, "test for file operation");
+
+void user_main_task(void *parameter)
+{
+	zos_kprintf("Hello, welcome to using QS-100 module. The ZeusOS-SDK integrates shell functions. You can send help and other commands to operate the module.\r\n");
+	LOG_I("Hello, ZeusOS 1.0 ");
+	LOG_I("欢迎使用QS-100模组");
+
+    //*****  上电检测是否来自深睡眠唤醒  *****//
+	if(zos_pm_get_poweron_from_deepsleep() != ZOS_TRUE)
+	{
+		//如果属于正常开机,需要执行连网操作
+		if(mo_network_init() == ZOS_ERROR)
+		{
+			//模块连接到网络失败,等待20S,然后重启模组
+			zos_task_msleep(20000);
+			zos_reboot();
+		}
+	}
+	// zos_pin_mode(5,PIN_MODE_OUTPUT);
+	// zos_pin_write(5,PIN_LOW);
+	zos_adc_t adc_dev = zos_adc_find("vbat");
+	zos_adc_init(adc_dev,0);
+	zos_adc_enable(adc_dev,0);
+	zos_adc_t adc0_dev = zos_adc_find("adc0");
+	zos_adc_init(adc0_dev,0);
+	zos_adc_enable(adc0_dev,0);
+	zos_kprintf("VBAT = %dMV\r\n",zos_adc_read(adc_dev,0));
+	zos_task_msleep(5000);
+	zos_pin_write(5,PIN_HIGH);
+	zos_kprintf("VBAT = %dMV\r\n",zos_adc_read(adc_dev,0));
+	zos_task_msleep(5000);
+	zos_pin_write(5,PIN_LOW);
+	zos_kprintf("adc0 = %dMV\r\n",zos_adc_read(adc0_dev,0));
+	zos_task_msleep(5000);
+	zos_pin_write(5,PIN_HIGH);
+	zos_kprintf("adc0 = %dMV\r\n",zos_adc_read(adc0_dev,0));
+
+    /* 创建app_task_create任务 */
+  	emqx_mqtt_handle = zos_task_create("emqx_mqtt",emqx_mqtt_task,ZOS_NULL,2048,ZOS_TASK_PRIORITY_ABOVENORMAL2);
+    if(emqx_mqtt_handle != ZOS_NULL)
+    {
+        zos_task_startup(emqx_mqtt_handle);
+    }
+
+#ifdef ZOS_USING_OTA
+    //上报升级结果到平台
+    zos_ota_result_check();
+    //OTA查询和升级程序,可以在其他地方按需求调用
+    zos_err_t ret1 = zos_fota_exec();
+    zos_kprintf("ret1 = %d\r\n",ret1);
+#endif
+	user_main_task_Handle = ZOS_NULL;
+	zos_task_exit();
+}
+
+
+int zos_main(void)
+{
+	user_main_task_Handle = zos_task_create ("user_main_task",user_main_task,ZOS_NULL,USER_MAIN_STACK_SIZE,ZOS_TASK_PRIORITY_NORMAL);
+	if(user_main_task_Handle != ZOS_NULL)
+    {
+        zos_task_startup(user_main_task_Handle);
+    }
+    return ZOS_EOK;
+}
+
+

+ 26 - 0
libraries/SConscript

@@ -0,0 +1,26 @@
+from build_tools import *
+import osconfig
+
+pwd  = PresentDir()
+src  = []
+LIBS = []
+LIBPATH = []
+LIBS += ['c', 'm']
+LIBPATH += [pwd ]  
+if IsDefined(['ZOS_USING_OTA']):
+    LIBS += ['zos_ota_gcc']
+if osconfig.BUILD ==  'release':
+               # LIBPATH 指定库的路径,表示库的搜索路径是当前目录下的'libs'目录
+
+    LIBS += ['userapp_gcc']                    # GCC 下 LIBS 指定库的名称 
+    LIBS += ['hal_kernel_gcc']
+    LIBS += ['sysapp_gcc']
+    LIBS += ['applib_gcc']
+    LIBS += ['arch_gcc']
+    LIBS += ['hal_drivers_gcc']
+
+
+
+group = AddCodeGroup('libraries', src, depend=[''], LIBS = LIBS, LIBPATH=LIBPATH)
+
+Return("group")

TEMPAT SAMPAH
libraries/libapplib_gcc.a


TEMPAT SAMPAH
libraries/libarch_gcc.a


TEMPAT SAMPAH
libraries/libhal_drivers_gcc.a


TEMPAT SAMPAH
libraries/libhal_kernel_gcc.a


TEMPAT SAMPAH
libraries/libsysapp_gcc.a


TEMPAT SAMPAH
libraries/libuserapp_gcc.a


TEMPAT SAMPAH
libraries/libzos_ota_gcc.a


+ 25 - 0
libraries/link/mem.ld

@@ -0,0 +1,25 @@
+/*
+ * Memory Spaces Definitions.
+ *
+ * Need modifying for a specific board. 
+ *   FLASH.ORIGIN: starting address of flash
+ *   FLASH.LENGTH: length of flash
+ *   RAM.ORIGIN: starting address of RAM bank 0
+ *   RAM.LENGTH: length of RAM bank 0
+ *
+ * The values below can be addressed in further linker scripts
+ * using functions like 'ORIGIN(RAM)' or 'LENGTH(RAM)'.
+ */
+
+MEMORY
+{
+	FLASH (xrw)   : ORIGIN = 0x2711F000, LENGTH = 0xCD000	/* text in flash */
+	RAM (xrw)     : ORIGIN = 0x2001D000, LENGTH = 0x43000	/* text/data/bss/heap/stack in RAM */
+}
+
+/*
+ * For external ram use something like:
+
+  RAM (xrw) : ORIGIN = 0x68000000, LENGTH = 64K
+
+ */

+ 400 - 0
libraries/link/sections.ld

@@ -0,0 +1,400 @@
+/* 
+ * To make use of the multi-region initialisations, define
+ * OS_INCLUDE_STARTUP_INIT_MULTIPLE_RAM_SECTIONS for the _startup.c file.
+ */
+
+_Flash_Total = LENGTH(FLASH);
+_Flash_Used = SIZEOF(.flashtext)+SIZEOF(.ARM.extab)+SIZEOF(.ARM.exidx);
+_Ram_Total = LENGTH(RAM);
+_Ram_Text = SIZEOF(.isr_vector)+SIZEOF(.text)+SIZEOF(.inits);
+_Ram_Data = SIZEOF(.data);
+_Ram_Bss = SIZEOF(.bss);
+
+/* Used for Alert*/
+FLASH_LIMIT = _Flash_Total;
+
+/*
+ * The '__stack' definition is required by crt0, do not remove it.
+ */
+__stack = ORIGIN(RAM) + LENGTH(RAM);
+
+/*
+ * Default stack sizes.
+ * These are used by the startup in order to allocate stacks 
+ * for the different modes.
+ */
+
+__Main_Stack_Size = 0x400 ;
+
+PROVIDE ( _Main_Stack_Size = __Main_Stack_Size ) ;
+
+__Main_Stack_Limit = __stack - __Main_Stack_Size ;
+
+/* "PROVIDE" allows to easily override these values from an 
+ * object file or the command line. */
+PROVIDE ( _Main_Stack_Limit = __Main_Stack_Limit ) ;
+
+/*
+ * There will be a link error if there is not this amount of 
+ * RAM free at the end. 
+ */
+_Minimum_Stack_Size = __Main_Stack_Size ;
+
+/*
+ * Default heap definitions.
+ * The heap start immediately after the last statically allocated 
+ * .sbss/.noinit section, and extends up to the main stack limit.
+ */
+
+PROVIDE ( _Heap_Begin = _end_noinit ) ;
+PROVIDE ( _Heap_Limit = __stack - __Main_Stack_Size ) ;
+
+
+/* 
+ * the RAM area's size is 0xE000, stack use __Main_Stack_Size, 
+ * the others is heap size
+ */
+__Heap_Size  = _Heap_Limit - _Heap_Begin ;
+
+_Minimum_Heap_Size = __Heap_Size ;
+
+/*
+__malloc_sbrk_base = _Heap_Begin ;
+__malloc_trim_threshold = __Heap_Size ;
+*/
+/* 
+ * The entry point is informative, for debuggers and simulators,
+ * since the Cortex-M vector points to it anyway.
+ */
+ENTRY(Reset_Handler)
+
+
+/* Sections Definitions */
+
+SECTIONS
+{
+    /*
+     * For some STRx devices, the beginning of the startup code
+     * is stored in the .flashtext section, which goes to FLASH.
+     */
+    .flashtext : ALIGN(4)
+    {
+    	*.o.flash(.text .text.*)								/* all code in ram */
+    	
+        *(.flashtext .flashtext.*)								/* attribute used */
+        
+        *.o.flash(.rodata .rodata.* .constdata .constdata.*)	/* read only or const data */
+        . = ALIGN(4);
+        __fsymtab_start = .;
+        KEEP(*(FSymTab))
+        __fsymtab_end = .;
+
+        /* section information for initial. */
+        . = ALIGN(4);
+        __zos_init_start = .;
+        KEEP(*(SORT(.zos_init_call*)))
+        __zos_init_end = .;
+
+
+		. = ALIGN(4);
+    } >FLASH
+    
+    
+    /*
+     * For Cortex-M devices, the beginning of the startup code is stored in
+     * the .isr_vector section, which goes to RAM. 
+     */
+    .isr_vector : ALIGN(4)
+    {
+        FILL(0xFF)
+        
+        __vectors_start = ABSOLUTE(.) ;
+        KEEP(*(.isr_vector))     	/* Interrupt vectors */
+        
+		KEEP(*(.cfmconfig))			/* Freescale configuration words */
+		     
+        /* 
+         * This section is here for convenience, to store the
+         * startup code at the beginning of the flash area, hoping that
+         * this will increase the readability of the listing.
+         */
+        *(.after_vectors .after_vectors.*)	/* Startup code and ISR */
+
+    } >RAM
+	
+    
+    /*
+     * The program code is stored in the .text section, 
+     * which goes to RAM.
+     */
+    .text : ALIGN(4)
+    {
+        *(.text .text.*)								/* all remaining code in ram */
+        
+        *(.ramtext*)									/* attribute used */
+        
+        *(.rodata .rodata.* .constdata .constdata.*)	/* read only or const data */
+
+        *(vtable)										/* C++ virtual tables */
+
+		KEEP(*(.eh_frame*))
+
+		/*
+		 * Stub sections generated by the linker, to glue together 
+		 * ARM and Thumb code. .glue_7 is used for ARM code calling 
+		 * Thumb code, and .glue_7t is used for Thumb code calling 
+		 * ARM code. Apparently always generated by the linker, for some
+		 * architectures, so better leave them here.
+		 */
+        *(.glue_7)
+        *(.glue_7t)
+
+    } >RAM
+
+
+    .inits : ALIGN(4)
+    {
+        /* 
+         * Memory regions initialisation arrays.
+         *
+         * Thee are two kinds of arrays for each RAM region, one for 
+         * data and one for bss. Each is iterrated at startup and the   
+         * region initialisation is performed.
+         * 
+         * The data array includes:
+         * - from (LOADADDR())
+         * - region_begin (ADDR())
+         * - region_end (ADDR()+SIZEOF())
+         *
+         * The bss array includes:
+         * - region_begin (ADDR())
+         * - region_end (ADDR()+SIZEOF())
+         *
+         * WARNING: It is mandatory that the regions are word aligned, 
+         * since the initialisation code works only on words.
+         */
+         
+        __data_regions_array_start = .;
+        
+        LONG(LOADADDR(.data));
+        LONG(ADDR(.data));
+        LONG(ADDR(.data)+SIZEOF(.data));
+        
+        __data_regions_array_end = .;
+        
+        __bss_regions_array_start = .;
+        
+        LONG(ADDR(.bss));
+        LONG(ADDR(.bss)+SIZEOF(.bss));
+        
+        __bss_regions_array_end = .;
+
+        /* End of memory regions initialisation arrays. */
+    
+        /*
+         * These are the old initialisation sections, intended to contain
+         * naked code, with the prologue/epilogue added by crti.o/crtn.o
+         * when linking with startup files. The standalone startup code
+         * currently does not run these, better use the init arrays below.
+         */
+		KEEP(*(.init))
+		KEEP(*(.fini))
+
+		. = ALIGN(4);
+
+		/*
+         * The preinit code, i.e. an array of pointers to initialisation 
+         * functions to be performed before constructors.
+         */
+		PROVIDE_HIDDEN (__preinit_array_start = .);
+        
+        /*
+         * Used to run the SystemInit() before anything else.
+         */
+		KEEP(*(.preinit_array_sysinit .preinit_array_sysinit.*))
+        
+        /* 
+         * Used for other platform inits.
+         */
+		KEEP(*(.preinit_array_platform .preinit_array_platform.*))
+        
+        /*
+         * The application inits. If you need to enforce some order in 
+         * execution, create new sections, as before.
+         */
+		KEEP(*(.preinit_array .preinit_array.*))
+
+		PROVIDE_HIDDEN (__preinit_array_end = .);
+
+		. = ALIGN(4);
+
+		/*
+         * The init code, i.e. an array of pointers to static constructors.
+         */
+		PROVIDE_HIDDEN (__init_array_start = .);
+		KEEP(*(SORT(.init_array.*)))
+		KEEP(*(.init_array))
+		PROVIDE_HIDDEN (__init_array_end = .);
+
+		. = ALIGN(4);
+
+		/*
+         * The fini code, i.e. an array of pointers to static destructors.
+         */
+		PROVIDE_HIDDEN (__fini_array_start = .);
+		KEEP(*(SORT(.fini_array.*)))
+		KEEP(*(.fini_array))
+		PROVIDE_HIDDEN (__fini_array_end = .);
+
+    } >RAM
+
+	/* ARM magic sections */
+	.ARM.extab : ALIGN(4)
+   	{
+       *(.ARM.extab* .gnu.linkonce.armextab.*)
+   	} > FLASH
+   	
+    . = ALIGN(4);
+   	__exidx_start = .;   	
+   	.ARM.exidx : ALIGN(4)
+   	{
+       *(.ARM.exidx* .gnu.linkonce.armexidx.*)
+   	} > FLASH
+   	__exidx_end = .;
+   	
+    . = ALIGN(4);
+    _etext = .;
+    __etext = .;
+
+	/* 
+     * This address is used by the startup code to 
+     * initialise the .data section.
+     */
+    _sidata = LOADADDR(.data);
+
+    /*
+     * The initialised data section.
+     *
+     * The program executes knowing that the data is in the RAM
+     * but the loader puts the initial values in the FLASH (inidata).
+     * It is one task of the startup to copy the initial values from 
+     * FLASH to RAM.
+     */
+    .data : ALIGN(4)
+    {
+    	FILL(0xFF)
+        /* This is used by the startup code to initialise the .data section */
+        __data_start__ = . ;
+		*(.data_begin .data_begin.*)
+
+		*(.data .data.*)
+		
+		*(.data_end .data_end.*)
+	    . = ALIGN(4);
+
+	    /* This is used by the startup code to initialise the .data section */
+        __data_end__ = . ;
+
+    } >RAM
+
+    /* The primary uninitialised data section. */
+    .bss (NOLOAD) : ALIGN(4)
+    {
+        __bss_start__ = .;     	/* standard newlib definition */
+        *(.bss_begin .bss_begin.*)
+
+        *(.bss .bss.*)
+        *(COMMON)
+        
+        *(.bss_end .bss_end.*)
+	    . = ALIGN(4);
+        __bss_end__ = .;        /* standard newlib definition */
+    } >RAM
+    
+    .noinit (NOLOAD) : ALIGN(4)
+    {
+        _noinit = .;
+        
+        *(.noinit .noinit.*) 
+        
+         . = ALIGN(4) ;
+        _end_noinit = .;   
+    } > RAM
+    
+    /* Mandatory to be word aligned, _sbrk assumes this */
+    PROVIDE ( end = _end_noinit ); /* was _ebss */
+    PROVIDE ( _end = _end_noinit );
+    PROVIDE ( __end = _end_noinit );
+    PROVIDE ( __end__ = _end_noinit );
+    
+    /*
+     * Used for validation only, do not allocate anything here!
+     *
+     * This is just to check that there is enough RAM left for the Main
+     * stack. It should generate an error if it's full.
+     */
+     
+    .heap : ALIGN(4)
+    {
+    	__heap_start__ = .;     /* heap start */
+    	*(.heap .heap.*)
+    	. = ALIGN(4);
+    	__heap_end__ = .;       /* heap end */
+    } >RAM
+     
+    ._check_stack : ALIGN(4)
+    {
+        . = . + _Minimum_Stack_Size ;
+    } >RAM
+   
+    /* Check if sram + flash exceeds Flash Total limit */
+    ASSERT( _Flash_Used + _Ram_Text + _Ram_Data < FLASH_LIMIT, "flash used size exceeds flash total size")
+
+    /* After that there are only debugging sections. */
+    
+    /* This can remove the debugging information from the standard libraries */    
+    /* 
+    DISCARD :
+    {
+     libc.a ( * )
+     libm.a ( * )
+     libgcc.a ( * )
+     }
+     */
+  
+    /* Stabs debugging sections.  */
+    .stab          0 : { *(.stab) }
+    .stabstr       0 : { *(.stabstr) }
+    .stab.excl     0 : { *(.stab.excl) }
+    .stab.exclstr  0 : { *(.stab.exclstr) }
+    .stab.index    0 : { *(.stab.index) }
+    .stab.indexstr 0 : { *(.stab.indexstr) }
+    .comment       0 : { *(.comment) }
+    /*
+     * DWARF debug sections.
+     * Symbols in the DWARF debugging sections are relative to the beginning
+     * of the section so we begin them at 0.  
+     */
+    /* DWARF 1 */
+    .debug          0 : { *(.debug) }
+    .line           0 : { *(.line) }
+    /* GNU DWARF 1 extensions */
+    .debug_srcinfo  0 : { *(.debug_srcinfo) }
+    .debug_sfnames  0 : { *(.debug_sfnames) }
+    /* DWARF 1.1 and DWARF 2 */
+    .debug_aranges  0 : { *(.debug_aranges) }
+    .debug_pubnames 0 : { *(.debug_pubnames) }
+    /* DWARF 2 */
+    .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+    .debug_abbrev   0 : { *(.debug_abbrev) }
+    .debug_line     0 : { *(.debug_line) }
+    .debug_frame    0 : { *(.debug_frame) }
+    .debug_str      0 : { *(.debug_str) }
+    .debug_loc      0 : { *(.debug_loc) }
+    .debug_macinfo  0 : { *(.debug_macinfo) }
+    /* SGI/MIPS DWARF 2 extensions */
+    .debug_weaknames 0 : { *(.debug_weaknames) }
+    .debug_funcnames 0 : { *(.debug_funcnames) }
+    .debug_typenames 0 : { *(.debug_typenames) }
+    .debug_varnames  0 : { *(.debug_varnames) }    
+}

+ 87 - 0
osconfig.py

@@ -0,0 +1,87 @@
+import os
+import platform
+# toolchains options
+ARCH='arm'
+CPU='cortex-m3'
+CROSS_TOOL='gcc'
+MODULE = 'QS-100'
+# bsp lib config
+BSP_LIBRARY_TYPE = None
+project_directory = os.getcwd()
+
+if os.getenv('OS_CC'):
+    CROSS_TOOL = os.getenv('OS_CC')
+if os.getenv('OS_ROOT'):
+    OS_ROOT = os.getenv('OS_ROOT')
+
+
+os_ver = platform.system()
+# cross_tool provides the cross compiler
+# COMPILER_PATH is the compiler execute path, for example, CodeSourcery, Keil MDK, IAR
+if  CROSS_TOOL == 'gcc':
+    COMPILER    = 'gcc'
+    os_ver = platform.system()
+    if  os_ver == "Windows":
+        COMPILER_PATH   = './../../tools/gcc/bin'
+    else :
+        COMPILER_PATH   = '/usr/bin'
+
+
+if CROSS_TOOL == 'gcc' and os.getenv('OS_EXEC_PATH'):
+    COMPILER_PATH = os.getenv('OS_EXEC_PATH')
+
+# BUILD = 'debug'
+BUILD = 'release'
+
+if COMPILER == 'gcc':
+    # toolchains
+    PREFIX = 'arm-none-eabi-'
+    CC = PREFIX + 'gcc'
+    AS = PREFIX + 'gcc'
+    AR = PREFIX + 'ar'
+    CXX = PREFIX + 'g++'
+    LINK = PREFIX + 'gcc'
+    RESULT_SUFFIX = 'elf'
+    SIZE = PREFIX + 'size'
+    OBJDUMP = PREFIX + 'objdump'
+    OBJCPY = PREFIX + 'objcopy'
+
+    DEVICE = ' -mcpu=cortex-m3 -std=gnu11 -mthumb -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections -ffreestanding --specs=nano.specs --specs=nosys.specs -Xlinker -zmuldefs -u _printf_float ' 
+    CFLAGS = DEVICE + ' -Wall -Wextra -g -Dgcc -D_REENT_SMALL -D_REENT_GLOBAL_ATEXIT -DCOMPILE_TIME -D__SOC_XINYI_1100__ -DMODULE_VER -DPRODUCT_VER -DXY_SOCKET_PROXY=1 -DXY_DTLS=1 -DMOBILE_VER=1 -DLWM2M_LITTLE_ENDIAN=1 -DTELECOM_VER=1 -DWITH_LWIP=1 -DLWM2M_CLIENT_MODE=1 -DWAKAAMA=1 -DXINYI_LWM2M_CLIENT_MODE=1 -DXINYI_LWM2M_LITTLE_ENDIAN=1 -DLIBCOAP=1 -DWITH_LWIP=1 -DXY_PING=1 -DXY_DM=1 -DAT_SOCKET -DXY_WIRESHARK=1 -DXY_FOTA=1 -DXY_HTTP=0 -DBLE_ENABLE=0'
+    AFLAGS = ' -c' + DEVICE + ' -x assembler-with-cpp -Wa,-mimplicit-it=thumb '
+    LFLAGS = DEVICE + ' -Wall -Wextra -Wl,--gc-sections,-Map=zos.map,-cref,-u,Reset_Handler -T ./libraries/link/mem.ld  -T ./libraries/link/sections.ld '
+    # LFLAGS = DEVICE + ' -Wall -Wextra -Wl,-Map=zos.map,-cref,-u,Reset_Handler -T ./libraries/link/mem.ld  -T ./libraries/link/sections.ld '
+
+    CPATH = ''
+    LPATH = ''
+
+    if BUILD == 'debug':
+        CFLAGS += ' -O2 -Os'
+        AFLAGS += ' -O2 -Os'
+    else:
+        CFLAGS += ' -O2 -Os'
+        AFLAGS += ' -O2 -Os'
+
+    CXXFLAGS = CFLAGS 
+
+    POST_ACTION = OBJCPY + ' -O binary -j .flashtext $TARGET flash.bin\n'
+    POST_ACTION += OBJCPY + ' -O binary -j .isr_vector -j .text -j .data $TARGET ram.bin\n' + SIZE + ' $TARGET \n'
+    if  os_ver == "Windows":
+        if os.path.exists("./firmware/allbins" + '/flash.bin ') == True :
+            os.remove("./firmware/allbins" + '/flash.bin ')
+
+        if os.path.exists("./firmware/allbins" + '/ram.bin ') == True :
+            os.remove("./firmware/allbins" + '/ram.bin ')
+
+        if os.path.exists("./firmware/allbins" + '/zos.map ') == True :
+            os.remove("./firmware/allbins" + '/zos.map ')
+
+        if os.path.exists("./firmware/allbins" + '/zos.elf ') == True :
+            os.remove("./firmware/allbins" + '/zos.elf ')
+            
+        POST_ACTION += 'python QS100_mv.py\n'
+        
+    else :
+        POST_ACTION += 'mv *.bin *.map *.' + RESULT_SUFFIX + ' '+ "./firmware/allbins/ \n" 
+    POST_ACTION += 'python ./tools/m3ld.py ./firmware/allbins/\n'
+    POST_ACTION += 'python zos.py -m\n'

TEMPAT SAMPAH
requirements.txt


+ 192 - 0
zos.py

@@ -0,0 +1,192 @@
+#!/usr/bin/python3
+# -*- coding: UTF-8 -*-
+import os
+import sys
+import platform
+import multiprocessing
+import serial
+import time
+import traceback
+from tools.Download import build
+
+
+def usage():
+    print('''
+    ZeusOS版本SDK的编译命令如下:
+
+    python zos.py [action]
+
+    <-menu> 功能描述: 开启图形化代码裁剪功能
+
+    <-dl> 功能描述: 往UE下载程序 
+        参数: <PortNo.>:    串口号(例如com4)
+
+    <-s> 功能描述: 拆分文件
+
+    示例1, 开启图形化代码裁剪功能
+    python zos.py -menu
+
+    示例2, 下载固件到模组
+    python zos.py -dl com3
+
+    示例3, 拆分固件
+    python zos.py -s
+    
+    ''')
+
+def enter_download_mode(com):
+    print(com)
+    dev = serial.Serial(com, 9600,timeout=1, parity=serial.PARITY_NONE, stopbits=1)
+    if dev.isOpen():  # 判断串口是否打开
+        print("open success")
+    else :
+        dev.open()
+
+    dev.write('AT\r\n'.encode("utf8"))
+    data = dev.read(50)
+    time.sleep(1)
+    dev.write('AT\r\n'.encode("utf8"))
+    data = dev.read(50)
+    if ( "OK" in str(data)):
+        print("当前是AT固件\r\n")
+        dev.write('AT+NV=SET,STANDBY,0\r\n'.encode("utf8"))
+        time.sleep(2)
+        dev.write('AT+NV=SET,WDT,0\r\n'.encode("utf8"))
+        time.sleep(2)
+        dev.write('AT+FORCEDL\r\n'.encode("utf8"))
+        time.sleep(2)
+        data = dev.read(4)
+        print(data)
+    else    :
+        dev.baudrate = 115200
+        dev.write('AT\r\n'.encode("utf8"))
+        data = dev.read(50)
+        dev.write('enter_download_mode\r\n'.encode("utf8"))
+        data = dev.read(50)
+        if ( "OK" in str(data)):
+            print("当前已经进入二次开发模式,即将下载固件\r\n")
+        else :
+            print("设备连接失败\r\n")  
+    dev.close()
+    time.sleep(3)
+
+def run_menuconfig():
+    """运行菜单配置并捕获可能的异常"""
+    try:
+        menu_cmd = "python ./../../tools/config/menuconfig.py"
+        os_ver = platform.system()
+        
+        if os_ver == "Windows":
+            # Windows下直接运行,不使用start命令,以便捕获输出
+            result = os.system(menu_cmd)
+            if result != 0:
+                raise Exception(f"菜单配置命令返回非零状态: {result}")
+        else:
+            # Linux/Mac使用subprocess代替os.system以便获取输出
+            import subprocess
+            result = subprocess.run(menu_cmd, shell=True, capture_output=True, text=True)
+            if result.returncode != 0:
+                print("标准输出:", result.stdout)
+                print("错误输出:", result.stderr)
+                raise Exception(f"菜单配置命令失败,返回代码: {result.returncode}")
+    except Exception as e:
+        print(f"\n执行菜单配置时发生错误: {str(e)}")
+        traceback.print_exc()  # 打印完整的错误堆栈
+        input("\n按回车键退出...")  # 确保用户能看到错误信息
+
+def main():
+    argc = 1
+    test_list = ['-menu','-b','-c','-m','-mdl','-dl','-s','-h']
+    os_ver = platform.system()
+    
+    while len(sys.argv) > argc:
+        if sys.argv[argc] == "-menu":
+            print("Zeusos menuconfig 配置已开启")
+            if os_ver == "Windows":
+                print("如果在windows下看不到图形化配置界面,请使用调用以下命令安装python包:")
+                print("pip install windows-curses ")
+            
+            # 使用新的函数运行菜单配置并处理错误
+            run_menuconfig()
+            
+        elif sys.argv[argc] == '-m':
+            if len(sys.argv) > argc+1:
+                if sys.argv[argc+1] in test_list:
+                    passward = ''
+                else :
+                    passward = sys.argv[argc+1]
+                    argc +=1
+            else :
+                passward = ''
+            print(passward)
+            build.do_pack(passward)
+            print('\r\n固件合并完成,现在可以执行以下命令进行下载固件了.')
+            print('\r\n当前程序为AT固件或者shell命令可以正常运行,请使用 python zos.py -dl com3 进行下载')
+            print('\r\n如果程序处于死机状态请按住boot按键后再上电,然后使用 python zos.py -mdl com3 进行下载')
+
+        elif sys.argv[argc] == '-mdl':
+            cmd_list = []
+            if len(sys.argv) > argc+1:
+                if sys.argv[argc+1] in test_list:
+                    print("执行下载命令,需要输入串口信息。")
+                    print("例如:python zos.py -dl com3")
+                    return
+                else :
+                    cmd_list.append(sys.argv[argc+1])
+                    if len(sys.argv) > argc+2:
+                        if sys.argv[argc+2] not in test_list:
+                            cmd_list.append(sys.argv[argc+2])
+                    build.do_download(cmd_list)
+                    argc +=1
+            else :
+                print("执行下载命令,需要输入串口信息。")
+                print("例如:python zos.py -dl com3")
+                return
+
+        elif sys.argv[argc] == '-dl':
+            cmd_list = []
+            if len(sys.argv) > argc+1:
+                if sys.argv[argc+1] in test_list:
+                    print("执行下载命令,需要输入串口信息。")
+                    print("例如:python zos.py -dl com3")
+                    return
+                else :
+                    cmd_list.append(sys.argv[argc+1])
+                    if len(sys.argv) > argc+2:
+                        if sys.argv[argc+2] not in test_list:
+                            cmd_list.append(sys.argv[argc+2])
+                    enter_download_mode(cmd_list[0])
+                    build.do_download(cmd_list)
+                    argc +=1
+            else :
+                print("执行下载命令,需要输入串口信息。")
+                print("例如:python zos.py -dl com3")
+                return
+        elif sys.argv[argc] == '-s':
+            
+            if len(sys.argv) > argc+1:
+                if sys.argv[argc+1] in test_list:
+                    passward = ''
+                else :
+                    passward = sys.argv[argc+1]
+                    argc +=1
+            else :
+                passward = ''
+            print(passward)
+            build.do_unpack(passward)
+            print('\r\n固件拆分完成')
+        elif sys.argv[argc] == '-h':
+            usage()
+        else :
+            usage()
+        argc += 1
+        print("***********************************************************************")
+    
+    # 仅在非菜单命令下显示此消息
+    if "-menu" not in sys.argv:
+        print("操作已完成,再见")
+
+if len(sys.argv) == 1 :
+    usage()
+else :
+    main()