From b170c73f922e3457b923b4e7fcbec794a8885c77 Mon Sep 17 00:00:00 2001 From: Ralf Ertzinger Date: Sat, 22 Jun 2013 10:08:23 +0100 Subject: Updated IAP commands. Originally written and uploaded by Lalufu (Ralf Ertzinger) in Feb 2012. They have been condensed into a single patch and some further additions by Andy Potter. Currently includes Authentication V2 support from iPod to Accessory, RF/BlueTooth transmitter support, selecting a playlist and selecting a track from the current playlist. Does not support uploading Album Art or podcasts. Has been tested on the following iPods, 4th Gen Grayscale, 4th Gen Color/Photo, Mini 2nd Gen, Nano 1st Gen and Video 5.5Gen. Change-Id: Ie8fc098361844132f0228ecbe3c48da948726f5e Co-Authored by: Andy Potter Reviewed-on: http://gerrit.rockbox.org/533 Reviewed-by: Frank Gevaerts --- tools/iap/ipod-001-general.t | 133 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 133 insertions(+) create mode 100644 tools/iap/ipod-001-general.t (limited to 'tools/iap/ipod-001-general.t') diff --git a/tools/iap/ipod-001-general.t b/tools/iap/ipod-001-general.t new file mode 100644 index 0000000000..f2b5451dbc --- /dev/null +++ b/tools/iap/ipod-001-general.t @@ -0,0 +1,133 @@ +use Test::More qw( no_plan ); +use strict; + +BEGIN { use_ok('Device::iPod'); } +require_ok('Device::iPod'); + +my $ipod = Device::iPod->new(); +my $m; +my ($l, $c, $p); + +isa_ok($ipod, 'Device::iPod'); + +$ipod->{-debug} = 1; +$ipod->open("/dev/ttyUSB0"); + +$m = $ipod->sendraw("\xFF" x 16); # Wake up and sync +ok($m == 1, "Wakeup sent"); + +# Empty the buffer +$ipod->emptyrecv(); + +# Send a command with wrong checksum +# We expect no response (Timeout) +$m = $ipod->sendraw("\xff\x55\x02\x00\x03\x00"); +ok($m == 1, "Broken checksum sent"); +($l, $c, $p) = $ipod->recvmsg(); +subtest "Timeout" => sub { + ok(!defined($l), "No response received"); + like($ipod->error(), '/Timeout/', "Timeout reading response"); +}; + +# Empty the buffer +$ipod->emptyrecv(); + +# Send a too short command +# We expect an ACK Bad Parameter as response +$m = $ipod->sendmsg(0x00, 0x13, ""); +ok($m == 1, "Short command sent"); +($l, $c, $p) = $ipod->recvmsg(); +subtest "ACK Bad Parameter" => sub { + ok(defined($l), "Response received"); + is($l, 0x00, "Response lingo"); + is($c, 0x02, "Response command"); + is($p, "\x04\x13", "Response payload"); +}; + +# Empty the buffer +$ipod->emptyrecv(); + +# Send an undefined lingo +# We expect a timeout +$m = $ipod->sendmsg(0x1F, 0x00); +ok($m == 1, "Undefined lingo sent"); +($l, $c, $p) = $ipod->recvmsg(); +subtest "Timeout" => sub { + ok(!defined($l), "No response received"); + like($ipod->error(), '/Timeout/', "Timeout reading response"); +}; + +# Empty the buffer +$ipod->emptyrecv(); + +# IdentifyDeviceLingoes(lingos=0x80000011, options=0x00, deviceid=0x00) +# We expect an ACK Command Failed message as response +$m = $ipod->sendmsg(0x00, 0x13, "\x80\x00\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00"); +ok($m == 1, "IdentifyDeviceLingoes(lingos=0x80000011, options=0x00, deviceid=0x00) sent"); +($l, $c, $p) = $ipod->recvmsg(); +subtest "ACK Command Failed" => sub { + ok(defined($l), "Response received"); + is($l, 0x00, "Response lingo"); + is($c, 0x02, "Response command"); + is($p, "\x02\x13", "Response payload"); +}; + +# Empty the buffer +$ipod->emptyrecv(); + +# Identify(lingo=0xFF) +# We expect no response (timeout) +$m = $ipod->sendmsg(0x00, 0x01, "\xFF"); +ok($m == 1, "Identify(lingo=0xFF) sent"); +($l, $c, $p) = $ipod->recvmsg(); +subtest "Timeout" => sub { + ok(!defined($l), "No response received"); + like($ipod->error(), '/Timeout/', "Timeout reading response"); +}; + +# Empty the buffer +$ipod->emptyrecv(); + +# IdentifyDeviceLingoes(lingos=0x10, options=0x00, deviceid=0x00) +# We expect an ACK Command Failed message as response +$m = $ipod->sendmsg(0x00, 0x13, "\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00"); +ok($m == 1, "IdentifyDeviceLingoes(lingos=0x10, options=0x00, deviceid=0x00) sent"); +($l, $c, $p) = $ipod->recvmsg(); +subtest "ACK Command Failed" => sub { + ok(defined($l), "Response received"); + is($l, 0x00, "Response lingo"); + is($c, 0x02, "Response command"); + is($p, "\x02\x13", "Response payload"); +}; + +# Empty the buffer +$ipod->emptyrecv(); +# IdentifyDeviceLingoes(lingos=0x00, options=0x00, deviceid=0x00) +# We expect an ACK Command Failed message as response +$m = $ipod->sendmsg(0x00, 0x13, "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"); +ok($m == 1, "IdentifyDeviceLingoes(lingos=0x00, options=0x00, deviceid=0x00) sent"); +($l, $c, $p) = $ipod->recvmsg(); +subtest "ACK Command Failed" => sub { + ok(defined($l), "Response received"); + is($l, 0x00, "Response lingo"); + is($c, 0x02, "Response command"); + is($p, "\x02\x13", "Response payload"); +}; + +# Empty the buffer +$ipod->emptyrecv(); + +# RequestLingoProtocolVersion(lingo=0xFF) +# We expect an ACK Bad Parameter message as response +$m = $ipod->sendmsg(0x00, 0x0F, "\xFF"); +ok($m == 1, "RequestLingoProtocolVersion(lingo=0xFF) sent"); +($l, $c, $p) = $ipod->recvmsg(); +subtest "ACK Bad Parameter" => sub { + ok(defined($l), "Response received"); + is($l, 0x00, "Response lingo"); + is($c, 0x02, "Response command"); + is($p, "\x04\x0F", "Response payload"); +}; + +# Empty the buffer +$ipod->emptyrecv(); -- cgit v1.2.3