oandrew / ipod-gadget

iPod usb gadget for audio playback. Client app: https://github.com/oandrew/ipod
MIT License
205 stars 33 forks source link

2011 Nissan Murano "Reading file..." #11

Open bbfelts opened 5 years ago

bbfelts commented 5 years ago

The Murano finally recognizes my Pi Zero as an iPod so it tries to connect, but it stays at "Reading file..." and never goes any farther. I suspect it's doing some kind of iPod verification - all the other devices I've tried that emulate an iPod interface have failed (WMA2000 is an example).

I should note that all Apple iPod/iPhones I've tried work fine with this interface.

Below is the debug output from the ipod program:

[pi@raspberrypi:~/bin $ sudo ./ipod -d serve -w /tmp/ipod.trace /dev/iap0 INFO[0000.007158] device opened path=/dev/iap0 WARN[0000.008815] writing trace path=/tmp/ipod.trace INFO[0047.761798] << FRAME len=24 ([]uint8) (len=24 cap=64) { 00000000 55 0e 00 13 00 00 04 19 00 00 00 06 00 00 02 00 |U...............| 00000010 ba 00 00 00 00 00 00 00 |........| } INFO[0047.785752] << PACKET len=14 ([]uint8) (len=14 cap=15) { 00000000 00 13 00 00 04 19 00 00 00 06 00 00 02 00 |..............| } INFO[0047.803311] << CMD id=0x00,0x13 trx= type=general.IdentifyDeviceLingoes (ipod.Command)(0x180e760)({ ID: (ipod.LingoCmdID) 0x00,0x13, Transaction: (ipod.Transaction)(), Payload: (general.IdentifyDeviceLingoes)(0x1816cd0)({ Lingos: (uint32) 1049, Options: (uint32) 6, DeviceID: (uint32) 512 }) }) INFO[0047.871903] >> CMD id=0x00,0x02 trx= type=general.ACK (ipod.Command)(0x180e7b0)({ ID: (ipod.LingoCmdID) 0x00,0x02, Transaction: (ipod.Transaction)(), Payload: (general.ACK)(0x1816e72)({ Status: (general.ACKStatus) 0, CmdID: (uint8) 19 }) }) INFO[0047.909048] >> PACKET len=4 ([]uint8) (len=4 cap=64) { 00000000 00 02 00 13 |....| } INFO[0047.925376] >> FRAME len=7 ([]uint8) (len=7 cap=1024) { 00000000 55 04 00 02 00 13 e7 |U......| }

bbfelts commented 5 years ago

Our other car (2011 Nissan Rogue w/Navigation) hangs in the same spot, but the head unit doesn't even switch to the iPod screen.

Debug info:

INFO[0377.151010] << FRAME len=24 ([]uint8) (len=24 cap=64) { 00000000 55 0e 00 13 00 00 04 11 00 00 00 02 00 00 02 00 |U...............| 00000010 c6 00 00 00 00 00 00 00 |........| } INFO[0377.152131] << PACKET len=14 ([]uint8) (len=14 cap=15) { 00000000 00 13 00 00 04 11 00 00 00 02 00 00 02 00 |..............| } INFO[0377.153142] << CMD id=0x00,0x13 trx= type=general.IdentifyDeviceLingoes (ipod.Command)(0x200e970)({ ID: (ipod.LingoCmdID) 0x00,0x13, Transaction: (ipod.Transaction)(), Payload: (general.IdentifyDeviceLingoes)(0x20171b0)({ Lingos: (uint32) 1041, Options: (uint32) 2, DeviceID: (uint32) 512 }) }) INFO[0377.155843] >> CMD id=0x00,0x02 trx= type=general.ACK (ipod.Command)(0x200e9c0)({ ID: (ipod.LingoCmdID) 0x00,0x02, Transaction: (ipod.Transaction)(), Payload: (general.ACK)(0x2017332)({ Status: (general.ACKStatus) 0, CmdID: (uint8) 19 }) }) INFO[0377.158233] >> PACKET len=4 ([]uint8) (len=4 cap=64) { 00000000 00 02 00 13 |....| } INFO[0377.180734] >> FRAME len=7 ([]uint8) (len=7 cap=1024) { 00000000 55 04 00 02 00 13 e7 |U......| }

oandrew commented 5 years ago

@bbfelts
Try this (branch feat/identify-req-auth) oandrew/ipod@8db63149d2738911a32ceffb465a37f613f71f67

bbfelts commented 5 years ago

Same results...unless I did something wrong:

INFO[0000.022037] device opened path=/dev/iap0 WARN[0000.023674] writing trace path=/tmp/ipod.trace INFO[0135.064757] << FRAME len=24 ([]uint8) (len=24 cap=64) { 00000000 55 0e 00 13 00 00 04 19 00 00 00 06 00 00 02 00 |U...............| 00000010 ba 00 00 00 00 00 00 00 |........| } INFO[0135.128743] << PACKET len=14 ([]uint8) (len=14 cap=15) { 00000000 00 13 00 00 04 19 00 00 00 06 00 00 02 00 |..............| } INFO[0135.146676] << CMD id=0x00,0x13 trx= type=general.IdentifyDeviceLingoes (ipod.Command)(0x240e760)({ ID: (ipod.LingoCmdID) 0x00,0x13, Transaction: (ipod.Transaction)(), Payload: (general.IdentifyDeviceLingoes)(0x2416cc0)({ Lingos: (uint32) 1049, Options: (uint32) 6, DeviceID: (uint32) 512 }) }) INFO[0135.219571] >> CMD id=0x00,0x02 trx= type=general.ACK (ipod.Command)(0x240e7b0)({ ID: (ipod.LingoCmdID) 0x00,0x02, Transaction: (ipod.Transaction)(), Payload: (general.ACK)(0x2416e62)({ Status: (general.ACKStatus) 0, CmdID: (uint8) 19 }) }) INFO[0135.263807] >> PACKET len=4 ([]uint8) (len=4 cap=64) { 00000000 00 02 00 13 |....| } INFO[0135.289935] >> FRAME len=7 ([]uint8) (len=7 cap=1024) { 00000000 55 04 00 02 00 13 e7 |U......| }