The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
Revision history for Perl extension WiringPi::API.

2.3616  2018-03-27
        - merged PR#34; Ensure that one test always runs if PI_BOARD (Thanks
          for the pull request James Keenan!)
        - added check in Makefile.PL to ensure that we're on version 2.36+ of

2.3615  2018-03-23
        - added graceful exit from Makefile.PL if wiringPi header file is not
          found (closes #33)(Thanks James Keenan for the report)
        - EXPORT_TAGS POD did not include all tags (fixes #32)

2.3614  2017-07-08
        - added t/15-wpi_to_gpio.t to test #12
        - exposed pwm_set_range(), had missed that one previously
        - exposed pwm_set_clock(), maps to pwmSetClock(int divisor) (closes #30)
        - implemented/exposed pwm_set_mode() to set the PWM mode
        - added "PROTOTYPES: DISABLE" to XS file to quell warning (closes #31)
        - added test/ as an example of the new PWM capabilities (full
          tests will be run via RPi::WiringPi auto test platform)

2.3613  2017-07-01
        - integrated wiringSerial, providing basic serial interface support

2.3612  2017-06-24
        - added pin_mode_alt() due to an issue found in RPi::WiringPi. Upon
          that module's cleanup() routine, we need to ensure all pins are back
          to real default
        - in relation to stevieb9/rpi-lcd#6, added a warning in lcd_init() POD
          to always check the return value of the function for a -1 error, else
          if you continue on, the code will segfault

2.3611  2017-06-23
        - fix i2c_read_word(). It had the same issue with not sending $data in
          as i2c_write_word() did in the last releases Changes entry
        - the issue in the last release regarding Arduino I2C comms has been
          solved. See the forum post update in the last entry

2.3610_02 2017-06-22
        - updated Changes with proper date
        - removed all traces of Software PWM from code and documentation, as
          even Gordon himself advises not to use it
        - added file information and copyright to the .h and .xs files
        - fix bug in i2c_write_word(), $data param wasn't being sent in, which
          resulted in an argument error being thrown from the wiringPi
        - putting out as a trial. There are issues with RPi to Arduino I2C

2.3609  2017-03-26
        - fix unicode POD error
        - fix declaration issue for digitalReadByte2()
        - add a 0.02 second delay in pull_up_down(), as it wasn't returning
          fast enough to re-init the pin (this broke interrupts)
2.3608  2017-03-13
        - clarified POD for lcd_put_char() and lcd_char_def()
        - clean up test XS code
        - remove all code related to creating threads. That's out of scope for
          this project (closes #2)
        - moved all XS/C declarations into a separate API.h file from API.xs
        - changed versioning scheme from 2.36.x to 2.360x

2.36.7  2017-03-09
        - disable tests when not on a Pi board (within a BEGIN block)
        - added INLINE.h to MANIFEST file (re-closes #8)
        - fix bug in lcd_init(), where we weren't extracting the values from the
          argument hash, thereby too many args were being passed into lcdInit()
          C function (closes #27)
        - added a workaround for lcd_char_def(). For some reason, we need to
          print a zero-width char before calling the C function lcdCharDef().
          One day I'll need to sort out why (closes #26)
        - in lcd_char_def(), changed from "V0C*" to "C[8]" for pack()
        - removed duplicate test declaration in t/00-load.t
        - removed the :wiringPi and :perl export tags from POD, we only
          advertise :all now, which only exports the Perl functions (all are
          still available in code though)

2.36.6  2017-02-22
        - added in I2C support (work on #22)
        - fix a boatload of C warnings due to functions not being pre-declared
          (work on #25)
        - added -lrt to LIBS in Makefile.PL to correct a "shm_open() undefined
          symbol" error when testing with "make test" (closes #25)
        - removed taint from tests
        - added $state param for lcd_cursor_blink() in POD (closes #24)
        - fix miniscule POD error (closes #17)
        - added "barometric" to the POD's bmp180 section (closes #16)
        - POD typo fix (closes #15)
        - replaced BCM with GPIO in POD (closes #14)
        - fix output constant in get_alt() in POD (PWM_OUT) (closes #13)

2.36.5  2017-02-13
        - lower-cased Inline functions in XS file

2.36.4  2017-01-26
        - modified spiDataRW(). It now returns a Perl array containing the same
          number of elements as was sent in. A write aref is sent in (with
          dummy bytes in each element) for the size of array you want back that
          contains the read data (fixes #23)

2.36.3  2017-01-22
        - changed TOC to "TABLE OF CONTENTS" in POD (closes #18)
        - modified dist description in POD
        - added blurb in softpwm section that this functionality is quite
        - removed the code that skipped over the first interrupt in XS, as
          the new wiringPi corrected the issue internally
        - added POD for ads1115_setup()
        - added test file for wiringPi's representation of the ADS1115 ADC
        - added support for communicating on the SPI bus (spi_setup() and
        - added spiDataRW() (C), which wraps wiringPiSPIDataRW() so that we
          can accept an AV* (aref) before transforming it into the proper 
          unsigned char* before sending it to wiringPiSPIDataRW()

2.36.2  2017-01-19
        - added function table of contents to POD
        - added declaration of custom wiringPiVersion() in XS, but left it
          commented out as it will break CPAN installs at this time
        - added version.patch file in patches/, patch sent to Gordon
        - all four setup routines added to test/
        - added in wiringPi's support for the Adafruit ADS1115 analog to digital
          converter (I'm going to do a rewrite of this code to support 1015, as
          well as allowing all ADC options to be configurable, and hope it gets
          included in the next wiringPi cut)
        - added docs/, which includes Fritzing diagrams and schematics
        - added DEVELOPER FUNCTIONS section in POD for dev testing of private,
          unpublished or unreleased functions
        - added pseudoPinsSetup() for testing purposes
        - reworded POD for setup() routines, as we no longer require root level
          access to run our scripts (yay!)
        - wrote test/, fully tests the hardware PWM functionality
        - added test/, testing for pull up/down internal resistors
        - changed board_rev() references in POD to gpio_layout() (fixes #9)
        - added test/, test all pin translation functions
        - added pinModeAlt() as a developer function (allows setting any pin to
          any valid mode)
        - added digitalReadByte(), digitalReadByte2(), digitalWriteByte() and
          digitalWriteByte2() as developer functions. Reads and writes an 8-bit
          byte to/from the first and second bank of eight GPIO pins respectively
        - added setup tests, since an issue was found that causes some calls to
          crash the system (journal, RO), added root checks. Notes taken on
          sourcing the issue(s)

2.36.1  2017-01-15
        - changed version numbering scheme. x.yy.z: x.yy represents the version
          of wiringPi we fully support, and z represents updates to this Perl
        - renamed examples/ to samples/ so they don't show up on the CPAN's
          front page for the distribution
        - added exports for physPinToWpi() and phys_to_wpi() to correct a test
2.36    2017-01-14
        - major updates, we now require wiringPi v2.36+
        - changed version numbering scheme. We now match the wiringPi version
          number that we fully support
        - changed piBoardRev() to piGpioLayout(), and board_rev() to 
          gpio_laout() per changes in wiringPi.c/h
        - added analogRead()/analog_read() and analogWrite()/analog_write() to
          support the BMP180 sensor
        - added bmp180_setup()/bmp180Setup()
        - added bmp180_temp() and bmp180_pressure()
        - added POD for all the new functionality

1.05    2017-01-13
        - added support for the SR74HC595 shift register (shift_reg_setup() for
          Perl, and the original sr595Setup())
        - added examples/ for the shift register code

1.04    2016-08-22
        - implemented softPwmCreate(), softPwmWrite() and softPwmStop(), perl:
          soft_pwm_create(), soft_pwm_write(), soft_pwm_stop()
        - interrupts now work; added code to stop the erroneous extra call to
          the handler on first interrupt

1.03    2016-08-18
        - fixed call to SetupGpio(), case was wrong
        - renamed gpio_scheme() call to pin_scheme()
        - removed erroneous call to external module (pin_scheme())
        - POD cleanup, re-worded $pin descriptions, and fixed up setup*()
          routine explanations

1.02    2016-08-16
        - removed references to wiringPi pin numbering scheme being the default
        - added clarification in setup*() routine POD

1.00    2016-08-16
        - new export tags, :wiringPi exports the originally named wiringPi
          functions directly from XS. :perl exports the Perl representation
          of the functions, and :all exports them all
        - setup_sys() now exports all BCM pins with a system call with sudo,
          which alleviates the need to run as user root
        - interrupt code now implemented and working
        - renamed to WiringPi::API

0.06    2016-08-13
        - moved arg validation out of Core and into upper-layer client
          software. The idea is to keep this module as close to the C code
          as possible, so if this module is used directly, C will handle the
        - wrote custom physPinToWpi() C function, and added a phys_to_wpi()
        - we now shift off the object or class name if it is present in all
          sub calls
        - all parameter error handling out, and put it into the upper layers...
          we now pretty much call the C functions directly with little overhead

0.05    2016-08-11
        - added all of the wiringPiDev shared library LCD functions, and
          mapped them in ::Core

0.04    2016-08-10
        - wiringPiSetupPhys() has been implemented
        - added piBoardRev(), wpiPinToGpio(), physPinToGpio() and pwmSetRange()
        - added Perl->C mappings in POD

0.03    2016-08-10
        - added repo info to Makefile.PL
        - added get_alt(), maps to C getAlt(). This returns the current mode
          of a pin. Why it's not called getMode() is beyond me ;)

0.02    2016-08-10
        - added notices to POD
        - added POD for pwm_write()

0.01    2016-08-10
        - separated out from RPi::WiringPi
        - most core and system functions implemented