-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Access GPIO pins on Raspberry Pi via wiringPi library -- -- This is a Haskell binding to the wiringPi library, which allows -- you to interface with the GPIO pins on the Raspberry Pi. Unlike -- some other solutions for using the Raspberry Pi's GPIO pins, wiringPi -- provides access to more advanced features, such as enabling the -- internal pull-up or pull-down resistors. @package wiringPi @version 1.0.1 -- | This is a Haskell binding to the wiringPi library. The -- functions here (mostly) correspond directly to the functions in the C -- library, except for how initialization and pin numbering are handled. -- To use this library, you must either run as root, or set the -- WIRINGPI_GPIOMEM environment variable. However, if you set -- WIRINGPI_GPIOMEM, then PWM does not work, so to use -- PWM you must be root. module System.Hardware.WiringPi -- | Represents a pin number. The constructor determines which one -- of the three pin numbering schemes is used. See the README for -- details, and a pretty picture. == returns true for the same -- physical pin, even if different pin numbering schemes are used. data Pin -- | use wiringPi pin number Wpi :: Int -> Pin -- | use BCM_GPIO numbering (these are the numbers on the Adafruit -- cobbler and on pinout.xyz). Gpio :: Int -> Pin -- | use physical pin numbers on P1 connector Phys :: Int -> Pin -- | Digital logic level. data Value LOW :: Value HIGH :: Value -- | Pin mode, used with pinMode. data Mode -- | digital input INPUT :: Mode -- | digital output OUTPUT :: Mode -- | pulse-width modulation; only supported on wiringPi pins 1, 23, 24, and -- 26 PWM_OUTPUT :: Mode -- | clock output; only supported on wiringPi pins 7, 21, 22, and 29 GPIO_CLOCK :: Mode -- | Use with pullUpDnControl to enable internal pull-up or -- pull-down resistor. data Pud -- | disable pull-up/pull-down PUD_OFF :: Pud -- | enable pull-down resistor PUD_DOWN :: Pud -- | enable pull-up resistor PUD_UP :: Pud -- | Argument to pwmSetMode to set "balanced" mode or "mark-space" -- mode. data PwmMode -- | balanced mode PWM_MODE_BAL :: PwmMode -- | mark-space mode PWM_MODE_MS :: PwmMode -- | Interrupt levels, used with wiringPiISR. data IntEdge -- | no initialization of the pin will happen INT_EDGE_SETUP :: IntEdge -- | interrupt on a falling edge of the incoming signal INT_EDGE_FALLING :: IntEdge -- | interrupt on a rising edge of the incoming signal INT_EDGE_RISING :: IntEdge -- | interrupt on both rising edge and falling edge of the incoming signal INT_EDGE_BOTH :: IntEdge -- | Value used with pwmWrite. Typically ranges from 0-1024, but the -- range can be increased up to 4096 by calling pwmSetRange. type PwmValue = Word16 -- | Initialize the wiringPi library. This is optional, because it will -- automatically be called on the first use of a wiringPi function. -- Raises an exception if the underlying C function returns an error -- code. However, in practice, the C function wiringPiSetupGpio -- terminates the program on error. Setting the environment variable -- WIRINGPI_CODES is supposed to change this behavior, but in my -- experience it doesn't, and the program is still terminated on error. wiringPiSetupGpio :: IO () pinMode :: Pin -> Mode -> IO () pullUpDnControl :: Pin -> Pud -> IO () digitalRead :: Pin -> IO Value digitalWrite :: Pin -> Value -> IO () -- | Default range is 0-1024, but it can be changed with -- pwmSetRange. pwmWrite :: Pin -> PwmValue -> IO () -- | Write 8 bits to the 8 pins that have wiringPi pin numbers 0-7. digitalWriteByte :: Word8 -> IO () pwmSetMode :: PwmMode -> IO () -- | Change the range used by pwmWrite. Default is 1024. Maxium -- is 4096. pwmSetRange :: PwmValue -> IO () -- | Change the PWM divisor. Range is 2-4095. pwmSetClock :: PwmValue -> IO () -- | Returns 1 for very early Rasbperry Pis and 2 for all others. This -- distinction is because at some point early on, the Raspberry Pi -- foundation replaced BCM_GPIO 0, 1, and 21 with BCM_GPIO 2, 3, and 27 -- at the same places on the P1 connector. Also, the user-accessible I²C -- bus changed from bus 0 to bus 1. piGpioLayout :: IO Int -- | An alias for piGpioLayout. (The wiringPi C library changed the -- name from piBoardRev to piGpioLayout in version -- 2.36, and really piGpioLayout is a much better name for it.) piBoardRev :: IO Int -- | Converts a pin to its "Broadcom GPIO" number. (In other words, the pin -- number that would be specified with the Gpio constructor.) This -- relies on unsafePerformIO internally, because the pin mapping -- depends on the board revision. Returns Nothing if the pin -- number is invalid; e. g. it is out of range or is a power or ground -- pin on the physical connector. See the pretty picture for -- details. (The picture depicts the mapping when piGpioLayout is -- 2; there is a slightly different mapping when piGpioLayout is -- 1.) pinToBcmGpio :: Pin -> Maybe Int -- | Sets up an interrupt handler for the specified pin. When the pin -- transitions as specified by IntEdge, the IO action will be -- executed. Be aware that if interrupts come quickly enough, the IO -- action might only be called once when the pin has transitioned more -- than once. If your program uses this function, you must link with -- -threaded, or deadlock may occur. You should only call -- wiringPiISR once per pin, because the underlying C library -- does not support changing or removing an interrupt handler once it has -- been added. wiringPiISR :: Pin -> IntEdge -> IO () -> IO () instance GHC.Read.Read System.Hardware.WiringPi.Pin instance GHC.Show.Show System.Hardware.WiringPi.Pin instance GHC.Classes.Ord System.Hardware.WiringPi.Pin instance GHC.Classes.Eq System.Hardware.WiringPi.Pin