Просмотр исходного кода

Merge pull request #5 from EvalZero/master

更新NimBLE软件包
朱天龙 (Armink) 7 лет назад
Родитель
Сommit
fbccccdeeb

+ 0 - 158
Kconfig

@@ -1,158 +0,0 @@
-# Kconfig - Bluetooth configuration options
-#
-# Copyright (c) 2016 Intel Corporation
-#
-# SPDX-License-Identifier: Apache-2.0
-#
-
-menu "Nimble Bluetooth stack"
-
-config PKG_USING_NIMBLE
-    bool "Enable NimBLE Bluetooth stack"
-    help
-        This option enables NimBLE Bluetooth stack.
-
-    if PKG_USING_NIMBLE
-    
-        config NIMBT_ROLE_PERIPHERAL
-            bool "Peripheral Role support"
-            select NIMBT_ROLE_BROADCASTER
-            default n
-            help
-              Select this for NimBLE Peripheral role support.
-
-        config NIMBT_ROLE_CENTRAL
-            bool "Central Role support"
-            select NIMBLE_ROLE_OBSERVER
-            default n
-            help
-              Select this for NimBLE Central role support.
-
-        menu "Broadcaster"
-            visible if !NIMBT_ROLE_PERIPHERAL
-
-        config NIMBT_ROLE_BROADCASTER
-            bool "Broadcaster Role support"
-            default y if !NIMBLE_ROLE_OBSERVER
-            default n
-            help
-              Select this for NimBLE Broadcaster role support.
-
-        endmenu
-
-        menu "Observer"
-            visible if !NIMBT_ROLE_CENTRAL
-
-        config NIMBT_ROLE_OBSERVER
-            bool "Observer Role support"
-            default n
-            help
-              Select this for NimBLE Observer role support.
-
-        endmenu  
-        
-        
-        menu "Common configuration"
-            
-        endmenu 
-        
-        
-        menu "Host stack configuration"
-        
-            config NIMBLE_HOST
-                bool "Enable Host support"
-                default y
-                help
-                    Enable support for Host Stack.
-                
-        endmenu
-        
-        
-        menu "Controller configuretion"
-            
-            config NIMBLE_CTLR
-                bool "Enabel Controller support"
-                default n
-                help
-                  Enable support for native controller implementations.
-                
-                if NIMBLE_CTLR
-                
-                    choice
-                    
-                        prompt "BLE device support"
-                        default NIMBLE_BSP_NRF52
-                        help
-                            Select the device controller layer support.
-                    
-                        config NIMBLE_BSP_NRF52
-                            bool "NRF52xxx"
-                    
-                    endchoice
-                
-                endif 
-            
-        endmenu
-    
-    
-        choice
-            prompt "Log level"
-            default NIMBLE_DEBUG_LEVEL_I
-            help
-                select the NIMBLE log level
-            
-            config NIMBLE_DEBUG_LEVEL_O
-                bool "OFF"
-
-            config NIMBLE_DEBUG_LEVEL_E
-                bool "ERROR"
-            
-            config NIMBLE_DEBUG_LEVEL_W
-                bool "WARING"
-            
-            config NIMBLE_DEBUG_LEVEL_I
-                bool "INFO"
-                
-            config NIMBLE_DEBUG_LEVEL_D
-                bool "DEBUG"
-        
-        endchoice
-        
-        config NIMBLE_DEBUG_LEVEL
-            # Virtual/hidden option
-            int
-            default -1 if NIMBLE_DEBUG_LEVEL_O
-            default 0 if NIMBLE_DEBUG_LEVEL_E
-            default 1 if NIMBLE_DEBUG_LEVEL_W
-            default 2 if NIMBLE_DEBUG_LEVEL_I
-            default 3 if NIMBLE_DEBUG_LEVEL_D
-            default 2
-    
-        choice
-            prompt "Samples"
-            default NIMBLE_SAMPLE_DISABLE
-            help
-                select the NimBLE samples
-            
-            config NIMBLE_SAMPLE_DISABLE
-                bool "Not enable sample"
-            
-            config NIMBLE_SAMPLE_PER_HR
-                bool "peripheral heart-rate"
-                select NIMBT_ROLE_PERIPHERAL
-                select NIMBLE_CTLR
-            
-            config NIMBLE_SAMPLE_PER_LED
-                bool "peripheral led central"
-                select NIMBT_ROLE_PERIPHERAL
-                select NIMBLE_CTLR
-            
-            config NIMBLE_SAMPLE_BEACON
-                bool "beacon"
-                select NIMBT_ROLE_BROADCASTER
-                
-        endchoice
-    
-    endif
-
-endmenu

+ 124 - 43
README.md

@@ -4,39 +4,114 @@ NimBLE 软件包是 RT-Thread 基于 [Apache NimBLE](https://github.com/apache/m
 
 
 ## 1.1 主要特性
 ## 1.1 主要特性
 
 
-该协议栈的主要特性如下:
-
-- 符合 5.0 核心规范
-   - 1M, 2M 和 Coded PHY
-   - Advertising Extensions
-- 只支持低功耗蓝牙
-- 通用访问配置(GAP)
-   - central, peripheral, observer, broadcaster
-   - privacy
-   - multiple concurrent roles
-- 安全管理(SM)
-    - Legacy Pairing, Secure Connections
-- 通用属性协议(GATT)
-- L2CAP Connection Oriented Channels
-- Bluetooth Mesh
+- 扩展广播(LE Advertising Extensions)
+- 2Mbit/s比特率的物理层
+- 长距离编码(Coded PHY for LE Long Range)
+- 高速不可连接广播(High Duty Cycle Non-Connectable Advertising)
+- 新的跳频算法(Channel Selection Algorithm #2)
+- 隐私1.2(LE Privacy 1.2)
+- 安全管理(SM),支持传统配对(LE Legacy Pairing),安全连接(LE Secure Connections),特定秘钥分发(Transport Specific Key Distribution)
+- 链路层PDU数据长度扩展(LE Data Length Extension)
+- 多角色并发(主机(central)/从机(peripheral), server/client)
+- 同时广播和扫描
+- 低速定向广播(Low Duty Cycle Directed Advertising)
+- 连接参数请求(Connection parameters request procedure)
+- LE Ping
+- 完整的GATT客户端,服务端,以及子功能
+- 抽象HCI接口层
+
+## 1.2 Profile和Service支持
+
+- 警报通知服务(ANS)
+- 即时报警服务(IAS)
+- 链路丢失服务(LLS)
+- 电池服务(BAS)
+- 设备信息服务(DIS)
+- 心率服务(HRS)
+- 自行车速度及步调(CSC)
+- 射频功率(TPS)
+
+## 1.3 Mesh 特性
+
+- 广播和GATT承载(Advertising and GATT bearers)
+- PB-GATT 和 PB-ADV provisioning
+- 模型层(Foundation Models (server role))
+- 支持中继(Relay support)
+- 支持GATT代理(GATT Proxy)
 
 
 更多关于 NimBLE Stack 的介绍请参考 ``http://mynewt.apache.org/latest/network/docs/index.html``。
 更多关于 NimBLE Stack 的介绍请参考 ``http://mynewt.apache.org/latest/network/docs/index.html``。
 
 
-## 1.2 特点与优势
+## 1.4  目录结构
 
 
-同 nordic 系列常用的 SoftDevice 方案相比,NimBLE 有如下优势和特点:
-
-- SoftDevice 核心软件以二进制形式发布,限制了灵活性或定制可能,NimBLE 则不受此影响
-- 不依赖芯片和MCU架构
-- 代码方便调试,易于修复和增强功能
-- RAM 和 Flash 资源占用少
-- 配置灵活,实现更高的数据吞吐
+```
+NimBLE
+   ├───apps                   /* Bluetooth 示例应用程序 */
+   │   ├───blecent
+   │   ├───blecsc
+   │   ├───blehci
+   │   ├───blehr
+   │   ├───blemesh
+   │   ├───blemesh_light
+   │   ├───blemesh_shell
+   │   ├───bleprph
+   │   ├───bleuart
+   │   ├───btshell
+   │   ├───ext_advertiser
+   │   └───ibeacon
+   ├───docs                   /* 官方文档及 API 说明 */
+   ├───ext
+   │   └───tinycrypt          /* Tinycrypt 加密库 */
+   ├───nimble
+   │   ├───controller         /* Controller 实现 */
+   │   │   ├───include
+   │   │   └───src
+   │   ├───drivers            /* Nordic 系列 Phy 驱动 */
+   │   │   ├───nrf51
+   │   │   └───nrf52
+   │   ├───host               /* Host Stack(主机控制器)实现 */
+   │   │   ├───include
+   │   │   ├───mesh           /* Mesh 组网功能 */
+   │   │   ├───pts            /* PTS 测试相关 */
+   │   │   ├───services       /* 通用的 Profile */
+   │   │   │   ├───ans
+   │   │   │   ├───bas
+   │   │   │   ├───bleuart
+   │   │   │   ├───dis
+   │   │   │   ├───gap
+   │   │   │   ├───gatt
+   │   │   │   ├───ias
+   │   │   │   ├───lls
+   │   │   │   └───tps
+   │   │   ├───src
+   │   │   ├───store
+   │   │   ├───tools
+   │   │   └───util
+   │   ├───include
+   │   │   └───nimble
+   │   ├───src
+   │   └───transport          /* HCI 传输抽象层 */
+   │       ├───emspi
+   │       ├───ram
+   │       ├───socket
+   │       └───uart
+   └───porting                /* OS 抽象层及系统配置 */
+       ├───nimble
+       │   ├───include
+       │   └───src
+       └───npl
+           └───rtthread       /* RT-Thread OS 接口实现 */
+               ├───include
+               │   ├───config /* NimBLE 协议栈配置选项 */
+               │   ├───console
+               │   └───nimble
+               └───src
+```
 
 
-### 1.3 许可证
+## 1.5 许可证
 
 
 NimBLE 软件包遵循 Apache-2.0 许可,详见 LICENSE 文件。
 NimBLE 软件包遵循 Apache-2.0 许可,详见 LICENSE 文件。
 
 
-### 1.4 依赖
+## 1.6 依赖
 
 
 - RT_Thread 3.0+
 - RT_Thread 3.0+
 
 
@@ -47,26 +122,32 @@ NimBLE 软件包遵循 Apache-2.0 许可,详见 LICENSE 文件。
 ```
 ```
 RT-Thread online packages
 RT-Thread online packages
     IoT - internet of things  --->
     IoT - internet of things  --->
-         NimBLE:An open-source Bluetooth 5.0 stack porting on RT-Thread  --->
-          [*]   Peripheral Role support                                   
-          [ ]   Central Role support                                     
-                Observer  --->                                           
-                Common configuration  ----                               
-                Host stack configuration  --->                           
-                Controller configuretion  --->                           
-                Log level (INFO)  --->                                   
-                Samples (peripheral heart-rate)  --->         
-                Version (latest)  --->
+--- NimBLE:An open-source Bluetooth 5.0 stack porting on RT-Thread
+      Bluetooth Role support  --->      
+      Host Stack Configuration  --->
+      Controller Configuration  --->
+      Bluetooth Mesh support  --->
+      HCI Transport support  ----
+      Device Driver support  ----
+      Log level (INFO)  --->
+      Bluetooth Samples (Not enable sample)  --->
+(1)   Maximum number of concurrent connections
+[*]   Device Whitelist Support
+(0)   The number of multi-advertising instances
+[ ]   Extended Advertising Feature Support
+      Version (latest)  --->
+
 ```
 ```
 
 
-**Peripheral Role support**  :  配置作为 Peripheral 设备;  
-**Central Role support  **  :  配置作为 Central 设备;  
-**Observer**  :  配置作为 Observer 设备;  
-**Host stack configuration**  :  配置 Host Stack;  
-**Controller configuretion**  :  配置 Controller;  
-**Log level (INFO)**  :  配置协议栈日志等级;  
-**Samples**  :  配置示例应用;  
-**Version**  :  配置作为 Peripheral 设备;  
+**Bluetooth Role support**  :  配置 BLE角色支持(Central/Peripheral/Broadcaster/Observer) ;   
+**Host Stack Configuration**  :  配置 Host 相关功能;   
+**Controller Configuration**  :  配置 Controller 相关功能;   
+**Bluetooth Mesh support**  :  Mesh 特性支持及配置;   
+**HCI Transport support** : 配置HCI层传输方式   
+**Device Driver support ** : 底层 SOC Phy 支持   
+**Log level (INFO)**  :  配置协议栈日志等级;   
+**Bluetooth Samples**  :  配置示例应用;   
+**Version**  :  软件包版本选择;   
 
 
 配置完成后让 RT-Thread 的包管理器自动更新,或者使用 pkgs --update 命令更新包到 BSP 中。
 配置完成后让 RT-Thread 的包管理器自动更新,或者使用 pkgs --update 命令更新包到 BSP 中。
 
 

+ 13 - 14
SConscript

@@ -22,6 +22,7 @@ path += [
     cwd + '/porting/nimble/include',
     cwd + '/porting/nimble/include',
     cwd + '/porting/npl/rtthread/include']
     cwd + '/porting/npl/rtthread/include']
 
 
+# Host stack
 src += Split('''
 src += Split('''
     nimble/host/src/ble_att.c
     nimble/host/src/ble_att.c
     nimble/host/src/ble_att_clt.c
     nimble/host/src/ble_att_clt.c
@@ -95,9 +96,6 @@ src += Split('''
     porting/npl/rtthread/src/npl_shell.c
     porting/npl/rtthread/src/npl_shell.c
     ''')
     ''')
 
 
-if GetDepend(['NIMBLE_BSP_NRF52']):
-    src += Glob('porting/npl/rtthread/src/nrf5x_isr.c')
-
 # tinycrypt
 # tinycrypt
 path += [cwd + '/ext/tinycrypt/include']
 path += [cwd + '/ext/tinycrypt/include']
 
 
@@ -111,12 +109,12 @@ src += Split('''
     ''')
     ''')
 
 
 # controller
 # controller
-if GetDepend(['NIMBLE_CTLR']):
+if GetDepend(['PKG_NIMBLE_CTLR']):
     CPPDEFINES = ['NIMBLE_CFG_CONTROLLER=1']
     CPPDEFINES = ['NIMBLE_CFG_CONTROLLER=1']
 else:
 else:
     CPPDEFINES = ['']
     CPPDEFINES = ['']
 
 
-if GetDepend(['NIMBLE_CTLR']):
+if GetDepend(['PKG_NIMBLE_CTLR']):
     path += [
     path += [
         cwd + '/nimble/transport/ram/include',
         cwd + '/nimble/transport/ram/include',
         cwd + '/nimble/controller/include',
         cwd + '/nimble/controller/include',
@@ -144,10 +142,11 @@ if GetDepend(['NIMBLE_CTLR']):
         porting/nimble/src/os_cputime.c
         porting/nimble/src/os_cputime.c
         porting/nimble/src/os_cputime_pwr2.c
         porting/nimble/src/os_cputime_pwr2.c
         porting/nimble/src/hal_timer.c
         porting/nimble/src/hal_timer.c
+        porting/npl/rtthread/src/nrf5x_isr.c
         """)
         """)
 
 
 # central sample
 # central sample
-if GetDepend(['NIMBLE_SAMPLE_CENTRAL']):
+if GetDepend(['PKG_NIMBLE_SAMPLE_CENTRAL']):
     path += [cwd + '/apps/blecent/src']
     path += [cwd + '/apps/blecent/src']
     
     
     src += Split("""
     src += Split("""
@@ -157,7 +156,7 @@ if GetDepend(['NIMBLE_SAMPLE_CENTRAL']):
         """)
         """)
 
 
 # blecsc sensor
 # blecsc sensor
-if GetDepend(['NIMBLE_SAMPLE_BLECSC']):
+if GetDepend(['PKG_NIMBLE_SAMPLE_BLECSC']):
     path += [cwd + '/apps/blecsc/src']
     path += [cwd + '/apps/blecsc/src']
 
 
     src += Split("""
     src += Split("""
@@ -167,7 +166,7 @@ if GetDepend(['NIMBLE_SAMPLE_BLECSC']):
 
 
 
 
 # peripheral heart-rate sample
 # peripheral heart-rate sample
-if GetDepend(['NIMBLE_SAMPLE_PER_HR']):
+if GetDepend(['PKG_NIMBLE_SAMPLE_PER_HR']):
     path += [cwd + '/apps/blehr/src']
     path += [cwd + '/apps/blehr/src']
     
     
     src += Split("""
     src += Split("""
@@ -176,7 +175,7 @@ if GetDepend(['NIMBLE_SAMPLE_PER_HR']):
         """)
         """)
 
 
 # bleprph sample
 # bleprph sample
-if GetDepend(['NIMBLE_SAMPLE_PERIPHERAL']):
+if GetDepend(['PKG_NIMBLE_SAMPLE_PERIPHERAL']):
     path += [cwd + '/apps/bleprph/src']
     path += [cwd + '/apps/bleprph/src']
     
     
     src += Split("""
     src += Split("""
@@ -186,7 +185,7 @@ if GetDepend(['NIMBLE_SAMPLE_PERIPHERAL']):
         """)
         """)
 
 
 # bletest
 # bletest
-if GetDepend(['NIMBLE_SAMPLE_BLETEST']):
+if GetDepend(['PKG_NIMBLE_SAMPLE_BLETEST']):
     path += [cwd + '/apps/bletest/src']
     path += [cwd + '/apps/bletest/src']
 
 
     src += Split("""
     src += Split("""
@@ -195,7 +194,7 @@ if GetDepend(['NIMBLE_SAMPLE_BLETEST']):
         """)
         """)
 
 
 # bleuart
 # bleuart
-if GetDepend(['NIMBLE_SAMPLE_BLEUART']):
+if GetDepend(['PKG_NIMBLE_SAMPLE_BLEUART']):
     path += [cwd + '/apps/bleuart/src']
     path += [cwd + '/apps/bleuart/src']
 
 
     src += Split("""
     src += Split("""
@@ -203,7 +202,7 @@ if GetDepend(['NIMBLE_SAMPLE_BLEUART']):
         """)
         """)
 
 
 # btshell
 # btshell
-if GetDepend(['NIMBLE_SAMPLE_BTSHELL']):
+if GetDepend(['PKG_NIMBLE_SAMPLE_BTSHELL']):
     path += [cwd + '/apps/btshell/src']
     path += [cwd + '/apps/btshell/src']
 
 
     src += Split("""
     src += Split("""
@@ -217,7 +216,7 @@ if GetDepend(['NIMBLE_SAMPLE_BTSHELL']):
         """)
         """)
 
 
 # ble external advertiser sample
 # ble external advertiser sample
-if GetDepend(['NIMBLE_SAMPLE_EXT_ADVERTISER']):
+if GetDepend(['PKG_NIMBLE_SAMPLE_EXT_ADVERTISER']):
     path += [cwd + '/apps/ext_advertiser/src']
     path += [cwd + '/apps/ext_advertiser/src']
 
 
     src += Split("""
     src += Split("""
@@ -225,7 +224,7 @@ if GetDepend(['NIMBLE_SAMPLE_EXT_ADVERTISER']):
         """)
         """)
 
 
 # beacon sample
 # beacon sample
-if GetDepend(['NIMBLE_SAMPLE_BEACON']):
+if GetDepend(['PKG_NIMBLE_SAMPLE_BEACON']):
     src += Glob('apps/ibeacon/src/ibeacon.c')
     src += Glob('apps/ibeacon/src/ibeacon.c')
 
 
 LOCAL_CCFLAGS = ''
 LOCAL_CCFLAGS = ''

+ 1 - 0
nimble/include/nimble/nimble_npl.h

@@ -30,6 +30,7 @@ extern "C" {
 
 
 struct ble_npl_event;
 struct ble_npl_event;
 typedef void ble_npl_event_fn(struct ble_npl_event *ev);
 typedef void ble_npl_event_fn(struct ble_npl_event *ev);
+typedef void ble_npl_task_fn(void *parameter);
 
 
 enum ble_npl_error {
 enum ble_npl_error {
     BLE_NPL_OK = 0,
     BLE_NPL_OK = 0,

+ 325 - 12
porting/nimble/include/syscfg/syscfg.h

@@ -87,7 +87,14 @@
 #define MYNEWT_VAL_MSYS_2_BLOCK_SIZE (0)
 #define MYNEWT_VAL_MSYS_2_BLOCK_SIZE (0)
 #endif
 #endif
 
 
-/* Overridden by hw/bsp/nrf52840pdk (defined by kernel/os) */
+#ifndef MYNEWT_VAL_OS_CLI
+#define MYNEWT_VAL_OS_CLI (0)
+#endif
+
+#ifndef MYNEWT_VAL_OS_COREDUMP
+#define MYNEWT_VAL_OS_COREDUMP (0)
+#endif
+
 #ifndef MYNEWT_VAL_OS_CPUTIME_FREQ
 #ifndef MYNEWT_VAL_OS_CPUTIME_FREQ
 #define MYNEWT_VAL_OS_CPUTIME_FREQ (32768)
 #define MYNEWT_VAL_OS_CPUTIME_FREQ (32768)
 #endif
 #endif
@@ -133,14 +140,13 @@
 #define MYNEWT_VAL_BLE_WHITELIST (1)
 #define MYNEWT_VAL_BLE_WHITELIST (1)
 #endif
 #endif
 
 
-#ifdef MYNEWT_VAL_BLE_CTLR
+#ifdef PKG_NIMBLE_CTLR
 
 
 /*** nimble/controller */
 /*** nimble/controller */
 #ifndef MYNEWT_VAL_BLE_DEVICE
 #ifndef MYNEWT_VAL_BLE_DEVICE
 #define MYNEWT_VAL_BLE_DEVICE (1)
 #define MYNEWT_VAL_BLE_DEVICE (1)
 #endif
 #endif
 
 
-/* Overridden by nimble/controller (defined by nimble/controller) */
 #ifndef MYNEWT_VAL_BLE_HW_WHITELIST_ENABLE
 #ifndef MYNEWT_VAL_BLE_HW_WHITELIST_ENABLE
 #define MYNEWT_VAL_BLE_HW_WHITELIST_ENABLE (0)
 #define MYNEWT_VAL_BLE_HW_WHITELIST_ENABLE (0)
 #endif
 #endif
@@ -169,7 +175,6 @@
 #define MYNEWT_VAL_BLE_LL_CFG_FEAT_LE_CODED_PHY (0)
 #define MYNEWT_VAL_BLE_LL_CFG_FEAT_LE_CODED_PHY (0)
 #endif
 #endif
 
 
-/* Overridden by nimble/controller (defined by nimble/controller) */
 #ifndef MYNEWT_VAL_BLE_LL_CFG_FEAT_LE_CSA2
 #ifndef MYNEWT_VAL_BLE_LL_CFG_FEAT_LE_CSA2
 #define MYNEWT_VAL_BLE_LL_CFG_FEAT_LE_CSA2 (1)
 #define MYNEWT_VAL_BLE_LL_CFG_FEAT_LE_CSA2 (1)
 #endif
 #endif
@@ -210,7 +215,6 @@
 #define MYNEWT_VAL_BLE_LL_DIRECT_TEST_MODE (0)
 #define MYNEWT_VAL_BLE_LL_DIRECT_TEST_MODE (0)
 #endif
 #endif
 
 
-/* Overridden by nimble/controller (defined by nimble/controller) */
 #ifndef MYNEWT_VAL_BLE_LL_EXT_ADV_AUX_PTR_CNT
 #ifndef MYNEWT_VAL_BLE_LL_EXT_ADV_AUX_PTR_CNT
 #define MYNEWT_VAL_BLE_LL_EXT_ADV_AUX_PTR_CNT (5)
 #define MYNEWT_VAL_BLE_LL_EXT_ADV_AUX_PTR_CNT (5)
 #endif
 #endif
@@ -275,6 +279,10 @@
 #define MYNEWT_VAL_BLE_LL_USECS_PER_PERIOD (3250)
 #define MYNEWT_VAL_BLE_LL_USECS_PER_PERIOD (3250)
 #endif
 #endif
 
 
+#ifndef MYNEWT_VAL_BLE_LL_VND_EVENT_ON_ASSERT
+#define MYNEWT_VAL_BLE_LL_VND_EVENT_ON_ASSERT (0)
+#endif
+
 #ifndef MYNEWT_VAL_BLE_LL_WHITELIST_SIZE
 #ifndef MYNEWT_VAL_BLE_LL_WHITELIST_SIZE
 #define MYNEWT_VAL_BLE_LL_WHITELIST_SIZE (8)
 #define MYNEWT_VAL_BLE_LL_WHITELIST_SIZE (8)
 #endif
 #endif
@@ -291,7 +299,6 @@
 #define MYNEWT_VAL_BLE_PUBLIC_DEV_ADDR (((uint8_t[6]){0xcc, 0xbb, 0xaa, 0x33, 0x22, 0x11}))
 #define MYNEWT_VAL_BLE_PUBLIC_DEV_ADDR (((uint8_t[6]){0xcc, 0xbb, 0xaa, 0x33, 0x22, 0x11}))
 #endif
 #endif
 
 
-/* Overridden by hw/bsp/nrf52840pdk (defined by nimble/controller) */
 #ifndef MYNEWT_VAL_BLE_XTAL_SETTLE_TIME
 #ifndef MYNEWT_VAL_BLE_XTAL_SETTLE_TIME
 #define MYNEWT_VAL_BLE_XTAL_SETTLE_TIME (1500)
 #define MYNEWT_VAL_BLE_XTAL_SETTLE_TIME (1500)
 #endif
 #endif
@@ -484,14 +491,14 @@
 #define MYNEWT_VAL_BLE_HOST (1)
 #define MYNEWT_VAL_BLE_HOST (1)
 #endif
 #endif
 
 
-#ifndef MYNEWT_VAL_BLE_HS_DEBUG
-#define MYNEWT_VAL_BLE_HS_DEBUG (0)
-#endif
-
 #ifndef MYNEWT_VAL_BLE_HS_AUTO_START
 #ifndef MYNEWT_VAL_BLE_HS_AUTO_START
 #define MYNEWT_VAL_BLE_HS_AUTO_START (1)
 #define MYNEWT_VAL_BLE_HS_AUTO_START (1)
 #endif
 #endif
 
 
+#ifndef MYNEWT_VAL_BLE_HS_DEBUG
+#define MYNEWT_VAL_BLE_HS_DEBUG (0)
+#endif
+
 #ifndef MYNEWT_VAL_BLE_HS_FLOW_CTRL
 #ifndef MYNEWT_VAL_BLE_HS_FLOW_CTRL
 #define MYNEWT_VAL_BLE_HS_FLOW_CTRL (0)
 #define MYNEWT_VAL_BLE_HS_FLOW_CTRL (0)
 #endif
 #endif
@@ -516,10 +523,22 @@
 #define MYNEWT_VAL_BLE_HS_REQUIRE_OS (1)
 #define MYNEWT_VAL_BLE_HS_REQUIRE_OS (1)
 #endif
 #endif
 
 
+#ifndef MYNEWT_VAL_BLE_HS_STOP_ON_SHUTDOWN
+#define MYNEWT_VAL_BLE_HS_STOP_ON_SHUTDOWN (1)
+#endif
+
+#ifndef MYNEWT_VAL_BLE_HS_SYSINIT_STAGE
+#define MYNEWT_VAL_BLE_HS_SYSINIT_STAGE (200)
+#endif
+
 #ifndef MYNEWT_VAL_BLE_L2CAP_COC_MAX_NUM
 #ifndef MYNEWT_VAL_BLE_L2CAP_COC_MAX_NUM
 #define MYNEWT_VAL_BLE_L2CAP_COC_MAX_NUM (0)
 #define MYNEWT_VAL_BLE_L2CAP_COC_MAX_NUM (0)
 #endif
 #endif
 
 
+#ifndef MYNEWT_VAL_BLE_L2CAP_COC_MTU
+#define MYNEWT_VAL_BLE_L2CAP_COC_MTU (MYNEWT_VAL_MSYS_1_BLOCK_SIZE-8)
+#endif
+
 #ifndef MYNEWT_VAL_BLE_L2CAP_JOIN_RX_FRAGS
 #ifndef MYNEWT_VAL_BLE_L2CAP_JOIN_RX_FRAGS
 #define MYNEWT_VAL_BLE_L2CAP_JOIN_RX_FRAGS (1)
 #define MYNEWT_VAL_BLE_L2CAP_JOIN_RX_FRAGS (1)
 #endif
 #endif
@@ -536,8 +555,9 @@
 #define MYNEWT_VAL_BLE_L2CAP_SIG_MAX_PROCS (1)
 #define MYNEWT_VAL_BLE_L2CAP_SIG_MAX_PROCS (1)
 #endif
 #endif
 
 
+/* nimble-mesh */
 #ifndef MYNEWT_VAL_BLE_MESH
 #ifndef MYNEWT_VAL_BLE_MESH
-#define MYNEWT_VAL_BLE_MESH (0)
+#define MYNEWT_VAL_BLE_MESH (1)
 #endif
 #endif
 
 
 #ifndef MYNEWT_VAL_BLE_MONITOR_CONSOLE_BUFFER_SIZE
 #ifndef MYNEWT_VAL_BLE_MONITOR_CONSOLE_BUFFER_SIZE
@@ -612,8 +632,13 @@
 #define MYNEWT_VAL_BLE_SM_OUR_KEY_DIST (0)
 #define MYNEWT_VAL_BLE_SM_OUR_KEY_DIST (0)
 #endif
 #endif
 
 
+/* nimble-host */
 #ifndef MYNEWT_VAL_BLE_SM_SC
 #ifndef MYNEWT_VAL_BLE_SM_SC
-#define MYNEWT_VAL_BLE_SM_SC (0)
+#define MYNEWT_VAL_BLE_SM_SC (1)
+#endif
+
+#ifndef MYNEWT_VAL_BLE_SM_SC_DEBUG_KEYS
+#define MYNEWT_VAL_BLE_SM_SC_DEBUG_KEYS (0)
 #endif
 #endif
 
 
 #ifndef MYNEWT_VAL_BLE_SM_THEIR_KEY_DIST
 #ifndef MYNEWT_VAL_BLE_SM_THEIR_KEY_DIST
@@ -628,6 +653,294 @@
 #define MYNEWT_VAL_BLE_STORE_MAX_CCCDS (8)
 #define MYNEWT_VAL_BLE_STORE_MAX_CCCDS (8)
 #endif
 #endif
 
 
+#ifndef MYNEWT_VAL_BLE_MESH_ADV_BUF_COUNT
+#define MYNEWT_VAL_BLE_MESH_ADV_BUF_COUNT (20)
+#endif
+
+#ifndef MYNEWT_VAL_BLE_MESH_ADV_TASK_PRIO
+#define MYNEWT_VAL_BLE_MESH_ADV_TASK_PRIO (9)
+#endif
+
+#ifndef MYNEWT_VAL_BLE_MESH_APP_KEY_COUNT
+#define MYNEWT_VAL_BLE_MESH_APP_KEY_COUNT (1)
+#endif
+
+#ifndef MYNEWT_VAL_BLE_MESH_CFG_CLI
+#define MYNEWT_VAL_BLE_MESH_CFG_CLI (1)
+#endif
+
+#ifndef MYNEWT_VAL_BLE_MESH_CRPL
+#define MYNEWT_VAL_BLE_MESH_CRPL (10)
+#endif
+
+#ifndef MYNEWT_VAL_BLE_MESH_DEBUG
+#define MYNEWT_VAL_BLE_MESH_DEBUG (1)
+#endif
+
+#ifndef MYNEWT_VAL_BLE_MESH_DEBUG_ACCESS
+#define MYNEWT_VAL_BLE_MESH_DEBUG_ACCESS (1)
+#endif
+
+#ifndef MYNEWT_VAL_BLE_MESH_DEBUG_ADV
+#define MYNEWT_VAL_BLE_MESH_DEBUG_ADV (1)
+#endif
+
+#ifndef MYNEWT_VAL_BLE_MESH_DEBUG_BEACON
+#define MYNEWT_VAL_BLE_MESH_DEBUG_BEACON (1)
+#endif
+
+#ifndef MYNEWT_VAL_BLE_MESH_DEBUG_CRYPTO
+#define MYNEWT_VAL_BLE_MESH_DEBUG_CRYPTO (1)
+#endif
+
+#ifndef MYNEWT_VAL_BLE_MESH_DEBUG_FRIEND
+#define MYNEWT_VAL_BLE_MESH_DEBUG_FRIEND (1)
+#endif
+
+#ifndef MYNEWT_VAL_BLE_MESH_DEBUG_LOW_POWER
+#define MYNEWT_VAL_BLE_MESH_DEBUG_LOW_POWER (1)
+#endif
+
+#ifndef MYNEWT_VAL_BLE_MESH_DEBUG_MODEL
+#define MYNEWT_VAL_BLE_MESH_DEBUG_MODEL (1)
+#endif
+
+#ifndef MYNEWT_VAL_BLE_MESH_DEBUG_NET
+#define MYNEWT_VAL_BLE_MESH_DEBUG_NET (1)
+#endif
+
+#ifndef MYNEWT_VAL_BLE_MESH_DEBUG_PROV
+#define MYNEWT_VAL_BLE_MESH_DEBUG_PROV (1)
+#endif
+
+#ifndef MYNEWT_VAL_BLE_MESH_DEBUG_PROXY
+#define MYNEWT_VAL_BLE_MESH_DEBUG_PROXY (1)
+#endif
+
+#ifndef MYNEWT_VAL_BLE_MESH_DEBUG_SETTINGS
+#define MYNEWT_VAL_BLE_MESH_DEBUG_SETTINGS (1)
+#endif
+
+#ifndef MYNEWT_VAL_BLE_MESH_DEBUG_TRANS
+#define MYNEWT_VAL_BLE_MESH_DEBUG_TRANS (1)
+#endif
+
+#ifndef MYNEWT_VAL_BLE_MESH_DEVICE_NAME
+#define MYNEWT_VAL_BLE_MESH_DEVICE_NAME ("nimble-mesh-node")
+#endif
+
+#ifndef MYNEWT_VAL_BLE_MESH_DEV_UUID
+#define MYNEWT_VAL_BLE_MESH_DEV_UUID (((uint8_t[16]){0xdd, 0xdd, 0}))
+#endif
+
+#ifndef MYNEWT_VAL_BLE_MESH_FRIEND
+#define MYNEWT_VAL_BLE_MESH_FRIEND (0)
+#endif
+
+#ifndef MYNEWT_VAL_BLE_MESH_FRIEND_LPN_COUNT
+#define MYNEWT_VAL_BLE_MESH_FRIEND_LPN_COUNT (2)
+#endif
+
+#ifndef MYNEWT_VAL_BLE_MESH_FRIEND_QUEUE_SIZE
+#define MYNEWT_VAL_BLE_MESH_FRIEND_QUEUE_SIZE (16)
+#endif
+
+#ifndef MYNEWT_VAL_BLE_MESH_FRIEND_RECV_WIN
+#define MYNEWT_VAL_BLE_MESH_FRIEND_RECV_WIN (255)
+#endif
+
+#ifndef MYNEWT_VAL_BLE_MESH_FRIEND_SEG_RX
+#define MYNEWT_VAL_BLE_MESH_FRIEND_SEG_RX (1)
+#endif
+
+#ifndef MYNEWT_VAL_BLE_MESH_FRIEND_SUB_LIST_SIZE
+#define MYNEWT_VAL_BLE_MESH_FRIEND_SUB_LIST_SIZE (3)
+#endif
+
+#ifndef MYNEWT_VAL_BLE_MESH_GATT_PROXY
+#define MYNEWT_VAL_BLE_MESH_GATT_PROXY (1)
+#endif
+
+#ifndef MYNEWT_VAL_BLE_MESH_HEALTH_CLI
+#define MYNEWT_VAL_BLE_MESH_HEALTH_CLI (0)
+#endif
+
+#ifndef MYNEWT_VAL_BLE_MESH_IVU_DIVIDER
+#define MYNEWT_VAL_BLE_MESH_IVU_DIVIDER (4)
+#endif
+
+#ifndef MYNEWT_VAL_BLE_MESH_IV_UPDATE_TEST
+#define MYNEWT_VAL_BLE_MESH_IV_UPDATE_TEST (0)
+#endif
+
+#ifndef MYNEWT_VAL_BLE_MESH_LABEL_COUNT
+#define MYNEWT_VAL_BLE_MESH_LABEL_COUNT (1)
+#endif
+
+#ifndef MYNEWT_VAL_BLE_MESH_LOW_POWER
+#define MYNEWT_VAL_BLE_MESH_LOW_POWER (0)
+#endif
+
+#ifndef MYNEWT_VAL_BLE_MESH_LPN_AUTO
+#define MYNEWT_VAL_BLE_MESH_LPN_AUTO (1)
+#endif
+
+#ifndef MYNEWT_VAL_BLE_MESH_LPN_AUTO_TIMEOUT
+#define MYNEWT_VAL_BLE_MESH_LPN_AUTO_TIMEOUT (15)
+#endif
+
+#ifndef MYNEWT_VAL_BLE_MESH_LPN_ESTABLISHMENT
+#define MYNEWT_VAL_BLE_MESH_LPN_ESTABLISHMENT (1)
+#endif
+
+#ifndef MYNEWT_VAL_BLE_MESH_LPN_GROUPS
+#define MYNEWT_VAL_BLE_MESH_LPN_GROUPS (10)
+#endif
+
+#ifndef MYNEWT_VAL_BLE_MESH_LPN_INIT_POLL_TIMEOUT
+#define MYNEWT_VAL_BLE_MESH_LPN_INIT_POLL_TIMEOUT (MYNEWT_VAL_BLE_MESH_LPN_POLL_TIMEOUT)
+#endif
+
+#ifndef MYNEWT_VAL_BLE_MESH_LPN_MIN_QUEUE_SIZE
+#define MYNEWT_VAL_BLE_MESH_LPN_MIN_QUEUE_SIZE (1)
+#endif
+
+#ifndef MYNEWT_VAL_BLE_MESH_LPN_POLL_TIMEOUT
+#define MYNEWT_VAL_BLE_MESH_LPN_POLL_TIMEOUT (300)
+#endif
+
+#ifndef MYNEWT_VAL_BLE_MESH_LPN_RECV_DELAY
+#define MYNEWT_VAL_BLE_MESH_LPN_RECV_DELAY (100)
+#endif
+
+#ifndef MYNEWT_VAL_BLE_MESH_LPN_RECV_WIN_FACTOR
+#define MYNEWT_VAL_BLE_MESH_LPN_RECV_WIN_FACTOR (0)
+#endif
+
+#ifndef MYNEWT_VAL_BLE_MESH_LPN_RETRY_TIMEOUT
+#define MYNEWT_VAL_BLE_MESH_LPN_RETRY_TIMEOUT (8)
+#endif
+
+#ifndef MYNEWT_VAL_BLE_MESH_LPN_RSSI_FACTOR
+#define MYNEWT_VAL_BLE_MESH_LPN_RSSI_FACTOR (0)
+#endif
+
+#ifndef MYNEWT_VAL_BLE_MESH_LPN_SCAN_LATENCY
+#define MYNEWT_VAL_BLE_MESH_LPN_SCAN_LATENCY (10)
+#endif
+
+#ifndef MYNEWT_VAL_BLE_MESH_MODEL_GROUP_COUNT
+#define MYNEWT_VAL_BLE_MESH_MODEL_GROUP_COUNT (1)
+#endif
+
+#ifndef MYNEWT_VAL_BLE_MESH_MODEL_KEY_COUNT
+#define MYNEWT_VAL_BLE_MESH_MODEL_KEY_COUNT (1)
+#endif
+
+#ifndef MYNEWT_VAL_BLE_MESH_MSG_CACHE_SIZE
+#define MYNEWT_VAL_BLE_MESH_MSG_CACHE_SIZE (10)
+#endif
+
+#ifndef MYNEWT_VAL_BLE_MESH_NODE_ID_TIMEOUT
+#define MYNEWT_VAL_BLE_MESH_NODE_ID_TIMEOUT (60)
+#endif
+
+#ifndef MYNEWT_VAL_BLE_MESH_OOB_INPUT_ACTIONS
+#define MYNEWT_VAL_BLE_MESH_OOB_INPUT_ACTIONS (((BT_MESH_NO_INPUT)))
+#endif
+
+#ifndef MYNEWT_VAL_BLE_MESH_OOB_INPUT_SIZE
+#define MYNEWT_VAL_BLE_MESH_OOB_INPUT_SIZE (4)
+#endif
+
+#ifndef MYNEWT_VAL_BLE_MESH_OOB_OUTPUT_ACTIONS
+#define MYNEWT_VAL_BLE_MESH_OOB_OUTPUT_ACTIONS (((BT_MESH_DISPLAY_NUMBER)))
+#endif
+
+#ifndef MYNEWT_VAL_BLE_MESH_OOB_OUTPUT_SIZE
+#define MYNEWT_VAL_BLE_MESH_OOB_OUTPUT_SIZE (4)
+#endif
+
+#ifndef MYNEWT_VAL_BLE_MESH_PB_ADV
+#define MYNEWT_VAL_BLE_MESH_PB_ADV (1)
+#endif
+
+#ifndef MYNEWT_VAL_BLE_MESH_PB_GATT
+#define MYNEWT_VAL_BLE_MESH_PB_GATT (1)
+#endif
+
+#ifndef MYNEWT_VAL_BLE_MESH_PROV
+#define MYNEWT_VAL_BLE_MESH_PROV (1)
+#endif
+
+#ifndef MYNEWT_VAL_BLE_MESH_PROXY
+#define MYNEWT_VAL_BLE_MESH_PROXY (1)
+#endif
+
+#ifndef MYNEWT_VAL_BLE_MESH_PROXY_FILTER_SIZE
+#define MYNEWT_VAL_BLE_MESH_PROXY_FILTER_SIZE (1)
+#endif
+
+#ifndef MYNEWT_VAL_BLE_MESH_RELAY
+#define MYNEWT_VAL_BLE_MESH_RELAY (0)
+#endif
+
+#ifndef MYNEWT_VAL_BLE_MESH_RPL_STORE_TIMEOUT
+#define MYNEWT_VAL_BLE_MESH_RPL_STORE_TIMEOUT (5)
+#endif
+
+#ifndef MYNEWT_VAL_BLE_MESH_RX_SDU_MAX
+#define MYNEWT_VAL_BLE_MESH_RX_SDU_MAX (72)
+#endif
+
+#ifndef MYNEWT_VAL_BLE_MESH_RX_SEG_MSG_COUNT
+#define MYNEWT_VAL_BLE_MESH_RX_SEG_MSG_COUNT (2)
+#endif
+
+#ifndef MYNEWT_VAL_BLE_MESH_SEQ_STORE_RATE
+#define MYNEWT_VAL_BLE_MESH_SEQ_STORE_RATE (128)
+#endif
+
+#ifndef MYNEWT_VAL_BLE_MESH_SETTINGS
+#define MYNEWT_VAL_BLE_MESH_SETTINGS (0)
+#endif
+
+#ifndef MYNEWT_VAL_BLE_MESH_SHELL
+#define MYNEWT_VAL_BLE_MESH_SHELL (0)
+#endif
+
+#ifndef MYNEWT_VAL_BLE_MESH_SHELL_MODELS
+#define MYNEWT_VAL_BLE_MESH_SHELL_MODELS (0)
+#endif
+
+#ifndef MYNEWT_VAL_BLE_MESH_STORE_TIMEOUT
+#define MYNEWT_VAL_BLE_MESH_STORE_TIMEOUT (2)
+#endif
+
+#ifndef MYNEWT_VAL_BLE_MESH_SUBNET_COUNT
+#define MYNEWT_VAL_BLE_MESH_SUBNET_COUNT (1)
+#endif
+
+#ifndef MYNEWT_VAL_BLE_MESH_SYSINIT_STAGE
+#define MYNEWT_VAL_BLE_MESH_SYSINIT_STAGE (500)
+#endif
+
+#ifndef MYNEWT_VAL_BLE_MESH_SYSINIT_STAGE_SHELL
+#define MYNEWT_VAL_BLE_MESH_SYSINIT_STAGE_SHELL (1000)
+#endif
+
+#ifndef MYNEWT_VAL_BLE_MESH_TESTING
+#define MYNEWT_VAL_BLE_MESH_TESTING (0)
+#endif
+
+#ifndef MYNEWT_VAL_BLE_MESH_TX_SEG_MAX
+#define MYNEWT_VAL_BLE_MESH_TX_SEG_MAX (6)
+#endif
+
+#ifndef MYNEWT_VAL_BLE_MESH_TX_SEG_MSG_COUNT
+#define MYNEWT_VAL_BLE_MESH_TX_SEG_MSG_COUNT (4)
+#endif
+
 /*** nimble/host/services/ans */
 /*** nimble/host/services/ans */
 #ifndef MYNEWT_VAL_BLE_SVC_ANS_NEW_ALERT_CAT
 #ifndef MYNEWT_VAL_BLE_SVC_ANS_NEW_ALERT_CAT
 #define MYNEWT_VAL_BLE_SVC_ANS_NEW_ALERT_CAT (0)
 #define MYNEWT_VAL_BLE_SVC_ANS_NEW_ALERT_CAT (0)

+ 83 - 11
porting/npl/rtthread/include/config/config.h

@@ -10,24 +10,96 @@
 
 
 #include <rtconfig.h>
 #include <rtconfig.h>
 
 
-#ifdef NIMBT_ROLE_PERIPHERAL
-#define MYNEWT_VAL_BLE_ROLE_PERIPHERAL           1
+/**
+ * Bluetooth role support
+ */
+#ifdef PKG_NIMBLE_ROLE_PERIPHERAL
+#define MYNEWT_VAL_BLE_ROLE_PERIPHERAL           (1)
+#endif
+
+#ifdef PKG_NIMBLE_ROLE_CENTRAL
+#define MYNEWT_VAL_BLE_ROLE_CENTRAL              (1)
+#endif
+
+#ifdef PKG_NIMBLE_ROLE_BROADCASTER
+#define MYNEWT_VAL_BLE_ROLE_BROADCASTER          (1)
+#endif
+
+#ifdef PKG_NIMBLE_ROLE_OBSERVER
+#define MYNEWT_VAL_BLE_ROLE_OBSERVER             (1)
+#endif
+
+#ifdef PKG_NIMBLE_MAX_CONNECTIONS
+#define MYNEWT_VAL_BLE_MAX_CONNECTIONS           (PKG_NIMBLE_MAX_CONNECTIONS)
+#endif
+
+#ifdef PKG_NIMBLE_MULTI_ADV_INSTANCES
+#define MYNEWT_VAL_BLE_MULTI_ADV_INSTANCES       (PKG_NIMBLE_MULTI_ADV_INSTANCES)
+#endif
+
+#ifdef PKG_NIMBLE_WHITELIST
+#define MYNEWT_VAL_BLE_WHITELIST                 (1)
+#endif
+
+#ifdef PKG_NIMBLE_EXT_ADV
+#define MYNEWT_VAL_BLE_EXT_ADV                   (1)
+#endif
+
+#ifdef PKG_NIMBLE_EXT_ADV_MAX_SIZE
+#define MYNEWT_VAL_BLE_EXT_ADV_MAX_SIZE          (PKG_NIMBLE_EXT_ADV_MAX_SIZE)
+#endif
+
+/**
+ * Host Stack Configuration
+ */ 
+#ifdef PKG_NIMBLE_HOST_THREAD_STACK_SIZE
+#define MYNEWT_VAL_BLE_HOST_THREAD_STACK_SIZE    (PKG_NIMBLE_HOST_THREAD_STACK_SIZE)
+#endif
+
+#ifdef PKG_NIMBLE_HOST_THREAD_PRIORITY
+#define MYNEWT_VAL_BLE_HOST_THREAD_PRIORITY      (PKG_NIMBLE_HOST_THREAD_PRIORITY)
+#endif
+
+/**
+ * Mesh Configuration
+ */ 
+#ifdef PKG_NIMBLE_MESH
+#define MYNEWT_VAL_BLE_MESH                      (1)
+#endif
+
+#ifdef PKG_NIMBLE_MESH_DEVICE_NAME
+#define MYNEWT_VAL_BLE_MESH_DEVICE_NAME          PKG_NIMBLE_MESH_DEVICE_NAME
+#endif
+
+#ifdef PKG_NIMBLE_MESH_ADV_THREAD_STACK_SIZE
+#define MYNEWT_VAL_BLE_MESH_ADV_THREAD_STACK_SIZE (PKG_NIMBLE_MESH_ADV_THREAD_STACK_SIZE)
+#endif
+
+#ifdef PKG_NIMBLE_MESH_ADV_THREAD_PRIORITY
+#define MYNEWT_VAL_BLE_MESH_ADV_THREAD_PRIORITY  (PKG_NIMBLE_MESH_ADV_THREAD_PRIORITY)
+#endif
+
+#ifdef PKG_NIMBLE_MESH_CFG_CLI
+#define BLE_MESH_CFG_CLI                         (1)
 #endif
 #endif
 
 
-#ifdef NIMBT_ROLE_CENTRAL
-#define MYNEWT_VAL_BLE_ROLE_CENTRAL              1
-#endif 
+/**
+ * Controller Configuration
+ */ 
+#ifdef PKG_NIMBLE_CTLR_THREAD_STACK_SIZE
+#define MYNEWT_VAL_BLE_CTLR_THREAD_STACK_SIZE   (PKG_NIMBLE_CTLR_THREAD_STACK_SIZE)
+#endif
 
 
-#ifdef NIMBT_ROLE_BROADCASTER
-#define MYNEWT_VAL_BLE_ROLE_BROADCASTER          1
+#ifdef PKG_NIMBLE_CTLR_THREAD_PRIORITY
+#define MYNEWT_VAL_BLE_CTLR_THREAD_PRIORITY     (PKG_NIMBLE_CTLR_THREAD_PRIORITY)
 #endif
 #endif
 
 
-#ifdef NIMBT_ROLE_OBSERVER
-#define MYNEWT_VAL_BLE_ROLE_OBSERVER             1
+#ifdef PKG_NIMBLE_BSP_NRF52
+#define MYNEWT_VAL_BSP_NRF52                     (1)
 #endif
 #endif
 
 
-#ifdef NIMBLE_CTLR
-#define MYNEWT_VAL_BLE_CTLR                      1
+#ifdef PKG_NIMBLE_BSP_NRF52840
+#define MYNEWT_VAL_BSP_NRF52840                  (1)
 #endif
 #endif
 
 
 #endif
 #endif

+ 16 - 0
porting/npl/rtthread/include/console/console.h

@@ -0,0 +1,16 @@
+/*
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Date           Author       Notes
+ * 2018-12-29     ChenYong     first implementation
+ */
+
+#ifndef __CONSOLE_H__
+#define __CONSOLE_H__
+
+// TODO:
+#include <rtthread.h>
+
+#define console_printf rt_kprintf
+
+#endif

+ 10 - 2
porting/npl/rtthread/include/nimble/nimble_npl_os.h

@@ -12,6 +12,9 @@
 #include <stdint.h>
 #include <stdint.h>
 #include <string.h>
 #include <string.h>
 
 
+/* errno definitions for RT-Thread libc*/
+#include "libc/libc_errno.h"
+
 // TODO: _Static_assert support
 // TODO: _Static_assert support
 #ifndef _Static_assert
 #ifndef _Static_assert
 #define _Static_assert(...)
 #define _Static_assert(...)
@@ -19,11 +22,16 @@
 
 
 #define BLE_NPL_OS_ALIGNMENT    4
 #define BLE_NPL_OS_ALIGNMENT    4
 
 
-#define BLE_NPL_TIME_FOREVER    -1
+#define BLE_NPL_TIME_FOREVER    (0xFFFFFFFF)
 
 
-typedef int32_t ble_npl_time_t;
+typedef uint32_t ble_npl_time_t;
 typedef int32_t ble_npl_stime_t;
 typedef int32_t ble_npl_stime_t;
 
 
+struct ble_npl_task
+{
+    void *t;
+};
+
 struct ble_npl_event
 struct ble_npl_event
 {
 {
     bool queued;
     bool queued;

+ 8 - 7
porting/npl/rtthread/src/nimble_port_rtthread.c

@@ -12,13 +12,9 @@
 #include "syscfg/syscfg.h"
 #include "syscfg/syscfg.h"
 #include "nimble/nimble_port.h"
 #include "nimble/nimble_port.h"
 
 
-#define NIMBLE_THRAED_STACK_SIZE (1024)
-#define NIMBLE_THREAD_PRIORITY (10)
-
 #if NIMBLE_CFG_CONTROLLER
 #if NIMBLE_CFG_CONTROLLER
 static rt_thread_t ll_task_h;
 static rt_thread_t ll_task_h;
 #endif
 #endif
-static rt_thread_t host_task_h;
 
 
 extern void ble_ll_task(void *arg);
 extern void ble_ll_task(void *arg);
 
 
@@ -38,11 +34,15 @@ int nimble_port_rtthread_init(void)
      * provided by NimBLE and in case of FreeRTOS it does not need to be wrapped
      * provided by NimBLE and in case of FreeRTOS it does not need to be wrapped
      * since it has compatible prototype.
      * since it has compatible prototype.
      */
      */
-    ll_task_h = rt_thread_create("ll", ble_ll_task, NULL, NIMBLE_THRAED_STACK_SIZE + 256, NIMBLE_THREAD_PRIORITY - 1, 10);
+    ll_task_h = rt_thread_create("ll", ble_ll_task, NULL, 
+                                MYNEWT_VAL(BLE_CTLR_THREAD_STACK_SIZE),
+                                MYNEWT_VAL(BLE_CTLR_THREAD_PRIORITY), 10);
     if (ll_task_h != RT_NULL)
     if (ll_task_h != RT_NULL)
         rt_thread_startup(ll_task_h);
         rt_thread_startup(ll_task_h);
 
 
 #endif
 #endif
+    
+    return 0;
 }
 }
 
 
 void ble_hs_thread_entry(void *parameter)
 void ble_hs_thread_entry(void *parameter)
@@ -54,10 +54,11 @@ void ble_hs_thread_startup(void)
 {
 {
     rt_thread_t tid;
     rt_thread_t tid;
 
 
-    tid = rt_thread_create("host", ble_hs_thread_entry, NULL, NIMBLE_THRAED_STACK_SIZE, NIMBLE_THREAD_PRIORITY + 1, 10);
+    tid = rt_thread_create("host", ble_hs_thread_entry, NULL,
+                           MYNEWT_VAL(BLE_HOST_THREAD_STACK_SIZE),
+                           MYNEWT_VAL(BLE_HOST_THREAD_PRIORITY), 10);
     if (tid != RT_NULL)
     if (tid != RT_NULL)
         rt_thread_startup(tid);
         rt_thread_startup(tid);
-
 }
 }
 
 
 INIT_COMPONENT_EXPORT(nimble_port_rtthread_init);
 INIT_COMPONENT_EXPORT(nimble_port_rtthread_init);

+ 16 - 0
porting/npl/rtthread/src/npl_os_rtthread.c

@@ -24,6 +24,22 @@ void *ble_npl_get_current_task_id(void)
     return rt_thread_self();
     return rt_thread_self();
 }
 }
 
 
+int ble_npl_task_init(struct ble_npl_task *t, const char *name, 
+        ble_npl_task_fn *func,void *arg, uint8_t prio, 
+        uint32_t sanity_itvl, uint32_t *stack_bottom, uint16_t stack_size)
+{
+    rt_thread_t tid;
+
+    tid = rt_thread_create(name, func, arg, stack_size, prio, 10);
+    if(tid)
+    {
+        t->t = tid;
+        rt_thread_startup(tid);
+        return RT_EOK;
+    }
+    return -RT_ERROR;
+}
+
 void ble_npl_eventq_init(struct ble_npl_eventq *evq)
 void ble_npl_eventq_init(struct ble_npl_eventq *evq)
 {
 {
     evq->q = rt_mq_create("npl_evq", sizeof(struct ble_npl_eventq *), 32, RT_IPC_FLAG_FIFO);
     evq->q = rt_mq_create("npl_evq", sizeof(struct ble_npl_eventq *), 32, RT_IPC_FLAG_FIFO);