Revision history for RPi-Pin

2.3609    2026-06-12
        - pwm() now does a check for the UID of the calling user, and if it's
          not root, we die (closes #7)
        - add "comment"/label feature to SYNOPSIS (closes #5)
        - set_interrupt() now requires $callback to be a CODE reference (the
          WiringPi::API 3.18 self-pipe model dispatches in Perl); a string sub
          name is no longer accepted. Validates $edge, $callback and the new
          optional $debounce_us argument
        - set_interrupt()/interrupt_set() now accept an optional 4th argument,
          $debounce_us (debounce window in microseconds)
        - interrupt_set() now correctly delegates to set_interrupt() (it was
          passing the pin number in place of the edge)
        - Added background_interrupt($edge, $callback, $debounce_us): handles the
          interrupt in a forked background process (fires even while main is
          busy); returns a handle with stop/pid/running. Maps to
          WiringPi::API::background_interrupt()
        - background_interrupt() now forwards an optional trailing options
          hashref (eg. {results => 1}, which ships the handler's return value
          back to the parent via the handle's read()/fh())
        - set_interrupt() now forwards an optional trailing options hashref too
          (eg. {auto_dispatch => 1} or {auto_dispatch => 'USR1'}, which turns on
          auto-dispatch as part of arming)
        - Added lib/INTERRUPTS.md: a guide to arming interrupts on a pin
          (set_interrupt / background_interrupt, the dispatch gotcha, the results
          channel) and where the process-level dispatch methods live
        - Now uses RPi::Const internally: mode() and pwm() validate against the
          named pin-mode constants (INPUT/OUTPUT/PWM_OUT/GPIO_CLOCK) and pull()
          against PUD_OFF/PUD_DOWN/PUD_UP instead of magic integers. Added
          RPi::Const 1.04 as a prerequisite
        - Fixed a misleading inline comment in pull() that had the direction
          values backwards (it read "0 == down, 1 == up, 2 == off"; the correct
          mapping is PUD_OFF 0, PUD_DOWN 1, PUD_UP 2, as the POD already stated)
        - t/40-interrupt_and_pud.t now passes the handler as a CODE reference
          (string sub names are no longer accepted) and calls
          wait_interrupts(500) before each assertion per the 3.18 dispatch
          model
        - t/15-pwm.t now accepts the Pi 5 ALT value for GPIO 18 hardware PWM
          (ALT3/7 via RP1) in addition to the Pi 1-4 value (ALT5/2)
        - The sudo re-exec in t/15 and t/40 now uses $^X with the blib paths
          and re-feeds the gate env var; the bare 'sudo perl' resolved to the
          system perl, which died with "Can't locate RPi/Pin.pm" when the
          suite was run as non-root
        - The test suite board gate is now RPI_BOARD (ecosystem-wide rename
          from PI_BOARD); the old name is no longer honored. t/40's interrupt
          callback counter is a file lexical now instead of $ENV{PI_INTERRUPT}

2.3608  2019-10-19
        - add extra environment checks, and disable tests if required (work on
          stevieb9/rpi-wiringpi#159)
        - bump prereq WiringPi::API from 2.3612 to 2.3616

2.3607  2019-07-03
        - added comment(), allows you to associate a note or purpose to a pin.
          We've also added a comment parameter in new()

2.3606  2018-04-16
        - removed RPi::Const from t/40, it wasn't required, and eliminated a
          prereq we didn't need

2.3605  2018-04-16
        - removed 0-1023 restriction in pwm()
        - removed 'use' statement for RPi::WiringPi::Constant from t/40 as we
          deprecated that for RPi::Const, and this was breaking the test	
        - changed use statement in SYNOPSIS (closes #2)

2.3604  2017-07-06
        - remove erroneous call to pin_to_gpio() in pwm() (Reported by Francesca
           Andriolo)

2.3603 2017-06-28
        - bump ver of prereq WiringPi::API to 2.3612

2.3602  2017-06-24
        - added mode_alt(), allows changing any pin to any mode

2.3601  2017-05-27
        - separated this distribution from RPi::WiringPi::Pin
        - added set_interrupt(), deprecated interrupt_set()
        - added setup() routine in new() if not called elsewhere
        - hacked tests to conform to being a stand-alone distribution
