-
Notifications
You must be signed in to change notification settings - Fork 7k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'feature/btdm_controller' into 'master'
BT support Initial version of BT support. BT and WiFi are mutually exclusive at this point, so we have a new option to select which stack is used. Precompiled BT libraries are added as a submodule. See merge request !109
- Loading branch information
Showing
15 changed files
with
529 additions
and
52 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,121 @@ | ||
// 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 <stddef.h> | ||
#include <stdlib.h> | ||
#include <stdio.h> | ||
|
||
#include "freertos/FreeRTOS.h" | ||
#include "freertos/task.h" | ||
#include "freertos/queue.h" | ||
#include "freertos/semphr.h" | ||
#include "freertos/xtensa_api.h" | ||
#include "freertos/portmacro.h" | ||
#include "esp_types.h" | ||
#include "esp_system.h" | ||
#include "esp_task.h" | ||
#include "esp_intr.h" | ||
#include "esp_attr.h" | ||
#include "bt.h" | ||
|
||
#if CONFIG_BT_ENABLED | ||
|
||
/* 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(void); | ||
|
||
|
||
static bt_app_startup_cb_t app_startup_cb; | ||
static void *app_startup_ctx; | ||
|
||
#define BT_DEBUG(...) | ||
#define BT_API_CALL_CHECK(info, api_call, ret) \ | ||
do{\ | ||
esp_err_t __err = (api_call);\ | ||
if ((ret) != __err) {\ | ||
BT_DEBUG("%s %d %s ret=%d\n", __FUNCTION__, __LINE__, (info), __err);\ | ||
return __err;\ | ||
}\ | ||
} while(0) | ||
|
||
struct osi_funcs_t { | ||
xt_handler (*_set_isr)(int n, xt_handler f, void *arg); | ||
void (*_ints_on)(unsigned int mask); | ||
void (*_interrupt_disable)(void); | ||
void (*_interrupt_restore)(void); | ||
void (*_task_yield)(void); | ||
void *(*_semphr_create)(uint32_t max, uint32_t init); | ||
void *(*_semphr_give_from_isr)(void *semphr, void *hptw); | ||
void *(*_semphr_take)(void *semphr, uint32_t block_time); | ||
esp_err_t (* _read_efuse_mac)(uint8_t mac[6]); | ||
}; | ||
|
||
static portMUX_TYPE global_int_mux = portMUX_INITIALIZER_UNLOCKED; | ||
|
||
static void IRAM_ATTR interrupt_disable(void) | ||
{ | ||
portENTER_CRITICAL(&global_int_mux); | ||
} | ||
|
||
static void IRAM_ATTR interrupt_restore(void) | ||
{ | ||
portEXIT_CRITICAL(&global_int_mux); | ||
} | ||
|
||
static void * IRAM_ATTR semphr_take_wrapper(void *semphr, uint32_t block_time) | ||
{ | ||
return (void *)xSemaphoreTake(semphr, block_time); | ||
} | ||
|
||
static struct osi_funcs_t osi_funcs = { | ||
._set_isr = xt_set_interrupt_handler, | ||
._ints_on = xt_ints_on, | ||
._interrupt_disable = interrupt_disable, | ||
._interrupt_restore = interrupt_restore, | ||
._task_yield = vPortYield, | ||
._semphr_create = xQueueCreateCountingSemaphore, | ||
._semphr_give_from_isr = (void *)xQueueGiveFromISR, | ||
._semphr_take = semphr_take_wrapper, | ||
._read_efuse_mac = system_efuse_read_mac, | ||
}; | ||
|
||
static void bt_controller_task(void *pvParam) | ||
{ | ||
btdm_osi_funcs_register(&osi_funcs); | ||
btdm_controller_init(); | ||
} | ||
|
||
|
||
static void bt_init_task(void *pvParameters) | ||
{ | ||
xTaskCreatePinnedToCore(bt_controller_task, "btControllerTask", ESP_TASK_BT_CONTROLLER_STACK, NULL, ESP_TASK_BT_CONTROLLER_PRIO, NULL, 0); | ||
|
||
if (app_startup_cb) { | ||
app_startup_cb(app_startup_ctx); | ||
} | ||
|
||
vTaskDelete(NULL); | ||
} | ||
|
||
|
||
esp_err_t esp_bt_startup(bt_app_startup_cb_t cb, void *ctx) | ||
{ | ||
app_startup_cb = cb; | ||
app_startup_ctx = ctx; | ||
|
||
xTaskCreatePinnedToCore(bt_init_task, "btInitTask", ESP_TASK_BT_INIT_STACK, NULL, ESP_TASK_BT_INIT_PRIO, NULL, 0); | ||
|
||
return ESP_OK; | ||
} | ||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
# | ||
# Component Makefile | ||
# | ||
|
||
#COMPONENT_ADD_INCLUDEDIRS := | ||
|
||
CURRENT_DIR=$(IDF_PATH)/components/bt | ||
|
||
COMPONENT_ADD_INCLUDEDIRS := ./include | ||
|
||
CFLAGS += -Wno-error=unused-label -Wno-error=return-type -Wno-error=missing-braces -Wno-error=pointer-sign -Wno-error=parentheses | ||
|
||
LIBS := btdm_app | ||
|
||
COMPONENT_ADD_LDFLAGS := -lbt -L$(abspath lib) \ | ||
$(addprefix -l,$(LIBS)) \ | ||
$(LINKER_SCRIPTS) | ||
|
||
|
||
ALL_LIB_FILES := $(patsubst %,$(COMPONENT_PATH)/lib/lib%.a,$(LIBS)) | ||
$(COMPONENT_LIBRARY): $(ALL_LIB_FILES) | ||
|
||
COMPONENT_SRCDIRS := ./ | ||
|
||
include $(IDF_PATH)/make/component_common.mk |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,66 @@ | ||
// 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. | ||
|
||
#ifndef __BT_H__ | ||
#define __BT_H__ | ||
|
||
#include "freertos/FreeRTOS.h" | ||
#include "esp_err.h" | ||
|
||
#ifdef __cplusplus | ||
extern "C" { | ||
#endif | ||
|
||
|
||
typedef void (* bt_app_startup_cb_t)(void *param); | ||
|
||
esp_err_t esp_bt_startup(bt_app_startup_cb_t cb, void *ctx); | ||
|
||
/* @breif: vhci_host_callback | ||
* used for vhci call host function to notify what host need to do | ||
* | ||
* notify_host_send_available: notify host can send packet to controller | ||
* notify_host_recv: notify host that controller has packet send to host | ||
*/ | ||
typedef struct vhci_host_callback { | ||
|
||
void (*notify_host_send_available)(void); | ||
int (*notify_host_recv)(uint8_t *data, uint16_t len); | ||
} vhci_host_callback_t; | ||
|
||
/* @breif: API_vhci_host_check_send_available | ||
* used for check actively if the host can send packet to controller or not. | ||
* return true for ready to send, false means cannot send packet | ||
*/ | ||
bool API_vhci_host_check_send_available(void); | ||
|
||
/* @breif: API_vhci_host_send_packet | ||
* host send packet to controller | ||
* param data is the packet point, the param len is the packet length | ||
* return void | ||
*/ | ||
void API_vhci_host_send_packet(uint8_t *data, uint16_t len); | ||
|
||
/* @breif: API_vhci_host_register_callback | ||
* register the vhci referece callback, the call back | ||
* struct defined by vhci_host_callback structure. | ||
* param is the vhci_host_callback type variable | ||
*/ | ||
void API_vhci_host_register_callback(const vhci_host_callback_t *callback); | ||
|
||
#ifdef __cplusplus | ||
} | ||
#endif | ||
|
||
#endif /* __BT_H__ */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.