1
0
Fork 0
forked from len0rd/rockbox

iap: order lingo 0x00 commands by id and add comments

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@29776 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Bertrik Sikken 2011-04-24 19:05:23 +00:00
parent 2f215da9c3
commit abf503496b

View file

@ -220,7 +220,7 @@ static void iap_set_remote_volume(void)
static void cmd_ok_mode0(unsigned char cmd) static void cmd_ok_mode0(unsigned char cmd)
{ {
unsigned char data[] = {0x00, 0x02, 0x00, 0x13}; unsigned char data[] = {0x00, 0x02, 0x00, 0x00};
data[3] = cmd; /* respond with cmd */ data[3] = cmd; /* respond with cmd */
iap_send_pkt(data, sizeof(data)); iap_send_pkt(data, sizeof(data));
} }
@ -229,42 +229,71 @@ static void iap_handlepkt_mode0(void)
{ {
unsigned int cmd = serbuf[2]; unsigned int cmd = serbuf[2];
switch (cmd) { switch (cmd) {
/* Identify */
case 0x24: case 0x01:
{ {
/* ipod video send this */ /* FM transmitter sends this: */
unsigned char data[] = {0x00, 0x25, 0x00, 0x00, 0x00, /* FF 55 06 00 01 05 00 02 01 F1 (mode switch) */
0x00, 0x00, 0x00, 0x00, 0x01}; if(serbuf[3] == 0x05)
{
sleep(HZ/3);
/* RF Transmitter: Begin transmission */
unsigned char data[] = {0x05, 0x02};
iap_send_pkt(data, sizeof(data));
}
/* FM remote sends this: */
/* FF 55 03 00 01 02 FA (1st thing sent) */
else if(serbuf[3] == 0x02)
{
/* useful only for apple firmware */
}
break;
}
/* EnterRemoteUIMode, FM transmitter sends FF 55 02 00 05 F9 */
case 0x05:
{
/* ACK Pending (3000 ms) */
unsigned char data[] = {0x00, 0x02, 0x06,
0x05, 0x00, 0x00, 0x0B, 0xB8};
iap_send_pkt(data, sizeof(data));
cmd_ok_mode0(cmd);
break;
}
/* RequestiPodSoftwareVersion, Ipod FM remote sends FF 55 02 00 09 F5 */
case 0x09:
{
/* ReturniPodSoftwareVersion, ipod5G firmware version */
unsigned char data[] = {0x00, 0x0A, 0x01, 0x02, 0x01};
iap_send_pkt(data, sizeof(data)); iap_send_pkt(data, sizeof(data));
break; break;
} }
case 0x18: /* RequestiPodModelNum */
case 0x0D:
{ {
/* ciphered authentication command */ /* ipod is supposed to work only with 5G and nano 2G */
/* Isn't used since we don't send the 0x00 0x17 command */ /*{0x00, 0x0E, 0x00, 0x0B, 0x00, 0x05, 0x50, 0x41, 0x31, 0x34,
0x37, 0x4C, 0x4C, 0x00}; PA147LL (IPOD 5G 60 GO) */
/* ReturniPodModelNum */
unsigned char data[] = {0x00, 0x0E, 0x00, 0x0B, 0x00, 0x10,
'R', 'O', 'C', 'K', 'B', 'O', 'X', 0x00};
iap_send_pkt(data, sizeof(data));
break; break;
} }
case 0x15: /* RequestLingoProtocolVersion */
case 0x0F:
{ {
unsigned char data0[] = {0x00, 0x16, 0x00}; /* ReturnLingoProtocolVersion */
iap_send_pkt(data0, sizeof(data0)); unsigned char data[] = {0x00, 0x10, 0x00, 0x01, 0x05};
unsigned char data1[] = {0x00, 0x27, 0x00}; data[2] = serbuf[3];
iap_send_pkt(data1, sizeof(data1)); iap_send_pkt(data, sizeof(data));
/* authentication ack, mandatory to enable some hardware */
unsigned char data2[] = {0x00, 0x19, 0x00};
iap_send_pkt(data2, sizeof(data2));
if (radio_present == 1)
{
/* get tuner capacities */
unsigned char data3[] = {0x07, 0x01};
iap_send_pkt(data3, sizeof(data3));
}
iap_set_remote_volume();
break; break;
} }
/* IdentifyDeviceLingoes */
case 0x13: case 0x13:
{ {
cmd_ok_mode0(cmd); cmd_ok_mode0(cmd);
@ -273,8 +302,10 @@ static void iap_handlepkt_mode0(void)
/* FM transmitter sends this: */ /* FM transmitter sends this: */
/* FF 55 0E 00 13 00 00 00 35 00 00 00 04 00 00 00 00 A6 (??)*/ /* FF 55 0E 00 13 00 00 00 35 00 00 00 04 00 00 00 00 A6 (??)*/
{ {
/* GetAccessoryInfo */
unsigned char data2[] = {0x00, 0x27, 0x00}; unsigned char data2[] = {0x00, 0x27, 0x00};
iap_send_pkt(data2, sizeof(data2)); iap_send_pkt(data2, sizeof(data2));
/* RF Transmitter: Begin transmission */
unsigned char data3[] = {0x05, 0x02}; unsigned char data3[] = {0x05, 0x02};
iap_send_pkt(data3, sizeof(data3)); iap_send_pkt(data3, sizeof(data3));
} }
@ -285,69 +316,49 @@ static void iap_handlepkt_mode0(void)
/* FF 55 0E 00 13 00 00 00 8D 00 00 00 0E 00 00 00 03 41 */ /* FF 55 0E 00 13 00 00 00 8D 00 00 00 0E 00 00 00 03 41 */
if (serbuf[6] |= 0x80) if (serbuf[6] |= 0x80)
radio_present = 1; radio_present = 1;
/* GetDevAuthenticationInfo */
unsigned char data4[] = {0x00, 0x14}; unsigned char data4[] = {0x00, 0x14};
iap_send_pkt(data4, sizeof(data4)); iap_send_pkt(data4, sizeof(data4));
} }
break; break;
} }
/* Init */ /* RetDevAuthenticationInfo */
case 0x0F: case 0x15:
{ {
unsigned char data[] = {0x00, 0x10, 0x00, 0x01, 0x05}; /* AckDevAuthenticationInfo */
data[2] = serbuf[3]; unsigned char data0[] = {0x00, 0x16, 0x00};
iap_send_pkt(data, sizeof(data)); iap_send_pkt(data0, sizeof(data0));
break; /* GetAccessoryInfo */
} unsigned char data1[] = {0x00, 0x27, 0x00};
iap_send_pkt(data1, sizeof(data1));
/* get model info */ /* AckDevAuthenticationStatus, mandatory to enable some hardware */
case 0x0D: unsigned char data2[] = {0x00, 0x19, 0x00};
{ iap_send_pkt(data2, sizeof(data2));
/* ipod is supposed to work only with 5G and nano 2G */ if (radio_present == 1)
/*{0x00, 0x0E, 0x00, 0x0B, 0x00, 0x05, 0x50, 0x41, 0x31, 0x34,
0x37, 0x4C, 0x4C, 0x00}; PA147LL (IPOD 5G 60 GO) */
unsigned char data[] = {0x00, 0x0E, 0x00, 0x0B, 0x00, 0x10,
'R', 'O', 'C', 'K', 'B', 'O', 'X', 0x00};
iap_send_pkt(data, sizeof(data));
break;
}
/* Ipod FM remote sends this: FF 55 02 00 09 F5 */
case 0x09:
{
/* ipod5G firmware version */
unsigned char data[] = {0x00, 0x0A, 0x01, 0x02, 0x01 };
iap_send_pkt(data, sizeof(data));
break;
}
/* FM transmitter sends this: */
/* FF 55 02 00 05 F9 (mode switch: AiR mode) */
case 0x05:
{
unsigned char data[] = {0x00, 0x02, 0x06,
0x05, 0x00, 0x00, 0x0B, 0xB8, 0x28};
iap_send_pkt(data, sizeof(data));
cmd_ok_mode0(cmd);
break;
}
case 0x01:
{
/* FM transmitter sends this: */
/* FF 55 06 00 01 05 00 02 01 F1 (mode switch) */
if(serbuf[3] == 0x05)
{ {
sleep(HZ/3); /* GetTunerCaps */
unsigned char data[] = {0x05, 0x02}; unsigned char data3[] = {0x07, 0x01};
iap_send_pkt(data, sizeof(data)); iap_send_pkt(data3, sizeof(data3));
}
/* FM remote sends this: */
/* FF 55 03 00 01 02 FA (1st thing sent) */
else if(serbuf[3] == 0x02)
{
/* useful only for apple firmware */
} }
iap_set_remote_volume();
break;
}
/* RetDevAuthenticationSignature */
case 0x18:
{
/* Isn't used since we don't send the 0x00 0x17 command */
break;
}
/* GetIpodOptions */
case 0x24:
{
/* RetIpodOptions (ipod video send this) */
unsigned char data[] = {0x00, 0x25, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01};
iap_send_pkt(data, sizeof(data));
break; break;
} }