From: Tian Hao Date: Tue, 1 Nov 2016 06:01:49 +0000 (+0800) Subject: Merge branch 'feature/btdm_blufi' into feature/btdm_bluedroid X-Git-Tag: v1.0~2^2~64 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=cb33e2a5ae522f1e01a061bccd9d2715596fce4b;p=esp-idf Merge branch 'feature/btdm_blufi' into feature/btdm_bluedroid # Conflicts: # components/bt/bluedroid/bta/dm/bta_dm_pm.c # components/bt/component.mk # examples/07_blufi/components/bluedroid_demos/app_core/bt_app_core.c # examples/07_blufi/components/bluedroid_demos/app_project/SampleServerProject.c --- cb33e2a5ae522f1e01a061bccd9d2715596fce4b diff --cc components/bt/bluedroid/osi/include/thread.h index dcdc2b44ef,61ab3027cb..091784b6ca --- a/components/bt/bluedroid/osi/include/thread.h +++ b/components/bt/bluedroid/osi/include/thread.h @@@ -9,15 -9,31 +9,33 @@@ #define portBASE_TYPE int - struct task_evt { - uint32_t sig; - uint32_t par; + struct bt_task_evt { + uint32_t sig; //task sig + void * par; //point to task param + void * cb; //point to function cb + void * arg; //point to function arg }; - typedef struct task_evt TaskEvt_t; + typedef struct bt_task_evt BtTaskEvt_t; + + typedef enum { + BT_STATUS_SUCCESS, + BT_STATUS_FAIL, + BT_STATUS_NOT_READY, + BT_STATUS_NOMEM, + BT_STATUS_BUSY, + BT_STATUS_DONE, + BT_STATUS_UNSUPPORTED, + BT_STATUS_PARAM_INVALID, + BT_STATUS_UNHANDLED, + BT_STATUS_AUTH_FAILURE, + BT_STATUS_RMT_DEV_DOWN + } BtStatus_t; + + typedef BtStatus_t (* BtTaskCb_t)(void *arg); enum { + SIG_PRF_START_UP = 0xfc, + SIG_PRF_WORK = 0xfd, SIG_BTU_START_UP = 0xfe, SIG_BTU_WORK = 0xff }; diff --cc components/bt/bluedroid/profiles/core/bt_prf_task.c index 3f93e039b5,0000000000..931a7703fb mode 100644,000000..100644 --- a/components/bt/bluedroid/profiles/core/bt_prf_task.c +++ b/components/bt/bluedroid/profiles/core/bt_prf_task.c @@@ -1,133 -1,0 +1,133 @@@ +/** + **************************************************************************************** + * + * @file bt_prf_task.c + * + * @brief Application entry point + * + * Copyright (C) Espressif 2016 + * Created by Yulong at 2016/10/11 + * + * + **************************************************************************************** + */ + +#include "bt_prf_task.h" +#include "bt_prf_sys.h" +#include "allocator.h" +#include "thread.h" +#include "gki.h" + + //thread_t *bt_workqueue_thread; + //static const char *BT_WORKQUEUE_NAME = "bt_workqueue"; + xTaskHandle xProfileTaskHandle = NULL; + xQueueHandle xProfileQueue = 0; + + // Communication queue between bt_proflie_task and app. + extern fixed_queue_t *bt_profile_msg_queue; + + + /***************************************************************************** + ** + ** Function bt_prf_task_thread_handler + ** + ** Description Process profile Task Thread. + ******************************************************************************/ + void bt_prf_task_thread_handler(void *arg) + { + //ke_event_clear(KE_EVENT_BTU_TASK_THREAD); + - TaskEvt_t *e; ++ BtTaskEvt_t *e; + for (;;) { + if (pdTRUE == xQueueReceive(xProfileQueue, &e, (portTickType)portMAX_DELAY)) { + + if (e->sig == SIG_BTU_WORK) { + fixed_queue_process(bt_profile_msg_queue); + + } + else if (e->sig == SIG_BTU_START_UP) { + bt_prf_task_start_up(); + } + osi_free(e); + } + } + } + + void bt_prf_task_post(uint32_t sig) +{ - TaskEvt_t *evt = (TaskEvt_t *)osi_malloc(sizeof(TaskEvt_t)); ++ BtTaskEvt_t *evt = (BtTaskEvt_t *)osi_malloc(sizeof(BtTaskEvt_t)); + if (evt == NULL) + return; + + evt->sig = sig; + evt->par = 0; + + if (xQueueSend(xProfileQueue, &evt, 10/portTICK_RATE_MS) != pdTRUE) { + ets_printf("xProfileQueue failed\n"); + } +} + +void bt_profile_msg_ready(fixed_queue_t *queue) { + BT_HDR *p_msg; + + while (!fixed_queue_is_empty(queue)) { + p_msg = (BT_HDR *)fixed_queue_dequeue(queue); + if(p_msg != NULL) + { + bt_prf_sys_event(p_msg); + } + } +} + + +void bt_prf_task_start_up(void) +{ + fixed_queue_register_dequeue(bt_profile_msg_queue, bt_profile_msg_ready); +} + +void bt_prf_task_shut_down(void) +{ + fixed_queue_unregister_dequeue(bt_profile_msg_queue); + + bt_prf_free_core(); +} + + +void bt_prf_StartUp(void) +{ + bt_profile_msg_queue = fixed_queue_new(SIZE_MAX); + if (bt_profile_msg_queue == NULL) + goto error_exit; + + return; + +error_exit:; + LOG_ERROR("%s Unable to allocate resources for bt_workqueue\n", __func__); + bt_prf_ShutDown(); + +} + +void bt_prf_ShutDown(void) +{ + + bt_prf_task_shut_down(); + + //thread_free(bt_workqueue_thread); + vTaskDelete(xProfileTaskHandle); + vQueueDelete(xProfileQueue); + + bt_profile_msg_queue = NULL; + + // bt_workqueue_thread = NULL; + xProfileTaskHandle = NULL; + xProfileQueue = 0; +} + + +void bt_prf_free_core(void) +{ + +} + + + diff --cc components/bt/component.mk index 67907b2994,f536abbfe7..4316eaf474 --- a/components/bt/component.mk +++ b/components/bt/component.mk @@@ -9,7 -9,7 +9,8 @@@ COMPONENT_ADD_INCLUDEDIRS := bluedroid/ bluedroid/gki/include \ bluedroid/hci/include \ bluedroid/osi/include \ + bluedroid/profiles/core/include \ + bluedroid/profiles/esp/blufi/include \ bluedroid/profiles/esp/include \ bluedroid/profiles/std/avrc/include \ bluedroid/profiles/std/battery/include \ @@@ -49,9 -49,8 +50,10 @@@ COMPONENT_SRCDIRS := bluedroid/bta/d bluedroid/hci \ bluedroid/main \ bluedroid/osi \ + bluedroid/profiles/core \ + bluedroid/profiles/esp/blufi \ bluedroid/profiles/esp/ble_button \ + bluedroid/profiles/esp/wechat_AirSync \ bluedroid/profiles/esp \ bluedroid/profiles/std/avrc \ bluedroid/profiles/std/battery \