component/bt : add uart(1/2) as HCI IO directly

This commit is contained in:
Tian Hao 2017-03-16 17:14:20 +08:00
parent 26bf1e8499
commit f5ebeb4c4d
8 changed files with 151 additions and 19 deletions

View file

@ -11,27 +11,58 @@ config BLUEDROID_ENABLED
This enables the default Bluedroid Bluetooth stack
config BTC_TASK_STACK_SIZE
int "Bluetooth event (callback to application) task stack size"
int "Bluetooth event (callback to application) task stack size"
depends on BT_ENABLED
default 3072
help
This select btc task stack size
default 3072
help
This select btc task stack size
config BLUEDROID_MEM_DEBUG
bool "Bluedroid memory debug"
bool "Bluedroid memory debug"
depends on BT_ENABLED
default n
help
Bluedroid memory debug
default n
help
Bluedroid memory debug
config BT_DRAM_RELEASE
bool "Release DRAM from Classic BT controller"
bool "Release DRAM from Classic BT controller"
depends on BT_ENABLED
default n
help
This option should only be used when BLE only.
Open this option will release about 30K DRAM from Classic BT.
The released DRAM will be used as system heap memory.
default n
help
This option should only be used when BLE only.
Open this option will release about 30K DRAM from Classic BT.
The released DRAM will be used as system heap memory.
#config BTDM_CONTROLLER_RUN_APP_CPU
# bool "Run controller on APP CPU"
# depends on BT_ENABLED
# default n
# help
# Run controller on APP CPU.
menuconfig HCI_UART
bool "HCI use UART as IO"
depends on BT_ENABLED
default n
help
Default HCI use VHCI, if this option choose, HCI will use UART(0/1/2) as IO.
Besides, it can set uart number and uart baudrate.
config HCI_UART_NO
int "UART Number for HCI"
depends on HCI_UART
range 1 2
default 1
help
Uart number for HCI.
config HCI_UART_BAUDRATE
int "UART Baudrate for HCI"
depends on HCI_UART
range 115200 921600
default 921600
help
UART Baudrate for HCI. Please use standard baudrate.
# Memory reserved at start of DRAM for Bluetooth stack
config BT_RESERVE_DRAM

View file

@ -33,13 +33,21 @@
#if CONFIG_BT_ENABLED
/* Bluetooth system and controller config */
#define BTDM_CFG_BT_EM_RELEASE (1<<0)
#define BTDM_CFG_BT_DATA_RELEASE (1<<1)
#define BTDM_CFG_BT_EM_RELEASE (1<<0)
#define BTDM_CFG_BT_DATA_RELEASE (1<<1)
#define BTDM_CFG_HCI_UART (1<<2)
#define BTDM_CFG_CONTROLLER_RUN_APP_CPU (1<<3)
/* Other reserved for future */
/* Controller config options, depend on config mask */
struct btdm_config_options {
uint8_t hci_uart_no;
uint32_t hci_uart_baudrate;
};
/* not for user call, so don't put to include file */
extern void btdm_osi_funcs_register(void *osi_funcs);
extern void btdm_controller_init(uint32_t config_mask);
extern void btdm_controller_init(uint32_t config_mask, struct btdm_config_options *opts);
extern void btdm_controller_schedule(void);
extern void btdm_controller_deinit(void);
extern int btdm_controller_enable(esp_bt_mode_t mode);
@ -170,18 +178,38 @@ static uint32_t btdm_config_mask_load(void)
#ifdef CONFIG_BT_DRAM_RELEASE
mask |= (BTDM_CFG_BT_EM_RELEASE | BTDM_CFG_BT_DATA_RELEASE);
#endif
#ifdef CONFIG_HCI_UART
mask |= BTDM_CFG_HCI_UART;
#endif
#ifdef CONFIG_BTDM_CONTROLLER_RUN_APP_CPU
mask |= BTDM_CFG_CONTROLLER_RUN_APP_CPU;
#endif
return mask;
}
static void btdm_config_opts_load(struct btdm_config_options *opts)
{
if (opts == NULL) {
return;
}
#ifdef CONFIG_HCI_UART
opts->hci_uart_no = CONFIG_HCI_UART_NO;
opts->hci_uart_baudrate = CONFIG_HCI_UART_BAUDRATE;
#endif
}
static void bt_controller_task(void *pvParam)
{
struct btdm_config_options btdm_cfg_opts;
uint32_t btdm_cfg_mask = 0;
btdm_osi_funcs_register(&osi_funcs);
btdm_cfg_mask = btdm_config_mask_load();
btdm_controller_init(btdm_cfg_mask);
btdm_config_opts_load(&btdm_cfg_opts);
btdm_controller_init(btdm_cfg_mask, &btdm_cfg_opts);
btdm_controller_status = ESP_BT_CONTROLLER_STATUS_INITED;

@ -1 +1 @@
Subproject commit 9a4bb1d5287572664f170f9df4dbfd71babdfc68
Subproject commit f1c0c65171e5bd02e1d63137b3582af3bcbb85a4

View file

@ -0,0 +1,8 @@
#
# This is a project Makefile. It is assumed the directory this Makefile resides in is a
# project subdirectory.
#
PROJECT_NAME := controller_hci_uart
include $(IDF_PATH)/make/project.mk

View file

@ -0,0 +1,7 @@
ESP-IDF UART HCI Controller
===========================
This is a btdm controller use UART as HCI IO. This require the UART device support RTS/CTS mandatory.
It can do the configuration of UART number and UART baudrate by menuconfig.

View file

@ -0,0 +1,4 @@
#
# "main" pseudo-component makefile.
#
# (Uses default behaviour of compiling all source files in directory, adding 'include' to include path.)

View file

@ -0,0 +1,44 @@
// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD
//
// 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.
#include <stdio.h>
#include <string.h>
#include "bt.h"
#include "driver/uart.h"
#include "esp_log.h"
static const char *tag = "CONTROLLER_UART_HCI";
static void uart_gpio_reset(void)
{
ESP_LOGI(tag, "HCI UART Pin select: TX 5, RX, 18, CTS 23, RTS 19\n");
#if CONFIG_HCI_UART_NO
uart_set_pin(CONFIG_HCI_UART_NO, 5, 18, 19, 23);
#endif
}
void app_main()
{
/* As the UART1/2 pin conflict with flash pin, so do matrix of the signal and pin */
uart_gpio_reset();
esp_bt_controller_init();
if (esp_bt_controller_enable(ESP_BT_MODE_BTDM) != ESP_OK) {
return;
}
}

View file

@ -0,0 +1,10 @@
# Override some defaults so BT stack is enabled
# in this example
#
# BT config
#
CONFIG_BT_ENABLED=y
CONFIG_HCI_UART=y
CONFIG_HCI_UART_NO=1
CONFIG_HCI_UART_BAUDRATE=921600