// Abstract interface for a GPIO pin // Copyright (C)2017-2023, Philip Munts dba Munts Technologies. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // * Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE // ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE // LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF // SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN // CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE // POSSIBILITY OF SUCH DAMAGE. namespace IO.Interfaces.GPIO { /// /// Abstract interface for GPIO pins. /// public interface Pin { /// /// Read/Write GPIO state property. /// bool state { get; set; } } /// /// GPIO data direction settings. /// public enum Direction { /// /// Input pin (read only) /// Input, /// /// Output pin (read or write) /// Output }; /// /// GPIO polarity settings. /// public enum Polarity { /// /// Configure GPIO pin as active low (inverted logic). /// ActiveLow, /// /// Configure GPIO pin as active high (normal logic). /// ActiveHigh }; /// /// GPIO output drive settings. /// public enum Drive { /// /// Push Pull (current source/sink) output drive. /// PushPull, /// /// Open Drain (current sink) output drive. /// OpenDrain, /// /// Open Source (current source) output drive. /// OpenSource }; /// /// GPIO input interrupt edge settings. /// public enum Edge { /// /// Configure GPIO input pin with interrupt disabled. /// None, /// /// Configure GPIO input pin to interrupt on rising edge. /// Rising, /// /// Configure GPIO pin to interrupt on falling edge. /// Falling, /// /// Configure GPIO pin to interrupt on both edges. /// Both }; }