| /* |
| * |
| * Copyright (c) 2020 Project CHIP Authors |
| * Copyright (c) 2020 Google LLC. |
| * All rights reserved. |
| * |
| * 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. |
| */ |
| |
| #pragma once |
| |
| #if __cplusplus |
| extern "C" { |
| #endif |
| |
| #include "FreeRTOS.h" |
| #include "event_groups.h" |
| #include "semphr.h" |
| #include "task.h" |
| #include "timers.h" |
| |
| #include "sl_bt_api.h" |
| |
| #define BLE_STACK_TASK_NAME "BLE_STACK" |
| #define BLE_LINK_TASK_NAME "BLE_LINK" |
| |
| // Bluetooth event flag group |
| extern EventGroupHandle_t bluetooth_event_flags; |
| // Bluetooth event flag definitions |
| #define BLUETOOTH_EVENT_FLAG_STACK (0x01u) // Bluetooth task needs an update |
| #define BLUETOOTH_EVENT_FLAG_LL (0x02u) // Linklayer task needs an update |
| #define BLUETOOTH_EVENT_FLAG_CMD_WAITING (0x04u) // BGAPI command is waiting to be processed |
| #define BLUETOOTH_EVENT_FLAG_RSP_WAITING (0x08u) // BGAPI response is waiting to be processed |
| #define BLUETOOTH_EVENT_FLAG_EVT_WAITING (0x10u) // BGAPI event is waiting to be processed |
| #define BLUETOOTH_EVENT_FLAG_EVT_HANDLED (0x20u) // BGAPI event is handled |
| |
| // Bluetooth event data pointer |
| extern volatile sl_bt_msg_t * bluetooth_evt; |
| |
| // Function prototype for initializing Bluetooth stack. |
| typedef sl_status_t (*bluetooth_stack_init_func)(); |
| |
| /** |
| * Start Bluetooth tasks. The given Bluetooth stack initialization function |
| * will be called at a proper time. Application should not initialize |
| * Bluetooth stack anywhere else. |
| * |
| * @param ll_priority link layer task priority |
| * @param stack_priority Bluetooth stack task priority |
| * @param initialize_bluetooth_stack The function for initializing Bluetooth stack |
| */ |
| sl_status_t bluetooth_start(UBaseType_t ll_priority, UBaseType_t stack_priority, |
| bluetooth_stack_init_func initialize_bluetooth_stack); |
| |
| // Set the callback for wakeup, Bluetooth task will call this when it has a new event |
| // It must only used to wake up application task, for example by posting task semaphore |
| typedef void (*wakeupCallback)(void); |
| void BluetoothSetWakeupCallback(wakeupCallback cb); |
| // Bluetooth stack needs an update |
| extern void BluetoothUpdate(void); |
| // Linklayer is updated |
| extern void BluetoothLLCallback(void); |
| |
| // Mutex functions for using Bluetooth from multiple tasks |
| void BluetoothPend(void); |
| void BluetoothPost(void); |
| |
| void vRaiseEventFlagBasedOnContext(EventGroupHandle_t xEventGroup, EventBits_t uxBitsToWaitFor); |
| BaseType_t vSendToQueueBasedOnContext(QueueHandle_t xQueue, void * xItemToQueue, TickType_t xTicksToWait, |
| BaseType_t * pxHigherPriorityTaskWoken); |
| |
| #if __cplusplus |
| } |
| #endif |