zifeng@zifeng-vm:~/sources/othres/aithinker_dev_sdk/adt/adt_os$ tree
.
├── adapter_chip //适配层,应用开发类原子接口的实现,与具体厂商SDK相关,需要根据厂商SDK进行接口适配
│ ├── chip //厂商平台
│ │ ├── bl602 //博流bl602芯片平台接口
│ │ │ ├── ble //ble适配层
│ │ │ │ ├── ai_ble.c
│ │ │ │ └── ai_ble.h
│ │ │ ├── os_port //freertos适配层接口
│ │ │ ├── peripheral_drive //外设接口驱动(非特定某个传感器驱动)
│ │ │ │ ├── gpio //GPIO
│ │ │ │ ├── i2c //I2C
│ │ │ │ ├── i2s //I2S
│ │ │ │ ├── pwm //PWM
│ │ │ │ ├── spi //SPI
│ │ │ │ ├── uart //UART
│ │ │ │ └── usb //USB
│ │ │ ├── protocol //网络协议接口
│ │ │ │ ├── http //HTTP
│ │ │ │ ├── mqtt //MQTT
│ │ │ │ ├── tcp //TCP
│ │ │ │ └── udp //UDP
│ │ │ └── wifi //WiFi适配层接口
│ │ │ ├── ai_wifi.c
│ │ │ └── ai_wifi.h
│ │ └── ln882h //亮牛ln882h芯片平台接口
│ │ ├── ble //ble适配层
│ │ │ ├── ai_ble.c
│ │ │ └── ai_ble.h
│ │ ├── os_port //freertos适配层接口
│ │ ├── peripheral_drive //外设接口驱动(非特定某个传感器驱动)
│ │ │ ├── gpio
│ │ │ ├── i2c
│ │ │ ├── i2s
│ │ │ ├── pwm
│ │ │ ├── spi
│ │ │ ├── uart
│ │ │ └── usb
│ │ ├── protocol //网络协议接口
│ │ │ ├── http
│ │ │ ├── mqtt
│ │ │ ├── tcp
│ │ │ └── udp
│ │ └── wifi //WiFi适配层接口
│ │ ├── ai_wifi.c
│ │ └── ai_wifi.h
│ ├── chip_week_func //适配层弱函数目录,不能手动编辑,由系统自动生成;非系统工程师请忽略该目录
│ │ ├── chip_week_func.c
│ │ └── chip_week_func.h
│ └── README.md
├── adapter_core //核心层,用于实现通用的接口、协议、方法,仅可调用adapter_chip内函数实现,不得调用其他任何目录文件/函数
│ ├── at_cmd //at架构
│ ├── cloud //云平台通用协议
│ ├── factory //产测功能
│ │ ├── gpio_test
│ │ └── rf_test
│ ├── log //调试日志
│ ├── net_connect //配网方法
│ │ ├── airkiss
│ │ ├── apconfig
│ │ ├── bleconfig
│ │ ├── nfcconfig
│ │ └── smartconfig
│ └── sensor //传感器驱动
│ ├── audio //音频
│ │ ├── ac101
│ │ └── es8311
│ ├── camera //摄像头
│ │ ├── ov2640
│ │ └── ov5640
│ ├── lcd //显示屏
│ │ ├── ili9341
│ │ └── st7789
│ └── led //调色灯
│ └── ws2812
├── adapter_include //中间件接口头文件,由外部应用项目引用
│ └── ai_adapter_include.h
└── README.md
adapter_chip目录:(仅可调用厂商SDK接口实现,不允许调用其它接口)
adapter_chip/chip目录:
存放厂商的适配层接口,适配层接口应具备类原子性,即代码最原始的应用级物理操作,例如打开WiFi、关闭WiFi、配置WiFi,配置GPIO高低电平等,每个厂商的适配层接口是一致的,仅是实现的方法不同。在适配层adapter_chip/chip的头文件,在函数声明时需要增加(week_func)宏定义,在系统编译时会自动生成弱定义函数,更具体可以参考adapter_chip/chip/bl602/ble/ai_ble.h
zifeng@zifeng-vm:~/sources/othres/aithinker_dev_sdk/adt/adt_os/adapter_chip/chip/bl602/ble$ cat ai_ble.h
#ifndef AI_BLE_H
#define AI_BLE_H
#define week_func //弱函数宏定义
week_func void ble_func(); //在适配层声明函数时,必须加上week_func宏定义;不然在编译过程会报错
#endif
adapter_chip/chip/bl602/ble示例:
zifeng@zifeng-vm:~/sources/othres/aithinker_dev_sdk/adt/adt_os/adapter_chip/chip/bl602/ble$ tree
.
├── ai_ble.c
└── ai_ble.h
具体内容参考:
zifeng@zifeng-vm:~/sources/othres/aithinker_dev_sdk/adt/adt_os/adapter_chip/chip/bl602/ble$ cat ai_ble.c
#include "ai_ble.h"
void ble_func() //原子性接口实现
{
printf("TODO\r\n"); //具体的方法,调用芯片厂商提供的软件接口实现
}
zifeng@zifeng-vm:~/sources/othres/aithinker_dev_sdk/adt/adt_os/adapter_chip/chip/bl602/ble$ cat ai_ble.h
#ifndef AI_BLE_H
#define AI_BLE_H
#define week_func
week_func void ble_func(); //声明一个弱函数
#endif
adapter_core目录:(仅可调用适配层adapter_chip目录内接口,不允许调用其它接口)
首先要明确一个概念,
adapter_core 目录与adapter_chip目录在定义上是不一致的,adapter_chip 是用于实现不同芯片厂商类原子性接口的适配,它主要是用于屏蔽不同厂商SDK接口之间的差异。而adapter_core目录是基于adapter_chip目录适配层接口实现的通用方法、常用函数;同理,adapter_core目录仅可调用适配层接口,不允许调用其它任何接口实现。
adapter_include目录:(V1.0版本:头文件需手动添加到ai_adapter_include.h文件进行透出)
用于中间件的接口函数透出,供外部应用层进行调用:#include "ai_adapter_include.h"(例如在main.c入口文件中增加对中间层接口的透出)
更具体可以参考demo应用例程