From 133864a750bd58e4900551ece25e3063a082c130 Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Wed, 28 Oct 2020 15:01:53 +0100 Subject: [PATCH] PortentaH7: add BLE support --- .../TARGET_PORTENTA_H7/cy_bt_cordio_cfg.cpp | 105 ++++++++++++++++++ targets/targets.json | 9 +- 2 files changed, 113 insertions(+), 1 deletion(-) create mode 100644 connectivity/drivers/ble/FEATURE_BLE/COMPONENT_CYW43XXX/TARGET_PORTENTA_H7/cy_bt_cordio_cfg.cpp diff --git a/connectivity/drivers/ble/FEATURE_BLE/COMPONENT_CYW43XXX/TARGET_PORTENTA_H7/cy_bt_cordio_cfg.cpp b/connectivity/drivers/ble/FEATURE_BLE/COMPONENT_CYW43XXX/TARGET_PORTENTA_H7/cy_bt_cordio_cfg.cpp new file mode 100644 index 00000000000..2d668fed9ce --- /dev/null +++ b/connectivity/drivers/ble/FEATURE_BLE/COMPONENT_CYW43XXX/TARGET_PORTENTA_H7/cy_bt_cordio_cfg.cpp @@ -0,0 +1,105 @@ +/******************************************************************************* +* \file cy_bt_cordio_cfg.cpp +* \version 1.0 +* +* +* Low Power Assist BT Pin configuration implementation. +* +******************************************************************************** +* \copyright +* Copyright 2019 Cypress Semiconductor Corporation +* SPDX-License-Identifier: Apache-2.0 +* +* 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 +#include "ble/driver/CordioHCIDriver.h" +#include "hci_api.h" +#include "hci_cmd.h" +#include "hci_core.h" +#include "bstream.h" +#include "assert.h" +#include +#include "hci_mbed_os_adaptation.h" +#include "CyH4TransportDriver.h" + +#define cyhal_gpio_to_rtos(x) (x) +#define CYCFG_BT_LP_ENABLED (1) +#define CYCFG_BT_HOST_WAKE_IRQ_EVENT WAKE_EVENT_ACTIVE_LOW +#define CYCFG_BT_DEV_WAKE_POLARITY WAKE_EVENT_ACTIVE_LOW + +/******************************************************************************* +* Function Name: ble_cordio_get_h4_transport_driver +******************************************************************************** +* +* Strong implementation of function which calls CyH4TransportDriver constructor and return it +* +* \param none +* +* \return +* Returns the transport driver object +*******************************************************************************/ +ble::vendor::cypress_ble::CyH4TransportDriver& ble_cordio_get_h4_transport_driver() +{ +#if (defined(MBED_TICKLESS) && DEVICE_SLEEP && DEVICE_LPTICKER) + +#if (defined(CYCFG_BT_LP_ENABLED)) + if (CYCFG_BT_LP_ENABLED) { + static ble::vendor::cypress_ble::CyH4TransportDriver s_transport_driver( + /* TX */ cyhal_gpio_to_rtos(CYBSP_BT_UART_TX), + /* RX */ cyhal_gpio_to_rtos(CYBSP_BT_UART_RX), + /* cts */ cyhal_gpio_to_rtos(CYBSP_BT_UART_CTS), + /* rts */ cyhal_gpio_to_rtos(CYBSP_BT_UART_RTS), + /* power */ cyhal_gpio_to_rtos(CYBSP_BT_POWER), + DEF_BT_BAUD_RATE, + cyhal_gpio_to_rtos(CYBSP_BT_HOST_WAKE), + cyhal_gpio_to_rtos(CYBSP_BT_DEVICE_WAKE), + CYCFG_BT_HOST_WAKE_IRQ_EVENT, + CYCFG_BT_DEV_WAKE_POLARITY + ); + return s_transport_driver; + } else { /* CYCFG_BT_LP_ENABLED */ + static ble::vendor::cypress_ble::CyH4TransportDriver s_transport_driver( + /* TX */ cyhal_gpio_to_rtos(CYBSP_BT_UART_TX), + /* RX */ cyhal_gpio_to_rtos(CYBSP_BT_UART_RX), + /* cts */ cyhal_gpio_to_rtos(CYBSP_BT_UART_CTS), + /* rts */ cyhal_gpio_to_rtos(CYBSP_BT_UART_RTS), + /* power */ cyhal_gpio_to_rtos(CYBSP_BT_POWER), + DEF_BT_BAUD_RATE); + return s_transport_driver; + } +#else /* (defined(CYCFG_BT_LP_ENABLED)) */ + static ble::vendor::cypress_ble::CyH4TransportDriver s_transport_driver( + /* TX */ cyhal_gpio_to_rtos(CYBSP_BT_UART_TX), + /* RX */ cyhal_gpio_to_rtos(CYBSP_BT_UART_RX), + /* cts */ cyhal_gpio_to_rtos(CYBSP_BT_UART_CTS), + /* rts */ cyhal_gpio_to_rtos(CYBSP_BT_UART_RTS), + /* power */ cyhal_gpio_to_rtos(CYBSP_BT_POWER), + DEF_BT_BAUD_RATE), + cyhal_gpio_to_rtos(CYBSP_BT_HOST_WAKE), cyhal_gpio_to_rtos(CYBSP_BT_DEVICE_WAKE) + ); + return s_transport_driver; +#endif /* (defined(CYCFG_BT_LP_ENABLED)) */ + +#else /* (defined(MBED_TICKLESS) && DEVICE_SLEEP && DEVICE_LPTICKER) */ + static ble::vendor::cypress_ble::CyH4TransportDriver s_transport_driver( + /* TX */ cyhal_gpio_to_rtos(CYBSP_BT_UART_TX), + /* RX */ cyhal_gpio_to_rtos(CYBSP_BT_UART_RX), + /* cts */ cyhal_gpio_to_rtos(CYBSP_BT_UART_CTS), + /* rts */ cyhal_gpio_to_rtos(CYBSP_BT_UART_RTS), + /* power */ cyhal_gpio_to_rtos(CYBSP_BT_POWER), + DEF_BT_BAUD_RATE); + return s_transport_driver; +#endif /* (defined(MBED_TICKLESS) && DEVICE_SLEEP && DEVICE_LPTICKER) */ +} diff --git a/targets/targets.json b/targets/targets.json index 82ac2b872f9..f08599fb245 100644 --- a/targets/targets.json +++ b/targets/targets.json @@ -3182,7 +3182,8 @@ }, "macros_add": [ "CM4_BOOT_BY_APPLICATION", - "QSPI_NO_SAMPLE_SHIFT" + "QSPI_NO_SAMPLE_SHIFT", + "CYW43XXX_UNBUFFERED_UART" ], "detect_code": ["0813"], "components_add": [ @@ -3191,6 +3192,12 @@ "4343W_FS", "CYW43XXX" ], + "extra_labels_add": [ + "CORDIO" + ], + "features": [ + "BLE" + ], "device_has_add": [ "USBDEVICE", "EMAC",