From 2a35e72af28904a247f01d4a18a6d1e5a1daea62 Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Mon, 3 Jul 2023 20:03:55 +0200 Subject: [PATCH 1/2] wip: add support for UNO R4 WiFi Needs UNOR4USBBridge firmware >= 0.2.0 --- src/utility/HCIUartTransport.cpp | 2 +- src/utility/HCIVirtualTransportAT.cpp | 112 ++++++++++++++++++++++++++ src/utility/HCIVirtualTransportAT.h | 42 ++++++++++ 3 files changed, 155 insertions(+), 1 deletion(-) create mode 100644 src/utility/HCIVirtualTransportAT.cpp create mode 100644 src/utility/HCIVirtualTransportAT.h diff --git a/src/utility/HCIUartTransport.cpp b/src/utility/HCIUartTransport.cpp index 3219268d..d3c44d8f 100644 --- a/src/utility/HCIUartTransport.cpp +++ b/src/utility/HCIUartTransport.cpp @@ -17,7 +17,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -#if !defined(ARDUINO_ARCH_MBED) && !defined(ESP32) || defined(TARGET_NANO_RP2040_CONNECT) +#if !defined(ARDUINO_ARCH_MBED) && !defined(ESP32) && !defined(ARDUINO_UNOR4_WIFI) || defined(TARGET_NANO_RP2040_CONNECT) #include "HCIUartTransport.h" diff --git a/src/utility/HCIVirtualTransportAT.cpp b/src/utility/HCIVirtualTransportAT.cpp new file mode 100644 index 00000000..7b3a24a9 --- /dev/null +++ b/src/utility/HCIVirtualTransportAT.cpp @@ -0,0 +1,112 @@ +/* + This file is part of the ArduinoBLE library. + Copyright (c) 2018 Arduino SA. All rights reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#if defined(ARDUINO_UNOR4_WIFI) + +#include "HCIVirtualTransportAT.h" + +extern ModemClass modem; + +HCIVirtualTransportATClass::HCIVirtualTransportATClass() +{ +} + +HCIVirtualTransportATClass::~HCIVirtualTransportATClass() +{ +} + +static RingBufferN<258> buf; + +int HCIVirtualTransportATClass::begin() +{ + // TODO: add this helper + //modem.debug(Serial); + buf.clear(); + //modem.debug(true); + std::string res = ""; + modem.begin(); + if (modem.write(std::string(PROMPT(_HCI_BEGIN)), res, CMD(_HCI_BEGIN))) { + return 1; + } + return 0; +} + +void HCIVirtualTransportATClass::end() +{ +} + +void HCIVirtualTransportATClass::wait(unsigned long timeout) +{ + std::string res = ""; + modem.write(std::string(PROMPT(_HCI_WAIT)), res, "%d\n\r", CMD_WRITE(_HCI_WAIT), timeout); +} + +int HCIVirtualTransportATClass::available() +{ + std::string res = ""; + if (buf.available()) { + return buf.available(); + } + if (modem.write(std::string(PROMPT(_HCI_AVAILABLE)), res, CMD_READ(_HCI_AVAILABLE))) { + return atoi(res.c_str()); + } + + return 0; +} + +// never called +int HCIVirtualTransportATClass::peek() +{ + return -1; +} + +int HCIVirtualTransportATClass::read() +{ + uint8_t c; + std::string res = ""; + if (buf.available()) { + return buf.read_char(); + } + modem.avoid_trim_results(); + modem.read_using_size(); + if (modem.write(std::string(PROMPT(_HCI_READ)), res, CMD(_HCI_READ))) { + for(int i = 0; i < res.size(); i++) { + buf.store_char((uint8_t)res[i]); + } + return buf.read_char(); + } + + return -1; +} + +size_t HCIVirtualTransportATClass::write(const uint8_t* data, size_t length) +{ + std::string res = ""; + modem.write_nowait(std::string(PROMPT(_HCI_WRITE)), res, "%s%d\r\n" , CMD_WRITE(_HCI_WRITE), length); + if(modem.passthrough(data, length)) { + return length; + } + return 0; +} + +HCIVirtualTransportATClass HCIVirtualTransportAT; + +HCITransportInterface& HCITransport = HCIVirtualTransportAT; + +#endif diff --git a/src/utility/HCIVirtualTransportAT.h b/src/utility/HCIVirtualTransportAT.h new file mode 100644 index 00000000..8e29801d --- /dev/null +++ b/src/utility/HCIVirtualTransportAT.h @@ -0,0 +1,42 @@ +/* + This file is part of the ArduinoBLE library. + Copyright (c) 2018 Arduino SA. All rights reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include "HCITransport.h" +#include +#include +#include + +#include "WiFiS3.h" + +class HCIVirtualTransportATClass : public HCITransportInterface { +public: + HCIVirtualTransportATClass(); + virtual ~HCIVirtualTransportATClass(); + + 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); +}; \ No newline at end of file From 742ba783a17fce4ce8d3ddf8992573718f99d37f Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Tue, 11 Jul 2023 09:30:29 +0200 Subject: [PATCH 2/2] unor4wifi: fix metadata and gh action --- .github/workflows/compile-examples.yml | 1 + README.md | 4 +++- library.properties | 4 ++-- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/.github/workflows/compile-examples.yml b/.github/workflows/compile-examples.yml index b33d6c75..81e843dd 100644 --- a/.github/workflows/compile-examples.yml +++ b/.github/workflows/compile-examples.yml @@ -15,6 +15,7 @@ jobs: - arduino:megaavr:uno2018:mode=on - arduino:mbed:nano33ble - arduino:mbed_nano:nanorp2040connect + - arduino:renesas_uno:unor4wifi steps: - uses: actions/checkout@v3 diff --git a/README.md b/README.md index 9ec934a3..6808502c 100644 --- a/README.md +++ b/README.md @@ -2,12 +2,14 @@ [![Compile Examples Status](https://github.com/arduino-libraries/ArduinoBLE/workflows/Compile%20Examples/badge.svg)](https://github.com/arduino-libraries/ArduinoBLE/actions?workflow=Compile+Examples) [![Spell Check Status](https://github.com/arduino-libraries/ArduinoBLE/workflows/Spell%20Check/badge.svg)](https://github.com/arduino-libraries/ArduinoBLE/actions?workflow=Spell+Check) -Enables Bluetooth® Low Energy connectivity on the Arduino MKR WiFi 1010, Arduino UNO WiFi Rev.2, Arduino Nano 33 IoT, and Arduino Nano 33 BLE. +Enables Bluetooth® Low Energy connectivity on the Arduino MKR WiFi 1010, Arduino UNO WiFi Rev.2, Arduino Nano 33 IoT, Arduino Nano 33 BLE, Arduino Portenta H7, Arduino Giga R1 and Arduino UNO R4 WiFi. This library supports creating a Bluetooth® Low Energy peripheral & central mode. For the Arduino MKR WiFi 1010, Arduino UNO WiFi Rev.2, and Arduino Nano 33 IoT boards, it requires the NINA module to be running [Arduino NINA-W102 firmware](https://github.com/arduino/nina-fw) v1.2.0 or later. +For the Arduino UNO R4 WiFi, it requires the ESP32-S3 module to be running [firmware](https://github.com/arduino/uno-r4-wifi-usb-bridge) v0.2.0 or later. + For more information about this library please visit us at: https://www.arduino.cc/en/Reference/ArduinoBLE diff --git a/library.properties b/library.properties index 929fa0fd..718b6066 100644 --- a/library.properties +++ b/library.properties @@ -2,9 +2,9 @@ name=ArduinoBLE version=1.3.5 author=Arduino maintainer=Arduino -sentence=Enables Bluetooth® Low Energy connectivity on the Arduino MKR WiFi 1010, Arduino UNO WiFi Rev.2, Arduino Nano 33 IoT, Arduino Nano 33 BLE and Nicla Sense ME. +sentence=Enables Bluetooth® Low Energy connectivity on the Arduino MKR WiFi 1010, Arduino UNO WiFi Rev.2, Arduino Nano 33 IoT, Arduino Nano 33 BLE, Nicla Sense ME and UNO R4 WiFi. paragraph=This library supports creating a Bluetooth® Low Energy peripheral & central mode. category=Communication url=https://www.arduino.cc/en/Reference/ArduinoBLE -architectures=samd,megaavr,mbed,apollo3,mbed_nano,mbed_portenta,mbed_nicla,esp32,mbed_giga,renesas,renesas_portenta,mbed_opta +architectures=samd,megaavr,mbed,apollo3,mbed_nano,mbed_portenta,mbed_nicla,esp32,mbed_giga,renesas,renesas_portenta,mbed_opta,renesas_uno includes=ArduinoBLE.h