The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

Changes for version 2.3633_03 - 2019-11-18

  • added rpi_sudo_check() in RPiTest. All test files that sudo needs to call this function before any work is done (fixes #144)
  • added RPI_POD, RPI_SUDO and RPI_OBJECT_COUNT testing environment variables
  • test suite PI_BOARD check is now done in the RPiTest library, and is now not required in individual test files. Test files need only specify the env vars they require specifically (eg RPI_ADC). (closes #148)
  • reworked the entire cleanup() regimen and how we manage meta data. It only ever operates on its own object, and never crosses object boundaries
  • added ability to set a custom shared memory key on a per-object basis. This allows objects within separate processes to be 'grouped' together under the same shared memory segment (eg: prod and test envs can run separately) (closes #153)
  • removed left-over includes of IPC::Shareable. We don't use that distribution any longer, so it's not included as a prereq
  • added note to PWM FAQ section that root access is needed (link to sudo config section) (closes #158)
  • added meta_key_check() class method in Meta, to check whether a shared memory segment exists or not
  • pimeta and pimetaerase scripts now croak if the shared memory segment we're trying to work on don't yet exist (fixes #156)
  • added meta_get(), meta_set() and meta_delete(). Allows manipulation of user-defined data within shared memory (closes #146)
  • bump prereq of RPi::Pin from 2.3607 to 2.3608, and RPi::GPIOExpander::MCP23017 from 1.00 to 1.01. These changes reflect testing environment variable changes (work on #159)
  • added rpi_register and rpi_register_pins attributes to allow bypassing object and pin registration in meta data (closes #162)
  • added meta_erase() in Meta to allow for complete removal of all shared memory data

Changes for version 2.3633_02 - 2019-09-21

  • TRIAL RELEASE: may not install properly, and there's a potential for shared memory corruption in certain circumstances
  • all methods that use GPIO pins now supply an appropriate comment for each pin for identification in shared memory (closes #110)
  • all the OLED tests now get the display object through a Pi object, as opposed to through the class (closes #124)
  • UUID in shared memory now has a href value, containing proc and label (closes #131)
  • when setting a new object in shared storage, we ensure there are no duplicate UUIDs present before assignment (closes #130)
  • all calls through WiringPi::API now use the C function directly as opposed to the Perl functions (closes #128)
  • multi-object, multi-script/proc tests are now automated within the test suite (as t/112 (good) and t/113 (die)) (closes #132)
  • added SIGINT multi test files
  • added meta_locks(). Manages shared memory lock section
  • serial Arduino OLED display now displays the current test file number (closes #106)
  • items that used environment variables to store data are now located within the shared memory storage (closes #129)
  • most modules are now only loaded if they are used (closes #135)
  • add blurb in FAQ that if running scripts from crontab, the RemoveIPC flag in logind.conf must be set to "no" so shared memory semaphores don't get removed upon user logoff (closes #138)
  • renamed bin/pimetadata to bin/pimeta and bin/pi-erase-metadata to bin/pimetaerase
  • bumped RPi::Serial prereq to 3.00 as it no longer relies on wiringPi (closes #136)
  • bump prereq of RPi::LCD to 2.3604 due to it relying on the old RPi::WiringPi::Constant (closes #147)

Changes for version 2.3633_01 - 2019-07-05

  • added the test platform I2C address map listing (closes #103)
  • EEPROM: add the new RPi::EEPROM::AT24C32 distribution for EEPROM access (closes #104), and tests pull the EEPROM object from a $pi object (closes #105)
  • implemented IPC::Shareable so we can read and write object and other various information (pins, test info etc) between separate processes and objects (closes #107)
  • updated RPi::Pin (and subsequently register_pin()) with the ability to store a comment/description with each pin. This will allow all objects across all processes to identify which pin is being used for what purpose (closes #108)
  • added new metadata() in Core, returns a copy of the meta data stored within the shared memory space
  • added clean_shared() in Core, (with binary 'pi-erase-metadata'). Used to wipe out the shared metadata in the event of power loss while Pi is running
  • added pimetadata and pi-erase-metadata scripts
  • cleanup() no longer tries to set pin_mode(). pin_mode() gets its data from mode_alt() which has values of 0-7, so if we're higher than mode 3, everything fails, because pin_mode() accepts only values 0-3. We just glean the mode from the 'alt' status instead
  • added checksum(), generates a random 32-byte hexidecimal string
  • added uuid(), returns the generated string set as the Pi object's UUID in the new() method
  • added dump_object(), simply dumps the object out using Data::Dumper
  • shared memory now stores the checksum of each Pi object created on the system (specifically used for cleanup identification)
  • if multiple Pi objects are being used simultaneously on the same system, we now keep track of pins, and only the pins associated with a specific object are reset back to default status; all other Pi object's pins are left registered and in tact (closes #118)
  • added new t/multi directory with a manual test setup for testing multi processes, and pin cleanups
  • completely re-wrote all signal handlers to properly house all objects within a class variable for cleanup() use
  • added dump_metadata(), uses Data::Dumper to dump the contents of the meta data within the shared memory storage
  • added installed script information to FAQ (closes #114)
  • created RPi::WiringPi::Util, and put all methods not related to Pi hardware functionality within. This includes metadata functionality etc. Also moved a bunch of methods from Core into here (closes #120)
  • added signal_handlers() and dump_signal_handlers() to Util. (closes #121)
  • added further subs to t/RPiTest
  • in t/RPiTest library, changed all exports to have an "rpi_" prefix, made it so that all subs are exported by default (as opposed to using @EXPORT_OK), and rewrote all test files to do base meta/pin checks on all files

Documentation

FAQ and Tutorial for RPi::WiringPi

Modules

Perl interface to Raspberry Pi's board, GPIO, LCDs and other various items
Core methods for RPi::WiringPi Raspberry Pi interface
Shared memory meta data management for RPI::WiringPi
Utility methods outside of Pi hardware functionality