Revision history for RPi-SPI 3.1802 2026-07-13 - GPIO chip-select transfers now hold the hardware CE line off with SPI_NO_CS (via WiringPi::API's spiNoCS()) so they no longer strobe a device on CE0/CE1; requires WiringPi::API 3.1804 - Added full software bit-bang mode: pass new() a hashref of clk, mosi, miso, cs (and optional mode/delay) GPIO pins to run the whole bus in software via WiringPi::API's spiBitBang() - new()'s speed parameter now croaks on an explicit non-positive or non-integer value instead of silently rewriting it to the 1MHz default; an undefined speed still means "use the default" - rw() now croaks on a non-arrayref buffer or a non-positive-integer length instead of failing deep in the transport layer - Added t/05-unit.t: HW-free coverage of channel/CS routing, speed handling, bit-bang param validation, rw() argument validation, and the rw() framing sequence for the plain, GPIO-CS (with and without SPI_NO_CS), and bit-bang paths (transport funcs stubbed - no bus, no wiring) 3.1801 2026-06-12 - Fix undefined subs in bit-bang CS path against WiringPi::API 3.18 2.3609 2018-10-03 - fix documentation that claimed the return from rw() was an array reference, where really it's an array (closes #6) 2.3608 2018-02-07 - fix issue where we were calling _channel() twice in new(), instead of one call to _channel() and one to _speed() (fixes #5). Thanks gnotoix (Github) for the report and patch! 2.3607 2017-06-28 - bump prereq ver of WiringPi::API to 2.3612 2.3606 2017-03-13 - changed version scheme from 2.36.x to to 2.360x in module and prereqs 2.36.5 2017-03-11 - we now accept a GPIO pin number as the channel. If 0 or 1 are sent in as channel, we'll use the built-in RPi SPI channel (CE0 or CE1). If a GPIO pin is sent in that is greater than 1, we'll know that this connects to your CS/SS pin on your IC, and we'll automagically bit-bang on that pin for communication, freeing up the two onboard hardware SPI channels. The API was not changed for this. (closes #1) - prereq of WiringPi::API now 2.36.7 2.36.4 2017-01-26 - changed rw() so that it now returns an array, per WiringPi::API's spiDataRW() call. This was an oversight/bug in that code - fix quoting issue in a prereq in Makefile.PL - WiringPi::API prereq now v2.36.4 2.36.2 2017-01-22 - fix params in pod, they weren't displaying correctly 2.36.1 2017-01-22 - initial release (version number matches wiringPi's, plus an incremental trailing decimal place for updates to this module - we default to 1MHz speed if not specified in the new() method - we die() if we can't open or write to the SPI bus - changed to using WiringPi::API::spiDataRW() (a custom wrapper for wiringPiSPIDataRW(), so that we can send in an aref to the C functions)