Revision history for Device-BusPirate

0.23    2021-07-18
         * Convert to Object::Pad
         * Use signatures from perl 5.26+
         * Docs fix to explain which versino first supported multiple I²C

0.22    2021-06-04
         * Implement the helper-based Device::Chip::Adapter v0.18 ->txn API

         * Fix concurrency of multiple I²C transactions

0.21    2021-06-03
         * Unit-test various SPI concurrency scenarios
         * Implement the Device::Chip::Adapter I²C ->txn API

0.20    2020-06-19
         * Support UART protocol, transmit-only

0.19    2020-05-02
         * Use ->syswrite_exactly from Future::IO 0.04
         * Self-cycle the ->write futures in case caller doesn't hold onto
         * Added ->read_adc_voltage + example program
         * More PIRATE_DEBUG debug printing
         * Updated included Tickit example to latest Tickit::Widgets 0.30

0.18    2019-04-25 23:01:19
         * Use ->sysread_exactly from Future::IO 0.03
         * Use Future::AsyncAwait to replace less readable
           Future::Utils::repeat loops or ->then chaining

0.17    2019-04-10 02:02:05
         * Implement the ->meta_gpios Device::Chip method
         * Add some unit tests
         * Added ->set_pwm method
         * Remember to shut down I²C pullups at DESTROY time
         * Use Future::IO instead of internal custom implementation
         * Fixes for bitrate selection of SPI and I²C interfaces
         * Put termios device into raw mode by using ->cfmakeraw

0.16    2018-08-07 12:03:40
         * Allow multiple I²C adapters for mounting multiple Device::Chips on
           a shared bus

0.15    2018-06-06 11:04:50
         * Use O_NDELAY and set CLOCAL on serial port device as non-Linux OSes
           may require it for strict POSIX conformance (RT#125409)
         * Use O_NOCTTY when opening the serial port device

0.14    2018-03-13 14:14:24
         * Simplify the D:C:A SPI protocol implementation by using
           Device::Chip::ProtocolBase::SPI; thus automatically supporting the
           new ->read and ->write_then_read methods

0.13    2016/10/02 19:45:24
         * Enable pullups when configuring Device::Chip::Adapter for I²C
         * Implement ->sleep method for Device::Chip::Adapter

         * Use Future::Mutex instead of custom logic; ensures correct
           unlocking even on failure
         * Ensure I²C sends STOP conditions after write/read failures

0.12    2016/05/05 15:17:28
         * Implement the ->read I2C method of Device::Chip::Adapter 0.07
         * Ensure that the GPIO protocol instance has a ->power method

0.11    2015/11/29 01:17:38
         * Have BB mode complain about unrecognised pin names
         * Allow BB ->read method to set named pins as inputs first
         * Implement GPIO protocol in Device::Chip::Adapter implementation

         * Fix to make Device::Chip::Adapter I2C implementation actually work

0.10    2015/11/12 12:17:10
         * Updates for Device::Chip::Adapter 0.02:
            + Provide ->new_from_description constructor
            + Implement I2C protocol

0.09    2015/11/10 00:18:14
         * Longer startup timeout
         * Handle I2C slave addressing failures
         * Added a ->configure method to I2C mode to set clock speed
         * Implement a Device::Chip::Adapter class
         * Remark that Device::BusPirate::Chip is now deprecated in favour of

         * Ensure that PIRATE_DEBUG is always defined even if env. var. is
           absent (RT108508)

0.08    2015/03/03 18:48:02
         * Apply timeouts to all Bus Pirate UART communications
         * Use Struct::Dumb instead of 2-element ARRAYrefs

         * Ensure that Future::Utils::repeat isn't used for repeating failed

0.07    2015/01/15 22:34:27
         * Added ->send_then_recv method to I2C mode, allowing the use of
           registered devices which need a repeated START to operate

0.06    2014/11/01 15:29:58
         * Document and expose the $pirate->sleep method as user API
         * Added synopsis documentation to each Mode class

         * Fix for timer cancellation; avoids memory/CPU leak
         * Fix for sleep-only await with no IO read pending
         * Don't worry about Chip:: subclasses that don't define a CHIP

0.05    2014/10/20 22:04:21
         * Support I2C mode
         * Provide 'enter_mutex' method on main Device::BusPirate object;
           document its use by the SPI and I2C modes
         * Migrate power/pullup/aux peripheral methods to common Mode base

0.04    2014/09/27 17:03:35
         * Added a small Tickit-driven UI for interacting with BBIO mode
         * Expanded Mode::BB - ability to write/read multiple pins at once
         * Default the Bus Pirate location from $BUS_PIRATE env. var.

0.03    2014/09/16 17:05:51
         * Defined a model for attaching high-level 'Chip' interface modules
         * Renamed 'SPI' mode config parameters to match Bus Pirate terminlogy
         * Also support CPOL/CPHA and SPI mode numbers

0.02    2014/08/12 10:50:07
         * Support bit-bang mode directly
         * Renamed SPI's pin_3v3 configuration to open_drain, as it's clearer
           in meaning
         * Better timeouts and non-blocking behaviour
         * Allow setting SPI bus speed
         * Allow SPI bulk transfers of more than 16 bytes
         * Rename 'SCK' to 'CLK' to match Bus Pirate terminology
         * Document that ->stop doesn't return a Future

0.01    2014/08/11 16:05:39
        First version, released on an unsuspecting world.