MFi Accessory Firmware Specification
Contents
Figures, Tables, and Listings
Introduction
1. Protocol Features and Availability
1.1 General Apple Device Features
1.2 Audio and Video Output Preferences
1.2.1 Video Output Settings
1.3 Power Management
1.4 Status Notifications
1.4.1 Status Notifications From Apple Devices
1.4.2 Status Notifications From Accessories
1.5 Accessory Control of iOS Devices
1.6 Accessory Launching of iOS Applications
1.7 Accessory Communication With iOS Applications
1.7.1 Setting Up a Communication Session
1.7.2 Data Flow to and from the iOS Device
1.7.3 Backgrounded Applications
1.7.4 Matching Accessories With Applications
1.7.5 Communication Protocol Design Hints
1.7.6 Communication iAP Commands
1.8 Interaction with iOS Media Applications
1.9 Bluetooth Autopairing and Connection Status Notifications
1.10 Wi-Fi Network Login Sharing
1.11 Extended Interface Mode
1.11.1 Entering Extended Interface Mode
1.11.2 Using Extended Interface Mode
1.11.2.1 The Playback Engine
1.11.2.1.1 Playback Behavior
1.11.2.1.2 Playback Status Notifications
1.11.2.2 The Database Engine
1.11.2.2.1 Database Category Hierarchies
1.11.2.2.2 Database Category Counts
1.11.2.2.3 The All Tracks Playlist
1.11.2.2.4 Nested Playlists
1.11.2.2.5 Unexpected Database Changes
1.11.2.3 Transferring Album Art
1.11.2.4 Using Extended Interface Mode: An Example
1.11.2.5 Video Browsing
1.11.2.5.1 Video Playlists
1.11.2.5.2 Video Navigation User Interface
1.11.2.5.3 Navigating Video Playlists
1.11.2.5.4 Video Selection Examples
1.11.2.6 Sample Extended Interface Session
1.11.2.7 Sample Extended Interface Session 2
1.12 iPod Out Mode
1.12.1 Setting iPod Out Video Preferences
1.12.2 Supported Simple Remote and Display Remote Commands
1.13 VoiceOver
1.14 AssistiveTouch
1.15 iTunes Tagging
1.15.1 The iTunes Tagging Experience
1.15.2 Tagging Feature Components
1.16 Nike + iPod Cardio Equipment System
2. Protocol Core
2.1 Reserved Commands and Data
2.2 Transport Initialization
2.2.1 UART
2.2.2 USB Host Mode
2.2.2.1 Entering USB Host Mode on Startup
2.2.2.2 Upgrading from UART Transport to USB Host Mode
2.2.2.3 Packet Formats for iAP Commands
2.2.2.4 Data Transfers With an Apple Device
2.2.2.4.1 Sample Data Transfer to an Apple device
2.2.2.5 Optimizing Data Transfers
2.2.3 USB Device Mode
2.2.4 Bluetooth Transport
2.3 Identification
2.3.1 IDPS Commands
2.3.2 The IDPS Process
2.3.2.1 Starting IDPS
2.3.2.2 Completing IDPS
2.3.3 Determining Apple Device Capabilities
2.3.3.1 Apple Devices That Require IdentifyDeviceLingoes
2.3.4 Sample IDPS Command Sequences
2.4 Authentication
2.4.1 Levels of Accessory Authentication
2.4.2 Authentication Requirements
2.4.3 Apple Device Authentication of the Accessory
2.4.4 Accessory Authentication of the Apple Device
2.5 Command Packets
2.5.1 Start of Packet Field
2.5.2 Payload Length Field
2.5.3 Checksum Byte
2.6 Transaction IDs
2.6.1 Using Transaction IDs
2.6.1.1 Generating and Returning Transaction IDs
2.6.1.2 Enabling and Disabling Transaction ID Support
2.6.1.3 Apple Device Acknowledgment of Transaction ID Commands
2.6.1.4 Applicability of Transaction IDs
2.6.2 Examples of Transaction IDs
2.7 Multisection Data Transfers
2.7.1 Multisection Transfer Process
2.7.2 Interleaved Transfers
2.8 Apple Device Language
2.9 Character Encoding
3. The General Lingo
3.1 General Lingo Command Summary
3.2 History of the General lingo protocol
3.3 General Lingo Commands
3.3.1 Command 0x00: RequestIdentify
3.3.2 Command 0x02: iPodAck
3.3.3 Command 0x03: RequestExtendedInterfaceMode
3.3.4 Command 0x04: ReturnExtendedInterfaceMode
3.3.5 Command 0x06: ExitExtendedInterfaceMode
3.3.6 Command 0x07: RequestiPodName
3.3.7 Command 0x08: ReturniPodName
3.3.8 Command 0x09: RequestiPodSoftwareVersion
3.3.9 Command 0x0A: ReturniPodSoftwareVersion
3.3.10 Command 0x0B: RequestiPodSerialNum
3.3.11 Command 0x0C: ReturniPodSerialNum
3.3.12 Command 0x0F: RequestLingoProtocolVersion
3.3.13 Command 0x10: ReturnLingoProtocolVersion
3.3.14 Command 0x11: RequestTransportMaxPayloadSize
3.3.15 Command 0x12: ReturnTransportMaxPayloadSize
3.3.16 Command 0x13: IdentifyDeviceLingoes
3.3.16.1 Canceling a Current Authentication Process With IdentifyDeviceLingoes
3.3.17 Command 0x14: GetAccessoryAuthenticationInfo
3.3.18 Command 0x15: RetAccessoryAuthenticationInfo
3.3.19 Command 0x16: AckAccessoryAuthenticationInfo
3.3.20 Command 0x17: GetAccessoryAuthenticationSignature
3.3.21 Command 0x18: RetAccessoryAuthenticationSignature
3.3.22 Command 0x19: AckAccessoryAuthenticationStatus
3.3.23 Command 0x1A: GetiPodAuthenticationInfo
3.3.24 Command 0x1B: RetiPodAuthenticationInfo
3.3.25 Command 0x1C: AckiPodAuthenticationInfo
3.3.26 Command 0x1D: GetiPodAuthenticationSignature
3.3.27 Command 0x1E: RetiPodAuthenticationSignature
3.3.28 Command 0x1F: AckiPodAuthenticationStatus
3.3.29 Command 0x23: NotifyiPodStateChange
3.3.30 Command 0x24: GetiPodOptions
3.3.31 Command 0x25: RetiPodOptions
3.3.32 Command 0x27: GetAccessoryInfo
3.3.33 Command 0x28: RetAccessoryInfo
3.3.34 Command 0x29: GetiPodPreferences
3.3.35 Command 0x2A: RetiPodPreferences
3.3.36 Command 0x2B: SetiPodPreferences
3.3.37 Command 0x35: GetUIMode
3.3.38 Command 0x36: RetUIMode
3.3.39 Command 0x37: SetUIMode
3.3.40 Command 0x38: StartIDPS
3.3.41 Command 0x39: SetFIDTokenValues
3.3.42 Command 0x3A: AckFIDTokenValues
3.3.43 Command 0x3B: EndIDPS
3.3.44 Command 0x3C: IDPSStatus
3.3.45 Command 0x3F: OpenDataSessionForProtocol
3.3.46 Command 0x40: CloseDataSession
3.3.47 Command 0x41: AccessoryAck
3.3.48 Command 0x42: AccessoryDataTransfer
3.3.49 Command 0x43: iPodDataTransfer
3.3.50 Command 0x46: SetAccessoryStatusNotification
3.3.51 Command 0x47: RetAccessoryStatusNotification
3.3.52 Command 0x48: AccessoryStatusNotification
3.3.53 Command 0x49: SetEventNotification
3.3.54 Command 0x4A: iPodNotification
3.3.55 Command 0x4B: GetiPodOptionsForLingo
3.3.56 Command 0x4C: RetiPodOptionsForLingo
3.3.57 Command 0x4D: GetEventNotification
3.3.58 Command 0x4E: RetEventNotification
3.3.59 Command 0x4F: GetSupportedEventNotification
3.3.60 Command 0x50: CancelCommand
3.3.61 Command 0x51: RetSupportedEventNotification
3.3.62 Command 0x54: SetAvailableCurrent
3.3.63 Command 0x56: SetInternalBatteryChargingState
3.3.64 Command 0x64: RequestApplicationLaunch
3.3.65 Command 0x65: GetNowPlayingApplicationBundleName
3.3.66 Command 0x66: RetNowPlayingApplicationBundleName
3.3.67 Command 0x67: GetLocalizationInfo
3.3.68 Command 0x68: RetLocalizationInfo
3.3.69 Command 0x69: RequestWiFiConnectionInfo
3.3.70 Command 0x6A: WiFiConnectionInfo
4. Additional Lingoes
4.1 Command Timings
4.2 Lingo 0x02: Simple Remote Lingo
4.2.1 History and Applicability
4.2.2 Playback Engine Playlists
4.2.3 Using Contextual Buttons
4.2.4 Using Dedicated Media Buttons
4.2.5 Accessory Control of the iPod 5G nano Camera
4.2.5.1 5G nano Camera Modes
4.2.5.2 Camera Sessions
4.2.5.3 Accessory Feedback
4.2.5.4 Camera Accessory Identification
4.2.5.5 Camera Interface Commands
4.2.5.6 Sample Command Sequences
4.2.5.6.1 Scenario 1: Video Control On and Off by the Accessory
4.2.5.6.2 Scenario 2: Video Control On by the iPod and Off by the Accessory
4.2.6 USB Human Interface Device Reports
4.2.7 Command 0x00: ContextButtonStatus
4.2.8 Command 0x01: iPodAck
4.2.9 Command 0x03: VideoButtonStatus
4.2.10 Command 0x04: AudioButtonStatus
4.2.11 Command 0x0B: iPodOutButtonStatus
4.2.12 Command 0x0C: RotationInputStatus
4.2.12.1 Examples of Using RotationInputStatus
4.2.12.1.1 Example with a Detent Wheel
4.2.13 Command 0x0D: RadioButtonStatus
4.2.14 Command 0x0E: CameraButtonStatus
4.2.15 Command 0x0F: RegisterDescriptor
4.2.16 Command 0x10: iPodHIDReport
4.2.17 Command 0x11: AccessoryHIDReport
4.2.18 Command 0x12: UnregisterDescriptor
4.2.19 Command 0x13: VoiceOverEvent
4.2.20 Command 0x14: GetVoiceOverParameter
4.2.21 Command 0x15: RetVoiceOverParameter
4.2.22 Command 0x16: SetVoiceOverParameter
4.2.23 Command 0x17: GetCurrentVoiceOverItemProperty
4.2.24 Command 0x18: RetCurrentVoiceOverItemProperty
4.2.25 Command 0x19: SetVoiceOverContext
4.2.26 Command 0x1A: VoiceOverParameterChanged
4.2.27 Command 0x81: AccessoryAck
4.3 Lingo 0x03: Display Remote Lingo
4.3.1 Command History of the Display Remote lingo
4.3.2 Transferring Album Art
4.3.3 Command 0x00: iPodAck
4.3.4 Command 0x01: GetCurrentEQProfileIndex
4.3.5 Command 0x02: RetCurrentEQProfileIndex
4.3.6 Command 0x03: SetCurrentEQProfileIndex
4.3.7 Command 0x04: GetNumEQProfiles
4.3.8 Command 0x05: RetNumEQProfiles
4.3.9 Command 0x06: GetIndexedEQProfileName
4.3.10 Command 0x07: RetIndexedEQProfileName
4.3.11 Command 0x08: SetRemoteEventNotification
4.3.12 Command 0x09: RemoteEventNotification
4.3.13 Command 0x0A: GetRemoteEventStatus
4.3.14 Command 0x0B: RetRemoteEventStatus
4.3.15 Command 0x0C: GetiPodStateInfo
4.3.16 Command 0x0D: RetiPodStateInfo
4.3.17 Command 0x0E: SetiPodStateInfo
4.3.18 Command 0x0F: GetPlayStatus
4.3.19 Command 0x10: RetPlayStatus
4.3.20 Command 0x11: SetCurrentPlayingTrack
4.3.21 Command 0x12: GetIndexedPlayingTrackInfo
4.3.22 Command 0x13: RetIndexedPlayingTrackInfo
4.3.23 Command 0x14: GetNumPlayingTracks
4.3.24 Command 0x15: RetNumPlayingTracks
4.3.25 Command 0x16: GetArtworkFormats
4.3.26 Command 0x17: RetArtworkFormats
4.3.27 Command 0x18: GetTrackArtworkData
4.3.28 Command 0x19: RetTrackArtworkData
4.3.29 Command 0x1A: GetPowerBatteryState
4.3.30 Command 0x1B: RetPowerBatteryState
4.3.31 Command 0x1C: GetSoundCheckState
4.3.32 Command 0x1D: RetSoundCheckState
4.3.33 Command 0x1E: SetSoundCheckState
4.3.34 Command 0x1F: GetTrackArtworkTimes
4.3.35 Command 0x20: RetTrackArtworkTimes
4.3.36 Command 0x21: CreateGeniusPlaylist
4.3.37 Command 0x22: IsGeniusAvailableForTrack
4.4 Lingo 0x04: Extended Interface Lingo
4.5 Lingo 0x05: Accessory Power Lingo
4.6 Lingo 0x06: USB Host Mode Lingo
4.6.1 Command History of the USB Host Lingoes
4.6.2 Command 0x00: AccessoryAck
4.6.3 Command 0x04: NotifyUSBMode
4.6.4 Command 0x80: iPodAck
4.6.5 Command 0x81: GetiPodUSBMode
4.6.6 Command 0x82: RetiPodUSBMode
4.6.7 Command 0x83: SetiPodUSBMode
4.7 Lingo 0x07: RF Tuner Lingo
4.7.1 RF Tuner Accessory Design
4.7.2 RF Tuner Power
4.7.3 RF Tuner Lingo Commands
4.7.4 Command History of the RF Tuner Lingo
4.7.5 Command 0x00: AccessoryAck
4.7.6 Command 0x01: GetTunerCaps
4.7.7 Command 0x02: RetTunerCaps
4.7.8 Command 0x03: GetTunerCtrl
4.7.9 Command 0x04: RetTunerCtrl
4.7.10 Command 0x05: SetTunerCtrl
4.7.11 Command 0x06: GetTunerBand
4.7.12 Command 0x07: RetTunerBand
4.7.13 Command 0x08: SetTunerBand
4.7.14 Command 0x09: GetTunerFreq
4.7.15 Command 0x0A: RetTunerFreq
4.7.16 Command 0x0B: SetTunerFreq
4.7.17 Command 0x0C: GetTunerMode
4.7.18 Command 0x0D: RetTunerMode
4.7.19 Command 0x0E: SetTunerMode
4.7.20 Command 0x0F: GetTunerSeekRssi
4.7.21 Command 0x10: RetTunerSeekRssi
4.7.22 Command 0x11: SetTunerSeekRssi
4.7.23 Command 0x12: TunerSeekStart
4.7.24 Command 0x13: TunerSeekDone
4.7.25 Command 0x14: GetTunerStatus
4.7.26 Command 0x15: RetTunerStatus
4.7.27 Command 0x16: GetStatusNotifyMask
4.7.28 Command 0x17: RetStatusNotifyMask
4.7.29 Command 0x18: SetStatusNotifyMask
4.7.30 Command 0x19: StatusChangeNotify
4.7.31 Command 0x1A: GetRdsReadyStatus
4.7.32 Command 0x1B: RetRdsReadyStatus
4.7.33 Command 0x1C: GetRdsData
4.7.34 Command 0x1D: RetRdsData
4.7.35 Command 0x1E: GetRdsNotifyMask
4.7.36 Command 0x1F: RetRdsNotifyMask
4.7.37 Command 0x20: SetRdsNotifyMask
4.7.38 Command 0x21: RdsReadyNotify
4.7.39 Command 0x25: GetHDProgramServiceCount
4.7.40 Command 0x26: RetHDProgramServiceCount
4.7.41 Command 0x27: GetHDProgramService
4.7.42 Command 0x28: RetHDProgramService
4.7.43 Command 0x29: SetHDProgramService
4.7.44 Command 0x2A: GetHDDataReadyStatus
4.7.45 Command 0x2B: RetHDDataReadyStatus
4.7.46 Command 0x2C: GetHDData
4.7.47 Command 0x2D: RetHDData
4.7.48 Command 0x2E: GetHDDataNotifyMask
4.7.49 Command 0x2F: RetHDDataNotifyMask
4.7.50 Command 0x30: SetHDDataNotifyMask
4.7.51 Command 0x31: HDDataReadyNotify
4.7.52 Sample HD Command Sequences
4.7.52.1 Initializing HD Radio
4.7.52.2 HD Radio Tuning and Reception
4.7.52.3 HD Radio Service Management
4.8 Lingo 0x08: Accessory Equalizer Lingo
4.8.1 Equalizer Setting Requirements
4.8.2 Accessory Equalizer Lingo Commands
4.8.2.1 Command History of the Accessory Equalizer Lingo
4.8.3 Command 0x00: AccessoryAck
4.8.4 Command 0x01: GetCurrentEQIndex
4.8.5 Command 0x02: RetCurrentEQIndex
4.8.6 Command 0x03: SetCurrentEQIndex
4.8.7 Command 0x04: GetEQSettingCount
4.8.8 Command 0x05: RetEQSettingCount
4.8.9 Command 0x06: GetEQIndexName
4.8.10 Command 0x07: RetEQIndexName
4.9 Lingo 0x09: Sports Lingo
4.9.1 Sports Lingo commands
4.9.2 Command History of the Sports Lingo
4.9.3 Command 0x00: AccessoryAck
4.9.4 Command 0x01: GetAccessoryVersion
4.9.5 Command 0x02: RetAccessoryVersion
4.9.6 Command 0x03: GetAccessoryCaps
4.9.7 Command 0x04: RetAccessoryCaps
4.9.8 Command 0x80: iPodAck
4.9.9 Command 0x83: GetiPodCaps
4.9.10 Command 0x84: RetiPodCaps
4.9.11 Command 0x85: GetUserIndex
4.9.12 Command 0x86: RetUserIndex
4.9.13 Command 0x88: GetUserData
4.9.14 Command 0x89: RetUserData
4.9.15 Command 0x8A: SetUserData
4.10 Lingo 0x0A: Digital Audio Lingo
4.10.1 Accessory Authentication
4.10.2 Digital Audio Lingo Commands
4.10.3 Command History of the Digital Audio Lingo
4.10.4 USB Device Mode Audio
4.10.4.1 Digital Audio and Extended Interface Mode
4.10.4.2 Audio/Video Synchronization
4.10.4.3 Line Level Output
4.10.4.4 Enabling and Disabling USB Device Mode Audio
4.10.4.5 USB Device Mode Audio Errors on Older Apple Devices
4.10.5 Command 0x00: AccessoryAck
4.10.6 Command 0x01: iPodAck
4.10.7 Command 0x02: GetAccessorySampleRateCaps
4.10.8 Command 0x03: RetAccessorySampleRateCaps
4.10.9 Command 0x04: TrackNewAudioAttributes
4.10.10 Command 0x05: SetVideoDelay
4.11 Lingo 0x0C: Storage Lingo
4.11.1 Command History of the Storage Lingo
4.11.2 Command Summary
4.11.3 Command 0x00: iPodAck
4.11.4 Command 0x01: GetiPodCaps
4.11.5 Command 0x02: RetiPodCaps
4.11.6 Command 0x04: RetiPodFileHandle
4.11.7 Command 0x07: WriteiPodFileData
4.11.8 Command 0x08: CloseiPodFile
4.11.9 Command 0x10: GetiPodFreeSpace
4.11.10 Command 0x11: RetiPodFreeSpace
4.11.11 Command 0x12: OpeniPodFeatureFile
4.11.12 Command 0x80: AccessoryAck
4.11.13 Command 0x81: GetAccessoryCaps
4.11.14 Command 0x82: RetAccessoryCaps
4.12 Lingo 0x0D: iPod Out Lingo
4.12.1 Command History of the iPod Out Lingo
4.12.2 iPod Out Lingo Commands
4.12.3 Command 0x00: iPodAck
4.12.4 Command 0x01: GetiPodOutOptions
4.12.5 Command 0x02: RetiPodOutOptions
4.12.6 Command 0x03: SetiPodOutOptions
4.12.7 Command 0x04: AccessoryStateChangeEvent
4.13 Lingo 0x0E: Location Lingo
4.13.1 Location Data Requirements
4.13.2 Power from the Apple Device for Accessories Using the Location Lingo
4.13.3 Command Summary
4.13.4 A Typical Location Data Session
4.13.5 Command 0x00: AccessoryAck
4.13.5.1 Multisection AccessoryAck Packet
4.13.6 Command 0x01: GetAccessoryCaps
4.13.7 Command 0x02: RetAccessoryCaps
4.13.8 Command 0x03: GetAccessoryControl
4.13.9 Command 0x04: RetAccessoryControl
4.13.10 Command 0x05: SetAccessoryControl
4.13.11 Command 0x06: GetAccessoryData
4.13.12 Command 0x07: RetAccessoryData
4.13.13 Command 0x08: SetAccessoryData
4.13.14 Command 0x09: AsyncAccessoryData
4.13.15 Command 0x80: iPodAck
4.13.15.1 Multisection iPodAck Command
4.14 Sample Identification Sequences
5. Extended Interface Mode
5.1 Command Packets
5.1.1 Command Code Summary
5.1.2 Command 0x0001: iPodAck
5.1.3 Command 0x0002: GetCurrentPlayingTrackChapterInfo
5.1.4 Command 0x0003: ReturnCurrentPlayingTrackChapterInfo
5.1.5 Command 0x0004: SetCurrentPlayingTrackChapter
5.1.6 Command 0x0005: GetCurrentPlayingTrackChapterPlayStatus
5.1.7 Command 0x0006: ReturnCurrentPlayingTrackChapterPlayStatus
5.1.8 Command 0x0007: GetCurrentPlayingTrackChapterName
5.1.9 Command 0x0008: ReturnCurrentPlayingTrackChapterName
5.1.10 Command 0x0009: GetAudiobookSpeed
5.1.11 Command 0x000A: ReturnAudiobookSpeed
5.1.12 Command 0x000B: SetAudiobookSpeed
5.1.13 Command 0x000C: GetIndexedPlayingTrackInfo
5.1.14 Command 0x000D: ReturnIndexedPlayingTrackInfo
5.1.15 Command 0x000E: GetArtworkFormats
5.1.16 Command 0x000F: RetArtworkFormats
5.1.17 Command 0x0010: GetTrackArtworkData
5.1.18 Command 0x0011: RetTrackArtworkData
5.1.19 Command 0x0016: ResetDBSelection
5.1.20 Command 0x0017: SelectDBRecord
5.1.21 Command 0x0018: GetNumberCategorizedDBRecords
5.1.22 Command 0x0019: ReturnNumberCategorizedDBRecords
5.1.23 Command 0x001A: RetrieveCategorizedDatabaseRecords
5.1.24 Command 0x001B: ReturnCategorizedDatabaseRecord
5.1.25 Command 0x001C: GetPlayStatus
5.1.26 Command 0x001D: ReturnPlayStatus
5.1.27 Command 0x001E: GetCurrentPlayingTrackIndex
5.1.28 Command 0x001F: ReturnCurrentPlayingTrackIndex
5.1.29 Command 0x0020: GetIndexedPlayingTrackTitle
5.1.30 Command 0x0021: ReturnIndexedPlayingTrackTitle
5.1.31 Command 0x0022: GetIndexedPlayingTrackArtistName
5.1.32 Command 0x0023: ReturnIndexedPlayingTrackArtistName
5.1.33 Command 0x0024: GetIndexedPlayingTrackAlbumName
5.1.34 Command 0x0025: ReturnIndexedPlayingTrackAlbumName
5.1.35 Command 0x0026: SetPlayStatusChangeNotification
5.1.36 Command 0x0027: PlayStatusChangeNotification
5.1.37 Command 0x0029: PlayControl
5.1.38 Command: 0x002A: GetTrackArtworkTimes
5.1.39 Command: 0x002B: RetTrackArtworkTimes
5.1.40 Command 0x002C: GetShuffle
5.1.41 Command 0x002D: ReturnShuffle
5.1.42 Command 0x002E: SetShuffle
5.1.43 Command 0x002F: GetRepeat
5.1.44 Command 0x0030: ReturnRepeat
5.1.45 Command 0x0031: SetRepeat
5.1.46 Command 0x0032: SetDisplayImage
5.1.46.1 Display Pixel Format 0x01
5.1.46.2 Display Pixel Formats 0x02 and 0x03
5.1.47 Command 0x0033: GetMonoDisplayImageLimits
5.1.48 Command 0x0034: ReturnMonoDisplayImageLimits
5.1.49 Command 0x0035: GetNumPlayingTracks
5.1.50 Command 0x0036: ReturnNumPlayingTracks
5.1.51 Command 0x0037: SetCurrentPlayingTrack
5.1.52 Command 0x0039: GetColorDisplayImageLimits
5.1.53 Command 0x003A: ReturnColorDisplayImageLimits
5.1.54 Command 0x003B: ResetDBSelectionHierarchy
5.1.55 Command 0x003C: GetDBiTunesInfo
5.1.56 Command 0x003D: RetDBiTunesInfo
5.1.57 Command 0x003E: GetUIDTrackInfo
5.1.58 Command 0x003F: RetUIDTrackInfo
5.1.59 Command 0x0040: GetDBTrackInfo
5.1.60 Command 0x0041: RetDBTrackInfo
5.1.61 Command 0x0042: GetPBTrackInfo
5.1.62 Command 0x0043: RetPBTrackInfo
5.1.63 Command 0x0044: CreateGeniusPlaylist
5.1.64 Command 0x0045: RefreshGeniusPlaylist
5.1.65 Command 0x0047: IsGeniusAvailableForTrack
5.1.66 Command 0x0048: GetPlaylistInfo
5.1.67 Command 0x0049: RetPlaylistInfo
5.1.68 Command 0x004A: PrepareUIDList
5.1.69 Command 0x004B: PlayPreparedUIDList
5.1.70 Command 0x004C: GetArtworkTimes
5.1.71 Command 0x004D: RetArtworkTimes
5.1.72 Command 0x004E: GetArtworkData
5.1.73 Command 0x004F: RetArtworkData
5.2 Known Issues
5.3 Protocol History
Appendix A: A. iTunes Tagging Accessory Design
A.1 Accessory Requirements
A.2 Capturing and Storing Tag Data
A.2.1 Resolving Tag Ambiguity
A.2.2 Handling Unknown Metadata Types
A.2.3 Tag Data Writing Process
A.2.4 Data Transfer to the Apple Device
A.3 Accessory User Interface
A.3.1 Tag Button Text
A.4 Sample Command Sequence
A.5 FM Radio Tagging
A.5.1 The RT+ ODA
A.5.2 The iTunes Tagging ODA
A.5.3 Use of the RDS Group Type 3A
A.5.4 Tagging Application Group
A.5.5 Normal Mode and Test Mode
A.5.6 FM Tagging Event Control
A.5.7 FM Tag Decryption
A.6 HD Radio Tagging
A.7 Satellite Radio Tagging
A.8 Other Broadcast Tagging
A.9 Sample Tag Files
A.9.1 FM Radio Sample
A.9.2 HD Radio Samples
A.9.3 Satellite Radio Sample
Appendix B: B. Nike + iPod Cardio Accessory Design
B.1 Cardio Equipment Requirements
B.1.1 Determining Apple Device Support for Cardio Equipment
B.1.2 Identification Procedure
B.1.2.1 Sample Identification Processes
B.1.3 Declaring Cardio Equipment Support to the Apple Device
B.1.4 Accessing User Data
B.1.5 Recording Workout Data
B.1.5.1 Writing Workout Data
B.1.5.2 Workout Events
B.1.5.3 File System Full
B.1.5.4 File Writing Error Recovery
B.1.5.5 Recording a Workout Already in Progress
B.1.6 XML Element Formats
B.2 User Interface Requirements
B.2.1 The Apple Device Does Not Support Nike + iPod
B.2.2 Deciding to Record a Workout to the Apple Device
B.2.3 The Apple Device is Full
B.2.4 User Weight
B.2.5 Recording Indicator
B.2.6 Workout Completed
B.3 Sample Command Sequence
Appendix C: C. Historical Information
C.1 Past Protocol Features
C.2 The 3G iPod
C.2.1 General Compatibility With Accessories
C.2.2 Accessory Identification and iAP Commands
C.2.3 User Interface Restrictions
C.3 9-Pin Audio/Remote Connector Commands
C.3.1 Command 0x00: BeginRecord
C.3.2 Command 0x01: EndRecord
C.3.3 Command 0x02: BeginPlayback
C.3.4 Command 0x03: EndPlayback
C.4 Deprecated General Lingo Commands
C.4.1 General Lingo Command 0x01: Identify
C.4.2 Command 0x05: EnterExtendedInterfaceMode
C.5 Deprecated Lingo 0x01: Microphone Lingo
C.5.1 Command History of the Microphone Lingo
C.5.2 Command 0x04: AccessoryAck
C.5.3 Command 0x05: GetAccessoryAck
C.5.4 Command 0x06: iPodModeChange
C.5.5 Command 0x07: GetAccessoryCaps
C.5.6 Command 0x08: RetAccessoryCaps
C.5.7 Command 0x09: GetAccessoryCtrl
C.5.8 Command 0x0A: RetAccessoryCtrl
C.5.9 Command 0x0B: SetAccessoryCtrl
C.5.10 Deprecated MicrophoneCapsToken
C.6 Deprecated Simple Remote Lingo Command
C.6.1 Command 0x02: ImageButtonStatus
C.7 Deprecated Extended Interface Commands
C.7.1 Command 0x0012: RequestProtocolVersion
C.7.2 Command 0x0013: ReturnProtocolVersion
C.7.3 Command 0x0014: RequestiPodName
C.7.4 Command 0x0015: ReturniPodName
C.7.5 Command 0x0028: PlayCurrentSelection
C.7.6 Command 0x0038: SelectSortDBRecord
C.8 Deprecated Lingo 0x05: Accessory Power Lingo
C.8.1 Command History of the Accessory Power lingo
C.8.2 Command 0x02: BeginHighPower
C.8.3 Command 0x03: EndHighPower
C.9 Deprecated USB Host Control Commands
C.9.1 Command 0x00: AccessoryAck
C.9.2 Command 0x01: GetUSBPowerState
C.9.3 Command 0x02: RetUSBPowerState
C.9.4 Command 0x03: SetUSBPowerState
C.10 Deprecated iPod Out Lingo Command
C.10.1 Command 0x06: DevVideoScreenInfo
C.11 Authentication 1.0 Sample Command Sequence
C.12 Accessory Identification With Non-IDPS Apple Devices
Glossary
Revision History