summaryrefslogtreecommitdiffstats
path: root/tools/iap/ipod-001-general.t
diff options
context:
space:
mode:
Diffstat (limited to 'tools/iap/ipod-001-general.t')
-rw-r--r--tools/iap/ipod-001-general.t133
1 files changed, 133 insertions, 0 deletions
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();