diff --git a/libraries/AP_HAL_ESP32/GPIO.cpp b/libraries/AP_HAL_ESP32/GPIO.cpp new file mode 100644 index 0000000000000..66cbff5b31e8a --- /dev/null +++ b/libraries/AP_HAL_ESP32/GPIO.cpp @@ -0,0 +1,141 @@ +/* + * This file is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This file 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + * + * Code by Bayu Laksono + */ + +#include "AP_HAL_ESP32.h" +#include "GPIO.h" + +#include "hal/gpio_types.h" +#include "driver/gpio.h" + +using namespace ESP32; + +static gpio_num_t gpio_by_pin_num(uint8_t pin) +{ + if (pin < GPIO_NUM_MAX) { + return (gpio_num_t)pin; + } + return GPIO_NUM_NC; +} + +GPIO::GPIO() +{} + +void GPIO::init() +{} + +void GPIO::pinMode(uint8_t pin, uint8_t output) +{ + gpio_num_t g = gpio_by_pin_num(pin); + if (g != GPIO_NUM_NC) { + gpio_config_t io_conf = {}; + io_conf.intr_type = GPIO_INTR_DISABLE; + io_conf.mode = output ? GPIO_MODE_OUTPUT : GPIO_MODE_INPUT; + io_conf.pin_bit_mask = 1ULL<. + */ + +#pragma once + +#include "AP_HAL_ESP32.h" + +class ESP32::GPIO : public AP_HAL::GPIO { +public: + GPIO(); + void init() override; + void pinMode(uint8_t pin, uint8_t output) override; + uint8_t read(uint8_t pin) override; + void write(uint8_t pin, uint8_t value) override; + void toggle(uint8_t pin) override; + + /* Alternative interface: */ + AP_HAL::DigitalSource* channel(uint16_t n) override; + + /* return true if USB cable is connected */ + bool usb_connected(void) override; +}; + +class ESP32::DigitalSource : public AP_HAL::DigitalSource { +public: + DigitalSource(uint8_t pin); + void mode(uint8_t output) override; + uint8_t read() override; + void write(uint8_t value) override; + void toggle() override; +private: + uint8_t _pin; +}; diff --git a/libraries/AP_HAL_ESP32/HAL_ESP32_Class.cpp b/libraries/AP_HAL_ESP32/HAL_ESP32_Class.cpp index fb37729dec444..c0b039e386e16 100644 --- a/libraries/AP_HAL_ESP32/HAL_ESP32_Class.cpp +++ b/libraries/AP_HAL_ESP32/HAL_ESP32_Class.cpp @@ -25,6 +25,7 @@ #include "WiFiUdpDriver.h" #include "RCInput.h" #include "RCOutput.h" +#include "GPIO.h" #include "Storage.h" #include "AnalogIn.h" #include "Util.h" @@ -69,7 +70,7 @@ static Empty::Storage storageDriver; #else static ESP32::Storage storageDriver; #endif -static Empty::GPIO gpioDriver; +static ESP32::GPIO gpioDriver; #if AP_SIM_ENABLED static Empty::RCOutput rcoutDriver; #else diff --git a/libraries/AP_Notify/AP_Notify.cpp b/libraries/AP_Notify/AP_Notify.cpp index 8f0dfda3c57ba..0559fd96696b8 100644 --- a/libraries/AP_Notify/AP_Notify.cpp +++ b/libraries/AP_Notify/AP_Notify.cpp @@ -415,6 +415,10 @@ void AP_Notify::add_backends(void) ADD_BACKEND(NEW_NOTHROW AP_ToneAlarm()); #endif +// ESP32 noise makers +#elif CONFIG_HAL_BOARD == HAL_BOARD_ESP32 + ADD_BACKEND(NEW_NOTHROW Buzzer()); + // Linux noise makers #elif CONFIG_HAL_BOARD == HAL_BOARD_LINUX #if CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_NAVIO || \