# 同步上游代码说明

这里简要说明一下，同步上游代码时主要修改了哪些地方。[上游官方仓库](https://github.com/apache/mynewt-nimble)

## NimBLE 目录结构

```
NimBLE
   ├───apps                   /* Bluetooth 示例应用程序 */
   ├───docs                   /* 文档及 API 说明 */
   ├───ext
   │   └───tinycrypt          /* Tinycrypt 加密库 */
   ├───nimble
   │   ├───controller         /* Controller 实现 */
   │   ├───doc                /* 当前包含 transport 层说明文档 */   
   │   ├───drivers            /* Nordic 系列 Phy 驱动 */
   │   ├───host               /* Host Stack(主机控制器)实现 */
   │   ├───include
   │   └───transport          /* HCI 传输抽象层 */
   └───porting                /* OS 抽象层及系统配置 */
```

## apps 

此目录下都为 Bluetooth 示例应用程序，大部分程序做了 RT-Thread 的适配，已有的例程建议不要直接覆盖；官方对此部分改动应该不会很大，要对照实际内容修改，也可在 debug 过程中修改代码。

官方写的新例程可以尝试添加一下，并按照其他例程形式修改一下在 RT-Thread 上跑起来。

## docs

此目录下都为文档资料，包含官方文档，也有后续 rt-thread 社区小伙伴 PR 的文档。官方文档可以更新一下，基本内容都比较少。

## ext

目录下包含扩展库，目前包含了一个 Tinycrypt 加密库，提供了一个最小的标准密码原语集，可以跟着官方更新一下。

## nimble

nimble 目录下的文件基本上都是协议栈的主干部分，包括 controller 、host 和 transport HCI 传输抽象层的东西。 此部分代码与 RT-Thread 基本没有耦合，属于协议栈本身代码；如果要同步到上游，这一部分文件基本都要同步。

不过要注意 transport 下 RT-Thread UART 对接 HCI 的代码，如果 HCI 层框架改变了，则需要进行相应调整。

## porting

porting 目录如下

```
porting                /* OS 抽象层及系统配置 */
    ├───nimble
    │   ├───include
    │   └───src
    └───npl
        └───rtthread       /* RT-Thread OS 接口实现 */
            ├───include
            │   ├───config /* NimBLE 协议栈配置选项 */
            │   ├───console
            │   └───nimble
            └───src
```

基本是 OS 抽象层与 rtthread 的对接代码，包括系统配置等等。

-   porting/nimble 目录下代码主要是定义 OS 抽象层框架 和 系统配置，可以同步到上游。
-   npl/rtthread 则是 OS 抽象层对接 RT-Thread 的移植代码，一般保留不动，如遇到 bug 可能需要适当调整。

## SConscript 文件

SConscript 文件在 NimBLE 软件包根目录下，是 Scons 构建工具的构建描述文件。

在同步上游代码后，需要针对实际编译情况对此文件进行相应修改，如移除某些文件，添加某些头文件路径，添加某些源文件加入编译等。