From ff6ebfa1c99bc4dc37f5e83d280ef9896059a9d8 Mon Sep 17 00:00:00 2001 From: Andrea Gilardoni Date: Thu, 9 Jan 2025 09:57:12 +0100 Subject: [PATCH] enabling hci through spi commands --- src/utility/HCINinaSpiTransport.cpp | 64 +++++++++++++++++++++++++++++ src/utility/HCINinaSpiTransport.h | 32 +++++++++++++++ 2 files changed, 96 insertions(+) create mode 100644 src/utility/HCINinaSpiTransport.cpp create mode 100644 src/utility/HCINinaSpiTransport.h diff --git a/src/utility/HCINinaSpiTransport.cpp b/src/utility/HCINinaSpiTransport.cpp new file mode 100644 index 00000000..38d46766 --- /dev/null +++ b/src/utility/HCINinaSpiTransport.cpp @@ -0,0 +1,64 @@ +/* + This file is part of the ArduinoBLE library. + + Copyright (c) 2024 Arduino SA + + This Source Code Form is subject to the terms of the Mozilla Public + License, v. 2.0. If a copy of the MPL was not distributed with this + file, You can obtain one at http://mozilla.org/MPL/2.0/. +*/ + +#if defined(ARDUINO_AVR_UNO_WIFI_REV2) || defined(ARDUINO_SAMD_MKRWIFI1010) || defined(ARDUINO_SAMD_NANO_33_IOT) || defined(TARGET_NANO_RP2040_CONNECT) +#include "HCINinaSpiTransport.h" +#include + +int HCINinaSpiTransportClass::begin() +{ + WiFiDrv::wifiDriverInit(); + return WiFiDrv::bleBegin(); +} + +void HCINinaSpiTransportClass::end() +{ + WiFiDrv::bleEnd(); +} + +void HCINinaSpiTransportClass::wait(unsigned long timeout) +{ + for (unsigned long start = millis(); (millis() - start) < timeout;) { + if (available()) { + break; + } + } +} + +int HCINinaSpiTransportClass::available() +{ + return WiFiDrv::bleAvailable(); +} + +int HCINinaSpiTransportClass::peek() +{ + int res=-1; + WiFiDrv::blePeek((uint8_t*)&res, 1); // read a single byte, if nothing is returned we return -1 + + return res; +} + +int HCINinaSpiTransportClass::read() +{ + int res=-1; + WiFiDrv::bleRead((uint8_t*)&res, 1); // read a single byte, if nothing is returned we return -1 + + return res; +} + +size_t HCINinaSpiTransportClass::write(const uint8_t* data, size_t length) +{ + return WiFiDrv::bleWrite(data, length); +} + +HCINinaSpiTransportClass HCINinaSpiTransport; +HCITransportInterface& HCITransport = HCINinaSpiTransport; + +#endif diff --git a/src/utility/HCINinaSpiTransport.h b/src/utility/HCINinaSpiTransport.h new file mode 100644 index 00000000..55cb1068 --- /dev/null +++ b/src/utility/HCINinaSpiTransport.h @@ -0,0 +1,32 @@ +/* + This file is part of the ArduinoBLE library. + + Copyright (c) 2024 Arduino SA + + This Source Code Form is subject to the terms of the Mozilla Public + License, v. 2.0. If a copy of the MPL was not distributed with this + file, You can obtain one at http://mozilla.org/MPL/2.0/. +*/ + +#ifndef _HCI_NINA_SPI_TRANSPORT_H_ +#define _HCI_NINA_SPI_TRANSPORT_H_ + +#include "HCITransport.h" + +class HCINinaSpiTransportClass : public HCITransportInterface { +public: + HCINinaSpiTransportClass() {} + + virtual int begin(); + virtual void end(); + + virtual void wait(unsigned long timeout); + + virtual int available(); + virtual int peek(); + virtual int read(); + + virtual size_t write(const uint8_t* data, size_t length); +}; + +#endif