summaryrefslogtreecommitdiffstats
path: root/tools/iap/ipod-001-general.t
blob: f2b5451dbc669ef1dd8d245f11a4c56404286ff4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
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();