#!/usr/bin/perl
use v5.14;
use warnings;
use Test::More;
use Device::BusPirate;
use lib "t/lib";
use TestBusPirate;
my $bp = Device::BusPirate->new(
fh => [], # unused
);
# enter_mode
my $spi;
{
expect_write "\x00";
expect_read "BBIO1";
expect_write "\x01";
expect_read "SPI1";
$spi = $bp->enter_mode( "SPI" )->get;
ok( $spi, '->enter_mode( "SPI" )' );
check_and_clear '->enter_mode SPI';
}
# configure
{
expect_write "\x82";
expect_read "\x01";
$spi->configure( mode => 0 )->get;
expect_write "\x80";
expect_read "\x01";
$spi->configure( ckp => 0, cke => 0 )->get;
expect_write "\x84";
expect_read "\x01";
$spi->configure( cpol => 1, cpha => 1 )->get;
expect_write "\x63";
expect_read "\x01";
$spi->configure( speed => "1M" )->get;
check_and_clear '->configure';
}
# chip_select
{
expect_write "\x02";
expect_read "\x01";
$spi->chip_select( 0 )->get;
check_and_clear '->chip_select';
}
# writeread
{
expect_write "\x11\x12\x34";
expect_read "\x01\x56\x78";
is( $spi->writeread( "\x12\x34" )->get, "\x56\x78",
'->writeread yields bytes' );
check_and_clear '->writeread';
}
# writeread_cs
{
expect_write "\x02";
expect_read "\x01";
expect_write "\x11\x12\x34";
expect_read "\x01\x56\x78";
expect_write "\x03";
expect_read "\x01";
is( $spi->writeread_cs( "\x12\x34" )->get, "\x56\x78",
'->writeread_cs yields bytes' );
check_and_clear '->writeread_cs';
}
# 2x concurrent writeread
{
expect_write "\x11AA";
expect_read "\x01CC";
expect_write "\x11BB";
expect_read "\x01DD";
is_deeply( [ Future->needs_all(
$spi->writeread( "AA" ),
$spi->writeread( "BB" ),
)->get ], [qw( CC DD )], 'concurrent ->writeread yields results' );
check_and_clear 'concurrent ->writeread';
}
# 2x concurrent writeread_cs
{
expect_write "\x02";
expect_read "\x01";
expect_write "\x11EE";
expect_read "\x01GG";
expect_write "\x03";
expect_read "\x01";
expect_write "\x02";
expect_read "\x01";
expect_write "\x11FF";
expect_read "\x01HH";
expect_write "\x03";
expect_read "\x01";
is_deeply( [ Future->needs_all(
$spi->writeread_cs( "EE" ),
$spi->writeread_cs( "FF" ),
)->get ], [qw( GG HH )], 'concurrent ->writeread_cs yields results' );
check_and_clear 'concurrent ->writeread_cs';
}
# aux
{
expect_write "\x43";
expect_read "\x01";
$spi->aux( 1 )->get;
check_and_clear '->aux';
}
# power, pullups
{
expect_write "\x4B";
expect_read "\x01";
$spi->power( 1 )->get;
expect_write "\x4F";
expect_read "\x01";
$spi->pullup( 1 )->get;
check_and_clear '->power and ->pullup';
}
done_testing;