123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- /*
- * 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 <http://www.gnu.org/licenses/>.
- *
- * Code by Andrew Tridgell and Siddharth Bharat Purohit
- */
- #pragma once
- #include "AP_HAL_ChibiOS.h"
- #ifndef HAL_GPIO_LED_ON
- #define HAL_GPIO_LED_ON 0
- #endif
- #ifndef HAL_GPIO_LED_OFF
- #define HAL_GPIO_LED_OFF 1
- #endif
- class ChibiOS::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;
- /* Interrupt interface - fast, for RCOutput and SPI radios */
- bool attach_interrupt(uint8_t interrupt_num,
- AP_HAL::Proc p,
- INTERRUPT_TRIGGER_TYPE mode) override;
- /* Interrupt interface - for AP_HAL::GPIO */
- bool attach_interrupt(uint8_t pin,
- irq_handler_fn_t fn,
- INTERRUPT_TRIGGER_TYPE mode) override;
- /* return true if USB cable is connected */
- bool usb_connected(void) override;
- void set_usb_connected() { _usb_connected = true; }
- /* attach interrupt via ioline_t */
- bool _attach_interrupt(ioline_t line, AP_HAL::Proc p, uint8_t mode);
-
- private:
- bool _usb_connected;
- bool _ext_started;
- bool _attach_interrupt(ioline_t line, palcallback_t cb, void *p, uint8_t mode);
- };
- class ChibiOS::DigitalSource : public AP_HAL::DigitalSource {
- public:
- DigitalSource(ioline_t line);
- void mode(uint8_t output) override;
- uint8_t read() override;
- void write(uint8_t value) override;
- void toggle() override;
- private:
- ioline_t line;
- };
|