summaryrefslogtreecommitdiffstats
path: root/tools/iap/ipod-002-lingo0.t
diff options
context:
space:
mode:
Diffstat (limited to 'tools/iap/ipod-002-lingo0.t')
-rw-r--r--tools/iap/ipod-002-lingo0.t277
1 files changed, 277 insertions, 0 deletions
diff --git a/tools/iap/ipod-002-lingo0.t b/tools/iap/ipod-002-lingo0.t
new file mode 100644
index 0000000000..c3bb676553
--- /dev/null
+++ b/tools/iap/ipod-002-lingo0.t
@@ -0,0 +1,277 @@
+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();
+
+# IdentifyDeviceLingoes(lingos=0x01, options=0x00, deviceid=0x00)
+# We expect an ACK OK message as response
+$m = $ipod->sendmsg(0x00, 0x13, "\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00");
+ok($m == 1, "IdentifyDeviceLingoes(lingos=0x01, options=0x00, deviceid=0x00) sent");
+($l, $c, $p) = $ipod->recvmsg();
+subtest "ACK OK" => sub {
+ ok(defined($l), "Response received");
+ is($l, 0x00, "Response lingo");
+ is($c, 0x02, "Response command");
+ is($p, "\x00\x13", "Response payload");
+};
+
+# Empty the buffer
+$ipod->emptyrecv();
+
+# RequestRemoteUIMode
+# We expect an ACK Bad Parameter as response, as we have not
+# negotiated lingo 0x04
+$m = $ipod->sendmsg(0x00, 0x03);
+ok($m == 1, "RequestRemoteUIMode 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\x03", "Response payload");
+};
+
+# Empty the buffer
+$ipod->emptyrecv();
+
+# EnterRemoteUIMode
+# We expect an ACK Bad Parameter as response, as we have not
+# negotiated lingo 0x04
+$m = $ipod->sendmsg(0x00, 0x05);
+ok($m == 1, "EnterRemoteUIMode 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\x05", "Response payload");
+};
+
+# Empty the buffer
+$ipod->emptyrecv();
+
+# ExitRemoteUIMode
+# We expect an ACK Bad Parameter as response, as we have not
+# negotiated lingo 0x04
+$m = $ipod->sendmsg(0x00, 0x06);
+ok($m == 1, "ExitRemoteUIMode 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\x06", "Response payload");
+};
+
+# Empty the buffer
+$ipod->emptyrecv();
+
+# RequestiPodName
+# We expect a ReturniPodName packet
+$m = $ipod->sendmsg(0x00, 0x07);
+ok($m == 1, "RequestiPodName sent");
+($l, $c, $p) = $ipod->recvmsg();
+subtest "ReturniPodName" => sub {
+ ok(defined($l), "Response received");
+ is($l, 0x00, "Response lingo");
+ is($c, 0x08, "Response command");
+ like($p, "/^[^\\x00]*\\x00\$/", "Response payload");
+};
+
+# Empty the buffer
+$ipod->emptyrecv();
+
+# RequestiPodSoftwareVersion
+# We expect a ReturniPodSoftwareVersion packet
+$m = $ipod->sendmsg(0x00, 0x09);
+ok($m == 1, "RequestiPodSoftwareVersion sent");
+($l, $c, $p) = $ipod->recvmsg();
+subtest "ReturniPodSoftwareVersion" => sub {
+ ok(defined($l), "Response received");
+ is($l, 0x00, "Response lingo");
+ is($c, 0x0A, "Response command");
+ like($p, "/^...\$/", "Response payload");
+};
+
+# Empty the buffer
+$ipod->emptyrecv();
+
+# RequestiPodSerialNumber
+# We expect a ReturniPodSerialNumber packet
+$m = $ipod->sendmsg(0x00, 0x0B);
+ok($m == 1, "RequestiPodSerialNumber sent");
+($l, $c, $p) = $ipod->recvmsg();
+subtest "ReturniPodSerialNumber" => sub {
+ ok(defined($l), "Response received");
+ is($l, 0x00, "Response lingo");
+ is($c, 0x0C, "Response command");
+ like($p, "/^[^\\x00]*\\x00\$/", "Response payload");
+};
+
+# Empty the buffer
+$ipod->emptyrecv();
+
+# RequestiPodModelNum
+# We expect a ReturniPodModelNum packet
+$m = $ipod->sendmsg(0x00, 0x0D);
+ok($m == 1, "RequestiPodModelNum sent");
+($l, $c, $p) = $ipod->recvmsg();
+subtest "ReturniPodModelNum" => sub {
+ ok(defined($l), "Response received");
+ is($l, 0x00, "Response lingo");
+ is($c, 0x0E, "Response command");
+ like($p, "/^....[^\\x00]*\\x00\$/", "Response payload");
+};
+
+# Empty the buffer
+$ipod->emptyrecv();
+
+# RequestLingoProtocolVersion(lingo=0x00)
+# We expect a ReturnLingoProtocolVersion packet
+$m = $ipod->sendmsg(0x00, 0x0F, "\x00");
+ok($m == 1, "RequestLingoProtocolVersion(lingo=0x00) sent");
+($l, $c, $p) = $ipod->recvmsg();
+subtest "ReturnLingoProtocolVersion" => sub {
+ ok(defined($l), "Response received");
+ is($l, 0x00, "Response lingo");
+ is($c, 0x10, "Response command");
+ like($p, "/^\\x00..\$/", "Response payload");
+};
+
+# Empty the buffer
+$ipod->emptyrecv();
+
+# IdentifyDeviceLingoes(lingos=0x11, options=0x00, deviceid=0x00)
+# We expect an ACK OK message as response
+$m = $ipod->sendmsg(0x00, 0x13, "\x00\x00\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00");
+ok($m == 1, "IdentifyDeviceLingoes(lingos=0x11, options=0x00, deviceid=0x00) sent");
+($l, $c, $p) = $ipod->recvmsg();
+subtest "ACK OK" => sub {
+ ok(defined($l), "Response received");
+ is($l, 0x00, "Response lingo");
+ is($c, 0x02, "Response command");
+ is($p, "\x00\x13", "Response payload");
+};
+
+# Empty the buffer
+$ipod->emptyrecv();
+
+# RequestRemoteUIMode
+# We expect an ReturnRemoteUIMode packet specifying standard mode
+$m = $ipod->sendmsg(0x00, 0x03);
+ok($m == 1, "RequestRemoteUIMode sent");
+($l, $c, $p) = $ipod->recvmsg();
+subtest "ReturnRemoteUIMode" => sub {
+ ok(defined($l), "Response received");
+ is($l, 0x00, "Response lingo");
+ is($c, 0x04, "Response command");
+ is($p, "\x00", "Response payload");
+};
+
+# Empty the buffer
+$ipod->emptyrecv();
+
+# EnterRemoteUIMode
+# We expect an ACK Pending packet, followed by an ACK OK packet
+$m = $ipod->sendmsg(0x00, 0x05);
+ok($m == 1, "EnterRemoteUIMode sent");
+($l, $c, $p) = $ipod->recvmsg();
+subtest "ACK Pending" => sub {
+ ok(defined($l), "Response received");
+ is($l, 0x00, "Response lingo");
+ is($c, 0x02, "Response command");
+ like($p, "/^\\x06\\x05/", "Response payload");
+};
+($l, $c, $p) = $ipod->recvmsg();
+subtest "ACK OK" => sub {
+ ok(defined($l), "Response received");
+ is($l, 0x00, "Response lingo");
+ is($c, 0x02, "Response command");
+ is($p, "\x00\x05", "Response payload");
+};
+
+# Empty the buffer
+$ipod->emptyrecv();
+
+# RequestRemoteUIMode
+# We expect an ReturnRemoteUIMode packet specifying extended mode
+$m = $ipod->sendmsg(0x00, 0x03);
+ok($m == 1, "RequestRemoteUIMode sent");
+($l, $c, $p) = $ipod->recvmsg();
+subtest "ReturnRemoteUIMode" => sub {
+ ok(defined($l), "Response received");
+ is($l, 0x00, "Response lingo");
+ is($c, 0x04, "Response command");
+ isnt($p, "\x00", "Response payload");
+};
+
+# Empty the buffer
+$ipod->emptyrecv();
+
+# ExitRemoteUIMode
+# We expect an ACK Pending packet, followed by an ACK OK packet
+$m = $ipod->sendmsg(0x00, 0x06);
+ok($m == 1, "ExitRemoteUIMode sent");
+($l, $c, $p) = $ipod->recvmsg();
+subtest "ACK Pending" => sub {
+ ok(defined($l), "Response received");
+ is($l, 0x00, "Response lingo");
+ is($c, 0x02, "Response command");
+ like($p, "/^\\x06\\x06/", "Response payload");
+};
+($l, $c, $p) = $ipod->recvmsg();
+subtest "ACK OK" => sub {
+ ok(defined($l), "Response received");
+ is($l, 0x00, "Response lingo");
+ is($c, 0x02, "Response command");
+ is($p, "\x00\x06", "Response payload");
+};
+
+# Empty the buffer
+$ipod->emptyrecv();
+
+# RequestRemoteUIMode
+# We expect an ReturnRemoteUIMode packet specifying standard mode
+$m = $ipod->sendmsg(0x00, 0x03);
+ok($m == 1, "RequestRemoteUIMode sent");
+($l, $c, $p) = $ipod->recvmsg();
+subtest "ReturnRemoteUIMode" => sub {
+ ok(defined($l), "Response received");
+ is($l, 0x00, "Response lingo");
+ is($c, 0x04, "Response command");
+ is($p, "\x00", "Response payload");
+};
+
+# Empty the buffer
+$ipod->emptyrecv();
+
+# Send an undefined command
+# We expect an ACK Bad Parameter as response
+$m = $ipod->sendmsg(0x00, 0xFF);
+ok($m == 1, "Undefined 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\xFF", "Response payload");
+};
+
+# Empty the buffer
+$ipod->emptyrecv();