From 3b67c80b0acf663dec01dba5c9e1a8cc8d516c47 Mon Sep 17 00:00:00 2001 From: shihabal3amri <42039842+shihabal3amri@users.noreply.github.com> Date: Fri, 25 Sep 2026 13:38:35 +0400 Subject: [PATCH] Reset public source after withdrawing credential-bearing release --- .github/ISSUE_TEMPLATE/bug.yml | 36 + .github/ISSUE_TEMPLATE/config.yml | 5 + .github/workflows/android.yml | 35 + .github/workflows/pages.yml | 28 + .gitignore | 40 + CHANGELOG.md | 10 + LICENSE | 674 ++++ README.md | 17 + README.zh-CN.md | 7 + SECURITY.md | 15 + asset/xcertplay.png | Bin 0 -> 2685656 bytes asset/xcertplay_small.png | Bin 0 -> 267552 bytes automotive/.gitignore | 1 + automotive/build.gradle.kts | 64 + automotive/src/main/AndroidManifest.xml | 30 + automotive/src/main/keepRules/rules.keep | 12 + automotive/src/main/res/values/config.xml | 3 + build.gradle.kts | 5 + common/build.gradle.kts | 38 + common/src/main/AndroidManifest.xml | 61 + .../shilapi/xcertplay/AirPlayPersistence.kt | 587 +++ .../com/shilapi/xcertplay/BootReceiver.kt | 31 + .../shilapi/xcertplay/CarPlayHostActivity.kt | 3530 +++++++++++++++++ .../java/com/shilapi/xcertplay/DarkMode.kt | 6 + .../com/shilapi/xcertplay/DiPlayActivity.kt | 521 +++ .../com/shilapi/xcertplay/DiPlayBluetooth.kt | 16 + .../com/shilapi/xcertplay/DiPlayBootstrap.kt | 62 + .../shilapi/xcertplay/DiPlaySessionService.kt | 52 + .../xcertplay/DiagnosticExportStore.kt | 43 + .../shilapi/xcertplay/DiagnosticRedactor.kt | 17 + .../xcertplay/DisplayDiagnosticSnapshot.kt | 58 + .../shilapi/xcertplay/ImageCropActivity.kt | 393 ++ .../com/shilapi/xcertplay/MainActivity.kt | 122 + .../shilapi/xcertplay/SafeAreaEditorView.kt | 186 + .../com/shilapi/xcertplay/SessionLogFile.kt | 45 + .../com/shilapi/xcertplay/ui/theme/Color.kt | 11 + .../com/shilapi/xcertplay/ui/theme/Theme.kt | 58 + .../com/shilapi/xcertplay/ui/theme/Type.kt | 34 + common/src/main/res/drawable/ic_carplay.png | Bin 0 -> 35437 bytes .../res/drawable/ic_diplay_notification.xml | 3 + common/src/main/res/raw/placeholder_icon.png | Bin 0 -> 33432 bytes common/src/main/res/values/config.xml | 3 + common/src/main/res/values/strings.xml | 3 + common/src/main/res/values/themes.xml | 11 + common/src/main/res/xml/backup_rules.xml | 12 + .../main/res/xml/data_extraction_rules.xml | 25 + common/src/main/res/xml/usb_device_filter.xml | 5 + .../com/shilapi/xcertplay/DarkModeTest.kt | 19 + .../xcertplay/DiagnosticExportStoreTest.kt | 119 + .../xcertplay/DiagnosticRedactorTest.kt | 63 + .../DisplayDiagnosticSnapshotTest.kt | 60 + .../xcertplay/WifiP2pGroupManagerTest.kt | 375 ++ docs/BUILD.md | 17 + docs/COMPATIBILITY.md | 3 + docs/INSTALL.md | 3 + docs/PRIVACY.md | 11 + docs/TESTING.md | 3 + docs/THIRD_PARTY_NOTICES.md | 37 + docs/UPSTREAM-README.md | 117 + docs/UPSTREAM-README.zh-CN.md | 98 + docs/VALIDATION.md | 10 + docs/licenses/DiAuto-AGPL-3.0.txt | 661 +++ docs/licenses/dependencies/Apache-2.0.txt | 202 + .../dependencies/Bouncy-Castle-LICENSE.txt | 17 + docs/licenses/dependencies/SLF4J-LICENSE.txt | 21 + gradle.properties | 19 + gradle/gradle-daemon-jvm.properties | 12 + gradle/libs.versions.toml | 36 + gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 45457 bytes gradle/wrapper/gradle-wrapper.properties | 9 + gradlew | 251 ++ gradlew.bat | 94 + mobile/.gitignore | 1 + mobile/build.gradle.kts | 87 + mobile/src/main/AndroidManifest.xml | 24 + mobile/src/main/keepRules/rules.keep | 12 + mobile/src/main/res/values/config.xml | 3 + mobile/src/main/res/values/strings.xml | 3 + scripts/build-beta.py | 6 + scripts/build_site.py | 24 + scripts/check_public_tree.py | 22 + settings.gradle.kts | 29 + shared/.gitignore | 1 + shared/build.gradle | 40 + shared/src/main/AndroidManifest.xml | 47 + shared/src/main/ic_launcher-playstore.png | Bin 0 -> 136865 bytes .../xcertplay/airplay/AirPlayConfig.kt | 50 + .../xcertplay/airplay/AirPlayCrypto.kt | 130 + .../airplay/AirPlayDisplaySettings.kt | 91 + .../shilapi/xcertplay/airplay/AirPlayHid.kt | 141 + .../airplay/AirPlayIapTunnelStream.kt | 174 + .../xcertplay/airplay/AirPlayIdentity.kt | 19 + .../xcertplay/airplay/AirPlayInfoPlist.kt | 199 + .../airplay/AirPlayPeerDiagnostics.kt | 13 + .../xcertplay/airplay/AirPlaySession.kt | 736 ++++ .../xcertplay/airplay/AudioPacketCapture.kt | 136 + .../shilapi/xcertplay/airplay/AudioStream.kt | 229 ++ .../shilapi/xcertplay/airplay/BplistCodec.kt | 274 ++ .../com/shilapi/xcertplay/airplay/Bytes.kt | 24 + .../xcertplay/airplay/CarPlayDisplayScale.kt | 31 + .../xcertplay/airplay/CarPlayMediaEngine.kt | 402 ++ .../xcertplay/airplay/CarPlayUiScale.kt | 39 + .../xcertplay/airplay/ControlCipher.kt | 55 + .../shilapi/xcertplay/airplay/IapTunnel.kt | 219 + .../xcertplay/airplay/MfiSapAuthSetup.kt | 183 + .../xcertplay/airplay/MicrophonePacketizer.kt | 116 + .../com/shilapi/xcertplay/airplay/NtpClock.kt | 239 ++ .../shilapi/xcertplay/airplay/PairSetup.kt | 137 + .../shilapi/xcertplay/airplay/PairVerify.kt | 127 + .../shilapi/xcertplay/airplay/PairingStore.kt | 16 + .../shilapi/xcertplay/airplay/RtspMessage.kt | 108 + .../com/shilapi/xcertplay/airplay/SafeArea.kt | 172 + .../shilapi/xcertplay/airplay/ScreenStream.kt | 215 + .../com/shilapi/xcertplay/airplay/Srp6a.kt | 110 + .../shilapi/xcertplay/airplay/Tlv8Codec.kt | 52 + .../xcertplay/iap2/body/Iap2BodyBuilder.kt | 174 + .../xcertplay/iap2/body/Iap2BodyReader.kt | 196 + .../xcertplay/iap2/catalog/Iap2Endpoint.kt | 920 +++++ .../xcertplay/iap2/message/Iap2Messages.kt | 314 ++ .../xcertplay/iap2/session/Iap2Session.kt | 145 + .../iap2/trace/Iap2FrameFormatter.kt | 211 + .../xcertplay/iap2/wire/Iap2CsmFramer.kt | 174 + .../shilapi/xcertplay/iap2/wire/Iap2Wire.kt | 151 + .../xcertplay/iap2/wire/Iap2WireCodec.kt | 154 + .../AndroidCarPlayLocationProvider.kt | 146 + .../xcertplay/media/AndroidMediaSink.kt | 913 +++++ .../xcertplay/media/AudioChannelMapping.kt | 78 + .../xcertplay/media/CarPlayTouchMapper.kt | 30 + .../xcertplay/media/MediaCodecSupport.kt | 193 + .../xcertplay/media/MicrophoneUplink.kt | 262 ++ .../shilapi/xcertplay/media/OpusEncoder.kt | 141 + .../xcertplay/media/VideoDecodeQueue.kt | 70 + .../mfi/Iap2MfiAuthenticationClient.kt | 119 + .../mfi/LocalMfiAuthenticationClient.kt | 105 + .../shilapi/xcertplay/mfi/LocalMfiProbe.kt | 41 + .../xcertplay/mfi/MfiAuthenticationClient.kt | 263 ++ .../shilapi/xcertplay/mfi/MfiDeviceScanner.kt | 155 + .../com/shilapi/xcertplay/mfi/MfiSelfCheck.kt | 55 + .../mfi/RemoteMfiAuthenticationClient.kt | 356 ++ .../xcertplay/network/CarPlayBonjour.kt | 555 +++ .../xcertplay/network/CarPlayVpnService.kt | 293 ++ .../xcertplay/network/Ipv6NcmBridge.kt | 181 + .../network/LocalOnlyHotspotManager.kt | 688 ++++ .../xcertplay/network/ManualHotspotManager.kt | 470 +++ .../network/P2pConfigurationMemory.kt | 37 + .../shilapi/xcertplay/network/P2pOwnership.kt | 20 + .../xcertplay/network/P2pStartupRecovery.kt | 75 + .../xcertplay/network/WifiP2pGroupManager.kt | 691 ++++ .../network/WirelessHotspotManager.kt | 95 + .../orchestration/CarPlayController.kt | 1965 +++++++++ .../orchestration/CarPlayRuntimeConfig.kt | 153 + .../xcertplay/orchestration/MfiRuntime.kt | 41 + .../orchestration/WirelessConnectionProof.kt | 57 + .../xcertplay/shared/MyCarAppScreen.kt | 16 + .../xcertplay/shared/MyCarAppService.kt | 15 + .../xcertplay/shared/MyCarAppSession.kt | 11 + .../transport/BlockingDuplexByteStream.kt | 18 + .../transport/BluetoothRfcommDuplexStream.kt | 219 + .../xcertplay/transport/Ch341DeviceMatcher.kt | 15 + .../transport/Ch341I2cStreamEncoder.kt | 182 + .../xcertplay/transport/Ch341I2cTransport.kt | 234 ++ .../xcertplay/transport/Ch341UsbHost.kt | 336 ++ .../xcertplay/transport/EthernetIpv6Codec.kt | 157 + .../xcertplay/transport/I2cTransport.kt | 29 + .../transport/Iap2ControlDeadline.kt | 24 + .../xcertplay/transport/Iap2CsmChannel.kt | 236 ++ .../transport/Iap2IdentificationClient.kt | 288 ++ .../xcertplay/transport/Iap2LinkChannel.kt | 375 ++ .../xcertplay/transport/Iap2LinkEngine.kt | 710 ++++ .../xcertplay/transport/Iap2LocationClient.kt | 143 + .../xcertplay/transport/Iap2UsbMuxHost.kt | 558 +++ .../transport/Iap2WiredControlClient.kt | 265 ++ .../transport/Iap2WirelessControlClient.kt | 395 ++ .../transport/IphoneCarPlayConfiguration.kt | 91 + .../xcertplay/transport/IphoneUsbHost.kt | 451 +++ .../xcertplay/transport/LinuxI2cTransport.kt | 145 + .../transport/LockdownCarKitClient.kt | 143 + .../xcertplay/transport/LockdownPairRecord.kt | 433 ++ .../transport/LockdownPairingClient.kt | 251 ++ .../transport/LockdownPlistChannel.kt | 331 ++ .../transport/LockdownTlsEngineFactory.kt | 104 + .../transport/NcmFunctionDiscovery.kt | 66 + .../xcertplay/transport/NcmUsbBridge.kt | 372 ++ .../shilapi/xcertplay/transport/Ntb16Codec.kt | 112 + .../xcertplay/transport/TlsDuplexChannel.kt | 437 ++ shared/src/main/jni/Android.mk | 6 + shared/src/main/jni/Application.mk | 2 + shared/src/main/jni/linux_i2c_jni.c | 149 + .../res/mipmap-anydpi-v26/ic_launcher.xml | 6 + .../mipmap-anydpi-v26/ic_launcher_round.xml | 6 + .../src/main/res/mipmap-hdpi/ic_launcher.webp | Bin 0 -> 2568 bytes .../mipmap-hdpi/ic_launcher_background.webp | Bin 0 -> 3034 bytes .../mipmap-hdpi/ic_launcher_foreground.webp | Bin 0 -> 2352 bytes .../mipmap-hdpi/ic_launcher_monochrome.webp | Bin 0 -> 1718 bytes .../res/mipmap-hdpi/ic_launcher_round.webp | Bin 0 -> 4586 bytes .../src/main/res/mipmap-mdpi/ic_launcher.webp | Bin 0 -> 1804 bytes .../mipmap-mdpi/ic_launcher_background.webp | Bin 0 -> 1346 bytes .../mipmap-mdpi/ic_launcher_foreground.webp | Bin 0 -> 1632 bytes .../mipmap-mdpi/ic_launcher_monochrome.webp | Bin 0 -> 1140 bytes .../res/mipmap-mdpi/ic_launcher_round.webp | Bin 0 -> 2918 bytes .../main/res/mipmap-xhdpi/ic_launcher.webp | Bin 0 -> 3732 bytes .../mipmap-xhdpi/ic_launcher_background.webp | Bin 0 -> 7120 bytes .../mipmap-xhdpi/ic_launcher_foreground.webp | Bin 0 -> 3104 bytes .../mipmap-xhdpi/ic_launcher_monochrome.webp | Bin 0 -> 2234 bytes .../res/mipmap-xhdpi/ic_launcher_round.webp | Bin 0 -> 6672 bytes .../main/res/mipmap-xxhdpi/ic_launcher.webp | Bin 0 -> 6658 bytes .../mipmap-xxhdpi/ic_launcher_background.webp | Bin 0 -> 22618 bytes .../mipmap-xxhdpi/ic_launcher_foreground.webp | Bin 0 -> 4966 bytes .../mipmap-xxhdpi/ic_launcher_monochrome.webp | Bin 0 -> 3356 bytes .../res/mipmap-xxhdpi/ic_launcher_round.webp | Bin 0 -> 10536 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.webp | Bin 0 -> 9404 bytes .../ic_launcher_background.webp | Bin 0 -> 45084 bytes .../ic_launcher_foreground.webp | Bin 0 -> 7638 bytes .../ic_launcher_monochrome.webp | Bin 0 -> 4590 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.webp | Bin 0 -> 15916 bytes .../src/main/res/xml/automotive_app_desc.xml | 4 + .../airplay/AirPlayDisplaySettingsTest.kt | 51 + .../airplay/AirPlayIapTunnelStreamTest.kt | 73 + .../xcertplay/airplay/AirPlayInfoPlistTest.kt | 233 ++ .../airplay/AirPlayPeerDiagnosticsTest.kt | 16 + .../airplay/CarPlayDisplayScaleTest.kt | 33 + .../airplay/CarPlayMediaEngineTest.kt | 83 + .../xcertplay/airplay/CarPlayUiScaleTest.kt | 63 + .../airplay/MicrophonePacketizerTest.kt | 52 + .../shilapi/xcertplay/airplay/SafeAreaTest.kt | 134 + .../xcertplay/airplay/ScreenCodecTest.kt | 34 + .../xcertplay/iap2/Iap2ProtocolTest.kt | 189 + .../media/AndroidMediaSinkStateTest.kt | 21 + .../media/AudioChannelMappingTest.kt | 105 + .../xcertplay/media/MediaCodecSupportTest.kt | 85 + .../xcertplay/media/VideoDecodeQueueTest.kt | 76 + .../mfi/LocalMfiAuthenticationClientTest.kt | 110 + .../mfi/MfiAuthenticationClientTest.kt | 72 + .../shilapi/xcertplay/mfi/MfiSelfCheckTest.kt | 69 + .../mfi/RemoteMfiAuthenticationClientTest.kt | 195 + .../xcertplay/network/CarPlayBonjourTest.kt | 58 + .../xcertplay/network/P2pOwnershipTest.kt | 25 + .../network/P2pStartupRecoveryTest.kt | 139 + .../network/WirelessHotspotManagerTest.kt | 69 + .../orchestration/ManualHotspotConfigTest.kt | 21 + .../orchestration/MfiTargetConfigTest.kt | 76 + .../WirelessConnectionProofTest.kt | 81 + .../orchestration/WirelessHandoffTest.kt | 29 + .../transport/Ch341DeviceMatcherTest.kt | 17 + .../transport/Ch341I2cStreamEncoderTest.kt | 40 + .../transport/EthernetIpv6CodecTest.kt | 84 + .../transport/Iap2ControlDeadlineTest.kt | 31 + .../transport/Iap2LocationClientTest.kt | 123 + .../transport/Iap2WiredControlClientTest.kt | 30 + .../Iap2WirelessControlClientTest.kt | 129 + .../transport/LinuxI2cTransportTest.kt | 70 + .../xcertplay/transport/Ntb16CodecTest.kt | 32 + site/.nojekyll | 0 site/ar/index.html | 7 + site/assets/home.png | Bin 0 -> 130440 bytes site/assets/icon.png | Bin 0 -> 35437 bytes site/assets/settings.png | Bin 0 -> 123439 bytes site/assets/site.css | 4 + site/content.json | 57 + site/es/index.html | 7 + site/index.html | 7 + site/ru/index.html | 7 + site/zh-Hans/index.html | 7 + 263 files changed, 34774 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/bug.yml create mode 100644 .github/ISSUE_TEMPLATE/config.yml create mode 100644 .github/workflows/android.yml create mode 100644 .github/workflows/pages.yml create mode 100644 .gitignore create mode 100644 CHANGELOG.md create mode 100644 LICENSE create mode 100644 README.md create mode 100644 README.zh-CN.md create mode 100644 SECURITY.md create mode 100644 asset/xcertplay.png create mode 100644 asset/xcertplay_small.png create mode 100644 automotive/.gitignore create mode 100644 automotive/build.gradle.kts create mode 100644 automotive/src/main/AndroidManifest.xml create mode 100644 automotive/src/main/keepRules/rules.keep create mode 100644 automotive/src/main/res/values/config.xml create mode 100644 build.gradle.kts create mode 100644 common/build.gradle.kts create mode 100644 common/src/main/AndroidManifest.xml create mode 100644 common/src/main/java/com/shilapi/xcertplay/AirPlayPersistence.kt create mode 100644 common/src/main/java/com/shilapi/xcertplay/BootReceiver.kt create mode 100644 common/src/main/java/com/shilapi/xcertplay/CarPlayHostActivity.kt create mode 100644 common/src/main/java/com/shilapi/xcertplay/DarkMode.kt create mode 100644 common/src/main/java/com/shilapi/xcertplay/DiPlayActivity.kt create mode 100644 common/src/main/java/com/shilapi/xcertplay/DiPlayBluetooth.kt create mode 100644 common/src/main/java/com/shilapi/xcertplay/DiPlayBootstrap.kt create mode 100644 common/src/main/java/com/shilapi/xcertplay/DiPlaySessionService.kt create mode 100644 common/src/main/java/com/shilapi/xcertplay/DiagnosticExportStore.kt create mode 100644 common/src/main/java/com/shilapi/xcertplay/DiagnosticRedactor.kt create mode 100644 common/src/main/java/com/shilapi/xcertplay/DisplayDiagnosticSnapshot.kt create mode 100644 common/src/main/java/com/shilapi/xcertplay/ImageCropActivity.kt create mode 100644 common/src/main/java/com/shilapi/xcertplay/MainActivity.kt create mode 100644 common/src/main/java/com/shilapi/xcertplay/SafeAreaEditorView.kt create mode 100644 common/src/main/java/com/shilapi/xcertplay/SessionLogFile.kt create mode 100644 common/src/main/java/com/shilapi/xcertplay/ui/theme/Color.kt create mode 100644 common/src/main/java/com/shilapi/xcertplay/ui/theme/Theme.kt create mode 100644 common/src/main/java/com/shilapi/xcertplay/ui/theme/Type.kt create mode 100644 common/src/main/res/drawable/ic_carplay.png create mode 100644 common/src/main/res/drawable/ic_diplay_notification.xml create mode 100644 common/src/main/res/raw/placeholder_icon.png create mode 100644 common/src/main/res/values/config.xml create mode 100644 common/src/main/res/values/strings.xml create mode 100644 common/src/main/res/values/themes.xml create mode 100644 common/src/main/res/xml/backup_rules.xml create mode 100644 common/src/main/res/xml/data_extraction_rules.xml create mode 100644 common/src/main/res/xml/usb_device_filter.xml create mode 100644 common/src/test/java/com/shilapi/xcertplay/DarkModeTest.kt create mode 100644 common/src/test/java/com/shilapi/xcertplay/DiagnosticExportStoreTest.kt create mode 100644 common/src/test/java/com/shilapi/xcertplay/DiagnosticRedactorTest.kt create mode 100644 common/src/test/java/com/shilapi/xcertplay/DisplayDiagnosticSnapshotTest.kt create mode 100644 common/src/test/java/com/shilapi/xcertplay/WifiP2pGroupManagerTest.kt create mode 100644 docs/BUILD.md create mode 100644 docs/COMPATIBILITY.md create mode 100644 docs/INSTALL.md create mode 100644 docs/PRIVACY.md create mode 100644 docs/TESTING.md create mode 100644 docs/THIRD_PARTY_NOTICES.md create mode 100644 docs/UPSTREAM-README.md create mode 100644 docs/UPSTREAM-README.zh-CN.md create mode 100644 docs/VALIDATION.md create mode 100644 docs/licenses/DiAuto-AGPL-3.0.txt create mode 100644 docs/licenses/dependencies/Apache-2.0.txt create mode 100644 docs/licenses/dependencies/Bouncy-Castle-LICENSE.txt create mode 100644 docs/licenses/dependencies/SLF4J-LICENSE.txt create mode 100644 gradle.properties create mode 100644 gradle/gradle-daemon-jvm.properties create mode 100644 gradle/libs.versions.toml create mode 100644 gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100755 gradlew create mode 100644 gradlew.bat create mode 100644 mobile/.gitignore create mode 100644 mobile/build.gradle.kts create mode 100644 mobile/src/main/AndroidManifest.xml create mode 100644 mobile/src/main/keepRules/rules.keep create mode 100644 mobile/src/main/res/values/config.xml create mode 100644 mobile/src/main/res/values/strings.xml create mode 100644 scripts/build-beta.py create mode 100644 scripts/build_site.py create mode 100644 scripts/check_public_tree.py create mode 100644 settings.gradle.kts create mode 100644 shared/.gitignore create mode 100644 shared/build.gradle create mode 100644 shared/src/main/AndroidManifest.xml create mode 100644 shared/src/main/ic_launcher-playstore.png create mode 100644 shared/src/main/java/com/shilapi/xcertplay/airplay/AirPlayConfig.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/airplay/AirPlayCrypto.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/airplay/AirPlayDisplaySettings.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/airplay/AirPlayHid.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/airplay/AirPlayIapTunnelStream.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/airplay/AirPlayIdentity.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/airplay/AirPlayInfoPlist.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/airplay/AirPlayPeerDiagnostics.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/airplay/AirPlaySession.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/airplay/AudioPacketCapture.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/airplay/AudioStream.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/airplay/BplistCodec.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/airplay/Bytes.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/airplay/CarPlayDisplayScale.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/airplay/CarPlayMediaEngine.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/airplay/CarPlayUiScale.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/airplay/ControlCipher.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/airplay/IapTunnel.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/airplay/MfiSapAuthSetup.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/airplay/MicrophonePacketizer.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/airplay/NtpClock.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/airplay/PairSetup.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/airplay/PairVerify.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/airplay/PairingStore.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/airplay/RtspMessage.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/airplay/SafeArea.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/airplay/ScreenStream.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/airplay/Srp6a.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/airplay/Tlv8Codec.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/iap2/body/Iap2BodyBuilder.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/iap2/body/Iap2BodyReader.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/iap2/catalog/Iap2Endpoint.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/iap2/message/Iap2Messages.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/iap2/session/Iap2Session.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/iap2/trace/Iap2FrameFormatter.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/iap2/wire/Iap2CsmFramer.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/iap2/wire/Iap2Wire.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/iap2/wire/Iap2WireCodec.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/location/AndroidCarPlayLocationProvider.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/media/AndroidMediaSink.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/media/AudioChannelMapping.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/media/CarPlayTouchMapper.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/media/MediaCodecSupport.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/media/MicrophoneUplink.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/media/OpusEncoder.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/media/VideoDecodeQueue.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/mfi/Iap2MfiAuthenticationClient.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/mfi/LocalMfiAuthenticationClient.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/mfi/LocalMfiProbe.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/mfi/MfiAuthenticationClient.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/mfi/MfiDeviceScanner.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/mfi/MfiSelfCheck.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/mfi/RemoteMfiAuthenticationClient.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/network/CarPlayBonjour.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/network/CarPlayVpnService.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/network/Ipv6NcmBridge.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/network/LocalOnlyHotspotManager.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/network/ManualHotspotManager.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/network/P2pConfigurationMemory.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/network/P2pOwnership.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/network/P2pStartupRecovery.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/network/WifiP2pGroupManager.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/network/WirelessHotspotManager.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/orchestration/CarPlayController.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/orchestration/CarPlayRuntimeConfig.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/orchestration/MfiRuntime.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/orchestration/WirelessConnectionProof.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/shared/MyCarAppScreen.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/shared/MyCarAppService.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/shared/MyCarAppSession.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/transport/BlockingDuplexByteStream.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/transport/BluetoothRfcommDuplexStream.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/transport/Ch341DeviceMatcher.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/transport/Ch341I2cStreamEncoder.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/transport/Ch341I2cTransport.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/transport/Ch341UsbHost.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/transport/EthernetIpv6Codec.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/transport/I2cTransport.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/transport/Iap2ControlDeadline.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/transport/Iap2CsmChannel.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/transport/Iap2IdentificationClient.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/transport/Iap2LinkChannel.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/transport/Iap2LinkEngine.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/transport/Iap2LocationClient.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/transport/Iap2UsbMuxHost.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/transport/Iap2WiredControlClient.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/transport/Iap2WirelessControlClient.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/transport/IphoneCarPlayConfiguration.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/transport/IphoneUsbHost.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/transport/LinuxI2cTransport.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/transport/LockdownCarKitClient.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/transport/LockdownPairRecord.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/transport/LockdownPairingClient.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/transport/LockdownPlistChannel.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/transport/LockdownTlsEngineFactory.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/transport/NcmFunctionDiscovery.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/transport/NcmUsbBridge.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/transport/Ntb16Codec.kt create mode 100644 shared/src/main/java/com/shilapi/xcertplay/transport/TlsDuplexChannel.kt create mode 100644 shared/src/main/jni/Android.mk create mode 100644 shared/src/main/jni/Application.mk create mode 100644 shared/src/main/jni/linux_i2c_jni.c create mode 100644 shared/src/main/res/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 shared/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml create mode 100644 shared/src/main/res/mipmap-hdpi/ic_launcher.webp create mode 100644 shared/src/main/res/mipmap-hdpi/ic_launcher_background.webp create mode 100644 shared/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp create mode 100644 shared/src/main/res/mipmap-hdpi/ic_launcher_monochrome.webp create mode 100644 shared/src/main/res/mipmap-hdpi/ic_launcher_round.webp create mode 100644 shared/src/main/res/mipmap-mdpi/ic_launcher.webp create mode 100644 shared/src/main/res/mipmap-mdpi/ic_launcher_background.webp create mode 100644 shared/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp create mode 100644 shared/src/main/res/mipmap-mdpi/ic_launcher_monochrome.webp create mode 100644 shared/src/main/res/mipmap-mdpi/ic_launcher_round.webp create mode 100644 shared/src/main/res/mipmap-xhdpi/ic_launcher.webp create mode 100644 shared/src/main/res/mipmap-xhdpi/ic_launcher_background.webp create mode 100644 shared/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp create mode 100644 shared/src/main/res/mipmap-xhdpi/ic_launcher_monochrome.webp create mode 100644 shared/src/main/res/mipmap-xhdpi/ic_launcher_round.webp create mode 100644 shared/src/main/res/mipmap-xxhdpi/ic_launcher.webp create mode 100644 shared/src/main/res/mipmap-xxhdpi/ic_launcher_background.webp create mode 100644 shared/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp create mode 100644 shared/src/main/res/mipmap-xxhdpi/ic_launcher_monochrome.webp create mode 100644 shared/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp create mode 100644 shared/src/main/res/mipmap-xxxhdpi/ic_launcher.webp create mode 100644 shared/src/main/res/mipmap-xxxhdpi/ic_launcher_background.webp create mode 100644 shared/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp create mode 100644 shared/src/main/res/mipmap-xxxhdpi/ic_launcher_monochrome.webp create mode 100644 shared/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp create mode 100644 shared/src/main/res/xml/automotive_app_desc.xml create mode 100644 shared/src/test/java/com/shilapi/xcertplay/airplay/AirPlayDisplaySettingsTest.kt create mode 100644 shared/src/test/java/com/shilapi/xcertplay/airplay/AirPlayIapTunnelStreamTest.kt create mode 100644 shared/src/test/java/com/shilapi/xcertplay/airplay/AirPlayInfoPlistTest.kt create mode 100644 shared/src/test/java/com/shilapi/xcertplay/airplay/AirPlayPeerDiagnosticsTest.kt create mode 100644 shared/src/test/java/com/shilapi/xcertplay/airplay/CarPlayDisplayScaleTest.kt create mode 100644 shared/src/test/java/com/shilapi/xcertplay/airplay/CarPlayMediaEngineTest.kt create mode 100644 shared/src/test/java/com/shilapi/xcertplay/airplay/CarPlayUiScaleTest.kt create mode 100644 shared/src/test/java/com/shilapi/xcertplay/airplay/MicrophonePacketizerTest.kt create mode 100644 shared/src/test/java/com/shilapi/xcertplay/airplay/SafeAreaTest.kt create mode 100644 shared/src/test/java/com/shilapi/xcertplay/airplay/ScreenCodecTest.kt create mode 100644 shared/src/test/java/com/shilapi/xcertplay/iap2/Iap2ProtocolTest.kt create mode 100644 shared/src/test/java/com/shilapi/xcertplay/media/AndroidMediaSinkStateTest.kt create mode 100644 shared/src/test/java/com/shilapi/xcertplay/media/AudioChannelMappingTest.kt create mode 100644 shared/src/test/java/com/shilapi/xcertplay/media/MediaCodecSupportTest.kt create mode 100644 shared/src/test/java/com/shilapi/xcertplay/media/VideoDecodeQueueTest.kt create mode 100644 shared/src/test/java/com/shilapi/xcertplay/mfi/LocalMfiAuthenticationClientTest.kt create mode 100644 shared/src/test/java/com/shilapi/xcertplay/mfi/MfiAuthenticationClientTest.kt create mode 100644 shared/src/test/java/com/shilapi/xcertplay/mfi/MfiSelfCheckTest.kt create mode 100644 shared/src/test/java/com/shilapi/xcertplay/mfi/RemoteMfiAuthenticationClientTest.kt create mode 100644 shared/src/test/java/com/shilapi/xcertplay/network/CarPlayBonjourTest.kt create mode 100644 shared/src/test/java/com/shilapi/xcertplay/network/P2pOwnershipTest.kt create mode 100644 shared/src/test/java/com/shilapi/xcertplay/network/P2pStartupRecoveryTest.kt create mode 100644 shared/src/test/java/com/shilapi/xcertplay/network/WirelessHotspotManagerTest.kt create mode 100644 shared/src/test/java/com/shilapi/xcertplay/orchestration/ManualHotspotConfigTest.kt create mode 100644 shared/src/test/java/com/shilapi/xcertplay/orchestration/MfiTargetConfigTest.kt create mode 100644 shared/src/test/java/com/shilapi/xcertplay/orchestration/WirelessConnectionProofTest.kt create mode 100644 shared/src/test/java/com/shilapi/xcertplay/orchestration/WirelessHandoffTest.kt create mode 100644 shared/src/test/java/com/shilapi/xcertplay/transport/Ch341DeviceMatcherTest.kt create mode 100644 shared/src/test/java/com/shilapi/xcertplay/transport/Ch341I2cStreamEncoderTest.kt create mode 100644 shared/src/test/java/com/shilapi/xcertplay/transport/EthernetIpv6CodecTest.kt create mode 100644 shared/src/test/java/com/shilapi/xcertplay/transport/Iap2ControlDeadlineTest.kt create mode 100644 shared/src/test/java/com/shilapi/xcertplay/transport/Iap2LocationClientTest.kt create mode 100644 shared/src/test/java/com/shilapi/xcertplay/transport/Iap2WiredControlClientTest.kt create mode 100644 shared/src/test/java/com/shilapi/xcertplay/transport/Iap2WirelessControlClientTest.kt create mode 100644 shared/src/test/java/com/shilapi/xcertplay/transport/LinuxI2cTransportTest.kt create mode 100644 shared/src/test/java/com/shilapi/xcertplay/transport/Ntb16CodecTest.kt create mode 100644 site/.nojekyll create mode 100644 site/ar/index.html create mode 100644 site/assets/home.png create mode 100644 site/assets/icon.png create mode 100644 site/assets/settings.png create mode 100644 site/assets/site.css create mode 100644 site/content.json create mode 100644 site/es/index.html create mode 100644 site/index.html create mode 100644 site/ru/index.html create mode 100644 site/zh-Hans/index.html diff --git a/.github/ISSUE_TEMPLATE/bug.yml b/.github/ISSUE_TEMPLATE/bug.yml new file mode 100644 index 0000000..47a9a7d --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug.yml @@ -0,0 +1,36 @@ +name: Connection, display or audio problem +description: Help us reproduce an issue on your head unit. +title: '[Bug] ' +body: + - type: markdown + attributes: + value: 'Test while parked. Reports are public: review diagnostic files and remove personal information before attaching them. Never post credentials.' + - type: input + id: version + attributes: {label: DiPlay version, placeholder: '0.1.0'} + validations: {required: true} + - type: input + id: car + attributes: {label: Car and head-unit model, placeholder: 'Car model/year, DiLink version, Android version'} + validations: {required: true} + - type: input + id: phone + attributes: {label: iPhone model and exact iOS version} + validations: {required: true} + - type: dropdown + id: transport + attributes: + label: Connection + options: [Wireless, USB, Both] + validations: {required: true} + - type: textarea + id: reproduce + attributes: + label: What happened and how to reproduce it + description: 'Include expected behavior, steps, display settings and whether the car is also connected to a Wi-Fi network. For wireless, include the band/channel if the report shows it.' + validations: {required: true} + - type: textarea + id: diagnostics + attributes: + label: Diagnostic report or recording + description: 'Settings → Save diagnostic report; Android 10+ saves to Downloads/DiPlay. Attach the reviewed file here. If export fails, describe exactly when.' diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000..67f86f9 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,5 @@ +blank_issues_enabled: true +contact_links: + - name: Installation and connection help + url: https://github.com/shihabal3amri/DiPlay/blob/main/docs/INSTALL.md + about: Read setup and troubleshooting steps first. diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml new file mode 100644 index 0000000..dedbff2 --- /dev/null +++ b/.github/workflows/android.yml @@ -0,0 +1,35 @@ +name: Android checks +on: + push: + branches: [main] + pull_request: + workflow_dispatch: +permissions: + contents: read +jobs: + check: + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - uses: actions/checkout@v4 + - name: Reject credential files in public source + run: python3 scripts/check_public_tree.py + - uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: '25' + - uses: android-actions/setup-android@v3 + with: + packages: platform-tools platforms;android-37.0 build-tools;36.0.0 ndk;28.2.13676358 + - uses: gradle/actions/setup-gradle@v4 + - name: Unit tests, lint and source-only debug build + run: ./gradlew :shared:testDebugUnitTest :common:testDebugUnitTest :mobile:lintDebug :mobile:assembleDebug --stacktrace + - name: Test reports + if: always() + uses: actions/upload-artifact@v4 + with: + name: test-reports + path: | + shared/build/reports/tests/ + common/build/reports/tests/ + mobile/build/reports/lint-results-debug.html diff --git a/.github/workflows/pages.yml b/.github/workflows/pages.yml new file mode 100644 index 0000000..e2ae430 --- /dev/null +++ b/.github/workflows/pages.yml @@ -0,0 +1,28 @@ +name: Publish download site +on: + push: + branches: [main] + paths: ['site/**', 'scripts/build_site.py', '.github/workflows/pages.yml'] + workflow_dispatch: +permissions: + contents: read + pages: write + id-token: write +concurrency: + group: pages + cancel-in-progress: true +jobs: + deploy: + runs-on: ubuntu-latest + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + steps: + - uses: actions/checkout@v4 + - run: python3 scripts/build_site.py + - uses: actions/configure-pages@v5 + - uses: actions/upload-pages-artifact@v3 + with: + path: site + - uses: actions/deploy-pages@v4 + id: deployment diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..75d716a --- /dev/null +++ b/.gitignore @@ -0,0 +1,40 @@ +# Android Studio and local IDE state +.idea/ +*.iml +.vscode/ + +# Gradle and local tooling +.gradle/ +.kotlin/ +build/ +local.properties + +# Native build output +.cxx/ +.externalNativeBuild/ +captures/ + +# Local agent working notes +/agent_docs/ + +# OS files +.DS_Store +Thumbs.db +*.log +/.idea + +# Local beta credentials and release signing (never commit) +.private/ +*.jks +*.keystore +release-signing.properties + +# Never commit credential containers or installable distribution artifacts. +*.pk8 +*.p7b +*.p12 +*.pfx +*.pem +*.key +*.apk +*.aab diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..5624149 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,10 @@ +# Source reset — 2026-09-25 + +- Withdrew the 0.1.0 APK and removed its release tag. +- Reset the public branch after preserving restricted local incident records. +- Removed static synthetic test private keys; generate test identities at runtime. +- Removed automatic private-asset packaging and disabled the old release build script. +- Added a build guard rejecting credential asset files. +- Replaced the download site with a five-language suspension notice. + +No replacement APK has been released. Existing copies cannot be recalled by a Git history reset. diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..f288702 --- /dev/null +++ b/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/README.md b/README.md new file mode 100644 index 0000000..02be52c --- /dev/null +++ b/README.md @@ -0,0 +1,17 @@ +# DiPlay + +Independent CarPlay receiver research for Android head units, based on xcertplay with a DiAuto-style interface. + +## Downloads suspended + +The 0.1.0 APK was withdrawn because it bundled a recovered third-party accessory identity. Do not redistribute that APK or extract its identity for new builds. No replacement APK is available. + +Public branch history has been reset to this reviewed source snapshot. The previous release and tag are removed; restricted local incident records are retained. Rewriting history does not recall downloaded copies or invalidate an exposed credential. + +This source snapshot contains no accessory private-key files. Synthetic test identities are generated at test runtime. Automatic private-asset packaging has been removed and the build rejects credential asset files. A source-only build does not provide working standalone CarPlay without an authorized authentication design. + +[Project status](https://shihabal3amri.github.io/DiPlay/) · [Build instructions](docs/BUILD.md) · [Security](SECURITY.md) · [Privacy](docs/PRIVACY.md) + +## Credits + +Based on [xcertplay](https://github.com/shilapi/xcertplay), GPL-3.0. Home/settings UI and website adapt [DiAuto](https://github.com/shihabal3amri/DiAuto), AGPL-3.0. License texts and attribution remain in this repository. CarPlay and its icon belong to Apple Inc. No affiliation with Apple or BYD is implied. diff --git a/README.zh-CN.md b/README.zh-CN.md new file mode 100644 index 0000000..7d177ba --- /dev/null +++ b/README.zh-CN.md @@ -0,0 +1,7 @@ +# DiPlay + +APK 下载已暂停。0.1.0 版本包含提取自第三方固件的配件身份,现已撤下。请勿继续分发该 APK 或提取其中的身份用于新构建。目前没有替代 APK。 + +公开分支已重置为经过审查的源代码快照。删除历史记录不会撤回已下载的副本,也不会使已泄露的凭据失效。测试密钥现在在测试运行时生成,不再存储于仓库。 + +[项目状态](https://shihabal3amri.github.io/DiPlay/zh-Hans/) · [完整说明](README.md) diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000..396ff2f --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,15 @@ +# Distribution suspended + +The 0.1.0 APK was withdrawn after identifying exposure of a recovered third-party accessory private key bundled in the APK. Do not redistribute the APK or reuse that identity in new packages. + +The public branch has been reset and the old release/tag removed. Restricted local release records and the original repository bundle are preserved for investigation. These steps reduce exposure through project-controlled links; they do not recall existing copies or revoke the credential. + +A review of the original published Git objects found no copy of the exposed key in binary or common text encodings, including the private scalar. The original Git tree did contain a different synthetic test key; that file has also been removed. Tests now generate self-signed identities at runtime. + +The Android APK-signing key is separate. No evidence of its publication was found in the audited source or release contents. Changing that signing key would not remediate the accessory-key exposure. + +Do not include credentials, pairing records or personal information in public issues. Use GitHub private vulnerability reporting for sensitive findings. Credential revocation or replacement must be coordinated with the verified credential owner/provider; this project cannot declare those actions completed. + +A future release requires authorized authentication provisioning. Obfuscating an already exposed shared key, encrypting it with a key shipped in the app, or rewriting Git history does not restore confidentiality. + +GitHub guidance: https://docs.github.com/en/code-security/tutorials/remediate-leaked-secrets/remediating-a-leaked-secret diff --git a/asset/xcertplay.png b/asset/xcertplay.png new file mode 100644 index 0000000000000000000000000000000000000000..5e432591d8ccd57fc4a967c2441f2d1859cd41c9 GIT binary patch literal 2685656 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%0DE1sB`B9QyN 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

sDG$o;vK=YQ! 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%0Dr(KrH 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

kIrgDG>ONh1P;!2@b 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 z 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ℑ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

  • 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

    * zvLnJHW=@KWwdol9fKWoL7ru`RWp9ppbN%NMrBW38{88*Fr?+adcoSjT;~VN)ERI)| ztI&;kNpyXXRbKOGUg_$%Ic0KnA(?6oeOQ9xywTVI%^K@8AKJH`*Cj17F_fu7&>pZU z&$XxuW4U|ZWUvZdUyIJkXQDqIZr(bHVIrE0mwfW7C zX-t2Boox?5I*tcrS8TuWZgj0U9I-Z1X?s$ihf^CbSHD>6*Uvehh1)scA<0*4PGNeIq*3Zii7Q(Ou*{2Zpvp@GdBR8QV8J9`U<)n ztZlRc;)d;X5PLGE0l_#O-lRj4G%b}5DQa@S=ay!54SuyP84%95H2_%Q7$Vz9xCte4 zrK1V}9HL?>AC+(1N=udpt4sCxxn5gBm-ydQ(pYk#|R(lxLF+0?xt1Mt!& z)POq-1hfHl?AEEd{2j0ZVcM=n>%2?OWtd%8aiVyAmV=%Mb2kwlRBQNpKhnu4j&@*9sM3XTdG1q+2ZoiB%K9SBj%9<((k8O}KHM$d(l;k&XIW_j9U{DhYWadz=>Q zg69=Bv0zY#s0qP(XnM7Urzhyp9o80vFo#*oRBAdiyM<$ z+9OTYG4Wrzf=aa$@-**l`KIn^@~P517EVfQ?LG>AuVgV;K#{oCvcl4G|BR3HC%#dZ ztOgAPO4{i$WR!n(yTCutp{_zkqLU_z*EzuqkHq?Ux431;kTV8B7x^>Z{m#$mjGyJ# zs?=5A&XRfgESOL8*lKB;EVM1@_va`5Sw4ZKD&kvzS@Cy2__!%~mS45<`7cELi;wG@ z0B+&5;N4N?eGLR}_2R+(H0vw_8QKtzb-#$oG`oeRG2++U*wNe0Cg+%SApK>H9Gt3bS=i z`(%uso?uNQkVz92R;8K#4?2q~T>r!>NUx(nOIJ6ovrR$zlx5p&PkZ*M@*aTo9ClUa zPS&K^vfq^#)vxAvts^WPt8veYb)$n*ymqK;8pq)Pjc035QA;j2)?l5KtJaBm<;Dor zpG=v8Q=?n|hh&ssi?w0c(^e<6N>7UQHC|055SMFZ%@2_2*b4{j;cO#Tr(k$1hh44$VQx|BD$ z27!?!zSTP6V=xE2KkPaN%%sxWGDUnwa%Cu}u{Sk{t{0)=8us}S%25>ziAftB<*LVV zsxV=QO7f82jg5^$yd?7y>e35bYAnB{-WAVOY;r

    S}91sm8o1etyRG`$v#i{Q*&!Zs6zBkcJm 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

    1(q`tn83O?3xvhuWn5I&4iy;1Xl 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

    RdEPb}gm9ZHgxkHiFmA}e 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

    Hp~p0LZ~OPx}n!%nwNW&QrVF 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

    dyvTO~H8!5EjIe0H;XHz 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ð>x9GwydI_l7G*w3-OYh0=_f)5*hOPb}*N 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 z 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≥o0fzg8!mz|_(@&D4@d3yEP% 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

    #k)AAR5kvP{vjO`TcEbR7&CT`r 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 HWan~{Es<=+NeCZEf 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

    9TRcpZw^{`{kjEhz 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%0DInAH6 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�@lCng&}D152d-!|FZDS9Q8 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 literal 0 HcmV?d00001 diff --git a/asset/xcertplay_small.png b/asset/xcertplay_small.png new file mode 100644 index 0000000000000000000000000000000000000000..a62b81bcce9d3906d34a7c376add2a0effbdeebe GIT binary patch literal 267552 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�PQQKzfrEQRZpUXUZ0^J^hqYgQBm$tmva8eoB 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 TieIFl00000NkvXXu0mjfWl;W0 literal 0 HcmV?d00001 diff --git a/automotive/.gitignore b/automotive/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/automotive/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/automotive/build.gradle.kts b/automotive/build.gradle.kts new file mode 100644 index 0000000..0da638c --- /dev/null +++ b/automotive/build.gradle.kts @@ -0,0 +1,64 @@ +plugins { + alias(libs.plugins.android.application) + alias(libs.plugins.kotlin.compose) +} + +android { + namespace = "com.shilapi.xcertplay" + compileSdk { + version = release(37) + } + + defaultConfig { + applicationId = "com.shilapi.xcertplay" + minSdk = 28 + targetSdk = 37 + versionCode = 1201 + versionName = "1.2.1" + + } + + signingConfigs { + create("release") { + storeFile = file( + providers.environmentVariable("ANDROID_KEYSTORE_PATH") + .getOrElse("missing-release-keystore.jks"), + ) + storePassword = providers.environmentVariable("ANDROID_KEYSTORE_PASSWORD").getOrElse("") + keyAlias = providers.environmentVariable("ANDROID_KEY_ALIAS").getOrElse("") + keyPassword = providers.environmentVariable("ANDROID_KEY_PASSWORD").getOrElse("") + } + } + + buildTypes { + release { + optimization { + enable = false + } + signingConfig = signingConfigs.getByName("release") + } + } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 + } + buildFeatures { + compose = true + } +} + +dependencies { + implementation(project(":common")) + implementation(project(":shared")) + implementation(platform(libs.androidx.compose.bom)) + implementation(libs.androidx.activity.compose) + implementation(libs.androidx.app.automotive) + implementation(libs.androidx.appcompat) + implementation(libs.androidx.compose.material3) + implementation(libs.androidx.compose.ui) + implementation(libs.androidx.compose.ui.graphics) + implementation(libs.androidx.compose.ui.tooling.preview) + implementation(libs.androidx.core.ktx) + implementation(libs.androidx.lifecycle.runtime.ktx) + debugImplementation(libs.androidx.compose.ui.tooling) +} diff --git a/automotive/src/main/AndroidManifest.xml b/automotive/src/main/AndroidManifest.xml new file mode 100644 index 0000000..61f5c73 --- /dev/null +++ b/automotive/src/main/AndroidManifest.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + diff --git a/automotive/src/main/keepRules/rules.keep b/automotive/src/main/keepRules/rules.keep new file mode 100644 index 0000000..d7e081a --- /dev/null +++ b/automotive/src/main/keepRules/rules.keep @@ -0,0 +1,12 @@ +# Add project specific R8 rules here. +# AGP will combine all keep rule files in src/main/keepRules to pass to R8 +# +# For more details, see +# https://d.android.com/r/tools/r8/keep-rules + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} \ No newline at end of file diff --git a/automotive/src/main/res/values/config.xml b/automotive/src/main/res/values/config.xml new file mode 100644 index 0000000..e2c7cde --- /dev/null +++ b/automotive/src/main/res/values/config.xml @@ -0,0 +1,3 @@ + + true + diff --git a/build.gradle.kts b/build.gradle.kts new file mode 100644 index 0000000..18318be --- /dev/null +++ b/build.gradle.kts @@ -0,0 +1,5 @@ +// Top-level build file where you can add configuration options common to all sub-projects/modules. +plugins { + alias(libs.plugins.android.application) apply false + alias(libs.plugins.kotlin.compose) apply false +} \ No newline at end of file diff --git a/common/build.gradle.kts b/common/build.gradle.kts new file mode 100644 index 0000000..ca40419 --- /dev/null +++ b/common/build.gradle.kts @@ -0,0 +1,38 @@ +plugins { + id("com.android.library") + alias(libs.plugins.kotlin.compose) +} + +android { + namespace = "com.shilapi.xcertplay.host" + compileSdk { + version = release(37) + } + + defaultConfig { + minSdk = 28 + } + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 + } + + buildFeatures { + compose = true + } +} + +dependencies { + api(project(":shared")) + implementation(platform(libs.androidx.compose.bom)) + implementation(libs.androidx.activity.compose) + implementation(libs.androidx.compose.material3) + implementation(libs.androidx.compose.ui) + implementation(libs.androidx.compose.ui.graphics) + implementation(libs.androidx.compose.ui.tooling.preview) + implementation(libs.androidx.core.ktx) + implementation(libs.androidx.lifecycle.runtime.ktx) + testImplementation(libs.junit) + testImplementation("org.robolectric:robolectric:4.17") +} diff --git a/common/src/main/AndroidManifest.xml b/common/src/main/AndroidManifest.xml new file mode 100644 index 0000000..545fa78 --- /dev/null +++ b/common/src/main/AndroidManifest.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/common/src/main/java/com/shilapi/xcertplay/AirPlayPersistence.kt b/common/src/main/java/com/shilapi/xcertplay/AirPlayPersistence.kt new file mode 100644 index 0000000..345868a --- /dev/null +++ b/common/src/main/java/com/shilapi/xcertplay/AirPlayPersistence.kt @@ -0,0 +1,587 @@ +package com.shilapi.xcertplay + +import android.content.Context +import android.os.Build +import com.shilapi.xcertplay.airplay.AirPlayDisplaySettings +import com.shilapi.xcertplay.airplay.AirPlayPhysicalSizeBasis +import com.shilapi.xcertplay.airplay.CarPlayDisplayScale +import com.shilapi.xcertplay.airplay.CarPlayUiScale +import com.shilapi.xcertplay.airplay.AirPlayIdentity +import com.shilapi.xcertplay.airplay.PairingStore +import com.shilapi.xcertplay.airplay.SafeAreaCodec +import com.shilapi.xcertplay.airplay.SafeAreaRect +import com.shilapi.xcertplay.orchestration.ManualHotspotBand +import com.shilapi.xcertplay.orchestration.ManualHotspotSecurity +import com.shilapi.xcertplay.orchestration.MfiTarget +import com.shilapi.xcertplay.orchestration.WirelessHotspotMode +import com.shilapi.xcertplay.transport.LockdownPairRecord +import java.io.File + +/** SharedPreferences persistence for the accessory identity and paired controllers. */ +object AirPlayPersistence { + private const val PREFS = "xcertplay_airplay" + private const val KEY_IDENT_PRIVATE = "identity_private" + private const val KEY_IDENT_PUBLIC = "identity_public" + private const val KEY_PAIRING_ID = "pairing_id" + private const val KEY_PAIRING_IDS = "pairing_ids" + private const val KEY_LOCKDOWN_HOST_ID = "lockdown_host_id" + private const val KEY_LOCKDOWN_SYSTEM_BUID = "lockdown_system_buid" + private const val KEY_LOCKDOWN_WIFI_MAC = "lockdown_wifi_mac" + private const val KEY_LOCKDOWN_DEVICE_PUBLIC = "lockdown_device_public" + private const val KEY_LOCKDOWN_DEVICE_CERT = "lockdown_device_cert" + private const val KEY_LOCKDOWN_HOST_PRIVATE = "lockdown_host_private" + private const val KEY_LOCKDOWN_HOST_CERT = "lockdown_host_cert" + private const val KEY_LOCKDOWN_ROOT_PRIVATE = "lockdown_root_private" + private const val KEY_LOCKDOWN_ROOT_CERT = "lockdown_root_cert" + private const val KEY_DISPLAY_SCALE_TENTHS = "display_scale_tenths" + private const val KEY_UI_SCALE_PERCENT = "ui_scale_percent" + private const val KEY_HEVC_ENABLED = "hevc_enabled" + private const val KEY_HEVC_SOFTWARE_DECODER = "hevc_software_decoder" + private const val KEY_ADVANCED_AUDIO_CHANNEL_MAPPING = "advanced_audio_channel_mapping" + private const val KEY_WIRELESS_ENABLED = "wireless_enabled" + private const val KEY_WIRELESS_HOTSPOT_MODE = "wireless_hotspot_mode" + private const val KEY_MANUAL_HOTSPOT_SSID = "manual_hotspot_ssid" + private const val KEY_MANUAL_HOTSPOT_PASSPHRASE = "manual_hotspot_passphrase" + private const val KEY_MANUAL_HOTSPOT_BAND = "manual_hotspot_band" + private const val KEY_MANUAL_HOTSPOT_CHANNEL = "manual_hotspot_channel" + private const val KEY_MANUAL_HOTSPOT_SECURITY = "manual_hotspot_security" + private const val KEY_DEBUG_LOGS_ENABLED = "debug_logs_enabled" + private const val KEY_MANUFACTURER = "manufacturer" + private const val KEY_MODEL = "model" + private const val KEY_OEM_LABEL = "oem_label" + private const val KEY_FPS = "display_fps" + private const val KEY_WIDTH_PHYSICAL_MM = "display_width_physical_mm" + private const val KEY_PHYSICAL_SIZE_BASIS = "display_physical_size_basis" + private const val KEY_MAX_DETECTED_WIDTH = "display_max_detected_width" + private const val KEY_MAX_DETECTED_HEIGHT = "display_max_detected_height" + private const val KEY_RIGHT_HAND_DRIVE = "right_hand_drive" + private const val KEY_HIDE_TOP_BAR = "hide_top_bar" + private const val KEY_HIDE_BOTTOM_BAR = "hide_bottom_bar" + private const val KEY_SAFE_AREA_DRAW_OUTSIDE = "safe_area_draw_outside" + private const val KEY_AUTO_START_ON_BOOT = "auto_start_on_boot" + private const val KEY_LOCATION_REPORTING_ENABLED = "location_reporting_enabled" + private const val KEY_MFI_TARGET = "mfi_target" + private const val KEY_MFI_I2C_PATH = "mfi_i2c_path" + private const val KEY_REMOTE_MFI_SERVER = "remote_mfi_server" + private const val KEY_REMOTE_MFI_TOKEN = "remote_mfi_token" + private const val SAFE_AREA_KEY_PREFIX = "safe_area_" + private const val CUSTOM_ICON_FILE = "airplay-icon.png" + + const val DEFAULT_MANUFACTURER = "DiPlay" + const val DEFAULT_MODEL = "DiPlay" + const val DEFAULT_OEM_LABEL = "" + const val DEFAULT_MFI_I2C_PATH = "/dev/i2c-1" + + fun loadDisplayScaleTenths(context: Context): Int { + val prefs = context.getSharedPreferences(PREFS, Context.MODE_PRIVATE) + return CarPlayDisplayScale.sanitize( + prefs.getInt(KEY_DISPLAY_SCALE_TENTHS, CarPlayDisplayScale.DEFAULT_TENTHS), + ) + } + + fun saveDisplayScaleTenths(context: Context, tenths: Int) { + context.getSharedPreferences(PREFS, Context.MODE_PRIVATE).edit() + .putInt(KEY_DISPLAY_SCALE_TENTHS, CarPlayDisplayScale.sanitize(tenths)) + .apply() + } + + fun loadHevcEnabled(context: Context): Boolean = + context.getSharedPreferences(PREFS, Context.MODE_PRIVATE) + .getBoolean(KEY_HEVC_ENABLED, false) + + fun loadUiScalePercent(context: Context): Int = CarPlayUiScale.sanitize( + context.getSharedPreferences(PREFS, Context.MODE_PRIVATE) + .getInt(KEY_UI_SCALE_PERCENT, CarPlayUiScale.DEFAULT), + ) + + fun saveUiScalePercent(context: Context, percent: Int) { + context.getSharedPreferences(PREFS, Context.MODE_PRIVATE).edit() + .putInt(KEY_UI_SCALE_PERCENT, CarPlayUiScale.sanitize(percent)).apply() + } + + fun saveHevcEnabled(context: Context, enabled: Boolean) { + context.getSharedPreferences(PREFS, Context.MODE_PRIVATE).edit() + .putBoolean(KEY_HEVC_ENABLED, enabled) + .apply() + } + + fun loadHevcSoftwareDecoderEnabled(context: Context): Boolean = + context.getSharedPreferences(PREFS, Context.MODE_PRIVATE) + .getBoolean(KEY_HEVC_SOFTWARE_DECODER, false) + + fun saveHevcSoftwareDecoderEnabled(context: Context, enabled: Boolean) { + context.getSharedPreferences(PREFS, Context.MODE_PRIVATE).edit() + .putBoolean(KEY_HEVC_SOFTWARE_DECODER, enabled) + .apply() + } + + fun loadAdvancedAudioChannelMapping(context: Context): Boolean = + context.getSharedPreferences(PREFS, Context.MODE_PRIVATE) + .getBoolean(KEY_ADVANCED_AUDIO_CHANNEL_MAPPING, false) + + fun saveAdvancedAudioChannelMapping(context: Context, enabled: Boolean) { + context.getSharedPreferences(PREFS, Context.MODE_PRIVATE).edit() + .putBoolean(KEY_ADVANCED_AUDIO_CHANNEL_MAPPING, enabled) + .apply() + } + + fun loadWirelessEnabled(context: Context): Boolean = + context.getSharedPreferences(PREFS, Context.MODE_PRIVATE) + .getBoolean(KEY_WIRELESS_ENABLED, true) + + fun saveWirelessEnabled(context: Context, enabled: Boolean) { + context.getSharedPreferences(PREFS, Context.MODE_PRIVATE).edit() + .putBoolean(KEY_WIRELESS_ENABLED, enabled) + .apply() + } + + fun loadMfiTarget(context: Context): MfiTarget { + val stored = context.getSharedPreferences(PREFS, Context.MODE_PRIVATE) + .getString(KEY_MFI_TARGET, null) + return MfiTarget.entries.firstOrNull { it.name == stored } ?: MfiTarget.LOCAL + } + + fun saveMfiTarget(context: Context, target: MfiTarget) { + context.getSharedPreferences(PREFS, Context.MODE_PRIVATE).edit() + .putString(KEY_MFI_TARGET, target.name) + .apply() + } + + fun loadMfiI2cPath(context: Context): String = + context.getSharedPreferences(PREFS, Context.MODE_PRIVATE) + .getString(KEY_MFI_I2C_PATH, null) + ?.takeIf { it.isNotBlank() } + ?: DEFAULT_MFI_I2C_PATH + + fun saveMfiI2cPath(context: Context, path: String) { + context.getSharedPreferences(PREFS, Context.MODE_PRIVATE).edit() + .putString(KEY_MFI_I2C_PATH, path.trim()) + .apply() + } + + fun loadRemoteMfiServer(context: Context): String = + context.getSharedPreferences(PREFS, Context.MODE_PRIVATE) + .getString(KEY_REMOTE_MFI_SERVER, null) + .orEmpty() + + fun saveRemoteMfiServer(context: Context, server: String) { + context.getSharedPreferences(PREFS, Context.MODE_PRIVATE).edit() + .putString(KEY_REMOTE_MFI_SERVER, server) + .apply() + } + + fun loadRemoteMfiToken(context: Context): String = + context.getSharedPreferences(PREFS, Context.MODE_PRIVATE) + .getString(KEY_REMOTE_MFI_TOKEN, null) + .orEmpty() + + fun saveRemoteMfiToken(context: Context, token: String) { + context.getSharedPreferences(PREFS, Context.MODE_PRIVATE).edit() + .putString(KEY_REMOTE_MFI_TOKEN, token) + .apply() + } + + fun loadWirelessHotspotMode(context: Context): WirelessHotspotMode { + val stored = context.getSharedPreferences(PREFS, Context.MODE_PRIVATE) + .getString(KEY_WIRELESS_HOTSPOT_MODE, null) + val mode = WirelessHotspotMode.entries.firstOrNull { it.name == stored } + ?: WirelessHotspotMode.WIFI_P2P + return if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q && + mode == WirelessHotspotMode.WIFI_P2P + ) { + WirelessHotspotMode.LOCAL_ONLY_HOTSPOT + } else { + mode + } + } + + fun saveWirelessHotspotMode(context: Context, mode: WirelessHotspotMode) { + context.getSharedPreferences(PREFS, Context.MODE_PRIVATE).edit() + .putString(KEY_WIRELESS_HOTSPOT_MODE, mode.name) + .apply() + } + + fun loadManualHotspotSsid(context: Context): String = + context.getSharedPreferences(PREFS, Context.MODE_PRIVATE) + .getString(KEY_MANUAL_HOTSPOT_SSID, null) + .orEmpty() + + fun saveManualHotspotSsid(context: Context, ssid: String) { + context.getSharedPreferences(PREFS, Context.MODE_PRIVATE).edit() + .putString(KEY_MANUAL_HOTSPOT_SSID, ssid) + .apply() + } + + fun loadManualHotspotPassphrase(context: Context): String = + context.getSharedPreferences(PREFS, Context.MODE_PRIVATE) + .getString(KEY_MANUAL_HOTSPOT_PASSPHRASE, null) + .orEmpty() + + fun saveManualHotspotPassphrase(context: Context, passphrase: String) { + context.getSharedPreferences(PREFS, Context.MODE_PRIVATE).edit() + .putString(KEY_MANUAL_HOTSPOT_PASSPHRASE, passphrase) + .apply() + } + + fun loadManualHotspotBand(context: Context): ManualHotspotBand { + val stored = context.getSharedPreferences(PREFS, Context.MODE_PRIVATE) + .getString(KEY_MANUAL_HOTSPOT_BAND, null) + return ManualHotspotBand.entries.firstOrNull { it.name == stored } + ?: ManualHotspotBand.AUTO + } + + fun saveManualHotspotBand(context: Context, band: ManualHotspotBand) { + context.getSharedPreferences(PREFS, Context.MODE_PRIVATE).edit() + .putString(KEY_MANUAL_HOTSPOT_BAND, band.name) + .apply() + } + + fun loadManualHotspotChannel(context: Context): Int = + context.getSharedPreferences(PREFS, Context.MODE_PRIVATE) + .getInt(KEY_MANUAL_HOTSPOT_CHANNEL, 0) + .coerceIn(0, 196) + + fun saveManualHotspotChannel(context: Context, channel: Int) { + context.getSharedPreferences(PREFS, Context.MODE_PRIVATE).edit() + .putInt(KEY_MANUAL_HOTSPOT_CHANNEL, channel.coerceIn(0, 196)) + .apply() + } + + fun loadManualHotspotSecurity(context: Context): ManualHotspotSecurity { + val prefs = context.getSharedPreferences(PREFS, Context.MODE_PRIVATE) + val stored = prefs.getString(KEY_MANUAL_HOTSPOT_SECURITY, null) + return ManualHotspotSecurity.entries.firstOrNull { it.name == stored } + ?: if (loadManualHotspotPassphrase(context).isEmpty()) { + ManualHotspotSecurity.OPEN + } else { + ManualHotspotSecurity.WPA2 + } + } + + fun saveManualHotspotSecurity(context: Context, security: ManualHotspotSecurity) { + context.getSharedPreferences(PREFS, Context.MODE_PRIVATE).edit() + .putString(KEY_MANUAL_HOTSPOT_SECURITY, security.name) + .apply() + } + + fun loadDebugLogsEnabled(context: Context): Boolean = + context.getSharedPreferences(PREFS, Context.MODE_PRIVATE) + .getBoolean(KEY_DEBUG_LOGS_ENABLED, false) + + fun saveDebugLogsEnabled(context: Context, enabled: Boolean) { + context.getSharedPreferences(PREFS, Context.MODE_PRIVATE).edit() + .putBoolean(KEY_DEBUG_LOGS_ENABLED, enabled) + .apply() + } + + fun loadAutoStartOnBoot(context: Context): Boolean = + context.getSharedPreferences(PREFS, Context.MODE_PRIVATE) + .getBoolean(KEY_AUTO_START_ON_BOOT, false) + + fun saveAutoStartOnBoot(context: Context, enabled: Boolean) { + context.getSharedPreferences(PREFS, Context.MODE_PRIVATE).edit() + .putBoolean(KEY_AUTO_START_ON_BOOT, enabled) + .apply() + } + + fun loadLocationReportingEnabled(context: Context): Boolean = + context.getSharedPreferences(PREFS, Context.MODE_PRIVATE) + .getBoolean(KEY_LOCATION_REPORTING_ENABLED, false) + + fun saveLocationReportingEnabled(context: Context, enabled: Boolean) { + context.getSharedPreferences(PREFS, Context.MODE_PRIVATE).edit() + .putBoolean(KEY_LOCATION_REPORTING_ENABLED, enabled) + .apply() + } + + fun loadManufacturer(context: Context): String = + context.getSharedPreferences(PREFS, Context.MODE_PRIVATE) + .getString(KEY_MANUFACTURER, null) + ?.takeIf { it.isNotBlank() } + ?: DEFAULT_MANUFACTURER + + fun saveManufacturer(context: Context, manufacturer: String) { + context.getSharedPreferences(PREFS, Context.MODE_PRIVATE).edit() + .putString(KEY_MANUFACTURER, manufacturer) + .apply() + } + + fun loadModel(context: Context): String = + context.getSharedPreferences(PREFS, Context.MODE_PRIVATE) + .getString(KEY_MODEL, null) + ?.takeIf { it.isNotBlank() } + ?: DEFAULT_MODEL + + fun saveModel(context: Context, model: String) { + context.getSharedPreferences(PREFS, Context.MODE_PRIVATE).edit() + .putString(KEY_MODEL, model) + .apply() + } + + fun loadOemLabel(context: Context): String = + context.getSharedPreferences(PREFS, Context.MODE_PRIVATE) + .getString(KEY_OEM_LABEL, DEFAULT_OEM_LABEL) + .orEmpty() + + fun saveOemLabel(context: Context, oemLabel: String) { + context.getSharedPreferences(PREFS, Context.MODE_PRIVATE).edit() + .putString(KEY_OEM_LABEL, oemLabel) + .apply() + } + + fun loadFps(context: Context): Int = AirPlayDisplaySettings.sanitizeFps( + context.getSharedPreferences(PREFS, Context.MODE_PRIVATE) + .getInt(KEY_FPS, 30), + ) + + fun saveFps(context: Context, fps: Int) { + context.getSharedPreferences(PREFS, Context.MODE_PRIVATE).edit() + .putInt(KEY_FPS, AirPlayDisplaySettings.sanitizeFps(fps)) + .apply() + } + + fun loadWidthPhysicalMm(context: Context): Int = + AirPlayDisplaySettings.sanitizeWidthPhysicalMm( + context.getSharedPreferences(PREFS, Context.MODE_PRIVATE).getInt( + KEY_WIDTH_PHYSICAL_MM, + AirPlayDisplaySettings.DEFAULT_WIDTH_PHYSICAL_MM, + ), + ) + + fun saveWidthPhysicalMm(context: Context, widthPhysicalMm: Int) { + context.getSharedPreferences(PREFS, Context.MODE_PRIVATE).edit() + .putInt( + KEY_WIDTH_PHYSICAL_MM, + AirPlayDisplaySettings.sanitizeWidthPhysicalMm(widthPhysicalMm), + ) + .apply() + } + + fun loadPhysicalSizeBasis(context: Context): AirPlayPhysicalSizeBasis { + val stored = context.getSharedPreferences(PREFS, Context.MODE_PRIVATE) + .getString(KEY_PHYSICAL_SIZE_BASIS, null) + return AirPlayPhysicalSizeBasis.entries.firstOrNull { it.name == stored } + ?: AirPlayDisplaySettings.DEFAULT_PHYSICAL_SIZE_BASIS + } + + fun savePhysicalSizeBasis(context: Context, basis: AirPlayPhysicalSizeBasis) { + context.getSharedPreferences(PREFS, Context.MODE_PRIVATE).edit() + .putString(KEY_PHYSICAL_SIZE_BASIS, basis.name) + .apply() + } + + fun loadMaximumDetectedDisplay(context: Context): Pair { + val prefs = context.getSharedPreferences(PREFS, Context.MODE_PRIVATE) + return prefs.getInt(KEY_MAX_DETECTED_WIDTH, 0) to + prefs.getInt(KEY_MAX_DETECTED_HEIGHT, 0) + } + + fun saveMaximumDetectedDisplay( + context: Context, + widthPixels: Int, + heightPixels: Int, + ) { + context.getSharedPreferences(PREFS, Context.MODE_PRIVATE).edit() + .putInt(KEY_MAX_DETECTED_WIDTH, widthPixels.coerceAtLeast(0)) + .putInt(KEY_MAX_DETECTED_HEIGHT, heightPixels.coerceAtLeast(0)) + .apply() + } + + fun loadRightHandDrive(context: Context): Boolean = + context.getSharedPreferences(PREFS, Context.MODE_PRIVATE) + .getBoolean(KEY_RIGHT_HAND_DRIVE, false) + + fun saveRightHandDrive(context: Context, rightHandDrive: Boolean) { + context.getSharedPreferences(PREFS, Context.MODE_PRIVATE).edit() + .putBoolean(KEY_RIGHT_HAND_DRIVE, rightHandDrive) + .apply() + } + + fun loadHideTopBar(context: Context): Boolean = + context.getSharedPreferences(PREFS, Context.MODE_PRIVATE) + .getBoolean(KEY_HIDE_TOP_BAR, true) + + fun saveHideTopBar(context: Context, hide: Boolean) { + context.getSharedPreferences(PREFS, Context.MODE_PRIVATE).edit() + .putBoolean(KEY_HIDE_TOP_BAR, hide) + .apply() + } + + fun loadHideBottomBar(context: Context): Boolean = + context.getSharedPreferences(PREFS, Context.MODE_PRIVATE) + .getBoolean(KEY_HIDE_BOTTOM_BAR, true) + + fun saveHideBottomBar(context: Context, hide: Boolean) { + context.getSharedPreferences(PREFS, Context.MODE_PRIVATE).edit() + .putBoolean(KEY_HIDE_BOTTOM_BAR, hide) + .apply() + } + + fun loadSafeAreaDrawOutside(context: Context): Boolean = + context.getSharedPreferences(PREFS, Context.MODE_PRIVATE) + .getBoolean(KEY_SAFE_AREA_DRAW_OUTSIDE, true) + + fun saveSafeAreaDrawOutside(context: Context, drawOutside: Boolean) { + context.getSharedPreferences(PREFS, Context.MODE_PRIVATE).edit() + .putBoolean(KEY_SAFE_AREA_DRAW_OUTSIDE, drawOutside) + .apply() + } + + fun loadSafeAreaRect(context: Context, widthPixels: Int, heightPixels: Int): SafeAreaRect? { + require(widthPixels > 0 && heightPixels > 0) { "Activity dimensions must be positive" } + return SafeAreaCodec.decode( + context.getSharedPreferences(PREFS, Context.MODE_PRIVATE) + .getString(safeAreaKey(widthPixels, heightPixels), null), + ) + } + + fun saveSafeAreaRect( + context: Context, + activityWidthPixels: Int, + activityHeightPixels: Int, + rect: SafeAreaRect, + commit: Boolean = false, + ) { + require(activityWidthPixels > 0 && activityHeightPixels > 0) { + "Activity dimensions must be positive" + } + val editor = context.getSharedPreferences(PREFS, Context.MODE_PRIVATE).edit() + .putString( + safeAreaKey(activityWidthPixels, activityHeightPixels), + SafeAreaCodec.encode(rect.clampTo(activityWidthPixels, activityHeightPixels)), + ) + if (commit) editor.commit() else editor.apply() + } + + fun clearSafeAreaRect( + context: Context, + activityWidthPixels: Int, + activityHeightPixels: Int, + commit: Boolean = false, + ) { + require(activityWidthPixels > 0 && activityHeightPixels > 0) { + "Activity dimensions must be positive" + } + val editor = context.getSharedPreferences(PREFS, Context.MODE_PRIVATE).edit() + .remove(safeAreaKey(activityWidthPixels, activityHeightPixels)) + if (commit) editor.commit() else editor.apply() + } + + fun loadCustomAirPlayIconFile(context: Context): File? = + File(context.filesDir, CUSTOM_ICON_FILE).takeIf { it.isFile } + + fun saveCustomAirPlayIcon(context: Context, encodedImage: ByteArray) { + require(encodedImage.isNotEmpty()) { "AirPlay icon data must not be empty" } + File(context.filesDir, CUSTOM_ICON_FILE).outputStream().use { output -> + output.write(encodedImage) + } + } + + fun clearCustomAirPlayIcon(context: Context) { + File(context.filesDir, CUSTOM_ICON_FILE).delete() + } + + fun loadIdentity(context: Context): AirPlayIdentity { + val prefs = context.getSharedPreferences(PREFS, Context.MODE_PRIVATE) + val privateKey = prefs.getString(KEY_IDENT_PRIVATE, null) + val publicKey = prefs.getString(KEY_IDENT_PUBLIC, null) + val pairingId = prefs.getString(KEY_PAIRING_ID, null) + if (privateKey != null && publicKey != null && pairingId != null) { + return AirPlayIdentity(privateKey.decodeHex(), publicKey.decodeHex(), pairingId) + } + return AirPlayIdentity.generate().also { identity -> + prefs.edit() + .putString(KEY_IDENT_PRIVATE, identity.privateKey.toHex()) + .putString(KEY_IDENT_PUBLIC, identity.publicKey.toHex()) + .putString(KEY_PAIRING_ID, identity.pairingId) + .apply() + } + } + + fun loadPairings(context: Context, onSave: (String, ByteArray) -> Unit): PairingStore { + val prefs = context.getSharedPreferences(PREFS, Context.MODE_PRIVATE) + val store = PairingStore(onSave) + for (identifier in prefs.getStringSet(KEY_PAIRING_IDS, emptySet()).orEmpty()) { + prefs.getString("pairing.$identifier", null)?.let { store.save(identifier, it.decodeHex()) } + } + return store + } + + fun savePairing(context: Context, identifier: String, longTermPublicKey: ByteArray) { + val prefs = context.getSharedPreferences(PREFS, Context.MODE_PRIVATE) + val identifiers = prefs.getStringSet(KEY_PAIRING_IDS, emptySet()).orEmpty().toMutableSet() + identifiers.add(identifier) + prefs.edit() + .putString("pairing.$identifier", longTermPublicKey.toHex()) + .putStringSet(KEY_PAIRING_IDS, identifiers) + .apply() + } + + fun loadLockdownRecord(context: Context): LockdownPairRecord? { + val prefs = context.getSharedPreferences(PREFS, Context.MODE_PRIVATE) + val hostId = prefs.getString(KEY_LOCKDOWN_HOST_ID, null) ?: return null + val systemBuid = prefs.getString(KEY_LOCKDOWN_SYSTEM_BUID, null) ?: return null + val wifiMac = prefs.getString(KEY_LOCKDOWN_WIFI_MAC, null) ?: return null + val devicePublic = prefs.getString(KEY_LOCKDOWN_DEVICE_PUBLIC, null) ?: return null + val deviceCert = prefs.getString(KEY_LOCKDOWN_DEVICE_CERT, null) ?: return null + val hostPrivate = prefs.getString(KEY_LOCKDOWN_HOST_PRIVATE, null) ?: return null + val hostCert = prefs.getString(KEY_LOCKDOWN_HOST_CERT, null) ?: return null + val rootPrivate = prefs.getString(KEY_LOCKDOWN_ROOT_PRIVATE, null) ?: return null + val rootCert = prefs.getString(KEY_LOCKDOWN_ROOT_CERT, null) ?: return null + return try { + LockdownPairRecord.restore( + hostId = hostId, + systemBuid = systemBuid, + wifiMacAddress = wifiMac, + devicePublicKeyPem = devicePublic.decodeHex(), + deviceCertificatePem = deviceCert.decodeHex(), + hostPrivateKeyPem = hostPrivate.decodeHex(), + hostCertificatePem = hostCert.decodeHex(), + rootPrivateKeyPem = rootPrivate.decodeHex(), + rootCertificatePem = rootCert.decodeHex(), + ) + } catch (_: Exception) { + null + } + } + + fun saveLockdownRecord(context: Context, record: LockdownPairRecord) { + context.getSharedPreferences(PREFS, Context.MODE_PRIVATE).edit() + .putString(KEY_LOCKDOWN_HOST_ID, record.hostId) + .putString(KEY_LOCKDOWN_SYSTEM_BUID, record.systemBuid) + .putString(KEY_LOCKDOWN_WIFI_MAC, record.wifiMacAddress) + .putString(KEY_LOCKDOWN_DEVICE_PUBLIC, record.devicePublicKeyPem.toHex()) + .putString(KEY_LOCKDOWN_DEVICE_CERT, record.deviceCertificatePem.toHex()) + .putString(KEY_LOCKDOWN_HOST_PRIVATE, record.hostPrivateKeyPem.toHex()) + .putString(KEY_LOCKDOWN_HOST_CERT, record.hostCertificatePem.toHex()) + .putString(KEY_LOCKDOWN_ROOT_PRIVATE, record.rootPrivateKeyPem.toHex()) + .putString(KEY_LOCKDOWN_ROOT_CERT, record.rootCertificatePem.toHex()) + .apply() + } + + fun clearLockdownRecord(context: Context) { + context.getSharedPreferences(PREFS, Context.MODE_PRIVATE).edit() + .remove(KEY_LOCKDOWN_HOST_ID) + .remove(KEY_LOCKDOWN_SYSTEM_BUID) + .remove(KEY_LOCKDOWN_WIFI_MAC) + .remove(KEY_LOCKDOWN_DEVICE_PUBLIC) + .remove(KEY_LOCKDOWN_DEVICE_CERT) + .remove(KEY_LOCKDOWN_HOST_PRIVATE) + .remove(KEY_LOCKDOWN_HOST_CERT) + .remove(KEY_LOCKDOWN_ROOT_PRIVATE) + .remove(KEY_LOCKDOWN_ROOT_CERT) + .apply() + } + + private fun ByteArray.toHex(): String = joinToString("") { "%02x".format(it.toInt() and 0xff) } + + private fun String.decodeHex(): ByteArray { + require(length % 2 == 0) { "hex string must have even length" } + return ByteArray(length / 2) { index -> + substring(index * 2, index * 2 + 2).toInt(16).toByte() + } + } + + private fun safeAreaKey(widthPixels: Int, heightPixels: Int): String = + "$SAFE_AREA_KEY_PREFIX${widthPixels}x$heightPixels" +} diff --git a/common/src/main/java/com/shilapi/xcertplay/BootReceiver.kt b/common/src/main/java/com/shilapi/xcertplay/BootReceiver.kt new file mode 100644 index 0000000..7e96d1e --- /dev/null +++ b/common/src/main/java/com/shilapi/xcertplay/BootReceiver.kt @@ -0,0 +1,31 @@ +package com.shilapi.xcertplay + +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.util.Log + +/** Starts the CarPlay host after boot when the user has enabled the startup option. */ +class BootReceiver : BroadcastReceiver() { + override fun onReceive(context: Context, intent: Intent) { + if (intent.action != Intent.ACTION_BOOT_COMPLETED) return + if (!AirPlayPersistence.loadAutoStartOnBoot(context)) return + + val launch = Intent(context, DiPlayActivity::class.java).apply { + addFlags( + Intent.FLAG_ACTIVITY_NEW_TASK or + Intent.FLAG_ACTIVITY_CLEAR_TOP or + Intent.FLAG_ACTIVITY_SINGLE_TOP, + ) + } + try { + context.startActivity(launch) + } catch (error: RuntimeException) { + Log.w(TAG, "Boot auto-start could not launch CarPlayHostActivity", error) + } + } + + private companion object { + const val TAG = "xcertplay-boot" + } +} diff --git a/common/src/main/java/com/shilapi/xcertplay/CarPlayHostActivity.kt b/common/src/main/java/com/shilapi/xcertplay/CarPlayHostActivity.kt new file mode 100644 index 0000000..54b1025 --- /dev/null +++ b/common/src/main/java/com/shilapi/xcertplay/CarPlayHostActivity.kt @@ -0,0 +1,3530 @@ +package com.shilapi.xcertplay + +import android.Manifest +import android.content.Intent +import android.content.pm.PackageManager +import android.content.res.Configuration +import android.content.res.ColorStateList +import android.graphics.Bitmap +import android.graphics.BitmapFactory +import android.graphics.Color +import android.graphics.SurfaceTexture +import android.graphics.Typeface +import android.graphics.drawable.GradientDrawable +import android.media.MediaCodecList +import android.media.MediaFormat +import android.os.Build +import android.os.Bundle +import android.os.Handler +import android.os.Looper +import android.os.Process +import android.text.Editable +import android.text.InputType +import android.text.TextUtils +import android.text.TextWatcher +import android.util.Log +import android.view.Gravity +import android.view.MotionEvent +import android.view.Surface +import android.view.TextureView +import android.view.View +import android.view.ViewGroup +import android.widget.Button +import android.widget.EditText +import android.widget.FrameLayout +import android.widget.ImageView +import android.widget.LinearLayout +import android.widget.RadioButton +import android.widget.RadioGroup +import android.widget.ScrollView +import android.widget.SeekBar +import android.widget.Switch +import android.widget.TextView +import androidx.activity.ComponentActivity +import androidx.activity.OnBackPressedCallback +import androidx.activity.result.contract.ActivityResultContracts +import androidx.core.view.WindowCompat +import androidx.core.view.WindowInsetsCompat +import androidx.core.view.WindowInsetsControllerCompat +import com.shilapi.xcertplay.airplay.AirPlayConfig +import com.shilapi.xcertplay.airplay.AirPlayDisplaySettings +import com.shilapi.xcertplay.airplay.AirPlayPhysicalSizeBasis +import com.shilapi.xcertplay.airplay.AirPlayPhysicalSizeMm +import com.shilapi.xcertplay.airplay.CarPlayDisplayScale +import com.shilapi.xcertplay.airplay.CarPlayUiScale +import com.shilapi.xcertplay.airplay.AirPlayDisplayConfig +import com.shilapi.xcertplay.airplay.AirPlayIdentity +import com.shilapi.xcertplay.airplay.AirPlayIcon +import com.shilapi.xcertplay.airplay.AirPlaySafeArea +import com.shilapi.xcertplay.airplay.AirPlaySession +import com.shilapi.xcertplay.airplay.AirPlaySessionListener +import com.shilapi.xcertplay.airplay.CarPlayMediaEngine +import com.shilapi.xcertplay.airplay.SafeAreaRect +import com.shilapi.xcertplay.host.R +import com.shilapi.xcertplay.location.AndroidCarPlayLocationProvider +import com.shilapi.xcertplay.media.AndroidMediaSink +import com.shilapi.xcertplay.media.CarPlayTouchMapper +import com.shilapi.xcertplay.network.CarPlayVpnService +import com.shilapi.xcertplay.orchestration.CarPlayController +import com.shilapi.xcertplay.orchestration.CarPlayRuntimeConfig +import com.shilapi.xcertplay.orchestration.CarPlayStatus +import com.shilapi.xcertplay.orchestration.CarPlayTransport +import com.shilapi.xcertplay.orchestration.ManualHotspotBand +import com.shilapi.xcertplay.orchestration.ManualHotspotSecurity +import com.shilapi.xcertplay.orchestration.MfiTarget +import com.shilapi.xcertplay.orchestration.WirelessHotspotMode +import com.shilapi.xcertplay.orchestration.isManualHotspotChannelCompatible +import com.shilapi.xcertplay.transport.Iap2IdentificationConfig +import com.shilapi.xcertplay.transport.Iap2LocationProvider +import com.shilapi.xcertplay.transport.UsbDeviceId +import java.io.File +import java.text.SimpleDateFormat +import java.util.ArrayDeque +import java.util.Date +import java.util.Locale +import java.util.concurrent.ExecutorService +import java.util.concurrent.Executors +import java.util.concurrent.atomic.AtomicBoolean + +/** + * Full-screen CarPlay host. It renders decoded video through a [TextureView], forwards touch to + * the active AirPlay session, and drives the complete wired or wireless bring-up through + * [CarPlayController]. + * + * Apple devices are discovered by vendor ID; CH341 uses the configured VID/PID below. + */ +class CarPlayHostActivity : ComponentActivity() { + private data class SettingsBaseline( + val safeAreaSize: DisplaySize?, + val safeAreaRect: SafeAreaRect?, + val customIconBytes: ByteArray?, + ) + + private var connectionPanel: View? = null + private var wifiRecoveryButton: View? = null + private var reconnectAttempts = 0 + private lateinit var airPlayIdentity: AirPlayIdentity + + // CH341 USB\VID_1A86&PID_5512&REV_0304 is the deployment-supplied bridge identity. + private fun createRuntimeConfig(): CarPlayRuntimeConfig = CarPlayRuntimeConfig( + mfiTarget = MfiTarget.LOCAL, + ch341Devices = if (mfiTarget == MfiTarget.USB_CH341) { + listOf(UsbDeviceId(0x1a86, 0x5512)) + } else { + emptyList() + }, + // The CP latches its I2C address from the RST level at its own power-up, so the host must + // not pulse RST before discovery. Driving D0 re-latches the part onto the alternate + // address (0x10), where the accessory certificate is not readable. Leave RST at its + // hardware pull (VCC -> 0x11) and let the scanner find the part with its certificate. + // Set this back to 0 to restore the D0 pulse. + ch341MfiResetGpio = null, + linuxI2cPath = if (mfiTarget == MfiTarget.I2C) mfiI2cPath.trim() else null, + remoteMfiServer = remoteMfiServer.trim().takeIf { it.isNotEmpty() }, + remoteMfiToken = remoteMfiToken.takeIf { it.isNotEmpty() }, + identification = Iap2IdentificationConfig( + name = "DiPlay", + modelIdentifier = normalizedModel(), + manufacturer = normalizedManufacturer(), + serialNumber = "DIPLAY-" + DiPlayBootstrap.deviceId(airPlayIdentity).replace(":", ""), + firmwareVersion = "0.1.0", + hardwareVersion = "1.0", + carPlayUsbInterfaceNumber = 3, + locationInformationEnabled = locationReportingEnabled, + ), + label = "DiPlay", + hostName = "diplay-" + DiPlayBootstrap.deviceId(airPlayIdentity).replace(":", "").lowercase(), + hostMac = DiPlayBootstrap.deviceId(airPlayIdentity).split(":").map { it.toInt(16).toByte() }.toByteArray(), + wirelessBluetoothDeviceAddress = DiPlayPreferences.phoneAddress(this), + transport = if (wirelessEnabled) CarPlayTransport.WIRELESS else CarPlayTransport.WIRED, + wirelessHotspotMode = wirelessHotspotMode, + manualHotspotSsid = manualHotspotSsid, + manualHotspotPassphrase = manualHotspotPassphrase, + manualHotspotBand = manualHotspotBand, + manualHotspotChannel = manualHotspotChannel, + manualHotspotSecurity = manualHotspotSecurity, + locationReportingEnabled = locationReportingEnabled, + ) + + private val vpnConsent = + registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result -> + awaitingVpnConsent = false + if (result.resultCode == RESULT_OK) { + vpnReady = true + maybeStartCarPlay() + } else { + setStatus("VPN consent was denied") + } + } + private val wirelessPermissions = + registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) { + awaitingWirelessPermissions = false + wirelessPermissionsReady = hasRequiredWirelessPermissions() + appendLog( + if (wirelessPermissionsReady) { + "Wireless startup permissions granted" + } else { + "Wireless startup permissions denied" + }, + ) + updateHotspotStatusBlock() + maybeStartCarPlay() + } + private val microphonePermission = + registerForActivityResult(ActivityResultContracts.RequestPermission()) { granted -> + microphoneAvailable = granted + microphonePermissionResolved = true + appendLog(if (granted) "Microphone permission granted" else "Microphone permission denied") + requestStartupPrerequisites() + } + private val locationPermission = + registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) { grants -> + awaitingLocationPermission = false + locationPermissionAvailable = hasFineLocationPermission() + if (locationPermissionAvailable) { + appendLog("Location permission granted") + } else if (locationReportingEnabled) { + locationReportingEnabled = false + if (!menuOpen) { + AirPlayPersistence.saveLocationReportingEnabled( + this@CarPlayHostActivity, + false, + ) + } + locationReportingSwitch?.isChecked = false + val approximateOnly = + grants[Manifest.permission.ACCESS_COARSE_LOCATION] == true + appendLog( + if (approximateOnly) { + "Precise location permission denied; location reporting disabled" + } else { + "Location permission denied; location reporting disabled" + }, + ) + } + updateResolutionMenu() + if (!menuOpen) requestStartupPrerequisites() + } + + private val imagePicker = + registerForActivityResult(ActivityResultContracts.GetContent()) { uri -> + if (uri == null) { + externalActivityInProgress = false + return@registerForActivityResult + } + imageCrop.launch( + Intent(this, ImageCropActivity::class.java) + .setData(uri) + .addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION), + ) + } + private val imageCrop = + registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result -> + externalActivityInProgress = false + if (result.resultCode == RESULT_OK) { + updateAirPlayIconPreview() + appendLog("Custom AirPlay icon updated") + } + } + + private var videoView: TextureView? = null + private var gestureOverlay: View? = null + private var settingsMenu: View? = null + private var mfiTargetGroup: RadioGroup? = null + private var mfiI2cFields: View? = null + private var mfiRemoteFields: View? = null + private var mfiErrorView: TextView? = null + private var mfiI2cPathInput: EditText? = null + private var remoteMfiServerInput: EditText? = null + private var remoteMfiTokenInput: EditText? = null + private var settingsBaseline: SettingsBaseline? = null + private var locationReportingSwitch: Switch? = null + private var statusView: TextView? = null + private var statusScrollView: ScrollView? = null + private var stageStatusView: TextView? = null + private var resolutionValueView: TextView? = null + private var resolutionPreviewView: TextView? = null + private var hotspotStatusView: TextView? = null + private var manualHotspotFields: View? = null + private var manualHotspotErrorView: TextView? = null + private var iconPreviewView: ImageView? = null + private var iconStatusView: TextView? = null + private var safeAreaSummaryView: TextView? = null + private var safeAreaEditor: View? = null + private var safeAreaEditorView: SafeAreaEditorView? = null + private var safeAreaEditSize: DisplaySize? = null + private var safeAreaEditorActive = false + private var externalActivityInProgress = false + private var sink: AndroidMediaSink? = null + private var controller: CarPlayController? = null + private var currentSurface: Surface? = null + private var currentSurfaceTexture: SurfaceTexture? = null + private var activeDisplaySize: DisplaySize? = null + private var pendingDisplaySize: DisplaySize? = null + private var displayScaleTenths = CarPlayDisplayScale.DEFAULT_TENTHS + private var uiScalePercent = CarPlayUiScale.DEFAULT + private var displayDiagnosticAttempt: String? = null + private var hevcEnabled = true + private var hevcSoftwareDecoderEnabled = false + private var advancedAudioChannelMappingSupported = false + private var advancedAudioChannelMapping = false + private var debugLogsEnabled = false + private var autoStartOnBoot = false + private var manufacturer = AirPlayPersistence.DEFAULT_MANUFACTURER + private var model = AirPlayPersistence.DEFAULT_MODEL + private var oemLabel = AirPlayPersistence.DEFAULT_OEM_LABEL + private var fps = AirPlayDisplaySettings.DEFAULT_FPS + private var widthPhysicalMm = AirPlayDisplaySettings.DEFAULT_WIDTH_PHYSICAL_MM + private var physicalSizeBasis = AirPlayDisplaySettings.DEFAULT_PHYSICAL_SIZE_BASIS + private var maximumDetectedWidthPixels = 0 + private var maximumDetectedHeightPixels = 0 + private var rightHandDrive = false + private var hideTopBar = true + private var hideBottomBar = true + private var safeAreaDrawOutside = true + private var locationReportingEnabled = false + private var locationPermissionAvailable = false + private var microphoneAvailable = false + private var microphonePermissionResolved = false + private var wirelessEnabled = false + private var mfiTarget = MfiTarget.USB_CH341 + private var mfiI2cPath = AirPlayPersistence.DEFAULT_MFI_I2C_PATH + private var remoteMfiServer = "" + private var remoteMfiToken = "" + private var wirelessPermissionsReady = false + private var wirelessHotspotMode = WirelessHotspotMode.WIFI_P2P + private var manualHotspotSsid = "" + private var manualHotspotPassphrase = "" + private var manualHotspotBand = ManualHotspotBand.AUTO + private var manualHotspotChannel = 0 + private var manualHotspotSecurity = ManualHotspotSecurity.OPEN + private var awaitingVpnConsent = false + private var awaitingWirelessPermissions = false + private var awaitingLocationPermission = false + private var vpnReady = false + private var hotspotStatus = HotspotStatus(state = "off") + private var menuOpen = false + private var latestStage = "Preparing CarPlay" + private var darkMode = false + private var activeAirPlaySession: AirPlaySession? = null + private val activeScreenStreamTypes = mutableSetOf() + private var handshakeResetInProgress = false + private var startAfterHandshakeReset = false + private var restartGeneration = 0 + private var reconnectScheduled = false + private var sessionLog: SessionLogFile? = null + private var gestureSequenceActive = false + private var gestureTracking = false + private var gestureStartX = 0f + private var gestureStartY = 0f + private val shuttingDown = AtomicBoolean(false) + private val mainHandler = Handler(Looper.getMainLooper()) + private val teardownExecutor: ExecutorService = Executors.newSingleThreadExecutor() + private val airPlayCommandExecutor: ExecutorService = Executors.newSingleThreadExecutor() + private val logLines = ArrayDeque() + private val expireOldLogLines = Runnable { refreshLogView(System.currentTimeMillis()) } + private val applyDisplaySize = Runnable { + val size = pendingDisplaySize ?: return@Runnable + pendingDisplaySize = null + applyDisplaySize(size) + } + + private val textureListener = object : TextureView.SurfaceTextureListener { + override fun onSurfaceTextureAvailable(texture: SurfaceTexture, width: Int, height: Int) { + val existing = currentSurface + val surface = if ( + existing != null && + currentSurfaceTexture === texture && + existing.isValid + ) { + existing + } else { + Surface(texture).also { + existing?.release() + currentSurface = it + currentSurfaceTexture = texture + } + } + appendLog(if (existing === surface) "Texture surface reused" else "Texture surface created") + attachSurface(surface) + scheduleDisplaySize(width, height) + } + + override fun onSurfaceTextureSizeChanged(texture: SurfaceTexture, width: Int, height: Int) { + scheduleDisplaySize(width, height) + } + + override fun onSurfaceTextureDestroyed(texture: SurfaceTexture): Boolean { + if (currentSurfaceTexture !== texture) return true + currentSurface?.let { surface -> + sink?.clearSurface(SCREEN_TYPE_MAIN, surface) + sink?.clearSurface(SCREEN_TYPE_ALT, surface) + surface.release() + } + currentSurface = null + currentSurfaceTexture = null + appendLog("Texture surface destroyed") + return true + } + + override fun onSurfaceTextureUpdated(texture: SurfaceTexture) = Unit + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + if (intent.action == "android.hardware.usb.action.USB_DEVICE_ATTACHED") { + AirPlayPersistence.saveWirelessEnabled(this, false) + } + if (runCatching { DiPlayBootstrap.ensure(this) }.isFailure) { + startActivity(Intent(this, DiPlayActivity::class.java)) + finish(); return + } + window.addFlags(android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) + initializeSessionLog() + darkMode = isDarkMode(resources.configuration.uiMode) + advancedAudioChannelMappingSupported = + resources.getBoolean(R.bool.config_advanced_audio_channel_mapping) + airPlayIdentity = AirPlayPersistence.loadIdentity(this) + loadPersistedSettings() + locationPermissionAvailable = hasFineLocationPermission() + setContentView(buildContentView()) + applyFullscreenMode() + onBackPressedDispatcher.addCallback( + this, + object : OnBackPressedCallback(true) { + override fun handleOnBackPressed() { + if (menuOpen) { + if (safeAreaEditorActive) closeSafeAreaEditor() else cancelSettingsEdits() + } else { + showDiPlayHome() + } + } + }, + ) + + appendLog( + "Host started; MFI target=${mfiTargetLabel(mfiTarget)}; " + + "transport=${if (wirelessEnabled) "wireless" else "wired"}", + ) + val reusedBackgroundSession = adoptBackgroundSession() + microphoneAvailable = + checkSelfPermission(Manifest.permission.RECORD_AUDIO) == PackageManager.PERMISSION_GRANTED + microphonePermissionResolved = microphoneAvailable + if (reusedBackgroundSession) { + updateDebugOverlays() + } else if (microphonePermissionResolved) { + requestStartupPrerequisites() + } else { + microphonePermission.launch(Manifest.permission.RECORD_AUDIO) + } + } + + private fun loadPersistedSettings() { + displayScaleTenths = AirPlayPersistence.loadDisplayScaleTenths(this) + uiScalePercent = AirPlayPersistence.loadUiScalePercent(this) + hevcEnabled = AirPlayPersistence.loadHevcEnabled(this) + hevcSoftwareDecoderEnabled = + Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q && + AirPlayPersistence.loadHevcSoftwareDecoderEnabled(this) + advancedAudioChannelMapping = + advancedAudioChannelMappingSupported && + AirPlayPersistence.loadAdvancedAudioChannelMapping(this) + debugLogsEnabled = AirPlayPersistence.loadDebugLogsEnabled(this) + autoStartOnBoot = AirPlayPersistence.loadAutoStartOnBoot(this) + manufacturer = AirPlayPersistence.loadManufacturer(this) + model = AirPlayPersistence.loadModel(this) + oemLabel = AirPlayPersistence.loadOemLabel(this) + fps = AirPlayPersistence.loadFps(this) + widthPhysicalMm = AirPlayPersistence.loadWidthPhysicalMm(this) + physicalSizeBasis = AirPlayPersistence.loadPhysicalSizeBasis(this) + AirPlayPersistence.loadMaximumDetectedDisplay(this).let { (width, height) -> + maximumDetectedWidthPixels = width + maximumDetectedHeightPixels = height + } + rightHandDrive = AirPlayPersistence.loadRightHandDrive(this) + hideTopBar = AirPlayPersistence.loadHideTopBar(this) + hideBottomBar = AirPlayPersistence.loadHideBottomBar(this) + safeAreaDrawOutside = AirPlayPersistence.loadSafeAreaDrawOutside(this) + locationReportingEnabled = AirPlayPersistence.loadLocationReportingEnabled(this) + locationPermissionAvailable = hasFineLocationPermission() + wirelessEnabled = AirPlayPersistence.loadWirelessEnabled(this) + mfiTarget = AirPlayPersistence.loadMfiTarget(this) + mfiI2cPath = AirPlayPersistence.loadMfiI2cPath(this) + remoteMfiServer = AirPlayPersistence.loadRemoteMfiServer(this) + remoteMfiToken = AirPlayPersistence.loadRemoteMfiToken(this) + wirelessHotspotMode = AirPlayPersistence.loadWirelessHotspotMode(this) + manualHotspotSsid = AirPlayPersistence.loadManualHotspotSsid(this) + manualHotspotPassphrase = AirPlayPersistence.loadManualHotspotPassphrase(this) + manualHotspotBand = AirPlayPersistence.loadManualHotspotBand(this) + manualHotspotChannel = AirPlayPersistence.loadManualHotspotChannel(this) + manualHotspotSecurity = AirPlayPersistence.loadManualHotspotSecurity(this) + wirelessPermissionsReady = !wirelessEnabled || hasRequiredWirelessPermissions() + } + + private fun requestStartupPrerequisites() { + if (locationReportingEnabled && !locationPermissionAvailable) { + requestLocationPermission() + return + } + if (wirelessEnabled) { + requestWirelessPermissions() + } else { + requestVpnConsent() + } + } + + private fun requestLocationPermission() { + if (locationPermissionAvailable || awaitingLocationPermission) return + awaitingLocationPermission = true + locationPermission.launch( + arrayOf( + Manifest.permission.ACCESS_FINE_LOCATION, + Manifest.permission.ACCESS_COARSE_LOCATION, + ), + ) + } + + private fun hasFineLocationPermission(): Boolean = + checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) == + PackageManager.PERMISSION_GRANTED + + private fun requestVpnConsent() { + val consent = CarPlayVpnService.prepare(this) + if (consent == null) { + vpnReady = true + maybeStartCarPlay() + } else { + awaitingVpnConsent = true + vpnConsent.launch(consent) + } + } + + private fun requestWirelessPermissions() { + val permissions = requiredWirelessPermissions() + if (permissions.all { checkSelfPermission(it) == PackageManager.PERMISSION_GRANTED }) { + wirelessPermissionsReady = true + updateHotspotStatusBlock() + maybeStartCarPlay() + return + } + wirelessPermissionsReady = false + updateHotspotStatusBlock() + awaitingWirelessPermissions = true + wirelessPermissions.launch(permissions.toTypedArray()) + } + + private fun hasRequiredWirelessPermissions(): Boolean = + requiredWirelessPermissions().all { + checkSelfPermission(it) == PackageManager.PERMISSION_GRANTED + } + + private fun requiredWirelessPermissions(): List = when { + Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU -> listOf( + Manifest.permission.BLUETOOTH_CONNECT, + Manifest.permission.NEARBY_WIFI_DEVICES, + ) + Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> listOf( + Manifest.permission.BLUETOOTH_CONNECT, + Manifest.permission.ACCESS_COARSE_LOCATION, + Manifest.permission.ACCESS_FINE_LOCATION, + ) + else -> listOf( + Manifest.permission.ACCESS_COARSE_LOCATION, + Manifest.permission.ACCESS_FINE_LOCATION, + ) + } + + override fun onNewIntent(intent: Intent) { + super.onNewIntent(intent) + setIntent(intent) + if (intent.action == "android.hardware.usb.action.USB_DEVICE_ATTACHED" && wirelessEnabled) { + shutdown(false, "switching to USB") { + AirPlayPersistence.saveWirelessEnabled(this, false) + startActivity(Intent(this, CarPlayHostActivity::class.java)) + } + finish() + } + } + + override fun onResume() { + super.onResume() + locationPermissionAvailable = hasFineLocationPermission() + if (locationReportingEnabled && !locationPermissionAvailable && !menuOpen) { + requestLocationPermission() + } + wirelessPermissionsReady = !wirelessEnabled || hasRequiredWirelessPermissions() + maybeStartCarPlay() + applyFullscreenMode() + } + + override fun onWindowFocusChanged(hasFocus: Boolean) { + super.onWindowFocusChanged(hasFocus) + if (hasFocus) applyFullscreenMode() + } + + override fun onStop() { + // The controller, USB/iAP2 link, and VPN attachment intentionally outlive the UI. + super.onStop() + } + + override fun onConfigurationChanged(newConfig: Configuration) { + super.onConfigurationChanged(newConfig) + val nextDarkMode = isDarkMode(newConfig.uiMode) + if (nextDarkMode != darkMode) { + darkMode = nextDarkMode + syncAirPlayDarkMode() + } + applyFullscreenMode() + stageStatusView?.maxWidth = (resources.displayMetrics.widthPixels * 0.78f).toInt() + scrollLogsToBottom() + videoView?.post { + val view = videoView ?: return@post + scheduleDisplaySize(view.width, view.height) + } + } + + override fun onDestroy() { + mainHandler.removeCallbacks(applyDisplaySize) + mainHandler.removeCallbacks(expireOldLogLines) + currentSurface?.let { surface -> + sink?.clearSurface(SCREEN_TYPE_MAIN, surface) + sink?.clearSurface(SCREEN_TYPE_ALT, surface) + surface.release() + } + currentSurface = null + currentSurfaceTexture = null + sessionLog?.append("Activity destroyed") + sessionLog?.close() + sessionLog = null + super.onDestroy() + } + + private fun buildContentView(): View { + val root = FrameLayout(this).apply { setBackgroundColor(Color.rgb(12, 17, 27)) } + val video = TextureView(this).apply { + isOpaque = false + surfaceTextureListener = textureListener + } + val gestureLayer = View(this).apply { + isClickable = true + setOnTouchListener { view, event -> onHostTouch(view, event) } + } + root.addView(video, FrameLayout.LayoutParams(-1, -1)) + root.addView(gestureLayer, FrameLayout.LayoutParams(-1, -1)) + val panel = LinearLayout(this).apply { + orientation = LinearLayout.VERTICAL + gravity = Gravity.CENTER + setPadding(dp(32), dp(32), dp(32), dp(32)) + setBackgroundColor(Color.rgb(12, 17, 27)) + isClickable = true + } + panel.addView(ImageView(this).apply { + setImageResource(R.drawable.ic_carplay); contentDescription = "CarPlay" + }, LinearLayout.LayoutParams(dp(88), dp(88))) + panel.addView(TextView(this).apply { + text = "DiPlay"; textSize = 34f; setTextColor(Color.rgb(241, 245, 252)) + gravity = Gravity.CENTER; setPadding(0, dp(18), 0, dp(14)) + typeface = Typeface.create("sans-serif-medium", Typeface.NORMAL) + }) + val stage = TextView(this).apply { + text = "Getting CarPlay ready…"; textSize = 22f; gravity = Gravity.CENTER + setTextColor(Color.rgb(241, 245, 252)) + } + panel.addView(stage) + panel.addView(TextView(this).apply { + text = if (wirelessEnabled) "Keep your iPhone nearby with Bluetooth and Wi-Fi on.\nAllow CarPlay if your iPhone asks." + else "Use a USB data cable and unlock your iPhone.\nAllow Trust and CarPlay if your iPhone asks." + textSize = 17f; gravity = Gravity.CENTER; setTextColor(Color.rgb(168, 182, 202)) + setPadding(0, dp(14), 0, dp(24)) + }) + panel.addView(Button(this).apply { + text = "Reset CarPlay Wi-Fi"; isAllCaps = false; textSize = 18f + visibility = View.GONE + setOnClickListener { showDiPlayHome("wireless-recovery") } + wifiRecoveryButton = this + }, LinearLayout.LayoutParams(dp(300), dp(64)).apply { bottomMargin = dp(12) }) + panel.addView(Button(this).apply { + text = "Back to DiPlay"; isAllCaps = false; textSize = 18f + setTextColor(Color.rgb(12, 17, 27)) + background = GradientDrawable().apply { setColor(Color.rgb(166, 200, 255)); cornerRadius = dp(20).toFloat() } + setOnClickListener { showDiPlayHome() } + }, LinearLayout.LayoutParams(dp(300), dp(64))) + panel.addView(TextView(this).apply { + text = "In CarPlay, swipe down with three fingers to open DiPlay settings." + textSize = 13f; gravity = Gravity.CENTER; setTextColor(Color.rgb(168, 182, 202)); setPadding(0, dp(20), 0, 0) + }) + root.addView(panel, FrameLayout.LayoutParams(-1, -1)) + videoView = video + gestureOverlay = gestureLayer + stageStatusView = stage + connectionPanel = panel + updateDebugOverlays() + return root + } + + private fun buildSettingsMenu(): View { + val overlay = FrameLayout(this).apply { + setBackgroundColor(Color.BLACK) + isClickable = true + } + val panel = FrameLayout(this).apply { + setBackgroundColor(MENU_BACKGROUND) + } + val content = LinearLayout(this).apply { + orientation = LinearLayout.VERTICAL + gravity = Gravity.CENTER_HORIZONTAL + setPadding(dp(48), dp(36), dp(48), dp(36)) + } + content.addView( + menuText("CarPlay settings", 32f, Color.WHITE, bold = true).apply { + setPadding(dp(56), 0, 0, 0) + }, + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ), + ) + content.addView( + settingsCategoryHeader("Connection"), + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ).apply { topMargin = dp(32) }, + ) + + content.addView( + buildMfiTargetSection(), + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ).apply { topMargin = dp(14) }, + ) + + val wirelessRow = LinearLayout(this).apply { + orientation = LinearLayout.HORIZONTAL + gravity = Gravity.CENTER_VERTICAL + } + wirelessRow.addView( + menuText("Wireless CarPlay", 20f, MENU_SECONDARY), + LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1f), + ) + val wirelessSwitch = Switch(this).apply { + isChecked = wirelessEnabled + contentDescription = "Wireless CarPlay transport" + showText = false + thumbTintList = ColorStateList( + arrayOf(intArrayOf(android.R.attr.state_checked), intArrayOf()), + intArrayOf(MENU_ACCENT, MENU_SECONDARY), + ) + trackTintList = ColorStateList( + arrayOf(intArrayOf(android.R.attr.state_checked), intArrayOf()), + intArrayOf(MENU_ACCENT_TRACK, MENU_TRACK_OFF), + ) + setOnCheckedChangeListener { _, checked -> + if (wirelessEnabled == checked) return@setOnCheckedChangeListener + wirelessEnabled = checked + hotspotStatus = HotspotStatus(state = if (wirelessEnabled) "stopped" else "off") + updateHotspotStatusBlock() + appendLog( + "Wireless CarPlay ${if (wirelessEnabled) "enabled" else "disabled"}; " + + "applies when settings close", + ) + requestStartupPrerequisites() + } + } + wirelessRow.addView( + wirelessSwitch, + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.WRAP_CONTENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ), + ) + content.addView( + wirelessRow, + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ).apply { topMargin = dp(30) }, + ) + + content.addView( + buildHotspotModeSection(), + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ).apply { topMargin = dp(30) }, + ) + + content.addView( + menuText("Hotspot status", 20f, MENU_SECONDARY), + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ).apply { topMargin = dp(18) }, + ) + val hotspotStatusView = menuText("", 16f, MENU_ACCENT) + content.addView( + hotspotStatusView, + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ).apply { topMargin = dp(6) }, + ) + + content.addView( + settingsCategoryHeader("Location"), + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ).apply { topMargin = dp(36) }, + ) + content.addView( + buildLocationReportingSection(), + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ).apply { topMargin = dp(12) }, + ) + + content.addView( + settingsCategoryHeader("Startup"), + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ).apply { topMargin = dp(36) }, + ) + content.addView( + settingsSwitchRow( + label = "Auto-start on boot", + checked = autoStartOnBoot, + description = "Start CarPlay automatically after device boot", + ) { checked -> + autoStartOnBoot = checked + appendLog("Boot auto-start ${if (checked) "enabled" else "disabled"}") + }, + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ).apply { topMargin = dp(12) }, + ) + + if (advancedAudioChannelMappingSupported) { + content.addView( + settingsCategoryHeader("Audio"), + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ).apply { topMargin = dp(36) }, + ) + content.addView( + settingsSwitchRow( + label = "Advanced audio channel mapping", + checked = advancedAudioChannelMapping, + description = "Route AAOS audio buses by CarPlay audio type", + ) { checked -> + advancedAudioChannelMapping = checked + appendLog( + "Advanced audio channel mapping ${if (checked) "enabled" else "disabled"}; " + + "applies when settings close", + ) + updateResolutionMenu() + }, + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ).apply { topMargin = dp(12) }, + ) + } + + content.addView( + settingsCategoryHeader("Identity & appearance"), + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ).apply { topMargin = dp(36) }, + ) + content.addView( + buildIdentitySettingsSection(), + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ).apply { topMargin = dp(12) }, + ) + content.addView( + buildAirPlayIconSection(), + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ).apply { topMargin = dp(26) }, + ) + content.addView( + buildDrivingSideSection(), + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ).apply { topMargin = dp(26) }, + ) + content.addView( + settingsCategoryHeader("Display & video"), + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ).apply { topMargin = dp(40) }, + ) + + val resolutionHeader = LinearLayout(this).apply { + orientation = LinearLayout.HORIZONTAL + gravity = Gravity.CENTER_VERTICAL + } + resolutionHeader.addView( + menuText("Resolution", 20f, MENU_SECONDARY), + LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1f), + ) + val resolutionValue = menuText( + CarPlayDisplayScale.label(displayScaleTenths), + 28f, + MENU_ACCENT, + bold = true, + ) + resolutionHeader.addView( + resolutionValue, + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.WRAP_CONTENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ), + ) + content.addView( + resolutionHeader, + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ).apply { topMargin = dp(14) }, + ) + + val seekBar = SeekBar(this).apply { + max = CarPlayDisplayScale.MAX_TENTHS - CarPlayDisplayScale.MIN_TENTHS + progress = displayScaleTenths - CarPlayDisplayScale.MIN_TENTHS + splitTrack = false + progressTintList = ColorStateList.valueOf(MENU_ACCENT) + thumbTintList = ColorStateList.valueOf(MENU_ACCENT) + setOnSeekBarChangeListener( + object : SeekBar.OnSeekBarChangeListener { + override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) { + displayScaleTenths = CarPlayDisplayScale.sanitize( + CarPlayDisplayScale.MIN_TENTHS + progress, + ) + updateResolutionMenu() + } + + override fun onStartTrackingTouch(seekBar: SeekBar) = Unit + override fun onStopTrackingTouch(seekBar: SeekBar) = Unit + }, + ) + } + content.addView( + seekBar, + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ).apply { topMargin = dp(8) }, + ) + + val range = LinearLayout(this).apply { + orientation = LinearLayout.HORIZONTAL + } + range.addView( + menuText("0.3x", 15f, MENU_SECONDARY), + LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1f), + ) + range.addView( + menuText("1.0x", 15f, MENU_SECONDARY), + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.WRAP_CONTENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ), + ) + content.addView( + range, + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ), + ) + + content.addView( + buildStepSliderSection( + title = "Frame rate", + values = ( + AirPlayDisplaySettings.MIN_FPS..AirPlayDisplaySettings.MAX_FPS + step AirPlayDisplaySettings.FPS_STEP + ).toList(), + selectedValue = fps, + label = { "$it fps" }, + onValueChanged = { value -> + fps = value + updateResolutionMenu() + }, + ), + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ).apply { topMargin = dp(24) }, + ) + + content.addView( + settingsChoiceRow( + label = "Physical size basis", + options = listOf( + AirPlayPhysicalSizeBasis.WIDTH to "Widest width", + AirPlayPhysicalSizeBasis.HEIGHT to "Longest height", + ), + selected = physicalSizeBasis, + ) { value -> + physicalSizeBasis = value + updateResolutionMenu() + }, + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ).apply { topMargin = dp(24) }, + ) + + content.addView( + buildStepSliderSection( + title = "Physical length", + values = ( + AirPlayDisplaySettings.MIN_WIDTH_PHYSICAL_MM.. + AirPlayDisplaySettings.MAX_WIDTH_PHYSICAL_MM + step AirPlayDisplaySettings.WIDTH_PHYSICAL_MM_STEP + ).toList(), + selectedValue = widthPhysicalMm, + label = { "$it mm" }, + onValueChanged = { value -> + widthPhysicalMm = value + updateResolutionMenu() + }, + ), + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ).apply { topMargin = dp(16) }, + ) + + val hevcRow = LinearLayout(this).apply { + orientation = LinearLayout.HORIZONTAL + gravity = Gravity.CENTER_VERTICAL + } + hevcRow.addView( + menuText("HEVC (H.265)", 20f, MENU_SECONDARY), + LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1f), + ) + val hevcSwitch = Switch(this).apply { + isChecked = hevcEnabled + contentDescription = "HEVC H.265 video transport" + showText = false + thumbTintList = ColorStateList( + arrayOf(intArrayOf(android.R.attr.state_checked), intArrayOf()), + intArrayOf(MENU_ACCENT, MENU_SECONDARY), + ) + trackTintList = ColorStateList( + arrayOf(intArrayOf(android.R.attr.state_checked), intArrayOf()), + intArrayOf(MENU_ACCENT_TRACK, MENU_TRACK_OFF), + ) + setOnCheckedChangeListener { _, checked -> + if (hevcEnabled == checked) return@setOnCheckedChangeListener + hevcEnabled = checked + appendLog( + "HEVC (H.265) ${if (hevcEnabled) "enabled" else "disabled"}; " + + "applies when settings close", + ) + updateResolutionMenu() + } + } + hevcRow.addView( + hevcSwitch, + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.WRAP_CONTENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ), + ) + content.addView( + hevcRow, + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ).apply { topMargin = dp(30) }, + ) + + val softwareHevcRow = LinearLayout(this).apply { + orientation = LinearLayout.HORIZONTAL + gravity = Gravity.CENTER_VERTICAL + } + softwareHevcRow.addView( + menuText("HEVC software decoder", 20f, MENU_SECONDARY), + LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1f), + ) + val softwareHevcSwitch = Switch(this).apply { + isChecked = hevcSoftwareDecoderEnabled + contentDescription = "Use software HEVC decoder" + showText = false + thumbTintList = ColorStateList( + arrayOf(intArrayOf(android.R.attr.state_checked), intArrayOf()), + intArrayOf(MENU_ACCENT, MENU_SECONDARY), + ) + trackTintList = ColorStateList( + arrayOf(intArrayOf(android.R.attr.state_checked), intArrayOf()), + intArrayOf(MENU_ACCENT_TRACK, MENU_TRACK_OFF), + ) + setOnCheckedChangeListener { _, checked -> + if (hevcSoftwareDecoderEnabled == checked) return@setOnCheckedChangeListener + hevcSoftwareDecoderEnabled = checked + appendLog( + "HEVC software decoder ${if (hevcSoftwareDecoderEnabled) "enabled" else "disabled"}; " + + "applies when settings close", + ) + updateResolutionMenu() + } + } + softwareHevcRow.addView( + softwareHevcSwitch, + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.WRAP_CONTENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ), + ) + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + content.addView( + softwareHevcRow, + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ).apply { topMargin = dp(16) }, + ) + } + + content.addView( + buildSafeAreaSection(), + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ).apply { topMargin = dp(30) }, + ) + + content.addView( + settingsCategoryHeader("Window"), + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ).apply { topMargin = dp(40) }, + ) + content.addView( + buildFullscreenSection(), + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ).apply { topMargin = dp(12) }, + ) + + content.addView( + settingsCategoryHeader("Diagnostics"), + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ).apply { topMargin = dp(40) }, + ) + content.addView( + buildDebugLogsSection(), + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ).apply { topMargin = dp(12) }, + ) + + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) { + content.addView( + settingsCategoryHeader("Android 9 compatibility"), + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ).apply { topMargin = dp(40) }, + ) + content.addView( + menuText( + "The following settings are unavailable and hidden on Android 9 " + + "(API 28):\n" + + "• Wi-Fi P2P (5 GHz) — LocalOnlyHotspot is used instead.\n" + + "• HEVC software decoder — hardware decoding is used instead.", + 16f, + MENU_SECONDARY, + ), + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ).apply { topMargin = dp(12) }, + ) + } + + val preview = menuText("", 17f, MENU_SECONDARY) + content.addView( + preview, + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ).apply { topMargin = dp(30) }, + ) + + val save = Button(this).apply { + text = "Save and reconnect" + isAllCaps = false + textSize = 17f + setTextColor(MENU_BUTTON_TEXT) + backgroundTintList = ColorStateList.valueOf(MENU_ACCENT) + minHeight = dp(52) + setOnClickListener { saveSettingsAndReconnect() } + } + content.addView( + save, + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ).apply { topMargin = dp(46) }, + ) + + val exitApplicationButton = Button(this).apply { + text = "EXIT APPLICATION" + isAllCaps = false + textSize = 17f + setTextColor(Color.WHITE) + backgroundTintList = ColorStateList.valueOf(MENU_DANGER) + minHeight = dp(52) + setOnClickListener { exitApplication() } + } + content.addView( + exitApplicationButton, + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ).apply { topMargin = dp(12) }, + ) + + val scroll = ScrollView(this).apply { + isFillViewport = true + addView( + content, + ViewGroup.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ), + ) + } + panel.addView( + scroll, + FrameLayout.LayoutParams( + FrameLayout.LayoutParams.MATCH_PARENT, + FrameLayout.LayoutParams.MATCH_PARENT, + ), + ) + panel.addView( + Button(this).apply { + text = "X" + isAllCaps = false + textSize = 22f + setTextColor(Color.WHITE) + backgroundTintList = ColorStateList.valueOf(MENU_TRACK_OFF) + contentDescription = "Discard changes and exit settings" + minWidth = 0 + minHeight = 0 + setPadding(0, 0, 0, 0) + setOnClickListener { cancelSettingsEdits() } + }, + FrameLayout.LayoutParams(dp(48), dp(48), Gravity.TOP or Gravity.START).apply { + leftMargin = dp(16) + topMargin = dp(16) + }, + ) + overlay.addView( + panel, + FrameLayout.LayoutParams( + minOf(resources.displayMetrics.widthPixels, MAX_SETTINGS_MENU_WIDTH_PX), + FrameLayout.LayoutParams.MATCH_PARENT, + Gravity.CENTER, + ), + ) + overlay.addOnLayoutChangeListener { view, _, _, _, _, _, _, _, _ -> + val desiredWidth = minOf(view.width, MAX_SETTINGS_MENU_WIDTH_PX) + val params = panel.layoutParams + if (params.width != desiredWidth) { + params.width = desiredWidth + panel.layoutParams = params + } + } + + resolutionValueView = resolutionValue + resolutionPreviewView = preview + this.hotspotStatusView = hotspotStatusView + updateHotspotStatusBlock() + updateResolutionMenu() + return overlay + } + + private fun persistMenuSettings() { + AirPlayPersistence.saveWirelessEnabled(this, wirelessEnabled) + AirPlayPersistence.saveMfiTarget(this, mfiTarget) + AirPlayPersistence.saveMfiI2cPath(this, mfiI2cPath) + AirPlayPersistence.saveRemoteMfiServer(this, remoteMfiServer) + AirPlayPersistence.saveRemoteMfiToken(this, remoteMfiToken) + AirPlayPersistence.saveWirelessHotspotMode(this, wirelessHotspotMode) + AirPlayPersistence.saveManualHotspotSsid(this, manualHotspotSsid) + AirPlayPersistence.saveManualHotspotPassphrase(this, manualHotspotPassphrase) + AirPlayPersistence.saveManualHotspotBand(this, manualHotspotBand) + AirPlayPersistence.saveManualHotspotChannel(this, manualHotspotChannel) + AirPlayPersistence.saveManualHotspotSecurity(this, manualHotspotSecurity) + AirPlayPersistence.saveLocationReportingEnabled(this, locationReportingEnabled) + AirPlayPersistence.saveAutoStartOnBoot(this, autoStartOnBoot) + AirPlayPersistence.saveAdvancedAudioChannelMapping(this, advancedAudioChannelMapping) + AirPlayPersistence.saveDisplayScaleTenths(this, displayScaleTenths) + AirPlayPersistence.saveFps(this, fps) + AirPlayPersistence.saveWidthPhysicalMm(this, widthPhysicalMm) + AirPlayPersistence.savePhysicalSizeBasis(this, physicalSizeBasis) + AirPlayPersistence.saveHevcEnabled(this, hevcEnabled) + AirPlayPersistence.saveHevcSoftwareDecoderEnabled(this, hevcSoftwareDecoderEnabled) + AirPlayPersistence.saveManufacturer(this, manufacturer) + AirPlayPersistence.saveModel(this, model) + AirPlayPersistence.saveOemLabel(this, oemLabel) + AirPlayPersistence.saveDebugLogsEnabled(this, debugLogsEnabled) + AirPlayPersistence.saveRightHandDrive(this, rightHandDrive) + AirPlayPersistence.saveHideTopBar(this, hideTopBar) + AirPlayPersistence.saveHideBottomBar(this, hideBottomBar) + AirPlayPersistence.saveSafeAreaDrawOutside(this, safeAreaDrawOutside) + } + + private fun captureSettingsBaseline(): SettingsBaseline { + val safeAreaSize = currentActivitySize() + val customIconBytes = try { + AirPlayPersistence.loadCustomAirPlayIconFile(this)?.readBytes() + } catch (error: Exception) { + Log.w(TAG, "Could not read the current AirPlay icon for settings rollback", error) + null + } + return SettingsBaseline( + safeAreaSize = safeAreaSize, + safeAreaRect = safeAreaSize?.let { + AirPlayPersistence.loadSafeAreaRect(this, it.width, it.height) + }, + customIconBytes = customIconBytes, + ) + } + + private fun restoreSettingsBaseline() { + val baseline = settingsBaseline ?: return + loadPersistedSettings() + baseline.safeAreaSize?.let { size -> + baseline.safeAreaRect?.let { rect -> + AirPlayPersistence.saveSafeAreaRect( + this, + size.width, + size.height, + rect, + commit = true, + ) + } ?: AirPlayPersistence.clearSafeAreaRect( + this, + size.width, + size.height, + commit = true, + ) + } + try { + baseline.customIconBytes?.let { bytes -> + AirPlayPersistence.saveCustomAirPlayIcon(this, bytes) + } ?: AirPlayPersistence.clearCustomAirPlayIcon(this) + } catch (error: Exception) { + Log.w(TAG, "Could not restore the previous AirPlay icon", error) + } + settingsBaseline = null + locationPermissionAvailable = hasFineLocationPermission() + hotspotStatus = HotspotStatus(state = if (wirelessEnabled) "stopped" else "off") + syncMfiSettingsControls() + updateManualHotspotFields() + updateAirPlayIconPreview() + updateSafeAreaSummary() + updateHotspotStatusBlock() + updateResolutionMenu() + updateDebugOverlays() + applyFullscreenMode() + refreshDisplaySizeAfterLayout() + } + + private fun buildMfiTargetSection(): View { + val section = LinearLayout(this).apply { + orientation = LinearLayout.VERTICAL + } + val targetChoice = settingsChoiceRow( + label = "MFI certificate & signing target", + options = listOf( + MfiTarget.USB_CH341 to "USB/CH341", + MfiTarget.I2C to "I2C", + MfiTarget.REMOTE to "Remote", + ), + selected = mfiTarget, + ) { target -> + if (mfiTarget == target) return@settingsChoiceRow + mfiTarget = target + updateMfiTargetFields() + appendLog("MFI target: ${mfiTargetLabel(target)}; applies when settings close") + } + mfiTargetGroup = (targetChoice as ViewGroup).getChildAt(1) as RadioGroup + section.addView( + targetChoice, + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ), + ) + + val i2cFields = LinearLayout(this).apply { + orientation = LinearLayout.VERTICAL + addView( + settingsInputRow( + "I2C device", + mfiI2cPath, + onInputCreated = { mfiI2cPathInput = it }, + ) { value -> + mfiI2cPath = value + mfiErrorView?.visibility = View.GONE + }, + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ), + ) + addView( + menuText("Linux device path, for example /dev/i2c-1.", 14f, MENU_SECONDARY), + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ).apply { topMargin = dp(4) }, + ) + } + section.addView( + i2cFields, + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ).apply { topMargin = dp(8) }, + ) + mfiI2cFields = i2cFields + + val remoteFields = LinearLayout(this).apply { + orientation = LinearLayout.VERTICAL + addView( + settingsInputRow( + "Server address", + remoteMfiServer, + onInputCreated = { remoteMfiServerInput = it }, + ) { value -> + remoteMfiServer = value + }, + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ), + ) + addView( + settingsInputRow( + "Token (optional)", + remoteMfiToken, + password = true, + onInputCreated = { remoteMfiTokenInput = it }, + ) { value -> + remoteMfiToken = value + }, + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ).apply { topMargin = dp(8) }, + ) + addView( + menuText( + "Address must start with http:// or https://. Token is optional and sent " + + "as an Authorization bearer token.", + 14f, + MENU_SECONDARY, + ), + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ).apply { topMargin = dp(4) }, + ) + } + section.addView( + remoteFields, + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ).apply { topMargin = dp(8) }, + ) + mfiRemoteFields = remoteFields + val error = menuText("", 14f, MENU_DANGER).apply { + visibility = View.GONE + } + section.addView( + error, + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ).apply { topMargin = dp(6) }, + ) + mfiErrorView = error + updateMfiTargetFields() + return section + } + + private fun updateMfiTargetFields() { + mfiI2cFields?.visibility = if (mfiTarget == MfiTarget.I2C) View.VISIBLE else View.GONE + mfiRemoteFields?.visibility = if (mfiTarget == MfiTarget.REMOTE) View.VISIBLE else View.GONE + mfiErrorView?.visibility = View.GONE + } + + private fun syncMfiSettingsControls() { + mfiTargetGroup?.let { group -> + val button = (0 until group.childCount) + .map { group.getChildAt(it) } + .filterIsInstance() + .firstOrNull { it.tag == mfiTarget } + button?.let { group.check(it.id) } + } + if (mfiI2cPathInput?.text?.toString() != mfiI2cPath) { + mfiI2cPathInput?.setText(mfiI2cPath) + } + if (remoteMfiServerInput?.text?.toString() != remoteMfiServer) { + remoteMfiServerInput?.setText(remoteMfiServer) + } + if (remoteMfiTokenInput?.text?.toString() != remoteMfiToken) { + remoteMfiTokenInput?.setText(remoteMfiToken) + } + updateMfiTargetFields() + } + + private fun mfiTargetLabel(target: MfiTarget): String = when (target) { + MfiTarget.LOCAL -> "Local offline" + MfiTarget.USB_CH341 -> "USB/CH341" + MfiTarget.I2C -> "I2C" + MfiTarget.REMOTE -> "Remote" + } + + private fun buildIdentitySettingsSection(): View { + val section = LinearLayout(this).apply { + orientation = LinearLayout.VERTICAL + } + section.addView( + settingsInputRow("Manufacturer", manufacturer) { value -> + manufacturer = value + updateResolutionMenu() + }, + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ), + ) + section.addView( + settingsInputRow("Model", model) { value -> + model = value + updateResolutionMenu() + }, + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ).apply { topMargin = dp(10) }, + ) + section.addView( + settingsInputRow("OEM label", oemLabel) { value -> + oemLabel = value + updateResolutionMenu() + }, + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ).apply { topMargin = dp(10) }, + ) + return section + } + + private fun settingsCategoryHeader(title: String): TextView = + menuText(title, 16f, MENU_ACCENT, bold = true) + + private fun buildLocationReportingSection(): View = + LinearLayout(this).apply { + orientation = LinearLayout.VERTICAL + val row = LinearLayout(this@CarPlayHostActivity).apply { + orientation = LinearLayout.HORIZONTAL + gravity = Gravity.CENTER_VERTICAL + } + row.addView( + menuText("Report location to iPhone", 20f, MENU_SECONDARY), + LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1f), + ) + val switch = Switch(this@CarPlayHostActivity).apply { + isChecked = locationReportingEnabled + contentDescription = "Report Android location to the iPhone" + showText = false + thumbTintList = ColorStateList( + arrayOf(intArrayOf(android.R.attr.state_checked), intArrayOf()), + intArrayOf(MENU_ACCENT, MENU_SECONDARY), + ) + trackTintList = ColorStateList( + arrayOf(intArrayOf(android.R.attr.state_checked), intArrayOf()), + intArrayOf(MENU_ACCENT_TRACK, MENU_TRACK_OFF), + ) + setOnCheckedChangeListener { _, checked -> + onLocationReportingChanged(checked) + } + } + locationReportingSwitch = switch + row.addView( + switch, + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.WRAP_CONTENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ), + ) + addView( + row, + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ), + ) + addView( + menuText( + "Sends precise Android location as CarPlay GPS data when the iPhone requests it.", + 14f, + MENU_SECONDARY, + ), + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ).apply { topMargin = dp(6) }, + ) + } + + private fun onLocationReportingChanged(checked: Boolean) { + if (locationReportingEnabled == checked) return + locationReportingEnabled = checked + appendLog( + "Location reporting ${if (locationReportingEnabled) "enabled" else "disabled"}; " + + "applies when settings close", + ) + updateResolutionMenu() + if (locationReportingEnabled && !locationPermissionAvailable) { + requestLocationPermission() + } + } + + private fun buildDebugLogsSection(): View = + settingsSwitchRow( + label = "Debug logs", + checked = debugLogsEnabled, + description = "Show on-screen debug logs", + ) { checked -> + debugLogsEnabled = checked + appendLog("Debug logs ${if (debugLogsEnabled) "enabled" else "disabled"}") + updateDebugOverlays() + } + + private fun buildStepSliderSection( + title: String, + values: List, + selectedValue: Int, + label: (Int) -> String, + onValueChanged: (Int) -> Unit, + ): View { + val section = LinearLayout(this).apply { + orientation = LinearLayout.VERTICAL + } + val header = LinearLayout(this).apply { + orientation = LinearLayout.HORIZONTAL + gravity = Gravity.CENTER_VERTICAL + } + header.addView( + menuText(title, 20f, MENU_SECONDARY), + LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1f), + ) + val selectedIndex = values.indexOf(selectedValue) + .takeIf { it >= 0 } + ?: 0 + val valueView = menuText(label(values[selectedIndex]), 22f, MENU_ACCENT, bold = true) + header.addView( + valueView, + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.WRAP_CONTENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ), + ) + section.addView( + header, + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ), + ) + val seekBar = SeekBar(this).apply { + max = (values.size - 1).coerceAtLeast(0) + progress = selectedIndex + splitTrack = false + progressTintList = ColorStateList.valueOf(MENU_ACCENT) + thumbTintList = ColorStateList.valueOf(MENU_ACCENT) + setOnSeekBarChangeListener( + object : SeekBar.OnSeekBarChangeListener { + override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) { + val value = values.getOrNull(progress) ?: return + valueView.text = label(value) + if (fromUser) onValueChanged(value) + } + + override fun onStartTrackingTouch(seekBar: SeekBar) = Unit + override fun onStopTrackingTouch(seekBar: SeekBar) = Unit + }, + ) + } + section.addView( + seekBar, + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ).apply { topMargin = dp(8) }, + ) + return section + } + + private fun buildAirPlayIconSection(): View { + val section = LinearLayout(this).apply { + orientation = LinearLayout.VERTICAL + } + section.addView( + menuText("AirPlay icon", 20f, MENU_SECONDARY), + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ), + ) + val row = LinearLayout(this).apply { + orientation = LinearLayout.HORIZONTAL + gravity = Gravity.CENTER_VERTICAL + } + val preview = ImageView(this).apply { + scaleType = ImageView.ScaleType.CENTER_CROP + background = GradientDrawable().apply { + shape = GradientDrawable.RECTANGLE + cornerRadius = dp(8).toFloat() + setColor(MENU_TRACK_OFF) + } + } + row.addView( + preview, + LinearLayout.LayoutParams(dp(72), dp(72)), + ) + val actions = LinearLayout(this).apply { + orientation = LinearLayout.VERTICAL + } + actions.addView( + Button(this).apply { + text = "Choose image" + isAllCaps = false + setOnClickListener { + externalActivityInProgress = true + imagePicker.launch("image/*") + } + }, + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ), + ) + actions.addView( + Button(this).apply { + text = "Default icon" + isAllCaps = false + setOnClickListener { + AirPlayPersistence.clearCustomAirPlayIcon(this@CarPlayHostActivity) + updateAirPlayIconPreview() + } + }, + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ).apply { topMargin = dp(8) }, + ) + row.addView( + actions, + LinearLayout.LayoutParams( + 0, + ViewGroup.LayoutParams.WRAP_CONTENT, + 1f, + ).apply { marginStart = dp(16) }, + ) + section.addView( + row, + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ).apply { topMargin = dp(10) }, + ) + val status = menuText("", 14f, MENU_SECONDARY) + section.addView( + status, + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ).apply { topMargin = dp(8) }, + ) + iconPreviewView = preview + iconStatusView = status + updateAirPlayIconPreview() + return section + } + + private fun buildDrivingSideSection(): View { + val section = LinearLayout(this).apply { + orientation = LinearLayout.VERTICAL + } + section.addView( + menuText("Driving side", 20f, MENU_SECONDARY), + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ), + ) + val group = RadioGroup(this).apply { + orientation = RadioGroup.HORIZONTAL + } + val left = RadioButton(this).apply { + id = View.generateViewId() + text = "Left-hand drive" + setTextColor(Color.WHITE) + isChecked = !rightHandDrive + } + val right = RadioButton(this).apply { + id = View.generateViewId() + text = "Right-hand drive" + setTextColor(Color.WHITE) + isChecked = rightHandDrive + } + group.addView(left) + group.addView(right) + group.setOnCheckedChangeListener { _, checkedId -> + rightHandDrive = checkedId == right.id + updateResolutionMenu() + } + section.addView( + group, + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ).apply { topMargin = dp(8) }, + ) + return section + } + + private fun buildFullscreenSection(): View { + val section = LinearLayout(this).apply { + orientation = LinearLayout.VERTICAL + } + section.addView( + menuText("Fullscreen", 20f, MENU_SECONDARY), + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ), + ) + section.addView( + settingsSwitchRow( + label = "Hide top bar", + checked = hideTopBar, + description = "Hide the status bar", + ) { checked -> + hideTopBar = checked + applyFullscreenMode() + refreshDisplaySizeAfterLayout() + }, + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ).apply { topMargin = dp(10) }, + ) + section.addView( + settingsSwitchRow( + label = "Hide bottom bar", + checked = hideBottomBar, + description = "Hide the navigation bar", + ) { checked -> + hideBottomBar = checked + applyFullscreenMode() + refreshDisplaySizeAfterLayout() + }, + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ).apply { topMargin = dp(10) }, + ) + return section + } + + private fun buildSafeAreaSection(): View { + val section = LinearLayout(this).apply { + orientation = LinearLayout.VERTICAL + } + section.addView( + menuText("Safe area", 20f, MENU_SECONDARY), + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ), + ) + val summary = menuText("", 15f, MENU_ACCENT) + section.addView( + summary, + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ).apply { topMargin = dp(6) }, + ) + val buttons = LinearLayout(this).apply { + orientation = LinearLayout.HORIZONTAL + } + buttons.addView( + Button(this).apply { + text = "Set" + isAllCaps = false + setOnClickListener { openSafeAreaEditor() } + }, + LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1f), + ) + buttons.addView( + Button(this).apply { + text = "Reset" + isAllCaps = false + setOnClickListener { resetSafeAreaForCurrentSize() } + }, + LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1f).apply { + marginStart = dp(12) + }, + ) + section.addView( + buttons, + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ).apply { topMargin = dp(10) }, + ) + section.addView( + settingsSwitchRow( + label = "Draw outside safe area", + checked = safeAreaDrawOutside, + description = "Allow CarPlay UI outside the safe area", + ) { checked -> + safeAreaDrawOutside = checked + updateResolutionMenu() + }, + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ).apply { topMargin = dp(12) }, + ) + safeAreaSummaryView = summary + updateSafeAreaSummary() + return section + } + + private fun buildSafeAreaEditor(): View { + val overlay = FrameLayout(this).apply { + setBackgroundColor(Color.BLACK) + isClickable = true + } + val editor = SafeAreaEditorView(this) + overlay.addView( + editor, + FrameLayout.LayoutParams( + FrameLayout.LayoutParams.MATCH_PARENT, + FrameLayout.LayoutParams.MATCH_PARENT, + ), + ) + overlay.addView( + menuText("Safe area", 24f, Color.WHITE, bold = true).apply { + setPadding(dp(16), dp(12), dp(16), dp(8)) + }, + FrameLayout.LayoutParams( + FrameLayout.LayoutParams.WRAP_CONTENT, + FrameLayout.LayoutParams.WRAP_CONTENT, + Gravity.TOP or Gravity.START, + ), + ) + val controls = LinearLayout(this).apply { + orientation = LinearLayout.HORIZONTAL + gravity = Gravity.CENTER + setPadding(dp(16), dp(10), dp(16), dp(16)) + } + controls.addView( + Button(this).apply { + text = "Cancel" + isAllCaps = false + setOnClickListener { closeSafeAreaEditor() } + }, + LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1f), + ) + controls.addView( + Button(this).apply { + text = "Save" + isAllCaps = false + setOnClickListener { saveSafeAreaEditor() } + }, + LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1f).apply { + marginStart = dp(12) + }, + ) + overlay.addView( + controls, + FrameLayout.LayoutParams( + FrameLayout.LayoutParams.MATCH_PARENT, + FrameLayout.LayoutParams.WRAP_CONTENT, + Gravity.BOTTOM, + ), + ) + safeAreaEditorView = editor + return overlay + } + + private fun settingsInputRow( + label: String, + value: String, + password: Boolean = false, + numeric: Boolean = false, + onInputCreated: ((EditText) -> Unit)? = null, + onChanged: (String) -> Unit, + ): View = LinearLayout(this).apply { + orientation = LinearLayout.HORIZONTAL + gravity = Gravity.CENTER_VERTICAL + addView( + menuText(label, 18f, MENU_SECONDARY).apply { + gravity = Gravity.CENTER_VERTICAL + }, + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.WRAP_CONTENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ), + ) + addView( + EditText(this@CarPlayHostActivity).apply { + setText(value) + textSize = 18f + setTextColor(Color.WHITE) + setHintTextColor(MENU_SECONDARY) + backgroundTintList = ColorStateList.valueOf(MENU_ACCENT) + minHeight = dp(48) + isSingleLine = true + inputType = when { + numeric -> InputType.TYPE_CLASS_NUMBER + password -> InputType.TYPE_CLASS_TEXT or + InputType.TYPE_TEXT_VARIATION_PASSWORD or + InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS + else -> InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS + } + addTextChangedListener(afterTextChanged(onChanged)) + onInputCreated?.invoke(this) + }, + LinearLayout.LayoutParams( + 0, + ViewGroup.LayoutParams.WRAP_CONTENT, + 1f, + ).apply { marginStart = dp(12) }, + ) + } + + private fun settingsSwitchRow( + label: String, + checked: Boolean, + description: String, + onChanged: (Boolean) -> Unit, + ): View = LinearLayout(this).apply { + orientation = LinearLayout.HORIZONTAL + gravity = Gravity.CENTER_VERTICAL + addView( + menuText(label, 18f, MENU_SECONDARY), + LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1f), + ) + addView( + Switch(this@CarPlayHostActivity).apply { + isChecked = checked + contentDescription = description + showText = false + thumbTintList = ColorStateList( + arrayOf(intArrayOf(android.R.attr.state_checked), intArrayOf()), + intArrayOf(MENU_ACCENT, MENU_SECONDARY), + ) + trackTintList = ColorStateList( + arrayOf(intArrayOf(android.R.attr.state_checked), intArrayOf()), + intArrayOf(MENU_ACCENT_TRACK, MENU_TRACK_OFF), + ) + setOnCheckedChangeListener { _, value -> onChanged(value) } + }, + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.WRAP_CONTENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ), + ) + } + + private fun afterTextChanged(onChanged: (String) -> Unit): TextWatcher = + object : TextWatcher { + override fun beforeTextChanged( + text: CharSequence?, + start: Int, + count: Int, + after: Int, + ) = Unit + + override fun onTextChanged( + text: CharSequence?, + start: Int, + before: Int, + count: Int, + ) = Unit + + override fun afterTextChanged(text: Editable?) { + onChanged(text?.toString().orEmpty()) + } + } + + private fun buildHotspotModeSection(): View { + val section = LinearLayout(this).apply { + orientation = LinearLayout.VERTICAL + } + section.addView( + menuText("Wi-Fi session", 20f, MENU_SECONDARY), + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ), + ) + + val group = RadioGroup(this).apply { + orientation = LinearLayout.VERTICAL + setPadding(0, dp(8), 0, 0) + } + val modes = buildList { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + add(WirelessHotspotMode.WIFI_P2P to "Wi-Fi P2P (5 GHz)") + } + add(WirelessHotspotMode.LOCAL_ONLY_HOTSPOT to "LocalOnlyHotspot") + add(WirelessHotspotMode.MANUAL to "Manual hotspot") + } + var selectedId = View.NO_ID + for ((mode, label) in modes) { + val button = RadioButton(this).apply { + id = View.generateViewId() + text = label + textSize = 18f + setTextColor(MENU_SECONDARY) + buttonTintList = ColorStateList( + arrayOf(intArrayOf(android.R.attr.state_checked), intArrayOf()), + intArrayOf(MENU_ACCENT, MENU_SECONDARY), + ) + tag = mode + isChecked = wirelessHotspotMode == mode + } + if (wirelessHotspotMode == mode) selectedId = button.id + group.addView( + button, + RadioGroup.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ), + ) + } + if (selectedId != View.NO_ID) group.check(selectedId) + group.setOnCheckedChangeListener { radioGroup, checkedId -> + val selected = radioGroup.findViewById(checkedId) + ?.tag as? WirelessHotspotMode + ?: return@setOnCheckedChangeListener + if (wirelessHotspotMode == selected) return@setOnCheckedChangeListener + wirelessHotspotMode = selected + hotspotStatus = HotspotStatus(state = if (wirelessEnabled) "stopped" else "off") + updateHotspotStatusBlock() + updateManualHotspotFields() + appendLog( + "Wi-Fi session mode: ${hotspotModeLabel(wirelessHotspotMode)}; " + + "applies when settings close", + ) + } + section.addView( + group, + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ), + ) + + val manualFields = LinearLayout(this).apply { + orientation = LinearLayout.VERTICAL + } + manualFields.addView( + settingsInputRow("Hotspot SSID", manualHotspotSsid) { value -> + manualHotspotSsid = value + manualHotspotErrorView?.visibility = View.GONE + }, + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ), + ) + + manualFields.addView( + settingsChoiceRow( + label = "Band", + options = listOf( + ManualHotspotBand.AUTO to "Auto", + ManualHotspotBand.GHZ_2_4 to "2.4 GHz", + ManualHotspotBand.GHZ_5 to "5 GHz", + ), + selected = manualHotspotBand, + ) { value -> + manualHotspotBand = value + manualHotspotErrorView?.visibility = View.GONE + }, + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ).apply { topMargin = dp(10) }, + ) + + manualFields.addView( + settingsInputRow( + label = "Channel (0 = auto)", + value = manualHotspotChannel.toString(), + numeric = true, + ) { value -> + manualHotspotChannel = value.toIntOrNull() ?: -1 + manualHotspotErrorView?.visibility = View.GONE + }, + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ).apply { topMargin = dp(10) }, + ) + + manualFields.addView( + settingsInputRow( + label = "Hotspot password", + value = manualHotspotPassphrase, + password = true, + ) { value -> + manualHotspotPassphrase = value + manualHotspotErrorView?.visibility = View.GONE + }, + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ).apply { topMargin = dp(10) }, + ) + + manualFields.addView( + settingsChoiceRow( + label = "Security", + options = listOf( + ManualHotspotSecurity.OPEN to "Open", + ManualHotspotSecurity.WPA2 to "WPA2", + ManualHotspotSecurity.WPA3_TRANSITION to "WPA3 transition", + ManualHotspotSecurity.WPA3 to "WPA3", + ), + selected = manualHotspotSecurity, + ) { value -> + manualHotspotSecurity = value + manualHotspotErrorView?.visibility = View.GONE + }, + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ).apply { topMargin = dp(10) }, + ) + + val error = menuText("", 14f, Color.rgb(0xff, 0x7a, 0x7a)).apply { + visibility = View.GONE + } + manualFields.addView( + error, + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ).apply { topMargin = dp(8) }, + ) + + section.addView( + manualFields, + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ).apply { topMargin = dp(8) }, + ) + manualHotspotFields = manualFields + manualHotspotErrorView = error + updateManualHotspotFields() + return section + } + + private fun updateManualHotspotFields() { + val visible = wirelessHotspotMode == WirelessHotspotMode.MANUAL + manualHotspotFields?.visibility = if (visible) View.VISIBLE else View.GONE + if (!visible) manualHotspotErrorView?.visibility = View.GONE + } + + private fun validateMfiSettings(): Boolean { + val error = when { + mfiTarget == MfiTarget.I2C && mfiI2cPath.isBlank() -> + "I2C device path is required" + mfiTarget == MfiTarget.REMOTE && remoteMfiServer.isBlank() -> + "Remote server address is required" + mfiTarget == MfiTarget.REMOTE && + !remoteMfiServer.trim().startsWith("http://") && + !remoteMfiServer.trim().startsWith("https://") -> + "Remote server address must start with http:// or https://" + '\u0000' in mfiI2cPath -> "I2C device path contains U+0000" + '\u0000' in remoteMfiServer -> "Remote server address contains U+0000" + '\u0000' in remoteMfiToken -> "Remote token contains U+0000" + else -> null + } + mfiErrorView?.text = error.orEmpty() + mfiErrorView?.visibility = if (error == null) View.GONE else View.VISIBLE + return error == null + } + + private fun validateManualHotspotSettings(): Boolean { + if (wirelessHotspotMode != WirelessHotspotMode.MANUAL) return true + val error = when { + manualHotspotSsid.isBlank() -> "Hotspot SSID is required" + manualHotspotSsid.encodeToByteArray().size > 32 -> + "Hotspot SSID must be at most 32 UTF-8 bytes" + '\u0000' in manualHotspotSsid -> "Hotspot SSID contains U+0000" + manualHotspotChannel !in 0..196 -> "Channel must be 0 or 1-196" + manualHotspotChannel != 0 && + !isManualHotspotChannelCompatible(manualHotspotBand, manualHotspotChannel) -> + "Channel is not valid for the selected band" + '\u0000' in manualHotspotPassphrase -> "Hotspot password contains U+0000" + manualHotspotSecurity == ManualHotspotSecurity.OPEN && + manualHotspotPassphrase.isNotEmpty() -> + "Password must be empty when security is Open" + manualHotspotSecurity != ManualHotspotSecurity.OPEN && + manualHotspotPassphrase.length !in 8..63 -> + "WPA2/WPA3 password must be 8-63 characters" + else -> null + } + manualHotspotErrorView?.text = error.orEmpty() + manualHotspotErrorView?.visibility = if (error == null) View.GONE else View.VISIBLE + return error == null + } + + private fun hotspotModeLabel(mode: WirelessHotspotMode): String = when (mode) { + WirelessHotspotMode.WIFI_P2P -> "Wi-Fi P2P (5 GHz)" + WirelessHotspotMode.LOCAL_ONLY_HOTSPOT -> "LocalOnlyHotspot" + WirelessHotspotMode.MANUAL -> "Manual hotspot" + } + + private fun menuText( + text: String, + sizeSp: Float, + color: Int, + bold: Boolean = false, + ): TextView = TextView(this).apply { + this.text = text + textSize = sizeSp + setTextColor(color) + typeface = if (bold) Typeface.DEFAULT_BOLD else Typeface.DEFAULT + includeFontPadding = false + } + + private fun updateHotspotStatus(status: CarPlayStatus) { + if (!wirelessEnabled) return + hotspotStatus = when (status) { + CarPlayStatus.StartingHotspot -> HotspotStatus(state = "Starting") + is CarPlayStatus.HotspotReady -> HotspotStatus( + state = "Ready", + ssid = status.ssid, + band = status.band, + channel = status.channel, + backend = status.backend, + ) + CarPlayStatus.WaitingForPairedIphone -> + hotspotStatus.copy(state = "Waiting for paired iPhone") + CarPlayStatus.ConnectingBluetooth -> + hotspotStatus.copy(state = "Connecting Bluetooth") + CarPlayStatus.RunningWireless -> + hotspotStatus.copy(state = "Running") + CarPlayStatus.WirelessActive -> + hotspotStatus.copy(state = "Active") + CarPlayStatus.AttachingNetwork -> + hotspotStatus.copy(state = "Starting AirPlay service") + is CarPlayStatus.Failed -> hotspotStatus.copy(state = "Error") + else -> return + } + updateHotspotStatusBlock() + } + + private fun updateHotspotStatusBlock() { + if (!wirelessEnabled) { + hotspotStatusView?.text = "Wireless hotspot: off" + return + } + val status = hotspotStatus + hotspotStatusView?.text = buildString { + append("Wireless hotspot: ").append(status.state) + status.ssid?.let { append("\nSSID: ").append(it) } + status.backend?.let { append("\nBackend: ").append(it) } + status.band?.let { append("\nBand: ").append(it) } + status.channel?.let { + append("\nChannel: ").append(if (it == 0) "Auto" else it.toString()) + } + } + } + + @Suppress("UNCHECKED_CAST") + private fun settingsChoiceRow( + label: String, + options: List>, + selected: T, + onSelected: (T) -> Unit, + ): View = LinearLayout(this).apply { + orientation = LinearLayout.VERTICAL + addView( + menuText(label, 18f, MENU_SECONDARY), + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ), + ) + val group = RadioGroup(this@CarPlayHostActivity).apply { + orientation = RadioGroup.VERTICAL + setPadding(0, dp(4), 0, 0) + } + var selectedId = View.NO_ID + for ((value, text) in options) { + val button = RadioButton(this@CarPlayHostActivity).apply { + id = View.generateViewId() + this.text = text + textSize = 17f + setTextColor(MENU_SECONDARY) + buttonTintList = ColorStateList( + arrayOf(intArrayOf(android.R.attr.state_checked), intArrayOf()), + intArrayOf(MENU_ACCENT, MENU_SECONDARY), + ) + tag = value + isChecked = value == selected + } + if (value == selected) selectedId = button.id + group.addView( + button, + RadioGroup.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ), + ) + } + if (selectedId != View.NO_ID) group.check(selectedId) + group.setOnCheckedChangeListener { radioGroup, checkedId -> + val value = radioGroup.findViewById(checkedId)?.tag as? T ?: return@setOnCheckedChangeListener + onSelected(value) + } + addView( + group, + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ), + ) + } + + private fun updateResolutionMenu() { + resolutionValueView?.text = CarPlayDisplayScale.label(displayScaleTenths) + val native = activeDisplaySize ?: currentActivitySize() + val resolution = if (native == null) { + "Handshake resolution: waiting for display" + } else { + val negotiated = CarPlayDisplayScale.apply( + AirPlayDisplayConfig( + widthPixels = native.width, + heightPixels = native.height, + widthPhysicalMm = widthPhysicalMm, + fps = fps, + ), + displayScaleTenths, + ) + "Handshake resolution: ${native.width} x ${native.height} -> " + + "${negotiated.widthPixels} x ${negotiated.heightPixels}" + } + val transport = if (!hevcEnabled) { + "H.264" + } else { + "HEVC (H.265, ${if (hevcSoftwareDecoderEnabled) "software" else "hardware"})" + } + val fullscreen = buildString { + append(if (hideTopBar) "top hidden" else "top shown") + append(", ") + append(if (hideBottomBar) "bottom hidden" else "bottom shown") + } + resolutionPreviewView?.text = buildString { + append(resolution).append('\n') + append("Identity: ").append(normalizedManufacturer()).append(" / ") + .append(normalizedModel()).append('\n') + append("OEM label: ").append(oemLabel.ifBlank { "(empty)" }).append('\n') + append("Frame rate: ").append(fps).append(" fps\n") + append("Detected maximum: ") + .append(maximumDetectedWidthPixels).append(" x ") + .append(maximumDetectedHeightPixels).append(" px\n") + append("Physical reference: ") + .append( + when (physicalSizeBasis) { + AirPlayPhysicalSizeBasis.WIDTH -> "widest width" + AirPlayPhysicalSizeBasis.HEIGHT -> "longest height" + }, + ) + .append(" = ").append(widthPhysicalMm).append(" mm\n") + native?.let { size -> + val physical = resolvePhysicalSize(size) + append("CarPlay physical size: ") + .append(physical.widthMm).append(" x ") + .append(physical.heightMm).append(" mm\n") + } + append("Driving side: ").append(if (rightHandDrive) "right" else "left").append('\n') + append("Fullscreen: ").append(fullscreen).append('\n') + append("Video transport: ").append(transport).append('\n') + append("Location reporting: ") + .append(if (locationReportingEnabled) "enabled" else "disabled") + .append('\n') + if (advancedAudioChannelMappingSupported) { + append("Audio channel mapping: ") + .append(if (advancedAudioChannelMapping) "AAOS buses" else "Mobile compatible") + .append('\n') + } + append(safeAreaSummary()) + } + } + + private data class CanvasSupport(val supported: Boolean, val reason: String, val details: String) + + private fun largerCanvasSupport(display: AirPlayDisplayConfig): CanvasSupport = try { + val mime = if (hevcEnabled) MediaFormat.MIMETYPE_VIDEO_HEVC else MediaFormat.MIMETYPE_VIDEO_AVC + // Match MediaCodec.createDecoderByType's first suitable decoder; do not silently force + // an enlarged stream through a software decoder on a slower head unit. + val decoder = MediaCodecList(MediaCodecList.REGULAR_CODECS).codecInfos.firstOrNull { + !it.isEncoder && it.supportedTypes.any { type -> type.equals(mime, ignoreCase = true) } + } + if (decoder == null) { + CanvasSupport(false, "no_decoder", "Decoder capability mime=$mime result=no_decoder") + } else { + val hardware = if (Build.VERSION.SDK_INT >= 29) decoder.isHardwareAccelerated + else !decoder.name.startsWith("OMX.google.") && !decoder.name.startsWith("c2.android.") + val video = decoder.getCapabilitiesForType(mime).videoCapabilities + val sizeSupported = video?.isSizeSupported(display.widthPixels, display.heightPixels) == true + val rateSupported = sizeSupported && video?.areSizeAndRateSupported( + display.widthPixels, display.heightPixels, display.fps.toDouble()) == true + val reason = when { + !hardware -> "software_decoder" + hevcEnabled && hevcSoftwareDecoderEnabled -> "software_hevc_selected" + video == null -> "no_video_capabilities" + !sizeSupported -> "canvas_dimensions_unsupported" + !rateSupported -> "frame_rate_unsupported" + else -> "supported" + } + CanvasSupport(reason == "supported", reason, + "Decoder capability codec=${decoder.name} mime=$mime hardware=$hardware " + + "sizeSupported=$sizeSupported rateSupported=$rateSupported " + + "widths=${video?.supportedWidths} heights=${video?.supportedHeights} " + + "alignment=${video?.widthAlignment}x${video?.heightAlignment} " + + "fpsRange=${video?.supportedFrameRates} result=$reason") + } + } catch (error: Exception) { + CanvasSupport(false, "capability_query_${error.javaClass.simpleName}", + "Decoder capability query failed error=${error.javaClass.simpleName}") + } + + private fun createAirPlayConfig(size: DisplaySize): AirPlayConfig { + val physical = resolvePhysicalSize(size) + val baseDisplay = AirPlayDisplayConfig( + widthPixels = size.width, + heightPixels = size.height, + widthPhysicalMm = physical.widthMm, + heightPhysicalMm = physical.heightMm, + fps = fps, + ) + val resolutionDisplay = CarPlayDisplayScale.apply(baseDisplay, displayScaleTenths) + val requestedPercent = uiScalePercent + var scaledDisplay = CarPlayUiScale.apply(resolutionDisplay, uiScalePercent) + val candidate = scaledDisplay + val support = when { + uiScalePercent >= CarPlayUiScale.DEFAULT -> CanvasSupport(true, "not_enlarging", "Decoder capability enlargement check not required") + scaledDisplay === resolutionDisplay -> CanvasSupport(false, "canvas_4k_limit", "Decoder capability check skipped: canvas exceeds enlargement limit") + else -> largerCanvasSupport(scaledDisplay) + } + if (!support.supported) { + scaledDisplay = resolutionDisplay + uiScalePercent = CarPlayUiScale.DEFAULT + AirPlayPersistence.saveUiScalePercent(this, uiScalePercent) + appendLog("Larger CarPlay canvas unavailable reason=${support.reason}; using Default icon and text size") + runOnUiThread { + android.widget.Toast.makeText(this, + "This head unit cannot use the smaller size at this resolution. Using Default.", + android.widget.Toast.LENGTH_LONG).show() + } + } + appendLog("CarPlay size=${CarPlayUiScale.label(uiScalePercent)} canvas=${scaledDisplay.widthPixels}x${scaledDisplay.heightPixels}") + val display = scaledDisplay.copy( + safeArea = AirPlaySafeArea.toInsets( + mapping = AirPlayPersistence.loadSafeAreaRect(this, size.width, size.height), + activityWidthPixels = size.width, + activityHeightPixels = size.height, + displayWidthPixels = scaledDisplay.widthPixels, + displayHeightPixels = scaledDisplay.heightPixels, + ), + safeAreaDrawOutside = safeAreaDrawOutside, + ) + val requestSummary = "Display request selected=${CarPlayUiScale.label(requestedPercent)} percent=$requestedPercent " + + "surface=${size.width}x${size.height} resolution=${displayScaleTenths * 10}% " + + "base=${resolutionDisplay.widthPixels}x${resolutionDisplay.heightPixels} " + + "candidate=${candidate.widthPixels}x${candidate.heightPixels} fps=$fps " + + "codec=${if (hevcEnabled) "HEVC" else "H.264"} softwareHevc=$hevcSoftwareDecoderEnabled" + val effectiveSummary = "Display effective percent=$uiScalePercent " + + "canvas=${display.widthPixels}x${display.heightPixels} decision=${support.reason} " + + "physical=${physical.widthMm}x${physical.heightMm}mm safeArea=${display.safeArea} " + + "drawOutside=${display.safeAreaDrawOutside}" + displayDiagnosticAttempt = DisplayDiagnosticSnapshot.begin(this, requestSummary, support.details, effectiveSummary) + appendLog(requestSummary) + appendLog(support.details) + appendLog(effectiveSummary) + return AirPlayConfig( + deviceName = "DiPlay", + deviceId = DiPlayBootstrap.deviceId(airPlayIdentity), + btMac = DiPlayBluetooth.localAddress(this) ?: DiPlayBootstrap.deviceId(airPlayIdentity), + sourceVersion = "950.7.1", + main = display, + rightHandDrive = rightHandDrive, + hevc = hevcEnabled, + microphone = microphoneAvailable, + manufacturer = normalizedManufacturer(), + model = normalizedModel(), + oemLabel = oemLabel, + icons = listOf(loadAirPlayIcon()), + ) + } + + private fun loadAirPlayIcon(): AirPlayIcon { + val customBytes = try { + AirPlayPersistence.loadCustomAirPlayIconFile(this)?.readBytes() + } catch (_: Exception) { + null + } + if (customBytes != null) { + decodeAirPlayIcon(customBytes)?.let { return it } + AirPlayPersistence.clearCustomAirPlayIcon(this) + } + return decodeAirPlayIcon(defaultAirPlayIconBytes()) + ?: throw IllegalStateException("Packaged AirPlay icon is invalid") + } + + private fun decodeAirPlayIcon(encoded: ByteArray): AirPlayIcon? { + val bounds = BitmapFactory.Options().apply { inJustDecodeBounds = true } + BitmapFactory.decodeByteArray(encoded, 0, encoded.size, bounds) + if (bounds.outWidth <= 0 || bounds.outHeight <= 0 || + bounds.outWidth != bounds.outHeight + ) { + return null + } + return AirPlayIcon(bounds.outWidth, bounds.outHeight, encoded) + } + + private fun defaultAirPlayIconBytes(): ByteArray = + resources.openRawResource(R.drawable.ic_carplay).use { it.readBytes() } + + private fun updateAirPlayIconPreview() { + val preview = iconPreviewView ?: return + val custom = AirPlayPersistence.loadCustomAirPlayIconFile(this) + var customBitmap: Bitmap? = null + if (custom != null) { + customBitmap = BitmapFactory.decodeFile(custom.absolutePath) + if (customBitmap == null) { + AirPlayPersistence.clearCustomAirPlayIcon(this) + } + } + val bitmap = customBitmap ?: BitmapFactory.decodeResource(resources, R.raw.placeholder_icon) + preview.setImageBitmap(bitmap) + iconStatusView?.text = + if (customBitmap != null) "Custom 1:1 icon" else "Default placeholder icon" + } + + private fun currentActivitySize(): DisplaySize? { + val view = videoView + if (view != null && view.width > 0 && view.height > 0) { + return DisplaySize(view.width, view.height) + } + return activeDisplaySize + } + + private fun resolvePhysicalSize(size: DisplaySize): AirPlayPhysicalSizeMm = + AirPlayDisplaySettings.resolvePhysicalSizeMm( + currentWidthPixels = size.width, + currentHeightPixels = size.height, + maximumWidthPixels = maxOf(maximumDetectedWidthPixels, size.width), + maximumHeightPixels = maxOf(maximumDetectedHeightPixels, size.height), + referenceMillimeters = widthPhysicalMm, + basis = physicalSizeBasis, + ) + + private fun safeAreaSummary(): String { + val size = currentActivitySize() ?: return "Safe area: waiting for activity size" + val mapping = AirPlayPersistence.loadSafeAreaRect(this, size.width, size.height) + return if (mapping == null) { + "Safe area: full screen at ${size.width} x ${size.height}" + } else { + "Safe area: ${mapping.width} x ${mapping.height} at " + + "(${mapping.left}, ${mapping.top}) in ${size.width} x ${size.height}" + } + } + + private fun updateSafeAreaSummary() { + safeAreaSummaryView?.text = safeAreaSummary() + } + + private fun openSafeAreaEditor() { + val size = currentActivitySize() + if (size == null) { + appendLog("Safe area editor is unavailable before display layout") + return + } + val editorView = safeAreaEditorView ?: return + val initial = AirPlayPersistence.loadSafeAreaRect(this, size.width, size.height) + ?: AirPlaySafeArea.default(size.width, size.height) + safeAreaEditSize = size + safeAreaEditorActive = true + // Keep the current activity size; changing system bars here would remap the safe area. + settingsMenu?.visibility = View.GONE + safeAreaEditor?.visibility = View.VISIBLE + editorView.setRect(initial, size.width, size.height) + appendLog( + "Safe area editor opened for ${size.width}x${size.height}; " + + "drag the four boundaries", + ) + } + + private fun closeSafeAreaEditor() { + if (!safeAreaEditorActive) return + safeAreaEditorActive = false + safeAreaEditSize = null + safeAreaEditor?.visibility = View.GONE + settingsMenu?.visibility = View.VISIBLE + updateSafeAreaSummary() + updateResolutionMenu() + appendLog("Safe area editor closed") + } + + private fun saveSafeAreaEditor() { + val size = safeAreaEditSize ?: currentActivitySize() ?: return + val rect = safeAreaEditorView?.currentRectForSource() ?: return + AirPlayPersistence.saveSafeAreaRect(this, size.width, size.height, rect) + appendLog( + "Safe area saved for ${size.width}x${size.height}: " + + "${rect.width}x${rect.height} at (${rect.left}, ${rect.top})", + ) + closeSafeAreaEditor() + } + + private fun resetSafeAreaForCurrentSize() { + val size = currentActivitySize() + if (size == null) { + appendLog("Safe area reset is unavailable before display layout") + return + } + AirPlayPersistence.clearSafeAreaRect(this, size.width, size.height) + updateSafeAreaSummary() + updateResolutionMenu() + appendLog("Safe area reset to full screen for ${size.width}x${size.height}") + } + + private fun refreshDisplaySizeAfterLayout() { + videoView?.post { + val view = videoView ?: return@post + scheduleDisplaySize(view.width, view.height) + } + } + + private fun normalizedManufacturer(): String = + manufacturer.trim().ifBlank { AirPlayPersistence.DEFAULT_MANUFACTURER } + + private fun normalizedModel(): String = + model.trim().ifBlank { AirPlayPersistence.DEFAULT_MODEL } + + private fun createMediaSink( + videoWidth: Int, + videoHeight: Int, + controllerGeneration: Int, + ): AndroidMediaSink = AndroidMediaSink( + surface = null, + videoWidth = videoWidth, + videoHeight = videoHeight, + preferSoftwareHevcDecoder = hevcSoftwareDecoderEnabled, + advancedAudioChannelMapping = advancedAudioChannelMapping, + onScreenStreamActiveChanged = { type, active -> + onScreenStreamStateChanged(controllerGeneration, type, active) + }, + ) + + private fun createMediaEngine(sink: AndroidMediaSink): CarPlayMediaEngine = + CarPlayMediaEngine( + sink = sink, + microphoneEnabled = microphoneAvailable, + audioCaptureDirectory = audioCaptureDirectory(), + ) + + private fun createSessionListener(controllerGeneration: Int): AirPlaySessionListener = + object : AirPlaySessionListener { + override fun onSessionActive(session: AirPlaySession) { + runOnUiThread { + if (controllerGeneration != restartGeneration) { + return@runOnUiThread + } + activeAirPlaySession = session + CarPlayBackgroundSession.active = true + reconnectAttempts = 0 + syncAirPlayDarkMode() + if (menuOpen) return@runOnUiThread + appendLog("AirPlay session active") + } + } + + override fun onSessionEnded(session: AirPlaySession) { + runOnUiThread { + if (activeAirPlaySession === session) activeAirPlaySession = null + CarPlayBackgroundSession.active = false + if (menuOpen || controllerGeneration != restartGeneration) { + return@runOnUiThread + } + activeScreenStreamTypes.clear() + setConnectionStage("CarPlay session ended; reconnecting") + appendLog("AirPlay session ended; reconnecting from scratch") + reconnectAfterLoss("AirPlay session ended") + } + } + + override fun onTransportError(message: String) { + runOnUiThread { + if (menuOpen || controllerGeneration != restartGeneration) { + return@runOnUiThread + } + activeScreenStreamTypes.clear() + setConnectionStage("Transport error; reconnecting") + appendLog("CarPlay transport error: $message; reconnecting from scratch") + reconnectAfterLoss("CarPlay transport error: $message") + } + } + + override fun onDebugLog(message: String) { + if (DiagnosticRedactor.redact(message) == null) return + runOnUiThread { + if (controllerGeneration != restartGeneration) { + return@runOnUiThread + } + DisplayDiagnosticSnapshot.record(this@CarPlayHostActivity, displayDiagnosticAttempt, message) + if (menuOpen) return@runOnUiThread + if (message.startsWith(PROTOCOL_TRACE_PREFIX)) { + appendFileLog(message) + } else { + appendLog(message) + } + } + } + } + + private fun createStatusReporter( + controllerGeneration: Int, + ): (CarPlayStatus) -> Unit = { status -> + if (!menuOpen && controllerGeneration == restartGeneration) { + updateHotspotStatus(status) + val description = status.describe() + setConnectionStage(description) + when (status) { + is CarPlayStatus.Failed -> if (status.wifiResetRequired) { + wifiRecoveryButton?.visibility = View.VISIBLE + } else { + wifiRecoveryButton?.visibility = View.GONE + reconnectAfterLoss(description) + } + else -> Unit + } + } + } + + private fun adoptBackgroundSession(): Boolean { + val snapshot = CarPlayBackgroundSession.snapshot() ?: return false + if (snapshot.controller.isClosed()) { + CarPlayBackgroundSession.clear(snapshot.controller) + return false + } + displayDiagnosticAttempt = DisplayDiagnosticSnapshot.currentAttempt(this) + controller = snapshot.controller + sink = snapshot.sink + CarPlayBackgroundSession.store(snapshot.controller, snapshot.sink, snapshot.width, snapshot.height, this) { completion -> + runOnUiThread { + shutdown(false, "DiPlay disconnect", completion) + finish() + } + } + if (snapshot.width > 0 && snapshot.height > 0) { + activeDisplaySize = DisplaySize(snapshot.width, snapshot.height) + } + val generation = restartGeneration + snapshot.controller.attachUi( + createSessionListener(generation), + createStatusReporter(generation), + ) + snapshot.sink.setScreenStreamActiveChangedListener { type, active -> + onScreenStreamStateChanged(restartGeneration, type, active) + } + currentSurface?.let(::attachSurface) + val serviceReused = snapshot.controller.hasActiveAirPlayAttachment() + appendLog( + if (serviceReused) { + "Reusing existing background CarPlay service" + } else { + "Reusing existing background CarPlay session" + }, + ) + setConnectionStage( + if (serviceReused) { + "CarPlay service already running" + } else { + "CarPlay session already running" + }, + ) + updateDebugOverlays() + return true + } + + private fun startCarPlay(size: DisplaySize) { + if (CarPlayBackgroundSession.hasSession() && !CarPlayBackgroundSession.isOwner(this)) return + if (shuttingDown.get() || menuOpen || handshakeResetInProgress || controller != null) return + val controllerGeneration = restartGeneration + val config = createRuntimeConfig() + val airPlayConfig = createAirPlayConfig(size) + val locationProvider: Iap2LocationProvider? = + if (config.locationReportingEnabled) { + AndroidCarPlayLocationProvider(this) + } else { + null + } + appendLog( + "Starting CarPlay controller at ${size.width}x${size.height} -> " + + "${airPlayConfig.main.widthPixels}x${airPlayConfig.main.heightPixels} " + + "(${CarPlayDisplayScale.label(displayScaleTenths)}) " + + "physical=${airPlayConfig.main.widthPhysicalMm}x" + + "${airPlayConfig.main.heightPhysicalMm}mm " + + "video=${if (airPlayConfig.hevc) "HEVC" else "H.264"} " + + "decoder=${if (airPlayConfig.hevc && hevcSoftwareDecoderEnabled) "software" else "hardware"} " + + "microphone=${airPlayConfig.microphone} " + + "location=${if (config.locationReportingEnabled) "enabled" else "disabled"} " + + "mfi=${mfiTargetLabel(config.mfiTarget)}", + ) + Log.i( + TAG, + "starting controller display=${size.width}x${size.height} " + + "negotiated=${airPlayConfig.main.widthPixels}x${airPlayConfig.main.heightPixels} " + + "scale=${CarPlayDisplayScale.label(displayScaleTenths)} " + + "hevc=${airPlayConfig.hevc} " + + "softwareHevc=${airPlayConfig.hevc && hevcSoftwareDecoderEnabled} " + + "microphone=${airPlayConfig.microphone} " + + "location=${config.locationReportingEnabled} " + + "mfi=${config.mfiTarget}", + ) + val renderer = createMediaSink( + videoWidth = airPlayConfig.main.widthPixels, + videoHeight = airPlayConfig.main.heightPixels, + controllerGeneration = controllerGeneration, + ) + sink = renderer + currentSurface?.let(::attachSurface) + val media = createMediaEngine(renderer) + val pairings = AirPlayPersistence.loadPairings(this) { id, key -> + AirPlayPersistence.savePairing(this, id, key) + } + val next = CarPlayController( + context = this, + config = config, + airPlayConfig = airPlayConfig, + identity = airPlayIdentity, + pairings = pairings, + listener = createSessionListener(controllerGeneration), + media = media, + reportStatus = createStatusReporter(controllerGeneration), + loadPairRecord = { AirPlayPersistence.loadLockdownRecord(this) }, + savePairRecord = { record -> AirPlayPersistence.saveLockdownRecord(this, record) }, + clearPairRecord = { AirPlayPersistence.clearLockdownRecord(this) }, + locationProvider = locationProvider, + ) + controller = next + CarPlayBackgroundSession.store(next, renderer, size.width, size.height, this) { completion -> + runOnUiThread { + shutdown(terminateProcess = false, reason = "DiPlay disconnect", completion = completion) + finish() + } + } + try { + startForegroundService(Intent(this, DiPlaySessionService::class.java)) + next.start() + } catch (error: RuntimeException) { + appendLog("Connection could not start: ${error.javaClass.simpleName}") + shutdown(false, "foreground service could not start") + setConnectionStage("Could not start CarPlay. Return to DiPlay and check app permissions.") + } + } + + private fun syncAirPlayDarkMode() { + val session = activeAirPlaySession ?: return + val night = darkMode + airPlayCommandExecutor.execute { + try { + val sent = session.setNightMode(night) + Log.i( + TAG, + "AirPlay dark mode=${if (night) "dark" else "light"} eventChannelReady=$sent", + ) + } catch (error: Throwable) { + Log.w(TAG, "Could not send AirPlay dark mode update", error) + } + } + } + + private fun audioCaptureDirectory(): File? { + if (!File(filesDir, AUDIO_CAPTURE_MARKER).isFile) return null + return File(filesDir, AUDIO_CAPTURE_DIRECTORY) + } + + private fun scheduleDisplaySize(width: Int, height: Int) { + if (width <= 0 || height <= 0 || shuttingDown.get()) return + val size = DisplaySize(width, height) + if (size == activeDisplaySize || size == pendingDisplaySize) return + pendingDisplaySize = size + mainHandler.removeCallbacks(applyDisplaySize) + mainHandler.postDelayed(applyDisplaySize, DISPLAY_CHANGE_DEBOUNCE_MILLIS) + } + + private fun applyDisplaySize(size: DisplaySize) { + if (shuttingDown.get() || size == activeDisplaySize) return + val previous = activeDisplaySize + activeDisplaySize = size + recordDetectedMaximum(size) + updateResolutionMenu() + if (previous == null) { + appendLog("Display detected: ${size.width}x${size.height}") + maybeStartCarPlay() + } else if (menuOpen || handshakeResetInProgress) { + appendLog( + "Display updated while handshake is reset: " + + "${previous.width}x${previous.height} -> ${size.width}x${size.height}", + ) + } else { + restartCarPlay( + "Display changed ${previous.width}x${previous.height} -> ${size.width}x${size.height}", + ) + } + } + + private fun recordDetectedMaximum(size: DisplaySize) { + val width = maxOf(maximumDetectedWidthPixels, size.width) + val height = maxOf(maximumDetectedHeightPixels, size.height) + if (width == maximumDetectedWidthPixels && height == maximumDetectedHeightPixels) return + maximumDetectedWidthPixels = width + maximumDetectedHeightPixels = height + AirPlayPersistence.saveMaximumDetectedDisplay(this, width, height) + } + + private fun maybeStartCarPlay() { + if (shuttingDown.get()) return + if (CarPlayBackgroundSession.hasSession() && !CarPlayBackgroundSession.isOwner(this)) { + if (!adoptBackgroundSession()) mainHandler.postDelayed({ maybeStartCarPlay() }, 500) + return + } + if (controller == null && adoptBackgroundSession()) return + val size = activeDisplaySize ?: return + val transportReady = if (wirelessEnabled) wirelessPermissionsReady else vpnReady + val locationReady = !locationReportingEnabled || locationPermissionAvailable + if ( + !transportReady || + !locationReady || + !microphonePermissionResolved || + shuttingDown.get() || + menuOpen || + handshakeResetInProgress || + controller != null + ) { + return + } + startCarPlay(size) + } + + private fun reconnectAfterLoss(reason: String) { + if (!CarPlayBackgroundSession.isOwner(this)) return + if (shuttingDown.get() || menuOpen || handshakeResetInProgress) return + if (reconnectScheduled) return + reconnectScheduled = true + val generation = restartGeneration + val delayMillis = if (reason.contains("AirPlay iAP tunnel", ignoreCase = true)) { + IAP_TUNNEL_RECONNECT_DELAY_MILLIS + } else { + (RECONNECT_DELAY_MILLIS * (1L shl reconnectAttempts.coerceAtMost(4))).coerceAtMost(30_000L) + } + reconnectAttempts += 1 + appendLog("$reason; retrying in ${delayMillis}ms") + mainHandler.postDelayed( + { + reconnectScheduled = false + if ( + shuttingDown.get() || + menuOpen || + handshakeResetInProgress || + generation != restartGeneration + ) { + return@postDelayed + } + restartCarPlay("Reconnecting after $reason") + }, + delayMillis, + ) + } + + /** Full-stack fallback when an AirPlay-only reconnect is unavailable. */ + private fun restartCarPlay(reason: String) { + if (!CarPlayBackgroundSession.isOwner(this)) return + if (shuttingDown.get() || menuOpen || handshakeResetInProgress) return + val size = activeDisplaySize ?: return + appendLog(reason) + activeScreenStreamTypes.clear() + setConnectionStage(reason) + Log.i(TAG, "$reason; rebuilding stack at ${size.width}x${size.height}") + val generation = ++restartGeneration + handshakeResetInProgress = true + val oldController = controller + val oldSink = sink + CarPlayBackgroundSession.clear(oldController, keepOwner = true) + controller = null + sink = null + teardownExecutor.execute { + oldController?.close() + oldController?.awaitClosed(CONTROLLER_CLOSE_TIMEOUT_MILLIS) + oldSink?.close() + runOnUiThread { + if (!shuttingDown.get() && generation == restartGeneration) { + handshakeResetInProgress = false + startCarPlay(size) + } + } + } + } + + private fun showDiPlayHome(page: String = "home") { + controller?.sendTouch(emptyList()) + startActivity(Intent(this, DiPlayActivity::class.java) + .putExtra("page", page).addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT)) + } + + private fun openSettingsMenu() = showDiPlayHome("settings") + + private fun saveSettingsAndReconnect() { + if (!menuOpen) return + if (!validateMfiSettings()) return + if (!validateManualHotspotSettings()) return + persistMenuSettings() + settingsBaseline = null + finishSettingsMenu("Settings saved") + } + + private fun cancelSettingsEdits() { + if (!menuOpen) return + restoreSettingsBaseline() + finishSettingsMenu("Settings changes discarded") + } + + private fun finishSettingsMenu(prefix: String) { + if (!menuOpen) return + menuOpen = false + settingsMenu?.visibility = View.GONE + gestureOverlay?.visibility = View.VISIBLE + updateDebugOverlays() + logLines.clear() + appendLog( + "$prefix; starting a fresh handshake at " + + "${CarPlayDisplayScale.label(displayScaleTenths)} with " + + (if (hevcEnabled) "HEVC (H.265)" else "H.264") + + ", MFI ${mfiTargetLabel(mfiTarget)}" + + ", Wi-Fi session ${hotspotModeLabel(wirelessHotspotMode)}", + ) + if (handshakeResetInProgress) { + startAfterHandshakeReset = true + } else { + maybeStartCarPlay() + } + } + + private fun exitApplication() { + if (shuttingDown.get()) return + restoreSettingsBaseline() + finishAndRemoveTask() + shutdown(terminateProcess = true, reason = "settings exit application") + } + + private fun shutdown(terminateProcess: Boolean, reason: String, completion: () -> Unit = {}) { + if (!shuttingDown.compareAndSet(false, true)) { completion(); return } + restartGeneration += 1 + mainHandler.removeCallbacks(applyDisplaySize) + val oldController = controller + val oldSink = sink + CarPlayBackgroundSession.clear(oldController) + controller = null + sink = null + Log.i(TAG, "shutdown reason=$reason terminateProcess=$terminateProcess") + teardownExecutor.execute { + oldController?.close() + val clean = oldController?.awaitClosed(CONTROLLER_CLOSE_TIMEOUT_MILLIS) ?: true + oldSink?.close() + airPlayCommandExecutor.shutdown() + if (terminateProcess) { + applicationContext.stopService(Intent(applicationContext, CarPlayVpnService::class.java)) + } + Log.i(TAG, "shutdown complete clean=$clean") + applicationContext.stopService(Intent(applicationContext, DiPlaySessionService::class.java)) + teardownExecutor.shutdown() + mainHandler.post { completion() } + if (terminateProcess) Process.killProcess(Process.myPid()) + } + } + + private fun attachSurface(surface: Surface) { + sink?.setSurface(SCREEN_TYPE_MAIN, surface) + sink?.setSurface(SCREEN_TYPE_ALT, surface) + } + + private fun onHostTouch(view: View, event: MotionEvent): Boolean { + if (menuOpen) return true + + when (event.actionMasked) { + MotionEvent.ACTION_DOWN -> { + gestureSequenceActive = false + gestureTracking = false + } + MotionEvent.ACTION_POINTER_DOWN -> { + if (event.pointerCount == THREE_FINGER_COUNT && !gestureSequenceActive) { + gestureSequenceActive = true + gestureTracking = true + gestureStartX = pointerCentroid(event, horizontal = true) + gestureStartY = pointerCentroid(event, horizontal = false) + controller?.sendTouch(emptyList()) + appendLog("Three-finger swipe tracking started") + return true + } + } + } + + if (gestureSequenceActive) { + if (!gestureTracking || event.pointerCount != THREE_FINGER_COUNT) { + if (event.actionMasked == MotionEvent.ACTION_UP || + event.actionMasked == MotionEvent.ACTION_CANCEL + ) { + gestureSequenceActive = false + gestureTracking = false + } else if (event.actionMasked == MotionEvent.ACTION_POINTER_UP) { + gestureTracking = false + } + return true + } + if (event.actionMasked == MotionEvent.ACTION_MOVE) { + val deltaX = Math.abs(pointerCentroid(event, horizontal = true) - gestureStartX) + val deltaY = pointerCentroid(event, horizontal = false) - gestureStartY + if ( + deltaY >= dp(THREE_FINGER_SWIPE_DISTANCE_DP) && + deltaY >= deltaX * THREE_FINGER_SWIPE_DIRECTION_RATIO + ) { + gestureSequenceActive = false + gestureTracking = false + openSettingsMenu() + return true + } + } + return true + } + + val contacts = CarPlayTouchMapper.contacts(event, view.width, view.height) + val queued = controller?.sendTouch(contacts) ?: false + when (event.actionMasked) { + MotionEvent.ACTION_DOWN, + MotionEvent.ACTION_POINTER_DOWN, + MotionEvent.ACTION_UP, + MotionEvent.ACTION_POINTER_UP, + MotionEvent.ACTION_CANCEL -> Log.i( + TAG, + "touch action=${MotionEvent.actionToString(event.actionMasked)} " + + "pointers=${event.pointerCount} queued=$queued", + ) + } + return true + } + + private fun pointerCentroid(event: MotionEvent, horizontal: Boolean): Float { + var total = 0f + for (index in 0 until event.pointerCount) { + total += if (horizontal) event.getX(index) else event.getY(index) + } + return total / event.pointerCount + } + + private fun onScreenStreamStateChanged(generation: Int, type: Int, active: Boolean) { + runOnUiThread { + if (shuttingDown.get() || generation != restartGeneration) return@runOnUiThread + if (active) { + activeScreenStreamTypes.add(type) + } else { + activeScreenStreamTypes.remove(type) + } + updateDebugOverlays() + } + } + + private fun setStatus(message: String) { + runOnUiThread { + setConnectionStage(message) + appendLog(message) + } + } + + private fun setConnectionStage(message: String) { + latestStage = message + stageStatusView?.text = friendlyStage(message) + updateDebugOverlays() + } + + private fun updateDebugOverlays() { + statusScrollView?.visibility = View.GONE + connectionPanel?.visibility = if (activeScreenStreamTypes.isEmpty()) View.VISIBLE else View.GONE + } + + private fun friendlyStage(message: String): String = when { + message.contains("Turn on Wi-Fi", true) -> "Turn on Wi-Fi in the head unit’s settings to connect." + message.contains("Allow precise Location", true) -> "Allow precise Location for DiPlay in the head unit’s app permissions." + message.contains("Allow Nearby devices", true) -> "Allow Nearby devices for DiPlay in the head unit’s app permissions." + message.contains("createGroup failed", true) -> "The head unit couldn’t start CarPlay Wi-Fi. Check Wi-Fi and close other projection apps. Retrying…" + message.contains("needs a reset", true) -> "A previous Wi-Fi Direct connection is still running. Reset it to connect." + message.contains("socket", true) || message.contains("RFCOMM", true) -> "Your iPhone isn’t available. Unlock it and check Bluetooth." + message.contains("unsupported", true) || message.contains("not supported", true) -> "This head unit may not support wireless CarPlay. Try a USB connection." + message.contains("denied", true) || message.contains("permission", true) -> "Allow the connection permission to continue" + message.contains("Failed", true) || message.contains("error", true) -> "Connection interrupted. Retrying…" + message.contains("Waiting for iPhone", true) || message.contains("Discovering iPhone", true) -> "Connect your iPhone with a USB cable" + message.contains("paired", true) -> "Looking for your paired iPhone…" + message.contains("Bluetooth", true) -> "Connecting to your iPhone…" + message.contains("reconnect", true) || message.contains("ended", true) -> "Reconnecting to your iPhone…" + message.contains("active", true) || message.contains("running", true) -> "Opening CarPlay…" + else -> "Getting CarPlay ready…" + } + + private fun appendLog(message: String) { + val safe = DiagnosticRedactor.redact(message) ?: return + sessionLog?.append(formattedLogLine(safe, System.currentTimeMillis())) + } + + private fun appendFileLog(message: String) { + sessionLog?.append(formattedLogLine(message, System.currentTimeMillis())) + } + + private fun formattedLogLine(message: String, nowMillis: Long): String = + "${SimpleDateFormat("HH:mm:ss.SSS", Locale.US).format(Date(nowMillis))} $message" + + private fun initializeSessionLog() { + val logFile = File(File(filesDir, "logs"), "diplay.log") + val activeLog = SessionLogFile(logFile) + runCatching { + activeLog.reset( + "DiPlay log started " + + "${SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS", Locale.US).format(Date())} " + + "pid=${Process.myPid()} path=${logFile.absolutePath}", + ) + } + sessionLog = activeLog + } + + private fun refreshLogView(nowMillis: Long) { + val cutoff = nowMillis - LOG_RETENTION_MILLIS + while (logLines.firstOrNull()?.timestampMillis?.let { it <= cutoff } == true) { + logLines.removeFirst() + } + statusView?.text = logLines.joinToString("\n") { it.text } + scrollLogsToBottom() + + mainHandler.removeCallbacks(expireOldLogLines) + logLines.firstOrNull()?.let { oldest -> + val delay = (oldest.timestampMillis + LOG_RETENTION_MILLIS - nowMillis + 1L) + .coerceAtLeast(1L) + mainHandler.postDelayed(expireOldLogLines, delay) + } + } + + private fun scrollLogsToBottom() { + statusScrollView?.post { + statusScrollView?.fullScroll(View.FOCUS_DOWN) + } + } + + private fun applyFullscreenMode() { + val hideTop = hideTopBar + val hideBottom = hideBottomBar + WindowCompat.setDecorFitsSystemWindows(window, !(hideTop && hideBottom)) + val controller = WindowInsetsControllerCompat(window, window.decorView) + if (hideTop) { + controller.hide(WindowInsetsCompat.Type.statusBars()) + } else { + controller.show(WindowInsetsCompat.Type.statusBars()) + } + if (hideBottom) { + controller.hide(WindowInsetsCompat.Type.navigationBars()) + } else { + controller.show(WindowInsetsCompat.Type.navigationBars()) + } + controller.systemBarsBehavior = + WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE + } + + private fun dp(value: Int): Int = (value * resources.displayMetrics.density).toInt() + + private fun CarPlayStatus.describe(): String = when (this) { + CarPlayStatus.DiscoveringMfi -> "Preparing MFi authentication" + CarPlayStatus.WaitingForMfi -> "Waiting for MFi coprocessor" + CarPlayStatus.RequestingMfiPermission -> "Requesting MFi USB permission" + CarPlayStatus.MfiReady -> "MFi authentication ready" + CarPlayStatus.StartingHotspot -> "Starting wireless hotspot" + is CarPlayStatus.HotspotReady -> + "Hotspot ready: $backend, $ssid, $band, " + + "channel ${if (channel == 0) "auto" else channel}" + CarPlayStatus.WaitingForPairedIphone -> "Waiting for paired iPhone" + CarPlayStatus.ConnectingBluetooth -> "Connecting Bluetooth" + CarPlayStatus.RunningWireless -> "Wireless CarPlay control running" + CarPlayStatus.WirelessActive -> "Wireless CarPlay active" + CarPlayStatus.DiscoveringIphone -> "Discovering iPhone" + CarPlayStatus.WaitingForIphone -> "Waiting for iPhone over USB" + CarPlayStatus.RequestingIphonePermission -> "Requesting iPhone USB permission" + CarPlayStatus.WaitingForReenumeration -> "Waiting for iPhone re-enumeration" + CarPlayStatus.SelectingConfiguration -> "Selecting CarPlay configuration" + CarPlayStatus.OpeningDataPaths -> "Opening USB data paths" + CarPlayStatus.Pairing -> "Pairing with iPhone" + CarPlayStatus.ConnectingControl -> "Connecting iAP2 control" + CarPlayStatus.AttachingNetwork -> + if (wirelessEnabled) "Starting AirPlay service" else "Attaching NCM/AirPlay network" + CarPlayStatus.RunningControl -> "CarPlay control running" + CarPlayStatus.ControlEnded -> "CarPlay control window ended" + is CarPlayStatus.Failed -> "Failed: ${message}" + } + + private companion object { + const val TAG = "xcertplay-usb" + const val SCREEN_TYPE_MAIN = 110 + const val SCREEN_TYPE_ALT = 111 + const val LOG_RETENTION_MILLIS = 5 * 60_000L + const val DISPLAY_CHANGE_DEBOUNCE_MILLIS = 500L + const val RECONNECT_DELAY_MILLIS = 2_000L + const val IAP_TUNNEL_RECONNECT_DELAY_MILLIS = 15_000L + const val CONTROLLER_CLOSE_TIMEOUT_MILLIS = 4_000L + const val AUDIO_CAPTURE_MARKER = "audio-capture.enabled" + const val AUDIO_CAPTURE_DIRECTORY = "audio-captures" + const val PROTOCOL_TRACE_PREFIX = "TRACE " + const val THREE_FINGER_COUNT = 3 + const val THREE_FINGER_SWIPE_DISTANCE_DP = 72 + const val THREE_FINGER_SWIPE_DIRECTION_RATIO = 1.15f + const val MAX_SETTINGS_MENU_WIDTH_PX = 1200 + val MENU_BACKGROUND = Color.rgb(12, 16, 19) + val MENU_SECONDARY = Color.rgb(170, 180, 190) + val MENU_ACCENT = Color.rgb(127, 205, 154) + val MENU_ACCENT_TRACK = Color.rgb(78, 143, 102) + val MENU_TRACK_OFF = Color.rgb(64, 74, 80) + val MENU_BUTTON_TEXT = Color.rgb(8, 17, 11) + val MENU_DANGER = Color.rgb(190, 45, 45) + val NO_VIDEO_BACKGROUND = Color.rgb(0x16, 0x16, 0x18) + } + + private data class DisplaySize(val width: Int, val height: Int) + private data class LogEntry(val timestampMillis: Long, val text: String) + private data class HotspotStatus( + val state: String, + val ssid: String? = null, + val band: String? = null, + val channel: Int? = null, + val backend: String? = null, + ) +} + +/** Process-local hand-off for keeping the CarPlay session alive while no Activity is visible. */ +internal object CarPlayBackgroundSession { + @Volatile var active = false + private var stopAction: (((() -> Unit)) -> Unit)? = null + private var stopping = false + private var owner: Any? = null + @Synchronized fun isOwner(candidate: Any): Boolean = owner === candidate + @Synchronized fun hasSession(): Boolean = stopAction != null || stopping + private val stopWaiters = mutableListOf<() -> Unit>() + + fun stop(completion: () -> Unit = {}) { + val action: (((() -> Unit)) -> Unit)? + synchronized(this) { + if (stopping) { stopWaiters.add(completion); return } + action = stopAction + if (action != null) { stopping = true; stopWaiters.add(completion) } + } + if (action == null) { completion(); return } + action.invoke { + val callbacks = synchronized(this) { + stopping = false + stopWaiters.toList().also { stopWaiters.clear() } + } + callbacks.forEach { it() } + } + } + + data class Snapshot( + val controller: CarPlayController, + val sink: AndroidMediaSink, + val width: Int, + val height: Int, + ) + + private var controller: CarPlayController? = null + private var sink: AndroidMediaSink? = null + private var width = 0 + private var height = 0 + + @Synchronized + fun snapshot(): Snapshot? { + val currentController = controller ?: return null + val currentSink = sink ?: return null + return Snapshot(currentController, currentSink, width, height) + } + + @Synchronized + fun store(controller: CarPlayController, sink: AndroidMediaSink, width: Int, height: Int, owner: Any, stop: (() -> Unit) -> Unit) { + this.stopAction = stop + this.owner = owner + this.controller = controller + this.sink = sink + this.width = width + this.height = height + } + + @Synchronized + fun clear(expected: CarPlayController? = null, keepOwner: Boolean = false) { + if (expected != null && controller !== expected) return + controller = null + sink = null + if (!keepOwner) { stopAction = null; owner = null } + active = false + width = 0 + height = 0 + } +} diff --git a/common/src/main/java/com/shilapi/xcertplay/DarkMode.kt b/common/src/main/java/com/shilapi/xcertplay/DarkMode.kt new file mode 100644 index 0000000..14aad54 --- /dev/null +++ b/common/src/main/java/com/shilapi/xcertplay/DarkMode.kt @@ -0,0 +1,6 @@ +package com.shilapi.xcertplay + +import android.content.res.Configuration + +internal fun isDarkMode(uiMode: Int): Boolean = + uiMode and Configuration.UI_MODE_NIGHT_MASK == Configuration.UI_MODE_NIGHT_YES diff --git a/common/src/main/java/com/shilapi/xcertplay/DiPlayActivity.kt b/common/src/main/java/com/shilapi/xcertplay/DiPlayActivity.kt new file mode 100644 index 0000000..2137b31 --- /dev/null +++ b/common/src/main/java/com/shilapi/xcertplay/DiPlayActivity.kt @@ -0,0 +1,521 @@ +// SPDX-License-Identifier: AGPL-3.0-only +// UI copy and visual language adapted from DiAuto. See docs/THIRD_PARTY_NOTICES.md. +package com.shilapi.xcertplay + +import android.Manifest +import android.app.AlertDialog +import android.bluetooth.BluetoothManager +import android.content.Intent +import android.content.pm.PackageManager +import android.content.res.ColorStateList +import android.content.res.Configuration +import android.graphics.Color +import android.graphics.Typeface +import android.graphics.drawable.GradientDrawable +import android.net.Uri +import android.os.Build +import android.os.Bundle +import android.os.Handler +import android.os.Looper +import android.provider.Settings +import android.view.Gravity +import android.view.View +import android.view.ViewGroup +import android.widget.* +import androidx.activity.ComponentActivity +import androidx.activity.OnBackPressedCallback +import androidx.activity.result.contract.ActivityResultContracts +import androidx.core.view.WindowCompat +import androidx.core.view.WindowInsetsCompat +import androidx.core.view.WindowInsetsControllerCompat +import com.shilapi.xcertplay.host.R +import java.io.File +import java.text.SimpleDateFormat +import java.util.Date +import java.util.Locale + +/** DiAuto's visual language, with a connection flow for an independent CarPlay receiver. */ +class DiPlayActivity : ComponentActivity() { + private val handler = Handler(Looper.getMainLooper()) + private var page = "home" + private var setupError: String? = null + private var status: TextView? = null + private var connectButton: Button? = null + private var disconnectButton: Button? = null + private var lastRunning: Boolean? = null + private var pendingWireless = false + private var initialLaunch = true + private var notificationTransport = true + private var exportInProgress = false + private var exportButton: Button? = null + private val notificationPermission = registerForActivityResult(ActivityResultContracts.RequestPermission()) { + connect(notificationTransport) + } + private val tick = object : Runnable { + override fun run() { refreshStatus(); handler.postDelayed(this, 1000) } + } + private val bluetoothPermission = registerForActivityResult(ActivityResultContracts.RequestPermission()) { granted -> + if (granted) choosePhone() else permissionHelp("Nearby devices", "Allow Nearby devices so DiPlay can connect to your paired iPhone.") + } + private val export = registerForActivityResult(ActivityResultContracts.CreateDocument("text/plain")) { uri -> + if (uri != null) exportDiagnostics(uri) + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + WindowCompat.setDecorFitsSystemWindows(window, true) + window.statusBarColor = BG; window.navigationBarColor = BG + WindowInsetsControllerCompat(window, window.decorView).apply { + isAppearanceLightStatusBars = false + hide(WindowInsetsCompat.Type.statusBars()) + } + setupError = runCatching { DiPlayBootstrap.ensure(this) }.exceptionOrNull()?.let { + "Local setup could not finish. Reinstall the complete DiPlay beta APK and try again." + } + page = savedInstanceState?.getString("page") ?: intent.getStringExtra("page") ?: "home" + render() + handleWirelessRecovery() + onBackPressedDispatcher.addCallback(this, object : OnBackPressedCallback(true) { + override fun handleOnBackPressed() { + if (page != "home") { page = "home"; render() } + else { isEnabled = false; onBackPressedDispatcher.onBackPressed(); isEnabled = true } + } + }) + } + + override fun onNewIntent(intent: Intent) { + super.onNewIntent(intent); setIntent(intent) + page = intent.getStringExtra("page") ?: "home"; render() + handleWirelessRecovery() + } + override fun onSaveInstanceState(outState: Bundle) { outState.putString("page", page); super.onSaveInstanceState(outState) } + override fun onConfigurationChanged(newConfig: Configuration) { super.onConfigurationChanged(newConfig); render() } + override fun onResume() { + super.onResume(); handler.removeCallbacks(tick); handler.post(tick) + if (initialLaunch) { + initialLaunch = false + if (setupError == null && !CarPlayBackgroundSession.hasSession() && + DiPlayPreferences.autoConnect(this) && intent.getStringExtra("page") == null) { + handler.post { connect(AirPlayPersistence.loadWirelessEnabled(this)) } + } + } + } + override fun onPause() { handler.removeCallbacks(tick); super.onPause() } + + private fun render() { + status = null; connectButton = null; disconnectButton = null; lastRunning = null + val scroll = ScrollView(this).apply { setBackgroundColor(BG); isFillViewport = true; clipToPadding = false } + val content = column().apply { setPadding(dp(32), dp(24), dp(32), dp(32)) } + scroll.addView(content) + val header = row().apply { gravity = Gravity.CENTER_VERTICAL } + header.addView(ImageView(this).apply { setImageResource(R.drawable.ic_carplay); contentDescription = "CarPlay" }, LinearLayout.LayoutParams(dp(36), dp(36))) + header.addView(label("DiPlay", 26, TEXT, true).apply { setPadding(dp(12), 0, 0, 0) }, LinearLayout.LayoutParams(0, dp(56), 1f)) + header.addView(button(if (page == "home") "Car home" else "Back", false) { + if (page == "home") startActivity(Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_HOME)) + else { page = "home"; render() } + }, LinearLayout.LayoutParams(dp(130), dp(56))) + content.addView(header) + content.addView(space(24)) + when (page) { + "settings" -> settings(content) + "about" -> about(content) + else -> home(content) + } + setContentView(scroll) + refreshStatus() + } + + private fun home(content: LinearLayout) { + val wide = resources.configuration.screenWidthDp >= 850 + val body = column() + val left = column() + left.addView(label("YOUR PHONE. YOUR DRIVE.", 12, ACCENT, true).apply { letterSpacing = .16f }) + left.addView(label("A familiar drive.", if (wide) 42 else 36, TEXT, true).apply { setPadding(0, dp(12), 0, dp(10)) }) + left.addView(label("Your maps, music and conversations.\nCarPlay, right here on your car display.", 19, MUTED)) + val card = card() + card.addView(label("WIRELESS CARPLAY", 12, ACCENT, true).apply { letterSpacing = .12f }) + status = label("Ready when you are", 24, TEXT, true).apply { setPadding(0, dp(10), 0, dp(16)) } + card.addView(status) + connectButton = button("Connect phone", true) { + if (CarPlayBackgroundSession.hasSession()) openProjection() + else connect(true) + } + card.addView(connectButton, matchButton()) + card.addView(label("Pair your iPhone with the car’s Bluetooth, then connect.\nKeep Bluetooth and Wi-Fi on.", 15, MUTED).apply { setPadding(0, dp(14), 0, 0) }) + card.addView(button("Choose iPhone", false) { choosePhone() }, matchButton(16, 56)) + disconnectButton = button("Disconnect", false) { + disconnectButton?.isEnabled = false + CarPlayBackgroundSession.stop { runOnUiThread { refreshStatus() } } + }.apply { visibility = View.GONE } + card.addView(disconnectButton, matchButton(10, 56)) + val right = column().apply { gravity = Gravity.CENTER_HORIZONTAL } + val logo = ImageView(this).apply { + setImageResource(R.drawable.ic_carplay) + contentDescription = "CarPlay icon" + scaleType = ImageView.ScaleType.FIT_CENTER + } + val branding = column().apply { + gravity = Gravity.CENTER + addView(logo, LinearLayout.LayoutParams(dp(96), dp(96))) + } + right.addView(button("Connect with USB", false) { connect(false) }, matchButton()) + right.addView(label("Plug your iPhone into a USB data port.\nAllow CarPlay when your iPhone asks.", 14, MUTED).apply { gravity = Gravity.CENTER; setPadding(dp(8), dp(10), dp(8), dp(24)) }) + right.addView(button("Settings", false) { page = "settings"; render() }, matchButton()) + right.addView(label("Make DiPlay feel right for your car.", 14, MUTED).apply { gravity = Gravity.CENTER; setPadding(0, dp(10), 0, dp(24)) }) + right.addView(label("PUBLIC PREVIEW · ${version()}", 12, MUTED).apply { letterSpacing = .08f }) + if (wide) { + // Both rows share column widths. The USB button starts at the wireless + // card's top edge, independently of hero wrapping or font scaling. + fun columns(first: View, second: View, stretchSecond: Boolean = false) = row().apply { + gravity = Gravity.TOP + addView(first, LinearLayout.LayoutParams(0, -2, 1.6f)) + addView(space(40), LinearLayout.LayoutParams(dp(40), 1)) + addView(second, LinearLayout.LayoutParams(0, if (stretchSecond) -1 else -2, 1f)) + } + body.addView(columns(left, branding, true)) + body.addView(space(26)) + body.addView(columns(card, right)) + } else { + body.addView(left) + body.addView(space(26)) + body.addView(card) + body.addView(space(26)) + body.addView(branding) + body.addView(space(24)) + body.addView(right) + } + setupError?.let { body.addView(label(it, 16, WARNING).apply { setPadding(0, dp(16), 0, 0) }) } + content.addView(body) + } + + private fun settings(content: LinearLayout) { + content.addView(label("Your drive, your way.", 34, TEXT, true)) + content.addView(label("Apply reconnects CarPlay for icon size, resolution and frame rate. Other changes apply to your next connection.", 17, MUTED).apply { setPadding(0, dp(8), 0, dp(24)) }) + section(content, "Automatic connection") { card -> + toggle(card, "Connect when DiPlay opens", "Use your last connection type and selected iPhone.", DiPlayPreferences.autoConnect(this)) { DiPlayPreferences.saveAutoConnect(this, it) } + toggle(card, "Open after the car starts", "Availability depends on your head unit’s startup settings.", AirPlayPersistence.loadAutoStartOnBoot(this)) { AirPlayPersistence.saveAutoStartOnBoot(this, it) } + card.addView(button("Choose iPhone · ${DiPlayPreferences.phoneName(this)}", false) { choosePhone() }, matchButton(12, 60)) + } + section(content, "Display and performance") { card -> + iconSizeControl(card) + choice(card, "Resolution", listOf("Native", "80% · lighter load", "60% · lightest load"), listOf(10, 8, 6).indexOf(AirPlayPersistence.loadDisplayScaleTenths(this)).coerceAtLeast(0)) { AirPlayPersistence.saveDisplayScaleTenths(this, listOf(10, 8, 6)[it]) } + choice(card, "Frame rate", listOf("30 fps · lighter load", "60 fps · smoother motion"), if (AirPlayPersistence.loadFps(this) == 60) 1 else 0) { AirPlayPersistence.saveFps(this, if (it == 1) 60 else 30) } + toggle(card, "Efficient video", "Use HEVC. Leave off for the widest head-unit compatibility.", AirPlayPersistence.loadHevcEnabled(this)) { AirPlayPersistence.saveHevcEnabled(this, it) } + toggle(card, "Right-hand drive", "Place CarPlay’s controls closer to the driver.", AirPlayPersistence.loadRightHandDrive(this)) { AirPlayPersistence.saveRightHandDrive(this, it) } + toggle(card, "Full screen", "Hide the car’s system bars while CarPlay is open.", AirPlayPersistence.loadHideTopBar(this) && AirPlayPersistence.loadHideBottomBar(this)) { + AirPlayPersistence.saveHideTopBar(this, it); AirPlayPersistence.saveHideBottomBar(this, it) + } + } + section(content, "Permissions and connection help") { card -> + card.addView(label("Nearby devices connects your iPhone. Microphone enables Siri and calls. Older Android versions also require Location for wireless setup. USB mode may ask for a local VPN connection.", 16, MUTED)) + card.addView(button("App permissions", false) { openSystem(Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS, Uri.parse("package:$packageName"))) }, matchButton(16, 60)) + card.addView(button("Bluetooth settings", false) { openSystem(Intent(Settings.ACTION_BLUETOOTH_SETTINGS)) }, matchButton(10, 60)) + card.addView(button("Wireless connection help", false) { wirelessHelp() }, matchButton(10, 60)) + } + section(content, "About and diagnostics") { card -> + card.addView(button("About DiPlay", false) { page = "about"; render() }, matchButton(0, 60)) + exportButton = button(if (exportInProgress) "Saving report…" else "Save diagnostic report", false) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) exportDiagnostics() + else chooseReportDestination() + }.apply { isEnabled = !exportInProgress } + card.addView(exportButton, matchButton(10, 60)) + val destination = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) "Reports save to Downloads/DiPlay. " else "Choose where to save your report. " + card.addView(label(destination + "Nothing is sent automatically. Protocol payloads and credentials are excluded.", 14, MUTED).apply { setPadding(0, dp(12), 0, 0) }) + } + } + + private fun about(content: LinearLayout) { + content.addView(label("DiPlay", 40, TEXT, true)) + content.addView(label("CarPlay, at home in your car.", 20, MUTED).apply { setPadding(0, dp(8), 0, dp(24)) }) + section(content, "Public preview · ${version()}") { card -> + card.addView(label("An independent CarPlay receiver for Android head units. Wired and wireless connections run on the head unit, with local authentication. A standard iPhone can connect without a jailbreak, Mac, dongle or sign-in.\n\nThis preview uses an experimental accessory identity. Compatibility with every iPhone and head unit is still being tested. It is not an Apple-certified product.", 17, TEXT)) + } + section(content, "Made possible by open source") { card -> + card.addView(label("Receiver based on xcertplay, licensed under GPL-3.0. DiPlay’s interface follows DiAuto’s design, licensed under AGPL-3.0.\n\nIncludes AndroidX, Bouncy Castle, JmDNS and SLF4J. Source and license notices accompany this release.\n\nCarPlay and the CarPlay icon belong to Apple Inc. DiPlay is an independent project.", 16, MUTED)) + } + } + + private fun iconSizeControl(parent: LinearLayout) { + val presets = com.shilapi.xcertplay.airplay.CarPlayUiScale.presets + fun label(percent: Int) = com.shilapi.xcertplay.airplay.CarPlayUiScale.label(percent) + val control = button("Icon and text size · ${label(AirPlayPersistence.loadUiScalePercent(this))}", false) {} + control.setOnClickListener { + val current = AirPlayPersistence.loadUiScalePercent(this) + var selection = presets.indexOf(current) + AlertDialog.Builder(this).setTitle("CarPlay icon and text size") + .setSingleChoiceItems(arrayOf("Smaller · 75%", "Small · 85%", "Default", "Large · 115%"), selection) { _, index -> selection = index } + .setPositiveButton(if (CarPlayBackgroundSession.hasSession()) "Apply and reconnect" else "Save") { _, _ -> + val selected = presets[selection] + DisplayDiagnosticSnapshot.selection(this, current, selected, + selected != current && CarPlayBackgroundSession.hasSession()) + AirPlayPersistence.saveUiScalePercent(this, selected) + control.text = "Icon and text size · ${label(selected)}" + if (selected != current && CarPlayBackgroundSession.hasSession()) { + connect(AirPlayPersistence.loadWirelessEnabled(this)) + } + }.setNegativeButton("Cancel", null).show() + } + parent.addView(control, matchButton(0, 60)) + parent.addView(label("Smaller sizes use more processing power. Choose Default if playback slows. Applying a size reconnects CarPlay.", 14, MUTED).apply { + setPadding(0, dp(8), 0, dp(18)) + }) + } + + private fun connect(wireless: Boolean) { + if (setupError != null) { toast(setupError!!); return } + if (wireless && DiPlayPreferences.phoneAddress(this) == null) { + pendingWireless = true; choosePhone(); return + } + val preferences = getSharedPreferences("diplay", MODE_PRIVATE) + if (Build.VERSION.SDK_INT >= 33 && checkSelfPermission(Manifest.permission.POST_NOTIFICATIONS) != PackageManager.PERMISSION_GRANTED && !preferences.getBoolean("notification_asked", false)) { + preferences.edit().putBoolean("notification_asked", true).apply() + notificationTransport = wireless + notificationPermission.launch(Manifest.permission.POST_NOTIFICATIONS) + return + } + val open = { + AirPlayPersistence.saveWirelessEnabled(this, wireless) + openProjection() + } + if (CarPlayBackgroundSession.hasSession()) CarPlayBackgroundSession.stop { runOnUiThread { open() } } + else open() + } + private fun openProjection() { + startActivity(Intent(this, CarPlayHostActivity::class.java).addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT)) + } + private fun choosePhone() { + if (Build.VERSION.SDK_INT >= 31 && checkSelfPermission(Manifest.permission.BLUETOOTH_CONNECT) != PackageManager.PERMISSION_GRANTED) { + bluetoothPermission.launch(Manifest.permission.BLUETOOTH_CONNECT); return + } + val adapter = getSystemService(BluetoothManager::class.java)?.adapter + if (adapter == null || !adapter.isEnabled) { + AlertDialog.Builder(this).setTitle("Turn on Bluetooth") + .setMessage("Enable the car’s Bluetooth and pair your iPhone first.") + .setPositiveButton("Open Bluetooth") { _, _ -> openSystem(Intent(Settings.ACTION_BLUETOOTH_SETTINGS)) } + .setNegativeButton("Later", null).show(); return + } + val devices = runCatching { adapter.bondedDevices.sortedBy { it.name ?: "" } }.getOrDefault(emptyList()) + if (devices.isEmpty()) { + AlertDialog.Builder(this).setTitle("Pair your iPhone") + .setMessage("On your iPhone, open Settings → Bluetooth and pair with the car. Then return to DiPlay and choose Connect phone.") + .setPositiveButton("Open Bluetooth") { _, _ -> openSystem(Intent(Settings.ACTION_BLUETOOTH_SETTINGS)) } + .setNegativeButton("Got it", null).show(); return + } + AlertDialog.Builder(this).setTitle("Choose your iPhone") + .setItems(devices.map { device -> + val name = device.name ?: "Paired device" + if (devices.count { it.name == device.name } > 1) "$name · ${device.address.takeLast(5)}" else name + }.toTypedArray()) { _, index -> + val device = devices[index] + DiPlayPreferences.savePhone(this, device.address, device.name ?: "iPhone") + val start = pendingWireless; pendingWireless = false + render() + if (start) connect(true) + }.setNeutralButton("Pair another") { _, _ -> openSystem(Intent(Settings.ACTION_BLUETOOTH_SETTINGS)) } + .setNegativeButton("Cancel") { _, _ -> pendingWireless = false }.show() + } + + private fun wirelessHelp() { + AlertDialog.Builder(this).setTitle("Wireless connection help") + .setMessage("Pair your iPhone with the car’s Bluetooth, keep Wi-Fi on, and allow CarPlay on the iPhone. Close any other phone-projection app.\n\nIf a previous projection app left its connection running, reset CarPlay Wi-Fi below and connect again. Your car’s normal internet Wi-Fi stays on.") + .setPositiveButton("Got it", null) + .setNeutralButton("Reset CarPlay Wi-Fi") { _, _ -> + confirmWirelessReset() + }.show() + } + + private fun handleWirelessRecovery() { + if (page != "wireless-recovery") return + page = "home"; render() + confirmWirelessReset() + } + + private fun confirmWirelessReset() { + AlertDialog.Builder(this).setTitle("Reset CarPlay Wi-Fi?") + .setMessage("This ends the existing Wi-Fi Direct connection, including one left behind after reinstalling. Close other projection apps first. Your car’s internet Wi-Fi stays on.") + .setPositiveButton("Reset and connect") { _, _ -> + CarPlayBackgroundSession.stop { runOnUiThread { resetWirelessGroup() } } + }.setNegativeButton("Cancel", null).show() + } + + private fun resetWirelessGroup() { + val manager = getSystemService(android.net.wifi.p2p.WifiP2pManager::class.java) + if (manager == null) { toast("This head unit does not support Wi-Fi Direct."); return } + val channel = manager.initialize(this, mainLooper, null) + try { + manager.requestGroupInfo(channel) { group -> + if (group == null) { channel.close(); connect(true); return@requestGroupInfo } + manager.removeGroup(channel, object : android.net.wifi.p2p.WifiP2pManager.ActionListener { + override fun onSuccess() { + val deadline = android.os.SystemClock.elapsedRealtime() + 4000 + fun waitUntilRemoved() { + manager.requestGroupInfo(channel) { remaining -> + when { + remaining == null -> { channel.close(); if (!isFinishing && !isDestroyed) connect(true) } + android.os.SystemClock.elapsedRealtime() >= deadline -> { + channel.close(); toast("Wi-Fi Direct is still busy. Close the other projection app and try again.") + } + else -> handler.postDelayed({ waitUntilRemoved() }, 200) + } + } + } + waitUntilRemoved() + } + override fun onFailure(reason: Int) { channel.close(); toast("Could not reset Wi-Fi Direct. Close the other projection app and try again.") } + }) + } + } catch (_: SecurityException) { + channel.close(); permissionHelp("Wireless permissions", "Allow Nearby devices and, on older Android versions, Location before resetting CarPlay Wi-Fi.") + } + } + + private fun refreshStatus() { + val running = CarPlayBackgroundSession.hasSession() + status?.text = when { + setupError != null -> "Setup needs attention" + CarPlayBackgroundSession.active -> "CarPlay connected" + running -> "Connecting to your iPhone…" + DiPlayPreferences.phoneAddress(this) != null -> "Ready for ${DiPlayPreferences.phoneName(this)}" + else -> "Ready when you are" + } + if (lastRunning != running) { + connectButton?.text = if (running) "Open CarPlay" else "Connect phone" + disconnectButton?.visibility = if (running) View.VISIBLE else View.GONE + disconnectButton?.isEnabled = true + lastRunning = running + } + connectButton?.isEnabled = setupError == null + } + private fun reportFileName() = "DiPlay-${SimpleDateFormat("yyyyMMdd-HHmmss-SSS", Locale.US).format(Date())}.txt" + + private fun chooseReportDestination() { + // Some head units omit or disable DocumentsUI. Launch itself can throw, before + // the result callback and the background writer's exception handler ever run. + runCatching { export.launch(reportFileName()) }.onFailure { + toast(if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) + "This head unit could not open a save location. Please try saving to Downloads again." + else "This head unit has no available file picker to save the report.") + } + } + + private fun exportDiagnostics(uri: Uri? = null) { + if (exportInProgress) return + exportInProgress = true + exportButton?.apply { isEnabled = false; text = "Saving report…" } + val appContext = applicationContext + val fileName = reportFileName() + Thread({ + val result = runCatching { + val report = buildString { + appendLine("DiPlay ${version()} · private beta diagnostic report") + appendLine("Android ${Build.VERSION.RELEASE} / API ${Build.VERSION.SDK_INT}") + appendLine("Head unit: ${Build.MANUFACTURER} ${Build.MODEL}") + appendLine("Connection: ${if (AirPlayPersistence.loadWirelessEnabled(appContext)) "wireless" else "USB"}") + appendLine("Authentication: local experimental beta identity; no remote fallback") + appendLine("Saved video preference (may differ from active session): ${if (AirPlayPersistence.loadHevcEnabled(appContext)) "HEVC" else "H.264"}; ${AirPlayPersistence.loadFps(appContext)} fps") + appendLine("Icon and text size: ${com.shilapi.xcertplay.airplay.CarPlayUiScale.label(AirPlayPersistence.loadUiScalePercent(appContext))}") + appendLine("Saved resolution preference (may differ from active session): ${AirPlayPersistence.loadDisplayScaleTenths(appContext) * 10}%") + appendLine("Session: ${if (CarPlayBackgroundSession.active) "active" else if (CarPlayBackgroundSession.hasSession()) "connecting" else "stopped"}") + appendLine("Head-unit board: ${Build.BOARD}; hardware: ${Build.HARDWARE}; build: ${Build.DISPLAY}") + appendLine() + appendLine("--- Last display negotiation (timestamps distinguish it from current settings) ---") + appendLine(DisplayDiagnosticSnapshot.report(appContext)) + appendLine() + for (name in SessionLogFile.REPORT_NAMES) { + val file = File(appContext.filesDir, "logs/$name") + if (file.isFile) { + appendLine("--- $name ---") + file.useLines { lines -> lines.forEach { line -> DiagnosticRedactor.redact(line)?.let { appendLine(it) } } } + } + } + } + if (uri != null) DiagnosticExportStore.write(appContext.contentResolver, uri, report) + else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + DiagnosticExportStore.saveToDownloads(appContext.contentResolver, fileName, report) + } else error("A save location is required") + } + runOnUiThread { + exportInProgress = false + if (isFinishing || isDestroyed) return@runOnUiThread + exportButton?.apply { isEnabled = true; text = "Save diagnostic report" } + if (result.isSuccess) { + AlertDialog.Builder(this).setTitle("Diagnostic report saved") + .setMessage(if (uri == null) "Downloads/DiPlay/$fileName" else "Your report was saved to the selected location.") + .setPositiveButton("Done", null).show() + } else { + AlertDialog.Builder(this).setTitle("Could not save the report") + .setMessage("Check that storage is available, or choose another save location.") + .setPositiveButton("Choose location") { _, _ -> chooseReportDestination() } + .setNegativeButton("Close", null).show() + } + } + }, "diplay-export").start() + } + private fun permissionHelp(title: String, body: String) { + AlertDialog.Builder(this).setTitle(title).setMessage(body).setPositiveButton("App settings") { _, _ -> + openSystem(Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS, Uri.parse("package:$packageName"))) + }.setNegativeButton("Later", null).show() + } + private fun openSystem(intent: Intent) { runCatching { startActivity(intent) }.onFailure { toast("Open this setting from your car’s Settings app.") } } + private fun toast(message: String) { Toast.makeText(this, message, Toast.LENGTH_LONG).show() } + private fun version() = packageManager.getPackageInfo(packageName, 0).versionName ?: "0.1.0-beta.1" + private fun section(parent: LinearLayout, title: String, build: (LinearLayout) -> Unit) { + val card = card(); card.addView(label(title, 22, TEXT, true).apply { setPadding(0, 0, 0, dp(16)) }); build(card) + parent.addView(card, LinearLayout.LayoutParams(-1, -2).apply { bottomMargin = dp(18) }) + } + private fun toggle(parent: LinearLayout, title: String, description: String, value: Boolean, save: (Boolean) -> Unit) { + val line = row().apply { gravity = Gravity.CENTER_VERTICAL; setPadding(0, dp(12), 0, dp(12)) } + val text = column(); text.addView(label(title, 18, TEXT, true)); text.addView(label(description, 14, MUTED).apply { setPadding(0, dp(6), dp(16), 0) }) + line.addView(text, LinearLayout.LayoutParams(0, -2, 1f)) + line.addView(Switch(this).apply { contentDescription = title; isChecked = value; minHeight = dp(56); buttonTintList = ColorStateList.valueOf(ACCENT); setOnCheckedChangeListener { _, checked -> save(checked) } }) + parent.addView(line) + } + private fun choice(parent: LinearLayout, title: String, options: List, current: Int, save: (Int) -> Unit) { + var selection = current + val button = button("$title · ${options[selection]}", false) {} + button.setOnClickListener { + var pendingSelection = selection + AlertDialog.Builder(this).setTitle(title) + .setSingleChoiceItems(options.toTypedArray(), selection) { _, index -> pendingSelection = index } + .setPositiveButton(if (CarPlayBackgroundSession.hasSession()) "Apply and reconnect" else "Save") { _, _ -> + if (pendingSelection != selection) { + selection = pendingSelection + save(selection) + button.text = "$title · ${options[selection]}" + if (CarPlayBackgroundSession.hasSession()) { + connect(AirPlayPersistence.loadWirelessEnabled(this)) + } + } + }.setNegativeButton("Cancel", null).show() + } + parent.addView(button, matchButton(0, 60)); parent.addView(space(12)) + } + private fun card() = column().apply { background = rounded(SURFACE, BORDER); setPadding(dp(24), dp(24), dp(24), dp(24)) } + private fun column() = LinearLayout(this).apply { orientation = LinearLayout.VERTICAL; layoutParams = LinearLayout.LayoutParams(-1, -2) } + private fun row() = LinearLayout(this).apply { orientation = LinearLayout.HORIZONTAL; layoutParams = LinearLayout.LayoutParams(-1, -2) } + private fun label(value: String, size: Int, color: Int, bold: Boolean = false) = TextView(this).apply { + text = value; textSize = size.toFloat(); setTextColor(color); gravity = Gravity.CENTER_VERTICAL + typeface = if (bold) Typeface.create("sans-serif-medium", Typeface.NORMAL) else Typeface.create("sans-serif", Typeface.NORMAL) + setLineSpacing(dp(3).toFloat(), 1f) + } + private fun button(title: String, primary: Boolean, click: () -> Unit) = Button(this).apply { + text = title; isAllCaps = false; textSize = 18f; setTextColor(if (primary) BG else TEXT) + typeface = Typeface.create("sans-serif-medium", Typeface.NORMAL) + background = android.graphics.drawable.RippleDrawable(ColorStateList.valueOf(0x336F9FD9), rounded(if (primary) ACCENT else SURFACE, if (primary) ACCENT else BORDER), null) + setPadding(dp(16), 0, dp(16), 0); minHeight = dp(56); stateListAnimator = null + setOnClickListener { click() } + } + private fun rounded(color: Int, stroke: Int) = GradientDrawable().apply { setColor(color); cornerRadius = dp(20).toFloat(); setStroke(dp(1), stroke) } + private fun matchButton(top: Int = 0, height: Int = 68) = LinearLayout.LayoutParams(-1, dp(height)).apply { topMargin = dp(top) } + private fun space(height: Int) = View(this).apply { layoutParams = LinearLayout.LayoutParams(1, dp(height)) } + private fun dp(value: Int) = (value * resources.displayMetrics.density).toInt() + companion object { + private val BG = Color.rgb(12, 17, 27) + private val SURFACE = Color.rgb(21, 30, 44) + private val BORDER = Color.rgb(42, 56, 75) + private val ACCENT = Color.rgb(166, 200, 255) + private val TEXT = Color.rgb(241, 245, 252) + private val MUTED = Color.rgb(168, 182, 202) + private val WARNING = Color.rgb(255, 196, 128) + } +} diff --git a/common/src/main/java/com/shilapi/xcertplay/DiPlayBluetooth.kt b/common/src/main/java/com/shilapi/xcertplay/DiPlayBluetooth.kt new file mode 100644 index 0000000..c4c0e59 --- /dev/null +++ b/common/src/main/java/com/shilapi/xcertplay/DiPlayBluetooth.kt @@ -0,0 +1,16 @@ +package com.shilapi.xcertplay + +import android.bluetooth.BluetoothManager +import android.content.Context +import android.provider.Settings + +internal object DiPlayBluetooth { + fun localAddress(context: Context): String? { + val adapter = runCatching { context.getSystemService(BluetoothManager::class.java)?.adapter?.address }.getOrNull() + val setting = runCatching { Settings.Secure.getString(context.contentResolver, "bluetooth_address") }.getOrNull() + return listOfNotNull(adapter, setting).firstOrNull { + Regex("(?i)([0-9a-f]{2}:){5}[0-9a-f]{2}").matches(it) && + !it.startsWith("02:00:00:00:00:") && it != "00:00:00:00:00:00" + } + } +} diff --git a/common/src/main/java/com/shilapi/xcertplay/DiPlayBootstrap.kt b/common/src/main/java/com/shilapi/xcertplay/DiPlayBootstrap.kt new file mode 100644 index 0000000..003b254 --- /dev/null +++ b/common/src/main/java/com/shilapi/xcertplay/DiPlayBootstrap.kt @@ -0,0 +1,62 @@ +package com.shilapi.xcertplay + +import android.content.Context +import com.shilapi.xcertplay.airplay.AirPlayIdentity +import com.shilapi.xcertplay.mfi.LocalMfiAuthenticationClient +import com.shilapi.xcertplay.orchestration.MfiTarget +import java.io.File +import java.security.MessageDigest + +/** Installs the private beta's experimental identity. It has no remote fallback. */ +internal object DiPlayBootstrap { + @Volatile private var ready = false + + @Synchronized fun ensure(context: Context) { + if (ready) return + val target = File(context.noBackupFilesDir, LocalMfiAuthenticationClient.DIRECTORY) + if (!target.exists()) { + val staging = File(context.noBackupFilesDir, "offline-mfi-staging") + staging.deleteRecursively() + check(staging.mkdirs()) { "Could not prepare local authentication" } + staging.setReadable(false, false); staging.setReadable(true, true) + staging.setExecutable(false, false); staging.setExecutable(true, true) + try { + for (name in listOf("identity.pk8", "certificate.p7b")) { + val file = File(staging, name) + context.assets.open("offline-mfi/$name").use { input -> + file.outputStream().use { output -> input.copyTo(output) } + } + file.setReadable(false, false); file.setReadable(true, true) + file.setWritable(false, false); file.setWritable(true, true) + } + LocalMfiAuthenticationClient.load(staging) + check(staging.renameTo(target)) { "Could not install local authentication" } + } finally { + staging.deleteRecursively() + } + } + LocalMfiAuthenticationClient.load(target) + AirPlayPersistence.saveMfiTarget(context, MfiTarget.LOCAL) + AirPlayPersistence.saveDebugLogsEnabled(context, false) + ready = true + } + + fun deviceId(identity: AirPlayIdentity): String { + val bytes = MessageDigest.getInstance("SHA-256").digest(identity.publicKey).take(6).toByteArray() + bytes[0] = ((bytes[0].toInt() and 0xfc) or 0x02).toByte() + return bytes.joinToString(":") { "%02X".format(it.toInt() and 0xff) } + } +} + +internal object DiPlayPreferences { + private fun prefs(context: Context) = context.getSharedPreferences("diplay", Context.MODE_PRIVATE) + fun phoneAddress(context: Context): String? = prefs(context).getString("phone_address", null) + fun phoneName(context: Context): String = prefs(context).getString("phone_name", null) ?: "Your iPhone" + fun savePhone(context: Context, address: String, name: String) { + prefs(context).edit().putString("phone_address", address).putString("phone_name", name).apply() + } + fun autoConnect(context: Context) = prefs(context).getBoolean("auto_connect", false) + fun saveAutoConnect(context: Context, value: Boolean) { + prefs(context).edit().putBoolean("auto_connect", value).apply() + } +} diff --git a/common/src/main/java/com/shilapi/xcertplay/DiPlaySessionService.kt b/common/src/main/java/com/shilapi/xcertplay/DiPlaySessionService.kt new file mode 100644 index 0000000..31e728a --- /dev/null +++ b/common/src/main/java/com/shilapi/xcertplay/DiPlaySessionService.kt @@ -0,0 +1,52 @@ +package com.shilapi.xcertplay + +import android.Manifest +import android.app.Notification +import android.app.NotificationChannel +import android.app.NotificationManager +import android.app.PendingIntent +import android.app.Service +import android.content.Intent +import android.content.pm.PackageManager +import android.content.pm.ServiceInfo +import android.os.Build +import android.os.IBinder +import com.shilapi.xcertplay.host.R + +/** Keeps an explicitly started connection alive when another car app is in the foreground. */ +class DiPlaySessionService : Service() { + override fun onBind(intent: Intent?): IBinder? = null + override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { + if (intent?.action == ACTION_STOP) { + CarPlayBackgroundSession.stop() + stopSelf() + return START_NOT_STICKY + } + val manager = getSystemService(NotificationManager::class.java) + manager.createNotificationChannel(NotificationChannel(CHANNEL, "CarPlay connection", NotificationManager.IMPORTANCE_LOW)) + val open = PendingIntent.getActivity(this, 0, Intent(this, CarPlayHostActivity::class.java), PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE) + val stop = PendingIntent.getService(this, 1, Intent(this, DiPlaySessionService::class.java).setAction(ACTION_STOP), PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE) + val notification = Notification.Builder(this, CHANNEL) + .setSmallIcon(R.drawable.ic_diplay_notification) + .setContentTitle("DiPlay") + .setContentText("CarPlay connection running") + .setContentIntent(open).setOngoing(true) + .addAction(Notification.Action.Builder(null, "Disconnect", stop).build()).build() + if (Build.VERSION.SDK_INT >= 29) { + var types = ServiceInfo.FOREGROUND_SERVICE_TYPE_CONNECTED_DEVICE + if (Build.VERSION.SDK_INT >= 30 && checkSelfPermission(Manifest.permission.RECORD_AUDIO) == PackageManager.PERMISSION_GRANTED) { + types = types or ServiceInfo.FOREGROUND_SERVICE_TYPE_MICROPHONE + } + startForeground(1, notification, types) + } else startForeground(1, notification) + return START_NOT_STICKY + } + override fun onTaskRemoved(rootIntent: Intent?) { + CarPlayBackgroundSession.stop() + stopSelf() + } + companion object { + const val ACTION_STOP = "com.shihab.diplay.DISCONNECT" + private const val CHANNEL = "diplay_connection" + } +} diff --git a/common/src/main/java/com/shilapi/xcertplay/DiagnosticExportStore.kt b/common/src/main/java/com/shilapi/xcertplay/DiagnosticExportStore.kt new file mode 100644 index 0000000..6939b0a --- /dev/null +++ b/common/src/main/java/com/shilapi/xcertplay/DiagnosticExportStore.kt @@ -0,0 +1,43 @@ +package com.shilapi.xcertplay + +import android.content.ContentResolver +import android.content.ContentValues +import android.net.Uri +import android.os.Build +import android.os.Environment +import android.provider.MediaStore +import androidx.annotation.RequiresApi +import java.io.IOException + +/** Saves an app-owned report without depending on an OEM's document-picker activity. */ +internal object DiagnosticExportStore { + @RequiresApi(Build.VERSION_CODES.Q) + fun saveToDownloads(resolver: ContentResolver, fileName: String, report: String): Uri { + val values = ContentValues().apply { + put(MediaStore.Downloads.DISPLAY_NAME, fileName) + put(MediaStore.Downloads.MIME_TYPE, "text/plain") + put(MediaStore.Downloads.RELATIVE_PATH, "${Environment.DIRECTORY_DOWNLOADS}/DiPlay") + put(MediaStore.Downloads.IS_PENDING, 1) + } + val uri = resolver.insert(MediaStore.Downloads.EXTERNAL_CONTENT_URI, values) + ?: throw IOException("Downloads could not create the report") + try { + write(resolver, uri, report) + val published = resolver.update(uri, ContentValues().apply { + put(MediaStore.Downloads.IS_PENDING, 0) + }, null, null) + if (published != 1) throw IOException("Downloads could not publish the report") + return uri + } catch (error: Exception) { + // Only remove the entry created by this call; never leave a partial report behind. + runCatching { resolver.delete(uri, null, null) } + throw error + } + } + + fun write(resolver: ContentResolver, uri: Uri, report: String) { + val stream = resolver.openOutputStream(uri, "wt") + ?: throw IOException("Report destination is unavailable") + stream.bufferedWriter(Charsets.UTF_8).use { it.write(report) } + } +} diff --git a/common/src/main/java/com/shilapi/xcertplay/DiagnosticRedactor.kt b/common/src/main/java/com/shilapi/xcertplay/DiagnosticRedactor.kt new file mode 100644 index 0000000..5442c29 --- /dev/null +++ b/common/src/main/java/com/shilapi/xcertplay/DiagnosticRedactor.kt @@ -0,0 +1,17 @@ +package com.shilapi.xcertplay + +/** Diagnostics describe state transitions; protocol payloads and credentials are never exported. */ +internal object DiagnosticRedactor { + private val secret = Regex("(?i)(pass(word|phrase)?|token|private.?key|certificate|pair.?record|ssid|body=|payload=|hex=)") + private val mac = Regex("(?i)(? "phone" + message.startsWith("Video: decoder=") || message.startsWith("Video: decoder configuration failed") -> "decoder" + message.startsWith("Video: output format ") -> "output" + else -> return + } + val safe = DiagnosticRedactor.redact(message) ?: return + prefs.edit().putString(field, "${stamp()} $safe").apply() + } + + @Synchronized + fun report(context: Context): String { + val prefs = context.getSharedPreferences(PREFS, Context.MODE_PRIVATE) + return fields.mapNotNull { prefs.getString(it, null)?.let(DiagnosticRedactor::redact) } + .joinToString("\n").ifEmpty { "No display negotiation recorded yet." } + } +} diff --git a/common/src/main/java/com/shilapi/xcertplay/ImageCropActivity.kt b/common/src/main/java/com/shilapi/xcertplay/ImageCropActivity.kt new file mode 100644 index 0000000..0a1dcf6 --- /dev/null +++ b/common/src/main/java/com/shilapi/xcertplay/ImageCropActivity.kt @@ -0,0 +1,393 @@ +package com.shilapi.xcertplay + +import android.app.Activity +import android.content.Intent +import android.graphics.Bitmap +import android.graphics.BitmapFactory +import android.graphics.Canvas +import android.graphics.Color +import android.graphics.Matrix +import android.graphics.Paint +import android.graphics.RectF +import android.net.Uri +import android.os.Bundle +import android.view.Gravity +import android.view.MotionEvent +import android.view.View +import android.view.ViewGroup +import android.widget.Button +import android.widget.FrameLayout +import android.widget.LinearLayout +import android.widget.TextView +import java.io.ByteArrayOutputStream +import java.util.concurrent.Executors +import kotlin.math.ceil +import kotlin.math.floor +import kotlin.math.max +import kotlin.math.min + +/** Loads one local image and writes a user-positioned 1:1 PNG into the AirPlay icon slot. */ +class ImageCropActivity : Activity() { + private val executor = Executors.newSingleThreadExecutor() + private lateinit var cropView: SquareCropView + private lateinit var statusView: TextView + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + val uri = intent.data + if (uri == null) { + finish() + return + } + + cropView = SquareCropView(this) + statusView = TextView(this).apply { + setTextColor(Color.WHITE) + textSize = 16f + gravity = Gravity.CENTER + setPadding(dp(12), dp(8), dp(12), dp(8)) + text = "Loading image" + } + + val controls = LinearLayout(this).apply { + orientation = LinearLayout.HORIZONTAL + gravity = Gravity.CENTER + setPadding(dp(16), dp(10), dp(16), dp(16)) + } + controls.addView( + Button(this).apply { + text = "Cancel" + isAllCaps = false + setOnClickListener { + setResult(RESULT_CANCELED) + finish() + } + }, + LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1f), + ) + controls.addView( + Button(this).apply { + text = "Save 1:1" + isAllCaps = false + setOnClickListener { saveCrop() } + }, + LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1f).apply { + marginStart = dp(12) + }, + ) + + val root = FrameLayout(this).apply { + setBackgroundColor(Color.BLACK) + addView( + cropView, + FrameLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.MATCH_PARENT, + ), + ) + addView( + statusView, + FrameLayout.LayoutParams( + ViewGroup.LayoutParams.WRAP_CONTENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + Gravity.TOP or Gravity.CENTER_HORIZONTAL, + ).apply { topMargin = dp(12) }, + ) + addView( + controls, + FrameLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + Gravity.BOTTOM, + ), + ) + } + setContentView(root) + + executor.execute { + val bitmap = try { + decodeBitmap(uri) + } catch (_: Exception) { + null + } + runOnUiThread { + if (isFinishing || isDestroyed) { + bitmap?.recycle() + return@runOnUiThread + } + if (bitmap == null) { + statusView.text = "Could not decode image" + } else { + cropView.setBitmap(bitmap) + statusView.text = "Drag to move, pinch to zoom" + } + } + } + } + + override fun onDestroy() { + executor.shutdownNow() + cropView.bitmap?.recycle() + super.onDestroy() + } + + private fun saveCrop() { + val cropped = cropView.cropToSquare() ?: run { + statusView.text = "Image is not ready" + return + } + val encoded = ByteArrayOutputStream().use { output -> + if (!cropped.compress(Bitmap.CompressFormat.PNG, 100, output)) { + cropped.recycle() + statusView.text = "Could not encode image" + return + } + cropped.recycle() + output.toByteArray() + } + try { + AirPlayPersistence.saveCustomAirPlayIcon(applicationContext, encoded) + setResult( + RESULT_OK, + Intent().putExtra(EXTRA_CROP_COMPLETE, true), + ) + finish() + } catch (_: Exception) { + statusView.text = "Could not save image" + } + } + + private fun decodeBitmap(uri: Uri): Bitmap? { + val bounds = BitmapFactory.Options().apply { inJustDecodeBounds = true } + contentResolver.openInputStream(uri)?.use { + BitmapFactory.decodeStream(it, null, bounds) + } + if (bounds.outWidth <= 0 || bounds.outHeight <= 0) return null + + var sampleSize = 1 + while (max(bounds.outWidth, bounds.outHeight) / sampleSize > MAX_DECODE_EDGE) { + sampleSize *= 2 + } + val options = BitmapFactory.Options().apply { + inSampleSize = sampleSize + inPreferredConfig = Bitmap.Config.ARGB_8888 + } + return contentResolver.openInputStream(uri)?.use { + BitmapFactory.decodeStream(it, null, options) + } + } + + private fun dp(value: Int): Int = (value * resources.displayMetrics.density).toInt() + + private class SquareCropView(context: android.content.Context) : View(context) { + private val imagePaint = Paint(Paint.ANTI_ALIAS_FLAG or Paint.FILTER_BITMAP_FLAG) + private val dimPaint = Paint().apply { color = Color.argb(145, 0, 0, 0) } + private val borderPaint = Paint(Paint.ANTI_ALIAS_FLAG).apply { + color = Color.WHITE + style = Paint.Style.STROKE + strokeWidth = 2f * resources.displayMetrics.density + } + private val gridPaint = Paint(Paint.ANTI_ALIAS_FLAG).apply { + color = Color.argb(150, 255, 255, 255) + style = Paint.Style.STROKE + strokeWidth = 1f * resources.displayMetrics.density + } + private val matrix = Matrix() + private val viewport = RectF() + private val mappedBitmap = RectF() + private var minimumScale = 1f + private var maximumScale = 1f + private var lastX = 0f + private var lastY = 0f + private var lastDistance = 0f + + var bitmap: Bitmap? = null + private set + + fun setBitmap(value: Bitmap) { + bitmap?.recycle() + bitmap = value + if (width > 0 && height > 0) configure() + invalidate() + } + + override fun onSizeChanged(width: Int, height: Int, oldWidth: Int, oldHeight: Int) { + super.onSizeChanged(width, height, oldWidth, oldHeight) + configure() + } + + override fun onDraw(canvas: Canvas) { + super.onDraw(canvas) + val source = bitmap ?: return + canvas.drawColor(Color.BLACK) + canvas.drawRect(0f, 0f, width.toFloat(), viewport.top, dimPaint) + canvas.drawRect(0f, viewport.bottom, width.toFloat(), height.toFloat(), dimPaint) + canvas.drawRect(0f, viewport.top, viewport.left, viewport.bottom, dimPaint) + canvas.drawRect(viewport.right, viewport.top, width.toFloat(), viewport.bottom, dimPaint) + + val save = canvas.save() + canvas.clipRect(viewport) + canvas.drawBitmap(source, matrix, imagePaint) + canvas.restoreToCount(save) + + canvas.drawRect(viewport, borderPaint) + val thirdWidth = viewport.width() / 3f + val thirdHeight = viewport.height() / 3f + canvas.drawLine(viewport.left + thirdWidth, viewport.top, viewport.left + thirdWidth, viewport.bottom, gridPaint) + canvas.drawLine(viewport.right - thirdWidth, viewport.top, viewport.right - thirdWidth, viewport.bottom, gridPaint) + canvas.drawLine(viewport.left, viewport.top + thirdHeight, viewport.right, viewport.top + thirdHeight, gridPaint) + canvas.drawLine(viewport.left, viewport.bottom - thirdHeight, viewport.right, viewport.bottom - thirdHeight, gridPaint) + } + + override fun onTouchEvent(event: MotionEvent): Boolean { + if (bitmap == null) return true + when (event.actionMasked) { + MotionEvent.ACTION_DOWN -> { + lastX = event.x + lastY = event.y + return true + } + + MotionEvent.ACTION_POINTER_DOWN -> { + lastDistance = pointerDistance(event) + return true + } + + MotionEvent.ACTION_MOVE -> { + if (event.pointerCount >= 2) { + val distance = pointerDistance(event) + if (lastDistance > 0f) { + val factor = distance / lastDistance + matrix.postScale( + factor, + factor, + (event.getX(0) + event.getX(1)) / 2f, + (event.getY(0) + event.getY(1)) / 2f, + ) + } + lastDistance = distance + } else { + matrix.postTranslate(event.x - lastX, event.y - lastY) + } + lastX = event.x + lastY = event.y + constrainMatrix() + invalidate() + return true + } + + MotionEvent.ACTION_POINTER_UP -> { + lastDistance = 0f + return true + } + + MotionEvent.ACTION_UP, + MotionEvent.ACTION_CANCEL -> { + lastDistance = 0f + performClick() + return true + } + } + return super.onTouchEvent(event) + } + + override fun performClick(): Boolean { + super.performClick() + return true + } + + fun cropToSquare(): Bitmap? { + val source = bitmap ?: return null + if (viewport.width() <= 0f || viewport.height() <= 0f) return null + val inverse = Matrix() + if (!matrix.invert(inverse)) return null + val sourceRect = RectF() + inverse.mapRect(sourceRect, viewport) + val left = floor(sourceRect.left).toInt().coerceIn(0, source.width - 1) + val top = floor(sourceRect.top).toInt().coerceIn(0, source.height - 1) + val right = ceil(sourceRect.right).toInt().coerceIn(left + 1, source.width) + val bottom = ceil(sourceRect.bottom).toInt().coerceIn(top + 1, source.height) + val square = min(right - left, bottom - top) + val centerX = (left + right) / 2 + val centerY = (top + bottom) / 2 + val cropLeft = (centerX - square / 2).coerceIn(0, source.width - square) + val cropTop = (centerY - square / 2).coerceIn(0, source.height - square) + val cropped = Bitmap.createBitmap(source, cropLeft, cropTop, square, square) + val output = Bitmap.createBitmap( + OUTPUT_ICON_PIXELS, + OUTPUT_ICON_PIXELS, + Bitmap.Config.ARGB_8888, + ) + Canvas(output).drawBitmap( + cropped, + null, + RectF(0f, 0f, OUTPUT_ICON_PIXELS.toFloat(), OUTPUT_ICON_PIXELS.toFloat()), + imagePaint, + ) + if (cropped !== source) cropped.recycle() + return output + } + + private fun configure() { + val source = bitmap ?: return + if (width <= 0 || height <= 0) return + val side = min(width, height).toFloat() - 2f * CROP_PADDING_DP * resources.displayMetrics.density + if (side <= 0f) return + viewport.set( + (width - side) / 2f, + (height - side) / 2f, + (width + side) / 2f, + (height + side) / 2f, + ) + minimumScale = max(side / source.width, side / source.height) + maximumScale = minimumScale * MAX_ZOOM + matrix.reset() + matrix.postScale(minimumScale, minimumScale) + matrix.postTranslate( + viewport.centerX() - source.width * minimumScale / 2f, + viewport.centerY() - source.height * minimumScale / 2f, + ) + constrainMatrix() + invalidate() + } + + private fun constrainMatrix() { + val source = bitmap ?: return + val values = FloatArray(9) + matrix.getValues(values) + val scale = values[Matrix.MSCALE_X] + if (scale < minimumScale) { + matrix.postScale(minimumScale / scale, minimumScale / scale, viewport.centerX(), viewport.centerY()) + } else if (scale > maximumScale) { + matrix.postScale(maximumScale / scale, maximumScale / scale, viewport.centerX(), viewport.centerY()) + } + mappedBitmap.set(0f, 0f, source.width.toFloat(), source.height.toFloat()) + matrix.mapRect(mappedBitmap) + var dx = 0f + var dy = 0f + if (mappedBitmap.left > viewport.left) dx = viewport.left - mappedBitmap.left + if (mappedBitmap.right < viewport.right) dx = viewport.right - mappedBitmap.right + if (mappedBitmap.top > viewport.top) dy = viewport.top - mappedBitmap.top + if (mappedBitmap.bottom < viewport.bottom) dy = viewport.bottom - mappedBitmap.bottom + if (dx != 0f || dy != 0f) matrix.postTranslate(dx, dy) + } + + private fun pointerDistance(event: MotionEvent): Float { + if (event.pointerCount < 2) return 0f + val dx = event.getX(0) - event.getX(1) + val dy = event.getY(0) - event.getY(1) + return kotlin.math.sqrt(dx * dx + dy * dy) + } + + private companion object { + const val CROP_PADDING_DP = 24f + const val MAX_ZOOM = 8f + } + } + + companion object { + const val EXTRA_CROP_COMPLETE = "crop_complete" + private const val MAX_DECODE_EDGE = 2048 + private const val OUTPUT_ICON_PIXELS = 1024 + } +} diff --git a/common/src/main/java/com/shilapi/xcertplay/MainActivity.kt b/common/src/main/java/com/shilapi/xcertplay/MainActivity.kt new file mode 100644 index 0000000..fa92ac9 --- /dev/null +++ b/common/src/main/java/com/shilapi/xcertplay/MainActivity.kt @@ -0,0 +1,122 @@ +package com.shilapi.xcertplay + +import android.os.Bundle +import androidx.activity.ComponentActivity +import androidx.activity.compose.setContent +import androidx.activity.enableEdgeToEdge +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Button +import androidx.compose.material3.OutlinedTextField +import androidx.compose.material3.Scaffold +import androidx.compose.material3.Text +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import com.shilapi.xcertplay.mfi.MfiProtocolMajorResult +import com.shilapi.xcertplay.mfi.MfiSelfCheck +import com.shilapi.xcertplay.mfi.MfiSelfCheckResult +import com.shilapi.xcertplay.transport.LinuxI2cTransport +import com.shilapi.xcertplay.ui.theme.XcertplayTheme +import java.util.concurrent.ExecutorService +import java.util.concurrent.Executors + +class MainActivity : ComponentActivity() { + private val executor: ExecutorService = Executors.newSingleThreadExecutor() + private var status by mutableStateOf(DiagnosticStatus.Idle) + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + enableEdgeToEdge() + setContent { + XcertplayTheme { + var devicePath by remember { mutableStateOf("/dev/i2c-1") } + Scaffold(modifier = Modifier.fillMaxSize()) { padding -> + Column( + modifier = Modifier.padding(padding).padding(24.dp), + verticalArrangement = Arrangement.spacedBy(12.dp), + ) { + Text("Board I2C diagnostic") + OutlinedTextField( + value = devicePath, + onValueChange = { devicePath = it }, + modifier = Modifier.fillMaxWidth(), + label = { Text("Linux I2C device") }, + singleLine = true, + enabled = status !is DiagnosticStatus.Running, + ) + Button( + onClick = { runSelfCheck(devicePath) }, + enabled = status !is DiagnosticStatus.Running, + ) { + Text("Run MFi self-check") + } + Spacer(Modifier.height(4.dp)) + Text(status.message()) + Text("CH341 requires deployment-specific VID/PID configuration.") + } + } + } + } + } + + override fun onDestroy() { + executor.shutdownNow() + super.onDestroy() + } + + private fun runSelfCheck(devicePath: String) { + status = DiagnosticStatus.Running + executor.execute { + val next = try { + LinuxI2cTransport.open(devicePath).use { MfiSelfCheck(it).run() } + .let { DiagnosticStatus.Result(it) } + } catch (error: LinkageError) { + DiagnosticStatus.Failure(error.message ?: "I2C native library is unavailable") + } catch (error: Exception) { + DiagnosticStatus.Failure(error.message ?: error.javaClass.simpleName) + } + runOnUiThread { + if (!isFinishing && !isDestroyed) status = next + } + } + } +} + +private sealed class DiagnosticStatus { + data object Idle : DiagnosticStatus() + data object Running : DiagnosticStatus() + data class Result(val selfCheck: MfiSelfCheckResult) : DiagnosticStatus() + data class Failure(val message: String) : DiagnosticStatus() + + fun message(): String = when (this) { + Idle -> "Idle" + Running -> "Running…" + is Failure -> "Failed: $message" + is Result -> { + val chip = selfCheck.chip ?: return if (selfCheck.discovery.interrupted) { + "MFi scan interrupted" + } else { + "Found: none" + } + val major = when (val result = chip.protocolMajor) { + is MfiProtocolMajorResult.Value -> "%d".format(result.major) + is MfiProtocolMajorResult.MfiFailure -> result.error.message ?: result.error.javaClass.simpleName + is MfiProtocolMajorResult.TransportFailure -> result.error.message ?: result.error.javaClass.simpleName + } + "Found: 0x%02X; device version: 0x%02X; protocol major (raw): %s".format( + chip.address7Bit, + chip.deviceVersion, + major, + ) + } + } +} diff --git a/common/src/main/java/com/shilapi/xcertplay/SafeAreaEditorView.kt b/common/src/main/java/com/shilapi/xcertplay/SafeAreaEditorView.kt new file mode 100644 index 0000000..bcfe341 --- /dev/null +++ b/common/src/main/java/com/shilapi/xcertplay/SafeAreaEditorView.kt @@ -0,0 +1,186 @@ +package com.shilapi.xcertplay + +import android.content.Context +import android.graphics.Canvas +import android.graphics.Color +import android.graphics.Paint +import android.view.MotionEvent +import android.view.View +import com.shilapi.xcertplay.airplay.AirPlaySafeArea +import com.shilapi.xcertplay.airplay.SafeAreaRect + +/** Full-screen editor for the two horizontal and two vertical safe-area boundaries. */ +class SafeAreaEditorView(context: Context) : View(context) { + private enum class Edge { + LEFT, + TOP, + RIGHT, + BOTTOM, + } + + private val density = resources.displayMetrics.density + private val touchRadius = 40f * density + private val dimPaint = Paint().apply { color = Color.argb(118, 0, 0, 0) } + private val linePaint = Paint(Paint.ANTI_ALIAS_FLAG).apply { + color = Color.rgb(127, 205, 154) + strokeWidth = 3f * density + style = Paint.Style.STROKE + } + private val borderPaint = Paint(Paint.ANTI_ALIAS_FLAG).apply { + color = Color.argb(210, 255, 255, 255) + strokeWidth = 1f * density + style = Paint.Style.STROKE + } + private val textPaint = Paint(Paint.ANTI_ALIAS_FLAG).apply { + color = Color.WHITE + textSize = 15f * density * resources.configuration.fontScale + typeface = android.graphics.Typeface.MONOSPACE + } + + private var rect: SafeAreaRect? = null + private var sourceRect: SafeAreaRect? = null + private var sourceWidth = 0 + private var sourceHeight = 0 + private var activeEdge: Edge? = null + + init { + isClickable = true + } + + fun setRect(value: SafeAreaRect, sourceWidthPixels: Int, sourceHeightPixels: Int) { + require(sourceWidthPixels > 0 && sourceHeightPixels > 0) { + "Source dimensions must be positive" + } + sourceWidth = sourceWidthPixels + sourceHeight = sourceHeightPixels + sourceRect = value + if (width > 0 && height > 0) { + rect = AirPlaySafeArea.scaleRect( + value, + sourceWidth, + sourceHeight, + width, + height, + ) + invalidate() + } + } + + fun currentRectForSource(): SafeAreaRect? { + sourceRect?.let { return it } + val current = rect ?: return null + if (sourceWidth <= 0 || sourceHeight <= 0 || width <= 0 || height <= 0) return null + return AirPlaySafeArea.scaleRect(current, width, height, sourceWidth, sourceHeight) + } + + override fun onSizeChanged(width: Int, height: Int, oldWidth: Int, oldHeight: Int) { + super.onSizeChanged(width, height, oldWidth, oldHeight) + if (width <= 0 || height <= 0) return + val source = sourceRect ?: AirPlaySafeArea.default(width, height) + rect = if (sourceWidth > 0 && sourceHeight > 0) { + AirPlaySafeArea.scaleRect(source, sourceWidth, sourceHeight, width, height) + } else { + source.clampTo(width, height) + } + invalidate() + } + + override fun onDraw(canvas: Canvas) { + super.onDraw(canvas) + val safe = rect ?: return + val width = width.toFloat() + val height = height.toFloat() + val left = safe.left.toFloat() + val top = safe.top.toFloat() + val right = safe.right.toFloat() + val bottom = safe.bottom.toFloat() + + canvas.drawRect(0f, 0f, width, top, dimPaint) + canvas.drawRect(0f, bottom, width, height, dimPaint) + canvas.drawRect(0f, top, left, bottom, dimPaint) + canvas.drawRect(right, top, width, bottom, dimPaint) + + canvas.drawRect(left, top, right, bottom, borderPaint) + canvas.drawLine(left, 0f, left, height, linePaint) + canvas.drawLine(right, 0f, right, height, linePaint) + canvas.drawLine(0f, top, width, top, linePaint) + canvas.drawLine(0f, bottom, width, bottom, linePaint) + + drawLabel(canvas, "x=${safe.left}", left + 8f * density, top + 20f * density) + drawLabel(canvas, "x=${safe.right}", right + 8f * density, bottom - 8f * density) + drawLabel(canvas, "y=${safe.top}", left + 8f * density, top - 8f * density) + drawLabel(canvas, "y=${safe.bottom}", right - 88f * density, bottom + 20f * density) + } + + override fun onTouchEvent(event: MotionEvent): Boolean { + val safe = rect ?: return true + when (event.actionMasked) { + MotionEvent.ACTION_DOWN -> { + activeEdge = nearestEdge(event.x, event.y, safe) + return true + } + + MotionEvent.ACTION_MOVE -> { + val edge = activeEdge ?: return true + val moved = moveEdge(safe, edge, event.x, event.y) + rect = moved + if (sourceWidth > 0 && sourceHeight > 0 && width > 0 && height > 0) { + sourceRect = AirPlaySafeArea.scaleRect( + moved, + width, + height, + sourceWidth, + sourceHeight, + ) + } + invalidate() + return true + } + + MotionEvent.ACTION_UP, + MotionEvent.ACTION_CANCEL -> { + activeEdge = null + performClick() + return true + } + } + return super.onTouchEvent(event) + } + + override fun performClick(): Boolean { + super.performClick() + return true + } + + private fun nearestEdge(x: Float, y: Float, safe: SafeAreaRect): Edge? { + val candidates = listOf( + Edge.LEFT to kotlin.math.abs(x - safe.left), + Edge.RIGHT to kotlin.math.abs(x - safe.right), + Edge.TOP to kotlin.math.abs(y - safe.top), + Edge.BOTTOM to kotlin.math.abs(y - safe.bottom), + ).filter { it.second <= touchRadius } + return candidates.minByOrNull { it.second }?.first + } + + private fun moveEdge(safe: SafeAreaRect, edge: Edge, x: Float, y: Float): SafeAreaRect { + val pointX = x.toInt().coerceIn(0, width) + val pointY = y.toInt().coerceIn(0, height) + return when (edge) { + Edge.LEFT -> safe.copy(left = pointX.coerceIn(0, safe.right - 1)) + Edge.TOP -> safe.copy(top = pointY.coerceIn(0, safe.bottom - 1)) + Edge.RIGHT -> safe.copy(right = pointX.coerceIn(safe.left + 1, width)) + Edge.BOTTOM -> safe.copy(bottom = pointY.coerceIn(safe.top + 1, height)) + } + } + + private fun drawLabel(canvas: Canvas, value: String, x: Float, y: Float) { + val horizontalMin = 4f * density + val horizontalMax = (width - textPaint.measureText(value) - 4f * density) + .coerceAtLeast(horizontalMin) + val verticalMin = textPaint.textSize + 4f * density + val verticalMax = (height - 4f * density).coerceAtLeast(verticalMin) + val safeX = x.coerceIn(horizontalMin, horizontalMax) + val safeY = y.coerceIn(verticalMin, verticalMax) + canvas.drawText(value, safeX, safeY, textPaint) + } +} diff --git a/common/src/main/java/com/shilapi/xcertplay/SessionLogFile.kt b/common/src/main/java/com/shilapi/xcertplay/SessionLogFile.kt new file mode 100644 index 0000000..fd8ca78 --- /dev/null +++ b/common/src/main/java/com/shilapi/xcertplay/SessionLogFile.kt @@ -0,0 +1,45 @@ +package com.shilapi.xcertplay + +import java.io.Closeable +import java.io.File + +/** Bounded, private diagnostics. Each write is redacted before touching storage. */ +internal class SessionLogFile(val file: File) : Closeable { + private val lock = Any() + private var closed = false + fun reset(header: String) = synchronized(lock) { + if (!closed) { + file.parentFile?.mkdirs() + rotate() + file.writeText("") + append(header) + } + } + fun append(line: String) = synchronized(lock) { + if (closed) return@synchronized + val safe = DiagnosticRedactor.redact(line) ?: return@synchronized + runCatching { + if (file.length() > MAX_BYTES) { + rotate() + file.writeText("") + } + file.appendText(safe + "\n") + } + Unit + } + private fun rotate() { + if (!file.exists() || file.length() == 0L) return + for (index in ARCHIVE_NAMES.lastIndex downTo 1) { + val source = File(file.parentFile, ARCHIVE_NAMES[index - 1]) + val destination = File(file.parentFile, ARCHIVE_NAMES[index]) + if (source.exists()) source.copyTo(destination, overwrite = true) + } + file.copyTo(File(file.parentFile, ARCHIVE_NAMES.first()), overwrite = true) + } + override fun close() = synchronized(lock) { closed = true } + companion object { + const val MAX_BYTES = 512 * 1024L + private val ARCHIVE_NAMES = listOf("previous.log") + (2..7).map { "previous-$it.log" } + val REPORT_NAMES = ARCHIVE_NAMES.reversed() + "diplay.log" + } +} diff --git a/common/src/main/java/com/shilapi/xcertplay/ui/theme/Color.kt b/common/src/main/java/com/shilapi/xcertplay/ui/theme/Color.kt new file mode 100644 index 0000000..c40139c --- /dev/null +++ b/common/src/main/java/com/shilapi/xcertplay/ui/theme/Color.kt @@ -0,0 +1,11 @@ +package com.shilapi.xcertplay.ui.theme + +import androidx.compose.ui.graphics.Color + +val Purple80 = Color(0xFFD0BCFF) +val PurpleGrey80 = Color(0xFFCCC2DC) +val Pink80 = Color(0xFFEFB8C8) + +val Purple40 = Color(0xFF6650a4) +val PurpleGrey40 = Color(0xFF625b71) +val Pink40 = Color(0xFF7D5260) \ No newline at end of file diff --git a/common/src/main/java/com/shilapi/xcertplay/ui/theme/Theme.kt b/common/src/main/java/com/shilapi/xcertplay/ui/theme/Theme.kt new file mode 100644 index 0000000..1e43c3d --- /dev/null +++ b/common/src/main/java/com/shilapi/xcertplay/ui/theme/Theme.kt @@ -0,0 +1,58 @@ +package com.shilapi.xcertplay.ui.theme + +import android.app.Activity +import android.os.Build +import androidx.compose.foundation.isSystemInDarkTheme +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.darkColorScheme +import androidx.compose.material3.dynamicDarkColorScheme +import androidx.compose.material3.dynamicLightColorScheme +import androidx.compose.material3.lightColorScheme +import androidx.compose.runtime.Composable +import androidx.compose.ui.platform.LocalContext + +private val DarkColorScheme = darkColorScheme( + primary = Purple80, + secondary = PurpleGrey80, + tertiary = Pink80 +) + +private val LightColorScheme = lightColorScheme( + primary = Purple40, + secondary = PurpleGrey40, + tertiary = Pink40 + + /* Other default colors to override + background = Color(0xFFFFFBFE), + surface = Color(0xFFFFFBFE), + onPrimary = Color.White, + onSecondary = Color.White, + onTertiary = Color.White, + onBackground = Color(0xFF1C1B1F), + onSurface = Color(0xFF1C1B1F), + */ +) + +@Composable +fun XcertplayTheme( + darkTheme: Boolean = isSystemInDarkTheme(), + // Dynamic color is available on Android 12+ + dynamicColor: Boolean = true, + content: @Composable () -> Unit +) { + val colorScheme = when { + dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> { + val context = LocalContext.current + if (darkTheme) dynamicDarkColorScheme(context) else dynamicLightColorScheme(context) + } + + darkTheme -> DarkColorScheme + else -> LightColorScheme + } + + MaterialTheme( + colorScheme = colorScheme, + typography = Typography, + content = content + ) +} \ No newline at end of file diff --git a/common/src/main/java/com/shilapi/xcertplay/ui/theme/Type.kt b/common/src/main/java/com/shilapi/xcertplay/ui/theme/Type.kt new file mode 100644 index 0000000..879bc46 --- /dev/null +++ b/common/src/main/java/com/shilapi/xcertplay/ui/theme/Type.kt @@ -0,0 +1,34 @@ +package com.shilapi.xcertplay.ui.theme + +import androidx.compose.material3.Typography +import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.text.font.FontFamily +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.sp + +// Set of Material typography styles to start with +val Typography = Typography( + bodyLarge = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Normal, + fontSize = 16.sp, + lineHeight = 24.sp, + letterSpacing = 0.5.sp + ) + /* Other default text styles to override + titleLarge = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Normal, + fontSize = 22.sp, + lineHeight = 28.sp, + letterSpacing = 0.sp + ), + labelSmall = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Medium, + fontSize = 11.sp, + lineHeight = 16.sp, + letterSpacing = 0.5.sp + ) + */ +) \ No newline at end of file diff --git a/common/src/main/res/drawable/ic_carplay.png b/common/src/main/res/drawable/ic_carplay.png new file mode 100644 index 0000000000000000000000000000000000000000..1f7e3f07ed86214662ec3e55e1bc74aa31d27113 GIT binary patch literal 35437 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 H7LxG~!&qBv literal 0 HcmV?d00001 diff --git a/common/src/main/res/drawable/ic_diplay_notification.xml b/common/src/main/res/drawable/ic_diplay_notification.xml new file mode 100644 index 0000000..397c3c7 --- /dev/null +++ b/common/src/main/res/drawable/ic_diplay_notification.xml @@ -0,0 +1,3 @@ + + + diff --git a/common/src/main/res/raw/placeholder_icon.png b/common/src/main/res/raw/placeholder_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3c9996aadc59918e61a471310b3074ea6ed63619 GIT binary patch literal 33432 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 J8Qbm7{ugW2&$$2q literal 0 HcmV?d00001 diff --git a/common/src/main/res/values/config.xml b/common/src/main/res/values/config.xml new file mode 100644 index 0000000..08ac42d --- /dev/null +++ b/common/src/main/res/values/config.xml @@ -0,0 +1,3 @@ + + false + diff --git a/common/src/main/res/values/strings.xml b/common/src/main/res/values/strings.xml new file mode 100644 index 0000000..401758e --- /dev/null +++ b/common/src/main/res/values/strings.xml @@ -0,0 +1,3 @@ + + DiPlay + diff --git a/common/src/main/res/values/themes.xml b/common/src/main/res/values/themes.xml new file mode 100644 index 0000000..b9f51b9 --- /dev/null +++ b/common/src/main/res/values/themes.xml @@ -0,0 +1,11 @@ + + + diff --git a/common/src/main/res/xml/backup_rules.xml b/common/src/main/res/xml/backup_rules.xml new file mode 100644 index 0000000..8acd663 --- /dev/null +++ b/common/src/main/res/xml/backup_rules.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/common/src/main/res/xml/data_extraction_rules.xml b/common/src/main/res/xml/data_extraction_rules.xml new file mode 100644 index 0000000..b853a8d --- /dev/null +++ b/common/src/main/res/xml/data_extraction_rules.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/common/src/main/res/xml/usb_device_filter.xml b/common/src/main/res/xml/usb_device_filter.xml new file mode 100644 index 0000000..5337436 --- /dev/null +++ b/common/src/main/res/xml/usb_device_filter.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/common/src/test/java/com/shilapi/xcertplay/DarkModeTest.kt b/common/src/test/java/com/shilapi/xcertplay/DarkModeTest.kt new file mode 100644 index 0000000..f1b90cf --- /dev/null +++ b/common/src/test/java/com/shilapi/xcertplay/DarkModeTest.kt @@ -0,0 +1,19 @@ +package com.shilapi.xcertplay + +import android.content.res.Configuration +import org.junit.Assert.assertFalse +import org.junit.Assert.assertTrue +import org.junit.Test + +class DarkModeTest { + @Test + fun darkModeIsDetectedWithUnrelatedConfigurationBits() { + assertTrue(isDarkMode(Configuration.UI_MODE_NIGHT_YES or Configuration.UI_MODE_TYPE_CAR)) + } + + @Test + fun lightAndUndefinedModesAreNotDark() { + assertFalse(isDarkMode(Configuration.UI_MODE_NIGHT_NO)) + assertFalse(isDarkMode(Configuration.UI_MODE_NIGHT_UNDEFINED)) + } +} diff --git a/common/src/test/java/com/shilapi/xcertplay/DiagnosticExportStoreTest.kt b/common/src/test/java/com/shilapi/xcertplay/DiagnosticExportStoreTest.kt new file mode 100644 index 0000000..157590a --- /dev/null +++ b/common/src/test/java/com/shilapi/xcertplay/DiagnosticExportStoreTest.kt @@ -0,0 +1,119 @@ +package com.shilapi.xcertplay + +import android.content.ContentProvider +import android.content.ContentValues +import android.content.pm.ProviderInfo +import android.database.Cursor +import android.net.Uri +import android.os.ParcelFileDescriptor +import android.provider.MediaStore +import org.junit.Assert.* +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith +import org.robolectric.RobolectricTestRunner +import org.robolectric.RuntimeEnvironment +import org.robolectric.annotation.Config +import org.robolectric.shadows.ShadowContentResolver +import java.io.File +import java.io.IOException + +/** Exercise the Android 10 storage path, including OEM/provider failure responses. */ +@RunWith(RobolectricTestRunner::class) +@Config(sdk = [29], manifest = Config.NONE) +class DiagnosticExportStoreTest { + private lateinit var provider: DownloadsProvider + private val resolver get() = RuntimeEnvironment.getApplication().contentResolver + + @Before fun setup() { + val context = RuntimeEnvironment.getApplication() + provider = DownloadsProvider(File(context.cacheDir, "export-test.txt")) + provider.attachInfo(context, ProviderInfo().apply { authority = "media" }) + ShadowContentResolver.registerProviderInternal("media", provider) + } + + @Test fun android10SavesUtf8ReportToDownloadsAndPublishesAfterClosingIt() { + val report = "DiPlay · diagnostic report\nVideo: H.264\n" + val uri = DiagnosticExportStore.saveToDownloads(resolver, "DiPlay-test.txt", report) + assertEquals(provider.uri, uri) + assertEquals(report, provider.file.readText()) + assertEquals("Download/DiPlay", provider.insertValues!!.getAsString(MediaStore.Downloads.RELATIVE_PATH)) + assertEquals("text/plain", provider.insertValues!!.getAsString(MediaStore.Downloads.MIME_TYPE)) + assertEquals(1, provider.insertValues!!.getAsInteger(MediaStore.Downloads.IS_PENDING)) + assertEquals(0, provider.publishValues!!.getAsInteger(MediaStore.Downloads.IS_PENDING)) + assertEquals(report, provider.contentAtPublish) + assertFalse(provider.deleted) + } + + @Test fun unavailableDownloadsDoesNotReturnFalseSuccess() { + provider.refuseInsert = true + assertThrows(IOException::class.java) { + DiagnosticExportStore.saveToDownloads(resolver, "test.txt", "report") + } + assertNull(provider.publishValues) + assertFalse(provider.deleted) + } + + @Test fun deniedWriteRemovesOnlyTheNewPendingEntry() { + provider.denyWrite = true + assertThrows(SecurityException::class.java) { + DiagnosticExportStore.saveToDownloads(resolver, "test.txt", "report") + } + assertTrue(provider.deleted) + assertNull(provider.publishValues) + } + + @Test fun failedPublishDoesNotLeaveAnInvisibleReport() { + provider.refusePublish = true + assertThrows(IOException::class.java) { + DiagnosticExportStore.saveToDownloads(resolver, "test.txt", "report") + } + assertTrue(provider.deleted) + } + + @Test fun selectedDocumentIsWrittenButNeverDeletedOnFailure() { + provider.denyWrite = true + assertThrows(SecurityException::class.java) { + DiagnosticExportStore.write(resolver, provider.uri, "report") + } + assertFalse(provider.deleted) + } + + private class DownloadsProvider(val file: File) : ContentProvider() { + val uri: Uri = Uri.parse("content://media/external/downloads/41") + var insertValues: ContentValues? = null + var publishValues: ContentValues? = null + var contentAtPublish: String? = null + var deleted = false + var refuseInsert = false + var denyWrite = false + var refusePublish = false + override fun onCreate() = true + override fun insert(uri: Uri, values: ContentValues?): Uri? { + assertEquals(MediaStore.Downloads.EXTERNAL_CONTENT_URI, uri) + insertValues = ContentValues(values) + return if (refuseInsert) null else this.uri + } + override fun openFile(uri: Uri, mode: String): ParcelFileDescriptor { + assertEquals(this.uri, uri) + assertEquals("wt", mode) + if (denyWrite) throw SecurityException("Test provider refused write") + return ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_CREATE or + ParcelFileDescriptor.MODE_WRITE_ONLY or ParcelFileDescriptor.MODE_TRUNCATE) + } + override fun update(uri: Uri, values: ContentValues?, selection: String?, selectionArgs: Array?): Int { + assertEquals(this.uri, uri) + publishValues = ContentValues(values) + contentAtPublish = file.readText() + return if (refusePublish) 0 else 1 + } + override fun delete(uri: Uri, selection: String?, selectionArgs: Array?): Int { + assertEquals(this.uri, uri) + deleted = true + file.delete() + return 1 + } + override fun getType(uri: Uri) = "text/plain" + override fun query(uri: Uri, projection: Array?, selection: String?, selectionArgs: Array?, sortOrder: String?): Cursor? = null + } +} diff --git a/common/src/test/java/com/shilapi/xcertplay/DiagnosticRedactorTest.kt b/common/src/test/java/com/shilapi/xcertplay/DiagnosticRedactorTest.kt new file mode 100644 index 0000000..8bb67e0 --- /dev/null +++ b/common/src/test/java/com/shilapi/xcertplay/DiagnosticRedactorTest.kt @@ -0,0 +1,63 @@ +package com.shilapi.xcertplay + +import org.junit.Assert.* +import org.junit.Test +import java.nio.file.Files + +class DiagnosticRedactorTest { + @Test fun payloadAndCredentialLinesNeverReachReports() { + for (line in listOf("TRACE IAP2 tx key", "hotspot passphrase=secret", "token=secret", "certificate bytes=607", "rx body={phone: 'Jane'}", "ok\nsecret", "wifi ssid=Home", "wireless name=Jane Smith’s iPhone")) { + assertNull(line, DiagnosticRedactor.redact(line)) + } + } + @Test fun stateTransitionsSurviveWithoutAddressesOrIdentifiers() { + val line = DiagnosticRedactor.redact("connected peer=C0:A6:00:29:58:0A ip=192.168.31.71 id=0123456789abcdef0123456789abcdef ipv6=fe80::1234:5678:abcd:9%p2p0")!! + assertTrue(line.contains("connected")) + assertFalse(line.contains("C0:A6")); assertFalse(line.contains("192.168")); assertFalse(line.contains("012345")); assertFalse(line.contains("fe80")) + } + @Test fun logRotationIsBoundedAndRedactionHappensBeforeDisk() { + val folder = Files.createTempDirectory("diplay-log-test").toFile() + try { + val log = SessionLogFile(folder.resolve("diplay.log")) + log.reset("started") + log.append("password=secret") + repeat(1600) { log.append("connection state " + "x".repeat(690)) } + log.append("CarPlay connected") + log.close() + assertTrue(folder.resolve("diplay.log").length() <= SessionLogFile.MAX_BYTES + 701) + assertTrue(folder.resolve("previous.log").length() <= SessionLogFile.MAX_BYTES + 701) + assertTrue(folder.resolve("diplay.log").readText().contains("CarPlay connected")) + assertFalse(folder.listFiles()!!.any { it.readText().contains("secret") }) + } finally { folder.deleteRecursively() } + } + @Test fun failuresSurviveLaterSuccessfulSessionsAndOldestHistoryExpires() { + val folder = Files.createTempDirectory("diplay-history-test").toFile() + try { + repeat(10) { session -> + SessionLogFile(folder.resolve("diplay.log")).use { + it.reset("session=$session") + it.append(if (session == 3) "Wi-Fi P2P create rejected code=0" else "CarPlay connected") + it.append("password=secret") + } + } + val history = SessionLogFile.REPORT_NAMES.map { folder.resolve(it).readText() } + assertEquals(8, folder.listFiles()!!.size) + assertTrue(history.first().contains("session=2")) + assertTrue(history.last().contains("session=9")) + assertTrue(history.any { it.contains("rejected code=0") }) + assertFalse(history.any { it.contains("secret") }) + } finally { folder.deleteRecursively() } + } + @Test fun safeWifiMetadataSurvivesWithoutWeakeningCredentialFilters() { + val lines = listOf( + "Wi-Fi P2P preflight wifiEnabled=true locationEnabled=false permissionGranted=true stationMHz=5180", + "Wi-Fi P2P create mode=FIXED_2_GHZ frequencyMHz=2437", + "Wi-Fi P2P create rejected code=0 reason=generic error", + "Wi-Fi P2P ready mode=FIXED_2_GHZ band=2.4 GHz channel=6 frequencyMHz=2437", + "Wi-Fi P2P channel requestedMHz=2437 actualMHz=2412 matched=false", + "wireless hotspot backend=Wi-Fi P2P iface=p2p0 host=192.168.49.1 band=5 GHz channel=36 frequency=5180MHz", + ) + for (line in lines) assertNotNull(line, DiagnosticRedactor.redact(line)) + assertFalse(DiagnosticRedactor.redact(lines.last())!!.contains("192.168.49.1")) + } +} diff --git a/common/src/test/java/com/shilapi/xcertplay/DisplayDiagnosticSnapshotTest.kt b/common/src/test/java/com/shilapi/xcertplay/DisplayDiagnosticSnapshotTest.kt new file mode 100644 index 0000000..edf2aab --- /dev/null +++ b/common/src/test/java/com/shilapi/xcertplay/DisplayDiagnosticSnapshotTest.kt @@ -0,0 +1,60 @@ +package com.shilapi.xcertplay + +import org.junit.Assert.* +import org.junit.Test +import org.junit.runner.RunWith +import org.robolectric.RobolectricTestRunner +import org.robolectric.RuntimeEnvironment +import org.robolectric.annotation.Config + +@RunWith(RobolectricTestRunner::class) +@Config(sdk = [29], manifest = Config.NONE) +class DisplayDiagnosticSnapshotTest { + private val context get() = RuntimeEnvironment.getApplication() + + @Test fun requestedSizeSurvivesAFallbackAndSubsequentPreferenceReset() { + DisplayDiagnosticSnapshot.selection(context, 100, 75, true) + DisplayDiagnosticSnapshot.begin(context, + "Display request selected=Smaller percent=75 surface=1920x1080 candidate=2560x1440", + "Decoder capability codec=c2.test hardware=true sizeSupported=false result=canvas_dimensions_unsupported", + "Display effective percent=100 canvas=1920x1080 decision=canvas_dimensions_unsupported") + AirPlayPersistence.saveUiScalePercent(context, 100) + val report = DisplayDiagnosticSnapshot.report(context) + assertTrue(report.contains("selected=75% reconnect=true")) + assertTrue(report.contains("percent=75")) + assertTrue(report.contains("percent=100")) + assertTrue(report.contains("canvas_dimensions_unsupported")) + } + + @Test fun actualOutputAndPhoneVersionsSurviveReportRedaction() { + val attempt = DisplayDiagnosticSnapshot.begin(context, "Display request selected=Smaller", + "Decoder capability result=supported", "Display effective canvas=2560x1440") + DisplayDiagnosticSnapshot.record(context, attempt, "Phone display peer model=iPhone11,2 ios=18.7.10 airplay=950.7.1") + DisplayDiagnosticSnapshot.record(context, attempt, "Video: decoder=c2.mtk.avc.decoder mime=video/avc size=2560x1440") + DisplayDiagnosticSnapshot.record(context, attempt, "Video: output format requested=2560x1440 coded=1920x1088 crop=0,0,1919,1079") + val report = DisplayDiagnosticSnapshot.report(context) + assertTrue(report.contains("ios=18.7.10")) + assertTrue(report.contains("decoder=c2.mtk.avc.decoder")) + assertTrue(report.contains("coded=1920x1088")) + assertTrue(report.contains("crop=0,0,1919,1079")) + } + + @Test fun reconnectClearsOldOutputAndRejectsLateCallbacks() { + val old = DisplayDiagnosticSnapshot.begin(context, "old request", "old capability", "old effective") + DisplayDiagnosticSnapshot.record(context, old, "Video: output format coded=2560x1440") + val current = DisplayDiagnosticSnapshot.begin(context, "new request", "new capability", "new effective") + DisplayDiagnosticSnapshot.record(context, old, "Video: output format coded=800x480") + assertFalse(DisplayDiagnosticSnapshot.report(context).contains("coded=")) + assertEquals(current, DisplayDiagnosticSnapshot.currentAttempt(context)) + } + + @Test fun onlySupportedMetadataIsStoredAndItIsBounded() { + val attempt = DisplayDiagnosticSnapshot.begin(context, "request", "capability", "effective") + DisplayDiagnosticSnapshot.record(context, attempt, "payload=secret") + DisplayDiagnosticSnapshot.record(context, attempt, "Video: output format password=secret") + DisplayDiagnosticSnapshot.record(context, attempt, "Video: decoder=" + "x".repeat(2000)) + val report = DisplayDiagnosticSnapshot.report(context) + assertFalse(report.contains("secret")) + assertTrue(report.lines().all { it.length <= 700 }) + } +} diff --git a/common/src/test/java/com/shilapi/xcertplay/WifiP2pGroupManagerTest.kt b/common/src/test/java/com/shilapi/xcertplay/WifiP2pGroupManagerTest.kt new file mode 100644 index 0000000..aa5bc47 --- /dev/null +++ b/common/src/test/java/com/shilapi/xcertplay/WifiP2pGroupManagerTest.kt @@ -0,0 +1,375 @@ +package com.shilapi.xcertplay + +import android.Manifest +import android.content.Context +import android.net.wifi.SupplicantState +import android.net.wifi.WifiManager +import android.net.wifi.p2p.WifiP2pConfig +import android.net.wifi.p2p.WifiP2pGroup +import android.net.wifi.p2p.WifiP2pInfo +import android.net.wifi.p2p.WifiP2pManager +import com.shilapi.xcertplay.network.P2pResetRequiredException +import com.shilapi.xcertplay.network.WifiP2pGroupManager +import org.junit.Assert.* +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith +import org.robolectric.RobolectricTestRunner +import org.robolectric.RuntimeEnvironment +import org.robolectric.Shadows.shadowOf +import org.robolectric.annotation.Config +import org.robolectric.annotation.Implementation +import org.robolectric.annotation.Implements +import org.robolectric.shadows.ShadowWifiP2pManager +import org.robolectric.util.ReflectionHelpers +import java.net.InetAddress +import java.util.concurrent.ExecutionException +import java.util.concurrent.Executors +import java.util.concurrent.TimeUnit + +@RunWith(RobolectricTestRunner::class) +@Config(sdk = [32], manifest = Config.NONE, + shadows = [WifiP2pGroupManagerTest.P2pRadio::class, WifiP2pGroupManagerTest.P2pChannel::class]) +class WifiP2pGroupManagerTest { + private val context get() = RuntimeEnvironment.getApplication() + private val radio get() = shadowOf(context.getSystemService(WifiP2pManager::class.java)) as P2pRadio + + @Before fun setup() { + shadowOf(context).grantPermissions(Manifest.permission.ACCESS_FINE_LOCATION) + val wifi = context.getSystemService(WifiManager::class.java) + wifi.isWifiEnabled = true + shadowOf(wifi.connectionInfo).setFrequency(5180) + shadowOf(wifi.connectionInfo).setSupplicantState(SupplicantState.COMPLETED) + } + + @Test fun disconnectedStationCannotPinNewGroupToStaleTwoGhzChannel() { + val info = context.getSystemService(WifiManager::class.java).connectionInfo + shadowOf(info).setFrequency(2462) + shadowOf(info).setSupplicantState(SupplicantState.DISCONNECTED) + val logs = mutableListOf() + WifiP2pGroupManager(context, logs::add).use { manager -> + background { manager.start(5000) } + assertEquals(listOf(5180), radio.requests.map { it?.groupOwnerBand }) + assertTrue(logs.any { it.contains("stationMHz=unknown stationState=DISCONNECTED reportedStationMHz=2462") }) + } + } + + @Test fun associatingStationDoesNotSelectOrReuseStaleChannel() { + seedMemory(station = 2462) + val info = context.getSystemService(WifiManager::class.java).connectionInfo + shadowOf(info).setFrequency(2462) + shadowOf(info).setSupplicantState(SupplicantState.ASSOCIATING) + WifiP2pGroupManager(context).use { manager -> + background { manager.start(5000) } + assertEquals(listOf(5180), radio.requests.map { it?.groupOwnerBand }) + } + } + + private val memory get() = context.getSharedPreferences("carplay_wifi_p2p_success", Context.MODE_PRIVATE) + private fun seedMemory(kind: String = "frequency", requested: Int = 2437, station: Int = 5180): String { + val encoded = "$kind|$requested|2437|$station|00000000-0000-0000-0000-000000000001" + memory.edit().putString("confirmed", encoded).commit() + return encoded + } + + @Test fun hotspotCreationAloneAndLateConfirmationAfterCloseAreNeverLearned() { + val manager = WifiP2pGroupManager(context) + background { manager.start(5000) } + assertNull(memory.getString("confirmed", null)) + manager.close() + manager.onCarPlayConfirmed() + assertNull(memory.getString("confirmed", null)) + } + + @Test fun confirmedTwoGhzConfigurationSurvivesManagerRecreationAndGoesFirst() { + radio.fixed24Only = true + WifiP2pGroupManager(context).use { manager -> + val info = background { manager.start(6000) } + assertEquals(3, radio.requests.size) + assertNull(memory.getString("confirmed", null)) + manager.onCarPlayConfirmed() + val record = memory.getString("confirmed", null)!! + manager.onCarPlayConfirmed() + assertEquals(record, memory.getString("confirmed", null)) + assertTrue(record.startsWith("frequency|2437|2437|5180|")) + assertFalse(record.contains(info.ssid) || record.contains(info.passphrase)) + } + radio.requests.clear() + val logs = mutableListOf() + WifiP2pGroupManager(context, logs::add).use { manager -> + val info = background { manager.start(5000) } + assertEquals(6, info.channel) + assertEquals(listOf(2437), radio.requests.map { it?.groupOwnerBand }) + assertTrue(logs.any { it.contains("remembered first mode=FIXED_2_GHZ") }) + manager.onCarPlayConfirmed() + } + } + + @Test fun rejectedRememberedChannelIsClearedAndNewSuccessReplacesIt() { + seedMemory() + radio.fixed24Only = true + radio.allowed24 = setOf(2462) + WifiP2pGroupManager(context).use { manager -> + val info = background { manager.start(7000) } + assertEquals(listOf(2437, 5180, 5745, 2412, 2462), radio.requests.map { it?.groupOwnerBand }) + assertEquals(11, info.channel) + assertNull(memory.getString("confirmed", null)) + manager.onCarPlayConfirmed() + assertTrue(memory.getString("confirmed", null)!!.startsWith("frequency|2462|2462|")) + } + } + + @Test fun rememberedGroupThatNeverReachesCarPlayIsEvictedOnClose() { + seedMemory() + WifiP2pGroupManager(context).use { manager -> background { manager.start(5000) } } + assertEquals(listOf(2437), radio.requests.map { it?.groupOwnerBand }) + assertNull(memory.getString("confirmed", null)) + } + + @Test fun changedInternetChannelUsesCurrentAlignmentInsteadOfOldPreference() { + val previous = seedMemory() + shadowOf(context.getSystemService(WifiManager::class.java).connectionInfo).setFrequency(2412) + val logs = mutableListOf() + WifiP2pGroupManager(context, logs::add).use { manager -> background { manager.start(5000) } } + assertEquals(listOf(2412), radio.requests.map { it?.groupOwnerBand }) + assertEquals(previous, memory.getString("confirmed", null)) + assertTrue(logs.any { it.contains("skipped=station_channel_changed") }) + } + + @Test fun rememberedDefaultUsesSystemCreationInsteadOfInventingAFixedChannel() { + seedMemory(kind = "system", requested = 0) + WifiP2pGroupManager(context).use { manager -> + background { manager.start(5000) } + assertEquals(1, radio.requests.size) + assertNull(radio.requests.single()) + manager.onCarPlayConfirmed() + assertTrue(memory.getString("confirmed", null)!!.startsWith("system|0|2437|")) + } + } + + @Test fun malformedStoredPreferenceDoesNotBlockConnection() { + memory.edit().putInt("confirmed", 123).commit() + WifiP2pGroupManager(context).use { manager -> + background { manager.start(5000) } + assertEquals(listOf(5180), radio.requests.map { it?.groupOwnerBand }) + manager.onCarPlayConfirmed() + assertTrue(memory.getString("confirmed", null)!!.startsWith("frequency|5180|5180|")) + } + } + + @Test fun staleCloseDoesNotEraseANewerConfirmedRecord() { + seedMemory() + WifiP2pGroupManager(context).use { manager -> + background { manager.start(5000) } + val newer = "frequency|2462|2462|5180|00000000-0000-0000-0000-000000000002" + memory.edit().putString("confirmed", newer).commit() + } + assertTrue(memory.getString("confirmed", null)!!.startsWith("frequency|2462|")) + } + + @Test fun workingRadioKeepsAlignedChannelAndRemovesOnlyItsGroupOnClose() { + val logs = mutableListOf() + WifiP2pGroupManager(context, logs::add).use { manager -> + val info = background { manager.start(6000) } + assertEquals(5180, info.frequencyMHz) + assertEquals(1, radio.requests.size) + assertEquals(5180, radio.requests.single()!!.groupOwnerBand) + assertEquals(info.ssid, context.getSharedPreferences("carplay_wifi_p2p", Context.MODE_PRIVATE).getString("owned_ssid", null)) + assertTrue(logs.any { it.contains("ready mode=ALIGNED_5_GHZ") }) + } + assertEquals(1, radio.removals) + assertTrue(context.getSystemService(WifiManager::class.java).isWifiEnabled) + } + + @Test fun genericErrorsRecoverWithRealSystemCredentialsAndChannel() { + radio.rejectCustom = true + val logs = mutableListOf() + WifiP2pGroupManager(context, logs::add).use { manager -> + val info = background { manager.start(6000) } + assertEquals(6, radio.requests.size) + assertNull(radio.requests.last()) + assertEquals("DIRECT-system-test", info.ssid) + assertEquals("test-generated-key", info.passphrase) + assertEquals(6, info.channel) + assertEquals("2.4 GHz", info.bandLabel) + assertEquals(info.ssid, context.getSharedPreferences("carplay_wifi_p2p", Context.MODE_PRIVATE).getString("owned_ssid", null)) + assertTrue(logs.all { DiagnosticRedactor.redact(it) != null }) + assertFalse(logs.any { it.contains(info.ssid) || it.contains(info.passphrase) }) + } + assertEquals(1, radio.removals) + } + + @Test fun twoGhzOnlyNoAcsDriverConnectsUsingAnExplicitChannelAndOwnedCredentials() { + radio.fixed24Only = true + val logs = mutableListOf() + WifiP2pGroupManager(context, logs::add).use { manager -> + val info = background { manager.start(6000) } + assertEquals(listOf(5180, 5745, 2437), radio.requests.map { it?.groupOwnerBand }) + assertTrue(radio.requests.all { it != null && it.groupOwnerBand > 1000 }) + assertEquals(2437, info.frequencyMHz) + assertEquals(6, info.channel) + assertEquals("2.4 GHz", info.bandLabel) + assertTrue(info.ssid.startsWith("DIRECT-dp")) + assertEquals(radio.requests.last()!!.passphrase, info.passphrase) + assertTrue(logs.any { it.contains("ready mode=FIXED_2_GHZ") }) + assertTrue(logs.any { it.contains("requestedMHz=2437 actualMHz=2437 matched=true") }) + assertTrue(logs.all { DiagnosticRedactor.redact(it) != null }) + assertFalse(logs.any { it.contains(info.ssid) || it.contains(info.passphrase) }) + } + assertEquals(1, radio.removals) + assertTrue(context.getSystemService(WifiManager::class.java).isWifiEnabled) + assertEquals(5180, context.getSystemService(WifiManager::class.java).connectionInfo.frequency) + } + + @Test fun twoGhzStationAlignsImmediatelyWithoutFiveGhzOrAutomaticRequests() { + shadowOf(context.getSystemService(WifiManager::class.java).connectionInfo).setFrequency(2462) + radio.fixed24Only = true + WifiP2pGroupManager(context).use { manager -> + val info = background { manager.start(5000) } + assertEquals(listOf(2462), radio.requests.map { it?.groupOwnerBand }) + assertEquals(11, info.channel) + } + } + + @Test fun channelRejectionsReachChannelElevenWithoutAutomaticSelection() { + radio.fixed24Only = true + radio.allowed24 = setOf(2462) + WifiP2pGroupManager(context).use { manager -> + val info = background { manager.start(6000) } + assertEquals(listOf(5180, 5745, 2437, 2412, 2462), radio.requests.map { it?.groupOwnerBand }) + assertEquals(11, info.channel) + } + } + + @Test fun reportedChannelIsUsedWhenFirmwareIgnoresTheRequestedFrequency() { + radio.fixed24Only = true + radio.reportedFrequency = 2412 + val logs = mutableListOf() + WifiP2pGroupManager(context, logs::add).use { manager -> + val info = background { manager.start(6000) } + assertEquals(1, info.channel) + assertTrue(logs.any { it.contains("requestedMHz=2437 actualMHz=2412 matched=false") }) + } + } + + @Test fun unknownExistingGroupIsNeverRemovedOrReplaced() { + radio.group = radio.makeGroup(null) + WifiP2pGroupManager(context).use { manager -> + assertTrue(failure { manager.start(3000) } is P2pResetRequiredException) + } + assertTrue(radio.requests.isEmpty()) + assertEquals(0, radio.removals) + } + + @Test fun groupAppearingAfterRejectionIsNotRemovedDuringFallback() { + radio.rejectCustom = true + radio.competingGroup = true + WifiP2pGroupManager(context).use { manager -> + assertTrue(failure { manager.start(3000) } is P2pResetRequiredException) + } + assertEquals(1, radio.requests.size) + assertEquals(0, radio.removals) + } + + @Test fun missingSystemCredentialsDoNotReuseTheRejectedCustomCredentials() { + radio.rejectCustom = true + radio.missingCredentials = true + WifiP2pGroupManager(context).use { manager -> + assertTrue(failure { manager.start(4000) }.message!!.contains("usable Wi-Fi P2P group")) + } + assertEquals(6, radio.requests.size) + assertEquals(1, radio.removals) + } + + @Test fun unansweredCreateIsNotFollowedByASecondRequest() { + radio.noCreateReply = true + WifiP2pGroupManager(context).use { manager -> + assertTrue(failure { manager.start(300) }.message!!.contains("group creation")) + } + assertEquals(1, radio.requests.size) + assertEquals(0, radio.removals) + } + + @Test fun disabledWifiHasAnActionableErrorWithoutCreatingAnything() { + context.getSystemService(WifiManager::class.java).isWifiEnabled = false + WifiP2pGroupManager(context).use { manager -> + assertTrue(failure { manager.start(3000) }.message!!.contains("Turn on Wi-Fi")) + } + assertTrue(radio.requests.isEmpty()) + assertEquals(0, radio.removals) + } + + private fun failure(block: () -> Any): Throwable { + try { background(block); fail("Expected failure") } + catch (failure: ExecutionException) { return failure.cause!! } + error("unreachable") + } + + private fun background(block: () -> T): T { + val executor = Executors.newSingleThreadExecutor() + return try { executor.submit { block() }.get(10, TimeUnit.SECONDS) } + finally { executor.shutdownNow() } + } + + // Robolectric's manager creates a channel without the framework's AsyncChannel transport. + @Implements(WifiP2pManager.Channel::class) + class P2pChannel { + @Implementation protected fun close() {} + } + + @Implements(WifiP2pManager::class) + class P2pRadio : ShadowWifiP2pManager() { + val requests = mutableListOf() + var group: WifiP2pGroup? = null + var removals = 0 + var rejectCustom = false + var competingGroup = false + var missingCredentials = false + var noCreateReply = false + var fixed24Only = false + var allowed24 = setOf(2412, 2437, 2462) + var reportedFrequency: Int? = null + + @Implementation protected fun requestP2pState(channel: WifiP2pManager.Channel, listener: WifiP2pManager.P2pStateListener) { + listener.onP2pStateAvailable(WifiP2pManager.WIFI_P2P_STATE_ENABLED) + } + + @Implementation override fun requestGroupInfo(channel: WifiP2pManager.Channel, listener: WifiP2pManager.GroupInfoListener) { + listener.onGroupInfoAvailable(group) + } + + @Implementation override fun requestConnectionInfo(channel: WifiP2pManager.Channel, listener: WifiP2pManager.ConnectionInfoListener) { + listener.onConnectionInfoAvailable(WifiP2pInfo().apply { + groupFormed = true + isGroupOwner = true + groupOwnerAddress = InetAddress.getByName("192.168.49.1") + }) + } + + @Implementation override fun createGroup(channel: WifiP2pManager.Channel, config: WifiP2pConfig?, listener: WifiP2pManager.ActionListener) { + requests += config + if (noCreateReply) return + if ((rejectCustom && config != null) || (fixed24Only && config?.groupOwnerBand !in allowed24)) { + if (competingGroup) group = makeGroup(null) + listener.onFailure(WifiP2pManager.ERROR) + } else { + group = makeGroup(config) + listener.onSuccess() + } + } + + @Implementation override fun removeGroup(channel: WifiP2pManager.Channel, listener: WifiP2pManager.ActionListener) { + removals++ + group = null + listener.onSuccess() + } + + fun makeGroup(config: WifiP2pConfig?) = WifiP2pGroup().apply { + shadowOf(this).setIsGroupOwner(true) + shadowOf(this).setNetworkName(config?.networkName ?: "DIRECT-system-test") + shadowOf(this).setPassphrase(if (missingCredentials) null else config?.passphrase ?: "test-generated-key") + shadowOf(this).setInterface("p2p-test-missing") + ReflectionHelpers.setField(this, "mFrequency", reportedFrequency ?: config?.groupOwnerBand ?: 2437) + } + } +} diff --git a/docs/BUILD.md b/docs/BUILD.md new file mode 100644 index 0000000..9971a25 --- /dev/null +++ b/docs/BUILD.md @@ -0,0 +1,17 @@ +# Source-only builds + +Public APK distribution is suspended while accessory authentication is reviewed. +The recovered identity must not be extracted from old releases, imported or bundled again. +Local compilation does not make a distributed private key confidential. + +Requirements: JDK 25, Android SDK 37, NDK 28.2.13676358 and the included Gradle wrapper. + +```sh +./gradlew :shared:testDebugUnitTest :common:testDebugUnitTest :mobile:lintDebug :mobile:assembleDebug +``` + +This produces a development APK without accessory identity assets. The current product bootstrap requires authentication provisioning, so this build does not provide a working standalone CarPlay connection. It is for source validation only. + +The automatic `.private/assets` import has been removed. The mobile pre-build check rejects credential files in APK asset source directories. The retired `scripts/build-beta.py` exits without building. Tests generate fresh self-signed synthetic identities at runtime; no static private key is stored in this repository. + +A future distributable build needs an authorized authentication/provisioning design. The separate Android release-signing key remains local and must never be committed. See SECURITY.md. diff --git a/docs/COMPATIBILITY.md b/docs/COMPATIBILITY.md new file mode 100644 index 0000000..309b801 --- /dev/null +++ b/docs/COMPATIBILITY.md @@ -0,0 +1,3 @@ +# Distribution suspended + +The 0.1.0 APK has been withdrawn. Do not install or redistribute it. No replacement APK is available. See [SECURITY.md](../SECURITY.md) and [source-only build instructions](BUILD.md). diff --git a/docs/INSTALL.md b/docs/INSTALL.md new file mode 100644 index 0000000..309b801 --- /dev/null +++ b/docs/INSTALL.md @@ -0,0 +1,3 @@ +# Distribution suspended + +The 0.1.0 APK has been withdrawn. Do not install or redistribute it. No replacement APK is available. See [SECURITY.md](../SECURITY.md) and [source-only build instructions](BUILD.md). diff --git a/docs/PRIVACY.md b/docs/PRIVACY.md new file mode 100644 index 0000000..8bf82fe --- /dev/null +++ b/docs/PRIVACY.md @@ -0,0 +1,11 @@ +# Privacy and diagnostics + +DiPlay's product flow uses local authentication and a direct USB/Wi-Fi connection to the iPhone. No account, remote authentication service or automatic diagnostic upload is used. The iPhone's CarPlay apps have their own internet and privacy behavior. + +The head unit stores app preferences, paired-device selections, pairing data and bounded diagnostic logs in app storage. Authentication and pairing material are kept out of Android backup. Uninstalling removes app-private data; exported reports in Downloads remain until you delete them. + +Diagnostic export is initiated by you. Reports include app/device versions, display settings and negotiation, connection transitions, Wi-Fi band/channel and state, and decoder recovery events. The exporter filters protocol payloads, credential-bearing lines and common identifiers. Redaction cannot promise to recognize every vendor-specific string: review reports before posting them publicly. A GitHub issue is public. + +Microphone access supports Siri and calls. Bluetooth/Nearby devices and Wi-Fi/Location permissions support discovery and transport. The optional local VPN permission supports the USB link; it does not provide a remote internet VPN. + +The static website has no analytics script or account. GitHub Pages, GitHub and Telegram apply their own policies when you use those services. diff --git a/docs/TESTING.md b/docs/TESTING.md new file mode 100644 index 0000000..309b801 --- /dev/null +++ b/docs/TESTING.md @@ -0,0 +1,3 @@ +# Distribution suspended + +The 0.1.0 APK has been withdrawn. Do not install or redistribute it. No replacement APK is available. See [SECURITY.md](../SECURITY.md) and [source-only build instructions](BUILD.md). diff --git a/docs/THIRD_PARTY_NOTICES.md b/docs/THIRD_PARTY_NOTICES.md new file mode 100644 index 0000000..6e9f1a5 --- /dev/null +++ b/docs/THIRD_PARTY_NOTICES.md @@ -0,0 +1,37 @@ +# Credits and license notices + +## Receiver + +DiPlay is a modified version of [xcertplay by shilapi](https://github.com/shilapi/xcertplay). The upstream receiver is licensed under GNU GPL version 3; the full text is in `LICENSE` and the original README is retained in `docs/UPSTREAM-README.md`. + +Upstream credits [LIVI](https://github.com/f-io/LIVI) and [Showcase](https://github.com/amineross/showcase) for protocol research. Existing source comments and attribution are preserved. + +## Home and settings UI + +`common/src/main/java/com/shilapi/xcertplay/DiPlayActivity.kt` adapts the palette, visual arrangement and interface copy of the [DiAuto project](https://github.com/shihabal3amri/DiAuto). DiAuto's source is licensed under AGPL version 3. The UI file is marked AGPL-3.0-only; its license text is included in `docs/licenses/DiAuto-AGPL-3.0.txt`. + +## CarPlay icon + +The unmodified icon was obtained from Apple's developer site at: + +https://developer.apple.com/assets/elements/icons/carplay/carplay-96x96_2x.png + +CarPlay and the CarPlay icon are Apple Inc. marks/assets. This asset is not covered by the project's open-source code license. Its use here does not imply Apple approval or certification. + +## Runtime dependencies + +- AndroidX and Jetpack Compose — Android Open Source Project; Apache License 2.0. +- Kotlin standard library — JetBrains; Apache License 2.0. +- Bouncy Castle 1.79 — The Legion of the Bouncy Castle Inc.; Bouncy Castle license (MIT-style). +- JmDNS 3.6.3 — JmDNS contributors; Apache License 2.0. +- SLF4J — QOS.ch; MIT license. + +Gradle dependency declarations and version catalog accompany the source. License files available in the resolved artifacts are included under `docs/licenses/dependencies/`. + +## Experimental authentication data + +The withdrawn 0.1.0 preview APK included an accessory certificate/key pair recovered from public Carlinkit C2Air Allwinner V821 firmware during the owner's local investigation. These data are not newly generated Apple-issued credentials for DiPlay and are not relicensed as project source code. That distribution has been suspended. The credential must not be redistributed in new builds; the current source snapshot contains no accessory identity files. The source archive does not contain the private key, and the separate Android APK-signing key is never distributed. + +## Download website + +The static site layout, CSS and generator adapt DiAuto (AGPL-3.0). The AGPL license text is included with the source. diff --git a/docs/UPSTREAM-README.md b/docs/UPSTREAM-README.md new file mode 100644 index 0000000..ad4a2c3 --- /dev/null +++ b/docs/UPSTREAM-README.md @@ -0,0 +1,117 @@ +

    + xcertplay icon +

    xcertplay

    +
    English | 中文 +

    An Android head-unit CarPlay receiver. It supports connecting to the MFi chip through a CH341 I2C bridge or directly through the board's I2C controller, and supports both wired and wireless CarPlay connections.

    +
    + +## Features + +- CarPlay host applications for Android and Android Automotive OS. +- Support for MFI chips connected through a CH341 bridge or native + `/dev/i2c-N` devices, and Remote MFI authentication (see the API below). +- Wired and wireless CarPlay connections. +- CarPlay Ultra triggering (the protocol stack is untested/incomplete, but it + can trigger the CarPlay Ultra prompt on an iPhone). +- Voice, navigation, and music multi-channel audio output mapped to the + corresponding Android channels. +- Dynamic Activity resizing with automatic re-handshaking to the new + resolution. +- Vehicle head-unit location reporting. +- Android 9 (API 28) support. + +## Usage + +1. Pair your iPhone with the head unit via Bluetooth. +2. In the app, swipe down with three fingers to open the Settings page. +3. Make sure all the settings are configured as desired. +4. Scroll to the bottom and select `Save & Reconnect`. +5. Connect your MFi chip using the method you selected. +6. Wait for the connection to complete, then enjoy. + +## TODO + +- [ ] Bluetooth activity popup +- [ ] more gesture for setting page +- [ ] debug log caused stuck bug +- [ ] microphone passthrough bug + +## Current progress + +It works 👍. It has been tested on car head units and phones. If you encounter +an incompatible car head unit, please open an issue and attach your log from +`/sdcard/Android/data/com.shilapi.xcertplay/files/logs/xcertplay.log`. + +Adapter board: [CH341-to-MFI](https://github.com/shilapi/ch341-to-mfi-chip) + +Waiting for the MFI chip adapter board to arrive... + +## Project structure + +| Path | Purpose | +| --- | --- | +| `common/` | Shared CarPlay host activity, settings UI, persistence, and app resources used by both targets. | +| `mobile/` | Standard Android target using the shared CarPlay host UI. | +| `automotive/` | Android Automotive OS target with the shared host UI and advanced audio channel mapping. | +| `shared/` | Car App Library code plus the CH341, I2C, MFi, iPhone, iAP2, NCM, VPN, AirPlay, and media implementations. | + +## Remote MFI + +The Remote MFi client treats a remote service as an MFi chip for remote calls, +or uses BAA authentication. Remote authentication avoids the process of +connecting to a local MFi chip for authentication. + +### Endpoints + +| Method | Path | Purpose | Request body | Success response | Failure response | +| --- | --- | --- | --- | --- | --- | +| `GET` | `/mfi/certificate` | Get the MFi chip version, certificate type, and certificate contents; cached by the client after the first call | None | Certificate JSON | `{"detail":"..."}` | +| `POST` | `/mfi/sign` | Sign the challenge | `{"challenge":"...","requestId":"..."}` | `{"signature":"..."}` | `{"detail":"..."}` | +| `POST` | `/mfi/reset` | Request a reset of the remote MFi chip | `{}` | `{"detail":""}` | `{"detail":"..."}` | + +(Optional) Standard Bearer Authentication can be used for verification. + +**Currently, only BAA Authentication has been tested.** + +## Requirements + +- JDK 17 or newer to launch Gradle. The daemon resolves Java 25 through the + Gradle toolchain. +- Android SDK Platform 37. +- Android 9 (API 28) or newer. + On Android 9, Wi-Fi P2P 5 GHz mode is unavailable and LocalOnlyHotspot is used instead. +- Android NDK `28.2.13676358`. +- A physical USB Host/OTG Android device and MFi hardware are required for + hardware validation. + +## Build + +On Windows PowerShell: + +```powershell +$env:JAVA_HOME = "C:\Program Files\Android\Android Studio\jbr" +.\gradlew.bat :shared:testDebugUnitTest :common:lintDebug :mobile:lintDebug :automotive:lintDebug :mobile:assembleDebug :automotive:assembleDebug +``` + +On macOS or Linux: + +```bash +./gradlew :shared:testDebugUnitTest :common:lintDebug :mobile:lintDebug :automotive:lintDebug :mobile:assembleDebug :automotive:assembleDebug +``` + +Unsigned release APKs: + +```powershell +.\gradlew.bat :mobile:assembleRelease :automotive:assembleRelease +``` + +## Acknowledgements + +Thanks to [LIVI](https://github.com/f-io/LIVI) for providing important +reference for this project. +Thanks to the [showcase](https://github.com/amineross/showcase) project for +providing important reference for the BAA authentication in this project. + +## License + +Licensed under the [GNU General Public License v3.0](LICENSE). diff --git a/docs/UPSTREAM-README.zh-CN.md b/docs/UPSTREAM-README.zh-CN.md new file mode 100644 index 0000000..9b4366f --- /dev/null +++ b/docs/UPSTREAM-README.zh-CN.md @@ -0,0 +1,98 @@ +
    + xcertplay icon +

    xcertplay

    + English | 中文 +

    xcertplay 是面向 Android 车机的 CarPlay 接收端项目。支持通过 CH341 I2C 桥接到 MFi 芯片,亦可通过板载 I2C 控制器直连,支持 CarPlay 有线和无线连接。

    +
    + +## Features + +- 面向 Android 和 Android Automotive OS 的 CarPlay 主机应用。 +- 支持 CH341 桥接 MFI 芯片、原生 `/dev/i2c-N` 设备连接的 MFI芯片、Remote MFI 认证(API见下)。 +- 支持 CarPlay 有线或无线连接。 +- 支持触发 CarPlay Ultra (未测试/未完成的协议栈,但是确实可以在 iPhone 上触发 CarPlay Ultra 的提示)。 +- 支持语音、导航、音乐多通道音频输出并 mapping 至 Android 的对应通道。 +- 支持动态 Activity resize ,并自动重新握手至新的分辨率。 +- 支持车机位置回传。 +- 支持 Android 9 (API 28) 。 + +## 使用方法 + +1. 通过蓝牙将 iPhone 与车机配对。 +2. 在应用中用三指向下滑动,打开设置页面。 +3. 确认所有设置均已按需配置。 +4. 滑动到底部,选择 `Save & Reconnect`。 +5. 按照你选择的方式连接 MFi 芯片。 +6. 等待连接完成,然后开始使用。 + +## 当前进度 + +他运转👍,已在车机/手机平台测试,如果出现部分车机不适配的情况欢迎 issue (并附上你的 log ,位于 `/sdcard/Android/data/com.shilapi.xcertplay/files/logs/xcertplay.log`) + +转接板:[CH341-to-MFI](https://github.com/shilapi/ch341-to-mfi-chip) + +正在 MFI 芯片转接板到货... + +## 工程结构 + +| 路径 | 用途 | +| --- | --- | +| `common/` | 两个目标共用的 CarPlay 宿主界面、设置、持久化和应用资源。 | +| `mobile/` | 使用共享 CarPlay 主机界面的 Android 应用。 | +| `automotive/` | 使用共享主机界面并支持高级音频通道映射的 Android Automotive OS 应用。 | +| `shared/` | Car App Library 代码,以及 CH341、I2C、MFi、iPhone、iAP2、NCM、VPN、AirPlay 和媒体实现。 | + +## Remote MFI 功能 + +Remote MFi 客户端把远程服务当作一块 MFi 芯片远程调用,抑或是采用 BAA 认证,通过远程进行认证免去了本地连接 MFI 芯片进行认证的流程。 + +### 端点 + +| Method | Path | 用途 | Request body | Success response | 失败 response | +| --- | --- | --- | --- | --- | --- | +| `GET` | `/mfi/certificate` | 获取 MFI 芯片版本、证书类型和证书内容,客户端首次调用后缓存 | 无 | 证书 JSON | `{"detail":"..."}` | +| `POST` | `/mfi/sign` | 对 challenge 签名 | `{"challenge":"...","requestId":"..."}` | `{"signature":"..."}` | `{"detail":"..."}` | +| `POST` | `/mfi/reset` | 请求重置远程 MFI 芯片 | `{}` | `{"detail":""}` | `{"detail":"..."}` | + +(可选)采用标准 Bearer Authentication 进行验证。 + +**当前仅测试了 BAA Authentication** + +## 环境要求 + +- 启动 Gradle 需要 JDK 17 或更高版本;daemon 通过 Gradle toolchain 解析 Java 25。 +- Android SDK Platform 37。 +- Android 9(API 28)或更高版本。 + 在 Android 9 上不可用 Wi-Fi P2P 5 GHz 模式,应用会改用 LocalOnlyHotspot。 +- Android NDK `28.2.13676358`。 +- 硬件验证需要支持 USB Host/OTG 的 Android 设备以及 MFi 硬件。 + +## 构建 + +在 Windows PowerShell 中: + +```powershell +$env:JAVA_HOME = "C:\Program Files\Android\Android Studio\jbr" +.\gradlew.bat :shared:testDebugUnitTest :common:lintDebug :mobile:lintDebug :automotive:lintDebug :mobile:assembleDebug :automotive:assembleDebug +``` + +在 macOS 或 Linux 中: + +```bash +./gradlew :shared:testDebugUnitTest :common:lintDebug :mobile:lintDebug :automotive:lintDebug :mobile:assembleDebug :automotive:assembleDebug +``` + +构建未签名 release APK: + +```powershell +.\gradlew.bat :mobile:assembleRelease :automotive:assembleRelease +``` + +## 致谢 + +感谢 [LIVI](https://github.com/f-io/LIVI) 项目为本项目提供了重要参考。 +感谢 [showcase](https://github.com/amineross/showcase) 项目为本项目的 BAA 认证提供重要参考。 + +## 许可证 + +本项目采用 [GNU General Public License v3.0](LICENSE) 许可。 diff --git a/docs/VALIDATION.md b/docs/VALIDATION.md new file mode 100644 index 0000000..fd56421 --- /dev/null +++ b/docs/VALIDATION.md @@ -0,0 +1,10 @@ +# Source snapshot validation — 2026-09-25 + +- 172 JVM/Robolectric tests passed with freshly generated synthetic test identities. +- Source-only debug APK build and debug lint passed. +- The credential-asset guard rejected a synthetic `.pk8` probe and passed after it was removed. +- APK inspection found no `offline-mfi` assets or credential-container files. +- Static test private-key/certificate files have been removed from the source snapshot. +- No new public APK or CarPlay compatibility claim is made. This development build lacks accessory authentication provisioning. + +The original release and incident records are preserved locally with restricted access. See SECURITY.md. diff --git a/docs/licenses/DiAuto-AGPL-3.0.txt b/docs/licenses/DiAuto-AGPL-3.0.txt new file mode 100644 index 0000000..dbbe355 --- /dev/null +++ b/docs/licenses/DiAuto-AGPL-3.0.txt @@ -0,0 +1,661 @@ + GNU AFFERO GENERAL PUBLIC LICENSE + Version 3, 19 November 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU Affero General Public License is a free, copyleft license for +software and other kinds of works, specifically designed to ensure +cooperation with the community in the case of network server software. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +our General Public Licenses are intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + Developers that use our General Public Licenses protect your rights +with two steps: (1) assert copyright on the software, and (2) offer +you this License which gives you legal permission to copy, distribute +and/or modify the software. + + A secondary benefit of defending all users' freedom is that +improvements made in alternate versions of the program, if they +receive widespread use, become available for other developers to +incorporate. Many developers of free software are heartened and +encouraged by the resulting cooperation. However, in the case of +software used on network servers, this result may fail to come about. +The GNU General Public License permits making a modified version and +letting the public access it on a server without ever releasing its +source code to the public. + + The GNU Affero General Public License is designed specifically to +ensure that, in such cases, the modified source code becomes available +to the community. It requires the operator of a network server to +provide the source code of the modified version running there to the +users of that server. Therefore, public use of a modified version, on +a publicly accessible server, gives the public access to the source +code of the modified version. + + An older license, called the Affero General Public License and +published by Affero, was designed to accomplish similar goals. This is +a different license, not a version of the Affero GPL, but Affero has +released a new version of the Affero GPL which permits relicensing under +this license. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU Affero General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Remote Network Interaction; Use with the GNU General Public License. + + Notwithstanding any other provision of this License, if you modify the +Program, your modified version must prominently offer all users +interacting with it remotely through a computer network (if your version +supports such interaction) an opportunity to receive the Corresponding +Source of your version by providing access to the Corresponding Source +from a network server at no charge, through some standard or customary +means of facilitating copying of software. This Corresponding Source +shall include the Corresponding Source for any work covered by version 3 +of the GNU General Public License that is incorporated pursuant to the +following paragraph. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the work with which it is combined will remain governed by version +3 of the GNU General Public License. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU Affero General Public License from time to time. Such new versions +will be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU Affero General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU Affero General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU Affero General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If your software can interact with users remotely through a computer +network, you should also make sure that it provides a way for users to +get its source. For example, if your program is a web application, its +interface could display a "Source" link that leads users to an archive +of the code. There are many ways you could offer source, and different +solutions will be better for different programs; see section 13 for the +specific requirements. + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU AGPL, see +. diff --git a/docs/licenses/dependencies/Apache-2.0.txt b/docs/licenses/dependencies/Apache-2.0.txt new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/docs/licenses/dependencies/Apache-2.0.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/docs/licenses/dependencies/Bouncy-Castle-LICENSE.txt b/docs/licenses/dependencies/Bouncy-Castle-LICENSE.txt new file mode 100644 index 0000000..24506f0 --- /dev/null +++ b/docs/licenses/dependencies/Bouncy-Castle-LICENSE.txt @@ -0,0 +1,17 @@ +Copyright (c) 2000-2023 The Legion of the Bouncy Castle Inc. (https://www.bouncycastle.org) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software +and associated documentation files (the "Software"), to deal in the Software without restriction, +including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial +portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. diff --git a/docs/licenses/dependencies/SLF4J-LICENSE.txt b/docs/licenses/dependencies/SLF4J-LICENSE.txt new file mode 100644 index 0000000..bb09a9a --- /dev/null +++ b/docs/licenses/dependencies/SLF4J-LICENSE.txt @@ -0,0 +1,21 @@ +Copyright (c) 2004-2023 QOS.ch +All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000..99fc155 --- /dev/null +++ b/gradle.properties @@ -0,0 +1,19 @@ +# Project-wide Gradle settings. +# IDE (e.g. Android Studio) users: +# Gradle settings configured through the IDE *will override* +# any settings specified in this file. +# For more details on how to configure your build environment visit +# http://www.gradle.org/docs/current/userguide/build_environment.html +# Specifies the JVM arguments used for the daemon process. +# The setting is particularly useful for tweaking memory settings. +org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 +# When configured, Gradle will run in incubating parallel mode. +# This option should only be used with decoupled projects. For more details, visit +# https://developer.android.com/r/tools/gradle-multi-project-decoupled-projects +# org.gradle.parallel=true +# When enabled, the Configuration Cache allows Gradle to skip the configuration +# phase entirely if nothing that affects the build configuration (such as build scripts) +# has changed. Additionally, Gradle applies performance optimizations to task execution. +org.gradle.configuration-cache=true +# Kotlin code style for this project: "official" or "obsolete": +kotlin.code.style=official \ No newline at end of file diff --git a/gradle/gradle-daemon-jvm.properties b/gradle/gradle-daemon-jvm.properties new file mode 100644 index 0000000..fa4ed51 --- /dev/null +++ b/gradle/gradle-daemon-jvm.properties @@ -0,0 +1,12 @@ +#This file is generated by updateDaemonJvm +toolchainUrl.FREE_BSD.AARCH64=https\://api.foojay.io/disco/v3.0/ids/cf726b4a1c84b50457225f9bba6d7650/redirect +toolchainUrl.FREE_BSD.X86_64=https\://api.foojay.io/disco/v3.0/ids/fa1e318c287360478e3c83a9a3ef1007/redirect +toolchainUrl.LINUX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/cf726b4a1c84b50457225f9bba6d7650/redirect +toolchainUrl.LINUX.X86_64=https\://api.foojay.io/disco/v3.0/ids/fa1e318c287360478e3c83a9a3ef1007/redirect +toolchainUrl.MAC_OS.AARCH64=https\://api.foojay.io/disco/v3.0/ids/c2dd35c9d0aaf0ba6ad0791320f99dfc/redirect +toolchainUrl.MAC_OS.X86_64=https\://api.foojay.io/disco/v3.0/ids/e5810bd7fd1f8a586644409d395a7e55/redirect +toolchainUrl.UNIX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/cf726b4a1c84b50457225f9bba6d7650/redirect +toolchainUrl.UNIX.X86_64=https\://api.foojay.io/disco/v3.0/ids/fa1e318c287360478e3c83a9a3ef1007/redirect +toolchainUrl.WINDOWS.AARCH64=https\://api.foojay.io/disco/v3.0/ids/7b3c4877c0749019e6805bb61e421497/redirect +toolchainUrl.WINDOWS.X86_64=https\://api.foojay.io/disco/v3.0/ids/d76df094a9cbbabd3b08251f9e61444a/redirect +toolchainVersion=25 diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml new file mode 100644 index 0000000..04e825e --- /dev/null +++ b/gradle/libs.versions.toml @@ -0,0 +1,36 @@ +[versions] +agp = "9.3.0" +coreKtx = "1.19.0" +lifecycleRuntimeKtx = "2.6.1" +activityCompose = "1.8.0" +kotlin = "2.2.10" +composeBom = "2026.02.01" +appcompat = "1.8.0" +appProjected = "1.4.0" +appAutomotive = "1.7.0" +app = "1.4.0" +junit = "4.13.2" +bouncycastle = "1.79" +jmdns = "3.6.3" + +[libraries] +androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" } +androidx-lifecycle-runtime-ktx = { group = "androidx.lifecycle", name = "lifecycle-runtime-ktx", version.ref = "lifecycleRuntimeKtx" } +androidx-activity-compose = { group = "androidx.activity", name = "activity-compose", version.ref = "activityCompose" } +androidx-compose-bom = { group = "androidx.compose", name = "compose-bom", version.ref = "composeBom" } +androidx-compose-ui = { group = "androidx.compose.ui", name = "ui" } +androidx-compose-ui-graphics = { group = "androidx.compose.ui", name = "ui-graphics" } +androidx-compose-ui-tooling = { group = "androidx.compose.ui", name = "ui-tooling" } +androidx-compose-ui-tooling-preview = { group = "androidx.compose.ui", name = "ui-tooling-preview" } +androidx-compose-material3 = { group = "androidx.compose.material3", name = "material3" } +androidx-appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "appcompat" } +androidx-app-projected = { group = "androidx.car.app", name = "app-projected", version.ref = "appProjected" } +androidx-app-automotive = { group = "androidx.car.app", name = "app-automotive", version.ref = "appAutomotive" } +androidx-app = { group = "androidx.car.app", name = "app", version.ref = "app" } +junit = { group = "junit", name = "junit", version.ref = "junit" } +bouncycastle = { group = "org.bouncycastle", name = "bcprov-jdk18on", version.ref = "bouncycastle" } +jmdns = { group = "org.jmdns", name = "jmdns", version.ref = "jmdns" } + +[plugins] +android-application = { id = "com.android.application", version.ref = "agp" } +kotlin-compose = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" } diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..8bdaf60c75ab801e22807dde59e12a8735a34077 GIT binary patch literal 45457 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 c82=K%QXLKFx%@O{wJjEi6Y56o#$)Bpeg literal 0 HcmV?d00001 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..9e8b714 --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,9 @@ +#Fri Sep 11 01:27:33 CST 2026 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionSha256Sum=553c78f50dafcd54d65b9a444649057857469edf836431389695608536d6b746 +distributionUrl=https\://services.gradle.org/distributions/gradle-9.5.0-bin.zip +networkTimeout=10000 +validateDistributionUrl=true +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew new file mode 100755 index 0000000..ef07e01 --- /dev/null +++ b/gradlew @@ -0,0 +1,251 @@ +#!/bin/sh + +# +# Copyright © 2015 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH="\\\"\\\"" + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..db3a6ac --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,94 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH= + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/mobile/.gitignore b/mobile/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/mobile/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/mobile/build.gradle.kts b/mobile/build.gradle.kts new file mode 100644 index 0000000..d408d1c --- /dev/null +++ b/mobile/build.gradle.kts @@ -0,0 +1,87 @@ +plugins { + alias(libs.plugins.android.application) + alias(libs.plugins.kotlin.compose) +} + +android { + namespace = "com.shilapi.xcertplay" + compileSdk { + version = release(37) + } + + defaultConfig { + applicationId = "com.shihab.diplay" + minSdk = 28 + targetSdk = 37 + versionCode = 10 + versionName = "0.1.0" + + } + + + signingConfigs { + create("release") { + storeFile = file( + providers.environmentVariable("ANDROID_KEYSTORE_PATH") + .getOrElse("missing-release-keystore.jks"), + ) + storePassword = providers.environmentVariable("ANDROID_KEYSTORE_PASSWORD").getOrElse("") + keyAlias = providers.environmentVariable("ANDROID_KEY_ALIAS").getOrElse("") + keyPassword = providers.environmentVariable("ANDROID_KEY_PASSWORD").getOrElse("") + } + } + + buildTypes { + release { + optimization { + enable = false + } + signingConfig = signingConfigs.getByName("release") + } + } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 + } + buildFeatures { + compose = true + } +} + +dependencies { + implementation(platform(libs.androidx.compose.bom)) + implementation(project(":common")) + implementation(project(":shared")) + implementation(libs.androidx.activity.compose) + implementation(libs.androidx.app.projected) + implementation(libs.androidx.compose.material3) + implementation(libs.androidx.compose.ui) + implementation(libs.androidx.compose.ui.graphics) + implementation(libs.androidx.compose.ui.tooling.preview) + implementation(libs.androidx.core.ktx) + implementation(libs.androidx.lifecycle.runtime.ktx) + debugImplementation(libs.androidx.compose.ui.tooling) +} + +// Source builds must never silently import a shared accessory private key. +val credentialAssets = files(android.sourceSets.flatMap { source -> + source.assets.directories.map { directory -> + fileTree(directory) { + include("**/offline-mfi/**", "**/*.pk8", "**/*.p7b", "**/*.key", + "**/*.pem", "**/*.p12", "**/*.pfx", "**/*.jks", "**/*.keystore") + } + } +}) +val rejectBundledCredentials by tasks.registering { + group = "verification" + description = "Reject credential files in every APK asset source directory." + val filesToCheck = credentialAssets + inputs.files(filesToCheck) + doLast { + check(filesToCheck.isEmpty) { + "Credential assets are forbidden in distributable APKs: " + + filesToCheck.files.joinToString { it.name } + } + } +} +tasks.named("preBuild") { dependsOn(rejectBundledCredentials) } diff --git a/mobile/src/main/AndroidManifest.xml b/mobile/src/main/AndroidManifest.xml new file mode 100644 index 0000000..6bda892 --- /dev/null +++ b/mobile/src/main/AndroidManifest.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + diff --git a/mobile/src/main/keepRules/rules.keep b/mobile/src/main/keepRules/rules.keep new file mode 100644 index 0000000..d7e081a --- /dev/null +++ b/mobile/src/main/keepRules/rules.keep @@ -0,0 +1,12 @@ +# Add project specific R8 rules here. +# AGP will combine all keep rule files in src/main/keepRules to pass to R8 +# +# For more details, see +# https://d.android.com/r/tools/r8/keep-rules + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} \ No newline at end of file diff --git a/mobile/src/main/res/values/config.xml b/mobile/src/main/res/values/config.xml new file mode 100644 index 0000000..08ac42d --- /dev/null +++ b/mobile/src/main/res/values/config.xml @@ -0,0 +1,3 @@ + + false + diff --git a/mobile/src/main/res/values/strings.xml b/mobile/src/main/res/values/strings.xml new file mode 100644 index 0000000..401758e --- /dev/null +++ b/mobile/src/main/res/values/strings.xml @@ -0,0 +1,3 @@ + + DiPlay + diff --git a/scripts/build-beta.py b/scripts/build-beta.py new file mode 100644 index 0000000..6109cb6 --- /dev/null +++ b/scripts/build-beta.py @@ -0,0 +1,6 @@ +#!/usr/bin/env python3 +"""The credential-bearing beta release path has been withdrawn.""" +raise SystemExit( + "Release packaging is suspended. Do not bundle a recovered accessory identity. " + "See docs/BUILD.md for source-only validation." +) diff --git a/scripts/build_site.py b/scripts/build_site.py new file mode 100644 index 0000000..523acaf --- /dev/null +++ b/scripts/build_site.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python3 +"""Build the public status pages. No APK download URL is published.""" +from pathlib import Path +from html import escape as e +import json +ROOT = Path(__file__).resolve().parents[1] +SITE = ROOT / 'site' +BASE = 'https://shihabal3amri.github.io/DiPlay/' +REPO = 'https://github.com/shihabal3amri/DiPlay' +data = json.loads((SITE / 'content.json').read_text()) +for lang, d in data.items(): + folder = SITE if lang == 'en' else SITE / lang + folder.mkdir(exist_ok=True) + prefix = './' if lang == 'en' else '../' + url = BASE + ('' if lang == 'en' else lang + '/') + nav = ''.join(f'{e(v["name"])}' for code,v in data.items()) + (folder/'index.html').write_text(f''' + +DiPlay · {e(d['badge'])} + +

    DiPlay
    +
    {e(d['badge'])}

    {e(d['title']).replace(chr(10),'
    ')}

    {e(d['body'])}

    {e(d['detail'])}

    +

    {e(d['footer'])}

    ''') +print('Generated', len(data), 'status pages') diff --git a/scripts/check_public_tree.py b/scripts/check_public_tree.py new file mode 100644 index 0000000..ec8b16a --- /dev/null +++ b/scripts/check_public_tree.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python3 +"""Fail CI if credential containers or private-key blocks enter the source tree.""" +from pathlib import Path +import re +import subprocess + +root = Path(__file__).resolve().parents[1] +names = subprocess.check_output(['git', 'ls-files', '-z'], cwd=root).decode().split('\0') +blocked_suffixes = {'.pk8', '.p7b', '.pem', '.key', '.p12', '.pfx', '.jks', '.keystore', '.apk', '.aab'} +private_block = re.compile(rb'-----BEGIN (?:[A-Z0-9 ]+ )?PRIVATE KEY-----\s+[A-Za-z0-9+/=\r\n]{40,}') +failures = [] +for name in filter(None, names): + path = root / name + if not path.is_file(): + continue + if '.private' in path.relative_to(root).parts or path.suffix.lower() in blocked_suffixes: + failures.append(name) + elif private_block.search(path.read_bytes()): + failures.append(name) +if failures: + raise SystemExit('Credential or distribution files are forbidden in the public tree:\n' + '\n'.join(failures)) +print('Public tree check passed: no credential containers or private-key blocks.') diff --git a/settings.gradle.kts b/settings.gradle.kts new file mode 100644 index 0000000..9ed2d50 --- /dev/null +++ b/settings.gradle.kts @@ -0,0 +1,29 @@ +pluginManagement { + repositories { + google { + content { + includeGroupByRegex("com\\.android.*") + includeGroupByRegex("com\\.google.*") + includeGroupByRegex("androidx.*") + } + } + mavenCentral() + gradlePluginPortal() + } +} +plugins { + id("org.gradle.toolchains.foojay-resolver-convention") version "1.0.0" +} +dependencyResolutionManagement { + repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) + repositories { + google() + mavenCentral() + } +} + +rootProject.name = "xcertplay" +include(":common") +include(":mobile") +include(":automotive") +include(":shared") diff --git a/shared/.gitignore b/shared/.gitignore new file mode 100644 index 0000000..796b96d --- /dev/null +++ b/shared/.gitignore @@ -0,0 +1 @@ +/build diff --git a/shared/build.gradle b/shared/build.gradle new file mode 100644 index 0000000..f31ec30 --- /dev/null +++ b/shared/build.gradle @@ -0,0 +1,40 @@ +plugins { + id 'com.android.library' +} +android { + namespace = 'com.shilapi.xcertplay.shared' + compileSdk = 37 + + defaultConfig { + minSdk = 28 + targetSdk = 37 + + ndk { + abiFilters 'arm64-v8a', 'armeabi-v7a', 'x86_64' + } + + externalNativeBuild { + ndkBuild { + arguments 'APP_PLATFORM=android-28' + } + } + + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + } + ndkVersion = '28.2.13676358' + externalNativeBuild { + ndkBuild { + path = file('src/main/jni/Android.mk') + } + } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 + } +} +dependencies { + implementation libs.androidx.app + implementation libs.bouncycastle + implementation libs.jmdns + testImplementation libs.junit +} diff --git a/shared/src/main/AndroidManifest.xml b/shared/src/main/AndroidManifest.xml new file mode 100644 index 0000000..37eef87 --- /dev/null +++ b/shared/src/main/AndroidManifest.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/shared/src/main/ic_launcher-playstore.png b/shared/src/main/ic_launcher-playstore.png new file mode 100644 index 0000000000000000000000000000000000000000..b7be9eb06ece7f361fb45e298e79e7b171f4cd2b GIT binary patch literal 136865 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%0D65+C5I<|R~QXDj{hwP&95 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 = emptyList(), +) diff --git a/shared/src/main/java/com/shilapi/xcertplay/airplay/AirPlayCrypto.kt b/shared/src/main/java/com/shilapi/xcertplay/airplay/AirPlayCrypto.kt new file mode 100644 index 0000000..a5a1a99 --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/airplay/AirPlayCrypto.kt @@ -0,0 +1,130 @@ +package com.shilapi.xcertplay.airplay + +import org.bouncycastle.crypto.Digest +import org.bouncycastle.crypto.digests.SHA512Digest +import org.bouncycastle.crypto.generators.HKDFBytesGenerator +import org.bouncycastle.crypto.modes.ChaCha20Poly1305 +import org.bouncycastle.crypto.params.AEADParameters +import org.bouncycastle.crypto.params.Ed25519PrivateKeyParameters +import org.bouncycastle.crypto.params.Ed25519PublicKeyParameters +import org.bouncycastle.crypto.params.HKDFParameters +import org.bouncycastle.crypto.params.KeyParameter +import org.bouncycastle.crypto.params.X25519PrivateKeyParameters +import org.bouncycastle.crypto.params.X25519PublicKeyParameters +import org.bouncycastle.crypto.signers.Ed25519Signer +import java.security.SecureRandom + +/** BouncyCastle-backed primitives for the CarPlay pairing and control channel. */ +object AirPlayCrypto { + private const val MAC_BITS = 128 + private const val NONCE_SIZE = 12 + private const val LABEL_SIZE = 8 + private val random = SecureRandom() + + data class X25519KeyPair(val privateKey: ByteArray, val publicKey: ByteArray) + data class Ed25519KeyPair(val privateKey: ByteArray, val publicKey: ByteArray) + + fun x25519Generate(): X25519KeyPair { + val privateKey = X25519PrivateKeyParameters(random) + return X25519KeyPair(privateKey.encoded, privateKey.generatePublicKey().encoded) + } + + fun x25519Shared(privateKeyRaw: ByteArray, peerPublicKeyRaw: ByteArray): ByteArray { + val privateKey = X25519PrivateKeyParameters(privateKeyRaw, 0) + val peerPublicKey = X25519PublicKeyParameters(peerPublicKeyRaw, 0) + val shared = ByteArray(X25519PrivateKeyParameters.SECRET_SIZE) + privateKey.generateSecret(peerPublicKey, shared, 0) + return shared + } + + fun ed25519Generate(): Ed25519KeyPair { + val privateKey = Ed25519PrivateKeyParameters(random) + return Ed25519KeyPair(privateKey.encoded, privateKey.generatePublicKey().encoded) + } + + fun ed25519Sign(privateKeyRaw: ByteArray, data: ByteArray): ByteArray { + val signer = Ed25519Signer() + signer.init(true, Ed25519PrivateKeyParameters(privateKeyRaw, 0)) + signer.update(data, 0, data.size) + return signer.generateSignature() + } + + fun ed25519Verify(publicKeyRaw: ByteArray, data: ByteArray, signature: ByteArray): Boolean = try { + val signer = Ed25519Signer() + signer.init(false, Ed25519PublicKeyParameters(publicKeyRaw, 0)) + signer.update(data, 0, data.size) + signer.verifySignature(signature) + } catch (_: Exception) { + false + } + + fun hkdfSha512( + inputKeyMaterial: ByteArray, + salt: ByteArray, + info: ByteArray, + length: Int = 32, + ): ByteArray { + val generator = HKDFBytesGenerator(SHA512Digest()) + generator.init(HKDFParameters(inputKeyMaterial, salt, info)) + val output = ByteArray(length) + generator.generateBytes(output, 0, length) + return output + } + + fun sha512(vararg parts: ByteArray): ByteArray = digest(SHA512Digest(), parts) + + fun chachaSeal( + key: ByteArray, + nonce: ByteArray, + plaintext: ByteArray, + aad: ByteArray = ByteArray(0), + ): ByteArray { + val cipher = ChaCha20Poly1305() + cipher.init(true, AEADParameters(KeyParameter(key), MAC_BITS, nonce, aad)) + val output = ByteArray(cipher.getOutputSize(plaintext.size)) + val length = cipher.processBytes(plaintext, 0, plaintext.size, output, 0) + cipher.doFinal(output, length) + return output + } + + fun chachaOpen( + key: ByteArray, + nonce: ByteArray, + ciphertextAndTag: ByteArray, + aad: ByteArray = ByteArray(0), + ): ByteArray { + val cipher = ChaCha20Poly1305() + cipher.init(false, AEADParameters(KeyParameter(key), MAC_BITS, nonce, aad)) + val output = ByteArray(cipher.getOutputSize(ciphertextAndTag.size)) + val processed = cipher.processBytes(ciphertextAndTag, 0, ciphertextAndTag.size, output, 0) + val finalized = cipher.doFinal(output, processed) + val outputLength = processed + finalized + return if (outputLength == output.size) output else output.copyOf(outputLength) + } + + /** 12-byte nonce: four zero bytes followed by an eight-byte little-endian counter. */ + fun nonce64(counter: Long): ByteArray { + val nonce = ByteArray(NONCE_SIZE) + var value = counter + for (index in 4 until NONCE_SIZE) { + nonce[index] = value.toByte() + value = value ushr 8 + } + return nonce + } + + /** 12-byte nonce from an eight-byte ASCII label placed after four zero bytes. */ + fun nonceLabel(label: String): ByteArray { + val nonce = ByteArray(NONCE_SIZE) + val ascii = label.asciiBytes() + ascii.copyInto(nonce, 4, 0, minOf(ascii.size, LABEL_SIZE)) + return nonce + } + + private fun digest(digest: Digest, parts: Array): ByteArray { + for (part in parts) digest.update(part, 0, part.size) + val output = ByteArray(digest.digestSize) + digest.doFinal(output, 0) + return output + } +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/airplay/AirPlayDisplaySettings.kt b/shared/src/main/java/com/shilapi/xcertplay/airplay/AirPlayDisplaySettings.kt new file mode 100644 index 0000000..93d2904 --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/airplay/AirPlayDisplaySettings.kt @@ -0,0 +1,91 @@ +package com.shilapi.xcertplay.airplay + +enum class AirPlayPhysicalSizeBasis { + WIDTH, + HEIGHT, +} + +data class AirPlayPhysicalSizeMm( + val widthMm: Int, + val heightMm: Int, +) + +/** User-adjustable display values with the same stepped ranges used by the settings UI. */ +object AirPlayDisplaySettings { + const val MIN_FPS = 30 + const val MAX_FPS = 60 + const val FPS_STEP = 5 + const val DEFAULT_FPS = MAX_FPS + + const val MIN_WIDTH_PHYSICAL_MM = 100 + const val MAX_WIDTH_PHYSICAL_MM = 400 + const val WIDTH_PHYSICAL_MM_STEP = 50 + const val DEFAULT_WIDTH_PHYSICAL_MM = 200 + val DEFAULT_PHYSICAL_SIZE_BASIS = AirPlayPhysicalSizeBasis.WIDTH + const val MIN_REPORTED_PHYSICAL_MM = 1 + const val MAX_REPORTED_PHYSICAL_MM = 2_000 + + fun sanitizeFps(value: Int): Int = + snapToStep(value, MIN_FPS, MAX_FPS, FPS_STEP) + + fun sanitizeWidthPhysicalMm(value: Int): Int = + snapToStep( + value, + MIN_WIDTH_PHYSICAL_MM, + MAX_WIDTH_PHYSICAL_MM, + WIDTH_PHYSICAL_MM_STEP, + ) + + fun sanitizeReportedPhysicalMm(value: Int): Int = + value.coerceIn(MIN_REPORTED_PHYSICAL_MM, MAX_REPORTED_PHYSICAL_MM) + + fun resolvePhysicalSizeMm( + currentWidthPixels: Int, + currentHeightPixels: Int, + maximumWidthPixels: Int, + maximumHeightPixels: Int, + referenceMillimeters: Int, + basis: AirPlayPhysicalSizeBasis, + ): AirPlayPhysicalSizeMm { + require(currentWidthPixels > 0 && currentHeightPixels > 0) { + "Current display dimensions must be positive" + } + require(maximumWidthPixels > 0 && maximumHeightPixels > 0) { + "Maximum display dimensions must be positive" + } + val referencePixels = when (basis) { + AirPlayPhysicalSizeBasis.WIDTH -> + currentWidthPixels.toDouble() / maximumWidthPixels + AirPlayPhysicalSizeBasis.HEIGHT -> + currentHeightPixels.toDouble() / maximumHeightPixels + } + val referenceMm = referenceMillimeters.coerceAtLeast(1) * referencePixels + val widthMm: Double + val heightMm: Double + when (basis) { + AirPlayPhysicalSizeBasis.WIDTH -> { + widthMm = referenceMm + heightMm = widthMm * currentHeightPixels / currentWidthPixels + } + AirPlayPhysicalSizeBasis.HEIGHT -> { + heightMm = referenceMm + widthMm = heightMm * currentWidthPixels / currentHeightPixels + } + } + return AirPlayPhysicalSizeMm( + widthMm = sanitizeReportedPhysicalMm(Math.round(widthMm).toInt()), + heightMm = sanitizeReportedPhysicalMm(Math.round(heightMm).toInt()), + ) + } + + fun fpsProgress(value: Int): Int = + (sanitizeFps(value) - MIN_FPS) / FPS_STEP + + fun widthPhysicalMmProgress(value: Int): Int = + (sanitizeWidthPhysicalMm(value) - MIN_WIDTH_PHYSICAL_MM) / WIDTH_PHYSICAL_MM_STEP + + private fun snapToStep(value: Int, minimum: Int, maximum: Int, step: Int): Int { + val clamped = value.coerceIn(minimum, maximum) + return (((clamped - minimum) + step / 2) / step) * step + minimum + } +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/airplay/AirPlayHid.kt b/shared/src/main/java/com/shilapi/xcertplay/airplay/AirPlayHid.kt new file mode 100644 index 0000000..f1fc154 --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/airplay/AirPlayHid.kt @@ -0,0 +1,141 @@ +package com.shilapi.xcertplay.airplay + +/** One normalized touch contact (0..1 coordinates). */ +data class AirPlayContact( + val id: Int, + val x: Double, + val y: Double, + val down: Boolean, +) + +/** Momentary knob/button state for the head-unit rotary controller. */ +data class AirPlayKnobState( + val select: Boolean = false, + val home: Boolean = false, + val back: Boolean = false, + val x: Int = 0, + val y: Int = 0, + val wheel: Int = 0, +) + +/** CarPlay HID device descriptors and report encoders. */ +object AirPlayHid { + const val TOUCH_HID_UID = 0x2a2a2a2a + const val KNOB_HID_UID = 0x2a2a2a2b + const val MEDIA_HID_UID = 0x2a2a2a2c + const val TELEPHONY_HID_UID = 0x2a2a2a2d + + private const val TOUCH_CONTACTS = 2 + private const val BYTES_PER_FINGER = 6 + + fun touchHidDevice(xMax: Int, yMax: Int, displayUuid: String): Map = + hidDeviceEntry(TOUCH_HID_UID, "xcertplay Touchscreen", multitouchDescriptor(xMax, yMax), displayUuid) + + fun knobHidDevice(displayUuid: String): Map = + hidDeviceEntry(KNOB_HID_UID, "xcertplay Knob", knobDescriptor, displayUuid) + + fun mediaHidDevice(displayUuid: String): Map = + hidDeviceEntry(MEDIA_HID_UID, "xcertplay Media", mediaDescriptor, displayUuid) + + fun telephonyHidDevice(displayUuid: String): Map = + hidDeviceEntry(TELEPHONY_HID_UID, "xcertplay Telephony", telephonyDescriptor, displayUuid) + + fun touchReport(contacts: List): ByteArray { + val report = ByteArray(BYTES_PER_FINGER * TOUCH_CONTACTS) + for (slot in 0 until TOUCH_CONTACTS) { + val offset = slot * BYTES_PER_FINGER + report[offset] = slot.toByte() + val contact = contacts.getOrNull(slot) ?: continue + report[offset + 1] = if (contact.down) 0x01 else 0x00 + writeU16Le(report, offset + 2, Math.round(contact.x.coerceAtLeast(0.0)).toInt()) + writeU16Le(report, offset + 4, Math.round(contact.y.coerceAtLeast(0.0)).toInt()) + } + return report + } + + fun knobReport(state: AirPlayKnobState): ByteArray { + val report = ByteArray(4) + report[0] = ( + (if (state.select) 0x01 else 0) or + (if (state.home) 0x02 else 0) or + (if (state.back) 0x04 else 0) + ).toByte() + report[1] = clampAxis(state.x) + report[2] = clampAxis(state.y) + report[3] = clampAxis(state.wheel) + return report + } + + fun mediaReport(index: Int): ByteArray = byteArrayOf(index.toByte()) + + fun telephonyReport(index: Int): ByteArray = byteArrayOf(index.toByte()) + + private fun hidDeviceEntry( + uid: Int, + name: String, + descriptor: ByteArray, + displayUuid: String, + ): Map = linkedMapOf( + "hidProductID" to 1L, + "hidVendorID" to 2L, + "hidCountryCode" to 0L, + "uuid" to uid.toString(16), + "name" to name, + "displayUUID" to displayUuid, + "hidDescriptor" to descriptor, + ) + + private fun multitouchDescriptor(xMax: Int, yMax: Int): ByteArray { + val bytes = ArrayList() + bytes.addAll(intArrayOf(0x05, 0x0d, 0x09, 0x04, 0xa1, 0x01).toList()) + repeat(TOUCH_CONTACTS) { bytes.addAll(fingerCollection(xMax, yMax).toList()) } + bytes.add(0xc0) + return bytes.map { it.toByte() }.toByteArray() + } + + private fun fingerCollection(xMax: Int, yMax: Int): IntArray = intArrayOf( + 0x05, 0x0d, 0x09, 0x22, 0xa1, 0x02, + 0x09, 0x38, 0x75, 0x08, 0x95, 0x01, 0x81, 0x02, + 0x15, 0x00, 0x25, 0x01, 0x09, 0x33, 0x75, 0x01, 0x95, 0x01, 0x81, 0x02, + 0x95, 0x07, 0x81, 0x03, + 0x05, 0x01, 0x26, xMax and 0xff, (xMax shr 8) and 0xff, 0x09, 0x30, 0x75, 0x10, 0x95, 0x01, 0x81, 0x02, + 0x26, yMax and 0xff, (yMax shr 8) and 0xff, 0x09, 0x31, 0x81, 0x02, 0xc0, + ) + + private val knobDescriptor = descriptor( + 0x05, 0x01, 0x09, 0x08, 0xa1, 0x01, + 0x05, 0x09, 0x09, 0x01, 0x15, 0x00, 0x25, 0x01, 0x75, 0x01, 0x95, 0x01, 0x81, 0x02, + 0x05, 0x0c, 0x0a, 0x23, 0x02, 0x0a, 0x24, 0x02, 0x95, 0x02, 0x81, 0x02, + 0x95, 0x05, 0x81, 0x01, + 0x05, 0x01, 0x09, 0x01, 0xa1, 0x00, + 0x09, 0x30, 0x09, 0x31, 0x15, 0x81, 0x25, 0x7f, 0x75, 0x08, 0x95, 0x02, 0x81, 0x02, 0xc0, + 0x09, 0x38, 0x15, 0x81, 0x25, 0x7f, 0x75, 0x08, 0x95, 0x01, 0x81, 0x06, 0xc0, + ) + + private val mediaDescriptor = descriptor( + 0x05, 0x0c, 0x09, 0x01, 0xa1, 0x01, + 0x15, 0x00, 0x25, 0x06, 0x05, 0x0c, + 0x0a, 0x00, 0x00, 0x0a, 0xb0, 0x00, 0x0a, 0xb1, 0x00, 0x0a, 0xcd, 0x00, + 0x0a, 0xb5, 0x00, 0x0a, 0xb6, 0x00, 0x0a, 0x9e, 0x02, + 0x75, 0x08, 0x95, 0x01, 0x81, 0x00, 0xc0, + ) + + private val telephonyDescriptor = descriptor( + 0x05, 0x0b, 0x09, 0x07, 0xa1, 0x01, + 0x15, 0x00, 0x25, 0x11, 0x05, 0x0b, + 0x09, 0x00, 0x09, 0x20, 0x09, 0x21, 0x09, 0x26, 0x09, 0x2f, + 0x09, 0xb0, 0x09, 0xb1, 0x09, 0xb2, 0x09, 0xb3, 0x09, 0xb4, 0x09, 0xb5, + 0x09, 0xb6, 0x09, 0xb7, 0x09, 0xb8, 0x09, 0xb9, 0x09, 0xba, 0x09, 0xbb, + 0x05, 0x07, 0x09, 0x2a, + 0x75, 0x08, 0x95, 0x01, 0x81, 0x00, 0xc0, + ) + + private fun descriptor(vararg bytes: Int): ByteArray = ByteArray(bytes.size) { bytes[it].toByte() } + + private fun clampAxis(value: Int): Byte = value.coerceIn(-127, 127).toByte() + + private fun writeU16Le(target: ByteArray, offset: Int, value: Int) { + target[offset] = (value and 0xff).toByte() + target[offset + 1] = ((value ushr 8) and 0xff).toByte() + } +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/airplay/AirPlayIapTunnelStream.kt b/shared/src/main/java/com/shilapi/xcertplay/airplay/AirPlayIapTunnelStream.kt new file mode 100644 index 0000000..37af88d --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/airplay/AirPlayIapTunnelStream.kt @@ -0,0 +1,174 @@ +package com.shilapi.xcertplay.airplay + +import com.shilapi.xcertplay.transport.BlockingDuplexByteStream +import java.io.IOException +import java.util.ArrayDeque +import kotlin.math.min + +/** + * Full-duplex adapter for the CarPlay iAP2 DataStream. + * + * Inbound iAP2 bytes come from [IapTunnel]; outbound bytes are sent over the encrypted AirPlay + * event channel using the `iAPSendMessage` command. + */ +internal class AirPlayIapTunnelStream( + private val session: AirPlaySession, + private val tunnel: IapTunnel, + private val sendCommand: (ByteArray, Long) -> Boolean = { data, timeoutMillis -> + session.sendIapMessage(data, timeoutMillis) + }, +) : BlockingDuplexByteStream { + private val lock = Object() + private val pending = ArrayDeque() + private var pendingBytes = 0 + private var closed = false + private var terminalFailure: Throwable? = null + private var closeLocation: String? = null + + fun listen(): Int = tunnel.listen( + object : IapTunnel.Listener { + override fun onOpen(remoteAddress: String?) { + session.logTrace( + "AirPlay iAP tunnel connected remote=${remoteAddress ?: "unknown"}", + ) + } + + override fun onIap(bytes: ByteArray) = offer(bytes) + + override fun onDebug(message: String) { + session.logTrace(message) + } + + override fun onClosed(cause: Throwable?) { + session.logTrace( + "AirPlay iAP tunnel closed cause=" + + "${cause?.javaClass?.simpleName ?: "peer EOF"}: " + + "${cause?.message ?: "no detail"}", + ) + val shouldCloseSession = markFailed(cause) + if (shouldCloseSession) session.close() + } + }, + ) + + override fun send(data: ByteArray) { + synchronized(lock) { + throwTerminalFailureLocked() + if (closed) throw closedFailureLocked() + } + if (!tunnel.awaitPeerConnection(PEER_CONNECT_TIMEOUT_MILLIS)) { + throw IOException("CarPlay iAP tunnel peer did not connect") + } + synchronized(lock) { + throwTerminalFailureLocked() + if (closed) throw closedFailureLocked() + } + if (!sendCommand(data, EVENT_READY_TIMEOUT_MILLIS)) { + throw IOException("AirPlay event channel rejected an iAP message") + } + } + + override fun recv(maxBytes: Int, timeoutMillis: Long): ByteArray? { + require(maxBytes > 0) { "maxBytes must be positive" } + require(timeoutMillis >= 0) { "timeoutMillis must not be negative" } + + val deadlineNanos = System.nanoTime() + timeoutMillis * NANOS_PER_MILLISECOND + synchronized(lock) { + while (true) { + takePendingLocked(maxBytes)?.let { return it } + throwTerminalFailureLocked() + if (closed) return EMPTY + val remainingNanos = deadlineNanos - System.nanoTime() + if (remainingNanos <= 0) return null + try { + lock.wait( + remainingNanos / NANOS_PER_MILLISECOND, + (remainingNanos % NANOS_PER_MILLISECOND).toInt(), + ) + } catch (_: InterruptedException) { + Thread.currentThread().interrupt() + return null + } + } + } + } + + override fun close() { + synchronized(lock) { + if (closed) return + closed = true + closeLocation = closeCaller() + lock.notifyAll() + } + tunnel.close() + } + + private fun offer(bytes: ByteArray) { + if (bytes.isEmpty()) return + synchronized(lock) { + if (closed || terminalFailure != null) return + if (pendingBytes + bytes.size > MAX_PENDING_BYTES) { + terminalFailure = IOException("AirPlay iAP tunnel pending-data limit exceeded") + lock.notifyAll() + tunnel.close() + return + } + pending.addLast(bytes.copyOf()) + pendingBytes += bytes.size + lock.notifyAll() + } + } + + private fun markFailed(cause: Throwable?): Boolean { + synchronized(lock) { + if (closed || terminalFailure != null) return false + terminalFailure = cause ?: IOException("AirPlay iAP tunnel terminated") + lock.notifyAll() + return true + } + } + + private fun throwTerminalFailureLocked() { + val failure = terminalFailure ?: return + throw IOException( + "AirPlay iAP tunnel failed: " + + "${failure.javaClass.simpleName}: ${failure.message ?: "unknown error"}", + failure, + ) + } + + private fun closedFailureLocked(): IOException = IOException( + buildString { + append("AirPlay iAP tunnel is closed") + closeLocation?.let { append("; requested by $it") } + }, + ) + + private fun closeCaller(): String = + Thread.currentThread().stackTrace + .drop(2) + .take(8) + .joinToString(" <- ") { frame -> + "${frame.className.substringAfterLast('.')}.${frame.methodName}:${frame.lineNumber}" + } + + private fun takePendingLocked(maxBytes: Int): ByteArray? { + val chunk = pending.pollFirst() ?: return null + pendingBytes -= chunk.size + if (chunk.size <= maxBytes) return chunk + + val head = chunk.copyOf(maxBytes) + val tail = chunk.copyOfRange(maxBytes, chunk.size) + pending.addFirst(tail) + pendingBytes += tail.size + return head + } + + private companion object { + const val MAX_PENDING_BYTES = 1_048_576 + const val PEER_CONNECT_TIMEOUT_MILLIS = 15_000L + const val EVENT_READY_TIMEOUT_MILLIS = 10_000L + const val NANOS_PER_MILLISECOND = 1_000_000L + val EMPTY = ByteArray(0) + } +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/airplay/AirPlayIdentity.kt b/shared/src/main/java/com/shilapi/xcertplay/airplay/AirPlayIdentity.kt new file mode 100644 index 0000000..fde0015 --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/airplay/AirPlayIdentity.kt @@ -0,0 +1,19 @@ +package com.shilapi.xcertplay.airplay + +import java.util.UUID + +/** Long-term Ed25519 identity of the CarPlay accessory, persisted by the caller. */ +data class AirPlayIdentity( + val privateKey: ByteArray, + val publicKey: ByteArray, + val pairingId: String, +) { + val publicKeyHex: String get() = publicKey.toHexString() + + companion object { + fun generate(): AirPlayIdentity { + val keyPair = AirPlayCrypto.ed25519Generate() + return AirPlayIdentity(keyPair.privateKey, keyPair.publicKey, UUID.randomUUID().toString()) + } + } +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/airplay/AirPlayInfoPlist.kt b/shared/src/main/java/com/shilapi/xcertplay/airplay/AirPlayInfoPlist.kt new file mode 100644 index 0000000..ba22b5a --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/airplay/AirPlayInfoPlist.kt @@ -0,0 +1,199 @@ +package com.shilapi.xcertplay.airplay + +/** + * Builds the /info response the phone reads before it requests media streams. + * + * The declaration is complete on purpose: it must carry the display, audio formats/latencies, + * CarPlay resource modes, and the HID input devices, otherwise the phone aborts the session. + */ +object AirPlayInfoPlist { + const val MAIN_UUID = "b7e6c5a0-1111-4000-8000-000000000001" + const val ALT_UUID = "b7e6c5a0-2222-4000-8000-000000000002" + + private const val STREAM_TYPE_MAIN_SCREEN = 110 + private const val STREAM_TYPE_ALT_SCREEN = 111 + private const val DISPLAY_FEATURE_KNOBS = 0x02 + private const val DISPLAY_FEATURE_HIGH_FIDELITY_TOUCH = 0x08 + private const val CARPLAY_FEATURES = 0x615653aee2L + private const val CARPLAY_AUDIO_FEATURES = 0x10004540a00L + private val CARPLAY_FEATURES_NO_AUDIO = CARPLAY_FEATURES and CARPLAY_AUDIO_FEATURES.inv() + + private const val RESOURCE_SCREEN = 1 + private const val RESOURCE_AUDIO = 2 + private const val TRANSFER_TAKE = 1 + private const val PRIORITY_NICE_TO_HAVE = 100 + private const val CONSTRAINT_ANYTIME = 100 + + fun build(config: AirPlayConfig): Map { + val displays = arrayListOf( + displayEntry(config.main, STREAM_TYPE_MAIN_SCREEN, MAIN_UUID), + ) + config.cluster?.let { displays.add(displayEntry(it, STREAM_TYPE_ALT_SCREEN, ALT_UUID)) } + + val info = linkedMapOf( + "sourceVersion" to config.sourceVersion, + "features" to if (config.disableAudioOutput) CARPLAY_FEATURES_NO_AUDIO else CARPLAY_FEATURES, + "statusFlags" to 4L, + "model" to config.model, + "manufacturer" to config.manufacturer, + "deviceID" to config.deviceId, + "bluetoothIDs" to listOf(config.btMac), + "name" to config.deviceName, + "rightHandDrive" to config.rightHandDrive, + "keepAliveLowPower" to false, + "keepAliveSendStatsAsBody" to false, + "modes" to modes(), + ) + if (!config.disableAudioOutput) { + info["audioLatencies"] = audioLatencies() + info["audioFormats"] = audioFormats(config.entertainmentSampleRate, config.microphone) + } + info["extendedFeatures"] = listOf("vocoderInfo", "enhancedRequestCarUI") + info["displays"] = displays + info["hidDevices"] = listOf( + AirPlayHid.touchHidDevice(config.main.widthPixels, config.main.heightPixels, MAIN_UUID), + AirPlayHid.knobHidDevice(MAIN_UUID), + AirPlayHid.mediaHidDevice(MAIN_UUID), + AirPlayHid.telephonyHidDevice(MAIN_UUID), + ) + if (config.icons.isNotEmpty()) { + info["oemIconVisible"] = true + info["oemIconLabel"] = config.oemLabel + info["oemIcons"] = config.icons.map { icon -> + linkedMapOf( + "imageData" to icon.data, + "widthPixels" to icon.widthPixels, + "heightPixels" to icon.heightPixels, + "prerendered" to true, + ) + } + } + if (config.hevc) info["hevcInfo"] = emptyMap() + return info + } + + private fun resource(resourceId: Int): Map = linkedMapOf( + "resourceID" to resourceId, + "transferType" to TRANSFER_TAKE, + "transferPriority" to PRIORITY_NICE_TO_HAVE, + "takeConstraint" to CONSTRAINT_ANYTIME, + "borrowConstraint" to CONSTRAINT_ANYTIME, + "unborrowConstraint" to CONSTRAINT_ANYTIME, + ) + + private fun modes(): Map = linkedMapOf( + "resources" to listOf(resource(RESOURCE_SCREEN), resource(RESOURCE_AUDIO)), + "appStates" to listOf( + linkedMapOf("appStateID" to 2, "state" to false), + linkedMapOf("appStateID" to 1, "speechMode" to -1), + linkedMapOf("appStateID" to 3, "state" to false), + ), + ) + + private fun audioLatencies(): List> { + fun base(type: Int, audioType: String? = null): Map { + val entry = linkedMapOf( + "type" to type, + "inputLatencyMicros" to 0L, + "outputLatencyMicros" to 0L, + ) + if (audioType != null) entry["audioType"] = audioType + return entry + } + return listOf( + base(100), base(100, "default"), base(100, "media"), base(100, "telephony"), + base(100, "speechRecognition"), base(100, "alert"), base(101), base(101, "default"), + base(102, "default"), + ) + } + + private fun audioFormats( + entertainmentRate: Int, + microphone: Boolean, + ): List> { + fun format(type: Int, audioType: String, outputFormats: Int, inputFormats: Int? = null): Map { + val entry = linkedMapOf( + "type" to type, + "audioType" to audioType, + "audioOutputFormats" to outputFormats, + ) + if (inputFormats != null) entry["audioInputFormats"] = inputFormats + return entry + } + + val is48 = entertainmentRate == 48000 + val pcmVoice = 0x3fc + val pcm = pcmVoice or (if (is48) 0xc000 else 0xc00) + val pcmMono = 0x154 or (if (is48) 0x4000 else 0x400) + val opus = 0x70000000 + val aacLc = if (is48) 0x800000 else 0x400000 + val pcmInput = if (microphone) pcmMono else null + val wirelessInput = if (microphone) pcmMono or opus else null + + return listOf( + format(100, "compatibility", pcm, pcmInput), + format(101, "compatibility", pcm), + format(100, "default", pcm or opus, wirelessInput), + format(100, "alert", pcm or opus), + format(100, "media", pcm), + format(100, "telephony", pcmMono or opus, wirelessInput), + format(100, "speechRecognition", pcmMono or opus, wirelessInput), + format(101, "default", pcm or opus), + format(102, "media", aacLc), + ) + } + + private fun displayEntry(display: AirPlayDisplayConfig, type: Int, uuid: String): Map { + val widthPhysical = AirPlayDisplaySettings.sanitizeReportedPhysicalMm( + display.widthPhysicalMm ?: AirPlayDisplaySettings.DEFAULT_WIDTH_PHYSICAL_MM, + ) + val heightPhysical = AirPlayDisplaySettings.sanitizeReportedPhysicalMm( + display.heightPhysicalMm + ?: Math.round( + widthPhysical * display.heightPixels.toDouble() / display.widthPixels, + ).toInt(), + ) + val fps = AirPlayDisplaySettings.sanitizeFps(display.fps) + + val entry = linkedMapOf( + "uuid" to uuid, + "type" to type, + "maxFPS" to fps, + "widthPixels" to display.widthPixels, + "heightPixels" to display.heightPixels, + "widthPhysical" to widthPhysical, + "heightPhysical" to heightPhysical, + "features" to (DISPLAY_FEATURE_HIGH_FIDELITY_TOUCH or DISPLAY_FEATURE_KNOBS), + "primaryInputDevice" to display.primaryInputDevice, + ) + + entry["viewAreas"] = listOf(areaDict(display)) + entry["initialViewArea"] = 0 + if (display.initialUrl != null) entry["initialURL"] = display.initialUrl + return entry + } + + private fun areaDict(display: AirPlayDisplayConfig): Map { + // The session SETUP response enables "viewAreas", so /info must always describe one. + // A display without custom insets uses the full panel for both the view and safe areas. + val view = display.viewArea ?: AirPlayInsets() + val width = display.widthPixels + val height = display.heightPixels + val result = linkedMapOf( + "widthPixels" to (width - view.left - view.right), + "heightPixels" to (height - view.top - view.bottom), + "originXPixels" to view.left, + "originYPixels" to view.top, + ) + val safe = display.safeArea ?: AirPlayInsets() + val safeArea = linkedMapOf( + "widthPixels" to (width - safe.left - safe.right), + "heightPixels" to (height - safe.top - safe.bottom), + "originXPixels" to safe.left, + "originYPixels" to safe.top, + "drawUIOutsideSafeArea" to (display.safeAreaDrawOutside ?: true), + ) + result["safeArea"] = safeArea + return result + } +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/airplay/AirPlayPeerDiagnostics.kt b/shared/src/main/java/com/shilapi/xcertplay/airplay/AirPlayPeerDiagnostics.kt new file mode 100644 index 0000000..6b2e99e --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/airplay/AirPlayPeerDiagnostics.kt @@ -0,0 +1,13 @@ +package com.shilapi.xcertplay.airplay + +/** Only product/version tokens, never the phone's name, addresses or pairing identifiers. */ +object AirPlayPeerDiagnostics { + private val modelToken = Regex("(?:iPhone|iPad|iPod)[0-9]{1,3},[0-9]{1,3}") + private val versionToken = Regex("[0-9][0-9A-Za-z._-]{0,39}") + + fun summary(model: String, osVersion: String, sourceVersion: String): String { + fun version(value: String) = value.takeIf(versionToken::matches) ?: "not_reported" + return "Phone display peer model=${model.takeIf(modelToken::matches) ?: "not_reported"} " + + "ios=${version(osVersion)} airplay=${version(sourceVersion)}" + } +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/airplay/AirPlaySession.kt b/shared/src/main/java/com/shilapi/xcertplay/airplay/AirPlaySession.kt new file mode 100644 index 0000000..c5e933e --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/airplay/AirPlaySession.kt @@ -0,0 +1,736 @@ +package com.shilapi.xcertplay.airplay + +import android.util.Log +import com.shilapi.xcertplay.mfi.MfiAuthenticator +import com.shilapi.xcertplay.transport.BlockingDuplexByteStream +import java.io.BufferedInputStream +import java.io.BufferedOutputStream +import java.io.Closeable +import java.math.BigInteger +import java.net.DatagramPacket +import java.net.DatagramSocket +import java.net.InetAddress +import java.net.InetSocketAddress +import java.net.ServerSocket +import java.net.Socket +import java.util.concurrent.CopyOnWriteArrayList +import java.util.concurrent.atomic.AtomicBoolean + +data class AirPlayDeviceInfo( + val name: String, + val deviceId: String, + val wifiMac: String, + val model: String, +) + +/** Session lifecycle and command callbacks for the driver/UI layer. */ +interface AirPlaySessionListener { + fun onSessionActive(session: AirPlaySession) {} + fun onSessionEnded(session: AirPlaySession) {} + fun onVideoFrameRendered(session: AirPlaySession) {} + fun onTransportError(message: String) {} + fun onDeviceInfo(session: AirPlaySession, info: AirPlayDeviceInfo) {} + fun onHostUiRequested(session: AirPlaySession) {} + fun onCommand(session: AirPlaySession, type: String, params: Map) {} + fun onDebugLog(message: String) {} +} + +/** Stream transport seam; media decode/render is supplied by a later layer. */ +interface AirPlayMediaHandler { + fun onScreen(session: AirPlaySession, type: Int, stream: Map): Int? = null + fun onAudio(session: AirPlaySession, type: Int, stream: Map): Map? = null + fun onDataStream(session: AirPlaySession, stream: Map): Map? = null + fun onFeedback(session: AirPlaySession): Map? = null + fun onTeardown(session: AirPlaySession, type: Int) {} + fun onSessionClosed(session: AirPlaySession) {} + fun setIapTunnelHandler(handler: ((BlockingDuplexByteStream) -> Boolean)?) {} + fun onSetupResponseSent(session: AirPlaySession) {} +} + +/** + * One CarPlay AirPlay control connection. + * + * It owns the RTSP framing, pairing/auth/info routing, the encrypted event channel used for HID + * input, stream SETUP/TEARDOWN routing, the NTP timing exchange, and the keep-alive socket. + */ +class AirPlaySession( + private val socket: Socket, + private val config: AirPlayConfig, + private val identity: AirPlayIdentity, + private val pairings: PairingStore, + private val mfi: MfiAuthenticator?, + private val listener: AirPlaySessionListener, + private val media: AirPlayMediaHandler, +) : Closeable { + internal val pairSetup = PairSetup(identity, pairings) + internal val pairVerify = PairVerify(identity, pairings) + internal var cipher: ControlCipher? = null + internal var encBuf = ByteArray(0) + internal var deviceBtMac = "" + internal val activeStreams = linkedSetOf() + + private val closed = AtomicBoolean(false) + private val notified = AtomicBoolean(false) + private var eventServer: ServerSocket? = null + private var eventSocket: Socket? = null + private var eventCipher: ControlCipher? = null + private var eventCseq = 0 + private var pendingNightMode: Boolean? = null + private val firstTouchSendLogged = AtomicBoolean(false) + private val touchSendFailureLogged = AtomicBoolean(false) + private val ntp = NtpClock() + private var keepAliveSocket: DatagramSocket? = null + private var keepAliveThread: Thread? = null + private val eventWriteLock = Any() + private val eventThreads = CopyOnWriteArrayList() + + val host: String = socket.inetAddress?.hostAddress ?: "" + val localAddress: InetAddress? = socket.localAddress + private val peerAddress: InetAddress? = socket.inetAddress + internal val remoteAddress: InetAddress? + get() = (socket.remoteSocketAddress as? InetSocketAddress)?.address + val controllerId: String? get() = pairVerify.verifiedControllerId + val sharedSecret: ByteArray? get() = pairVerify.shared?.copyOf() + + fun syncedNtp(): BigInteger = ntp.syncedNtp() + + internal fun logDebug(message: String) = debugLog(message) + + internal fun videoFrameRendered() { + if (!closed.get()) listener.onVideoFrameRendered(this) + } + + internal fun logTrace(message: String) = trace(message) + + fun start() { + Thread(::runControl, "airplay-control").apply { + isDaemon = true + start() + } + } + + override fun close() { + if (!closed.compareAndSet(false, true)) return + safeClose(socket) + try { + media.onSessionClosed(this) + } catch (error: Exception) { + Log.w(TAG, "airplay media stream teardown failed", error) + } + teardown() + if (notified.compareAndSet(false, true)) listener.onSessionEnded(this) + } + + fun sendCommand(command: Map): Boolean = synchronized(eventWriteLock) { + sendCommandLocked(command) + } + + private fun sendCommandLocked(command: Map): Boolean { + val socket = eventSocket ?: return false + val cipher = eventCipher ?: return false + eventCseq++ + val body = BplistCodec.encode(command) + val head = "POST /command RTSP/1.0\r\n" + + "Content-Type: $PLIST_CONTENT_TYPE\r\n" + + "Content-Length: ${body.size}\r\n" + + "CSeq: $eventCseq\r\n\r\n" + trace("airplay event tx headers=$head bodyHex=${body.toHex()}") + return try { + val bytes = cipher.encrypt(head.toByteArray(Charsets.US_ASCII) + body) + val output = socket.getOutputStream() + output.write(bytes) + output.flush() + true + } catch (error: Exception) { + Log.w(TAG, "airplay event command failed type=${command["type"]}", error) + close() + false + } + } + + fun sendTouch(contacts: List): Boolean { + val scaled = contacts.map { + it.copy(x = it.x * config.main.widthPixels, y = it.y * config.main.heightPixels) + } + val report = AirPlayHid.touchReport(scaled) + val sent = sendHidReport(AirPlayHid.TOUCH_HID_UID, report) + if (sent && firstTouchSendLogged.compareAndSet(false, true)) { + val first = scaled.firstOrNull() + Log.i( + TAG, + "airplay touch report sent contacts=${scaled.size} first=" + + "(${first?.x},${first?.y},down=${first?.down}) report=${report.toHexString()}", + ) + } else if (!sent && touchSendFailureLogged.compareAndSet(false, true)) { + Log.w(TAG, "airplay touch dropped: event channel is not ready") + } + return sent + } + + fun sendKnob(state: AirPlayKnobState, momentary: Boolean = true) { + sendHidReport(AirPlayHid.KNOB_HID_UID, AirPlayHid.knobReport(state)) + if (momentary) sendHidReport(AirPlayHid.KNOB_HID_UID, AirPlayHid.knobReport(AirPlayKnobState())) + } + + fun sendKnobSelect(down: Boolean) = + sendHidReport(AirPlayHid.KNOB_HID_UID, AirPlayHid.knobReport(AirPlayKnobState(select = down))) + + fun sendMedia(index: Int) { + sendHidReport(AirPlayHid.MEDIA_HID_UID, AirPlayHid.mediaReport(index)) + sendHidReport(AirPlayHid.MEDIA_HID_UID, AirPlayHid.mediaReport(0)) + } + + fun sendTelephony(index: Int) { + sendHidReport(AirPlayHid.TELEPHONY_HID_UID, AirPlayHid.telephonyReport(index)) + sendHidReport(AirPlayHid.TELEPHONY_HID_UID, AirPlayHid.telephonyReport(0)) + } + + fun invokeSiri() { + sendCommand(linkedMapOf("type" to "requestSiri", "params" to linkedMapOf("siriAction" to 2))) + sendCommand(linkedMapOf("type" to "requestSiri", "params" to linkedMapOf("siriAction" to 3))) + } + + fun sendIapMessage(data: ByteArray, timeoutMillis: Long = 0L): Boolean { + require(timeoutMillis >= 0) { "timeoutMillis must not be negative" } + val command = linkedMapOf( + "type" to "iAPSendMessage", + "params" to linkedMapOf("data" to data), + ) + if (timeoutMillis == 0L) return sendCommand(command) + + val deadlineNanos = System.nanoTime() + timeoutMillis * NANOS_PER_MILLISECOND + while (true) { + val sent = synchronized(eventWriteLock) { + if (eventSocket == null || eventCipher == null) { + null + } else { + sendCommandLocked(command) + } + } + if (sent != null) return sent + if (closed.get()) return false + + val remainingNanos = deadlineNanos - System.nanoTime() + if (remainingNanos <= 0) return false + val sleepMillis = minOf( + EVENT_READY_POLL_MILLIS, + (remainingNanos + NANOS_PER_MILLISECOND - 1) / NANOS_PER_MILLISECOND, + ).coerceAtLeast(1) + try { + Thread.sleep(sleepMillis) + } catch (_: InterruptedException) { + Thread.currentThread().interrupt() + return false + } + } + } + + fun setNightMode(night: Boolean): Boolean = synchronized(eventWriteLock) { + pendingNightMode = night + sendPendingNightModeLocked() + } + + private fun sendPendingNightModeLocked(): Boolean { + val night = pendingNightMode ?: return true + val sent = sendCommandLocked( + linkedMapOf("type" to "setNightMode", "params" to linkedMapOf("nightMode" to night)), + ) + if (sent) pendingNightMode = null + return sent + } + + private fun sendHidReport(uid: Int, report: ByteArray): Boolean = + sendCommand( + linkedMapOf( + "type" to "hidSendReport", + "uuid" to uid.toString(16), + "hidReport" to report, + ), + ) + + private fun runControl() { + val input = BufferedInputStream(socket.getInputStream()) + val output = BufferedOutputStream(socket.getOutputStream()) + var accumulated = ByteArray(0) + val buffer = ByteArray(READ_CHUNK_BYTES) + var closeReason = "session closed" + try { + while (!closed.get()) { + val count = input.read(buffer) + if (count < 0) { + closeReason = "peer EOF" + break + } + var plaintext = buffer.copyOf(count) + val activeCipher = cipher + if (activeCipher != null) { + encBuf += plaintext + val decrypted = try { + activeCipher.decrypt(encBuf) + } catch (error: Exception) { + closeReason = "control decrypt failed: ${error.message ?: error.javaClass.simpleName}" + Log.e(TAG, "airplay $closeReason encrypted=${encBuf.size}", error) + break + } + encBuf = decrypted.rest + plaintext = decrypted.data + } + accumulated += plaintext + val parsed = RtspMessage.parseMessages(accumulated) + accumulated = parsed.rest + for (request in parsed.messages) { + val cseq = request.headers["cseq"] ?: "-" + val path = request.path.lowercase() + val showInDebugOverlay = + !path.endsWith("/feedback") && + !(request.method == "POST" && path.endsWith("/command")) + debugLog( + "airplay rx ${request.method} ${request.path} cseq=$cseq body=${request.body.size}", + showInDebugOverlay, + ) + trace( + "airplay control rx headers=${request.headers} " + + "bodyHex=${request.body.toHex()}", + ) + val response = try { + handle(request) + } catch (error: Exception) { + Log.e( + TAG, + "airplay handler failed ${request.method} ${request.path} cseq=$cseq", + error, + ) + RtspMessage.Response(status = 500) + } + debugLog( + "airplay tx status=${response.status ?: 200} cseq=$cseq body=${response.body.size}", + showInDebugOverlay, + ) + val wire = RtspMessage.buildResponse(request, response) + trace("airplay control tx wireHex=${wire.toHex()}") + output.write(cipher?.encrypt(wire) ?: wire) + if (cipher == null && pairVerify.controlKeys != null) { + val keys = pairVerify.controlKeys!! + cipher = ControlCipher(keys.readKey, keys.writeKey) + debugLog("airplay control encryption enabled") + } + } + output.flush() + notifySetupResponseSent() + } + } catch (error: Exception) { + closeReason = "control I/O failed: ${error.message ?: error.javaClass.simpleName}" + if (!closed.get()) Log.e(TAG, "airplay $closeReason", error) + } finally { + debugLog("airplay control closing reason=$closeReason activeStreams=$activeStreams") + close() + } + } + + private fun handle(request: RtspMessage.Request): RtspMessage.Response { + when (request.method) { + "SETUP" -> return handleSetup(request) + "RECORD" -> { + listener.onSessionActive(this) + return RtspMessage.Response(status = 200) + } + "TEARDOWN" -> return handleTeardown(request) + } + + val path = request.path.lowercase() + return when { + path.endsWith("/pair-setup") -> RtspMessage.Response( + headers = mapOf("Content-Type" to PAIRING_CONTENT_TYPE), + body = pairSetup.handle(request.body), + ) + path.endsWith("/pair-verify") -> RtspMessage.Response( + headers = mapOf("Content-Type" to PAIRING_CONTENT_TYPE), + body = pairVerify.handle(request.body), + ) + path.endsWith("/auth-setup") -> { + val body = mfi?.let { MfiSapAuthSetup.handle(request.body, it) } + if (body == null) RtspMessage.Response(status = 400) + else RtspMessage.Response(headers = mapOf("Content-Type" to OCTET_CONTENT_TYPE), body = body) + } + path.endsWith("/info") -> { + val info = AirPlayInfoPlist.build(config) + if (request.body.isNotEmpty()) { + val requestInfo = try { + BplistCodec.decode(request.body).toString() + } catch (_: Exception) { + "" + } + debugLog("airplay /info request=$requestInfo") + } + Log.i( + TAG, + "airplay /info features=${info["features"]} " + + "audioFormats=${(info["audioFormats"] as? List<*>)?.size ?: 0} " + + "audioLatencies=${(info["audioLatencies"] as? List<*>)?.size ?: 0}", + ) + debugLog("airplay /info displays=${info["displays"]}") + RtspMessage.Response( + headers = mapOf("Content-Type" to PLIST_CONTENT_TYPE), + body = BplistCodec.encode(info), + ) + } + request.method == "POST" && path.endsWith("/command") -> handleCommand(request) + request.method == "POST" && path.endsWith("/feedback") -> { + val body = media.onFeedback(this) + if (body == null) { + RtspMessage.Response(status = 200) + } else { + RtspMessage.Response( + headers = mapOf("Content-Type" to PLIST_CONTENT_TYPE), + body = BplistCodec.encode(body), + ) + } + } + else -> RtspMessage.Response(status = 200) + } + } + + private fun notifySetupResponseSent() { + try { + media.onSetupResponseSent(this) + } catch (error: Exception) { + Log.w(TAG, "airplay SETUP response callback failed", error) + } + } + + private fun debugLog(message: String, uiVisible: Boolean = true) { + Log.i(TAG, message) + if (!uiVisible) return + try { + listener.onDebugLog(message) + } catch (error: Exception) { + Log.w(TAG, "debug log callback failed", error) + } + } + + private fun trace(message: String) { + try { + listener.onDebugLog("TRACE $message") + } catch (error: Exception) { + Log.w(TAG, "trace log callback failed", error) + } + } + + private fun handleSetup(request: RtspMessage.Request): RtspMessage.Response { + val dict = try { + asMap(BplistCodec.decode(request.body)) ?: return RtspMessage.Response(status = 400) + } catch (error: Exception) { + Log.e(TAG, "airplay SETUP plist decode failed body=${request.body.size}", error) + return RtspMessage.Response(status = 400) + } + debugLog("airplay SETUP keys=${dict.keys.sorted()}") + val streams = dict["streams"] as? List<*> + if (streams != null) { + val responseStreams = handleStreams(streams) + debugLog("airplay SETUP response streams=$responseStreams") + val body = BplistCodec.encode(linkedMapOf("streams" to responseStreams)) + trace("airplay SETUP response bplistHex=${body.toHex()}") + return RtspMessage.Response(headers = mapOf("Content-Type" to PLIST_CONTENT_TYPE), body = body) + } + + val name = string(dict["name"]) + val deviceId = string(dict["deviceID"]) + val wifiMac = string(dict["macAddress"]).lowercase() + val model = string(dict["model"]) + debugLog(AirPlayPeerDiagnostics.summary(model, string(dict["osVersion"]), string(dict["sourceVersion"]))) + if (deviceId.isNotEmpty()) deviceBtMac = deviceId + if (name.isNotEmpty() || deviceId.isNotEmpty() || wifiMac.isNotEmpty()) { + listener.onDeviceInfo(this, AirPlayDeviceInfo(name, deviceId, wifiMac, model)) + } + + val peerTimingPort = long(dict["timingPort"])?.toInt() ?: 0 + val response = linkedMapOf( + "timingPort" to openTiming(peerTimingPort), + "eventPort" to openEvent(), + ) + if (dict["keepAliveLowPower"] == true || dict["keepAliveLowPower"] == 1L) { + response["keepAlivePort"] = openKeepAlive() + } + val features = mutableListOf() + if (config.hevc) features.add("hevc") + features.add("iAPChannel") + features.add("viewAreas") + if (config.cluster != null) features.add("altScreen") + response["enabledFeatures"] = features + return RtspMessage.Response( + headers = mapOf("Content-Type" to PLIST_CONTENT_TYPE), + body = BplistCodec.encode(response), + ) + } + + private fun handleStreams(streams: List<*>): List { + val result = arrayListOf() + for (entry in streams) { + val stream = asMap(entry) ?: continue + val type = long(stream["type"])?.toInt() ?: continue + debugLog("airplay SETUP stream type=$type payload=$stream") + when (type) { + STREAM_TYPE_MAIN_SCREEN, STREAM_TYPE_ALT_SCREEN -> { + val port = media.onScreen(this, type, stream) + debugLog("airplay screen stream type=$type dataPort=${port ?: "rejected"}") + if (port != null) { + activeStreams.add(type) + result.add(linkedMapOf("type" to type, "dataPort" to port)) + } + } + STREAM_TYPE_MAIN_AUDIO, STREAM_TYPE_ALT_AUDIO, STREAM_TYPE_MAIN_HIGH_AUDIO -> { + val streamResponse = media.onAudio(this, type, stream) + debugLog( + "airplay audio stream type=$type accepted=${streamResponse != null} " + + "dataPort=${streamResponse?.get("dataPort") ?: "none"} " + + "controlPort=${streamResponse?.get("controlPort") ?: "none"}", + ) + if (streamResponse != null) { + activeStreams.add(type) + result.add(streamResponse) + } + } + STREAM_TYPE_DATA -> { + val streamResponse = media.onDataStream(this, stream) + debugLog( + "airplay data stream type=$type accepted=${streamResponse != null} " + + "dataPort=${streamResponse?.get("dataPort") ?: "none"}", + ) + if (streamResponse != null) { + activeStreams.add(type) + result.add(streamResponse) + } + } + else -> debugLog("airplay unsupported stream type=$type") + } + } + return result + } + + private fun handleCommand(request: RtspMessage.Request): RtspMessage.Response { + val body = try { + asMap(BplistCodec.decode(request.body)) ?: emptyMap() + } catch (_: Exception) { + emptyMap() + } + val type = string(body["type"]) + val params = asMap(body["params"]) ?: emptyMap() + debugLog("airplay command type=$type keys=${params.keys.sorted()}") + if (type == "requestUI") listener.onHostUiRequested(this) + listener.onCommand(this, type, params) + return RtspMessage.Response(status = 200) + } + + private fun handleTeardown(request: RtspMessage.Request): RtspMessage.Response { + var decodedBody: Any? = null + val types = try { + val decoded = BplistCodec.decode(request.body) + decodedBody = decoded + val dict = asMap(decoded) + (dict?.get("streams") as? List<*>) + ?.mapNotNull { entry -> long(asMap(entry)?.get("type"))?.toInt() } + ?: emptyList() + } catch (_: Exception) { + emptyList() + } + + debugLog( + "airplay TEARDOWN types=$types activeBefore=$activeStreams " + + "body=${request.body.size} bytes payload=$decodedBody", + ) + trace("airplay TEARDOWN raw${request.body.size}Hex=${request.body.toHex()}") + + if (types.isEmpty()) { + activeStreams.toList().forEach { media.onTeardown(this, it) } + activeStreams.clear() + } else { + types.forEach { type -> if (activeStreams.remove(type)) media.onTeardown(this, type) } + } + return RtspMessage.Response(status = 200) + } + + private fun openTiming(peerPort: Int): Int { + val port = ntp.listen() + if (peerPort > 0) peerAddress?.let { ntp.start(it, peerPort) } + return port + } + + private fun openKeepAlive(): Int { + val socket = DatagramSocket(null) + socket.reuseAddress = true + socket.bind(InetSocketAddress(InetAddress.getByName("::"), 0)) + keepAliveSocket = socket + keepAliveThread = Thread({ runKeepAlive(socket) }, "airplay-keepalive").apply { + isDaemon = true + start() + } + return socket.localPort + } + + private fun runKeepAlive(socket: DatagramSocket) { + val buffer = ByteArray(512) + while (!closed.get()) { + try { + socket.receive(DatagramPacket(buffer, buffer.size)) + } catch (_: Exception) { + if (closed.get()) return + } + } + } + + private fun openEvent(): Int { + val server = ServerSocket(0, 50, InetAddress.getByName("::")) + eventServer = server + spawnEvent("airplay-event-accept") { acceptEvent(server) } + return server.localPort + } + + private fun teardown() { + ntp.close() + safeClose(keepAliveSocket) + keepAliveSocket = null + keepAliveThread?.interrupt() + keepAliveThread = null + safeClose(eventServer) + eventServer = null + safeClose(eventSocket) + eventSocket = null + eventCipher = null + eventThreads.forEach { it.interrupt() } + eventThreads.clear() + } + + private fun acceptEvent(server: ServerSocket) { + try { + val socket = server.accept() + socket.setSoLinger(true, 0) + debugLog("airplay event connection accepted from ${socket.remoteSocketAddress}") + eventSocket = socket + val shared = pairVerify.shared + if (shared == null) { + Log.e(TAG, "airplay event rejected: pair-verify shared secret unavailable") + safeClose(socket) + close() + return + } + val writeKey = AirPlayCrypto.hkdfSha512( + shared, + "Events-Salt".asciiBytes(), + "Events-Write-Encryption-Key".asciiBytes(), + 32, + ) + val readKey = AirPlayCrypto.hkdfSha512( + shared, + "Events-Salt".asciiBytes(), + "Events-Read-Encryption-Key".asciiBytes(), + 32, + ) + eventCipher = ControlCipher(readKey, writeKey) + synchronized(eventWriteLock) { + sendPendingNightModeLocked() + } + runEventRead(socket) + } catch (error: Exception) { + if (!closed.get()) { + Log.e(TAG, "airplay event accept failed", error) + close() + } + } + } + + private fun runEventRead(socket: Socket) { + try { + val input = BufferedInputStream(socket.getInputStream()) + val output = BufferedOutputStream(socket.getOutputStream()) + var encrypted = ByteArray(0) + var plaintext = ByteArray(0) + val buffer = ByteArray(READ_CHUNK_BYTES) + while (!closed.get()) { + val count = input.read(buffer) + if (count < 0) break + val cipher = eventCipher ?: break + encrypted += buffer.copyOf(count) + val decrypted = try { + cipher.decrypt(encrypted) + } catch (error: Exception) { + Log.e(TAG, "airplay event decrypt failed encrypted=${encrypted.size}", error) + break + } + encrypted = decrypted.rest + plaintext += decrypted.data + val parsed = RtspMessage.parseMessages(plaintext) + plaintext = parsed.rest + for (message in parsed.messages) { + if (message.method.startsWith("RTSP/") || message.method.startsWith("HTTP/")) continue + debugLog( + "airplay event rx ${message.method} ${message.path} cseq=${message.headers["cseq"] ?: "-"} body=${message.body.size}", + ) + val response = RtspMessage.buildResponse(message, RtspMessage.Response(status = 200)) + trace( + "airplay event rx headers=${message.headers} " + + "bodyHex=${message.body.toHex()}", + ) + trace("airplay event tx wireHex=${response.toHex()}") + synchronized(eventWriteLock) { + output.write(cipher.encrypt(response)) + output.flush() + } + } + } + } catch (error: Exception) { + if (!closed.get()) Log.e(TAG, "airplay event read failed", error) + } finally { + debugLog("airplay event connection closed") + if (eventSocket === socket) eventSocket = null + eventCipher = null + safeClose(socket) + if (!closed.get()) close() + } + } + + private fun spawnEvent(name: String, body: () -> Unit) { + val thread = Thread(body, name).apply { isDaemon = true } + eventThreads.add(thread) + thread.start() + } + + private companion object { + const val TAG = "xcertplay-usb" + const val PLIST_CONTENT_TYPE = "application/x-apple-binary-plist" + const val PAIRING_CONTENT_TYPE = "application/pairing+tlv8" + const val OCTET_CONTENT_TYPE = "application/octet-stream" + + const val STREAM_TYPE_MAIN_SCREEN = 110 + const val STREAM_TYPE_ALT_SCREEN = 111 + const val STREAM_TYPE_MAIN_AUDIO = 100 + const val STREAM_TYPE_ALT_AUDIO = 101 + const val STREAM_TYPE_MAIN_HIGH_AUDIO = 102 + const val STREAM_TYPE_DATA = 130 + + const val READ_CHUNK_BYTES = 16 * 1024 + const val EVENT_READY_POLL_MILLIS = 25L + const val NANOS_PER_MILLISECOND = 1_000_000L + } +} + +internal fun safeClose(closeable: Closeable?) { + try { + closeable?.close() + } catch (_: Exception) { + // Best-effort close. + } +} + +private fun ByteArray.toHex(): String = + joinToString(separator = "") { byte -> "%02x".format(byte.toInt() and 0xff) } + +private fun asMap(value: Any?): Map? { + val map = value as? Map<*, *> ?: return null + val result = LinkedHashMap(map.size) + for ((key, entry) in map) result[key.toString()] = entry + return result +} + +private fun string(value: Any?): String = value as? String ?: "" + +private fun long(value: Any?): Long? = (value as? Number)?.toLong() diff --git a/shared/src/main/java/com/shilapi/xcertplay/airplay/AudioPacketCapture.kt b/shared/src/main/java/com/shilapi/xcertplay/airplay/AudioPacketCapture.kt new file mode 100644 index 0000000..832995a --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/airplay/AudioPacketCapture.kt @@ -0,0 +1,136 @@ +package com.shilapi.xcertplay.airplay + +import android.util.Log +import java.io.BufferedOutputStream +import java.io.Closeable +import java.io.DataOutputStream +import java.io.File +import java.io.FileOutputStream +import java.util.concurrent.atomic.AtomicBoolean + +/** + * Diagnostic capture for the encrypted UDP datagrams and decrypted RTP packets of one audio + * stream. The caller must opt in by supplying a capture directory. + * + * File format: + * bytes 0..7: "XCAUDIO1" + * int32 version + * int32 stream type + * int64 wall-clock start time (milliseconds) + * repeated records: + * int32 wire length + * int32 decrypted RTP length, or -1 when authentication failed + * int32 RTP sample position, or -1 when unavailable + * int64 monotonic timestamp (nanoseconds) + * int32 UTF-8 error length + * wire bytes + * decrypted RTP bytes when length >= 0 + * UTF-8 error bytes + */ +class AudioPacketCapture( + directory: File, + private val streamType: Int, + private val maxPackets: Int = 512, + private val maxBytes: Long = 16L * 1024L * 1024L, +) : Closeable { + private val closed = AtomicBoolean(false) + private var packets = 0 + private var bytesWritten: Long = (MAGIC.size + HEADER_BYTES).toLong() + private val output: DataOutputStream? + + val file: File + + init { + val captureDirectory = if (directory.isDirectory || directory.mkdirs()) { + directory + } else { + null + } + file = if (captureDirectory == null) { + File(directory, "audio-capture-unavailable-type-$streamType.xcap") + } else { + File( + captureDirectory, + "audio-${System.currentTimeMillis()}-type-$streamType.xcap", + ) + } + output = if (captureDirectory == null) { + null + } else { + try { + DataOutputStream(BufferedOutputStream(FileOutputStream(file, false))).also { + it.write(MAGIC) + it.writeInt(VERSION) + it.writeInt(streamType) + it.writeLong(System.currentTimeMillis()) + it.flush() + Log.i(TAG, "audio capture started type=$streamType file=${file.absolutePath}") + } + } catch (error: Exception) { + Log.w(TAG, "audio capture could not open type=$streamType", error) + null + } + } + } + + fun record( + wire: ByteArray, + rtp: ByteArray?, + sample: Int?, + error: Throwable?, + ) { + if (output == null || closed.get()) return + synchronized(this) { + if (closed.get() || packets >= maxPackets) return + val errorBytes = error?.message?.toByteArray(Charsets.UTF_8) ?: ByteArray(0) + val recordBytes = 4L * 4 + 8 + wire.size + (rtp?.size ?: 0) + errorBytes.size + if (bytesWritten + recordBytes > maxBytes) { + close() + return + } + try { + output.writeInt(wire.size) + output.writeInt(rtp?.size ?: -1) + output.writeInt(sample ?: -1) + output.writeLong(System.nanoTime()) + output.writeInt(errorBytes.size) + output.write(wire) + if (rtp != null) output.write(rtp) + output.write(errorBytes) + packets += 1 + bytesWritten += recordBytes + if (packets % FLUSH_INTERVAL_PACKETS == 0) output.flush() + if (packets >= maxPackets) close() + } catch (failure: Exception) { + Log.w(TAG, "audio capture write failed type=$streamType", failure) + close() + } + } + } + + override fun close() { + if (!closed.compareAndSet(false, true)) return + try { + output?.flush() + output?.close() + } catch (error: Exception) { + Log.w(TAG, "audio capture close failed type=$streamType", error) + } finally { + if (output != null) { + Log.i( + TAG, + "audio capture stopped type=$streamType packets=$packets " + + "bytes=$bytesWritten file=${file.absolutePath}", + ) + } + } + } + + private companion object { + const val TAG = "xcertplay-usb" + const val VERSION = 1 + const val HEADER_BYTES = 16 + const val FLUSH_INTERVAL_PACKETS = 16 + val MAGIC = "XCAUDIO1".toByteArray(Charsets.US_ASCII) + } +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/airplay/AudioStream.kt b/shared/src/main/java/com/shilapi/xcertplay/airplay/AudioStream.kt new file mode 100644 index 0000000..a81b3f2 --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/airplay/AudioStream.kt @@ -0,0 +1,229 @@ +package com.shilapi.xcertplay.airplay + +import java.io.Closeable +import java.io.IOException +import java.net.DatagramPacket +import java.net.DatagramSocket +import java.net.InetAddress +import java.net.InetSocketAddress +import java.util.concurrent.atomic.AtomicBoolean +import java.util.concurrent.atomic.AtomicInteger + +enum class AudioCodecKind { AAC_LC, OPUS, LPCM } + +data class AudioFormat( + val codec: AudioCodecKind, + val sampleRate: Int, + val channels: Int, + val payloadType: Int, + val audioType: String = "media", +) + +/** + * Binds the RTP data and RTCP control UDP ports for one CarPlay audio stream. + * + * Wire layout follows LIVI `livi_audio_stream`: one RTP packet per datagram, a 12-byte header, + * ciphertext, a 16-byte tag, then an 8-byte little-endian nonce. The header's last eight bytes + * (timestamp + SSRC) are the AEAD associated data. + */ +class AudioStream( + private val key: ByteArray, + private val streamType: Int = -1, +) : Closeable { + interface Listener { + fun onStarted(firstSample: Int) {} + fun onRtp(rtp: ByteArray, sample: Int) {} + fun onPacket( + wire: ByteArray, + rtp: ByteArray?, + sample: Int?, + error: Throwable?, + ) {} + } + + private val closed = AtomicBoolean(false) + private val receivedPackets = AtomicInteger() + private val decryptedPackets = AtomicInteger() + private val authenticationFailures = AtomicInteger() + private var dataSocket: DatagramSocket? = null + private var controlSocket: DatagramSocket? = null + private var dataThread: Thread? = null + private var controlThread: Thread? = null + private var started = false + + fun listen(listener: Listener): Pair { + val data = bindAnyPort() + val control = bindAnyPort() + dataSocket = data + controlSocket = control + dataThread = Thread({ runData(data, listener) }, "airplay-audio-rx").apply { + isDaemon = true + start() + } + controlThread = Thread({ runControl(control) }, "airplay-rtcp-rx").apply { + isDaemon = true + start() + } + return data.localPort to control.localPort + } + + override fun close() { + if (!closed.compareAndSet(false, true)) return + dataSocket?.close() + controlSocket?.close() + dataThread?.interrupt() + controlThread?.interrupt() + } + + private fun runData(socket: DatagramSocket, listener: Listener) { + val buffer = ByteArray(DATAGRAM_BYTES) + while (!closed.get()) { + val packet = DatagramPacket(buffer, buffer.size) + try { + socket.receive(packet) + } catch (_: Exception) { + if (closed.get()) return else continue + } + val wire = packet.data.copyOf(packet.length) + val packetNumber = receivedPackets.incrementAndGet() + if (wire.size < RTP_HEADER_LEN + TAIL_LEN) { + if (packetNumber == 1) { + android.util.Log.w( + TAG, + "audio stream type=$streamType short packet bytes=${wire.size}", + ) + } + listener.onPacket( + wire, + null, + null, + IOException("audio packet shorter than RTP header plus tail"), + ) + continue + } + + val aad = wire.copyOfRange(4, RTP_HEADER_LEN) + val sealedEnd = wire.size - NONCE_LEN + val sealed = wire.copyOfRange(RTP_HEADER_LEN, sealedEnd) + val shortNonce = wire.copyOfRange(sealedEnd, wire.size) + val nonce = ByteArray(12).also { shortNonce.copyInto(it, 4) } + val sample = readU32Be(wire, 4) + + val payload = try { + AirPlayCrypto.chachaOpen(key, nonce, sealed, aad) + } catch (error: Exception) { + val failureNumber = authenticationFailures.incrementAndGet() + if (failureNumber == 1) { + android.util.Log.w( + TAG, + "audio stream type=$streamType first decrypt failure " + + "wire=${wire.toHexString()}", + error, + ) + } + listener.onPacket(wire, null, sample, error) + continue + } + val rtp = wire.copyOf(RTP_HEADER_LEN) + payload + val decryptedNumber = decryptedPackets.incrementAndGet() + if (decryptedNumber <= FIRST_PACKET_LOG_COUNT) { + android.util.Log.i( + TAG, + "audio stream type=$streamType packet=$decryptedNumber sample=$sample " + + "wireBytes=${wire.size} payloadBytes=${payload.size} " + + "payloadHead=${payload.copyOf(minOf(payload.size, 16)).toHexString()}", + ) + } else if (decryptedNumber % PACKET_LOG_INTERVAL == 0) { + android.util.Log.i( + TAG, + "audio stream type=$streamType decrypted=$decryptedNumber " + + "authFailures=${authenticationFailures.get()}", + ) + } + listener.onPacket(wire, rtp, sample, null) + if (!started) { + started = true + listener.onStarted(sample) + } + listener.onRtp(rtp, sample) + } + } + + private fun runControl(socket: DatagramSocket) { + val buffer = ByteArray(DATAGRAM_BYTES) + while (!closed.get()) { + try { + socket.receive(DatagramPacket(buffer, buffer.size)) + } catch (_: Exception) { + if (closed.get()) return + } + } + } + + private fun bindAnyPort(): DatagramSocket { + val socket = DatagramSocket(null) + socket.reuseAddress = true + socket.bind(InetSocketAddress(InetAddress.getByName("::"), 0)) + return socket + } + + private fun readU32Be(source: ByteArray, offset: Int): Int = + ((source[offset].toInt() and 0xff) shl 24) or + ((source[offset + 1].toInt() and 0xff) shl 16) or + ((source[offset + 2].toInt() and 0xff) shl 8) or + (source[offset + 3].toInt() and 0xff) + + private fun ByteArray.toHexString(): String = + joinToString("") { byte -> "%02x".format(byte.toInt() and 0xff) } + + private companion object { + const val TAG = "xcertplay-usb" + const val DATAGRAM_BYTES = 4_096 + const val RTP_HEADER_LEN = 12 + const val TAG_LEN = 16 + const val NONCE_LEN = 8 + const val TAIL_LEN = TAG_LEN + NONCE_LEN + const val FIRST_PACKET_LOG_COUNT = 3 + const val PACKET_LOG_INTERVAL = 100 + } +} + +/** Maps the phone's negotiated audioFormat bits to a decode/render format. */ +object AudioStreamCodec { + fun fromFormatBits(bits: Long, payloadType: Int, audioType: String = "media"): AudioFormat { + val isAacLc = (bits and (AAC_LC_44K_STEREO or AAC_LC_48K_STEREO)) != 0L + val isOpus = (bits and OPUS_MONO) != 0L + val pcm = PCM_FORMAT[bits] + return when { + isOpus -> AudioFormat(AudioCodecKind.OPUS, 48_000, 1, payloadType, audioType) + isAacLc -> AudioFormat( + AudioCodecKind.AAC_LC, + if ((bits and AAC_LC_48K_STEREO) != 0L) 48_000 else 44_100, + 2, + payloadType, + audioType, + ) + pcm != null -> AudioFormat(AudioCodecKind.LPCM, pcm.first, pcm.second, payloadType, audioType) + else -> AudioFormat(AudioCodecKind.LPCM, 44_100, 2, payloadType, audioType) + } + } + + private const val AAC_LC_44K_STEREO = 0x400000L + private const val AAC_LC_48K_STEREO = 0x800000L + private const val OPUS_MONO = 0x10000000L or 0x20000000L or 0x40000000L + + private val PCM_FORMAT = mapOf( + 0x4L to (8_000 to 1), + 0x8L to (8_000 to 2), + 0x10L to (16_000 to 1), + 0x20L to (16_000 to 2), + 0x40L to (24_000 to 1), + 0x80L to (24_000 to 2), + 0x100L to (32_000 to 1), + 0x200L to (32_000 to 2), + 0x400L to (44_100 to 1), + 0x800L to (44_100 to 2), + 0x4000L to (48_000 to 1), + 0x8000L to (48_000 to 2), + ) +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/airplay/BplistCodec.kt b/shared/src/main/java/com/shilapi/xcertplay/airplay/BplistCodec.kt new file mode 100644 index 0000000..786faf8 --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/airplay/BplistCodec.kt @@ -0,0 +1,274 @@ +package com.shilapi.xcertplay.airplay + +/** + * Minimal Apple binary property list (bplist00) codec for the CarPlay control channel. + * + * It covers the subset the stack emits and reads: dictionaries, arrays, ASCII and UTF-16 + * strings, raw data, non-negative integers, 32/64-bit reals, and booleans. Dictionary keys are + * serialized in insertion order, matching the reference implementation this stack targets. + */ +object BplistCodec { + private val magic = "bplist00".toByteArray(Charsets.US_ASCII) + + fun decode(bytes: ByteArray): Any? { + require(bytes.size >= 40) { "bplist: too short" } + require(bytes.copyOfRange(0, magic.size).contentEquals(magic)) { "bplist: bad magic" } + + val trailer = bytes.size - 32 + val offsetSize = bytes[trailer + 6].toInt() and 0xff + val refSize = bytes[trailer + 7].toInt() and 0xff + val numObjects = readBigEndianLong(bytes, (trailer + 8).toLong(), 8).toInt() + val topObject = readBigEndianLong(bytes, (trailer + 16).toLong(), 8).toInt() + val offsetTable = readBigEndianLong(bytes, (trailer + 24).toLong(), 8) + + val offsets = LongArray(numObjects) + for (index in offsets.indices) { + offsets[index] = readBigEndianLong(bytes, offsetTable + index.toLong() * offsetSize, offsetSize) + } + return readObject(bytes, offsets, refSize, topObject) + } + + fun encode(root: Any?): ByteArray { + val nodes = ArrayList() + + fun add(value: Any?): Int { + val index = nodes.size + nodes.add(Leaf(ByteArray(0))) + when (value) { + is Boolean -> nodes[index] = Leaf(byteArrayOf(if (value) 0x09 else 0x08)) + is java.math.BigInteger -> { + require(value.signum() >= 0) { "bplist: negative integers are not supported" } + require(value.bitLength() <= 64) { "bplist: integer exceeds 64 bits" } + nodes[index] = Leaf(encodeUnsignedInt(value)) + } + is Byte, is Short, is Int, is Long -> { + val number = (value as Number).toLong() + nodes[index] = if (number >= 0) { + Leaf(encodeInt(number)) + } else { + Leaf(byteArrayOf(0x23) + bigEndian(number.toDouble().toRawBits(), 8)) + } + } + is Float, is Double -> { + val number = (value as Number).toDouble() + nodes[index] = Leaf(byteArrayOf(0x23) + bigEndian(number.toRawBits(), 8)) + } + is String -> nodes[index] = Leaf(encodeString(value)) + is ByteArray -> nodes[index] = Leaf(marker(0x4, value.size) + value) + is List<*> -> { + val refs = value.map { add(it) }.toIntArray() + nodes[index] = Container(marker(0xa, value.size), refs) + } + is Map<*, *> -> { + val entries = value.entries.toList() + val keyRefs = entries.map { add(it.key.toString()) }.toIntArray() + val valueRefs = entries.map { add(it.value) }.toIntArray() + nodes[index] = Container(marker(0xd, entries.size), keyRefs + valueRefs) + } + else -> throw IllegalArgumentException("bplist: unsupported value $value") + } + return index + } + + val topIndex = add(root) + val refSize = when { + nodes.size > 0xffff -> 4 + nodes.size > 0xff -> 2 + else -> 1 + } + + val parts = ArrayList(nodes.size + 2) + parts.add(magic) + var cursor = magic.size + val offsets = ArrayList(nodes.size) + for (node in nodes) { + offsets.add(cursor) + val serialized = when (node) { + is Leaf -> node.body + is Container -> node.head + refBytes(node.refs, refSize) + } + parts.add(serialized) + cursor += serialized.size + } + + val offsetTableOffset = cursor + val offsetSize = when { + cursor > 0xffff -> 4 + cursor > 0xff -> 2 + else -> 1 + } + for (offset in offsets) parts.add(bigEndian(offset.toLong(), offsetSize)) + + val trailer = ByteArray(32) + trailer[6] = offsetSize.toByte() + trailer[7] = refSize.toByte() + writeBigEndian(trailer, 8, nodes.size.toLong(), 8) + writeBigEndian(trailer, 16, topIndex.toLong(), 8) + writeBigEndian(trailer, 24, offsetTableOffset.toLong(), 8) + parts.add(trailer) + return concatBytes(*parts.toTypedArray()) + } + + private fun readObject(bytes: ByteArray, offsets: LongArray, refSize: Int, index: Int): Any? { + var position = offsets[index].toInt() + val markerByte = bytes[position].toInt() and 0xff + val type = markerByte ushr 4 + val nibble = markerByte and 0x0f + position++ + + fun readCount(): Int { + if (nibble != 0x0f) return nibble + val sizeMarker = bytes[position].toInt() and 0xff + position++ + val intBytes = 1 shl (sizeMarker and 0x0f) + val count = readBigEndianLong(bytes, position.toLong(), intBytes).toInt() + position += intBytes + return count + } + + return when (type) { + 0x0 -> when (nibble) { + 0x08 -> false + 0x09 -> true + else -> throw IllegalArgumentException("bplist: unsupported primitive 0x0$nibble") + } + 0x1 -> { + val size = 1 shl nibble + readBigEndianLong(bytes, position.toLong(), size) + } + 0x2 -> { + val size = 1 shl nibble + when (size) { + 4 -> Float.fromBits(readBigEndianLong(bytes, position.toLong(), size).toInt()) + 8 -> Double.fromBits(readBigEndianLong(bytes, position.toLong(), size)) + else -> throw IllegalArgumentException("bplist: unsupported real size $size") + } + } + 0x4 -> { + val count = readCount() + bytes.copyOfRange(position, position + count) + } + 0x5 -> { + val count = readCount() + String(bytes, position, count, Charsets.US_ASCII) + } + 0x6 -> { + val count = readCount() + String(bytes, position, count * 2, Charsets.UTF_16BE) + } + 0xa -> { + val count = readCount() + val array = ArrayList(count) + for (i in 0 until count) { + val reference = readBigEndianLong(bytes, position + i.toLong() * refSize, refSize).toInt() + array.add(readObject(bytes, offsets, refSize, reference)) + } + array + } + 0xd -> { + val count = readCount() + val dict = LinkedHashMap(count) + for (i in 0 until count) { + val keyReference = readBigEndianLong(bytes, position + i.toLong() * refSize, refSize).toInt() + val valueReference = + readBigEndianLong(bytes, position + (count + i).toLong() * refSize, refSize).toInt() + dict[readObject(bytes, offsets, refSize, keyReference).toString()] = + readObject(bytes, offsets, refSize, valueReference) + } + dict + } + else -> throw IllegalArgumentException("bplist: unsupported object type 0x${type.toString(16)}") + } + } + + private fun encodeString(value: String): ByteArray { + val ascii = value.all { it.code <= 0x7f } + return if (ascii) { + marker(0x5, value.length) + value.toByteArray(Charsets.US_ASCII) + } else { + marker(0x6, value.length) + value.toByteArray(Charsets.UTF_16BE) + } + } + + private fun encodeInt(number: Long): ByteArray { + val size = when { + number > 0xffffffffL -> 8 + number > 0xffffL -> 4 + number > 0xffL -> 2 + else -> 1 + } + val log = when (size) { + 8 -> 3 + 4 -> 2 + 2 -> 1 + else -> 0 + } + return byteArrayOf((0x10 or log).toByte()) + bigEndian(number, size) + } + + private fun encodeUnsignedInt(number: java.math.BigInteger): ByteArray { + val size = when { + number.bitLength() > 32 -> 8 + number.bitLength() > 16 -> 4 + number.bitLength() > 8 -> 2 + else -> 1 + } + val log = when (size) { + 8 -> 3 + 4 -> 2 + 2 -> 1 + else -> 0 + } + val raw = number.toByteArray() + return byteArrayOf((0x10 or log).toByte()) + raw.copyOfRange(raw.size - size, raw.size) + } + + private fun marker(type: Int, count: Int): ByteArray { + if (count < 0x0f) return byteArrayOf(((type shl 4) or count).toByte()) + val size = when { + count > 0xffff -> 4 + count > 0xff -> 2 + else -> 1 + } + val log = when (size) { + 4 -> 2 + 2 -> 1 + else -> 0 + } + return byteArrayOf(((type shl 4) or 0x0f).toByte(), (0x10 or log).toByte()) + + bigEndian(count.toLong(), size) + } + + private fun refBytes(refs: IntArray, refSize: Int): ByteArray { + val output = ByteArray(refs.size * refSize) + for (index in refs.indices) writeBigEndian(output, index * refSize, refs[index].toLong(), refSize) + return output + } + + private fun bigEndian(value: Long, size: Int): ByteArray { + val output = ByteArray(size) + writeBigEndian(output, 0, value, size) + return output + } + + private fun writeBigEndian(target: ByteArray, offset: Int, value: Long, size: Int) { + var current = value + for (index in size - 1 downTo 0) { + target[offset + index] = (current and 0xff).toByte() + current = current ushr 8 + } + } + + private fun readBigEndianLong(bytes: ByteArray, offset: Long, size: Int): Long { + var value = 0L + var base = offset.toInt() + for (index in 0 until size) { + value = (value shl 8) or (bytes[base + index].toLong() and 0xffL) + } + return value + } + + private sealed class Node + private class Leaf(val body: ByteArray) : Node() + private class Container(val head: ByteArray, val refs: IntArray) : Node() +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/airplay/Bytes.kt b/shared/src/main/java/com/shilapi/xcertplay/airplay/Bytes.kt new file mode 100644 index 0000000..aa33f84 --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/airplay/Bytes.kt @@ -0,0 +1,24 @@ +package com.shilapi.xcertplay.airplay + +internal fun concatBytes(vararg arrays: ByteArray): ByteArray { + val output = ByteArray(arrays.sumOf { it.size }) + var offset = 0 + for (array in arrays) { + array.copyInto(output, offset) + offset += array.size + } + return output +} + +internal fun String.asciiBytes(): ByteArray = toByteArray(Charsets.US_ASCII) + +internal fun ByteArray.toHexString(): String { + val alphabet = "0123456789abcdef" + val output = CharArray(size * 2) + for (index in indices) { + val value = this[index].toInt() and 0xff + output[index * 2] = alphabet[value ushr 4] + output[index * 2 + 1] = alphabet[value and 0x0f] + } + return String(output) +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/airplay/CarPlayDisplayScale.kt b/shared/src/main/java/com/shilapi/xcertplay/airplay/CarPlayDisplayScale.kt new file mode 100644 index 0000000..61ced98 --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/airplay/CarPlayDisplayScale.kt @@ -0,0 +1,31 @@ +package com.shilapi.xcertplay.airplay + +/** + * Display scaling uses tenths so the UI can expose only the supported 0.3x..1.0x steps. + */ +object CarPlayDisplayScale { + const val MIN_TENTHS = 3 + const val MAX_TENTHS = 10 + const val DEFAULT_TENTHS = MAX_TENTHS + + fun sanitize(tenths: Int): Int = tenths.coerceIn(MIN_TENTHS, MAX_TENTHS) + + fun label(tenths: Int): String { + val value = sanitize(tenths) + return "${value / 10}.${value % 10}x" + } + + fun apply(display: AirPlayDisplayConfig, tenths: Int): AirPlayDisplayConfig { + val value = sanitize(tenths) + return display.copy( + widthPixels = scalePixels(display.widthPixels, value), + heightPixels = scalePixels(display.heightPixels, value), + ) + } + + private fun scalePixels(pixels: Int, tenths: Int): Int { + require(pixels > 0) { "pixels must be positive" } + val scaled = ((pixels.toLong() * tenths + 5L) / 10L).toInt().coerceAtLeast(1) + return if (scaled % 2 == 0) scaled else scaled + 1 + } +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/airplay/CarPlayMediaEngine.kt b/shared/src/main/java/com/shilapi/xcertplay/airplay/CarPlayMediaEngine.kt new file mode 100644 index 0000000..a68d38f --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/airplay/CarPlayMediaEngine.kt @@ -0,0 +1,402 @@ +package com.shilapi.xcertplay.airplay + +import android.util.Log +import com.shilapi.xcertplay.transport.BlockingDuplexByteStream +import java.io.Closeable +import java.io.File +import java.net.Inet4Address +import java.net.Inet6Address +import java.net.InetAddress +import java.math.BigInteger +import java.util.concurrent.ConcurrentHashMap + +/** Rendering seam for the decrypted CarPlay media streams. */ +interface MediaSink { + fun onVideoCodec(type: Int, codec: VideoCodec) {} + fun onVideoConfig(type: Int, codecData: ByteArray) {} + fun onVideoFrame(type: Int, naluBytes: ByteArray) {} + fun setVideoRecoveryHandler(type: Int, handler: () -> Unit) {} + fun setVideoDiagnosticHandler(type: Int, handler: (String) -> Unit) {} + fun onScreenStreamActive(type: Int, active: Boolean) {} + fun onAudioStarted(type: Int, format: AudioFormat, firstSample: Int) {} + fun onAudioRtp(type: Int, format: AudioFormat, rtp: ByteArray, sample: Int) {} + fun onAudioStopped(type: Int) {} + fun onMicrophoneStarted(type: Int, config: MicrophoneConfig) {} + fun onMicrophoneStopped(type: Int) {} + fun onIapMessage(bytes: ByteArray) {} +} + +/** + * Concrete [AirPlayMediaHandler] that binds the screen, audio and iAP2 DataStream ports, + * decrypts their payloads, and hands decoded media to a [MediaSink]. Telephony and speech + * streams can additionally return a PCM microphone uplink through the sink. + */ +class CarPlayMediaEngine( + private val sink: MediaSink, + private val microphoneEnabled: Boolean = false, + private val audioCaptureDirectory: File? = null, +) : AirPlayMediaHandler { + internal data class StreamKey( + val session: AirPlaySession, + val type: Int, + ) + + private data class AudioMeta( + val type: Int, + val format: AudioFormat, + val connectionId: Any?, + val playoutLatencyMs: Int, + @Volatile var firstSample: Int? = null, + @Volatile var originNs: Long? = null, + ) + + private data class PendingIapTunnel( + val bridge: AirPlayIapTunnelStream, + val handler: (BlockingDuplexByteStream) -> Boolean, + ) + + private val streams = ConcurrentHashMap() + private val audioMeta = ConcurrentHashMap() + private val pendingMicrophone = ConcurrentHashMap() + private val audioCaptures = ConcurrentHashMap() + private val pendingIapTunnels = ConcurrentHashMap() + @Volatile private var iapTunnelHandler: ((BlockingDuplexByteStream) -> Boolean)? = null + + override fun setIapTunnelHandler(handler: ((BlockingDuplexByteStream) -> Boolean)?) { + iapTunnelHandler = handler + } + + override fun onScreen(session: AirPlaySession, type: Int, stream: Map): Int? { + val key = outputKey(session, stream) ?: return null + val streamKey = StreamKey(session, type) + Log.i(TAG, "airplay screen key connectionID=${unsignedPlistDecimal(stream["streamConnectionID"])}") + val screen = ScreenStream(key) + sink.setVideoDiagnosticHandler(type) { + if (it == "first frame rendered") session.videoFrameRendered() + session.logDebug("Video: $it") + } + sink.setVideoRecoveryHandler(type) { + if (streams[streamKey] === screen) { + val sent = session.sendCommand(mapOf("type" to "forceKeyFrame")) + session.logDebug("Video recovery: requested keyframe sent=$sent") + } + } + val port = screen.listen( + object : ScreenStream.Listener { + override fun onCodec(codec: VideoCodec) = sink.onVideoCodec(type, codec) + override fun onConfig(codecData: ByteArray) = sink.onVideoConfig(type, codecData) + override fun onFrame(naluBytes: ByteArray) = sink.onVideoFrame(type, naluBytes) + override fun onClosed(cause: Throwable?) { + Log.w( + TAG, + "screen stream ended type=$type reason=${cause?.message ?: "peer EOF"}", + ) + if (streams.remove(streamKey, screen)) { + sink.onScreenStreamActive(type, false) + } + session.close() + } + }, + ) + streams.put(streamKey, screen)?.close() + sink.onScreenStreamActive(type, true) + return port + } + + override fun onAudio(session: AirPlaySession, type: Int, stream: Map): Map? { + val streamKey = StreamKey(session, type) + streams.remove(streamKey)?.close() + audioMeta.remove(type) + audioCaptures.remove(type)?.close() + if (pendingMicrophone.remove(type) != null) sink.onMicrophoneStopped(type) + sink.onAudioStopped(type) + + val key = outputKey(session, stream) ?: return null + val audioType = stream["audioType"]?.toString()?.lowercase() ?: "default" + val format = AudioStreamCodec.fromFormatBits( + (stream["audioFormat"] as? Number)?.toLong() ?: 0L, + type, + audioType, + ) + Log.i( + TAG, + "airplay audio format type=$type audioType=$audioType codec=${format.codec} " + + "rate=${format.sampleRate} channels=${format.channels} " + + "micPort=${(stream["dataPort"] as? Number)?.toInt() ?: 0}", + ) + val connectionId = stream["streamConnectionID"] + val latencyMs = (stream["audioLatencyMs"] as? Number)?.toInt() ?: 0 + val meta = AudioMeta(type, format, connectionId, latencyMs) + val microphone = microphoneConfig(session, type, stream, format) + if (microphone != null) pendingMicrophone[type] = microphone + + val capture = audioCaptureDirectory?.let { AudioPacketCapture(it, type) } + if (capture != null) audioCaptures[type] = capture + val audio = AudioStream(key, type) + val (dataPort, controlPort) = audio.listen( + object : AudioStream.Listener { + override fun onStarted(firstSample: Int) { + meta.firstSample = firstSample + meta.originNs = System.nanoTime() + sink.onAudioStarted(type, format, firstSample) + microphone?.let { sink.onMicrophoneStarted(type, it) } + } + + override fun onRtp(rtp: ByteArray, sample: Int) = + sink.onAudioRtp(type, format, rtp, sample) + + override fun onPacket( + wire: ByteArray, + rtp: ByteArray?, + sample: Int?, + error: Throwable?, + ) { + capture?.record(wire, rtp, sample, error) + } + }, + ) + streams[streamKey] = audio + audioMeta[type] = meta + return linkedMapOf( + "type" to type, + "dataPort" to dataPort, + "controlPort" to controlPort, + "streamConnectionID" to unsignedPlistInteger(connectionId ?: 0L), + ) + } + + override fun onDataStream(session: AirPlaySession, stream: Map): Map? { + val uuid = (stream["clientTypeUUID"] as? String)?.uppercase() ?: return null + if (uuid != IAP_DATASTREAM_UUID) return null + val shared = session.sharedSecret ?: return null + val seed = unsignedPlistDecimal(stream["seed"]) ?: return null + session.logDebug( + "AirPlay iAP SETUP uuid=$uuid seed=$seed " + + "streamConnectionID=${unsignedPlistDecimal(stream["streamConnectionID"]) ?: "none"}", + ) + val key = AirPlayCrypto.hkdfSha512( + shared, + "DataStream-Salt$seed".toByteArray(Charsets.US_ASCII), + DATASTREAM_OUTPUT_KEY.toByteArray(Charsets.US_ASCII), + 32, + ) + val tunnel = IapTunnel( + readKey = key, + bindAddress = session.localAddress + ?: when (session.remoteAddress) { + is Inet6Address -> InetAddress.getByName("::") + is Inet4Address -> InetAddress.getByName("0.0.0.0") + else -> InetAddress.getByName("0.0.0.0") + }, + ) + val bridge = AirPlayIapTunnelStream(session, tunnel) + val handler = iapTunnelHandler + val port = try { + if (handler != null) { + val boundPort = bridge.listen() + session.logDebug( + "AirPlay iAP tunnel listening address=" + + "${session.localAddress?.hostAddress ?: "wildcard"} port=$boundPort", + ) + replacePendingIapTunnel(session, PendingIapTunnel(bridge, handler)) + boundPort + } else { + tunnel.listen( + object : IapTunnel.Listener { + override fun onIap(bytes: ByteArray) = sink.onIapMessage(bytes) + + override fun onClosed(cause: Throwable?) { + Log.w( + TAG, + "iAP tunnel ended reason=${cause?.message ?: "peer EOF"}", + ) + session.close() + } + }, + ) + } + } catch (error: Throwable) { + bridge.close() + throw error + } + streams[StreamKey(session, STREAM_TYPE_DATA)] = if (handler != null) bridge else tunnel + return linkedMapOf("type" to STREAM_TYPE_DATA, "streamID" to 1L, "dataPort" to port) + .apply { + stream["streamConnectionID"]?.let { connectionId -> + this["streamConnectionID"] = unsignedPlistInteger(connectionId) + } + } + } + + override fun onSetupResponseSent(session: AirPlaySession) { + val pending = pendingIapTunnels.remove(session) ?: return + val attached = try { + pending.handler(pending.bridge) + } catch (error: Throwable) { + Log.w(TAG, "iAP tunnel relay attachment failed", error) + false + } + if (!attached) { + Log.w(TAG, "iAP tunnel relay attachment was rejected after SETUP") + pending.bridge.close() + session.close() + } + } + + override fun onFeedback(session: AirPlaySession): Map? { + val active = audioMeta.values.toList() + if (active.isEmpty()) return null + val streams = active.map { meta -> + val entry = linkedMapOf( + "type" to meta.type, + "sampleRate" to meta.format.sampleRate, + ) + val firstSample = meta.firstSample + val originNs = meta.originNs + if (firstSample != null && originNs != null) { + val nowNs = System.nanoTime() + val elapsedSec = Math.max( + 0.0, + (nowNs - originNs) / 1e9 - meta.playoutLatencyMs / 1000.0, + ) + val firstUnsigned = firstSample.toLong() and 0xffff_ffffL + val sampleTime = (firstUnsigned + Math.round(elapsedSec * meta.format.sampleRate)) and + 0xffff_ffffL + entry["streamConnectionID"] = unsignedPlistInteger(meta.connectionId ?: 0L) + entry["timestamp"] = session.syncedNtp() + entry["timestampRawNs"] = nowNs + entry["sampleTime"] = sampleTime + } + entry + } + return linkedMapOf("streams" to streams) + } + + override fun onTeardown(session: AirPlaySession, type: Int) { + if (type == STREAM_TYPE_DATA) clearPendingIapTunnel(session) + if (pendingMicrophone.remove(type) != null) sink.onMicrophoneStopped(type) + audioMeta.remove(type) + audioCaptures.remove(type)?.close() + sink.onAudioStopped(type) + streams.remove(StreamKey(session, type))?.close() + if (isScreenStreamType(type)) sink.onScreenStreamActive(type, false) + } + + override fun onSessionClosed(session: AirPlaySession) { + clearPendingIapTunnel(session) + val sessionStreams = streams.keys.filter { it.session === session } + sessionStreams + .filter { isScreenStreamType(it.type) } + .forEach { sink.onScreenStreamActive(it.type, false) } + sessionStreams.forEach { streams.remove(it)?.close() } + audioMeta.clear() + pendingMicrophone.clear() + audioCaptures.values.forEach(AudioPacketCapture::close) + audioCaptures.clear() + } + + private fun replacePendingIapTunnel(session: AirPlaySession, next: PendingIapTunnel) { + val previous = pendingIapTunnels.put(session, next) + previous?.bridge?.close() + } + + private fun clearPendingIapTunnel(session: AirPlaySession? = null) { + if (session == null) { + val pending = pendingIapTunnels.values.toList() + pendingIapTunnels.clear() + pending.forEach { it.bridge.close() } + return + } + pendingIapTunnels.remove(session)?.bridge?.close() + } + + private fun outputKey(session: AirPlaySession, stream: Map): ByteArray? { + return dataStreamKey(session, stream, DATASTREAM_OUTPUT_KEY) + } + + private fun microphoneConfig( + session: AirPlaySession, + type: Int, + stream: Map, + format: AudioFormat, + ): MicrophoneConfig? { + if (!microphoneEnabled || type != STREAM_TYPE_MAIN_AUDIO) return null + if (format.audioType != "telephony" && format.audioType != "speechrecognition") return null + val port = (stream["dataPort"] as? Number)?.toInt() ?: return null + if (port !in 1..65535) return null + val host = session.remoteAddress ?: return null + val key = dataStreamKey(session, stream, DATASTREAM_INPUT_KEY) ?: return null + val formatBits = (stream["audioFormat"] as? Number)?.toLong() ?: 0L + val framesPerPacket = (stream["framesPerPacket"] as? Number)?.toInt() ?: 0 + val frameMillis = if (format.codec == AudioCodecKind.OPUS) { + 20 + } else if (framesPerPacket > 0) { + Math.round(framesPerPacket * 1000.0 / format.sampleRate).toInt().coerceIn(5, 60) + } else { + 20 + } + val opusBitrate = when { + formatBits and OPUS_48K != 0L -> 96_000 + formatBits and OPUS_24K != 0L -> 64_000 + else -> 48_000 + } + return MicrophoneConfig( + audioType = format.audioType, + sampleRate = format.sampleRate, + channels = format.channels, + payloadType = type, + frameMillis = frameMillis, + host = host, + port = port, + key = key, + codec = format.codec, + bitrate = if (format.codec == AudioCodecKind.OPUS) opusBitrate else null, + ) + } + + private fun dataStreamKey( + session: AirPlaySession, + stream: Map, + label: String, + ): ByteArray? { + val shared = session.sharedSecret ?: return null + val connectionId = unsignedPlistDecimal(stream["streamConnectionID"]) ?: return null + return AirPlayCrypto.hkdfSha512( + shared, + "DataStream-Salt$connectionId".toByteArray(Charsets.US_ASCII), + label.toByteArray(Charsets.US_ASCII), + 32, + ) + } + + private fun isScreenStreamType(type: Int): Boolean = + type == STREAM_TYPE_MAIN_SCREEN || type == STREAM_TYPE_ALT_SCREEN + + private companion object { + const val TAG = "xcertplay-usb" + const val STREAM_TYPE_MAIN_SCREEN = 110 + const val STREAM_TYPE_ALT_SCREEN = 111 + const val STREAM_TYPE_MAIN_AUDIO = 100 + const val STREAM_TYPE_DATA = 130 + const val DATASTREAM_OUTPUT_KEY = "DataStream-Output-Encryption-Key" + const val DATASTREAM_INPUT_KEY = "DataStream-Input-Encryption-Key" + const val IAP_DATASTREAM_UUID = "E9459FD0-BCAD-4C45-820F-1E72447EF2F2" + const val OPUS_24K = 0x20000000L + const val OPUS_48K = 0x40000000L + } +} + +internal fun unsignedPlistDecimal(value: Any?): String? = when (value) { + is Long -> java.lang.Long.toUnsignedString(value) + is Int -> Integer.toUnsignedString(value) + is Short -> (value.toInt() and 0xffff).toString() + is Byte -> (value.toInt() and 0xff).toString() + is BigInteger -> if (value.signum() >= 0) value.toString() else null + else -> (value as? Number)?.toLong()?.let(java.lang.Long::toUnsignedString) +} + +internal fun unsignedPlistInteger(value: Any?): Any = when (value) { + is Long -> if (value < 0) BigInteger(java.lang.Long.toUnsignedString(value)) else value + is Int -> if (value < 0) BigInteger(Integer.toUnsignedString(value)) else value + else -> value ?: 0L +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/airplay/CarPlayUiScale.kt b/shared/src/main/java/com/shilapi/xcertplay/airplay/CarPlayUiScale.kt new file mode 100644 index 0000000..9082a21 --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/airplay/CarPlayUiScale.kt @@ -0,0 +1,39 @@ +package com.shilapi.xcertplay.airplay + +import kotlin.math.roundToInt + +/** Request a larger canvas for smaller CarPlay controls, then fit it to the same touch surface. */ +object CarPlayUiScale { + const val DEFAULT = 100 + val presets = listOf(75, 85, DEFAULT, 115) + + fun sanitize(percent: Int): Int = percent.takeIf { it in presets } ?: DEFAULT + + fun label(percent: Int): String = when (sanitize(percent)) { + 75 -> "Smaller" + 85 -> "Small" + 115 -> "Large" + else -> "Default" + } + + fun apply(display: AirPlayDisplayConfig, percent: Int): AirPlayDisplayConfig { + val scale = sanitize(percent) + if (scale == DEFAULT) return display + require(display.widthPixels > 0 && display.heightPixels > 0) + fun pixels(value: Int): Int = ((value.toLong() * 100 / scale + 1) / 2 * 2).toInt() + val width = pixels(display.widthPixels) + val height = pixels(display.heightPixels) + // Never request an enlarged canvas beyond 4K. The host also checks its actual decoder. + if (scale < DEFAULT && (maxOf(width, height) > 3840 || minOf(width, height) > 2160)) return display + fun insets(value: AirPlayInsets?): AirPlayInsets? = value?.let { + it.copy( + top = (it.top * height.toDouble() / display.heightPixels).roundToInt(), + bottom = (it.bottom * height.toDouble() / display.heightPixels).roundToInt(), + left = (it.left * width.toDouble() / display.widthPixels).roundToInt(), + right = (it.right * width.toDouble() / display.widthPixels).roundToInt(), + ) + } + return display.copy(widthPixels = width, heightPixels = height, + viewArea = insets(display.viewArea), safeArea = insets(display.safeArea)) + } +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/airplay/ControlCipher.kt b/shared/src/main/java/com/shilapi/xcertplay/airplay/ControlCipher.kt new file mode 100644 index 0000000..00621ff --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/airplay/ControlCipher.kt @@ -0,0 +1,55 @@ +package com.shilapi.xcertplay.airplay + +/** + * ChaCha20-Poly1305 framing for the CarPlay control channel. + * + * Each frame is [2-byte little-endian ciphertext length][ciphertext][16-byte tag]; the length + * header is the AEAD associated data and each direction uses an 8-byte little-endian nonce + * counter plus its own key. + */ +class ControlCipher(private val readKey: ByteArray, private val writeKey: ByteArray) { + data class Decrypted(val data: ByteArray, val rest: ByteArray) + + private var readCounter = 0L + private var writeCounter = 0L + + fun decrypt(buffer: ByteArray): Decrypted { + val output = ArrayList() + var offset = 0 + while (buffer.size - offset >= HEADER_SIZE) { + val length = readU16Le(buffer, offset) + val frameEnd = offset + HEADER_SIZE + length + TAG_SIZE + if (buffer.size < frameEnd) break + val aad = buffer.copyOfRange(offset, offset + HEADER_SIZE) + val ciphertextAndTag = buffer.copyOfRange(offset + HEADER_SIZE, frameEnd) + output.add(AirPlayCrypto.chachaOpen(readKey, AirPlayCrypto.nonce64(readCounter), ciphertextAndTag, aad)) + readCounter++ + offset = frameEnd + } + return Decrypted(concatBytes(*output.toTypedArray()), buffer.copyOfRange(offset, buffer.size)) + } + + fun encrypt(plaintext: ByteArray): ByteArray { + val output = ArrayList() + var offset = 0 + do { + val chunk = plaintext.copyOfRange(offset, minOf(offset + MAX_PAYLOAD, plaintext.size)) + val header = byteArrayOf(chunk.size.toByte(), (chunk.size ushr 8).toByte()) + val ciphertextAndTag = AirPlayCrypto.chachaSeal(writeKey, AirPlayCrypto.nonce64(writeCounter), chunk, header) + output.add(header) + output.add(ciphertextAndTag) + writeCounter++ + offset += MAX_PAYLOAD + } while (offset < plaintext.size) + return concatBytes(*output.toTypedArray()) + } + + private fun readU16Le(source: ByteArray, offset: Int): Int = + (source[offset].toInt() and 0xff) or ((source[offset + 1].toInt() and 0xff) shl 8) + + private companion object { + const val HEADER_SIZE = 2 + const val TAG_SIZE = 16 + const val MAX_PAYLOAD = 0x4000 + } +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/airplay/IapTunnel.kt b/shared/src/main/java/com/shilapi/xcertplay/airplay/IapTunnel.kt new file mode 100644 index 0000000..230b96f --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/airplay/IapTunnel.kt @@ -0,0 +1,219 @@ +package com.shilapi.xcertplay.airplay + +import java.io.Closeable +import java.io.InputStream +import java.net.Inet4Address +import java.net.InetAddress +import java.net.InetSocketAddress +import java.net.ServerSocket +import java.net.Socket +import java.util.concurrent.CountDownLatch +import java.util.concurrent.TimeUnit +import java.util.concurrent.atomic.AtomicBoolean +import java.util.concurrent.atomic.AtomicLong + +/** + * Receive-only iAP2-over-CarPlay DataStream tunnel (stream type 130). + * + * The TCP stream is NetSocketChaCha20Poly1305 framed, then carries APTransportPackage records. + * iAP2 bodies (messageType "comm") are emitted verbatim for the wired iAP2 relay. + */ +class IapTunnel( + private val readKey: ByteArray, + bindAddress: InetAddress = InetAddress.getByName("0.0.0.0"), +) : Closeable { + interface Listener { + fun onOpen(remoteAddress: String?) {} + fun onIap(bytes: ByteArray) {} + fun onDebug(message: String) {} + fun onClosed(cause: Throwable?) {} + } + + private val closed = AtomicBoolean(false) + private val readCounter = AtomicLong(0) + private val bindAddress = + if (bindAddress is Inet4Address) InetAddress.getByName("0.0.0.0") else bindAddress + private val servers = mutableListOf() + private var socket: Socket? = null + private val threads = mutableListOf() + private val peerConnected = CountDownLatch(1) + @Volatile private var listener: Listener = object : Listener {} + + fun listen(listener: Listener): Int { + this.listener = listener + val bound = bindAny() + servers += bound + listener.onDebug("AirPlay iAP tunnel listener bound=${bound.localSocketAddress}") + val secondaryAddress = if (bindAddress is java.net.Inet6Address) { + InetAddress.getByName("0.0.0.0") + } else { + InetAddress.getByName("::") + } + val secondary = ServerSocket() + runCatching { + secondary.apply { + reuseAddress = true + bind(InetSocketAddress(secondaryAddress, bound.localPort)) + } + }.onSuccess { secondary -> + servers += secondary + listener.onDebug( + "AirPlay iAP tunnel secondary listener bound=" + + "${secondary.localSocketAddress}", + ) + }.onFailure { error -> + safeClose(secondary) + listener.onDebug( + "AirPlay iAP tunnel secondary listener failed address=" + + "$secondaryAddress port=${bound.localPort}: ${error.message}", + ) + } + servers.forEach { server -> + threads += Thread({ accept(server) }, "airplay-iap-tunnel").apply { + isDaemon = true + start() + } + } + return bound.localPort + } + + private fun bindAny(): ServerSocket = + ServerSocket().apply { + reuseAddress = true + bind(InetSocketAddress(bindAddress, 0)) + } + + override fun close() { + if (!closed.compareAndSet(false, true)) return + safeClose(socket) + servers.toList().forEach(::safeClose) + servers.clear() + threads.toList().forEach(Thread::interrupt) + threads.clear() + peerConnected.countDown() + } + + /** Waits until the iPhone has connected to the advertised dataPort. */ + fun awaitPeerConnection(timeoutMillis: Long): Boolean { + require(timeoutMillis >= 0) { "timeoutMillis must not be negative" } + return try { + peerConnected.await(timeoutMillis, TimeUnit.MILLISECONDS) + } catch (_: InterruptedException) { + Thread.currentThread().interrupt() + false + } + } + + private fun accept(bound: ServerSocket) { + listener.onDebug( + "AirPlay iAP tunnel accepting local=${bound.localSocketAddress}", + ) + while (!closed.get()) { + val accepted = try { + bound.accept() + } catch (error: Exception) { + if (!closed.get()) listener.onClosed(error) + return + } + if (closed.get()) { + safeClose(accepted) + return + } + accepted.setSoLinger(true, 0) + socket = accepted + readCounter.set(0) + peerConnected.countDown() + listener.onOpen(accepted.remoteSocketAddress?.toString()) + run(accepted) + } + } + + private fun run(sock: Socket) { + var ciphertext = ByteArray(0) + var plaintext = ByteArray(0) + var failure: Throwable? = null + var announcedData = false + try { + val input = sock.getInputStream() + val buffer = ByteArray(READ_CHUNK_BYTES) + while (!closed.get()) { + val read = input.read(buffer) + if (read < 0) { + listener.onDebug("AirPlay iAP tunnel peer EOF") + break + } + if (!announcedData) { + announcedData = true + listener.onDebug("AirPlay iAP tunnel received data") + } + ciphertext += buffer.copyOf(read) + val decrypted = decryptFrames(ciphertext) + plaintext += decrypted.first + ciphertext = decrypted.second + plaintext = parsePackages(plaintext) + } + } catch (error: Exception) { + failure = error + } finally { + if (socket === sock) socket = null + safeClose(sock) + if (!closed.get() && failure != null) listener.onClosed(failure) + } + } + + private fun decryptFrames(buffer: ByteArray): Pair { + val output = ArrayList() + var offset = 0 + while (buffer.size - offset >= FRAME_HEADER_LEN) { + val length = readU16Le(buffer, offset) + val frameLength = FRAME_HEADER_LEN + length + TAG_SIZE + if (buffer.size - offset < frameLength) break + val aad = buffer.copyOfRange(offset, offset + FRAME_HEADER_LEN) + val sealed = buffer.copyOfRange(offset + FRAME_HEADER_LEN, offset + frameLength) + val plain = AirPlayCrypto.chachaOpen( + readKey, AirPlayCrypto.nonce64(readCounter.get()), sealed, aad, + ) + readCounter.incrementAndGet() + output.add(plain) + offset += frameLength + } + return concatBytes(*output.toTypedArray()) to buffer.copyOfRange(offset, buffer.size) + } + + private fun parsePackages(buffer: ByteArray): ByteArray { + var offset = 0 + while (buffer.size - offset >= PACKAGE_HEADER_LEN) { + val size = readU32Be(buffer, offset) + if (size < PACKAGE_HEADER_LEN || size > MAX_PACKAGE) break + if (buffer.size - offset < size) break + val messageType = readU32Be(buffer, offset + MESSAGE_TYPE_OFFSET) + if (messageType == MSG_TYPE_COMM) { + listener.onDebug( + "AirPlay iAP tunnel package type=comm body=${size - PACKAGE_HEADER_LEN}", + ) + listener.onIap(buffer.copyOfRange(offset + PACKAGE_HEADER_LEN, offset + size)) + } + offset += size + } + return buffer.copyOfRange(offset, buffer.size) + } + + private fun readU16Le(source: ByteArray, offset: Int): Int = + (source[offset].toInt() and 0xff) or ((source[offset + 1].toInt() and 0xff) shl 8) + + private fun readU32Be(source: ByteArray, offset: Int): Int = + ((source[offset].toInt() and 0xff) shl 24) or + ((source[offset + 1].toInt() and 0xff) shl 16) or + ((source[offset + 2].toInt() and 0xff) shl 8) or + (source[offset + 3].toInt() and 0xff) + + private companion object { + const val FRAME_HEADER_LEN = 2 + const val TAG_SIZE = 16 + const val PACKAGE_HEADER_LEN = 32 + const val MESSAGE_TYPE_OFFSET = 16 + const val MSG_TYPE_COMM = 0x636f6d6d + const val MAX_PACKAGE = 4 * 1024 * 1024 + const val READ_CHUNK_BYTES = 16 * 1024 + } +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/airplay/MfiSapAuthSetup.kt b/shared/src/main/java/com/shilapi/xcertplay/airplay/MfiSapAuthSetup.kt new file mode 100644 index 0000000..b005a8f --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/airplay/MfiSapAuthSetup.kt @@ -0,0 +1,183 @@ +package com.shilapi.xcertplay.airplay + +import com.shilapi.xcertplay.mfi.MfiAuthenticator +import com.shilapi.xcertplay.mfi.MfiCertificateType +import java.security.MessageDigest +import javax.crypto.Cipher +import javax.crypto.spec.IvParameterSpec +import javax.crypto.spec.SecretKeySpec + +/** + * CarPlay /auth-setup MFiSAP responder (accessory side). + * + * Proves MFi licensing to the phone. The request is [1-byte version=1][32-byte controller X25519 + * public key]; the response is this accessory's ephemeral public key, its MFi certificate, and its + * coprocessor signature over the two public keys, AES-128-CTR encrypted under a key derived from + * the shared secret. It runs over the already-encrypted control channel. + * + * [MfiAuthenticator] performs blocking I/O and must be called off the main thread. + */ +object MfiSapAuthSetup { + private const val VERSION = 0x01 + private const val PUBLIC_KEY_BYTES = 32 + + /** Returns the raw binary response, or null when the request is malformed. */ + fun handle(body: ByteArray, mfi: MfiAuthenticator): ByteArray? { + if (body.size != 1 + PUBLIC_KEY_BYTES || body[0].toInt() != VERSION) return null + val peerPublicKey = body.copyOfRange(1, body.size) + + val pair = AirPlayCrypto.x25519Generate() + val shared = AirPlayCrypto.x25519Shared(pair.privateKey, peerPublicKey) + if (shared.all { it.toInt() == 0 }) return null + + val aesKey = sha1("AES-KEY".asciiBytes(), shared).copyOf(16) + val aesIv = sha1("AES-IV".asciiBytes(), shared).copyOf(16) + + return when (mfi.certificateType) { + MfiCertificateType.MFI -> { + val certificate = mfi.readCertificate() + val digest = if (mfi.protocolMajor() == 2) { + sha1(pair.publicKey, peerPublicKey) + } else { + sha256(pair.publicKey, peerPublicKey) + } + val encryptedSignature = aesCtr128( + aesKey, + aesIv, + mfi.signChallenge(digest), + ) + buildMfiResponse(pair.publicKey, certificate, encryptedSignature) + } + + MfiCertificateType.BAA -> { + val certificates = mfi.baaCertificates() + val encryptedSignature = aesCtr128( + aesKey, + aesIv, + mfi.signChallenge(pair.publicKey + peerPublicKey), + ) + buildBaaResponse( + pair.publicKey, + certificates.leaf, + encryptedSignature, + encodeBaaIntermediate(certificates.intermediate), + ) + } + } + } + + private fun buildMfiResponse( + publicKey: ByteArray, + certificate: ByteArray, + encryptedSignature: ByteArray, + ): ByteArray { + val response = ByteArray(32 + 4 + certificate.size + 4 + encryptedSignature.size) + publicKey.copyInto(response, 0) + putU32(response, 32, certificate.size) + certificate.copyInto(response, 36) + putU32(response, 36 + certificate.size, encryptedSignature.size) + encryptedSignature.copyInto(response, 40 + certificate.size) + return response + } + + private fun buildBaaResponse( + publicKey: ByteArray, + leaf: ByteArray, + encryptedSignature: ByteArray, + baicBlob: ByteArray, + ): ByteArray { + val response = ByteArray( + 32 + 4 + leaf.size + 4 + encryptedSignature.size + 4 + baicBlob.size, + ) + publicKey.copyInto(response, 0) + var offset = 32 + putU32(response, offset, leaf.size) + offset += 4 + leaf.copyInto(response, offset) + offset += leaf.size + putU32(response, offset, encryptedSignature.size) + offset += 4 + encryptedSignature.copyInto(response, offset) + offset += encryptedSignature.size + putU32(response, offset, baicBlob.size) + offset += 4 + baicBlob.copyInto(response, offset) + return response + } + + /** OPACK `{"baIC": intermediate}` used by Showcase and CarPlay Simulator. */ + private fun encodeBaaIntermediate(intermediate: ByteArray): ByteArray { + val header = when { + intermediate.size <= 0x20 -> byteArrayOf( + 0xE1.toByte(), + 0x44, + 'b'.code.toByte(), + 'a'.code.toByte(), + 'I'.code.toByte(), + 'C'.code.toByte(), + (0x70 + intermediate.size).toByte(), + ) + + intermediate.size <= 0xFF -> byteArrayOf( + 0xE1.toByte(), + 0x44, + 'b'.code.toByte(), + 'a'.code.toByte(), + 'I'.code.toByte(), + 'C'.code.toByte(), + 0x91.toByte(), + intermediate.size.toByte(), + ) + + intermediate.size <= 0xFFFF -> byteArrayOf( + 0xE1.toByte(), + 0x44, + 'b'.code.toByte(), + 'a'.code.toByte(), + 'I'.code.toByte(), + 'C'.code.toByte(), + 0x92.toByte(), + intermediate.size.toByte(), + (intermediate.size ushr 8).toByte(), + ) + + else -> byteArrayOf( + 0xE1.toByte(), + 0x44, + 'b'.code.toByte(), + 'a'.code.toByte(), + 'I'.code.toByte(), + 'C'.code.toByte(), + 0x93.toByte(), + intermediate.size.toByte(), + (intermediate.size ushr 8).toByte(), + (intermediate.size ushr 16).toByte(), + (intermediate.size ushr 24).toByte(), + ) + } + return header + intermediate + } + + private fun sha1(vararg parts: ByteArray): ByteArray = digest("SHA-1", parts) + + private fun sha256(vararg parts: ByteArray): ByteArray = digest("SHA-256", parts) + + private fun digest(algorithm: String, parts: Array): ByteArray { + val digest = MessageDigest.getInstance(algorithm) + for (part in parts) digest.update(part) + return digest.digest() + } + + private fun aesCtr128(key: ByteArray, iv: ByteArray, data: ByteArray): ByteArray { + val cipher = Cipher.getInstance("AES/CTR/NoPadding") + cipher.init(Cipher.ENCRYPT_MODE, SecretKeySpec(key, "AES"), IvParameterSpec(iv)) + return cipher.doFinal(data) + } + + private fun putU32(target: ByteArray, offset: Int, value: Int) { + target[offset] = (value ushr 24).toByte() + target[offset + 1] = (value ushr 16).toByte() + target[offset + 2] = (value ushr 8).toByte() + target[offset + 3] = value.toByte() + } +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/airplay/MicrophonePacketizer.kt b/shared/src/main/java/com/shilapi/xcertplay/airplay/MicrophonePacketizer.kt new file mode 100644 index 0000000..3ef77f8 --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/airplay/MicrophonePacketizer.kt @@ -0,0 +1,116 @@ +package com.shilapi.xcertplay.airplay + +import java.net.InetAddress + +/** Everything one captured microphone stream needs to send samples to the phone. */ +data class MicrophoneConfig( + val audioType: String, + val sampleRate: Int, + val channels: Int, + val payloadType: Int, + val frameMillis: Int, + val host: InetAddress, + val port: Int, + val key: ByteArray, + val codec: AudioCodecKind = AudioCodecKind.LPCM, + val bitrate: Int? = null, +) { + val samplesPerPacket: Int + get() = if (codec == AudioCodecKind.OPUS) { + OPUS_SAMPLES_PER_PACKET + } else { + maxOf(1, sampleRate * frameMillis / 1000) + } + + val frameBytes: Int + get() = samplesPerPacket * channels * 2 + + private companion object { + const val OPUS_SAMPLES_PER_PACKET = 960 + } +} + +/** Mutable RTP/ChaCha counters for one microphone uplink. */ +class MicrophoneCounters( + var sequence: Int = 0, + var timestamp: Int = 0, + var nonce: Long = 0, +) + +/** + * Seals one PCM microphone frame in the wired CarPlay RTP layout. + * + * The 12-byte RTP header is clear; its timestamp and SSRC are authenticated as AAD. The packet + * tail repeats the eight-byte little-endian nonce counter after the 16-byte Poly1305 tag. + */ +object MicrophonePacketizer { + const val RTP_HEADER_LEN = 12 + const val TAG_LEN = 16 + const val NONCE_LEN = 8 + + fun sealPacket( + key: ByteArray, + payloadType: Int, + counters: MicrophoneCounters, + body: ByteArray, + samples: Int, + ): ByteArray { + val header = ByteArray(RTP_HEADER_LEN) + header[0] = 0x80.toByte() + header[1] = (payloadType and 0x7f).toByte() + putU16Be(header, 2, counters.sequence) + putU32Be(header, 4, counters.timestamp) + + val nonce = ByteArray(12) + putU64Le(nonce, 4, counters.nonce) + val sealed = AirPlayCrypto.chachaSeal( + key = key, + nonce = nonce, + plaintext = body, + aad = header.copyOfRange(4, RTP_HEADER_LEN), + ) + + val packet = ByteArray(RTP_HEADER_LEN + sealed.size + NONCE_LEN) + header.copyInto(packet, 0) + sealed.copyInto(packet, RTP_HEADER_LEN) + putU64Le(packet, RTP_HEADER_LEN + sealed.size, counters.nonce) + + counters.sequence = (counters.sequence + 1) and 0xffff + counters.timestamp += samples + counters.nonce++ + return packet + } + + /** Captured Android PCM is little-endian; CarPlay's wired microphone payload is big-endian. */ + fun toWirePcm(pcmLittleEndian: ByteArray): ByteArray { + val output = pcmLittleEndian.copyOf() + var index = 0 + while (index + 1 < output.size) { + val first = output[index] + output[index] = output[index + 1] + output[index + 1] = first + index += 2 + } + return output + } + + private fun putU16Be(target: ByteArray, offset: Int, value: Int) { + target[offset] = (value ushr 8).toByte() + target[offset + 1] = value.toByte() + } + + private fun putU32Be(target: ByteArray, offset: Int, value: Int) { + target[offset] = (value ushr 24).toByte() + target[offset + 1] = (value ushr 16).toByte() + target[offset + 2] = (value ushr 8).toByte() + target[offset + 3] = value.toByte() + } + + private fun putU64Le(target: ByteArray, offset: Int, value: Long) { + var remaining = value + for (index in 0 until 8) { + target[offset + index] = remaining.toByte() + remaining = remaining ushr 8 + } + } +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/airplay/NtpClock.kt b/shared/src/main/java/com/shilapi/xcertplay/airplay/NtpClock.kt new file mode 100644 index 0000000..297ad99 --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/airplay/NtpClock.kt @@ -0,0 +1,239 @@ +package com.shilapi.xcertplay.airplay + +import java.io.Closeable +import java.math.BigInteger +import java.net.DatagramPacket +import java.net.DatagramSocket +import java.net.InetAddress +import java.net.InetSocketAddress +import java.util.concurrent.atomic.AtomicBoolean + +/** + * CarPlay timing-port clock sync. + * + * The accessory drives a two-way RTCP-style exchange with the phone: PT_REQUEST (210) carries our + * transmit timestamp and PT_RESPONSE (211) echoes it while adding the phone's receive and + * transmit stamps. The resulting offset and round-trip time steer a local monotonic clock onto + * the phone's media-clock domain, which /feedback reports. + */ +class NtpClock : Closeable { + private val running = AtomicBoolean(false) + private val socketLock = Any() + private val clockLock = Any() + + private var socket: DatagramSocket? = null + private var receiver: Thread? = null + private var sender: Thread? = null + private var peer: InetSocketAddress? = null + + private var clockOffsetNs = wallClockNtpOffsetNs(System.nanoTime()) + private val delays = DoubleArray(DELAY_WINDOW) { Double.POSITIVE_INFINITY } + private var delayIndex = 0 + private var pickCount = PICK_COUNT + private var pickRtt = Double.POSITIVE_INFINITY + private var pickOffset = 0.0 + private var pendingT1: BigInteger? = null + private var synced = false + + fun listen(): Int { + check(!running.getAndSet(true)) { "NtpClock is already running" } + val bound = DatagramSocket(null) + bound.reuseAddress = true + bound.bind(InetSocketAddress(InetAddress.getByName("::"), 0)) + synchronized(socketLock) { socket = bound } + receiver = Thread(::runReceiver, "airplay-ntp-rx").apply { isDaemon = true; start() } + return bound.localPort + } + + fun start(peerAddress: InetAddress, port: Int) { + require(port > 0) { "timing port must be positive" } + peer = InetSocketAddress(peerAddress, port) + sender = Thread(::runSender, "airplay-ntp-tx").apply { isDaemon = true; start() } + } + + /** Now in the phone's synchronized clock domain, as an unsigned NTP64 value. */ + fun syncedNtp(): BigInteger = synchronized(clockLock) { + ntpFromNanos(System.nanoTime() + clockOffsetNs) + } + + override fun close() { + running.set(false) + synchronized(socketLock) { + socket?.close() + socket = null + } + sender?.interrupt() + receiver?.interrupt() + } + + private fun runSender() { + while (running.get()) { + try { + sendRequest() + Thread.sleep(REQUEST_INTERVAL_MS) + } catch (_: InterruptedException) { + return + } catch (_: Exception) { + try { + Thread.sleep(REQUEST_INTERVAL_MS) + } catch (_: InterruptedException) { + return + } + } + } + } + + private fun sendRequest() { + val destination = peer ?: return + val packet = ByteArray(NTP_PACKET_BYTES) + packet[0] = 0x80.toByte() + packet[1] = PT_REQUEST.toByte() + writeU16Be(packet, 2, 7) + val t1 = syncedNtp() + synchronized(clockLock) { pendingT1 = t1 } + ntpBytes(t1).copyInto(packet, NTP_TRANSMIT_OFFSET) + currentSocket()?.send(DatagramPacket(packet, packet.size, destination)) + } + + private fun runReceiver() { + val buffer = ByteArray(RECEIVE_BUFFER_BYTES) + while (running.get()) { + val sock = currentSocket() ?: return + val packet = DatagramPacket(buffer, buffer.size) + try { + sock.receive(packet) + } catch (_: Exception) { + if (running.get()) continue else return + } + val message = packet.data.copyOf(packet.length) + val address = packet.address + if (message.size >= NTP_PACKET_BYTES && address != null) { + handleMessage(message, InetSocketAddress(address, packet.port)) + } + } + } + + private fun handleMessage(message: ByteArray, source: InetSocketAddress) { + when (message[1].toInt() and 0xff) { + PT_REQUEST -> respondToRequest(message, source) + PT_RESPONSE -> handleResponse(message) + } + } + + private fun respondToRequest(request: ByteArray, source: InetSocketAddress) { + val response = ByteArray(NTP_PACKET_BYTES) + response[0] = 0x80.toByte() + response[1] = PT_RESPONSE.toByte() + writeU16Be(response, 2, 7) + request.copyInto(response, NTP_ORIGINATE_OFFSET, NTP_TRANSMIT_OFFSET, NTP_PACKET_BYTES) + ntpBytes(syncedNtp()).copyInto(response, NTP_RECEIVE_OFFSET) + ntpBytes(syncedNtp()).copyInto(response, NTP_TRANSMIT_OFFSET) + currentSocket()?.send(DatagramPacket(response, response.size, source)) + } + + private fun handleResponse(response: ByteArray) { + val t4 = syncedNtp() + val t1 = readNtp(response, NTP_ORIGINATE_OFFSET) + val t2 = readNtp(response, NTP_RECEIVE_OFFSET) + val t3 = readNtp(response, NTP_TRANSMIT_OFFSET) + + synchronized(clockLock) { + val pending = pendingT1 + if (pending == null || pending != t1) return + pendingT1 = null + } + + val offset = t2.subtract(t1).add(t3.subtract(t4)).toDouble() * 0.5 / TWO32_DOUBLE + val rtt = t4.subtract(t1).subtract(t3.subtract(t2)).toDouble() / TWO32_DOUBLE + if (rtt < 0.0) return + + if (rtt < pickRtt) { + pickRtt = rtt + pickOffset = offset + } + if (--pickCount > 0) return + + val selectedRtt = pickRtt + val selectedOffset = pickOffset + pickCount = PICK_COUNT + pickRtt = Double.POSITIVE_INFINITY + + synchronized(clockLock) { + val useSample = delays.all { selectedRtt <= it } + delays[delayIndex] = selectedRtt + delayIndex = (delayIndex + 1) % DELAY_WINDOW + if (useSample) applyOffset(selectedOffset) + } + } + + private fun applyOffset(offsetSec: Double) { + val stepping = !synced || Math.abs(offsetSec) > STEP_THRESHOLD_SEC + val applied = if (stepping) offsetSec else offsetSec * SLEW_GAIN + clockOffsetNs += Math.round(applied * 1e9) + if (stepping) { + delays.fill(Double.POSITIVE_INFINITY) + delayIndex = 0 + pendingT1 = null + synced = true + } + } + + private fun currentSocket(): DatagramSocket? = synchronized(socketLock) { socket } + + private companion object { + const val PT_REQUEST = 210 + const val PT_RESPONSE = 211 + const val NTP_PACKET_BYTES = 32 + const val NTP_ORIGINATE_OFFSET = 8 + const val NTP_RECEIVE_OFFSET = 16 + const val NTP_TRANSMIT_OFFSET = 24 + const val REQUEST_INTERVAL_MS = 1_000L + const val RECEIVE_BUFFER_BYTES = 2_048 + const val STEP_THRESHOLD_SEC = 0.128 + const val SLEW_GAIN = 1.0 / 8.0 + const val DELAY_WINDOW = 8 + const val PICK_COUNT = 2 + const val TWO32_DOUBLE = 0x1_0000_0000L.toDouble() + } +} + +private const val NTP_EPOCH_OFFSET = 2_208_988_800L +private val TWO32 = BigInteger.ONE.shiftLeft(32) +private val NANOS_PER_SECOND = BigInteger.valueOf(1_000_000_000L) + +private fun wallClockNtpOffsetNs(monoNs: Long): Long { + val ntpNs = ntp64Now() + .and(BigInteger.ONE.shiftLeft(64).subtract(BigInteger.ONE)) + .multiply(NANOS_PER_SECOND) + .shiftRight(32) + return ntpNs.subtract(BigInteger.valueOf(monoNs)).toLong() +} + +private fun ntp64Now(): BigInteger { + val seconds = System.currentTimeMillis() / 1000.0 + NTP_EPOCH_OFFSET + val whole = Math.floor(seconds).toLong() + val fraction = Math.floor((seconds - whole) * TWO32.toDouble()).toLong() + return BigInteger.valueOf(whole).shiftLeft(32).or(BigInteger.valueOf(fraction)) +} + +private fun ntpFromNanos(ns: Long): BigInteger { + val seconds = BigInteger.valueOf(Math.floorDiv(ns, 1_000_000_000L)) + val nanos = BigInteger.valueOf(Math.floorMod(ns, 1_000_000_000L)) + return seconds.shiftLeft(32).or(nanos.shiftLeft(32).divide(NANOS_PER_SECOND)) +} + +private fun ntpBytes(value: BigInteger): ByteArray { + val bytes = value.and(BigInteger.ONE.shiftLeft(64).subtract(BigInteger.ONE)).toByteArray() + return ByteArray(8).also { target -> + val source = if (bytes.size > 8) bytes.copyOfRange(bytes.size - 8, bytes.size) else bytes + source.copyInto(target, target.size - source.size) + } +} + +private fun readNtp(value: ByteArray, offset: Int): BigInteger = + BigInteger(1, value.copyOfRange(offset, offset + 8)) + +private fun writeU16Be(target: ByteArray, offset: Int, value: Int) { + target[offset] = ((value ushr 8) and 0xff).toByte() + target[offset + 1] = (value and 0xff).toByte() +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/airplay/PairSetup.kt b/shared/src/main/java/com/shilapi/xcertplay/airplay/PairSetup.kt new file mode 100644 index 0000000..820c298 --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/airplay/PairSetup.kt @@ -0,0 +1,137 @@ +package com.shilapi.xcertplay.airplay + +/** + * CarPlay pair-setup responder (accessory/server side). + * + * Uses unauthenticated SRP-6a with the fixed PIN "3939", then exchanges encrypted long-term + * Ed25519 keys. The controller's key is persisted for later pair-verify. TLV8 over + * "application/pairing+tlv8". + */ +class PairSetup( + private val identity: AirPlayIdentity, + private val pairings: PairingStore, +) { + private var srp: Srp6aSession? = null + private var sessionKey: ByteArray? = null + var complete: Boolean = false + private set + + fun handle(body: ByteArray): ByteArray { + val tlv = Tlv8Codec.decode(body) + val state = tlv[TYPE_STATE]?.firstOrNull()?.toInt()?.and(0xff) + return try { + when (state) { + 1 -> m2() + 3 -> m4(tlv) + 5 -> m6(tlv) + else -> err(state ?: 0) + } + } catch (_: Exception) { + err(state ?: 0) + } + } + + private fun m2(): ByteArray { + val session = Srp6a.start(SETUP_USERNAME, SETUP_CODE) + srp = session + return Tlv8Codec.encode( + listOf( + Tlv8Item(TYPE_STATE, byteArrayOf(2)), + Tlv8Item(TYPE_PUBLIC_KEY, session.publicKey), + Tlv8Item(TYPE_SALT, session.salt), + ), + ) + } + + private fun m4(tlv: Map): ByteArray { + val publicKeyA = tlv[TYPE_PUBLIC_KEY] + val proof = tlv[TYPE_PROOF] + val session = srp + if (session == null || publicKeyA == null || proof == null) return err(4) + val result = session.verify(publicKeyA, proof) + if (!result.ok || result.sessionKey == null || result.serverProof == null) return err(4) + sessionKey = result.sessionKey + return Tlv8Codec.encode( + listOf( + Tlv8Item(TYPE_STATE, byteArrayOf(4)), + Tlv8Item(TYPE_PROOF, result.serverProof), + ), + ) + } + + private fun m6(tlv: Map): ByteArray { + val encrypted = tlv[TYPE_ENCRYPTED_DATA] + val key = sessionKey + if (key == null || encrypted == null) return err(6) + + val encryptionKey = AirPlayCrypto.hkdfSha512(key, ENCRYPT_SALT.asciiBytes(), ENCRYPT_INFO.asciiBytes()) + val sub = Tlv8Codec.decode(AirPlayCrypto.chachaOpen(encryptionKey, AirPlayCrypto.nonceLabel(MSG05), encrypted)) + val controllerId = sub[TYPE_IDENTIFIER] + val controllerLtpk = sub[TYPE_PUBLIC_KEY] + val controllerSignature = sub[TYPE_SIGNATURE] + if (controllerId == null || controllerLtpk == null || controllerSignature == null) return err(6) + + val controllerSignKey = AirPlayCrypto.hkdfSha512( + key, + CONTROLLER_SIGN_SALT.asciiBytes(), + CONTROLLER_SIGN_INFO.asciiBytes(), + ) + val controllerSignData = concatBytes(controllerSignKey, controllerId, controllerLtpk) + if (!AirPlayCrypto.ed25519Verify(controllerLtpk, controllerSignData, controllerSignature)) return err(6) + pairings.save(controllerId.toString(Charsets.UTF_8), controllerLtpk) + + val accessoryId = identity.pairingId.toByteArray(Charsets.UTF_8) + val accessorySignKey = AirPlayCrypto.hkdfSha512( + key, + ACCESSORY_SIGN_SALT.asciiBytes(), + ACCESSORY_SIGN_INFO.asciiBytes(), + ) + val accessorySignData = concatBytes(accessorySignKey, accessoryId, identity.publicKey) + val accessorySignature = AirPlayCrypto.ed25519Sign(identity.privateKey, accessorySignData) + val subResponse = Tlv8Codec.encode( + listOf( + Tlv8Item(TYPE_IDENTIFIER, accessoryId), + Tlv8Item(TYPE_PUBLIC_KEY, identity.publicKey), + Tlv8Item(TYPE_SIGNATURE, accessorySignature), + ), + ) + val sealed = AirPlayCrypto.chachaSeal(encryptionKey, AirPlayCrypto.nonceLabel(MSG06), subResponse) + complete = true + return Tlv8Codec.encode( + listOf( + Tlv8Item(TYPE_STATE, byteArrayOf(6)), + Tlv8Item(TYPE_ENCRYPTED_DATA, sealed), + ), + ) + } + + private fun err(state: Int): ByteArray = Tlv8Codec.encode( + listOf( + Tlv8Item(TYPE_STATE, byteArrayOf(state.toByte())), + Tlv8Item(TYPE_ERROR, byteArrayOf(ERROR_AUTHENTICATION.toByte())), + ), + ) + + private companion object { + const val TYPE_METHOD = 0x00 + const val TYPE_IDENTIFIER = 0x01 + const val TYPE_SALT = 0x02 + const val TYPE_PUBLIC_KEY = 0x03 + const val TYPE_PROOF = 0x04 + const val TYPE_ENCRYPTED_DATA = 0x05 + const val TYPE_STATE = 0x06 + const val TYPE_ERROR = 0x07 + const val TYPE_SIGNATURE = 0x0a + const val SETUP_USERNAME = "Pair-Setup" + const val SETUP_CODE = "3939" + const val ERROR_AUTHENTICATION = 2 + const val ENCRYPT_SALT = "Pair-Setup-Encrypt-Salt" + const val ENCRYPT_INFO = "Pair-Setup-Encrypt-Info" + const val CONTROLLER_SIGN_SALT = "Pair-Setup-Controller-Sign-Salt" + const val CONTROLLER_SIGN_INFO = "Pair-Setup-Controller-Sign-Info" + const val ACCESSORY_SIGN_SALT = "Pair-Setup-Accessory-Sign-Salt" + const val ACCESSORY_SIGN_INFO = "Pair-Setup-Accessory-Sign-Info" + const val MSG05 = "PS-Msg05" + const val MSG06 = "PS-Msg06" + } +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/airplay/PairVerify.kt b/shared/src/main/java/com/shilapi/xcertplay/airplay/PairVerify.kt new file mode 100644 index 0000000..67d349d --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/airplay/PairVerify.kt @@ -0,0 +1,127 @@ +package com.shilapi.xcertplay.airplay + +/** + * CarPlay pair-verify responder (accessory/server side). + * + * Uses ephemeral X25519 plus Ed25519 signatures against the controller's stored long-term key, + * then derives the ChaCha20-Poly1305 control-channel keys. + */ +class PairVerify( + private val identity: AirPlayIdentity, + private val pairings: PairingStore, +) { + data class ControlKeys(val readKey: ByteArray, val writeKey: ByteArray) + + private var ephemeralPublicKey: ByteArray? = null + private var clientEphemeralPublicKey: ByteArray? = null + private var sharedSecret: ByteArray? = null + private var encryptionKey: ByteArray? = null + private var keys: ControlKeys? = null + private var verified = false + private var controllerId: String? = null + + val isVerified: Boolean get() = verified + val verifiedControllerId: String? get() = controllerId + val controlKeys: ControlKeys? get() = keys + val shared: ByteArray? get() = sharedSecret + + fun handle(body: ByteArray): ByteArray { + val tlv = Tlv8Codec.decode(body) + val state = tlv[TYPE_STATE]?.firstOrNull()?.toInt()?.and(0xff) + return try { + when (state) { + 1 -> m2(tlv) + 3 -> m4(tlv) + else -> err(state ?: 0) + } + } catch (_: Exception) { + err(state ?: 0) + } + } + + private fun m2(tlv: Map): ByteArray { + val clientEphemeralPublicKey = tlv[TYPE_PUBLIC_KEY] ?: return err(2) + val pair = AirPlayCrypto.x25519Generate() + ephemeralPublicKey = pair.publicKey + this.clientEphemeralPublicKey = clientEphemeralPublicKey + + val shared = AirPlayCrypto.x25519Shared(pair.privateKey, clientEphemeralPublicKey) + sharedSecret = shared + val encryptionKey = AirPlayCrypto.hkdfSha512(shared, VERIFY_ENCRYPT_SALT.asciiBytes(), VERIFY_ENCRYPT_INFO.asciiBytes()) + this.encryptionKey = encryptionKey + + val accessoryId = identity.pairingId.toByteArray(Charsets.UTF_8) + val signature = AirPlayCrypto.ed25519Sign( + identity.privateKey, + concatBytes(pair.publicKey, accessoryId, clientEphemeralPublicKey), + ) + val sub = Tlv8Codec.encode( + listOf( + Tlv8Item(TYPE_IDENTIFIER, accessoryId), + Tlv8Item(TYPE_SIGNATURE, signature), + ), + ) + val sealed = AirPlayCrypto.chachaSeal(encryptionKey, AirPlayCrypto.nonceLabel(MSG02), sub) + return Tlv8Codec.encode( + listOf( + Tlv8Item(TYPE_STATE, byteArrayOf(2)), + Tlv8Item(TYPE_PUBLIC_KEY, pair.publicKey), + Tlv8Item(TYPE_ENCRYPTED_DATA, sealed), + ), + ) + } + + private fun m4(tlv: Map): ByteArray { + val encrypted = tlv[TYPE_ENCRYPTED_DATA] + val encryptionKey = this.encryptionKey + val shared = sharedSecret + val ownEphemeralPublicKey = ephemeralPublicKey + val clientEphemeralPublicKey = this.clientEphemeralPublicKey + if ( + encryptionKey == null || shared == null || ownEphemeralPublicKey == null || + clientEphemeralPublicKey == null || encrypted == null + ) { + return err(4) + } + + val sub = Tlv8Codec.decode(AirPlayCrypto.chachaOpen(encryptionKey, AirPlayCrypto.nonceLabel(MSG03), encrypted)) + val controllerId = sub[TYPE_IDENTIFIER] + val controllerSignature = sub[TYPE_SIGNATURE] + if (controllerId == null || controllerSignature == null) return err(4) + + val controllerLtpk = pairings.get(controllerId.toString(Charsets.UTF_8)) ?: return err(4) + val signatureData = concatBytes(clientEphemeralPublicKey, controllerId, ownEphemeralPublicKey) + if (!AirPlayCrypto.ed25519Verify(controllerLtpk, signatureData, controllerSignature)) return err(4) + + val readKey = AirPlayCrypto.hkdfSha512(shared, CONTROL_SALT.asciiBytes(), CONTROL_WRITE_KEY_INFO.asciiBytes()) + val writeKey = AirPlayCrypto.hkdfSha512(shared, CONTROL_SALT.asciiBytes(), CONTROL_READ_KEY_INFO.asciiBytes()) + keys = ControlKeys(readKey, writeKey) + verified = true + this.controllerId = controllerId.toString(Charsets.UTF_8) + return Tlv8Codec.encode(listOf(Tlv8Item(TYPE_STATE, byteArrayOf(4)))) + } + + private fun err(state: Int): ByteArray = Tlv8Codec.encode( + listOf( + Tlv8Item(TYPE_STATE, byteArrayOf(state.toByte())), + Tlv8Item(TYPE_ERROR, byteArrayOf(ERROR_AUTHENTICATION.toByte())), + ), + ) + + private companion object { + const val TYPE_IDENTIFIER = 0x01 + const val TYPE_PUBLIC_KEY = 0x03 + const val TYPE_ENCRYPTED_DATA = 0x05 + const val TYPE_STATE = 0x06 + const val TYPE_ERROR = 0x07 + const val TYPE_SIGNATURE = 0x0a + const val ERROR_AUTHENTICATION = 2 + const val VERIFY_ENCRYPT_SALT = "Pair-Verify-Encrypt-Salt" + const val VERIFY_ENCRYPT_INFO = "Pair-Verify-Encrypt-Info" + const val CONTROL_SALT = "Control-Salt" + const val CONTROL_READ_KEY_INFO = "Control-Read-Encryption-Key" + const val CONTROL_WRITE_KEY_INFO = "Control-Write-Encryption-Key" + const val MSG02 = "PV-Msg02" + const val MSG03 = "PV-Msg03" + } +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/airplay/PairingStore.kt b/shared/src/main/java/com/shilapi/xcertplay/airplay/PairingStore.kt new file mode 100644 index 0000000..f853ff1 --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/airplay/PairingStore.kt @@ -0,0 +1,16 @@ +package com.shilapi.xcertplay.airplay + +/** Store of paired controllers keyed by their long-term Ed25519 public key. */ +class PairingStore(private val onSave: ((String, ByteArray) -> Unit)? = null) { + private val entries = HashMap() + + fun save(identifier: String, longTermPublicKey: ByteArray) { + val copy = longTermPublicKey.copyOf() + entries[identifier] = copy + onSave?.invoke(identifier, copy) + } + + fun get(identifier: String): ByteArray? = entries[identifier]?.copyOf() + + fun clear() = entries.clear() +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/airplay/RtspMessage.kt b/shared/src/main/java/com/shilapi/xcertplay/airplay/RtspMessage.kt new file mode 100644 index 0000000..df2dd92 --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/airplay/RtspMessage.kt @@ -0,0 +1,108 @@ +package com.shilapi.xcertplay.airplay + +/** + * RTSP/HTTP-style request framing for the CarPlay control channel. + * + * The control connection on TCP :7000 speaks a text request line plus headers plus an optional + * body, using the same framing RTSP and HTTP share. Encryption, once pair-verify completes, wraps + * this framing in a separate layer. + */ +object RtspMessage { + data class Request( + val method: String, + val path: String, + val protocol: String, + val headers: Map, + val body: ByteArray, + ) + + data class Response( + val protocol: String? = null, + val status: Int? = null, + val statusText: String? = null, + val headers: Map = emptyMap(), + val body: ByteArray = ByteArray(0), + ) + + data class Parsed(val messages: List, val rest: ByteArray) + + private val headerEnd = "\r\n\r\n".toByteArray(Charsets.US_ASCII) + private val statusText = mapOf( + 200 to "OK", + 400 to "Bad Request", + 404 to "Not Found", + 500 to "Internal Server Error", + ) + + /** Parses as many complete messages as are buffered, retaining any partial remainder. */ + fun parseMessages(buffer: ByteArray): Parsed { + val messages = ArrayList() + var offset = 0 + while (offset < buffer.size) { + val headerEndIndex = indexOf(buffer, headerEnd, offset) ?: break + val headerText = String(buffer, offset, headerEndIndex - offset, Charsets.US_ASCII) + val lines = headerText.split("\r\n") + if (lines.isEmpty()) { + offset = headerEndIndex + headerEnd.size + continue + } + val requestLine = lines.first().split(" ", limit = 3) + val headers = HashMap() + for (line in lines.drop(1)) { + val separator = line.indexOf(':') + if (separator == -1) continue + headers[line.substring(0, separator).trim().lowercase()] = + line.substring(separator + 1).trim() + } + val bodyStart = headerEndIndex + headerEnd.size + val contentLength = headers["content-length"]?.toIntOrNull()?.coerceAtLeast(0) ?: 0 + val bodyEnd = bodyStart + contentLength + if (bodyEnd > buffer.size) break + messages.add( + Request( + method = requestLine[0], + path = requestLine.getOrElse(1) { "" }, + protocol = requestLine.getOrElse(2) { "RTSP/1.0" }, + headers = headers, + body = buffer.copyOfRange(bodyStart, bodyEnd), + ), + ) + offset = bodyEnd + } + return Parsed(messages, buffer.copyOfRange(offset, buffer.size)) + } + + /** Builds a response, echoing the request protocol and CSeq. */ + fun buildResponse(request: Request, response: Response): ByteArray { + val protocol = response.protocol ?: request.protocol + val status = response.status ?: 200 + val statusLine = response.statusText ?: statusText[status] ?: "OK" + val body = response.body + val headers = LinkedHashMap(response.headers) + request.headers["cseq"]?.let { headers["CSeq"] = it } + headers["Content-Length"] = body.size.toString() + + val head = buildString { + append(protocol).append(' ').append(status).append(' ').append(statusLine).append("\r\n") + for ((name, value) in headers) append(name).append(": ").append(value).append("\r\n") + append("\r\n") + } + return head.toByteArray(Charsets.US_ASCII) + body + } + + private fun indexOf(source: ByteArray, target: ByteArray, start: Int): Int? { + if (target.isEmpty()) return start + val first = target[0] + for (index in start..source.size - target.size) { + if (source[index] == first && matches(source, index, target)) return index + } + return null + } + + private fun matches(source: ByteArray, offset: Int, target: ByteArray): Boolean { + for (index in target.indices) { + if (source[offset + index] != target[index]) return false + } + return true + } +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/airplay/SafeArea.kt b/shared/src/main/java/com/shilapi/xcertplay/airplay/SafeArea.kt new file mode 100644 index 0000000..3cdadb3 --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/airplay/SafeArea.kt @@ -0,0 +1,172 @@ +package com.shilapi.xcertplay.airplay + +/** A safe-area rectangle in the activity's current pixel coordinate space. */ +data class SafeAreaRect( + val left: Int, + val top: Int, + val right: Int, + val bottom: Int, +) { + init { + require(left >= 0 && top >= 0 && right > left && bottom > top) { + "Safe area coordinates must describe a non-empty rectangle" + } + } + + val width: Int get() = right - left + val height: Int get() = bottom - top + + fun clampTo(widthPixels: Int, heightPixels: Int): SafeAreaRect { + require(widthPixels > 0 && heightPixels > 0) { "Activity dimensions must be positive" } + val clampedLeft = left.coerceIn(0, widthPixels - 1) + val clampedTop = top.coerceIn(0, heightPixels - 1) + val clampedRight = right.coerceIn(clampedLeft + 1, widthPixels) + val clampedBottom = bottom.coerceIn(clampedTop + 1, heightPixels) + return SafeAreaRect(clampedLeft, clampedTop, clampedRight, clampedBottom) + } +} + +/** Resolves activity-space safe areas into the scaled AirPlay display coordinate space. */ +object AirPlaySafeArea { + fun full(widthPixels: Int, heightPixels: Int): SafeAreaRect { + require(widthPixels > 0 && heightPixels > 0) { "Activity dimensions must be positive" } + return SafeAreaRect(0, 0, widthPixels, heightPixels) + } + + /** + * Default editor boundaries are one quarter of the activity from each edge, leaving the middle + * half of the activity as the safe area. + */ + fun default(widthPixels: Int, heightPixels: Int): SafeAreaRect { + require(widthPixels > 0 && heightPixels > 0) { "Activity dimensions must be positive" } + val left = roundFraction(widthPixels, 1, 4).coerceIn(0, widthPixels - 1) + val top = roundFraction(heightPixels, 1, 4).coerceIn(0, heightPixels - 1) + val right = roundFraction(widthPixels, 3, 4) + .coerceIn(left + 1, widthPixels) + val bottom = roundFraction(heightPixels, 3, 4) + .coerceIn(top + 1, heightPixels) + return SafeAreaRect(left, top, right, bottom) + } + + fun resolve( + mapping: SafeAreaRect?, + activityWidthPixels: Int, + activityHeightPixels: Int, + ): SafeAreaRect = mapping?.clampTo(activityWidthPixels, activityHeightPixels) + ?: full(activityWidthPixels, activityHeightPixels) + + fun scaleRect( + rect: SafeAreaRect, + sourceWidthPixels: Int, + sourceHeightPixels: Int, + targetWidthPixels: Int, + targetHeightPixels: Int, + ): SafeAreaRect { + require(sourceWidthPixels > 0 && sourceHeightPixels > 0) { + "Source dimensions must be positive" + } + require(targetWidthPixels > 0 && targetHeightPixels > 0) { + "Target dimensions must be positive" + } + val clamped = rect.clampTo(sourceWidthPixels, sourceHeightPixels) + val left = scaleCoordinate(clamped.left, sourceWidthPixels, targetWidthPixels) + .coerceIn(0, targetWidthPixels - 1) + val top = scaleCoordinate(clamped.top, sourceHeightPixels, targetHeightPixels) + .coerceIn(0, targetHeightPixels - 1) + val right = scaleCoordinate(clamped.right, sourceWidthPixels, targetWidthPixels) + .coerceIn(left + 1, targetWidthPixels) + val bottom = scaleCoordinate(clamped.bottom, sourceHeightPixels, targetHeightPixels) + .coerceIn(top + 1, targetHeightPixels) + return SafeAreaRect(left, top, right, bottom) + } + + /** + * Converts a safe area stored against the activity size into insets for the scaled AirPlay + * display. Coordinates are normalized by axis, so a stored width of 1900/1920 remains 1900/1920 + * of the negotiated display after the user's display scale has been applied. + */ + fun toInsets( + mapping: SafeAreaRect?, + activityWidthPixels: Int, + activityHeightPixels: Int, + displayWidthPixels: Int, + displayHeightPixels: Int, + ): AirPlayInsets { + require(activityWidthPixels > 0 && activityHeightPixels > 0) { + "Activity dimensions must be positive" + } + require(displayWidthPixels > 0 && displayHeightPixels > 0) { + "Display dimensions must be positive" + } + val rect = resolve(mapping, activityWidthPixels, activityHeightPixels) + val left = scaleCoordinate(rect.left, activityWidthPixels, displayWidthPixels) + .coerceIn(0, displayWidthPixels - 1) + val top = scaleCoordinate(rect.top, activityHeightPixels, displayHeightPixels) + .coerceIn(0, displayHeightPixels - 1) + val right = scaleCoordinate(rect.right, activityWidthPixels, displayWidthPixels) + .coerceIn(left + 1, displayWidthPixels) + val bottom = scaleCoordinate(rect.bottom, activityHeightPixels, displayHeightPixels) + .coerceIn(top + 1, displayHeightPixels) + val aligned = alignDimensionsToEven( + SafeAreaRect(left, top, right, bottom), + displayWidthPixels, + displayHeightPixels, + ) + return AirPlayInsets( + top = aligned.top, + bottom = displayHeightPixels - aligned.bottom, + left = aligned.left, + right = displayWidthPixels - aligned.right, + ) + } + + private fun alignDimensionsToEven( + rect: SafeAreaRect, + widthPixels: Int, + heightPixels: Int, + ): SafeAreaRect { + var left = rect.left + var top = rect.top + var right = rect.right + var bottom = rect.bottom + if ((right - left) % 2 != 0) { + if (right < widthPixels) right += 1 else left -= 1 + } + if ((bottom - top) % 2 != 0) { + if (bottom < heightPixels) bottom += 1 else top -= 1 + } + return SafeAreaRect( + left = left.coerceIn(0, widthPixels - 1), + top = top.coerceIn(0, heightPixels - 1), + right = right.coerceIn(left + 1, widthPixels), + bottom = bottom.coerceIn(top + 1, heightPixels), + ) + } + + private fun scaleCoordinate(coordinate: Int, source: Int, target: Int): Int = + ((coordinate.toLong() * target + source / 2L) / source).toInt() + + private fun roundFraction(value: Int, numerator: Int, denominator: Int): Int = + ((value.toLong() * numerator + denominator / 2L) / denominator).toInt() +} + +/** Stable encoding used by the settings store for one activity-size mapping. */ +object SafeAreaCodec { + fun encode(rect: SafeAreaRect): String = + listOf(rect.left, rect.top, rect.right, rect.bottom).joinToString(",") + + fun decode(value: String?): SafeAreaRect? { + val parts = value?.split(',') ?: return null + if (parts.size != 4) return null + return try { + SafeAreaRect( + left = parts[0].toInt(), + top = parts[1].toInt(), + right = parts[2].toInt(), + bottom = parts[3].toInt(), + ) + } catch (_: IllegalArgumentException) { + null + } + } +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/airplay/ScreenStream.kt b/shared/src/main/java/com/shilapi/xcertplay/airplay/ScreenStream.kt new file mode 100644 index 0000000..1c2ae68 --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/airplay/ScreenStream.kt @@ -0,0 +1,215 @@ +package com.shilapi.xcertplay.airplay + +import android.util.Log +import java.io.Closeable +import java.io.InputStream +import java.net.InetAddress +import java.net.InetSocketAddress +import java.net.ServerSocket +import java.net.Socket +import java.util.concurrent.atomic.AtomicBoolean +import java.util.concurrent.atomic.AtomicLong + +enum class VideoCodec { H264, H265 } + +/** + * Receives one CarPlay screen stream on a TCP data port. + * + * Each message is a 128-byte AirPlayScreenHeader followed by a body: a clear VideoConfig + * (avcC/hvcC) or a ChaCha20-Poly1305 sealed VideoFrame. The key is the DataStream output key + * and the per-frame nonce is an 8-byte little-endian counter. + */ +class ScreenStream(private val key: ByteArray) : Closeable { + interface Listener { + fun onCodec(codec: VideoCodec) {} + fun onConfig(codecData: ByteArray) {} + fun onFrame(naluBytes: ByteArray) {} + fun onClosed(cause: Throwable?) {} + } + + private val closed = AtomicBoolean(false) + private val frameCounter = AtomicLong(0) + private val firstFrameLogged = AtomicBoolean(false) + private var server: ServerSocket? = null + private var socket: Socket? = null + private var thread: Thread? = null + @Volatile private var listener: Listener = object : Listener {} + + fun listen(listener: Listener): Int { + this.listener = listener + val bound = ServerSocket() + bound.reuseAddress = true + bound.bind(InetSocketAddress(InetAddress.getByName("::"), 0)) + server = bound + thread = Thread({ accept(bound) }, "airplay-screen").apply { isDaemon = true; start() } + return bound.localPort + } + + override fun close() { + if (!closed.compareAndSet(false, true)) return + safeClose(socket) + safeClose(server) + thread?.interrupt() + } + + private fun accept(bound: ServerSocket) { + try { + val accepted = bound.accept() + socket = accepted + run(accepted) + } catch (error: Exception) { + if (!closed.get()) listener.onClosed(error) + } + } + + private fun run(sock: Socket) { + var failure: Throwable? = null + try { + val input = sock.getInputStream() + while (!closed.get()) { + val header = readFully(input, HEADER_LEN) ?: break + val bodySize = readU32Le(header, 0) + if (bodySize > MAX_BODY) break + val body = readFully(input, bodySize) ?: break + onMessage(header, body) + } + } catch (error: Exception) { + failure = error + } finally { + if (socket === sock) socket = null + safeClose(sock) + if (!closed.get()) listener.onClosed(failure) + } + } + + private fun onMessage(header: ByteArray, body: ByteArray) { + when (header[OPCODE_OFFSET].toInt() and 0xff) { + OP_VIDEO_FRAME -> { + val payload = if (body.size >= ScreenCodec.TAG_SIZE) { + ScreenCodec.decryptFrame(key, frameCounter.get(), header, body) + .also { frameCounter.incrementAndGet() } + } else { + body + } + if (firstFrameLogged.compareAndSet(false, true)) { + Log.i( + TAG, + "video first decrypted frame sealed=${body.size} plain=${payload.size} " + + "head=${payload.hexPrefix(16)}", + ) + } + listener.onFrame(ScreenCodec.lengthPrefixedToAnnexB(payload)) + } + OP_VIDEO_CONFIG -> { + val (codec, codecData) = ScreenCodec.detectConfig(body) + Log.i(TAG, "video codec config codec=$codec body=${body.size} data=${codecData.size}") + listener.onCodec(codec) + listener.onConfig(codecData) + } + } + } + + private fun readFully(input: InputStream, length: Int): ByteArray? { + if (length < 0) return null + val output = ByteArray(length) + var offset = 0 + while (offset < length) { + val read = input.read(output, offset, length - offset) + if (read < 0) return null + offset += read + } + return output + } + + private companion object { + const val TAG = "xcertplay-usb" + const val HEADER_LEN = 128 + const val OPCODE_OFFSET = 4 + const val OP_VIDEO_FRAME = 0 + const val OP_VIDEO_CONFIG = 1 + const val MAX_BODY = 8 * 1024 * 1024 + } +} + +private fun ByteArray.hexPrefix(length: Int): String = + take(length).joinToString("") { "%02x".format(it.toInt() and 0xff) } + +/** Extracts the avcC/hvcC codec-data record from a VideoConfig payload. */ +object ScreenCodec { + fun decryptFrame(key: ByteArray, counter: Long, header: ByteArray, body: ByteArray): ByteArray = + if (body.size < TAG_SIZE) body + else AirPlayCrypto.chachaOpen(key, AirPlayCrypto.nonce64(counter), body, header) + + /** + * Replaces each four-byte NAL length with an Annex B start code in place. + * + * The payload is left untouched unless every length-prefixed NAL is valid, so malformed + * input keeps its original bytes for the normal decoder error path. + */ + fun lengthPrefixedToAnnexB(payload: ByteArray): ByteArray { + if (payload.size < 4 || payload.startsWithStartCode()) return payload + + var offset = 0 + while (offset + 4 <= payload.size) { + val length = readU32Be(payload, offset) + offset += 4 + if (length <= 0 || offset + length > payload.size) return payload + offset += length + } + if (offset != payload.size) return payload + + offset = 0 + while (offset + 4 <= payload.size) { + val length = readU32Be(payload, offset) + payload[offset] = 0 + payload[offset + 1] = 0 + payload[offset + 2] = 0 + payload[offset + 3] = 1 + offset += 4 + length + } + return payload + } + + fun detectConfig(payload: ByteArray): Pair { + for (index in 4..payload.size - 4) { + val fourcc = String(payload, index, 4, Charsets.US_ASCII) + when (fourcc) { + "hvcC" -> return VideoCodec.H265 to payload.copyOfRange(index + 4, payload.size) + "avcC" -> return VideoCodec.H264 to payload.copyOfRange(index + 4, payload.size) + } + } + return if (looksLikeAvcC(payload)) VideoCodec.H264 to payload else VideoCodec.H265 to payload + } + + private fun looksLikeAvcC(payload: ByteArray): Boolean { + if (payload.size < 9) return false + if ((payload[5].toInt() and 0x1f) < 1) return false + val spsLength = readU16Be(payload, 6) + if (8 + spsLength > payload.size) return false + return (payload[8].toInt() and 0x1f) == 7 + } + + private fun readU16Be(source: ByteArray, offset: Int): Int = + ((source[offset].toInt() and 0xff) shl 8) or (source[offset + 1].toInt() and 0xff) + + const val TAG_SIZE = 16 +} + +private fun ByteArray.startsWithStartCode(): Boolean = + size >= 4 && + this[0] == 0.toByte() && + this[1] == 0.toByte() && + this[2] == 0.toByte() && + this[3] == 1.toByte() + +private fun readU32Be(source: ByteArray, offset: Int): Int = + ((source[offset].toInt() and 0xff) shl 24) or + ((source[offset + 1].toInt() and 0xff) shl 16) or + ((source[offset + 2].toInt() and 0xff) shl 8) or + (source[offset + 3].toInt() and 0xff) + +private fun readU32Le(source: ByteArray, offset: Int): Int = + (source[offset].toInt() and 0xff) or + ((source[offset + 1].toInt() and 0xff) shl 8) or + ((source[offset + 2].toInt() and 0xff) shl 16) or + ((source[offset + 3].toInt() and 0xff) shl 24) diff --git a/shared/src/main/java/com/shilapi/xcertplay/airplay/Srp6a.kt b/shared/src/main/java/com/shilapi/xcertplay/airplay/Srp6a.kt new file mode 100644 index 0000000..5a2cc37 --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/airplay/Srp6a.kt @@ -0,0 +1,110 @@ +package com.shilapi.xcertplay.airplay + +import java.math.BigInteger +import java.security.SecureRandom + +/** + * SRP-6a server (RFC 5054 3072-bit group, SHA-512), the AirPlay pair-setup variant. + * + * The username is the literal "Pair-Setup" and the password is the fixed setup code. This is a + * clean-room port of LIVI's `srp.ts` over java.math.BigInteger. + */ +object Srp6a { + private const val SALT_BYTES = 16 + private const val PRIVATE_BYTES = 32 + private val random = SecureRandom() + private val n = BigInteger(N_HEX, 16) + private val g = BigInteger.valueOf(5) + private val multiplier = toBigInt(AirPlayCrypto.sha512(toBytes(n), pad(g))) + + fun start(username: String, password: String): Srp6aSession { + val salt = ByteArray(SALT_BYTES).also(random::nextBytes) + val identifier = username.toByteArray(Charsets.UTF_8) + val pass = password.toByteArray(Charsets.UTF_8) + val x = toBigInt(AirPlayCrypto.sha512(salt, AirPlayCrypto.sha512(identifier, COLON, pass))) + val verifier = g.modPow(x, n) + val privateExponent = toBigInt(ByteArray(PRIVATE_BYTES).also(random::nextBytes)) + val publicKeyB = (multiplier * verifier + g.modPow(privateExponent, n)).mod(n) + return Srp6aSession(salt, publicKeyB, identifier, verifier, privateExponent) + } + + internal fun toBytes(value: BigInteger): ByteArray { + if (value.signum() == 0) return byteArrayOf(0) + val encoded = value.toByteArray() + return if (encoded.size > 1 && encoded[0] == 0.toByte()) encoded.copyOfRange(1, encoded.size) else encoded + } + + internal fun toBigInt(bytes: ByteArray): BigInteger = BigInteger(1, bytes) + + internal fun pad(value: BigInteger): ByteArray { + val bytes = toBytes(value) + if (bytes.size >= N_BYTES) return bytes + return ByteArray(N_BYTES).also { bytes.copyInto(it, N_BYTES - bytes.size) } + } + + internal fun modulus(): BigInteger = n + internal fun generator(): BigInteger = g + + /** RFC 5054 3072-bit prime. */ + private const val N_HEX = + "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74" + + "020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F1437" + + "4FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED" + + "EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF05" + + "98DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB" + + "9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B" + + "E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF6955817183" + + "995497CEA956AE515D2261898FA051015728E5A8AAAC42DAD33170D04507A33A" + + "85521ABDF1CBA64ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7AB" + + "F5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6BF12FFA06D98A0864D8" + + "7602733EC86A64521F2B18177B200CBBE117577A615D6C770988C0BAD946E208" + + "E24FA074E5AB3143DB5BFCE0FD108E4B82D120A93AD2CAFFFFFFFFFFFFFFFF" + + private const val N_BYTES = 384 + private val COLON = byteArrayOf(':'.code.toByte()) +} + +data class Srp6aResult( + val ok: Boolean, + val sessionKey: ByteArray? = null, + val serverProof: ByteArray? = null, +) + +class Srp6aSession internal constructor( + val salt: ByteArray, + private val publicKeyB: BigInteger, + private val identifier: ByteArray, + private val verifier: BigInteger, + private val privateExponent: BigInteger, +) { + val publicKey: ByteArray get() = Srp6a.pad(publicKeyB) + + fun verify(publicKeyA: ByteArray, clientProof: ByteArray): Srp6aResult { + val a = Srp6a.toBigInt(publicKeyA) + val n = Srp6a.modulus() + if (a.mod(n).signum() == 0) return Srp6aResult(false) + + val u = Srp6a.toBigInt(AirPlayCrypto.sha512(Srp6a.pad(a), Srp6a.pad(publicKeyB))) + val s = (a * verifier.modPow(u, n)).mod(n).modPow(privateExponent, n) + val sessionKey = AirPlayCrypto.sha512(Srp6a.toBytes(s)) + + val hashN = AirPlayCrypto.sha512(Srp6a.toBytes(n)) + val hashG = AirPlayCrypto.sha512(Srp6a.toBytes(Srp6a.generator())) + val hashXor = ByteArray(hashN.size) + for (index in hashN.indices) { + hashXor[index] = (hashN[index].toInt() xor hashG[index].toInt()).toByte() + } + val expected = AirPlayCrypto.sha512( + hashXor, + AirPlayCrypto.sha512(identifier), + salt, + Srp6a.pad(a), + Srp6a.pad(publicKeyB), + sessionKey, + ) + if (!expected.contentEquals(clientProof)) return Srp6aResult(false) + + val serverProof = AirPlayCrypto.sha512(Srp6a.pad(a), clientProof, sessionKey) + return Srp6aResult(true, sessionKey, serverProof) + } +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/airplay/Tlv8Codec.kt b/shared/src/main/java/com/shilapi/xcertplay/airplay/Tlv8Codec.kt new file mode 100644 index 0000000..9334839 --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/airplay/Tlv8Codec.kt @@ -0,0 +1,52 @@ +package com.shilapi.xcertplay.airplay + +/** HomeKit/AirPlay-style TLV8 codec used by the pairing messages. */ +object Tlv8Codec { + private const val SEPARATOR_TYPE = 0xff + private const val MAX_FRAGMENT = 255 + + fun encode(items: List): ByteArray { + val chunks = ArrayList() + var previousType: Int? = null + for (item in items) { + if (previousType == item.type) { + chunks.add(byteArrayOf(SEPARATOR_TYPE.toByte(), 0)) + } + var offset = 0 + do { + val length = minOf(MAX_FRAGMENT, item.value.size - offset) + chunks.add(byteArrayOf(item.type.toByte(), length.toByte())) + chunks.add(item.value.copyOfRange(offset, offset + length)) + offset += length + } while (offset < item.value.size) + previousType = item.type + } + return concatBytes(*chunks.toTypedArray()) + } + + fun decode(buffer: ByteArray): Map { + val output = HashMap() + var position = 0 + var lastType: Int? = null + var lastLength = 0 + while (position + 2 <= buffer.size) { + val type = buffer[position].toInt() and 0xff + val length = buffer[position + 1].toInt() and 0xff + position += 2 + if (position + length > buffer.size) break + val value = buffer.copyOfRange(position, position + length) + position += length + if (type == lastType && lastLength == MAX_FRAGMENT) { + val previous = output[type] + output[type] = if (previous != null) previous + value else value + } else { + output[type] = value + } + lastType = type + lastLength = length + } + return output + } +} + +data class Tlv8Item(val type: Int, val value: ByteArray) diff --git a/shared/src/main/java/com/shilapi/xcertplay/iap2/body/Iap2BodyBuilder.kt b/shared/src/main/java/com/shilapi/xcertplay/iap2/body/Iap2BodyBuilder.kt new file mode 100644 index 0000000..23cb9c0 --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/iap2/body/Iap2BodyBuilder.kt @@ -0,0 +1,174 @@ +package com.shilapi.xcertplay.iap2.body + +import com.shilapi.xcertplay.iap2.catalog.Iap2Endpoint +import com.shilapi.xcertplay.iap2.catalog.Iap2FieldSpec +import com.shilapi.xcertplay.iap2.catalog.Iap2WireType +import com.shilapi.xcertplay.iap2.wire.Iap2Frame +import com.shilapi.xcertplay.iap2.wire.Iap2Parameter +import com.shilapi.xcertplay.iap2.wire.Iap2ParameterList +import com.shilapi.xcertplay.iap2.wire.Iap2ProtocolException +import com.shilapi.xcertplay.iap2.wire.Iap2WireCodec + +/** + * Ordered, schema-aware builder for one CSM body. + * + * The builder preserves insertion order and repeated IDs. When [endpoint] carries a schema, known + * IDs and wire types are validated at [build]; schema-less/opaque endpoints remain fully usable. + */ +class Iap2BodyBuilder private constructor( + private val endpoint: Iap2Endpoint?, + private val explicitMessageId: Int?, + private val fields: List, + private val validateSchema: Boolean, +) { + private data class Entry(val parameter: Iap2Parameter, val wireType: Iap2WireType) + + private val entries = ArrayList() + + fun void(id: Int): Iap2BodyBuilder = add(id, Iap2WireCodec.void(), Iap2WireType.VOID) + + fun u8(id: Int, value: Int): Iap2BodyBuilder = + add(id, Iap2WireCodec.u8(value), Iap2WireType.U8) + + fun bool(id: Int, value: Boolean): Iap2BodyBuilder = + add(id, Iap2WireCodec.bool(value), Iap2WireType.U8) + + fun i8(id: Int, value: Int): Iap2BodyBuilder = + add(id, Iap2WireCodec.i8(value), Iap2WireType.I8) + + fun u16(id: Int, value: Int): Iap2BodyBuilder = + add(id, Iap2WireCodec.u16(value), Iap2WireType.U16) + + fun i16(id: Int, value: Int): Iap2BodyBuilder = + add(id, Iap2WireCodec.i16(value), Iap2WireType.I16) + + fun u32(id: Int, value: Int): Iap2BodyBuilder = u32(id, value.toLong()) + + fun u32(id: Int, value: Long): Iap2BodyBuilder = + add(id, Iap2WireCodec.u32(value), Iap2WireType.U32) + + fun i32(id: Int, value: Int): Iap2BodyBuilder = + add(id, Iap2WireCodec.i32(value), Iap2WireType.I32) + + fun u64(id: Int, value: Long): Iap2BodyBuilder = + add(id, Iap2WireCodec.u64(value), Iap2WireType.U64) + + fun bytes(id: Int, value: ByteArray): Iap2BodyBuilder = + add(id, Iap2WireCodec.bytes(value), Iap2WireType.BYTES) + + fun string(id: Int, value: String): Iap2BodyBuilder = + add(id, Iap2WireCodec.string(value), Iap2WireType.STRING) + + fun strings(id: Int, values: Iterable): Iap2BodyBuilder = + add(id, Iap2WireCodec.strings(values), Iap2WireType.STRING_LIST) + + fun u16List(id: Int, values: Iterable): Iap2BodyBuilder = + add(id, Iap2WireCodec.u16List(values), Iap2WireType.U16_LIST) + + fun raw(id: Int, payload: ByteArray): Iap2BodyBuilder = + add(id, payload.copyOf(), Iap2WireType.OPAQUE) + + fun group(id: Int, block: Iap2BodyBuilder.() -> Unit): Iap2BodyBuilder { + val child = Iap2BodyBuilder( + endpoint = null, + explicitMessageId = null, + fields = schemaField(id)?.children.orEmpty(), + validateSchema = validateSchema, + ).apply(block) + val encoded = child.encodeValidated() + add(id, encoded, Iap2WireType.GROUP) + return this + } + + fun optionalVoid(id: Int, present: Boolean): Iap2BodyBuilder = + if (present) void(id) else this + + fun optionalU8(id: Int, value: Int?): Iap2BodyBuilder = + if (value == null) this else u8(id, value) + + fun optionalI8(id: Int, value: Int?): Iap2BodyBuilder = + if (value == null) this else i8(id, value) + + fun optionalU16(id: Int, value: Int?): Iap2BodyBuilder = + if (value == null) this else u16(id, value) + + fun optionalI16(id: Int, value: Int?): Iap2BodyBuilder = + if (value == null) this else i16(id, value) + + fun optionalU32(id: Int, value: Long?): Iap2BodyBuilder = + if (value == null) this else u32(id, value) + + fun optionalI32(id: Int, value: Int?): Iap2BodyBuilder = + if (value == null) this else i32(id, value) + + fun optionalU64(id: Int, value: Long?): Iap2BodyBuilder = + if (value == null) this else u64(id, value) + + fun optionalBytes(id: Int, value: ByteArray?): Iap2BodyBuilder = + if (value == null) this else bytes(id, value) + + fun optionalString(id: Int, value: String?): Iap2BodyBuilder = + if (value == null) this else string(id, value) + + fun build(): Iap2Frame { + val target = endpoint?.id ?: explicitMessageId + ?: throw IllegalStateException("A raw body builder needs an explicit message id") + return build(target) + } + + fun build(messageId: Int): Iap2Frame { + return Iap2Frame(messageId, encodeValidated()) + } + + private fun encodeValidated(): ByteArray { + if (validateSchema && fields.isNotEmpty()) validate(fields) + return Iap2ParameterList.of(entries.map { it.parameter }).encode() + } + + private fun add(id: Int, payload: ByteArray, wireType: Iap2WireType): Iap2BodyBuilder { + require(id in 0..0xffff) { "CSM parameter id must fit in u16" } + entries += Entry(Iap2Parameter(id, payload), wireType) + return this + } + + private fun schemaField(id: Int): Iap2FieldSpec? = fields.firstOrNull { it.id == id } + + private fun validate(specs: List) { + val byId = specs.associateBy(Iap2FieldSpec::id) + for (entry in entries) { + val spec = byId[entry.parameter.id] + ?: throw Iap2ProtocolException( + "Unknown body parameter 0x${entry.parameter.id.toString(16).padStart(4, '0')}", + ) + if (!wireTypeMatches(spec.type, entry.wireType)) { + throw Iap2ProtocolException( + "Body parameter 0x${spec.id.toString(16).padStart(4, '0')} expected ${spec.type}, " + + "got ${entry.wireType}", + ) + } + if (!spec.repeatable && entries.count { it.parameter.id == spec.id } > 1) { + throw Iap2ProtocolException( + "Body parameter 0x${spec.id.toString(16).padStart(4, '0')} is not repeatable", + ) + } + } + for (spec in specs.filter { it.required }) { + if (entries.none { it.parameter.id == spec.id }) { + throw Iap2ProtocolException( + "Missing required body parameter 0x${spec.id.toString(16).padStart(4, '0')} (${spec.name})", + ) + } + } + } + + private fun wireTypeMatches(expected: Iap2WireType, actual: Iap2WireType): Boolean = + expected == Iap2WireType.OPAQUE || expected == actual + + companion object { + fun of(endpoint: Iap2Endpoint): Iap2BodyBuilder = + Iap2BodyBuilder(endpoint, null, endpoint.fields, validateSchema = true) + + fun opaque(messageId: Int): Iap2BodyBuilder = + Iap2BodyBuilder(null, messageId, emptyList(), validateSchema = false) + } +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/iap2/body/Iap2BodyReader.kt b/shared/src/main/java/com/shilapi/xcertplay/iap2/body/Iap2BodyReader.kt new file mode 100644 index 0000000..5d0c550 --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/iap2/body/Iap2BodyReader.kt @@ -0,0 +1,196 @@ +package com.shilapi.xcertplay.iap2.body + +import com.shilapi.xcertplay.iap2.catalog.Iap2Endpoint +import com.shilapi.xcertplay.iap2.wire.Iap2Frame +import com.shilapi.xcertplay.iap2.wire.Iap2Parameter +import com.shilapi.xcertplay.iap2.wire.Iap2ParameterList +import com.shilapi.xcertplay.iap2.wire.Iap2ProtocolException +import com.shilapi.xcertplay.iap2.wire.Iap2WireCodec + +/** + * Typed reader over an ordered CSM body. + * + * The reader does not discard unknown or repeated parameters. Callers can use the scalar helpers + * for known fields and [raw] or [all] for forward-compatible values. + */ +class Iap2BodyReader private constructor( + private val parameters: Iap2ParameterList, +) { + val size: Int get() = parameters.size + + fun isEmpty(): Boolean = parameters.isEmpty() + + fun has(id: Int): Boolean = parameters.has(id) + + fun first(id: Int): Iap2Parameter? = parameters.first(id) + + fun require(id: Int, description: String = defaultDescription(id)): Iap2Parameter = + parameters.require(id, description) + + fun all(id: Int): List = parameters.all(id) + + fun raw(id: Int): ByteArray = require(id).payload + + fun optionalRaw(id: Int): ByteArray? = first(id)?.payload + + fun void(id: Int): Boolean { + val parameter = require(id) + requireEmpty(parameter, id) + return true + } + + fun optionalVoid(id: Int): Boolean = first(id)?.let { + requireEmpty(it, id) + true + } ?: false + + fun u8(id: Int): Int = Iap2WireCodec.readU8(scalar(id, 1)) + + fun optionalU8(id: Int): Int? = first(id)?.let { + requireSize(it, id, 1) + Iap2WireCodec.readU8(it.payload) + } + + fun i8(id: Int): Int = Iap2WireCodec.readI8(scalar(id, 1)) + + fun optionalI8(id: Int): Int? = first(id)?.let { + requireSize(it, id, 1) + Iap2WireCodec.readI8(it.payload) + } + + fun bool(id: Int): Boolean = u8(id) != 0 + + fun optionalBool(id: Int): Boolean? = optionalU8(id)?.let { it != 0 } + + fun u16(id: Int): Int = Iap2WireCodec.readU16(scalar(id, 2)) + + fun optionalU16(id: Int): Int? = first(id)?.let { + requireSize(it, id, 2) + Iap2WireCodec.readU16(it.payload) + } + + fun i16(id: Int): Int = Iap2WireCodec.readI16(scalar(id, 2)) + + fun optionalI16(id: Int): Int? = first(id)?.let { + requireSize(it, id, 2) + Iap2WireCodec.readI16(it.payload) + } + + fun u32(id: Int): Long = Iap2WireCodec.readU32(scalar(id, 4)) + + fun optionalU32(id: Int): Long? = first(id)?.let { + requireSize(it, id, 4) + Iap2WireCodec.readU32(it.payload) + } + + fun i32(id: Int): Int = Iap2WireCodec.readI32(scalar(id, 4)) + + fun optionalI32(id: Int): Int? = first(id)?.let { + requireSize(it, id, 4) + Iap2WireCodec.readI32(it.payload) + } + + fun u64(id: Int): Long = Iap2WireCodec.readU64(scalar(id, 8)) + + fun optionalU64(id: Int): Long? = first(id)?.let { + requireSize(it, id, 8) + Iap2WireCodec.readU64(it.payload) + } + + fun bytes(id: Int): ByteArray = raw(id) + + fun optionalBytes(id: Int): ByteArray? = optionalRaw(id) + + fun string(id: Int): String = try { + Iap2WireCodec.readString(raw(id)) + } catch (failure: Iap2ProtocolException) { + throw malformed(id, failure) + } + + fun optionalString(id: Int): String? = first(id)?.let { + try { + Iap2WireCodec.readString(it.payload) + } catch (failure: Iap2ProtocolException) { + throw malformed(id, failure) + } + } + + fun strings(id: Int): List = try { + Iap2WireCodec.readStrings(raw(id)) + } catch (failure: Iap2ProtocolException) { + throw malformed(id, failure) + } + + fun optionalStrings(id: Int): List? = first(id)?.let { + try { + Iap2WireCodec.readStrings(it.payload) + } catch (failure: Iap2ProtocolException) { + throw malformed(id, failure) + } + } + + fun u16List(id: Int): List = try { + Iap2WireCodec.readU16List(raw(id)) + } catch (failure: Iap2ProtocolException) { + throw malformed(id, failure) + } + + fun optionalU16List(id: Int): List? = first(id)?.let { + try { + Iap2WireCodec.readU16List(it.payload) + } catch (failure: Iap2ProtocolException) { + throw malformed(id, failure) + } + } + + fun group(id: Int): Iap2BodyReader = + Iap2BodyReader(Iap2ParameterList.parse(raw(id))) + + fun optionalGroup(id: Int): Iap2BodyReader? = optionalRaw(id)?.let { + Iap2BodyReader(Iap2ParameterList.parse(it)) + } + + fun list(): List = parameters.asList() + + private fun scalar(id: Int, expectedBytes: Int): ByteArray { + val parameter = require(id) + requireSize(parameter, id, expectedBytes) + return parameter.payload + } + + private fun requireSize(parameter: Iap2Parameter, id: Int, expectedBytes: Int) { + if (parameter.payload.size != expectedBytes) { + throw Iap2ProtocolException( + "Parameter 0x${hex(id)} expected $expectedBytes bytes, got ${parameter.payload.size}", + ) + } + } + + private fun requireEmpty(parameter: Iap2Parameter, id: Int) { + if (parameter.payload.isNotEmpty()) { + throw Iap2ProtocolException("Parameter 0x${hex(id)} must be void") + } + } + + private fun malformed(id: Int, failure: Iap2ProtocolException): Iap2ProtocolException = + Iap2ProtocolException("Malformed parameter 0x${hex(id)}", failure) + + private fun defaultDescription(id: Int): String = "parameter 0x${hex(id)}" + + private fun hex(id: Int): String = id.toString(16).padStart(4, '0') + + companion object { + fun of(frame: Iap2Frame): Iap2BodyReader = + Iap2BodyReader(Iap2ParameterList.parse(frame.payload)) + + fun of(body: Iap2ParameterList): Iap2BodyReader = Iap2BodyReader(body) + + /** Validates the endpoint name without requiring a caller-side cast or map lookup. */ + fun of(endpoint: Iap2Endpoint, frame: Iap2Frame): Iap2BodyReader { + require(frame.messageId == endpoint.id) { + "Frame 0x${frame.messageId.toString(16)} is not ${endpoint.name}" + } + return of(frame) + } + } +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/iap2/catalog/Iap2Endpoint.kt b/shared/src/main/java/com/shilapi/xcertplay/iap2/catalog/Iap2Endpoint.kt new file mode 100644 index 0000000..76e2f19 --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/iap2/catalog/Iap2Endpoint.kt @@ -0,0 +1,920 @@ +package com.shilapi.xcertplay.iap2.catalog + +enum class Iap2Direction { + IPHONE_TO_ACCESSORY, + ACCESSORY_TO_IPHONE, + BIDIRECTIONAL, +} + +enum class Iap2Confidence { + HIGH, + MEDIUM, +} + +/** A wire-level body value kind from the endpoint reference. */ +enum class Iap2WireType { + VOID, + U8, + I8, + U16, + I16, + U32, + I32, + U64, + U16_LIST, + BYTES, + STRING, + STRING_LIST, + GROUP, + OPAQUE, +} + +/** + * One endpoint field description. + * + * A group's [children] use the same parameter namespace as its parent. [repeatable] describes + * repeated parameter IDs or repeated group records; the body builder and reader preserve both. + */ +data class Iap2FieldSpec( + val id: Int, + val name: String, + val type: Iap2WireType, + val required: Boolean = false, + val repeatable: Boolean = false, + val children: List = emptyList(), +) + +/** + * Metadata for one CSM endpoint. + * + * [fields] may be empty for endpoints whose reference body is intentionally opaque or has not yet + * received a typed schema. The endpoint itself is still registered, named, and usable through the + * generic body builder. + */ +data class Iap2Endpoint( + val id: Int, + val name: String, + val feature: String, + val direction: Iap2Direction, + val confidence: Iap2Confidence = Iap2Confidence.HIGH, + val fields: List = emptyList(), +) + +/** + * The endpoint registry from IAP2_ENDPOINT_BODY_REFERENCE.zh-CN.md. + * + * The registry is intentionally source-level rather than loaded from markdown at runtime. This + * keeps Android builds deterministic and lets typed message code refer to named endpoints. + */ +object Iap2Endpoints { + val START_IDENTIFICATION = endpoint( + 0x1d00, + "StartIdentification", + "Identification", + Iap2Direction.IPHONE_TO_ACCESSORY, + ) + val IDENTIFICATION_INFORMATION = endpoint( + 0x1d01, + "IdentificationInformation", + "Identification", + Iap2Direction.ACCESSORY_TO_IPHONE, + fields = listOf( + field(0, "name", Iap2WireType.STRING, required = true), + field(1, "modelIdentifier", Iap2WireType.STRING, required = true), + field(2, "manufacturer", Iap2WireType.STRING, required = true), + field(3, "serialNumber", Iap2WireType.STRING, required = true), + field(4, "firmwareVersion", Iap2WireType.STRING, required = true), + field(5, "hardwareVersion", Iap2WireType.STRING, required = true), + field(6, "MessagesSentByAccessory", Iap2WireType.U16_LIST, required = true), + field(7, "MessagesReceivedFromDevice", Iap2WireType.U16_LIST, required = true), + field(8, "powerProvidingCapability", Iap2WireType.U8), + field(9, "maximumCurrentDrawnFromDevice", Iap2WireType.U16), + field(10, "externalAccessoryProtocols", Iap2WireType.GROUP), + field(12, "currentLanguage", Iap2WireType.STRING, required = true), + field(13, "supportedLanguages", Iap2WireType.STRING_LIST, required = true), + field( + 16, + "USBHostTransport", + Iap2WireType.GROUP, + children = listOf( + field(0, "componentID", Iap2WireType.U16), + field(1, "name", Iap2WireType.STRING), + field(2, "isSupported", Iap2WireType.VOID), + field(3, "interfaceNumber", Iap2WireType.U8), + field(4, "isAvailable", Iap2WireType.VOID), + ), + ), + field( + 17, + "BluetoothTransport", + Iap2WireType.GROUP, + children = listOf( + field(0, "componentID", Iap2WireType.U16), + field(1, "name", Iap2WireType.STRING), + field(2, "isSupported", Iap2WireType.VOID), + field(3, "bluetoothMAC", Iap2WireType.BYTES), + field(4, "transportName", Iap2WireType.STRING), + field(5, "isAvailable", Iap2WireType.VOID), + ), + ), + field(20, "VehicleInformation", Iap2WireType.GROUP), + field(21, "VehicleStatus", Iap2WireType.GROUP), + field(22, "LocationInformation", Iap2WireType.GROUP), + field( + 24, + "WirelessCarPlayTransport", + Iap2WireType.GROUP, + children = listOf( + field(0, "componentID", Iap2WireType.U16), + field(1, "SSID", Iap2WireType.STRING), + field(2, "isSupported", Iap2WireType.VOID), + field(3, "transportIdentifier", Iap2WireType.U16), + field(4, "isAvailable", Iap2WireType.VOID), + field(5, "isEnabled", Iap2WireType.VOID), + ), + ), + ), + ) + val IDENTIFICATION_ACCEPTED = endpoint( + 0x1d02, + "IdentificationAccepted", + "Identification", + Iap2Direction.IPHONE_TO_ACCESSORY, + ) + val IDENTIFICATION_REJECTED = endpoint( + 0x1d03, + "IdentificationRejected", + "Identification", + Iap2Direction.BIDIRECTIONAL, + ) + val CANCEL_IDENTIFICATION = endpoint( + 0x1d05, + "CancelIdentification", + "Identification", + Iap2Direction.ACCESSORY_TO_IPHONE, + ) + val IDENTIFICATION_INFORMATION_UPDATE = endpoint( + 0x1d06, + "IdentificationInformationUpdate", + "Identification", + Iap2Direction.ACCESSORY_TO_IPHONE, + ) + + val REQUEST_AUTHENTICATION_CERTIFICATE = endpoint( + 0xaa00, + "RequestAuthenticationCertificate", + "AccAuthentication", + Iap2Direction.IPHONE_TO_ACCESSORY, + ) + val AUTHENTICATION_CERTIFICATE = endpoint( + 0xaa01, + "AuthenticationCertificate", + "AccAuthentication", + Iap2Direction.ACCESSORY_TO_IPHONE, + fields = listOf(field(0, "certificate", Iap2WireType.BYTES, required = true)), + ) + val REQUEST_AUTHENTICATION_CHALLENGE_RESPONSE = endpoint( + 0xaa02, + "RequestAuthenticationChallengeResponse", + "AccAuthentication", + Iap2Direction.IPHONE_TO_ACCESSORY, + fields = listOf(field(0, "challenge", Iap2WireType.BYTES, required = true)), + ) + val AUTHENTICATION_RESPONSE = endpoint( + 0xaa03, + "AuthenticationResponse", + "AccAuthentication", + Iap2Direction.ACCESSORY_TO_IPHONE, + fields = listOf(field(0, "signatureResponse", Iap2WireType.BYTES, required = true)), + ) + val AUTHENTICATION_FAILED = endpoint( + 0xaa04, + "AuthenticationFailed", + "AccAuthentication", + Iap2Direction.IPHONE_TO_ACCESSORY, + ) + val AUTHENTICATION_SUCCEEDED = endpoint( + 0xaa05, + "AuthenticationSucceeded", + "AccAuthentication", + Iap2Direction.IPHONE_TO_ACCESSORY, + ) + val AUTHENTICATION_CERTIFICATE_SERIAL = endpoint( + 0xaa06, + "AuthenticationCertificateSerial", + "AccAuthentication", + Iap2Direction.ACCESSORY_TO_IPHONE, + ) + + val REQUEST_DEVICE_CERTIFICATE = endpoint( + 0xaa10, + "RequestDeviceCertificate", + "DeviceAuthentication", + Iap2Direction.ACCESSORY_TO_IPHONE, + ) + val DEVICE_AUTHENTICATION_CERTIFICATE = endpoint( + 0xaa11, + "AuthenticationCertificate", + "DeviceAuthentication", + Iap2Direction.IPHONE_TO_ACCESSORY, + ) + val REQUEST_DEVICE_CHALLENGE_RESPONSE = endpoint( + 0xaa12, + "RequestDeviceChallengeResponse", + "DeviceAuthentication", + Iap2Direction.ACCESSORY_TO_IPHONE, + ) + val DEVICE_AUTHENTICATION_RESPONSE = endpoint( + 0xaa13, + "AuthenticationResponse", + "DeviceAuthentication", + Iap2Direction.IPHONE_TO_ACCESSORY, + ) + val DEVICE_AUTHENTICATION_FAILED = endpoint( + 0xaa14, + "DeviceAuthenticationFailed", + "DeviceAuthentication", + Iap2Direction.ACCESSORY_TO_IPHONE, + ) + val DEVICE_AUTHENTICATION_SUCCEEDED = endpoint( + 0xaa15, + "DeviceAuthenticationSucceeded", + "DeviceAuthentication", + Iap2Direction.ACCESSORY_TO_IPHONE, + ) + + val CARPLAY_AVAILABILITY = endpoint( + 0x4300, + "CarPlayAvailability", + "CarPlayConnectionRequest", + Iap2Direction.IPHONE_TO_ACCESSORY, + fields = listOf( + field( + 0, + "wired", + Iap2WireType.GROUP, + children = listOf( + field(0, "wiredAvailable", Iap2WireType.U8), + field(1, "usbIdentifier", Iap2WireType.STRING), + ), + ), + field( + 1, + "wireless", + Iap2WireType.GROUP, + children = listOf( + field(0, "wirelessAvailable", Iap2WireType.U8), + field(1, "bluetoothIdentifier", Iap2WireType.STRING), + ), + ), + field( + 2, + "themeAssets", + Iap2WireType.GROUP, + children = listOf(field(0, "themeAssetsAvailable", Iap2WireType.U8)), + ), + ), + ) + val CARPLAY_START_SESSION = endpoint( + 0x4301, + "CarPlayStartSession", + "CarPlayConnectionRequest", + Iap2Direction.ACCESSORY_TO_IPHONE, + fields = listOf( + field( + 0, + "wired", + Iap2WireType.GROUP, + children = listOf( + field(0, "wiredIP", Iap2WireType.STRING, repeatable = true), + field(1, "reserved", Iap2WireType.U32), + ), + ), + field( + 1, + "wireless", + Iap2WireType.GROUP, + children = listOf( + field(0, "SSID", Iap2WireType.STRING), + field(1, "passphrase", Iap2WireType.STRING), + field(2, "channel", Iap2WireType.U8), + field(3, "wirelessIP", Iap2WireType.STRING, repeatable = true), + field(4, "securityType", Iap2WireType.U8), + ), + ), + field(2, "airPlayPort", Iap2WireType.U32), + field(3, "deviceIdentifier", Iap2WireType.STRING), + field(4, "publicKey", Iap2WireType.STRING), + field(5, "sourceVersion", Iap2WireType.STRING), + field(6, "SDKVersion", Iap2WireType.STRING), + field( + 7, + "clusterAsset", + Iap2WireType.GROUP, + children = listOf( + field(0, "assetID", Iap2WireType.STRING), + field(1, "assetVersion", Iap2WireType.U32), + ), + ), + field(8, "mutualAuth", Iap2WireType.U8), + ), + ) + val AVAILABLE_DIGITAL_CAR_KEYS = endpoint( + 0x4302, + "AvailableDigitalCarKeys", + "DigitalCarKey_Matching", + Iap2Direction.ACCESSORY_TO_IPHONE, + ) + val MATCHED_DIGITAL_CAR_KEYS = endpoint( + 0x4303, + "MatchedDigitalCarKeys", + "DigitalCarKey_Matching", + Iap2Direction.IPHONE_TO_ACCESSORY, + ) + + val REQUEST_WIFI_INFORMATION = endpoint( + 0x5700, + "RequestWiFiInformation", + "WiFiSharing", + Iap2Direction.ACCESSORY_TO_IPHONE, + ) + val WIFI_INFORMATION = endpoint( + 0x5701, + "WiFiInformation", + "WiFiSharing", + Iap2Direction.IPHONE_TO_ACCESSORY, + fields = listOf( + field(0, "status", Iap2WireType.U8, required = true), + field(1, "securityType", Iap2WireType.U8), + field(2, "SSID", Iap2WireType.STRING), + field(3, "passphrase", Iap2WireType.STRING), + ), + ) + val REQUEST_ACCESSORY_WIFI_CONFIGURATION = endpoint( + 0x5702, + "RequestAccessoryWiFiConfigurationInformation", + "WiFiSharing", + Iap2Direction.IPHONE_TO_ACCESSORY, + ) + val ACCESSORY_WIFI_CONFIGURATION = endpoint( + 0x5703, + "AccessoryWiFiConfigurationInformation", + "WiFiSharing", + Iap2Direction.ACCESSORY_TO_IPHONE, + fields = listOf( + field(0, "BSSID", Iap2WireType.BYTES), + field(1, "SSID", Iap2WireType.STRING), + field(2, "passphrase", Iap2WireType.STRING), + field(3, "securityType", Iap2WireType.U8), + field(4, "channel", Iap2WireType.U8), + ), + ) + + val GPRMC_DATA_STATUS_VALUES = endpoint( + 0xfff0, + "GPRMCDataStatusValues", + "Location", + Iap2Direction.IPHONE_TO_ACCESSORY, + ) + val START_LOCATION_INFORMATION = endpoint( + 0xfffa, + "StartLocationInformation", + "Location", + Iap2Direction.IPHONE_TO_ACCESSORY, + ) + val LOCATION_INFORMATION = endpoint( + 0xfffb, + "LocationInformation", + "Location", + Iap2Direction.ACCESSORY_TO_IPHONE, + fields = listOf(field(0, "NMEA", Iap2WireType.STRING)), + ) + val STOP_LOCATION_INFORMATION = endpoint( + 0xfffc, + "StopLocationInformation", + "Location", + Iap2Direction.IPHONE_TO_ACCESSORY, + ) + + val START_POWER_UPDATES = endpoint(0xae00, "StartPowerUpdates", "Power", Iap2Direction.ACCESSORY_TO_IPHONE) + val POWER_UPDATE = endpoint(0xae01, "PowerUpdate", "Power", Iap2Direction.IPHONE_TO_ACCESSORY) + val STOP_POWER_UPDATES = endpoint(0xae02, "StopPowerUpdates", "Power", Iap2Direction.ACCESSORY_TO_IPHONE) + val POWER_SOURCE_UPDATE = endpoint( + 0xae03, + "PowerSourceUpdate", + "Power", + Iap2Direction.ACCESSORY_TO_IPHONE, + fields = listOf( + field(0, "AvailableCurrentForDevice", Iap2WireType.U16), + field(1, "IsDeviceBatteryCharging", Iap2WireType.U8), + field(3, "AvailableSiphoningCurrent", Iap2WireType.U16), + field(4, "ReserveCurrent", Iap2WireType.U16), + field(5, "MaxNonSiphoningCurrentExceeded", Iap2WireType.VOID), + ), + ) + val ACCESSORY_POWER_UPDATE = endpoint(0xae05, "AccessoryPowerUpdate", "Power", Iap2Direction.ACCESSORY_TO_IPHONE) + val ACCESSORY_RESET_BASE_CURRENT = + endpoint(0xae06, "AccessoryResetBaseCurrent", "Power", Iap2Direction.ACCESSORY_TO_IPHONE) + + val START_ROUTE_GUIDANCE_UPDATES = endpoint( + 0x5200, + "StartRouteGuidanceUpdates", + "Navigation", + Iap2Direction.ACCESSORY_TO_IPHONE, + ) + val STOP_ROUTE_GUIDANCE_UPDATES = endpoint( + 0x5203, + "StopRouteGuidanceUpdates", + "Navigation", + Iap2Direction.ACCESSORY_TO_IPHONE, + ) + val START_NOW_PLAYING_UPDATES = endpoint( + 0x5000, + "StartNowPlayingUpdates", + "Now Playing", + Iap2Direction.ACCESSORY_TO_IPHONE, + ) + val STOP_NOW_PLAYING_UPDATES = endpoint( + 0x5002, + "StopNowPlayingUpdates", + "Now Playing", + Iap2Direction.ACCESSORY_TO_IPHONE, + ) + val START_COMMUNICATIONS_UPDATES = endpoint( + 0x4157, + "startCommunicationsUpdatesHandler", + "Communications", + Iap2Direction.ACCESSORY_TO_IPHONE, + ) + val START_CALL_STATE_UPDATES = endpoint( + 0x4154, + "startCallStateUpdatesHandler", + "Communications", + Iap2Direction.ACCESSORY_TO_IPHONE, + ) + val STOP_COMMUNICATIONS_UPDATES = endpoint( + 0x4159, + "stopCommunicationsUpdatesHandler", + "Communications", + Iap2Direction.ACCESSORY_TO_IPHONE, + ) + val STOP_CALL_STATE_UPDATES = endpoint( + 0x4156, + "stopCallStateUpdatesHandler", + "Communications", + Iap2Direction.ACCESSORY_TO_IPHONE, + ) + + val DEVICE_INFORMATION_UPDATE = endpoint( + 0x4e09, + "DeviceInformationUpdate", + "DeviceNotifications", + Iap2Direction.IPHONE_TO_ACCESSORY, + fields = listOf(field(0, "deviceName", Iap2WireType.STRING)), + ) + val DEVICE_LANGUAGE_UPDATE = endpoint( + 0x4e0a, + "DeviceLanguageUpdate", + "DeviceNotifications", + Iap2Direction.IPHONE_TO_ACCESSORY, + fields = listOf(field(0, "language", Iap2WireType.STRING)), + ) + val DEVICE_TIME_UPDATE = endpoint( + 0x4e0b, + "DeviceTimeUpdate", + "DeviceNotifications", + Iap2Direction.IPHONE_TO_ACCESSORY, + fields = listOf( + field(0, "secondsSinceReferenceDate", Iap2WireType.U64), + field(1, "timeZoneOffsetMinutes", Iap2WireType.I16), + field(2, "daylightSavingsOffsetMinutes", Iap2WireType.I8), + ), + ) + val DEVICE_UUID_UPDATE = endpoint( + 0x4e0c, + "DeviceUuidUpdate", + "DeviceNotifications", + Iap2Direction.IPHONE_TO_ACCESSORY, + fields = listOf(field(0, "deviceUUID", Iap2WireType.STRING)), + ) + val WIRELESS_CARPLAY_UPDATE = endpoint( + 0x4e0d, + "WirelessCarPlayUpdate", + "DeviceNotifications", + Iap2Direction.IPHONE_TO_ACCESSORY, + fields = listOf(field(0, "availability", Iap2WireType.U8, required = true)), + ) + val DEVICE_TRANSPORT_IDENTIFIER = endpoint( + 0x4e0e, + "DeviceTransportIdentifierNotification", + "DeviceNotifications", + Iap2Direction.IPHONE_TO_ACCESSORY, + fields = listOf( + field(0, "bluetoothMAC", Iap2WireType.STRING), + field(1, "usbTransportIdentifier", Iap2WireType.STRING), + ), + ) + + val EXTERNAL_ACCESSORY_OPEN_SESSION = endpoint( + 0xea00, + "externalAccessory_openEASession", + "ExternalAccessory", + Iap2Direction.IPHONE_TO_ACCESSORY, + ) + val EXTERNAL_ACCESSORY_CLOSE_SESSION = endpoint( + 0xea01, + "externalAccessory_closeEASession", + "ExternalAccessory", + Iap2Direction.IPHONE_TO_ACCESSORY, + ) + val EXTERNAL_ACCESSORY_STATUS_SESSION = endpoint( + 0xea03, + "externalaccessory_statusEASessionHandler", + "ExternalAccessory", + Iap2Direction.ACCESSORY_TO_IPHONE, + ) + + val PING = endpoint(0x0000, "pingHandler", "Test", Iap2Direction.ACCESSORY_TO_IPHONE) + val USER_NOTIFICATION = endpoint(0x0001, "userNotificationHandler", "Test", Iap2Direction.ACCESSORY_TO_IPHONE) + val SEND_PING_ACC = endpoint(0x0004, "sendPingAccHandler", "Test", Iap2Direction.ACCESSORY_TO_IPHONE) + val PING_ACC = endpoint(0x0005, "pingAccHandler", "Test", Iap2Direction.ACCESSORY_TO_IPHONE) + val DIGITAL_AUDIO_START = endpoint(0xda00, "digitalAudio_start", "DigitalAudio", Iap2Direction.ACCESSORY_TO_IPHONE) + val DIGITAL_AUDIO_INFORMATION_UPDATE = + endpoint(0xda01, "DigitalAudioInformationUpdate", "DigitalAudio", Iap2Direction.IPHONE_TO_ACCESSORY) + val DIGITAL_AUDIO_STOP = endpoint(0xda02, "digitalAudio_stop", "DigitalAudio", Iap2Direction.ACCESSORY_TO_IPHONE) + + /** + * The remaining reference endpoints are registered here without a claimed schema. Their body + * can still be built and read through the generic body API, but no enum or field ID is invented. + */ + val ALL: List = listOf( + START_IDENTIFICATION, + IDENTIFICATION_INFORMATION, + IDENTIFICATION_ACCEPTED, + IDENTIFICATION_REJECTED, + CANCEL_IDENTIFICATION, + IDENTIFICATION_INFORMATION_UPDATE, + REQUEST_AUTHENTICATION_CERTIFICATE, + AUTHENTICATION_CERTIFICATE, + REQUEST_AUTHENTICATION_CHALLENGE_RESPONSE, + AUTHENTICATION_RESPONSE, + AUTHENTICATION_FAILED, + AUTHENTICATION_SUCCEEDED, + AUTHENTICATION_CERTIFICATE_SERIAL, + REQUEST_DEVICE_CERTIFICATE, + DEVICE_AUTHENTICATION_CERTIFICATE, + REQUEST_DEVICE_CHALLENGE_RESPONSE, + DEVICE_AUTHENTICATION_RESPONSE, + DEVICE_AUTHENTICATION_FAILED, + DEVICE_AUTHENTICATION_SUCCEEDED, + CARPLAY_AVAILABILITY, + CARPLAY_START_SESSION, + AVAILABLE_DIGITAL_CAR_KEYS, + MATCHED_DIGITAL_CAR_KEYS, + REQUEST_WIFI_INFORMATION, + WIFI_INFORMATION, + REQUEST_ACCESSORY_WIFI_CONFIGURATION, + ACCESSORY_WIFI_CONFIGURATION, + GPRMC_DATA_STATUS_VALUES, + START_LOCATION_INFORMATION, + LOCATION_INFORMATION, + STOP_LOCATION_INFORMATION, + START_POWER_UPDATES, + POWER_UPDATE, + STOP_POWER_UPDATES, + POWER_SOURCE_UPDATE, + ACCESSORY_POWER_UPDATE, + ACCESSORY_RESET_BASE_CURRENT, + START_ROUTE_GUIDANCE_UPDATES, + STOP_ROUTE_GUIDANCE_UPDATES, + START_NOW_PLAYING_UPDATES, + STOP_NOW_PLAYING_UPDATES, + START_COMMUNICATIONS_UPDATES, + START_CALL_STATE_UPDATES, + STOP_COMMUNICATIONS_UPDATES, + STOP_CALL_STATE_UPDATES, + DEVICE_INFORMATION_UPDATE, + DEVICE_LANGUAGE_UPDATE, + DEVICE_TIME_UPDATE, + DEVICE_UUID_UPDATE, + WIRELESS_CARPLAY_UPDATE, + DEVICE_TRANSPORT_IDENTIFIER, + EXTERNAL_ACCESSORY_OPEN_SESSION, + EXTERNAL_ACCESSORY_CLOSE_SESSION, + EXTERNAL_ACCESSORY_STATUS_SESSION, + PING, + USER_NOTIFICATION, + SEND_PING_ACC, + PING_ACC, + DIGITAL_AUDIO_START, + DIGITAL_AUDIO_INFORMATION_UPDATE, + DIGITAL_AUDIO_STOP, + registryEndpoint(0xA100, "StartVehicleStatusUpdates", "Vehicle", Iap2Direction.IPHONE_TO_ACCESSORY), + registryEndpoint(0xA101, "VehicleStatusUpdate", "Vehicle", Iap2Direction.ACCESSORY_TO_IPHONE), + registryEndpoint(0xA102, "StopVehicleStatusUpdates", "Vehicle", Iap2Direction.IPHONE_TO_ACCESSORY), + registryEndpoint(0x5001, "NowPlayingUpdate", "Now Playing", Iap2Direction.IPHONE_TO_ACCESSORY), + registryEndpoint(0x5003, "SetNowPlayingInfo", "Now Playing", Iap2Direction.ACCESSORY_TO_IPHONE), + registryEndpoint(0x4C00, "StartMediaLibraryInformation", "Media Library", Iap2Direction.ACCESSORY_TO_IPHONE), + registryEndpoint(0x4C01, "MediaLibraryInformation", "Media Library", Iap2Direction.IPHONE_TO_ACCESSORY), + registryEndpoint(0x4C02, "StopMediaLibraryInformation", "Media Library", Iap2Direction.ACCESSORY_TO_IPHONE), + registryEndpoint(0x4C03, "StartMediaLibraryUpdates", "Media Library", Iap2Direction.ACCESSORY_TO_IPHONE), + registryEndpoint(0x4C04, "MediaLibraryUpdate", "Media Library", Iap2Direction.IPHONE_TO_ACCESSORY), + registryEndpoint(0x4C05, "StopMediaLibraryUpdates", "Media Library", Iap2Direction.ACCESSORY_TO_IPHONE), + registryEndpoint(0x4C06, "PlayMediaLibraryCurrentSelection", "Media Library", Iap2Direction.ACCESSORY_TO_IPHONE), + registryEndpoint(0x4C07, "PlayMediaLibraryItems", "Media Library", Iap2Direction.ACCESSORY_TO_IPHONE), + registryEndpoint(0x4C08, "PlayMediaLibraryCollection", "Media Library", Iap2Direction.ACCESSORY_TO_IPHONE), + registryEndpoint(0x4C09, "PlayMediaLibrarySpecial", "Media Library", Iap2Direction.ACCESSORY_TO_IPHONE), + registryEndpoint(0x5201, "RouteGuidanceUpdate", "Navigation", Iap2Direction.IPHONE_TO_ACCESSORY), + registryEndpoint(0x5202, "RouteGuidanceManeuverUpdate", "Navigation", Iap2Direction.IPHONE_TO_ACCESSORY), + registryEndpoint(0x5204, "LaneGuidanceInfoUpdate", "Navigation", Iap2Direction.IPHONE_TO_ACCESSORY), + registryEndpoint(0x4155, "CallStateUpdate", "Communications", Iap2Direction.IPHONE_TO_ACCESSORY), + registryEndpoint(0x4158, "CommunicationsUpdate", "Communications", Iap2Direction.IPHONE_TO_ACCESSORY), + registryEndpoint(0x415A, "initiateCallHandler", "Communications", Iap2Direction.ACCESSORY_TO_IPHONE), + registryEndpoint(0x415B, "acceptCallHandler", "Communications", Iap2Direction.ACCESSORY_TO_IPHONE), + registryEndpoint(0x415C, "endCallHandler", "Communications", Iap2Direction.ACCESSORY_TO_IPHONE), + registryEndpoint(0x415D, "swapCallHandler", "Communications", Iap2Direction.ACCESSORY_TO_IPHONE), + registryEndpoint(0x415E, "mergeCallHandler", "Communications", Iap2Direction.ACCESSORY_TO_IPHONE), + registryEndpoint(0x415F, "holdStatusUpdateHandler", "Communications", Iap2Direction.ACCESSORY_TO_IPHONE), + registryEndpoint(0x4160, "muteStatusUpdateHandler", "Communications", Iap2Direction.ACCESSORY_TO_IPHONE), + registryEndpoint(0x4161, "sendDTMFHandler", "Communications", Iap2Direction.ACCESSORY_TO_IPHONE), + registryEndpoint(0x4170, "startListUpdatesHandler", "Communications", Iap2Direction.ACCESSORY_TO_IPHONE), + registryEndpoint(0x4171, "ListUpdate", "Communications", Iap2Direction.IPHONE_TO_ACCESSORY), + registryEndpoint(0x4172, "stopListUpdatesHandler", "Communications", Iap2Direction.ACCESSORY_TO_IPHONE), + registryEndpoint( + 0x4E01, + "BluetoothComponentInfo", + "Bluetooth connection status", + Iap2Direction.ACCESSORY_TO_IPHONE, + ), + registryEndpoint( + 0x4E03, + "StartBluetoothConnectionUpdates", + "Bluetooth connection status", + Iap2Direction.ACCESSORY_TO_IPHONE, + ), + registryEndpoint( + 0x4E04, + "BluetoothConnectionUpdate", + "Bluetooth connection status", + Iap2Direction.IPHONE_TO_ACCESSORY, + ), + registryEndpoint( + 0x4E05, + "StopBluetoothConnectionUpdates", + "Bluetooth connection status", + Iap2Direction.ACCESSORY_TO_IPHONE, + ), + registryEndpoint(0xAD00, "appLinks_start", "App links and launch", Iap2Direction.ACCESSORY_TO_IPHONE), + registryEndpoint(0xAD01, "AppLinksUpdate", "App links and launch", Iap2Direction.IPHONE_TO_ACCESSORY), + registryEndpoint(0xAD02, "appLinks_stop", "App links and launch", Iap2Direction.ACCESSORY_TO_IPHONE), + registryEndpoint(0xAD03, "appLinks_requestAppIcons", "App links and launch", Iap2Direction.ACCESSORY_TO_IPHONE), + registryEndpoint(0xAD04, "AppIconResponse", "App links and launch", Iap2Direction.IPHONE_TO_ACCESSORY), + registryEndpoint(0xEA02, "requestAppLaunchHandler", "External Accessory", Iap2Direction.ACCESSORY_TO_IPHONE), + registryEndpoint(0x6800, "hid_StartHIDMsgHandler", "HID and USB host", Iap2Direction.ACCESSORY_TO_IPHONE), + registryEndpoint(0x6801, "hid_OutReport", "HID and USB host", Iap2Direction.IPHONE_TO_ACCESSORY), + registryEndpoint(0x6802, "hid_AccessoryHIDReportHandler", "HID and USB host", Iap2Direction.ACCESSORY_TO_IPHONE), + registryEndpoint(0x6803, "hid_StopHIDMsgHandler", "HID and USB host", Iap2Direction.ACCESSORY_TO_IPHONE), + registryEndpoint(0x6804, "hid_GetReport", "HID and USB host", Iap2Direction.IPHONE_TO_ACCESSORY), + registryEndpoint( + 0x6805, + "hid_AccessoryHIDGetReportResponseHandler", + "HID and USB host", + Iap2Direction.ACCESSORY_TO_IPHONE, + ), + registryEndpoint(0x6807, "hid_ComponentUpdate", "HID and USB host", Iap2Direction.IPHONE_TO_ACCESSORY), + registryEndpoint( + 0x7E00, + "usbHostMode_StartUSBHostModeHandler", + "HID and USB host", + Iap2Direction.ACCESSORY_TO_IPHONE, + ), + registryEndpoint( + 0x7E02, + "usbHostMode_StopUSBHostModeHandler", + "HID and USB host", + Iap2Direction.ACCESSORY_TO_IPHONE, + ), + registryEndpoint( + 0x5400, + "assistiveTouch_startAssistiveTouchHandler", + "VoiceOver and AssistiveTouch", + Iap2Direction.ACCESSORY_TO_IPHONE, + ), + registryEndpoint( + 0x5401, + "assistiveTouch_stopAssistiveTouchHandler", + "VoiceOver and AssistiveTouch", + Iap2Direction.ACCESSORY_TO_IPHONE, + ), + registryEndpoint( + 0x5402, + "assistiveTouch_startAssistiveTouchUpdateHandler", + "VoiceOver and AssistiveTouch", + Iap2Direction.ACCESSORY_TO_IPHONE, + ), + registryEndpoint(0x5403, "NotifyStatusUpdate", "VoiceOver and AssistiveTouch", Iap2Direction.IPHONE_TO_ACCESSORY), + registryEndpoint( + 0x5404, + "assistiveTouch_stopAssistiveTouchUpdateHandler", + "VoiceOver and AssistiveTouch", + Iap2Direction.ACCESSORY_TO_IPHONE, + ), + registryEndpoint( + 0x5601, + "voiceOver_moveCursorHandler", + "VoiceOver and AssistiveTouch", + Iap2Direction.ACCESSORY_TO_IPHONE, + ), + registryEndpoint( + 0x5602, + "voiceOver_selectCursorHandler", + "VoiceOver and AssistiveTouch", + Iap2Direction.ACCESSORY_TO_IPHONE, + ), + registryEndpoint( + 0x5603, + "voiceOver_scrollPageHandler", + "VoiceOver and AssistiveTouch", + Iap2Direction.ACCESSORY_TO_IPHONE, + ), + registryEndpoint( + 0x5606, + "voiceOver_speakTextHandler", + "VoiceOver and AssistiveTouch", + Iap2Direction.ACCESSORY_TO_IPHONE, + ), + registryEndpoint( + 0x5608, + "voiceOver_pauseSpeakingHandler", + "VoiceOver and AssistiveTouch", + Iap2Direction.ACCESSORY_TO_IPHONE, + ), + registryEndpoint( + 0x5609, + "voiceOver_resumeSpeakingHandler", + "VoiceOver and AssistiveTouch", + Iap2Direction.ACCESSORY_TO_IPHONE, + ), + registryEndpoint( + 0x560B, + "voiceOver_startInformationHandler", + "VoiceOver and AssistiveTouch", + Iap2Direction.ACCESSORY_TO_IPHONE, + ), + registryEndpoint( + 0x560C, + "VoiceOverInformation", + "VoiceOver and AssistiveTouch", + Iap2Direction.IPHONE_TO_ACCESSORY, + ), + registryEndpoint( + 0x560D, + "voiceOver_stopInformationHandler", + "VoiceOver and AssistiveTouch", + Iap2Direction.ACCESSORY_TO_IPHONE, + ), + registryEndpoint( + 0x560E, + "voiceOver_updateInformationHandler", + "VoiceOver and AssistiveTouch", + Iap2Direction.ACCESSORY_TO_IPHONE, + ), + registryEndpoint( + 0x560F, + "voiceOver_startCursorInformationHandler", + "VoiceOver and AssistiveTouch", + Iap2Direction.ACCESSORY_TO_IPHONE, + ), + registryEndpoint( + 0x5610, + "VoiceOverCursorInformation", + "VoiceOver and AssistiveTouch", + Iap2Direction.IPHONE_TO_ACCESSORY, + ), + registryEndpoint( + 0x5611, + "voiceOver_stopCursorInformationHandler", + "VoiceOver and AssistiveTouch", + Iap2Direction.ACCESSORY_TO_IPHONE, + ), + registryEndpoint( + 0x5612, + "VoiceOver_startVoiceOverHandler", + "VoiceOver and AssistiveTouch", + Iap2Direction.ACCESSORY_TO_IPHONE, + ), + registryEndpoint( + 0x5613, + "VoiceOver_stopVoiceOverHandler", + "VoiceOver and AssistiveTouch", + Iap2Direction.ACCESSORY_TO_IPHONE, + ), + registryEndpoint(0x0B00, "oobBtPairing2_startPairing", "BLE and OOB pairing", Iap2Direction.IPHONE_TO_ACCESSORY), + registryEndpoint( + 0x0B01, + "oobBtPairing2_accessoryInfoHandler", + "BLE and OOB pairing", + Iap2Direction.ACCESSORY_TO_IPHONE, + ), + registryEndpoint(0x0B02, "oobBtPairing2_statusHandler", "BLE and OOB pairing", Iap2Direction.ACCESSORY_TO_IPHONE), + registryEndpoint(0x0B03, "oobBtPairing2_stopPairing", "BLE and OOB pairing", Iap2Direction.IPHONE_TO_ACCESSORY), + registryEndpoint( + 0x10DA, + "destinationSharing_StartDestinationInformation", + "Destination sharing", + Iap2Direction.ACCESSORY_TO_IPHONE, + ), + registryEndpoint( + 0x10DB, + "DestinationInformationUpdate", + "Destination sharing", + Iap2Direction.IPHONE_TO_ACCESSORY, + ), + registryEndpoint( + 0x10DC, + "destinationSharing_StopDestinationInformation", + "Destination sharing", + Iap2Direction.ACCESSORY_TO_IPHONE, + ), + registryEndpoint( + 0x10DD, + "destinationSharing_DestinationInformationStatus", + "Destination sharing", + Iap2Direction.ACCESSORY_TO_IPHONE, + ), + registryEndpoint(0x00B0, "oobBtPairing_startPairing", "Other endpoints", Iap2Direction.IPHONE_TO_ACCESSORY), + registryEndpoint( + 0x00B1, + "oobBtPairing_accessoryInfoHandler", + "Other endpoints", + Iap2Direction.ACCESSORY_TO_IPHONE, + ), + registryEndpoint( + 0x00B2, + "oobBtPairing_pairingLinkKeyInfo", + "Other endpoints", + Iap2Direction.IPHONE_TO_ACCESSORY, + ), + registryEndpoint( + 0x00B3, + "oobBtPairing_completionInfoHandler", + "Other endpoints", + Iap2Direction.ACCESSORY_TO_IPHONE, + ), + registryEndpoint(0x00B4, "oobBtPairing_stopPairing", "Other endpoints", Iap2Direction.IPHONE_TO_ACCESSORY), + registryEndpoint(0x0D00, "StartRoadObjectDetection", "Other endpoints", Iap2Direction.IPHONE_TO_ACCESSORY), + registryEndpoint(0x0D01, "RoadObjectDetectionUpdate", "Other endpoints", Iap2Direction.IPHONE_TO_ACCESSORY), + registryEndpoint(0x0D02, "StopRoadObjectDetection", "Other endpoints", Iap2Direction.IPHONE_TO_ACCESSORY), + registryEndpoint( + 0xB102, + "blePairing_accessoryStateUpdateHandler", + "Other endpoints", + Iap2Direction.ACCESSORY_TO_IPHONE, + ), + registryEndpoint( + 0xB103, + "blePairing_accessoryPairingInfoHandler", + "Other endpoints", + Iap2Direction.ACCESSORY_TO_IPHONE, + ), + registryEndpoint( + 0xB105, + "blePairing_accessoryPairingDataHandler", + "Other endpoints", + Iap2Direction.ACCESSORY_TO_IPHONE, + ), + registryEndpoint(0xB107, "blePairing_stopBLEUpdates", "Other endpoints", Iap2Direction.IPHONE_TO_ACCESSORY), + ) + + private val byId: Map = ALL.associateBy(Iap2Endpoint::id) + + fun byId(id: Int): Iap2Endpoint? = byId[id] + + fun require(id: Int): Iap2Endpoint = + byId(id) ?: throw IllegalArgumentException("Unknown iAP2 endpoint 0x${id.toString(16).padStart(4, '0')}") + + private fun endpoint( + id: Int, + name: String, + feature: String, + direction: Iap2Direction, + confidence: Iap2Confidence = Iap2Confidence.HIGH, + fields: List = emptyList(), + ): Iap2Endpoint = Iap2Endpoint(id, name, feature, direction, confidence, fields) + + private fun registryEndpoint( + id: Int, + name: String, + feature: String, + direction: Iap2Direction, + ): Iap2Endpoint = Iap2Endpoint(id, name, feature, direction, fields = emptyList()) + + private fun field( + id: Int, + name: String, + type: Iap2WireType, + required: Boolean = false, + repeatable: Boolean = false, + children: List = emptyList(), + ): Iap2FieldSpec = Iap2FieldSpec(id, name, type, required, repeatable, children) +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/iap2/message/Iap2Messages.kt b/shared/src/main/java/com/shilapi/xcertplay/iap2/message/Iap2Messages.kt new file mode 100644 index 0000000..81368b4 --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/iap2/message/Iap2Messages.kt @@ -0,0 +1,314 @@ +package com.shilapi.xcertplay.iap2.message + +import com.shilapi.xcertplay.iap2.body.Iap2BodyBuilder +import com.shilapi.xcertplay.iap2.body.Iap2BodyReader +import com.shilapi.xcertplay.iap2.catalog.Iap2Endpoint +import com.shilapi.xcertplay.iap2.catalog.Iap2Endpoints +import com.shilapi.xcertplay.iap2.wire.Iap2Frame +import com.shilapi.xcertplay.iap2.wire.Iap2ParameterList +import com.shilapi.xcertplay.iap2.wire.Iap2ProtocolException + +/** Reusable entry points for constructing and reading iAP2 CSM bodies. */ +object Iap2Messages { + inline fun build( + endpoint: Iap2Endpoint, + block: Iap2BodyBuilder.() -> Unit, + ): Iap2Frame = Iap2BodyBuilder.of(endpoint).apply(block).build() + + inline fun buildRaw( + messageId: Int, + block: Iap2BodyBuilder.() -> Unit, + ): Iap2Frame = Iap2BodyBuilder.opaque(messageId).apply(block).build() + + fun reader(frame: Iap2Frame): Iap2BodyReader = Iap2BodyReader.of(frame) +} + +/** Parameters carried by the optional `wireless` group of 0x4301. */ +data class Iap2WirelessSessionParameters( + val ssid: String, + val passphrase: String, + val channel: Int, + val ipAddresses: List, + val securityType: Int, +) { + init { + require(ssid.isNotBlank()) { "wireless SSID must not be blank" } + require(passphrase.isNotBlank()) { "wireless passphrase must not be blank" } + require(channel in 0..0xff) { "wireless channel must be in 0..255" } + require(ipAddresses.isNotEmpty()) { "wireless IP address list must not be empty" } + require(securityType in 0..0xff) { "wireless security type must be in 0..255" } + } +} + +data class Iap2ClusterAsset( + val assetId: String, + val assetVersion: Long, +) { + init { + require(assetId.isNotBlank()) { "cluster asset ID must not be blank" } + require(assetVersion in 0..0xffff_ffffL) { "cluster asset version must fit in u32" } + } +} + +/** Typed codec for the high-value CarPlay endpoints. */ +object Iap2CarPlayMessages { + fun startSession( + airPlayPort: Int, + publicKey: String, + sourceVersion: String, + wiredIpv6Addresses: List = emptyList(), + wiredReserved: Long? = null, + wireless: Iap2WirelessSessionParameters? = null, + deviceIdentifier: String? = null, + sdkVersion: String? = null, + clusterAsset: Iap2ClusterAsset? = null, + mutualAuth: Boolean? = null, + ): Iap2Frame { + require(airPlayPort in 1..0xffff) { "airPlayPort must be in 1..65535" } + require(publicKey.isNotEmpty()) { "publicKey must not be empty" } + require(sourceVersion.isNotEmpty()) { "sourceVersion must not be empty" } + + return Iap2Messages.build(Iap2Endpoints.CARPLAY_START_SESSION) { + if (wiredIpv6Addresses.isNotEmpty() || wiredReserved != null) { + group(0) { + wiredIpv6Addresses.forEach { string(0, it) } + optionalU32(1, wiredReserved) + } + } + wireless?.let { + group(1) { + string(0, it.ssid) + string(1, it.passphrase) + u8(2, it.channel) + it.ipAddresses.forEach { address -> string(3, address) } + u8(4, it.securityType) + } + } + u32(2, airPlayPort) + optionalString(3, deviceIdentifier) + string(4, publicKey) + string(5, sourceVersion) + optionalString(6, sdkVersion) + clusterAsset?.let { + group(7) { + string(0, it.assetId) + u32(1, it.assetVersion) + } + } + optionalU8(8, mutualAuth?.let { if (it) 1 else 0 }) + } + } + + fun availability(frame: Iap2Frame): Iap2CarPlayAvailability { + require(frame.messageId == Iap2Endpoints.CARPLAY_AVAILABILITY.id) { + "Expected CarPlayAvailability, got 0x${frame.messageId.toString(16)}" + } + return availability(frame.payload) + } + + /** Decodes an already extracted 0x4300 body without requiring the caller to rebuild a frame. */ + fun availability(payload: ByteArray): Iap2CarPlayAvailability { + val body = Iap2BodyReader.of(Iap2ParameterList.parse(payload)) + val wired = body.optionalGroup(0)?.let { + Iap2AvailabilityState( + available = decodeAvailability(it.optionalU8(0), "wired"), + identifier = it.optionalString(1), + ) + } + val wireless = body.optionalGroup(1)?.let { + Iap2AvailabilityState( + available = decodeAvailability(it.optionalU8(0), "wireless"), + identifier = it.optionalString(1), + ) + } + val themeAssets = body.optionalGroup(2)?.let { + Iap2AvailabilityState( + available = decodeAvailability(it.optionalU8(0), "themeAssets"), + identifier = null, + ) + } + return Iap2CarPlayAvailability(wired, wireless, themeAssets) + } + + private fun decodeAvailability(value: Int?, label: String): Boolean? { + if (value == null) return null + if (value !in 0..1) { + throw Iap2ProtocolException("$label availability must be 0 or 1, got $value") + } + return value == 1 + } +} + +data class Iap2AvailabilityState( + val available: Boolean?, + val identifier: String?, +) + +data class Iap2CarPlayAvailability( + val wired: Iap2AvailabilityState?, + val wireless: Iap2AvailabilityState?, + val themeAssets: Iap2AvailabilityState?, +) + +/** Typed codecs for Wi-Fi sharing and Wireless CarPlay notifications. */ +object Iap2WirelessMessages { + fun accessoryWiFiConfiguration( + ssid: String, + passphrase: String, + channel: Int, + securityType: Int, + bssid: ByteArray? = null, + ): Iap2Frame = Iap2Messages.build(Iap2Endpoints.ACCESSORY_WIFI_CONFIGURATION) { + optionalBytes(0, bssid) + string(1, ssid) + string(2, passphrase) + u8(3, securityType) + u8(4, channel) + } + + fun wifiInformation(frame: Iap2Frame): Iap2WifiInformation { + require(frame.messageId == Iap2Endpoints.WIFI_INFORMATION.id) { + "Expected WiFiInformation, got 0x${frame.messageId.toString(16)}" + } + val body = Iap2Messages.reader(frame) + val status = body.u8(0) + if (status != 0) return Iap2WifiInformation(status) + return Iap2WifiInformation( + status = status, + securityType = body.optionalU8(1), + ssid = body.optionalString(2), + passphrase = body.optionalString(3), + ) + } + + fun wirelessCarPlayAvailability(frame: Iap2Frame): Boolean { + require(frame.messageId == Iap2Endpoints.WIRELESS_CARPLAY_UPDATE.id) { + "Expected WirelessCarPlayUpdate, got 0x${frame.messageId.toString(16)}" + } + return when (val value = Iap2Messages.reader(frame).u8(0)) { + 0 -> false + 1 -> true + else -> throw Iap2ProtocolException("WirelessCarPlayUpdate availability must be 0 or 1, got $value") + } + } + + fun deviceTransportIdentifier(frame: Iap2Frame): Iap2DeviceTransportIdentifier { + require(frame.messageId == Iap2Endpoints.DEVICE_TRANSPORT_IDENTIFIER.id) { + "Expected DeviceTransportIdentifierNotification, got 0x${frame.messageId.toString(16)}" + } + val body = Iap2Messages.reader(frame) + return Iap2DeviceTransportIdentifier( + bluetoothMac = body.optionalString(0), + usbTransportIdentifier = body.optionalString(1), + ) + } +} + +/** Typed accessory-authentication bodies, including the BAA certificate package layout. */ +object Iap2AuthenticationMessages { + fun accessoryCertificate(certificate: ByteArray): Iap2Frame = + Iap2Messages.build(Iap2Endpoints.AUTHENTICATION_CERTIFICATE) { + bytes(0, certificate) + } + + /** + * Wraps an already encoded 0xAA01 body, as returned by the remote MFi/BAA transport. + * The body is parsed before wrapping so malformed parameter framing cannot escape this layer. + */ + fun accessoryCertificateBody(body: ByteArray): Iap2Frame { + Iap2ParameterList.parse(body) + return Iap2Frame(Iap2Endpoints.AUTHENTICATION_CERTIFICATE.id, body) + } + + /** + * The remote BAA service returns a package whose three fields are already the final 0xAA01 + * parameter sequence. It is intentionally built through the raw endpoint wrapper because this + * package uses a schema variant that is not represented by the baseline MFi endpoint. + */ + fun baaCertificatePackage(leaf: ByteArray, intermediate: ByteArray): Iap2Frame = + Iap2Messages.buildRaw(Iap2Endpoints.AUTHENTICATION_CERTIFICATE.id) { + bytes(0, leaf) + u8(1, 1) + bytes(2, intermediate) + } + + fun response(signature: ByteArray): Iap2Frame = + Iap2Messages.build(Iap2Endpoints.AUTHENTICATION_RESPONSE) { + bytes(0, signature) + } + + fun challenge(frame: Iap2Frame): ByteArray { + require(frame.messageId == Iap2Endpoints.REQUEST_AUTHENTICATION_CHALLENGE_RESPONSE.id) { + "Expected RequestAuthenticationChallengeResponse, got 0x${frame.messageId.toString(16)}" + } + return Iap2Messages.reader(frame).bytes(0) + } +} + +data class Iap2WifiInformation( + val status: Int, + val securityType: Int? = null, + val ssid: String? = null, + val passphrase: String? = null, +) { + val successful: Boolean get() = status == 0 +} + +data class Iap2DeviceTransportIdentifier( + val bluetoothMac: String?, + val usbTransportIdentifier: String?, +) + +/** Typed codecs for power and subscription requests used during bring-up. */ +object Iap2ControlMessages { + fun powerSourceUpdate( + availableCurrentMilliAmps: Int, + charging: Boolean? = null, + availableSiphoningCurrentMilliAmps: Int? = null, + reserveCurrentMilliAmps: Int? = null, + maxNonSiphoningCurrentExceeded: Boolean = false, + ): Iap2Frame = Iap2Messages.build(Iap2Endpoints.POWER_SOURCE_UPDATE) { + u16(0, availableCurrentMilliAmps) + optionalU8(1, charging?.let { if (it) 1 else 0 }) + optionalU16(3, availableSiphoningCurrentMilliAmps) + optionalU16(4, reserveCurrentMilliAmps) + optionalVoid(5, maxNonSiphoningCurrentExceeded) + } + + fun subscriptions(): List = listOf( + Iap2Messages.build(Iap2Endpoints.START_NOW_PLAYING_UPDATES) { + group(0) { + listOf(1, 4, 6, 12, 26).forEach(::void) + } + group(1) { + listOf(0, 1, 7).forEach(::void) + } + }, + Iap2Messages.build(Iap2Endpoints.START_ROUTE_GUIDANCE_UPDATES) {}, + Iap2Messages.build(Iap2Endpoints.START_POWER_UPDATES) { + void(4) + void(5) + void(6) + }, + Iap2Messages.build(Iap2Endpoints.START_COMMUNICATIONS_UPDATES) { + void(0) + void(4) + void(5) + }, + Iap2Messages.build(Iap2Endpoints.START_CALL_STATE_UPDATES) { + void(0) + void(1) + void(2) + void(3) + void(4) + void(11) + }, + ) + + fun locationInformation(nmeaSentence: String): Iap2Frame { + require(nmeaSentence.isNotEmpty()) { "NMEA sentence must not be empty" } + return Iap2Messages.build(Iap2Endpoints.LOCATION_INFORMATION) { + string(0, nmeaSentence) + } + } +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/iap2/session/Iap2Session.kt b/shared/src/main/java/com/shilapi/xcertplay/iap2/session/Iap2Session.kt new file mode 100644 index 0000000..df92521 --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/iap2/session/Iap2Session.kt @@ -0,0 +1,145 @@ +package com.shilapi.xcertplay.iap2.session + +import com.shilapi.xcertplay.iap2.body.Iap2BodyBuilder +import com.shilapi.xcertplay.iap2.body.Iap2BodyReader +import com.shilapi.xcertplay.iap2.catalog.Iap2Endpoint +import com.shilapi.xcertplay.iap2.message.Iap2Messages +import com.shilapi.xcertplay.iap2.trace.Iap2FrameFormatter +import com.shilapi.xcertplay.iap2.trace.Iap2TraceDirection +import com.shilapi.xcertplay.iap2.wire.Iap2Frame +import com.shilapi.xcertplay.transport.BlockingDuplexByteStream +import com.shilapi.xcertplay.transport.Iap2CsmChannel + +/** + * One immediately readable and writable iAP2 CSM session. + * + * [Iap2CsmChannel] remains the lower-level frame transport. This class is the protocol-facing + * facade used by services: it accepts endpoint builders, sends complete frames, receives complete + * frames, and exposes the typed body reader. + */ +class Iap2Session private constructor( + private val channel: Iap2CsmChannel, + private val traceContext: String, + private val onTrace: (String) -> Unit, +) : AutoCloseable { + val isClosed: Boolean get() = channel.isClosed + + fun awaitReady(timeoutMillis: Long): Boolean { + val ready = channel.awaitReady(timeoutMillis) + emitTrace("IAP2 READY [$traceContext] ready=$ready") + return ready + } + + fun send(frame: Iap2Frame, timeoutMillis: Long = DEFAULT_SEND_TIMEOUT_MILLIS) { + try { + channel.send(frame, timeoutMillis) + emitFrameTrace(Iap2TraceDirection.TX, frame) + } catch (failure: Throwable) { + emitTrace( + Iap2FrameFormatter.formatFailure( + Iap2TraceDirection.TX, + traceContext, + frame.messageId, + failure, + ), + ) + throw failure + } + } + + fun send( + endpoint: Iap2Endpoint, + timeoutMillis: Long = DEFAULT_SEND_TIMEOUT_MILLIS, + block: Iap2BodyBuilder.() -> Unit, + ) { + send(Iap2Messages.build(endpoint, block), timeoutMillis) + } + + fun sendRaw( + messageId: Int, + timeoutMillis: Long = DEFAULT_SEND_TIMEOUT_MILLIS, + block: Iap2BodyBuilder.() -> Unit, + ) { + send(Iap2Messages.buildRaw(messageId, block), timeoutMillis) + } + + fun recv(timeoutMillis: Long): Iap2Frame? { + return try { + channel.recv(timeoutMillis)?.also { emitFrameTrace(Iap2TraceDirection.RX, it) } + } catch (failure: Throwable) { + emitTrace( + Iap2FrameFormatter.formatFailure( + Iap2TraceDirection.RX, + traceContext, + messageId = null, + failure = failure, + ), + ) + throw failure + } + } + + fun reader(frame: Iap2Frame): Iap2BodyReader = Iap2Messages.reader(frame) + + override fun close() { + try { + channel.close() + } finally { + emitTrace("IAP2 CLOSE [$traceContext]") + } + } + + private fun emitFrameTrace(direction: Iap2TraceDirection, frame: Iap2Frame) { + try { + emitTrace(Iap2FrameFormatter.format(direction, traceContext, frame)) + } catch (failure: Exception) { + emitTrace( + Iap2FrameFormatter.formatFailure( + direction, + traceContext, + frame.messageId, + failure, + ), + ) + } + } + + private fun emitTrace(message: String) { + try { + onTrace(message) + } catch (_: Exception) { + // Logging must never change protocol behavior. + } + } + + companion object { + private const val DEFAULT_SEND_TIMEOUT_MILLIS = 5_000L + + fun open( + underlying: BlockingDuplexByteStream, + traceContext: String = "wired", + onTrace: (String) -> Unit = {}, + ): Iap2Session = + Iap2Session(Iap2CsmChannel.open(underlying), traceContext, onTrace) + + fun openWireless( + underlying: BlockingDuplexByteStream, + traceContext: String = "wireless", + onTrace: (String) -> Unit = {}, + ): Iap2Session = + Iap2Session(Iap2CsmChannel.openWireless(underlying), traceContext, onTrace) + + fun openTunnel( + underlying: BlockingDuplexByteStream, + traceContext: String = "wireless-tunnel", + onTrace: (String) -> Unit = {}, + ): Iap2Session = + Iap2Session(Iap2CsmChannel.openTunnel(underlying), traceContext, onTrace) + + fun wrap( + channel: Iap2CsmChannel, + traceContext: String = "iap2", + onTrace: (String) -> Unit = {}, + ): Iap2Session = Iap2Session(channel, traceContext, onTrace) + } +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/iap2/trace/Iap2FrameFormatter.kt b/shared/src/main/java/com/shilapi/xcertplay/iap2/trace/Iap2FrameFormatter.kt new file mode 100644 index 0000000..0647d8f --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/iap2/trace/Iap2FrameFormatter.kt @@ -0,0 +1,211 @@ +package com.shilapi.xcertplay.iap2.trace + +import com.shilapi.xcertplay.iap2.catalog.Iap2Endpoints +import com.shilapi.xcertplay.iap2.catalog.Iap2FieldSpec +import com.shilapi.xcertplay.iap2.catalog.Iap2WireType +import com.shilapi.xcertplay.iap2.wire.Iap2Frame +import com.shilapi.xcertplay.iap2.wire.Iap2Parameter +import com.shilapi.xcertplay.iap2.wire.Iap2ParameterList +import com.shilapi.xcertplay.iap2.wire.Iap2ProtocolException +import com.shilapi.xcertplay.iap2.wire.Iap2WireCodec + +enum class Iap2TraceDirection(val label: String) { + TX("TX"), + RX("RX"), +} + +/** + * Human-readable rendering for the on-device iAP2 trace. + * + * Known endpoints use their field names and wire types. Unknown/medium-confidence endpoints still + * show ordered parameter IDs and safe scalar/string/byte summaries, so no frame is invisible just + * because it has not received a strict schema yet. + */ +object Iap2FrameFormatter { + private const val MAX_PARAMETERS = 80 + private const val MAX_STRING_CHARS = 240 + private const val MAX_HEX_BYTES = 24 + + fun format( + direction: Iap2TraceDirection, + context: String, + frame: Iap2Frame, + ): String { + val endpoint = Iap2Endpoints.byId(frame.messageId) + val encoded = frame.encodedFrame() + val parameters = try { + Iap2ParameterList.parse(frame.payload) + } catch (_: Iap2ProtocolException) { + null + } + val lines = ArrayList() + if (parameters == null) { + lines += " body=malformed TLV" + } else { + appendParameters( + parameters = parameters, + specs = endpoint?.fields.orEmpty(), + depth = 1, + lines = lines, + ) + } + lines += " raw-body=${hexPreview(frame.payload)}" + + val endpointText = endpoint?.let { " ${it.name}" }.orEmpty() + return buildString { + append("IAP2 ") + append(direction.label) + append(" [") + append(context) + append("] 0x") + append(frame.messageId.toString(16).padStart(4, '0')) + append(endpointText) + append(" frame=") + append(encoded.size) + append("B body=") + append(if (parameters == null) "malformed" else "${parameters.size} params") + lines.forEach { line -> + append('\n') + append(line) + } + } + } + + fun formatFailure( + direction: Iap2TraceDirection, + context: String, + messageId: Int?, + failure: Throwable, + ): String = buildString { + append("IAP2 ") + append(direction.label) + append(" [") + append(context) + append(']') + messageId?.let { + append(" 0x") + append(it.toString(16).padStart(4, '0')) + append(Iap2Endpoints.byId(it)?.let { endpoint -> " ${endpoint.name}" }.orEmpty()) + } + append(" FAILED: ") + append(failure.message ?: failure.javaClass.simpleName) + } + + private fun appendParameters( + parameters: Iap2ParameterList, + specs: List, + depth: Int, + lines: MutableList, + ) { + val fields = specs.associateBy(Iap2FieldSpec::id) + parameters.asList().take(MAX_PARAMETERS).forEach { parameter -> + val field = fields[parameter.id] + val name = field?.name ?: "param" + val value = if (field == null) { + formatOpaque(parameter.payload) + } else { + formatKnown(parameter.payload, field, depth) + } + lines += "${indent(depth)}[${parameter.id}] $name: $value" + } + if (parameters.size > MAX_PARAMETERS) { + lines += "${indent(depth)}... ${parameters.size - MAX_PARAMETERS} more parameters" + } + } + + private fun formatKnown( + payload: ByteArray, + spec: Iap2FieldSpec, + depth: Int, + ): String = try { + when (spec.type) { + Iap2WireType.VOID -> if (payload.isEmpty()) "void" else "void? ${hexPreview(payload)}" + Iap2WireType.U8 -> scalar("u8", payload, 1, Iap2WireCodec.readU8(payload)) + Iap2WireType.I8 -> scalar("i8", payload, 1, Iap2WireCodec.readI8(payload)) + Iap2WireType.U16 -> scalar("u16", payload, 2, Iap2WireCodec.readU16(payload)) + Iap2WireType.I16 -> scalar("i16", payload, 2, Iap2WireCodec.readI16(payload)) + Iap2WireType.U32 -> scalar("u32", payload, 4, Iap2WireCodec.readU32(payload)) + Iap2WireType.I32 -> scalar("i32", payload, 4, Iap2WireCodec.readI32(payload)) + Iap2WireType.U64 -> scalar("u64", payload, 8, Iap2WireCodec.readU64(payload)) + Iap2WireType.U16_LIST -> Iap2WireCodec.readU16List(payload) + .joinToString(prefix = "[", postfix = "]") { "0x${it.toString(16).padStart(4, '0')}" } + Iap2WireType.BYTES -> bytes(payload) + Iap2WireType.STRING -> quote(truncate(Iap2WireCodec.readString(payload))) + Iap2WireType.STRING_LIST -> Iap2WireCodec.readStrings(payload) + .joinToString(prefix = "[", postfix = "]") { quote(truncate(it)) } + Iap2WireType.GROUP -> { + val nested = Iap2ParameterList.parse(payload) + val nestedLines = ArrayList() + appendParameters(nested, spec.children, depth + 1, nestedLines) + if (nestedLines.isEmpty()) "{}" else nestedLines.joinToString("\n", prefix = "{\n", postfix = "\n${indent(depth)}}") + } + Iap2WireType.OPAQUE -> formatOpaque(payload) + } + } catch (_: Exception) { + formatOpaque(payload) + } + + private fun formatOpaque(payload: ByteArray): String { + if (payload.isEmpty()) return "void" + readableString(payload)?.let { return quote(truncate(it)) } + return when (payload.size) { + 1 -> "u8=${u8(payload[0])} (0x${hexPreview(payload)})" + 2 -> "u16=${Iap2WireCodec.readU16(payload)} (0x${hexPreview(payload)})" + 4 -> "u32=${Iap2WireCodec.readU32(payload)} (0x${hexPreview(payload)})" + 8 -> "u64=${Iap2WireCodec.readU64(payload)} (0x${hexPreview(payload)})" + else -> bytes(payload) + } + } + + private fun scalar( + name: String, + payload: ByteArray, + size: Int, + value: Number, + ): String { + require(payload.size == size) { "expected $size bytes" } + return "$name=$value (0x${hexPreview(payload)})" + } + + private fun bytes(payload: ByteArray): String = + "bytes=${payload.size} [${hexPreview(payload)}]" + + private fun readableString(payload: ByteArray): String? { + if (payload.isEmpty() || payload.last() != 0.toByte()) return null + val content = payload.copyOf(payload.size - 1) + if (content.any { byte -> + val value = byte.toInt() and 0xff + value < 0x20 && value != 0x09 + } + ) { + return null + } + val decoded = content.decodeToString() + if (decoded.contains('\uFFFD')) return null + return decoded + } + + private fun quote(value: String): String = + "\"" + value + .replace("\\", "\\\\") + .replace("\"", "\\\"") + .replace("\r", "\\r") + .replace("\n", "\\n") + .replace("\t", "\\t") + "\"" + + private fun truncate(value: String): String = + if (value.length <= MAX_STRING_CHARS) value + else value.take(MAX_STRING_CHARS) + "..." + + private fun hexPreview(payload: ByteArray): String { + if (payload.isEmpty()) return "" + val shown = payload.take(MAX_HEX_BYTES).joinToString(" ") { + "%02x".format(it.toInt() and 0xff) + } + return if (payload.size <= MAX_HEX_BYTES) shown else "$shown ... (+${payload.size - MAX_HEX_BYTES}B)" + } + + private fun u8(value: Byte): Int = value.toInt() and 0xff + + private fun indent(depth: Int): String = " ".repeat(depth) +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/iap2/wire/Iap2CsmFramer.kt b/shared/src/main/java/com/shilapi/xcertplay/iap2/wire/Iap2CsmFramer.kt new file mode 100644 index 0000000..a8f1c3c --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/iap2/wire/Iap2CsmFramer.kt @@ -0,0 +1,174 @@ +package com.shilapi.xcertplay.iap2.wire + +/** + * Pure CSM framing for iAP2 control-session bytes. + * + * CSM is `0x4040 | u16 length | u16 messageId | body`, big-endian and without a checksum. + * The retained receive data is bounded to one largest-valid frame. This class deliberately has no + * threading, I/O, link-engine, or message-specific knowledge. + */ +class Iap2CsmFramer { + private val receive = ReceiveBuffer(MAX_FRAME_BYTES) + + /** + * Adds control-session bytes and returns every newly complete CSM frame. + * + * It tolerates arbitrary transport chunking, concatenated frames, garbage before `0x4040`, and + * invalid lengths below [HEADER_BYTES] by advancing one byte and searching again. + */ + fun offer(chunk: ByteArray): List { + if (chunk.isEmpty()) return emptyList() + + val frames = ArrayList() + var offset = 0 + while (offset < chunk.size) { + drain(frames) + val count = minOf(chunk.size - offset, receive.remainingCapacity()) + check(count > 0) { "CSM receive buffer could not make progress" } + receive.append(chunk, offset, count) + offset += count + } + drain(frames) + return frames + } + + private fun drain(frames: MutableList) { + while (true) { + while (receive.size >= 2 && !receive.hasStart()) receive.discard(1) + if (receive.size < HEADER_BYTES) return + + val length = receive.u16(2) + if (length < HEADER_BYTES) { + receive.discard(1) + continue + } + if (receive.size < length) return + + val messageId = receive.u16(4) + val payload = receive.copyOfRange(HEADER_BYTES, length) + receive.discard(length) + frames += Iap2Frame(messageId, payload) + } + } + + private class ReceiveBuffer(private val maximumSize: Int) { + private val bytes = ByteArray(maximumSize) + private var head = 0 + private var tail = 0 + + val size: Int get() = tail - head + + fun remainingCapacity(): Int { + compact() + return maximumSize - tail + } + + fun append(source: ByteArray, offset: Int, count: Int) { + require(count in 0..remainingCapacity()) + source.copyInto(bytes, tail, offset, offset + count) + tail += count + } + + fun discard(count: Int) { + require(count in 0..size) + head += count + if (head == tail) { + head = 0 + tail = 0 + } + } + + fun hasStart(): Boolean = bytes[head] == START_HIGH && bytes[head + 1] == START_LOW + + fun u16(offset: Int): Int = + ((bytes[head + offset].toInt() and 0xff) shl 8) or + (bytes[head + offset + 1].toInt() and 0xff) + + fun copyOfRange(from: Int, to: Int): ByteArray = bytes.copyOfRange(head + from, head + to) + + private fun compact() { + if (head == 0) return + if (head < tail) bytes.copyInto(bytes, 0, head, tail) + tail -= head + head = 0 + } + } + + companion object { + const val START = 0x4040 + const val HEADER_BYTES = 6 + const val MIN_FRAME_BYTES = HEADER_BYTES + const val MAX_FRAME_BYTES = 0xffff + const val MAX_BODY_BYTES = MAX_FRAME_BYTES - HEADER_BYTES + const val MAX_PARAM_BYTES = 0xffff + const val MAX_LINK_CHUNK_BYTES = 65_525 + + private const val START_HIGH: Byte = 0x40 + private const val START_LOW: Byte = 0x40 + + /** Encodes one complete CSM frame from a message id and its header-excluded body. */ + fun encodeFrame(messageId: Int, payload: ByteArray): ByteArray { + require(messageId in 0..0xffff) { "CSM message id must fit in u16" } + require(payload.size <= MAX_BODY_BYTES) { + "CSM payload exceeds $MAX_BODY_BYTES bytes" + } + val frame = ByteArray(HEADER_BYTES + payload.size) + writeU16(frame, 0, START) + writeU16(frame, 2, frame.size) + writeU16(frame, 4, messageId) + payload.copyInto(frame, HEADER_BYTES) + return frame + } + + /** Encodes one CSM parameter: `u16 length | u16 parameterId | payload`. */ + fun encodeParam(parameterId: Int, payload: ByteArray): ByteArray { + require(parameterId in 0..0xffff) { "CSM parameter id must fit in u16" } + require(payload.size <= MAX_PARAM_BYTES - Iap2Parameter.HEADER_BYTES) { + "CSM parameter payload exceeds ${MAX_PARAM_BYTES - Iap2Parameter.HEADER_BYTES} bytes" + } + val parameter = ByteArray(Iap2Parameter.HEADER_BYTES + payload.size) + writeU16(parameter, 0, parameter.size) + writeU16(parameter, 2, parameterId) + payload.copyInto(parameter, Iap2Parameter.HEADER_BYTES) + return parameter + } + + /** Splits a semantic frame into link payloads no larger than [linkChunkSize]. */ + fun splitForLink(frame: Iap2Frame, linkChunkSize: Int): List = + splitForLink(frame.encodedFrame(), linkChunkSize) + + /** + * Splits exactly one complete CSM frame into link payloads no larger than [linkChunkSize]. + * The complete frame is validated before any defensive-copy chunks are returned. + */ + fun splitForLink(completeFrame: ByteArray, linkChunkSize: Int): List { + require(linkChunkSize in 1..MAX_LINK_CHUNK_BYTES) { + "iAP2 link chunk size must be in 1..$MAX_LINK_CHUNK_BYTES" + } + requireCompleteFrame(completeFrame) + return List((completeFrame.size + linkChunkSize - 1) / linkChunkSize) { index -> + val start = index * linkChunkSize + completeFrame.copyOfRange(start, minOf(start + linkChunkSize, completeFrame.size)) + } + } + + private fun requireCompleteFrame(frame: ByteArray) { + require(frame.size in MIN_FRAME_BYTES..MAX_FRAME_BYTES) { + "CSM frame size must be 6..65535" + } + require(readU16(frame, 0) == START) { "CSM frame must start with 0x4040" } + require(readU16(frame, 2) == frame.size) { + "CSM frame length must equal its complete size" + } + } + + private fun readU16(bytes: ByteArray, offset: Int): Int = + ((bytes[offset].toInt() and 0xff) shl 8) or + (bytes[offset + 1].toInt() and 0xff) + + private fun writeU16(bytes: ByteArray, offset: Int, value: Int) { + bytes[offset] = (value ushr 8).toByte() + bytes[offset + 1] = value.toByte() + } + } +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/iap2/wire/Iap2Wire.kt b/shared/src/main/java/com/shilapi/xcertplay/iap2/wire/Iap2Wire.kt new file mode 100644 index 0000000..e4d6085 --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/iap2/wire/Iap2Wire.kt @@ -0,0 +1,151 @@ +package com.shilapi.xcertplay.iap2.wire + +import java.io.ByteArrayOutputStream +import java.io.IOException + +/** An iAP2 CSM body parameter: `u16 length | u16 parameterId | payload`. */ +class Iap2Parameter(id: Int, payload: ByteArray) { + val id: Int + private val bytes: ByteArray + + init { + require(id in 0..0xffff) { "CSM parameter id must fit in u16" } + require(payload.size <= Iap2CsmFramer.MAX_PARAM_BYTES - HEADER_BYTES) { + "CSM parameter payload exceeds ${Iap2CsmFramer.MAX_PARAM_BYTES - HEADER_BYTES} bytes" + } + this.id = id + bytes = payload.copyOf() + } + + /** A defensive copy of the parameter payload, excluding its header. */ + val payload: ByteArray get() = bytes.copyOf() + + internal fun payloadView(): ByteArray = bytes + + override fun equals(other: Any?): Boolean = + other is Iap2Parameter && id == other.id && bytes.contentEquals(other.bytes) + + override fun hashCode(): Int = 31 * id + bytes.contentHashCode() + + override fun toString(): String = + "Iap2Parameter(id=0x${id.toString(16).padStart(4, '0')}, payload=${bytes.size} bytes)" + + companion object { + const val HEADER_BYTES = 4 + } +} + +/** + * An ordered CSM parameter collection. + * + * A list is intentional: CSM permits repeated parameter IDs and preserves wire order. Callers + * should use [first] or [all] rather than converting the body to a map. + */ +class Iap2ParameterList private constructor( + private val parameters: List, +) { + val size: Int get() = parameters.size + + fun isEmpty(): Boolean = parameters.isEmpty() + + fun asList(): List = parameters.toList() + + operator fun get(index: Int): Iap2Parameter = parameters[index] + + fun has(id: Int): Boolean = parameters.any { it.id == id } + + fun first(id: Int): Iap2Parameter? = parameters.firstOrNull { it.id == id } + + fun require(id: Int, description: String = "parameter 0x${id.toString(16).padStart(4, '0')}"): Iap2Parameter = + first(id) ?: throw Iap2ProtocolException("Missing required $description") + + fun all(id: Int): List = parameters.filter { it.id == id } + + fun encode(): ByteArray { + val encoded = ByteArrayOutputStream() + for (parameter in parameters) { + val next = Iap2CsmFramer.encodeParam(parameter.id, parameter.payloadView()) + require(next.size <= MAX_BODY_BYTES - encoded.size()) { + "Encoded CSM parameters exceed the $MAX_BODY_BYTES-byte message body limit" + } + encoded.write(next) + } + return encoded.toByteArray() + } + + override fun equals(other: Any?): Boolean = + other is Iap2ParameterList && parameters == other.parameters + + override fun hashCode(): Int = parameters.hashCode() + + companion object { + private const val MAX_BODY_BYTES = + Iap2CsmFramer.MAX_FRAME_BYTES - Iap2CsmFramer.HEADER_BYTES + + val EMPTY: Iap2ParameterList = Iap2ParameterList(emptyList()) + + fun of(parameters: Iterable): Iap2ParameterList = + Iap2ParameterList(parameters.toList()) + + fun of(vararg parameters: Iap2Parameter): Iap2ParameterList = + of(parameters.asList()) + + /** Parses a complete body and rejects truncated headers, invalid lengths, and trailing bytes. */ + fun parse(encoded: ByteArray): Iap2ParameterList { + val parameters = ArrayList() + var offset = 0 + while (offset < encoded.size) { + if (encoded.size - offset < Iap2Parameter.HEADER_BYTES) { + throw Iap2ProtocolException("Truncated CSM parameter header") + } + val length = Iap2WireCodec.readU16(encoded, offset) + if (length < Iap2Parameter.HEADER_BYTES || length > encoded.size - offset) { + throw Iap2ProtocolException("Invalid CSM parameter length $length") + } + parameters += Iap2Parameter( + id = Iap2WireCodec.readU16(encoded, offset + 2), + payload = encoded.copyOfRange( + offset + Iap2Parameter.HEADER_BYTES, + offset + length, + ), + ) + offset += length + } + return Iap2ParameterList(parameters) + } + } +} + +/** One decoded iAP2 Control Session Message (CSM). */ +class Iap2Frame(messageId: Int, payload: ByteArray) { + val messageId: Int + private val body: ByteArray + + init { + require(messageId in 0..0xffff) { "CSM message id must fit in u16" } + require(payload.size <= Iap2CsmFramer.MAX_BODY_BYTES) { + "CSM payload exceeds ${Iap2CsmFramer.MAX_BODY_BYTES} bytes" + } + this.messageId = messageId + body = payload.copyOf() + } + + /** A defensive copy of the body, excluding the CSM header. */ + val payload: ByteArray get() = body.copyOf() + + fun body(): Iap2ParameterList = Iap2ParameterList.parse(body) + + /** A defensive copy of this frame's complete six-byte-header CSM encoding. */ + fun encodedFrame(): ByteArray = Iap2CsmFramer.encodeFrame(messageId, body) + + override fun equals(other: Any?): Boolean = + other is Iap2Frame && messageId == other.messageId && body.contentEquals(other.body) + + override fun hashCode(): Int = 31 * messageId + body.contentHashCode() + + override fun toString(): String = + "Iap2Frame(messageId=0x${messageId.toString(16).padStart(4, '0')}, payload=${body.size} bytes)" +} + +/** A malformed, incomplete, or otherwise invalid iAP2 CSM value. */ +open class Iap2ProtocolException(message: String, cause: Throwable? = null) : IOException(message, cause) diff --git a/shared/src/main/java/com/shilapi/xcertplay/iap2/wire/Iap2WireCodec.kt b/shared/src/main/java/com/shilapi/xcertplay/iap2/wire/Iap2WireCodec.kt new file mode 100644 index 0000000..f3e01ad --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/iap2/wire/Iap2WireCodec.kt @@ -0,0 +1,154 @@ +package com.shilapi.xcertplay.iap2.wire + +import java.io.ByteArrayOutputStream + +/** + * Big-endian scalar and string codecs shared by every iAP2 endpoint body. + * + * The codec intentionally contains no endpoint IDs or business defaults. Optional values are + * represented by nullable arguments at the builder layer, so an omitted value never becomes a + * zero-filled wire parameter. + */ +object Iap2WireCodec { + fun void(): ByteArray = ByteArray(0) + + fun u8(value: Int): ByteArray { + require(value in 0..0xff) { "u8 value must be in 0..255" } + return byteArrayOf(value.toByte()) + } + + fun i8(value: Int): ByteArray { + require(value in -0x80..0x7f) { "i8 value must be in -128..127" } + return byteArrayOf(value.toByte()) + } + + fun bool(value: Boolean): ByteArray = u8(if (value) 1 else 0) + + fun u16(value: Int): ByteArray { + require(value in 0..0xffff) { "u16 value must be in 0..65535" } + return byteArrayOf((value ushr 8).toByte(), value.toByte()) + } + + fun i16(value: Int): ByteArray { + require(value in -0x8000..0x7fff) { "i16 value must be in -32768..32767" } + return u16(value and 0xffff) + } + + fun u32(value: Long): ByteArray { + require(value in 0..0xffff_ffffL) { "u32 value must be in 0..4294967295" } + return byteArrayOf( + (value ushr 24).toByte(), + (value ushr 16).toByte(), + (value ushr 8).toByte(), + value.toByte(), + ) + } + + fun u32(value: Int): ByteArray = u32(value.toLong()) + + fun i32(value: Int): ByteArray = u32(value.toLong() and 0xffff_ffffL) + + fun u64(value: Long): ByteArray { + require(value >= 0) { "u64 value must be non-negative in this API" } + return byteArrayOf( + (value ushr 56).toByte(), + (value ushr 48).toByte(), + (value ushr 40).toByte(), + (value ushr 32).toByte(), + (value ushr 24).toByte(), + (value ushr 16).toByte(), + (value ushr 8).toByte(), + value.toByte(), + ) + } + + fun bytes(value: ByteArray): ByteArray = value.copyOf() + + fun string(value: String): ByteArray { + require('\u0000' !in value) { "NUL-terminated strings must not contain U+0000" } + return value.encodeToByteArray() + byteArrayOf(0) + } + + fun strings(values: Iterable): ByteArray { + val output = ByteArrayOutputStream() + for (value in values) output.write(string(value)) + return output.toByteArray() + } + + fun u16List(values: Iterable): ByteArray { + val materialized = values.toList() + val output = ByteArray(materialized.size * 2) + materialized.forEachIndexed { index, value -> + require(value in 0..0xffff) { "u16[] value must be in 0..65535" } + output[index * 2] = (value ushr 8).toByte() + output[index * 2 + 1] = value.toByte() + } + return output + } + + fun readU8(bytes: ByteArray, offset: Int = 0): Int = u8(bytes[offset]) + + fun readI8(bytes: ByteArray, offset: Int = 0): Int = bytes[offset].toInt() + + fun readBool(bytes: ByteArray, offset: Int = 0, nonzeroIsTrue: Boolean = true): Boolean { + val value = readU8(bytes, offset) + return if (nonzeroIsTrue) value != 0 else value == 1 + } + + fun readU16(bytes: ByteArray, offset: Int = 0): Int = + (u8(bytes[offset]) shl 8) or u8(bytes[offset + 1]) + + fun readI16(bytes: ByteArray, offset: Int = 0): Int { + val value = readU16(bytes, offset) + return if (value and 0x8000 != 0) value or -0x1_0000 else value + } + + fun readU32(bytes: ByteArray, offset: Int = 0): Long = + (u8(bytes[offset]).toLong() shl 24) or + (u8(bytes[offset + 1]).toLong() shl 16) or + (u8(bytes[offset + 2]).toLong() shl 8) or + u8(bytes[offset + 3]).toLong() + + fun readI32(bytes: ByteArray, offset: Int = 0): Int = readU32(bytes, offset).toInt() + + fun readU64(bytes: ByteArray, offset: Int = 0): Long { + var value = 0L + repeat(8) { index -> + value = (value shl 8) or u8(bytes[offset + index]).toLong() + } + return value + } + + fun readBytes(payload: ByteArray): ByteArray = payload.copyOf() + + fun readString(payload: ByteArray): String { + if (payload.isEmpty() || payload.last() != 0.toByte()) { + throw Iap2ProtocolException("CSM string is not NUL terminated") + } + return payload.copyOf(payload.size - 1).decodeToString() + } + + fun readStrings(payload: ByteArray): List { + if (payload.isEmpty()) return emptyList() + if (payload.last() != 0.toByte()) { + throw Iap2ProtocolException("CSM string[] is not NUL terminated") + } + val values = ArrayList() + var start = 0 + for (index in payload.indices) { + if (payload[index] != 0.toByte()) continue + values += payload.copyOfRange(start, index).decodeToString() + start = index + 1 + } + return values + } + + fun readU16List(payload: ByteArray): List { + if (payload.size % 2 != 0) { + throw Iap2ProtocolException("CSM u16[] payload has odd length ${payload.size}") + } + return List(payload.size / 2) { index -> readU16(payload, index * 2) } + } + + private fun u8(byte: Byte): Int = byte.toInt() and 0xff +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/location/AndroidCarPlayLocationProvider.kt b/shared/src/main/java/com/shilapi/xcertplay/location/AndroidCarPlayLocationProvider.kt new file mode 100644 index 0000000..fa81a78 --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/location/AndroidCarPlayLocationProvider.kt @@ -0,0 +1,146 @@ +package com.shilapi.xcertplay.location + +import android.annotation.SuppressLint +import android.content.Context +import android.location.Location +import android.location.LocationListener +import android.location.LocationManager +import android.os.Build +import android.os.Bundle +import android.os.Looper +import android.util.Log +import com.shilapi.xcertplay.transport.CarPlayLocationFix +import com.shilapi.xcertplay.transport.Iap2LocationProvider +import com.shilapi.xcertplay.transport.NmeaLocationEncoder +import java.util.concurrent.ConcurrentHashMap + +/** + * Foreground Android location source for iAP2 LocationInformation. + * + * The freshest usable fix from GPS, fused, or network location is sent. + */ +class AndroidCarPlayLocationProvider( + context: Context, + private val preferredLocationAgeMillis: Long = DEFAULT_PREFERRED_LOCATION_AGE_MILLIS, +) : Iap2LocationProvider { + private val locationManager = + context.applicationContext.getSystemService(LocationManager::class.java) + private val stateLock = Any() + private val preferredProviders = buildList { + add(LocationManager.GPS_PROVIDER) + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { + add(LocationManager.FUSED_PROVIDER) + } + add(LocationManager.NETWORK_PROVIDER) + }.filter { it in locationManager.allProviders } + private val latestFixes = ConcurrentHashMap() + private val listener = object : LocationListener { + override fun onLocationChanged(location: Location) { + val provider = location.provider ?: return + if (provider in preferredProviders) { + latestFixes[provider] = location + } + } + + override fun onProviderEnabled(provider: String) = Unit + override fun onProviderDisabled(provider: String) = Unit + override fun onStatusChanged(provider: String, status: Int, extras: Bundle?) = Unit + } + + private var started = false + + @SuppressLint("MissingPermission") + override fun start(): Boolean = synchronized(stateLock) { + if (started) { + true + } else { + seedLastKnownLocations() + var subscribedProviders = 0 + for (provider in preferredProviders) { + try { + locationManager.requestLocationUpdates( + provider, + UPDATE_INTERVAL_MILLIS, + MIN_DISTANCE_METERS, + listener, + Looper.getMainLooper(), + ) + subscribedProviders++ + } catch (error: Exception) { + Log.w(TAG, "Could not subscribe to Android location provider $provider", error) + } + } + started = subscribedProviders > 0 + if (!started) { + Log.w(TAG, "No Android location provider could be started") + } + started + } + } + + @SuppressLint("MissingPermission") + private fun seedLastKnownLocations() { + for (provider in preferredProviders) { + val location = try { + locationManager.getLastKnownLocation(provider) + } catch (error: Exception) { + Log.w(TAG, "Could not read last known location from $provider", error) + null + } ?: continue + latestFixes[provider] = location + Log.i( + TAG, + "Seeded $provider location ageMs=${(System.currentTimeMillis() - location.time).coerceAtLeast(0)}", + ) + } + } + + override fun stop() { + val shouldUnregister = synchronized(stateLock) { + val wasStarted = started + started = false + wasStarted + } + if (!shouldUnregister) return + try { + locationManager.removeUpdates(listener) + } catch (_: Exception) { + // Already unregistered. + } + } + + override fun latestNmea(): String? { + val fix = latestFix() ?: return null + return try { + NmeaLocationEncoder.encode( + CarPlayLocationFix( + latitudeDegrees = fix.latitude, + longitudeDegrees = fix.longitude, + altitudeMeters = fix.altitude.takeIf { fix.hasAltitude() }?.toDouble(), + bearingDegrees = fix.bearing.takeIf { fix.hasBearing() }?.toDouble(), + speedMetersPerSecond = fix.speed.takeIf { fix.hasSpeed() }?.toDouble(), + accuracyMeters = fix.accuracy.takeIf { fix.hasAccuracy() }?.toDouble(), + timestampMillis = fix.time, + ), + ) + } catch (error: Throwable) { + Log.w(TAG, "Could not encode Android location as NMEA", error) + null + } + } + + private fun latestFix(): Location? { + val now = System.currentTimeMillis() + return preferredProviders.asSequence() + .mapNotNull(latestFixes::get) + .filter { now - it.time <= preferredLocationAgeMillis } + .maxByOrNull { it.time } + } + + companion object { + private const val TAG = "CarPlayLocation" + private const val UPDATE_INTERVAL_MILLIS = 1_000L + private const val MIN_DISTANCE_METERS = 0f + private const val DEFAULT_PREFERRED_LOCATION_AGE_MILLIS = 30_000L + } +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/media/AndroidMediaSink.kt b/shared/src/main/java/com/shilapi/xcertplay/media/AndroidMediaSink.kt new file mode 100644 index 0000000..ef3864d --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/media/AndroidMediaSink.kt @@ -0,0 +1,913 @@ +package com.shilapi.xcertplay.media + +import android.media.AudioAttributes +import android.media.AudioFormat as AndroidAudioFormat +import android.media.AudioTrack +import android.media.MediaCodec +import android.media.MediaCodecList +import android.media.MediaFormat +import android.os.Build +import android.util.Log +import android.view.Surface +import com.shilapi.xcertplay.airplay.AudioCodecKind +import com.shilapi.xcertplay.airplay.AudioFormat +import com.shilapi.xcertplay.airplay.MediaSink +import com.shilapi.xcertplay.airplay.MicrophoneConfig +import com.shilapi.xcertplay.airplay.VideoCodec +import com.shilapi.xcertplay.airplay.toHexString +import java.io.Closeable +import java.nio.ByteBuffer +import java.util.concurrent.ConcurrentHashMap +import java.util.concurrent.LinkedBlockingQueue +import java.util.concurrent.Executors +import java.util.concurrent.atomic.AtomicBoolean + +/** + * Android rendering backend for the CarPlay media engine. Video frames are + * decoded with MediaCodec onto a Surface; audio streams are decoded to PCM and + * played through AudioTrack. Call [close] when the session tears down. + */ +class AndroidMediaSink( + surface: Surface? = null, + private val videoWidth: Int = 1280, + private val videoHeight: Int = 720, + private val preferSoftwareHevcDecoder: Boolean = false, + private val advancedAudioChannelMapping: Boolean = false, + onScreenStreamActiveChanged: ((Int, Boolean) -> Unit)? = null, +) : MediaSink { + private val screenStateLock = Any() + private val activeScreenTypes = mutableSetOf() + private val defaultSurface = surface + @Volatile private var screenStreamActiveChanged = onScreenStreamActiveChanged + private val surfaces = ConcurrentHashMap() + private val videoDecoders = ConcurrentHashMap() + private val audioRenderers = ConcurrentHashMap() + private val microphoneUplinks = ConcurrentHashMap() + private val pendingVideoCodec = ConcurrentHashMap() + private val videoRecoveryHandlers = ConcurrentHashMap Unit>() + private val videoDiagnosticHandlers = ConcurrentHashMap Unit>() + private val recoveryPending = AtomicBoolean(false) + private val recoveryExecutor = Executors.newSingleThreadExecutor { task -> + Thread(task, "carplay-video-recovery").apply { isDaemon = true } + } + + override fun setVideoRecoveryHandler(type: Int, handler: () -> Unit) { + videoRecoveryHandlers[type] = handler + } + + override fun setVideoDiagnosticHandler(type: Int, handler: (String) -> Unit) { + videoDiagnosticHandlers[type] = handler + } + + private fun requestVideoRecovery(type: Int) { + if (!recoveryPending.compareAndSet(false, true)) return + try { + recoveryExecutor.execute { + try { videoRecoveryHandlers[type]?.invoke() } + catch (error: Exception) { Log.w("xcertplay-usb", "Video keyframe request failed", error) } + finally { recoveryPending.set(false) } + } + } catch (_: java.util.concurrent.RejectedExecutionException) { recoveryPending.set(false) } + } + + fun setSurface(type: Int, surface: Surface) { + surfaces[type] = surface + videoDecoders[type]?.setSurface(surface) + } + + fun clearSurface(type: Int, surface: Surface) { + if (surfaces.remove(type, surface)) videoDecoders[type]?.setSurface(null) + } + + fun setScreenStreamActiveChangedListener(listener: ((Int, Boolean) -> Unit)?) { + synchronized(screenStateLock) { + screenStreamActiveChanged = listener + activeScreenTypes.forEach { listener?.invoke(it, true) } + } + } + + override fun onVideoCodec(type: Int, codec: VideoCodec) { + pendingVideoCodec[type] = codec + } + + override fun onVideoConfig(type: Int, codecData: ByteArray) { + val codec = pendingVideoCodec[type] ?: VideoCodec.H264 + videoDecoder(type).configure(codec, codecData) + } + + override fun onVideoFrame(type: Int, naluBytes: ByteArray) { + videoDecoder(type).submit(naluBytes) + } + + override fun onScreenStreamActive(type: Int, active: Boolean) { + if (!active) { + videoRecoveryHandlers.remove(type) + videoDiagnosticHandlers.remove(type) + videoDecoders.remove(type)?.close() + pendingVideoCodec.remove(type) + } + synchronized(screenStateLock) { + if (active) activeScreenTypes.add(type) else activeScreenTypes.remove(type) + screenStreamActiveChanged?.invoke(type, active) + } + } + + override fun onAudioStarted(type: Int, format: AudioFormat, firstSample: Int) { + audioRenderer(type, format).start() + } + + override fun onAudioRtp(type: Int, format: AudioFormat, rtp: ByteArray, sample: Int) { + audioRenderer(type, format).submit(rtp, sample) + } + + override fun onAudioStopped(type: Int) { + audioRenderers.remove(type)?.close() + } + + override fun onMicrophoneStarted(type: Int, config: MicrophoneConfig) { + val uplink = microphoneUplinks.computeIfAbsent(type) { MicrophoneUplink(config) } + if (!uplink.start()) microphoneUplinks.remove(type, uplink) + } + + override fun onMicrophoneStopped(type: Int) { + microphoneUplinks.remove(type)?.close() + } + + fun close() { + synchronized(screenStateLock) { + activeScreenTypes.forEach { screenStreamActiveChanged?.invoke(it, false) } + activeScreenTypes.clear() + screenStreamActiveChanged = null + } + videoDecoders.values.forEach(VideoDecoder::close) + videoDecoders.clear() + videoRecoveryHandlers.clear() + videoDiagnosticHandlers.clear() + recoveryExecutor.shutdownNow() + audioRenderers.values.forEach(AudioRenderer::close) + audioRenderers.clear() + microphoneUplinks.values.forEach(MicrophoneUplink::close) + microphoneUplinks.clear() + } + + private fun videoDecoder(type: Int): VideoDecoder = + videoDecoders.computeIfAbsent(type) { + VideoDecoder( + surfaces[type] ?: defaultSurface, + videoWidth, + videoHeight, + preferSoftwareHevcDecoder, + requestKeyFrame = { requestVideoRecovery(type) }, + report = { videoDiagnosticHandlers[type]?.invoke(it) }, + ) + } + + @Synchronized + private fun audioRenderer(type: Int, format: AudioFormat): AudioRenderer { + val existing = audioRenderers[type] + if (existing?.format == format) return existing + existing?.close() + return AudioRenderer(format, advancedAudioChannelMapping).also { audioRenderers[type] = it } + } +} + +/** Serial MediaCodec video decoder: one worker owns configure and frame feeding. */ +private class VideoDecoder( + surface: Surface?, + private val width: Int, + private val height: Int, + private val preferSoftwareHevcDecoder: Boolean, + private val requestKeyFrame: () -> Unit, + private val report: (String) -> Unit, +) : Closeable { + private val queue = VideoDecodeQueue() + @Volatile private var running = true + @Volatile private var decoder: MediaCodec? = null + private var outputSurface: Surface? = surface + private var lastConfig: VideoJob.Config? = null + private var renderedFrameLogged = false + private var submittedFrameLogged = false + private var duplicateConfigLogged = false + private val referenceChain = VideoReferenceChain() + private var lastKeyFrameRequestNs = 0L + private val thread = Thread(::run, "carplay-video").apply { isDaemon = true; start() } + + fun configure(codec: VideoCodec, codecData: ByteArray) { + queue.offer(VideoJob.Config(codec, codecData)) + } + + fun submit(nalus: ByteArray) { + queue.offer(VideoJob.Frame(nalus)) + } + + fun setSurface(surface: Surface?) { + queue.offer(VideoJob.SurfaceChanged(surface)) + } + + override fun close() { + running = false + thread.interrupt() + } + + private fun run() { + try { + while (running) { + val job = queue.poll(5) + try { + when (job) { + is VideoJob.Config -> configureDecoder(job) + is VideoJob.Frame -> { + if (System.nanoTime() - job.receivedNs > MAX_FRAME_AGE_NS) { + queue.discardFrames() + recover("video backlog exceeded 250 ms") + } else feed(job.nalus) + } + is VideoJob.SurfaceChanged -> changeSurface(job.surface) + is VideoJob.Resync -> recover("video queue overflow") + null -> Unit + } + decoder?.let(::drainOutput) + if (referenceChain.needsKeyFrame && lastConfig != null && outputSurface != null) requestKeyFrameIfDue() + } catch (error: Exception) { + if (running) Log.e(TAG, "video decoder job failed: ${job?.javaClass?.simpleName}", error) + if (running) report("decoder error ${error.javaClass.simpleName}; waiting for keyframe") + releaseDecoder() + referenceChain.reset() + requestKeyFrameIfDue() + } + } + } catch (_: InterruptedException) { + // Worker shut down. + } finally { + releaseDecoder() + } + } + + private fun configureDecoder(config: VideoJob.Config) { + val previous = lastConfig + if ( + decoder != null && + previous?.codec == config.codec && + previous.codecData.contentEquals(config.codecData) + ) { + if (!duplicateConfigLogged) { + duplicateConfigLogged = true + Log.i(TAG, "video decoder config unchanged; keeping existing decoder") + } + return + } + lastConfig = config + duplicateConfigLogged = false + releaseDecoder() + referenceChain.reset() + val surface = outputSurface ?: return + val codec = config.codec + val codecData = config.codecData + val mime = if (codec == VideoCodec.H265) MediaFormat.MIMETYPE_VIDEO_HEVC + else MediaFormat.MIMETYPE_VIDEO_AVC + val format = MediaFormat.createVideoFormat(mime, width, height).apply { + setInteger(MediaFormat.KEY_MAX_INPUT_SIZE, MAX_INPUT_SIZE) + setInteger(MediaFormat.KEY_PRIORITY, 0) + } + if (codec == VideoCodec.H265) { + val csd = MediaCodecSupport.hevcCodecSpecificData(codecData) + if (csd.isNotEmpty()) format.setByteBuffer("csd-0", ByteBuffer.wrap(csd)) + } else { + val (sps, pps) = MediaCodecSupport.avcParameterSets(codecData) + if (sps.isNotEmpty()) format.setByteBuffer("csd-0", ByteBuffer.wrap(START_CODE + sps)) + if (pps.isNotEmpty()) format.setByteBuffer("csd-1", ByteBuffer.wrap(START_CODE + pps)) + } + var candidate: MediaCodec? = null + val next = try { + createDecoder(mime).also { + candidate = it + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R && + it.codecInfo.getCapabilitiesForType(mime).isFeatureSupported("low-latency")) { + format.setInteger(MediaFormat.KEY_LOW_LATENCY, 1) + } + it.configure(format, surface, null, 0) + it.start() + } + } catch (error: Exception) { + runCatching { candidate?.release() } + Log.e(TAG, "video decoder configure failed mime=$mime size=${width}x$height", error) + report("decoder configuration failed mime=$mime size=${width}x$height error=${error.javaClass.simpleName}") + null + } + decoder = next + renderedFrameLogged = false + submittedFrameLogged = false + if (next != null) { + report("decoder=${next.name} mime=$mime size=${width}x$height") + Log.i( + TAG, + "video decoder configured name=${next.name} mime=$mime size=${width}x$height", + ) + } + } + + private fun createDecoder(mime: String): MediaCodec { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q && + mime == MediaFormat.MIMETYPE_VIDEO_HEVC && + preferSoftwareHevcDecoder + ) { + val software = MediaCodecList(MediaCodecList.REGULAR_CODECS).codecInfos.firstOrNull { + !it.isEncoder && it.isSoftwareOnly && mime in it.supportedTypes + } + if (software != null) { + try { + return MediaCodec.createByCodecName(software.name) + } catch (error: Exception) { + Log.w(TAG, "software HEVC decoder unavailable name=${software.name}", error) + } + } + } + return MediaCodec.createDecoderByType(mime) + } + + private fun changeSurface(surface: Surface?) { + if (outputSurface === surface) return + outputSurface = surface + if (surface == null) { + releaseDecoder() + Log.i(TAG, "video decoder detached from surface") + return + } + val codec = decoder + if (codec != null) { + try { + codec.setOutputSurface(surface) + Log.i(TAG, "video decoder output surface updated") + return + } catch (error: Exception) { + Log.w(TAG, "video decoder output surface update failed; reconfiguring", error) + } + } + releaseDecoder() + lastConfig?.let(::configureDecoder) + } + + private fun feed(nalus: ByteArray) { + val annexB = MediaCodecSupport.toAnnexB(nalus) + val config = lastConfig ?: return + if (outputSurface == null) return + if (annexB.isEmpty()) { recover("invalid video access unit"); return } + if (!referenceChain.accepts(annexB, config.codec)) { + requestKeyFrameIfDue() + return + } + if (decoder == null) configureDecoder(config) + val codec = decoder ?: return + if (!submittedFrameLogged) { + submittedFrameLogged = true + Log.i( + TAG, + "video decoder first input avcc=${nalus.size} annexB=${annexB.size} " + + "head=${annexB.take(16).joinToString("") { "%02x".format(it.toInt() and 0xff) }}", + ) + } + val index = VideoInputPump.acquire( + running = { running }, drain = { drainOutput(codec) }, + dequeue = { codec.dequeueInputBuffer(INPUT_TIMEOUT_US) }, + ) + if (index < 0) { recover("video decoder input stalled"); return } + val input = checkNotNull(codec.getInputBuffer(index)) { "Decoder input buffer unavailable" } + input.clear() + if (annexB.size <= input.remaining()) { + input.put(annexB) + codec.queueInputBuffer(index, 0, annexB.size, System.nanoTime() / 1000, 0) + referenceChain.onQueued() + } else { + recover("video frame exceeded codec input capacity") + return + } + drainOutput(codec) + } + + private fun recover(reason: String) { + Log.w(TAG, "Video recovery: $reason; waiting for keyframe") + report("recovery: $reason; waiting for keyframe") + releaseDecoder() + referenceChain.reset() + requestKeyFrameIfDue() + } + + private fun requestKeyFrameIfDue() { + val now = System.nanoTime() + if (lastKeyFrameRequestNs != 0L && now - lastKeyFrameRequestNs < 1_000_000_000L) return + lastKeyFrameRequestNs = now + requestKeyFrame() + } + + private fun drainOutput(codec: MediaCodec) { + val info = MediaCodec.BufferInfo() + while (running) { + val index = codec.dequeueOutputBuffer(info, 0) + when { + index == MediaCodec.INFO_TRY_AGAIN_LATER -> return + index == MediaCodec.INFO_OUTPUT_FORMAT_CHANGED -> logOutputFormat(codec.outputFormat) + index >= 0 -> { + val render = outputSurface != null + codec.releaseOutputBuffer(index, render) + if (render && !renderedFrameLogged) { + renderedFrameLogged = true + report("first frame rendered") + Log.i(TAG, "video decoder rendered first frame bytes=${info.size}") + } + if (info.flags and MediaCodec.BUFFER_FLAG_END_OF_STREAM != 0) return + } + else -> return + } + } + } + + private fun logOutputFormat(format: MediaFormat) { + report("output format requested=${width}x${height} " + + "coded=${format.intOrNull(MediaFormat.KEY_WIDTH)}x${format.intOrNull(MediaFormat.KEY_HEIGHT)} " + + "crop=${format.intOrNull("crop-left")},${format.intOrNull("crop-top")}," + + "${format.intOrNull("crop-right")},${format.intOrNull("crop-bottom")} " + + "stride=${format.intOrNull(MediaFormat.KEY_STRIDE)} slice=${format.intOrNull(MediaFormat.KEY_SLICE_HEIGHT)} " + + "color=${format.intOrNull(MediaFormat.KEY_COLOR_STANDARD)}/${format.intOrNull(MediaFormat.KEY_COLOR_RANGE)}/${format.intOrNull(MediaFormat.KEY_COLOR_TRANSFER)}") + Log.i( + TAG, + "video decoder output format " + + "size=${format.intOrNull(MediaFormat.KEY_WIDTH)}x" + + "${format.intOrNull(MediaFormat.KEY_HEIGHT)} " + + "stride=${format.intOrNull(MediaFormat.KEY_STRIDE)} " + + "slice=${format.intOrNull(MediaFormat.KEY_SLICE_HEIGHT)} " + + "standard=${format.intOrNull(MediaFormat.KEY_COLOR_STANDARD)} " + + "range=${format.intOrNull(MediaFormat.KEY_COLOR_RANGE)} " + + "transfer=${format.intOrNull(MediaFormat.KEY_COLOR_TRANSFER)}", + ) + } + + @Synchronized + private fun releaseDecoder() { + val codec = decoder + decoder = null + if (codec != null) { + try { + codec.stop() + } catch (_: Exception) { + // Best effort. + } + try { + codec.release() + } catch (_: Exception) { + // Best effort. + } + } + } + + private companion object { + const val TAG = "xcertplay-usb" + const val MAX_INPUT_SIZE = 8 * 1024 * 1024 + const val INPUT_TIMEOUT_US = 10_000L + const val MAX_FRAME_AGE_NS = 250_000_000L + val START_CODE = byteArrayOf(0x00, 0x00, 0x00, 0x01) + } +} + +private fun MediaFormat.intOrNull(key: String): Int? = + if (!containsKey(key)) { + null + } else { + try { + getInteger(key) + } catch (_: Exception) { + null + } + } + +/** Decodes AAC-LC/Opus to PCM and plays it, or plays wired LPCM directly. */ +private class AudioRenderer( + val format: AudioFormat, + private val advancedAudioChannelMapping: Boolean, +) : Closeable { + private data class AudioPacket(val rtp: ByteArray, val sample: Int) + + private val queue = LinkedBlockingQueue(MAX_QUEUED_PACKETS) + @Volatile private var running = true + @Volatile private var started = false + private var codec: MediaCodec? = null + private var track: AudioTrack? = null + private var pcm = ByteArray(64 * 1024) + private var playbackStarted = false + private var prebufferBytes = 0 + private var startThresholdBytes = 0 + private var fadeApplied = false + private var droppedPacketsLogged = false + private var firstAacPayloadLogged = false + private var firstOpusShortPacketLogged = false + private var firstInputQueuedLogged = false + private var inputQueued = 0 + private var inputDropped = 0 + private var outputBuffers = 0 + private var firstPcmLogged = false + private val thread = Thread(::run, "carplay-audio").apply { isDaemon = true } + + fun start() { + if (started) return + started = true + thread.start() + } + + fun submit(rtp: ByteArray, sample: Int) { + if (!started || !queue.offer(AudioPacket(rtp, sample))) { + if (started && !droppedPacketsLogged) { + droppedPacketsLogged = true + Log.w(TAG, "audio queue full; dropping newest packets to bound latency") + } + } + } + + override fun close() { + running = false + thread.interrupt() + } + + private fun run() { + try { + when (format.codec) { + AudioCodecKind.AAC_LC -> configureCodec(MediaFormat.MIMETYPE_AUDIO_AAC) + AudioCodecKind.OPUS -> configureCodec(MediaFormat.MIMETYPE_AUDIO_OPUS) + AudioCodecKind.LPCM -> Unit + } + createTrack() + while (running) handle(queue.take()) + } catch (_: InterruptedException) { + // Worker shut down. + } catch (error: Exception) { + if (running) Log.e(TAG, "audio renderer worker failed", error) + } finally { + release() + } + } + + private fun configureCodec(mime: String) { + val mediaFormat = MediaFormat().apply { + setString(MediaFormat.KEY_MIME, mime) + setInteger(MediaFormat.KEY_SAMPLE_RATE, format.sampleRate) + setInteger(MediaFormat.KEY_CHANNEL_COUNT, format.channels) + setInteger(MediaFormat.KEY_MAX_INPUT_SIZE, 64 * 1024) + if (mime == MediaFormat.MIMETYPE_AUDIO_AAC) { + setInteger(MediaFormat.KEY_IS_ADTS, 1) + setByteBuffer("csd-0", ByteBuffer.wrap(aacAudioSpecificConfig())) + } else { + setByteBuffer("csd-0", ByteBuffer.wrap(opusHead())) + setByteBuffer("csd-1", ByteBuffer.wrap(opusCodecDelay())) + setByteBuffer("csd-2", ByteBuffer.wrap(opusSeekPreRoll())) + } + } + if (mime == MediaFormat.MIMETYPE_AUDIO_AAC) { + Log.i( + TAG, + "audio AAC config rate=${format.sampleRate} channels=${format.channels} " + + "csd0=${aacAudioSpecificConfig().toHexString()}", + ) + } + codec = try { + MediaCodec.createDecoderByType(mime).also { + it.configure(mediaFormat, null, null, 0) + it.start() + Log.i(TAG, "audio decoder configured mime=$mime name=${it.name}") + } + } catch (error: Exception) { + Log.e(TAG, "audio decoder configuration failed mime=$mime", error) + null + } + } + + private fun createTrack() { + val encoding = AndroidAudioFormat.ENCODING_PCM_16BIT + val channelMask = if (format.channels >= 2) AndroidAudioFormat.CHANNEL_OUT_STEREO + else AndroidAudioFormat.CHANNEL_OUT_MONO + val minBuffer = AudioTrack.getMinBufferSize(format.sampleRate, channelMask, encoding) + if (minBuffer <= 0) { + Log.e(TAG, "AudioTrack buffer size unavailable rate=${format.sampleRate} channels=${format.channels}") + return + } + val bufferBytes = maxOf(minBuffer * 4, MIN_TRACK_BUFFER_BYTES) + startThresholdBytes = if (format.audioType == "telephony" || format.audioType == "speechrecognition") { + maxOf(minBuffer, MIN_START_BUFFER_BYTES) + } else { + maxOf(minBuffer, MIN_START_BUFFER_BYTES) + } + track = AudioTrack.Builder() + .setAudioAttributes(audioAttributes()) + .setAudioFormat( + AndroidAudioFormat.Builder() + .setEncoding(encoding) + .setSampleRate(format.sampleRate) + .setChannelMask(channelMask) + .build(), + ) + .setBufferSizeInBytes(bufferBytes) + .setTransferMode(AudioTrack.MODE_STREAM) + .build() + Log.i( + TAG, + "audio track prepared type=${format.payloadType} audioType=${format.audioType} " + + "codec=${format.codec} " + + "rate=${format.sampleRate} channels=${format.channels}", + ) + } + + private fun aacAudioSpecificConfig(): ByteArray { + val frequencyIndex = MediaCodecSupport.aacFrequencyIndex(format.sampleRate) + val value = (AAC_OBJECT_TYPE_LC shl 11) or + (frequencyIndex shl 7) or + (format.channels.coerceIn(1, 7) shl 3) + return byteArrayOf((value ushr 8).toByte(), value.toByte()) + } + + private fun audioAttributes(): AudioAttributes { + val mode = if (advancedAudioChannelMapping) { + AudioChannelMappingMode.AUTOMOTIVE_BUS + } else { + AudioChannelMappingMode.MOBILE_COMPATIBLE + } + val selection = AudioChannelMapper.map( + audioType = format.audioType, + payloadType = format.payloadType, + mode = mode, + ) + val usage = usageFor(selection.channel) + val contentType = contentTypeFor(selection.contentType) + return AudioAttributes.Builder() + .setUsage(usage) + .setContentType(contentType) + .build() + .also { + Log.i( + TAG, + "audio route type=${format.payloadType} audioType=${format.audioType} " + + "mode=$mode channel=${selection.channel} " + + "usage=$usage contentType=$contentType", + ) + } + } + + private fun usageFor(channel: AudioChannel): Int = when (channel) { + AudioChannel.MEDIA -> AudioAttributes.USAGE_MEDIA + AudioChannel.PHONE -> AudioAttributes.USAGE_VOICE_COMMUNICATION + AudioChannel.ASSISTANT -> AudioAttributes.USAGE_ASSISTANT + AudioChannel.NAVIGATION -> AudioAttributes.USAGE_ASSISTANCE_NAVIGATION_GUIDANCE + } + + private fun contentTypeFor(contentType: AudioContentType): Int = when (contentType) { + AudioContentType.MUSIC -> AudioAttributes.CONTENT_TYPE_MUSIC + AudioContentType.SPEECH -> AudioAttributes.CONTENT_TYPE_SPEECH + } + + /** Minimal OpusHead CSD for the mono 48 kHz stream CarPlay negotiates. */ + private fun opusHead(): ByteArray { + val head = ByteArray(19) + "OpusHead".toByteArray(Charsets.US_ASCII).copyInto(head, 0) + head[8] = 1 + head[9] = format.channels.toByte() + head[10] = 0x38 + head[11] = 0x01 + head[12] = format.sampleRate.toByte() + head[13] = (format.sampleRate ushr 8).toByte() + head[14] = (format.sampleRate ushr 16).toByte() + head[15] = (format.sampleRate ushr 24).toByte() + return head + } + + private fun opusCodecDelay(): ByteArray = + java.nio.ByteBuffer.allocate(8) + .order(java.nio.ByteOrder.LITTLE_ENDIAN) + .putLong(OPUS_CODEC_DELAY_NANOS) + .array() + + private fun opusSeekPreRoll(): ByteArray = + java.nio.ByteBuffer.allocate(8) + .order(java.nio.ByteOrder.LITTLE_ENDIAN) + .putLong(OPUS_SEEK_PRE_ROLL_NANOS) + .array() + + private fun handle(packet: AudioPacket) { + val rtp = packet.rtp + val timestampUs = sampleTimestampUs(packet.sample) + when (format.codec) { + AudioCodecKind.LPCM -> writePcm(byteSwapS16(rtp.copyOfRange(12, rtp.size))) + AudioCodecKind.AAC_LC -> { + val accessUnit = rtp.copyOfRange(12, rtp.size) + if (accessUnit.isNotEmpty()) { + if (!firstAacPayloadLogged) { + firstAacPayloadLogged = true + Log.i( + TAG, + "audio AAC access unit bytes=${accessUnit.size} " + + "head=${accessUnit.copyOf(minOf(accessUnit.size, 16)).toHexString()}", + ) + } + feedCodec( + MediaCodecSupport.adtsFrame(accessUnit, format.sampleRate, format.channels), + timestampUs, + ) + } + } + AudioCodecKind.OPUS -> { + val accessUnit = rtp.copyOfRange(12, rtp.size) + if (accessUnit.size < MIN_OPUS_PACKET_BYTES) { + if (!firstOpusShortPacketLogged) { + firstOpusShortPacketLogged = true + Log.i( + TAG, + "audio Opus skipping short packet bytes=${accessUnit.size} " + + "head=${accessUnit.toHexString()}", + ) + } + return + } + feedCodec(accessUnit, timestampUs) + } + } + } + + private fun sampleTimestampUs(sample: Int): Long = + (sample.toLong() and 0xffff_ffffL) * 1_000_000L / format.sampleRate + + private fun feedCodec(payload: ByteArray, presentationTimeUs: Long) { + val codec = codec ?: return + val index = codec.dequeueInputBuffer(INPUT_TIMEOUT_US) + if (index < 0) { + inputDropped++ + if (inputDropped == 1) { + Log.w( + TAG, + "audio decoder input unavailable codec=${format.codec} " + + "queued=$inputQueued dropped=$inputDropped", + ) + } + return + } + val input = codec.getInputBuffer(index) ?: return + input.clear() + if (payload.size <= input.remaining()) { + input.put(payload) + codec.queueInputBuffer(index, 0, payload.size, presentationTimeUs, 0) + inputQueued++ + if (!firstInputQueuedLogged) { + firstInputQueuedLogged = true + Log.i( + TAG, + "audio decoder first input codec=${format.codec} bytes=${payload.size} " + + "head=${payload.copyOf(minOf(payload.size, 16)).toHexString()}", + ) + } + } else { + codec.queueInputBuffer(index, 0, 0, 0, 0) + inputDropped++ + } + drainCodec(codec) + } + + private fun drainCodec(codec: MediaCodec) { + val info = MediaCodec.BufferInfo() + while (running) { + val index = codec.dequeueOutputBuffer(info, 0) + when { + index == MediaCodec.INFO_TRY_AGAIN_LATER -> return + index == MediaCodec.INFO_OUTPUT_FORMAT_CHANGED -> Unit + index >= 0 -> { + val size = info.size + if (size > 0) { + outputBuffers++ + if (outputBuffers == 1 || outputBuffers % DECODED_BUFFER_LOG_INTERVAL == 0) { + Log.i( + TAG, + "audio decoder output codec=${format.codec} " + + "buffers=$outputBuffers bytes=$size " + + "queued=$inputQueued dropped=$inputDropped", + ) + } + } + if (size > 0) { + val output = codec.getOutputBuffer(index) + if (output != null) { + if (size > pcm.size) pcm = ByteArray(size) + output.position(info.offset) + output.limit(info.offset + size) + output.get(pcm, 0, size) + writePcm(pcm, 0, size) + } + } + codec.releaseOutputBuffer(index, false) + if (info.flags and MediaCodec.BUFFER_FLAG_END_OF_STREAM != 0) return + } + else -> return + } + } + } + + private fun writePcm(data: ByteArray, offset: Int = 0, length: Int = data.size) { + val track = track ?: return + if (!firstPcmLogged && length > 0) { + firstPcmLogged = true + val end = minOf(data.size, offset + minOf(length, 16)) + Log.i( + TAG, + "audio first PCM type=${format.payloadType} bytes=$length " + + "head=${data.copyOfRange(offset, end).toHexString()}", + ) + } + if (!fadeApplied) { + applyFadeIn(data, offset, length) + fadeApplied = true + } + var written = 0 + while (written < length && running) { + val writeLength = if (playbackStarted) { + length - written + } else { + minOf(length - written, PREBUFFER_WRITE_CHUNK_BYTES) + } + val count = track.write(data, offset + written, writeLength, AudioTrack.WRITE_BLOCKING) + if (count <= 0) break + written += count + if (!playbackStarted) { + prebufferBytes += count + if (prebufferBytes >= startThresholdBytes) { + track.play() + playbackStarted = true + Log.i(TAG, "audio playback started type=${format.payloadType}") + } + } + } + } + + private fun applyFadeIn(data: ByteArray, offset: Int, length: Int) { + val samples = (length - length % 2) / 2 + val fadeSamples = minOf(samples, maxOf(1, format.sampleRate / 100)) + for (index in 0 until fadeSamples) { + val position = offset + index * 2 + val sample = (data[position].toInt() and 0xff) or (data[position + 1].toInt() shl 8) + val scaled = (sample.toLong() * (index + 1) / fadeSamples).toInt() + data[position] = scaled.toByte() + data[position + 1] = (scaled shr 8).toByte() + } + } + + private fun byteSwapS16(source: ByteArray): ByteArray { + for (index in 0 until source.size - 1 step 2) { + val tmp = source[index] + source[index] = source[index + 1] + source[index + 1] = tmp + } + return source + } + + @Synchronized + private fun release() { + val codec = codec + this.codec = null + if (codec != null) { + try { + codec.stop() + } catch (_: Exception) { + // Best effort. + } + try { + codec.release() + } catch (_: Exception) { + // Best effort. + } + } + val track = track + this.track = null + if (track != null) { + try { + track.pause() + } catch (_: Exception) { + // Best effort. + } + try { + track.flush() + } catch (_: Exception) { + // Best effort. + } + try { + track.release() + } catch (_: Exception) { + // Best effort. + } + } + } + + private companion object { + const val TAG = "xcertplay-usb" + const val AAC_OBJECT_TYPE_LC = 2 + const val MIN_OPUS_PACKET_BYTES = 4 + const val OPUS_CODEC_DELAY_NANOS = 6_500_000L + const val OPUS_SEEK_PRE_ROLL_NANOS = 80_000_000L + const val INPUT_TIMEOUT_US = 10_000L + const val MAX_QUEUED_PACKETS = 64 + const val MIN_TRACK_BUFFER_BYTES = 16 * 1024 + const val MIN_START_BUFFER_BYTES = 4 * 1024 + const val PREBUFFER_WRITE_CHUNK_BYTES = 2 * 1024 + const val DECODED_BUFFER_LOG_INTERVAL = 50 + } +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/media/AudioChannelMapping.kt b/shared/src/main/java/com/shilapi/xcertplay/media/AudioChannelMapping.kt new file mode 100644 index 0000000..896daa4 --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/media/AudioChannelMapping.kt @@ -0,0 +1,78 @@ +package com.shilapi.xcertplay.media + +internal enum class AudioChannelMappingMode { + MOBILE_COMPATIBLE, + AUTOMOTIVE_BUS, +} + +internal enum class AudioChannel { + MEDIA, + PHONE, + ASSISTANT, + NAVIGATION, +} + +internal enum class AudioContentType { + MUSIC, + SPEECH, +} + +internal data class AudioChannelSelection( + val channel: AudioChannel, + val contentType: AudioContentType, +) + +/** + * Maps CarPlay stream metadata to Android AudioAttributes values. + * + * AAOS routes AudioTrack instances by usage, so the automotive mode keeps generic media streams + * on the media bus instead of reusing mobile's navigation fallback for default/compatibility. + */ +internal object AudioChannelMapper { + const val STREAM_TYPE_MAIN_HIGH_AUDIO = 102 + + fun map( + audioType: String, + payloadType: Int, + mode: AudioChannelMappingMode, + ): AudioChannelSelection { + val normalized = audioType.lowercase() + return when (mode) { + AudioChannelMappingMode.MOBILE_COMPATIBLE -> mapMobileCompatible(normalized, payloadType) + AudioChannelMappingMode.AUTOMOTIVE_BUS -> mapAutomotiveBus(normalized, payloadType) + } + } + + private fun mapMobileCompatible( + audioType: String, + payloadType: Int, + ): AudioChannelSelection = when (audioType) { + "telephony" -> AudioChannelSelection(AudioChannel.PHONE, AudioContentType.SPEECH) + "speechrecognition" -> + AudioChannelSelection(AudioChannel.ASSISTANT, AudioContentType.SPEECH) + "media" -> AudioChannelSelection(AudioChannel.MEDIA, AudioContentType.MUSIC) + "default", "alert", "compatibility" -> + AudioChannelSelection(AudioChannel.NAVIGATION, AudioContentType.SPEECH) + else -> mainHighAudioOrNavigation(payloadType) + } + + private fun mapAutomotiveBus( + audioType: String, + payloadType: Int, + ): AudioChannelSelection = when (audioType) { + "telephony" -> AudioChannelSelection(AudioChannel.PHONE, AudioContentType.SPEECH) + "speechrecognition" -> + AudioChannelSelection(AudioChannel.ASSISTANT, AudioContentType.SPEECH) + "media", "default", "compatibility" -> + AudioChannelSelection(AudioChannel.MEDIA, AudioContentType.MUSIC) + "alert" -> AudioChannelSelection(AudioChannel.NAVIGATION, AudioContentType.SPEECH) + else -> mainHighAudioOrNavigation(payloadType) + } + + private fun mainHighAudioOrNavigation(payloadType: Int): AudioChannelSelection = + if (payloadType == STREAM_TYPE_MAIN_HIGH_AUDIO) { + AudioChannelSelection(AudioChannel.MEDIA, AudioContentType.MUSIC) + } else { + AudioChannelSelection(AudioChannel.NAVIGATION, AudioContentType.SPEECH) + } +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/media/CarPlayTouchMapper.kt b/shared/src/main/java/com/shilapi/xcertplay/media/CarPlayTouchMapper.kt new file mode 100644 index 0000000..8148c2a --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/media/CarPlayTouchMapper.kt @@ -0,0 +1,30 @@ +package com.shilapi.xcertplay.media + +import android.view.MotionEvent +import com.shilapi.xcertplay.airplay.AirPlayContact + +/** Converts Android MotionEvents into normalized CarPlay touch contacts. */ +object CarPlayTouchMapper { + private const val MAX_CONTACTS = 2 + + fun contacts(event: MotionEvent, viewWidth: Int, viewHeight: Int): List { + val width = viewWidth.coerceAtLeast(1) + val height = viewHeight.coerceAtLeast(1) + val action = event.actionMasked + val liftedIndex = if (action == MotionEvent.ACTION_POINTER_UP) event.actionIndex else -1 + val allUp = action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_CANCEL + val count = minOf(MAX_CONTACTS, event.pointerCount) + val contacts = ArrayList(count) + for (index in 0 until count) { + contacts.add( + AirPlayContact( + id = index, + x = (event.getX(index).toDouble() / width).coerceIn(0.0, 1.0), + y = (event.getY(index).toDouble() / height).coerceIn(0.0, 1.0), + down = !allUp && index != liftedIndex, + ), + ) + } + return contacts + } +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/media/MediaCodecSupport.kt b/shared/src/main/java/com/shilapi/xcertplay/media/MediaCodecSupport.kt new file mode 100644 index 0000000..56eb22d --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/media/MediaCodecSupport.kt @@ -0,0 +1,193 @@ +package com.shilapi.xcertplay.media + +import com.shilapi.xcertplay.airplay.VideoCodec +import java.io.ByteArrayOutputStream + +/** + * Pure byte helpers that convert the CarPlay screen/audio payloads into the + * records Android MediaCodec and AudioTrack expect. Kept free of Android types + * so they stay testable on the JVM. + */ +object MediaCodecSupport { + private val START_CODE = byteArrayOf(0x00, 0x00, 0x00, 0x01) + + /** Splits an AVCDecoderConfigurationRecord into raw first SPS and first PPS. */ + fun avcParameterSets(codecData: ByteArray): Pair { + if (codecData.size < 7) return emptySet() + var cursor = 6 + val sps = readParameterSets(codecData, cursor, codecData[5].toInt() and 0x1f) + cursor += sps.sumOf { it.size + 2 } + if (cursor >= codecData.size) return emptySet() + val pps = readParameterSets(codecData, cursor + 1, codecData[cursor].toInt() and 0xff) + return (sps.firstOrNull() ?: ByteArray(0)) to (pps.firstOrNull() ?: ByteArray(0)) + } + + /** + * Converts an HEVCDecoderConfigurationRecord (hvcC) into Annex B VPS/SPS/PPS CSD. + * + * Android video decoders expect the initialization data as NAL units with start codes, + * not as the raw ISO-BMFF hvcC record. + */ + fun hevcCodecSpecificData(codecData: ByteArray): ByteArray { + if (codecData.size < HEVC_FIXED_RECORD_SIZE || codecData[0].toInt() != 1) { + return ByteArray(0) + } + + var cursor = HEVC_ARRAY_COUNT_OFFSET + val arrayCount = codecData[cursor++].toInt() and 0xff + val output = ByteArrayOutputStream() + repeat(arrayCount) { + if (cursor >= codecData.size) return ByteArray(0) + cursor += 1 // array_completeness, reserved, and nal_unit_type + if (cursor + 2 > codecData.size) return ByteArray(0) + val nalUnitCount = readU16Be(codecData, cursor) + cursor += 2 + repeat(nalUnitCount) { + if (cursor + 2 > codecData.size) return ByteArray(0) + val nalUnitLength = readU16Be(codecData, cursor) + cursor += 2 + if (cursor + nalUnitLength > codecData.size) return ByteArray(0) + output.write(START_CODE) + output.write(codecData, cursor, nalUnitLength) + cursor += nalUnitLength + } + } + return output.toByteArray() + } + + /** Converts CarPlay's length-prefixed NAL units into an Annex B byte stream. */ + fun toAnnexB(lengthPrefixed: ByteArray): ByteArray { + if (lengthPrefixed.size >= 4 && + lengthPrefixed[0] == 0.toByte() && + lengthPrefixed[1] == 0.toByte() && + lengthPrefixed[2] == 0.toByte() && + lengthPrefixed[3] == 1.toByte() + ) { + return lengthPrefixed + } + + var inputOffset = 0 + var outputSize = 0 + while (inputOffset + 4 <= lengthPrefixed.size) { + val length = readU32Be(lengthPrefixed, inputOffset) + inputOffset += 4 + if (length <= 0 || length > lengthPrefixed.size - inputOffset) return ByteArray(0) + if (length > Int.MAX_VALUE - outputSize - START_CODE.size) return ByteArray(0) + outputSize += START_CODE.size + length + inputOffset += length + } + if (outputSize == 0 || inputOffset != lengthPrefixed.size) return ByteArray(0) + + val output = ByteArray(outputSize) + var offset = 0 + var outputOffset = 0 + while (offset + 4 <= lengthPrefixed.size) { + val length = readU32Be(lengthPrefixed, offset) + offset += 4 + if (length <= 0 || offset + length > lengthPrefixed.size) break + START_CODE.copyInto(output, outputOffset) + outputOffset += START_CODE.size + lengthPrefixed.copyInto(output, outputOffset, offset, offset + length) + outputOffset += length + offset += length + } + return output + } + + /** IDR (AVC) or IRAP (HEVC) starts an independently decodable reference chain. */ + fun isRandomAccess(annexB: ByteArray, codec: VideoCodec): Boolean { + var cursor = 0 + while (cursor + 3 < annexB.size) { + val prefix = when { + annexB[cursor] != 0.toByte() || annexB[cursor + 1] != 0.toByte() -> 0 + annexB[cursor + 2] == 1.toByte() -> 3 + annexB[cursor + 2] == 0.toByte() && annexB[cursor + 3] == 1.toByte() -> 4 + else -> 0 + } + if (prefix > 0 && cursor + prefix < annexB.size) { + val header = annexB[cursor + prefix].toInt() and 255 + if (codec == VideoCodec.H264 && header and 31 == 5) return true + if (codec == VideoCodec.H265 && cursor + prefix + 1 < annexB.size && + (header shr 1) and 63 in 16..21) return true + cursor += prefix + } else cursor++ + } + return false + } + + /** Wraps one raw AAC-LC access unit in an MPEG-4 ADTS frame. */ + fun adtsFrame(accessUnit: ByteArray, sampleRate: Int, channels: Int): ByteArray { + val frequencyIndex = aacFrequencyIndex(sampleRate) + val channelConfig = channels.coerceIn(1, 7) + val frameLength = accessUnit.size + 7 + val header = ByteArray(7) + header[0] = 0xff.toByte() + header[1] = 0xf1.toByte() + header[2] = ((1 shl 6) or (frequencyIndex shl 2) or (channelConfig ushr 2)).toByte() + header[3] = (((channelConfig and 0x3) shl 6) or (frameLength ushr 11)).toByte() + header[4] = ((frameLength ushr 3) and 0xff).toByte() + header[5] = (((frameLength and 0x7) shl 5) or 0x1f).toByte() + header[6] = 0xfc.toByte() + return header + accessUnit + } + + /** Extracts one RFC 3640 AAC access unit from an RTP payload. */ + fun aacAccessUnit(rtpPayload: ByteArray): ByteArray { + if (rtpPayload.size < 4) return ByteArray(0) + val headerBits = readU16Be(rtpPayload, 0) + if (headerBits < 16 || headerBits % 16 != 0) return ByteArray(0) + val headerBytes = headerBits / 8 + if (2 + headerBytes > rtpPayload.size) return ByteArray(0) + val auSize = (readU16Be(rtpPayload, 2) shr 3) and 0x1fff + val start = 2 + headerBytes + val end = minOf(start + auSize, rtpPayload.size) + return if (end <= start) ByteArray(0) else rtpPayload.copyOfRange(start, end) + } + + /** MPEG-4 sampling frequency index used by both ADTS and AudioSpecificConfig. */ + fun aacFrequencyIndex(sampleRate: Int): Int = when (sampleRate) { + 96_000 -> 0 + 88_200 -> 1 + 64_000 -> 2 + 48_000 -> 3 + 44_100 -> 4 + 32_000 -> 5 + 24_000 -> 6 + 22_050 -> 7 + 16_000 -> 8 + 12_000 -> 9 + 11_025 -> 10 + 8_000 -> 11 + 7_350 -> 12 + else -> 3 + } + + private fun emptySet(): Pair = ByteArray(0) to ByteArray(0) + + private fun readParameterSets(source: ByteArray, offset: Int, count: Int): List { + val sets = ArrayList(count) + var cursor = offset + var index = 0 + while (index < count && cursor + 2 <= source.size) { + index++ + val length = readU16Be(source, cursor) + cursor += 2 + if (cursor + length > source.size) break + sets.add(source.copyOfRange(cursor, cursor + length)) + cursor += length + } + return sets + } + + private fun readU16Be(source: ByteArray, offset: Int): Int = + ((source[offset].toInt() and 0xff) shl 8) or (source[offset + 1].toInt() and 0xff) + + private fun readU32Be(source: ByteArray, offset: Int): Int = + ((source[offset].toInt() and 0xff) shl 24) or + ((source[offset + 1].toInt() and 0xff) shl 16) or + ((source[offset + 2].toInt() and 0xff) shl 8) or + (source[offset + 3].toInt() and 0xff) + + private const val HEVC_FIXED_RECORD_SIZE = 23 + private const val HEVC_ARRAY_COUNT_OFFSET = 22 +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/media/MicrophoneUplink.kt b/shared/src/main/java/com/shilapi/xcertplay/media/MicrophoneUplink.kt new file mode 100644 index 0000000..bb91c6d --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/media/MicrophoneUplink.kt @@ -0,0 +1,262 @@ +package com.shilapi.xcertplay.media + +import android.media.AudioFormat as AndroidAudioFormat +import android.media.AudioRecord +import android.media.MediaRecorder +import android.util.Log +import com.shilapi.xcertplay.airplay.AudioCodecKind +import com.shilapi.xcertplay.airplay.MicrophoneConfig +import com.shilapi.xcertplay.airplay.MicrophoneCounters +import com.shilapi.xcertplay.airplay.MicrophonePacketizer +import com.shilapi.xcertplay.airplay.toHexString +import java.io.Closeable +import java.net.DatagramPacket +import java.net.DatagramSocket +import java.net.InetAddress +import java.net.InetSocketAddress +import java.util.concurrent.atomic.AtomicBoolean + +/** + * Captures one PCM microphone stream and sends it back to the phone as sealed CarPlay RTP. + * + * The recorder runs only while the matching audio stream is active, so callers start this after + * the first downlink audio packet and close it on stream teardown. + */ +internal class MicrophoneUplink(private val config: MicrophoneConfig) : Closeable { + private val running = AtomicBoolean(false) + private val firstPacketLogged = AtomicBoolean(false) + @Volatile private var recorder: AudioRecord? = null + @Volatile private var socket: DatagramSocket? = null + @Volatile private var opusEncoder: OpusEncoder? = null + private var thread: Thread? = null + + fun start(): Boolean { + if (!running.compareAndSet(false, true)) return true + + val channelMask = if (config.channels >= 2) { + AndroidAudioFormat.CHANNEL_IN_STEREO + } else { + AndroidAudioFormat.CHANNEL_IN_MONO + } + val minBuffer = AudioRecord.getMinBufferSize( + config.sampleRate, + channelMask, + AndroidAudioFormat.ENCODING_PCM_16BIT, + ) + if (minBuffer <= 0) { + Log.w(TAG, "microphone unavailable rate=${config.sampleRate} channels=${config.channels}") + running.set(false) + return false + } + + val source = when (config.audioType) { + "telephony" -> MediaRecorder.AudioSource.VOICE_COMMUNICATION + "speechrecognition" -> MediaRecorder.AudioSource.VOICE_RECOGNITION + else -> MediaRecorder.AudioSource.MIC + } + val nextEncoder = if (config.codec == AudioCodecKind.OPUS) { + OpusEncoder(config.bitrate ?: 48_000).takeIf { it.available } + } else { + null + } + if (config.codec == AudioCodecKind.OPUS && nextEncoder == null) { + Log.w(TAG, "microphone Opus encoder is unavailable") + running.set(false) + return false + } + val bufferSize = maxOf(minBuffer * 2, config.frameBytes * 4) + val nextRecorder = try { + AudioRecord.Builder() + .setAudioSource(source) + .setAudioFormat( + AndroidAudioFormat.Builder() + .setEncoding(AndroidAudioFormat.ENCODING_PCM_16BIT) + .setSampleRate(config.sampleRate) + .setChannelMask(channelMask) + .build(), + ) + .setBufferSizeInBytes(bufferSize) + .build() + } catch (error: Exception) { + Log.e(TAG, "microphone recorder creation failed", error) + nextEncoder?.close() + running.set(false) + return false + } + if (nextRecorder.state != AudioRecord.STATE_INITIALIZED) { + Log.w(TAG, "microphone recorder failed to initialize") + nextRecorder.release() + nextEncoder?.close() + running.set(false) + return false + } + + val nextSocket = try { + DatagramSocket(null).apply { + reuseAddress = true + bind(InetSocketAddress(InetAddress.getByName("::"), 0)) + } + } catch (error: Exception) { + Log.e(TAG, "microphone socket creation failed", error) + nextRecorder.release() + nextEncoder?.close() + running.set(false) + return false + } + + recorder = nextRecorder + socket = nextSocket + opusEncoder = nextEncoder + return try { + nextRecorder.startRecording() + thread = Thread({ capture(nextRecorder, nextSocket) }, "carplay-mic").apply { + isDaemon = true + start() + } + Log.i( + TAG, + "microphone uplink started type=${config.audioType} " + + "rate=${config.sampleRate} channels=${config.channels} " + + "frameMs=${config.frameMillis} port=${config.port}", + ) + true + } catch (error: Exception) { + Log.e(TAG, "microphone recording failed", error) + release() + false + } + } + + private fun capture(recorder: AudioRecord, socket: DatagramSocket) { + val frame = ByteArray(config.frameBytes) + val readBuffer = ByteArray(maxOf(frame.size, MIN_READ_BYTES)) + val counters = MicrophoneCounters() + var filled = 0 + try { + while (running.get()) { + val count = recorder.read(readBuffer, 0, readBuffer.size, AudioRecord.READ_BLOCKING) + if (count < 0) { + if (running.get()) Log.e(TAG, "microphone read failed code=$count") + return + } + if (count == 0) { + continue + } + var offset = 0 + while (offset < count && running.get()) { + val copied = minOf(frame.size - filled, count - offset) + readBuffer.copyInto(frame, filled, offset, offset + copied) + filled += copied + offset += copied + if (filled == frame.size) { + sendFrame(socket, counters, frame) + filled = 0 + } + } + } + } catch (error: Exception) { + if (running.get()) Log.e(TAG, "microphone capture failed", error) + } finally { + running.set(false) + release() + } + } + + private fun sendFrame(socket: DatagramSocket, counters: MicrophoneCounters, frame: ByteArray) { + val bodies = if (config.codec == AudioCodecKind.OPUS) { + opusEncoder?.encode(frame).orEmpty() + } else { + listOf(MicrophonePacketizer.toWirePcm(frame)) + } + bodies.forEach { body -> + sendPacket( + socket = socket, + counters = counters, + body = body, + samples = config.samplesPerPacket, + ) + } + } + + private fun sendPacket( + socket: DatagramSocket, + counters: MicrophoneCounters, + body: ByteArray, + samples: Int, + ) { + val packet = MicrophonePacketizer.sealPacket( + key = config.key, + payloadType = config.payloadType, + counters = counters, + body = body, + samples = samples, + ) + try { + socket.send(DatagramPacket(packet, packet.size, config.host, config.port)) + if (firstPacketLogged.compareAndSet(false, true)) { + Log.i( + TAG, + "microphone first packet bytes=${packet.size} body=${body.size} " + + "head=${packet.copyOf(minOf(packet.size, 16)).toHexString()} " + + "port=${config.port}", + ) + } + } catch (error: Exception) { + if (running.get()) throw error + } + } + + override fun close() { + if (!running.compareAndSet(true, false)) { + release() + return + } + try { + recorder?.stop() + } catch (_: Exception) { + // Best effort; release below is authoritative. + } + try { + socket?.close() + } catch (_: Exception) { + // Best effort. + } + thread?.let { worker -> + try { + worker.join(CLOSE_JOIN_MILLIS) + } catch (_: InterruptedException) { + Thread.currentThread().interrupt() + } + if (worker.isAlive) worker.interrupt() + } + release() + } + + @Synchronized + private fun release() { + running.set(false) + val currentRecorder = recorder + recorder = null + try { + currentRecorder?.release() + } catch (_: Exception) { + // Best effort. + } + val currentSocket = socket + socket = null + try { + currentSocket?.close() + } catch (_: Exception) { + // Best effort. + } + val currentEncoder = opusEncoder + opusEncoder = null + currentEncoder?.close() + } + + private companion object { + const val TAG = "xcertplay-usb" + const val MIN_READ_BYTES = 2_048 + const val CLOSE_JOIN_MILLIS = 500L + } +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/media/OpusEncoder.kt b/shared/src/main/java/com/shilapi/xcertplay/media/OpusEncoder.kt new file mode 100644 index 0000000..43b42a3 --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/media/OpusEncoder.kt @@ -0,0 +1,141 @@ +package com.shilapi.xcertplay.media + +import android.media.MediaCodec +import android.media.MediaFormat +import android.util.Log +import java.io.Closeable + +/** + * Encodes 20 ms chunks of 48 kHz mono PCM into raw Opus access units for the CarPlay + * microphone uplink. + */ +internal class OpusEncoder(bitrate: Int) : Closeable { + private val codec: MediaCodec? = try { + val format = MediaFormat.createAudioFormat( + MediaFormat.MIMETYPE_AUDIO_OPUS, + SAMPLE_RATE, + CHANNELS, + ).apply { + setInteger(MediaFormat.KEY_BIT_RATE, bitrate) + setInteger(MediaFormat.KEY_MAX_INPUT_SIZE, MAX_INPUT_BYTES) + } + MediaCodec.createEncoderByType(MediaFormat.MIMETYPE_AUDIO_OPUS).also { + it.configure( + format, + null, + null, + MediaCodec.CONFIGURE_FLAG_ENCODE, + ) + it.start() + Log.i(TAG, "Opus microphone encoder started bitrate=$bitrate") + } + } catch (error: Exception) { + Log.w(TAG, "Opus microphone encoder unavailable", error) + null + } + private val bufferInfo = MediaCodec.BufferInfo() + private var presentationTimeUs = 0L + private var closed = false + private var outputPackets = 0 + + val available: Boolean get() = codec != null && !closed + + /** + * Queues one 20 ms PCM frame and returns all Opus access units made available by the codec. + */ + fun encode(pcm: ByteArray): List { + val codec = codec ?: return emptyList() + if (closed) return emptyList() + val inputIndex = try { + codec.dequeueInputBuffer(INPUT_TIMEOUT_US) + } catch (error: Exception) { + Log.w(TAG, "Opus microphone input dequeue failed", error) + return emptyList() + } + if (inputIndex >= 0) { + val input = codec.getInputBuffer(inputIndex) + if (input == null || pcm.size > input.remaining()) { + codec.queueInputBuffer(inputIndex, 0, 0, presentationTimeUs, 0) + } else { + input.clear() + input.put(pcm) + codec.queueInputBuffer( + inputIndex, + 0, + pcm.size, + presentationTimeUs, + 0, + ) + presentationTimeUs += INPUT_DURATION_US + } + } + return drain() + } + + private fun drain(): List { + val codec = codec ?: return emptyList() + val output = ArrayList() + while (!closed) { + val index = try { + codec.dequeueOutputBuffer(bufferInfo, 0) + } catch (error: Exception) { + Log.w(TAG, "Opus microphone output dequeue failed", error) + return output + } + when { + index == MediaCodec.INFO_TRY_AGAIN_LATER -> return output + index == MediaCodec.INFO_OUTPUT_FORMAT_CHANGED -> continue + index >= 0 -> { + if (bufferInfo.flags and MediaCodec.BUFFER_FLAG_CODEC_CONFIG != 0) { + codec.releaseOutputBuffer(index, false) + continue + } + val buffer = codec.getOutputBuffer(index) + if (buffer != null && bufferInfo.size > 0) { + val bytes = ByteArray(bufferInfo.size) + buffer.position(bufferInfo.offset) + buffer.limit(bufferInfo.offset + bufferInfo.size) + buffer.get(bytes) + output.add(bytes) + outputPackets++ + if (outputPackets <= FIRST_PACKET_LOG_COUNT) { + Log.i( + TAG, + "Opus microphone packet=$outputPackets bytes=${bytes.size} " + + "head=${bytes.copyOf(minOf(bytes.size, 16)).toHexString()}", + ) + } + } + codec.releaseOutputBuffer(index, false) + } + } + } + return output + } + + override fun close() { + if (closed) return + closed = true + val codec = codec ?: return + try { + codec.stop() + } catch (_: Exception) { + // Best effort. + } + try { + codec.release() + } catch (_: Exception) { + // Best effort. + } + } + + private companion object { + const val TAG = "xcertplay-usb" + const val SAMPLE_RATE = 48_000 + const val CHANNELS = 1 + const val INPUT_TIMEOUT_US = 10_000L + const val INPUT_DURATION_US = 20_000L + const val MAX_INPUT_BYTES = 4_096 + const val FIRST_PACKET_LOG_COUNT = 3 + } +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/media/VideoDecodeQueue.kt b/shared/src/main/java/com/shilapi/xcertplay/media/VideoDecodeQueue.kt new file mode 100644 index 0000000..5168cf3 --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/media/VideoDecodeQueue.kt @@ -0,0 +1,70 @@ +package com.shilapi.xcertplay.media + +import android.view.Surface +import com.shilapi.xcertplay.airplay.VideoCodec +import java.util.concurrent.LinkedBlockingQueue +import java.util.concurrent.TimeUnit + +internal sealed interface VideoJob { + data class Config(val codec: VideoCodec, val codecData: ByteArray) : VideoJob + data class Frame(val nalus: ByteArray, val receivedNs: Long = System.nanoTime()) : VideoJob + data class SurfaceChanged(val surface: Surface?) : VideoJob + data object Resync : VideoJob +} + +/** Do not resume dependent pictures after losing a reference frame. */ +internal class VideoReferenceChain { + var needsKeyFrame = true + private set + fun reset() { needsKeyFrame = true } + fun accepts(bytes: ByteArray, codec: VideoCodec): Boolean = + !needsKeyFrame || MediaCodecSupport.isRandomAccess(bytes, codec) + fun onQueued() { needsKeyFrame = false } +} + +/** Limit latency and memory without ever dropping a reference frame silently. */ +internal class VideoDecodeQueue( + private val maxFrames: Int = 8, + private val maxBytes: Int = 8 * 1024 * 1024, +) { + private val jobs = LinkedBlockingQueue() + + @Synchronized fun offer(job: VideoJob) { + if (job is VideoJob.Frame) { + val frames = jobs.filterIsInstance() + if (frames.size >= maxFrames || frames.sumOf { it.nalus.size.toLong() } + job.nalus.size > maxBytes) { + discardFrames() + jobs.offer(VideoJob.Resync) + } + // A single oversized frame is also a lost reference chain. + if (job.nalus.size > maxBytes) return + } + jobs.offer(job) + } + + @Synchronized fun discardFrames() { + jobs.removeIf { it is VideoJob.Frame || it is VideoJob.Resync } + } + + fun poll(timeoutMillis: Long): VideoJob? = jobs.poll(timeoutMillis, TimeUnit.MILLISECONDS) +} + +/** Drain output while waiting for input: full output buffers can otherwise starve input forever. */ +internal object VideoInputPump { + fun acquire( + running: () -> Boolean, + drain: () -> Unit, + dequeue: () -> Int, + nanoTime: () -> Long = System::nanoTime, + timeoutNs: Long = TimeUnit.MILLISECONDS.toNanos(500), + ): Int { + val start = nanoTime() + while (running()) { + drain() + val index = dequeue() + if (index >= 0) return index + if (nanoTime() - start >= timeoutNs) break + } + return -1 + } +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/mfi/Iap2MfiAuthenticationClient.kt b/shared/src/main/java/com/shilapi/xcertplay/mfi/Iap2MfiAuthenticationClient.kt new file mode 100644 index 0000000..f8f1333 --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/mfi/Iap2MfiAuthenticationClient.kt @@ -0,0 +1,119 @@ +package com.shilapi.xcertplay.mfi + +import com.shilapi.xcertplay.iap2.message.Iap2AuthenticationMessages +import com.shilapi.xcertplay.iap2.session.Iap2Session +import com.shilapi.xcertplay.iap2.wire.Iap2Frame + +/** Runs LIVI's minimal iAP2 CSM MFi exchange without taking ownership of [Iap2Session]. */ +class Iap2MfiAuthenticationClient( + private val authentication: MfiAuthenticator, + private val maximumCertificateLength: Int = MfiAuthenticationClient.DEFAULT_MAXIMUM_CERTIFICATE_OUTPUT_LENGTH, +) { + init { + require(maximumCertificateLength in 1..MAX_CSM_CERTIFICATE_BYTES) { + "maximumCertificateLength must be in 1..$MAX_CSM_CERTIFICATE_BYTES" + } + } + + /** Blocks until the phone confirms AA05, or throws a typed authentication failure. */ + fun run( + session: Iap2Session, + timeoutMillis: Long = DEFAULT_TIMEOUT_MILLIS, + onProgress: (String) -> Unit = {}, + ) { + require(timeoutMillis in 1..MAX_TIMEOUT_MILLIS) { + "timeoutMillis must be in 1..$MAX_TIMEOUT_MILLIS" + } + val deadlineNanos = deadlineAfter(timeoutMillis) + val certificate = authentication.readCertificate(maximumCertificateLength) + val certificateFrame = when (authentication.certificateType) { + MfiCertificateType.MFI -> Iap2AuthenticationMessages.accessoryCertificate(certificate) + MfiCertificateType.BAA -> Iap2AuthenticationMessages.accessoryCertificateBody(certificate) + } + val certificatePayloadBytes = certificateFrame.payload.size + onProgress( + "mfi type=${authentication.certificateType} " + + "certificate loaded bytes=${certificate.size} " + + "payload bytes=$certificatePayloadBytes", + ) + while (true) { + val remaining = remainingMillis(deadlineNanos) + if (remaining == 0L) throw Iap2MfiAuthenticationException("Timed out waiting for iAP2 MFi authentication") + val frame = session.recv(remaining) + ?: throw Iap2MfiAuthenticationException("Timed out waiting for iAP2 MFi authentication") + when (frame.messageId) { + REQUEST_CERTIFICATE -> { + onProgress("iap2 mfi rx=0xaa00 request-certificate") + send(session, certificateFrame, deadlineNanos) + onProgress("iap2 mfi tx=0xaa01 certificate bytes=$certificatePayloadBytes") + } + REQUEST_CHALLENGE -> { + val challenge = requireParameterZero(frame) + if (challenge.size !in 1..MAXIMUM_CHALLENGE_BYTES) { + throw Iap2MfiAuthenticationException("Invalid iAP2 MFi challenge length ${challenge.size}") + } + onProgress("iap2 mfi rx=0xaa02 challenge bytes=${challenge.size}") + val signature = authentication.signChallenge(challenge) + send(session, Iap2AuthenticationMessages.response(signature), deadlineNanos) + onProgress("iap2 mfi tx=0xaa03 signature bytes=${signature.size}") + } + AUTHENTICATION_SUCCEEDED -> { + onProgress("iap2 mfi rx=0xaa05 authentication-succeeded") + return + } + AUTHENTICATION_FAILED -> throw Iap2MfiAuthenticationException("iPhone sent AuthenticationFailed") + else -> throw Iap2MfiAuthenticationException( + "Unexpected iAP2 MFi message 0x${frame.messageId.toString(16).padStart(4, '0')}", + ) + } + } + } + + private fun send( + session: Iap2Session, + frame: Iap2Frame, + deadlineNanos: Long, + ) { + val remaining = remainingMillis(deadlineNanos) + if (remaining == 0L) throw Iap2MfiAuthenticationException("Timed out sending iAP2 MFi authentication reply") + session.send(frame, remaining) + } + + private fun requireParameterZero(frame: Iap2Frame): ByteArray { + return try { + Iap2AuthenticationMessages.challenge(frame) + } catch (failure: Exception) { + throw Iap2MfiAuthenticationException("iAP2 MFi challenge is missing parameter 0", failure) + } + } + + private fun deadlineAfter(timeoutMillis: Long): Long { + val now = System.nanoTime() + val delta = timeoutMillis * NANOS_PER_MILLISECOND + return if (Long.MAX_VALUE - now < delta) Long.MAX_VALUE else now + delta + } + + private fun remainingMillis(deadlineNanos: Long): Long { + val remaining = deadlineNanos - System.nanoTime() + if (remaining <= 0) return 0 + return ((remaining + NANOS_PER_MILLISECOND - 1) / NANOS_PER_MILLISECOND) + .coerceAtMost(MAX_TIMEOUT_MILLIS) + } + + companion object { + private const val REQUEST_CERTIFICATE = 0xaa00 + private const val CERTIFICATE = 0xaa01 + private const val REQUEST_CHALLENGE = 0xaa02 + private const val RESPONSE = 0xaa03 + private const val AUTHENTICATION_FAILED = 0xaa04 + private const val AUTHENTICATION_SUCCEEDED = 0xaa05 + private const val MAXIMUM_CHALLENGE_BYTES = 128 + private const val MAX_CSM_CERTIFICATE_BYTES = 65_525 + private const val DEFAULT_TIMEOUT_MILLIS = 30_000L + private const val MAX_TIMEOUT_MILLIS = 5 * 60 * 1_000L + private const val NANOS_PER_MILLISECOND = 1_000_000L + } +} + +/** A malformed, rejected, unexpected, or timed-out iAP2 MFi authentication exchange. */ +class Iap2MfiAuthenticationException(message: String, cause: Throwable? = null) : MfiException(message, cause) diff --git a/shared/src/main/java/com/shilapi/xcertplay/mfi/LocalMfiAuthenticationClient.kt b/shared/src/main/java/com/shilapi/xcertplay/mfi/LocalMfiAuthenticationClient.kt new file mode 100644 index 0000000..ebb4a08 --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/mfi/LocalMfiAuthenticationClient.kt @@ -0,0 +1,105 @@ +package com.shilapi.xcertplay.mfi + +import org.bouncycastle.asn1.ASN1Integer +import org.bouncycastle.asn1.ASN1Sequence +import java.io.File +import java.security.KeyFactory +import java.security.PrivateKey +import java.security.SecureRandom +import java.security.Signature +import java.security.cert.CertificateFactory +import java.security.interfaces.ECPublicKey +import java.security.spec.PKCS8EncodedKeySpec + +/** + * Experimental, local P-256 provider. Identity provisioning is owned by the host application. + * A valid signature here proves key consistency, not that an iPhone trusts the identity. + */ +class LocalMfiAuthenticationClient private constructor( + private val privateKey: PrivateKey, + private val certificate: ByteArray, + private val onSignature: (Int) -> Unit, +) : MfiAuthenticator { + override fun protocolMajor(): Int = 3 + + override fun readCertificate(maximumOutputLength: Int): ByteArray { + require(maximumOutputLength > 0 && certificate.size <= maximumOutputLength) { + "Local certificate exceeds the requested output limit" + } + return certificate.copyOf() + } + + override fun signChallenge(challenge: ByteArray): ByteArray { + require(challenge.size == 32) { "Local MFi v3 expects a 32-byte digest" } + // The iAP2/AirPlay caller supplies a digest already. Do not hash it a second time. + val signer = Signature.getInstance("NONEwithECDSA") + signer.initSign(privateKey) + signer.update(challenge) + val result = derToRaw(signer.sign()) + onSignature(challenge.size) + return result + } + + companion object { + /** Presence of this private app directory selects offline-only mode, even if incomplete. */ + const val DIRECTORY = "offline-mfi" + private const val MAX_FILE_BYTES = 16 * 1024 + + fun load(directory: File, onSignature: (Int) -> Unit = {}): LocalMfiAuthenticationClient { + require(directory.isDirectory) { "Offline MFi directory is missing or invalid" } + val encodedKey = readBounded(File(directory, "identity.pk8")) + val privateKey = try { + KeyFactory.getInstance("EC").generatePrivate(PKCS8EncodedKeySpec(encodedKey)) + } finally { + encodedKey.fill(0) + } + val certificate = readBounded(File(directory, "certificate.p7b")) + val certificates = CertificateFactory.getInstance("X.509") + .generateCertificates(certificate.inputStream()) + require(certificates.size == 1) { "Expected one accessory certificate" } + val publicKey = certificates.single().publicKey as? ECPublicKey + ?: error("Expected an EC accessory certificate") + require(publicKey.params.order.toString(16) == + "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551") { + "Expected a P-256 accessory certificate" + } + val challenge = ByteArray(32).also(SecureRandom()::nextBytes) + val signer = Signature.getInstance("NONEwithECDSA") + signer.initSign(privateKey) + signer.update(challenge) + val signature = signer.sign() + val verifier = Signature.getInstance("NONEwithECDSA") + verifier.initVerify(publicKey) + verifier.update(challenge) + require(verifier.verify(signature)) { "Local private key does not match certificate" } + return LocalMfiAuthenticationClient(privateKey, certificate, onSignature) + } + + private fun readBounded(file: File): ByteArray = file.inputStream().use { stream -> + val output = java.io.ByteArrayOutputStream() + val buffer = ByteArray(1024) + while (true) { + val count = stream.read(buffer) + if (count < 0) break + require(output.size() + count <= MAX_FILE_BYTES) { "Local identity file is too large" } + output.write(buffer, 0, count) + } + output.toByteArray().also { require(it.isNotEmpty()) { "Local identity file is empty" } } + } + + internal fun derToRaw(der: ByteArray): ByteArray { + val sequence = ASN1Sequence.getInstance(der) + require(sequence.size() == 2) { "Invalid ECDSA signature" } + val result = ByteArray(64) + for (index in 0..1) { + val value = ASN1Integer.getInstance(sequence.getObjectAt(index)).value + require(value.signum() > 0 && value.bitLength() <= 256) { "Invalid ECDSA integer" } + val bytes = value.toByteArray() + val skip = if (bytes.size == 33 && bytes[0] == 0.toByte()) 1 else 0 + val length = bytes.size - skip + bytes.copyInto(result, index * 32 + 32 - length, skip) + } + return result + } + } +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/mfi/LocalMfiProbe.kt b/shared/src/main/java/com/shilapi/xcertplay/mfi/LocalMfiProbe.kt new file mode 100644 index 0000000..245703d --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/mfi/LocalMfiProbe.kt @@ -0,0 +1,41 @@ +package com.shilapi.xcertplay.mfi + +import java.io.File +import java.math.BigInteger +import java.security.SecureRandom +import java.security.Signature +import java.security.cert.CertificateFactory +import org.bouncycastle.asn1.ASN1Integer +import org.bouncycastle.asn1.DERSequence + +/** ADB/app_process probe: exercises Android's local crypto without starting a CarPlay session. */ +object LocalMfiProbe { + @JvmStatic fun main(arguments: Array) { + require(arguments.size == 1) { "Expected private identity directory" } + var signatureCount = 0 + repeat(2) { startup -> + val client = LocalMfiAuthenticationClient.load(File(arguments.single())) { signatureCount++ } + val certificate = CertificateFactory.getInstance("X.509") + .generateCertificates(client.readCertificate().inputStream()).single() + repeat(3) { trial -> + val digest = ByteArray(32).also(SecureRandom()::nextBytes) + val raw = client.signChallenge(digest) + check(raw.size == 64) + val der = DERSequence(arrayOf( + ASN1Integer(BigInteger(1, raw.copyOfRange(0, 32))), + ASN1Integer(BigInteger(1, raw.copyOfRange(32, 64))), + )).encoded + val verifier = Signature.getInstance("NONEwithECDSA") + verifier.initVerify(certificate.publicKey) + verifier.update(digest) + check(verifier.verify(der)) { "Signature verification failed" } + digest[0] = (digest[0].toInt() xor 1).toByte() + verifier.initVerify(certificate.publicKey) + verifier.update(digest) + check(!verifier.verify(der)) { "Changed challenge was incorrectly accepted" } + println("offline-probe startup=${startup + 1} trial=${trial + 1} signatureBytes=64 verifies=true changedChallengeRejected=true") + } + } + println("offline-probe PASS localSignatures=$signatureCount remoteRequests=0 (provider has no network operations)") + } +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/mfi/MfiAuthenticationClient.kt b/shared/src/main/java/com/shilapi/xcertplay/mfi/MfiAuthenticationClient.kt new file mode 100644 index 0000000..0b9db61 --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/mfi/MfiAuthenticationClient.kt @@ -0,0 +1,263 @@ +package com.shilapi.xcertplay.mfi + +import com.shilapi.xcertplay.transport.I2cTransport +import com.shilapi.xcertplay.transport.I2cTransportException + +enum class MfiCertificateType { + MFI, + BAA, +} + +class BaaCertificatePair(leaf: ByteArray, intermediate: ByteArray) { + val leaf: ByteArray = leaf.copyOf() + val intermediate: ByteArray = intermediate.copyOf() + + init { + require(this.leaf.isNotEmpty()) { "BAA leaf certificate must not be empty" } + require(this.intermediate.isNotEmpty()) { "BAA intermediate certificate must not be empty" } + } +} + +/** Common certificate/signing contract implemented by local coprocessors and remote services. */ +interface MfiAuthenticator { + val certificateType: MfiCertificateType + get() = MfiCertificateType.MFI + + fun protocolMajor(): Int + + fun readCertificate( + maximumOutputLength: Int = MfiAuthenticationClient.DEFAULT_MAXIMUM_CERTIFICATE_OUTPUT_LENGTH, + ): ByteArray + + fun signChallenge(challenge: ByteArray): ByteArray + + fun baaCertificates(): BaaCertificatePair = + throw MfiInvalidDataException("Authenticator does not provide BAA certificates") +} + +/** + * Blocking register client for one MFi authentication coprocessor. + * + * It follows the LIVI I2C sequence: a register read is a write-only register selection (with a + * STOP), followed by a separate read-only transaction. Call it from a worker thread. + */ +class MfiAuthenticationClient( + private val transport: I2cTransport, + val address7Bit: Int, +) : MfiAuthenticator { + override val certificateType: MfiCertificateType = MfiCertificateType.MFI + + init { + require(address7Bit in 0x00..0x7f) { "address7Bit must be in 0x00..0x7f" } + } + + /** Returns the raw value advertised by register 0x02; no protocol-major policy is imposed. */ + override fun protocolMajor(): Int = synchronized(COPROCESSOR_LOCK) { + readByte(PROTOCOL_MAJOR_REGISTER) + } + + /** Reads the certificate length from 0x30 and its body through 128-byte register windows. */ + override fun readCertificate( + maximumOutputLength: Int, + ): ByteArray = synchronized(COPROCESSOR_LOCK) { + require(maximumOutputLength in 1..MAX_REGISTER_READ_BYTES) { + "maximumOutputLength must be in 1..$MAX_REGISTER_READ_BYTES" + } + val length = readUnsignedBigEndianShort(CERTIFICATE_LENGTH_REGISTER) + if (length !in 1..maximumOutputLength) { + throw MfiInvalidDataException( + "Certificate length $length is outside 1..$maximumOutputLength", + ) + } + val certificate = ByteArray(length) + var offset = 0 + var register = CERTIFICATE_DATA_REGISTER + while (offset < certificate.size) { + val count = minOf(CERTIFICATE_REGISTER_WINDOW_BYTES, certificate.size - offset) + readRegister(register, count).copyInto(certificate, offset) + offset += count + register += 1 + } + certificate + } + + /** + * Writes a 1..128 byte challenge and returns the dynamically sized signature response. + * + * The protocol-major register intentionally does not participate in this sequence: LIVI's + * implementation uses the same registers for every observed major version. + */ + override fun signChallenge(challenge: ByteArray): ByteArray = synchronized(COPROCESSOR_LOCK) { + if (challenge.size !in MINIMUM_CHALLENGE_BYTES..MAXIMUM_CHALLENGE_BYTES) { + throw MfiInvalidDataException( + "challenge must be $MINIMUM_CHALLENGE_BYTES..$MAXIMUM_CHALLENGE_BYTES bytes", + ) + } + val input = challenge.copyOf() + writeUnsignedBigEndianShort(CHALLENGE_LENGTH_REGISTER, input.size) + writeRegister(CHALLENGE_DATA_REGISTER, input) + writeRegister(AUTH_CONTROL_STATUS_REGISTER, byteArrayOf(AUTH_START_COMMAND.toByte())) + + sleepMillis(INITIAL_AUTH_DELAY_MILLIS) + val deadlineNanos = deadlineAfter(AUTH_TIMEOUT_MILLIS) + while (true) { + try { + if (readByte(AUTH_CONTROL_STATUS_REGISTER) == AUTH_SUCCESS_STATUS) break + } catch (_: I2cTransportException) { + // A polling read can be transiently unavailable while the chip is computing. + } + if (System.nanoTime() >= deadlineNanos) { + throw MfiAuthenticationFailedException(bestEffortErrorCode()) + } + sleepMillis(AUTH_POLL_MILLIS) + } + + val length = readUnsignedBigEndianShort(RESPONSE_LENGTH_REGISTER) + if (length !in 1..MAX_REGISTER_READ_BYTES) { + throw MfiInvalidDataException("Invalid signature length $length") + } + readRegister(RESPONSE_DATA_REGISTER, length) + } + + private fun bestEffortErrorCode(): Int? = try { + selectRegister(ERROR_REGISTER) + val result = transport.transaction(address7Bit, ByteArray(0), 1) + if (result.size == 1) result[0].toInt() and BYTE_MASK else null + } catch (_: I2cTransportException) { + null + } + + private fun readUnsignedBigEndianShort(register: Int): Int { + val bytes = readRegister(register, 2) + return ((bytes[0].toInt() and BYTE_MASK) shl 8) or (bytes[1].toInt() and BYTE_MASK) + } + + private fun writeUnsignedBigEndianShort(register: Int, value: Int) { + require(value in 0..0xffff) { "value must be in 0..65535" } + writeRegister(register, byteArrayOf((value ushr 8).toByte(), value.toByte())) + } + + private fun readByte(register: Int): Int = readRegister(register, 1)[0].toInt() and BYTE_MASK + + private fun readRegister(register: Int, length: Int): ByteArray { + require(length in 1..MAX_REGISTER_READ_BYTES) { "read length must be in 1..$MAX_REGISTER_READ_BYTES" } + return retryIo("read at 0x${register.toString(16).padStart(2, '0')}") { + // The coprocessor can be asleep when the register-select write arrives. CH341 does + // not surface that I2C NACK separately, so retry the complete select/read pair; a + // retry of only the pure-read half can otherwise keep reading the old register. + selectRegisterOnce(register) + val result = transport.transaction(address7Bit, ByteArray(0), length) + if (result.size != length) { + throw MfiInvalidDataException( + "Register 0x${register.toString(16)} returned ${result.size} bytes; expected $length", + ) + } + result.copyOf() + } + } + + private fun selectRegister(register: Int) { + retryIo("register select 0x${register.toString(16).padStart(2, '0')}") { + selectRegisterOnce(register) + } + } + + private fun selectRegisterOnce(register: Int) { + val result = transport.transaction(address7Bit, byteArrayOf(register.toByte()), 0) + if (result.isNotEmpty()) { + throw MfiInvalidDataException("Register select 0x${register.toString(16)} returned data") + } + } + + private fun writeRegister(register: Int, data: ByteArray) { + val request = ByteArray(data.size + 1) + request[0] = register.toByte() + data.copyInto(request, destinationOffset = 1) + retryIo("write at 0x${register.toString(16).padStart(2, '0')}") { + val result = transport.transaction(address7Bit, request, 0) + if (result.isNotEmpty()) { + throw MfiInvalidDataException("Write to register 0x${register.toString(16)} returned data") + } + } + } + + private fun retryIo(operation: String, action: () -> T): T { + val deadlineNanos = deadlineAfter(IO_RETRY_TIMEOUT_MILLIS) + var lastFailure: I2cTransportException? = null + while (true) { + try { + return action() + } catch (failure: I2cTransportException) { + lastFailure = failure + } + if (System.nanoTime() >= deadlineNanos) throw checkNotNull(lastFailure) { operation } + sleepMicros(IO_RETRY_DELAY_MICROS) + } + } + + private fun deadlineAfter(millis: Long): Long { + val now = System.nanoTime() + val delta = millis * NANOS_PER_MILLISECOND + return if (Long.MAX_VALUE - now < delta) Long.MAX_VALUE else now + delta + } + + private fun sleepMicros(micros: Long) { + try { + Thread.sleep(micros / MICROS_PER_MILLISECOND, ((micros % MICROS_PER_MILLISECOND) * NANOS_PER_MICROSECOND).toInt()) + } catch (interrupted: InterruptedException) { + Thread.currentThread().interrupt() + throw MfiAuthenticationFailedException(null, interrupted) + } + } + + private fun sleepMillis(millis: Long) { + try { + Thread.sleep(millis) + } catch (interrupted: InterruptedException) { + Thread.currentThread().interrupt() + throw MfiAuthenticationFailedException(null, interrupted) + } + } + + companion object { + private val COPROCESSOR_LOCK = Any() + const val DEFAULT_MAXIMUM_CERTIFICATE_OUTPUT_LENGTH = 65_525 + private const val MAX_REGISTER_READ_BYTES = 65_525 + private const val BYTE_MASK = 0xff + private const val PROTOCOL_MAJOR_REGISTER = 0x02 + private const val ERROR_REGISTER = 0x05 + private const val AUTH_CONTROL_STATUS_REGISTER = 0x10 + private const val RESPONSE_LENGTH_REGISTER = 0x11 + private const val RESPONSE_DATA_REGISTER = 0x12 + private const val CHALLENGE_LENGTH_REGISTER = 0x20 + private const val CHALLENGE_DATA_REGISTER = 0x21 + private const val CERTIFICATE_LENGTH_REGISTER = 0x30 + private const val CERTIFICATE_DATA_REGISTER = 0x31 + private const val CERTIFICATE_REGISTER_WINDOW_BYTES = 128 + private const val AUTH_START_COMMAND = 0x01 + private const val AUTH_SUCCESS_STATUS = 0x10 + private const val MINIMUM_CHALLENGE_BYTES = 1 + private const val MAXIMUM_CHALLENGE_BYTES = 128 + private const val IO_RETRY_TIMEOUT_MILLIS = 2_000L + private const val IO_RETRY_DELAY_MICROS = 20_000L + private const val INITIAL_AUTH_DELAY_MILLIS = 10L + private const val AUTH_POLL_MILLIS = 10L + private const val AUTH_TIMEOUT_MILLIS = 3_000L + private const val MICROS_PER_MILLISECOND = 1_000L + private const val NANOS_PER_MICROSECOND = 1_000L + private const val NANOS_PER_MILLISECOND = 1_000_000L + } +} + +/** MFi-layer failures that are distinct from [I2cTransportException]. */ +sealed class MfiException(message: String, cause: Throwable? = null) : Exception(message, cause) + +class MfiInvalidDataException(message: String, cause: Throwable? = null) : MfiException(message, cause) + +/** The chip did not complete an authentication request; [errorCode] is best-effort only. */ +class MfiAuthenticationFailedException(val errorCode: Int?, cause: Throwable? = null) : + MfiException( + if (errorCode == null) "MFi authentication failed (error code unavailable)" + else "MFi authentication failed with error 0x${errorCode.toString(16)}", + cause, + ) diff --git a/shared/src/main/java/com/shilapi/xcertplay/mfi/MfiDeviceScanner.kt b/shared/src/main/java/com/shilapi/xcertplay/mfi/MfiDeviceScanner.kt new file mode 100644 index 0000000..9d97262 --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/mfi/MfiDeviceScanner.kt @@ -0,0 +1,155 @@ +package com.shilapi.xcertplay.mfi + +import com.shilapi.xcertplay.transport.I2cTransport +import com.shilapi.xcertplay.transport.I2cTransportException + +/** + * Finds the first responding MFi authentication coprocessor. + * + * LIVI probes `0x10`, then `0x11`, by selecting device-version register `0x00` with STOP and + * issuing a separate pure read. It retries that candidate cycle for at most two seconds and + * returns immediately on the first valid response. Call this blocking scanner off the main thread. + */ +class MfiDeviceScanner( + private val transport: I2cTransport, + candidateAddresses: List = DEFAULT_CANDIDATE_ADDRESSES, + private val probeTimeoutMillis: Long = DEFAULT_PROBE_TIMEOUT_MILLIS, +) { + private val candidateAddresses = candidateAddresses.toList() + + init { + require(probeTimeoutMillis > 0) { "probeTimeoutMillis must be positive" } + } + + fun scan(): MfiDiscoveryResult { + val failures = LinkedHashMap() + val validCandidates = candidateAddresses.filter { address7Bit -> + if (address7Bit in MIN_ADDRESS_7_BIT..MAX_ADDRESS_7_BIT) { + true + } else { + failures[address7Bit] = MfiDiscoveryError.InvalidCandidateAddress(address7Bit) + false + } + } + if (validCandidates.isEmpty()) return MfiDiscoveryResult(null, failures.toFailures()) + + val deadlineNanos = deadlineAfter(probeTimeoutMillis) + while (true) { + for (address7Bit in validCandidates) { + when (val result = readDeviceVersion(address7Bit)) { + is DeviceVersionRead.Success -> { + return MfiDiscoveryResult( + MfiDiscoveredChip( + address7Bit = address7Bit, + writeAddress8Bit = address7Bit shl 1, + readAddress8Bit = (address7Bit shl 1) or READ_BIT, + deviceVersion = result.value, + ), + failures.toFailures(), + ) + } + is DeviceVersionRead.Failure -> failures[address7Bit] = result.error + } + } + if (System.nanoTime() >= deadlineNanos) return MfiDiscoveryResult(null, failures.toFailures()) + if (!sleepMicros(RETRY_DELAY_MICROS)) { + return MfiDiscoveryResult(null, failures.toFailures(), interrupted = true) + } + } + } + + private fun readDeviceVersion(address7Bit: Int): DeviceVersionRead = try { + val selectResponse = transport.transaction(address7Bit, byteArrayOf(DEVICE_VERSION_REGISTER.toByte()), 0) + if (selectResponse.isNotEmpty()) { + DeviceVersionRead.Failure(MfiDiscoveryError.UnexpectedResponseLength(0, selectResponse.size)) + } else { + val value = transport.transaction(address7Bit, ByteArray(0), 1) + if (value.size != 1) { + DeviceVersionRead.Failure(MfiDiscoveryError.UnexpectedResponseLength(1, value.size)) + } else { + val deviceVersion = value[0].toInt() and BYTE_MASK + if (deviceVersion == 0x00 || deviceVersion == 0xff) { + DeviceVersionRead.Failure(MfiDiscoveryError.InvalidDeviceVersion(deviceVersion)) + } else { + DeviceVersionRead.Success(deviceVersion) + } + } + } + } catch (error: I2cTransportException) { + DeviceVersionRead.Failure(MfiDiscoveryError.Transport(error)) + } + + private fun deadlineAfter(millis: Long): Long { + val now = System.nanoTime() + val delta = millis * NANOS_PER_MILLISECOND + return if (Long.MAX_VALUE - now < delta) Long.MAX_VALUE else now + delta + } + + private fun sleepMicros(micros: Long): Boolean = try { + Thread.sleep(micros / MICROS_PER_MILLISECOND, ((micros % MICROS_PER_MILLISECOND) * NANOS_PER_MICROSECOND).toInt()) + true + } catch (_: InterruptedException) { + Thread.currentThread().interrupt() + false + } + + private fun LinkedHashMap.toFailures(): List = + entries.map { (address7Bit, error) -> MfiDiscoveryFailure(address7Bit, error) } + + private sealed class DeviceVersionRead { + data class Success(val value: Int) : DeviceVersionRead() + + data class Failure(val error: MfiDiscoveryError) : DeviceVersionRead() + } + + companion object { + /** Documented MFi candidates in LIVI probe order. */ + val DEFAULT_CANDIDATE_ADDRESSES = listOf(0x10, 0x11) + + private const val MIN_ADDRESS_7_BIT = 0x00 + private const val MAX_ADDRESS_7_BIT = 0x7f + private const val DEVICE_VERSION_REGISTER = 0x00 + private const val READ_BIT = 0x01 + private const val BYTE_MASK = 0xff + private const val DEFAULT_PROBE_TIMEOUT_MILLIS = 2_000L + // A first NACK can merely wake a sleeping authentication coprocessor. + private const val RETRY_DELAY_MICROS = 20_000L + private const val MICROS_PER_MILLISECOND = 1_000L + private const val NANOS_PER_MICROSECOND = 1_000L + private const val NANOS_PER_MILLISECOND = 1_000_000L + } +} + +/** Structured outcome of a first-match MFi device probe. */ +data class MfiDiscoveryResult( + val chip: MfiDiscoveredChip?, + val failures: List, + val interrupted: Boolean = false, +) + +/** The first candidate that returned a one-byte device version. */ +data class MfiDiscoveredChip( + val address7Bit: Int, + val writeAddress8Bit: Int, + val readAddress8Bit: Int, + val deviceVersion: Int, +) + +/** The most recent failure retained for a probe candidate. */ +data class MfiDiscoveryFailure( + val address7Bit: Int, + val error: MfiDiscoveryError, +) + +/** Failure categories retained for caller-side diagnostics without a logging dependency. */ +sealed class MfiDiscoveryError { + data class InvalidCandidateAddress(val actual: Int) : MfiDiscoveryError() + + data class Transport(val cause: I2cTransportException) : MfiDiscoveryError() + + data class UnexpectedResponseLength(val expected: Int, val actual: Int) : MfiDiscoveryError() + + /** CH341 returns all-zero/all-one bus data when no usable coprocessor answered. */ + data class InvalidDeviceVersion(val actual: Int) : MfiDiscoveryError() + +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/mfi/MfiSelfCheck.kt b/shared/src/main/java/com/shilapi/xcertplay/mfi/MfiSelfCheck.kt new file mode 100644 index 0000000..2fea5db --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/mfi/MfiSelfCheck.kt @@ -0,0 +1,55 @@ +package com.shilapi.xcertplay.mfi + +import com.shilapi.xcertplay.transport.I2cTransport +import com.shilapi.xcertplay.transport.I2cTransportException + +/** Transport-independent MFi presence check for the documented address candidates. */ +class MfiSelfCheck( + private val transport: I2cTransport, +) { + fun run(): MfiSelfCheckResult { + val discovery = MfiDeviceScanner(transport).scan() + val chip = discovery.chip ?: return MfiSelfCheckResult(discovery, null) + return MfiSelfCheckResult( + discovery = discovery, + chip = MfiSelfCheckChip( + address7Bit = chip.address7Bit, + deviceVersion = chip.deviceVersion, + protocolMajor = try { + MfiProtocolMajorResult.Value( + chip.address7Bit, + MfiAuthenticationClient(transport, chip.address7Bit).protocolMajor(), + ) + } catch (error: MfiException) { + MfiProtocolMajorResult.MfiFailure(chip.address7Bit, error) + } catch (error: I2cTransportException) { + MfiProtocolMajorResult.TransportFailure(chip.address7Bit, error) + }, + ), + ) + } +} + +data class MfiSelfCheckResult( + val discovery: MfiDiscoveryResult, + val chip: MfiSelfCheckChip?, +) + +data class MfiSelfCheckChip( + val address7Bit: Int, + val deviceVersion: Int, + val protocolMajor: MfiProtocolMajorResult, +) + +sealed class MfiProtocolMajorResult { + abstract val address7Bit: Int + + data class Value(override val address7Bit: Int, val major: Int) : MfiProtocolMajorResult() + + data class MfiFailure(override val address7Bit: Int, val error: MfiException) : MfiProtocolMajorResult() + + data class TransportFailure( + override val address7Bit: Int, + val error: I2cTransportException, + ) : MfiProtocolMajorResult() +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/mfi/RemoteMfiAuthenticationClient.kt b/shared/src/main/java/com/shilapi/xcertplay/mfi/RemoteMfiAuthenticationClient.kt new file mode 100644 index 0000000..8ca6dd4 --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/mfi/RemoteMfiAuthenticationClient.kt @@ -0,0 +1,356 @@ +package com.shilapi.xcertplay.mfi + +import java.io.ByteArrayOutputStream +import java.io.IOException +import java.net.HttpURLConnection +import java.net.URL +import java.nio.charset.StandardCharsets +import java.security.MessageDigest +import java.util.Base64 +import java.util.UUID +import com.shilapi.xcertplay.iap2.message.Iap2AuthenticationMessages + +/** Blocking HTTP implementation of the MFI certificate and challenge-signing operations. */ +class RemoteMfiAuthenticationClient( + serverAddress: String, + token: String? = null, + private val connectTimeoutMillis: Int = DEFAULT_CONNECT_TIMEOUT_MILLIS, + private val readTimeoutMillis: Int = DEFAULT_READ_TIMEOUT_MILLIS, + private val maximumAttempts: Int = DEFAULT_MAXIMUM_ATTEMPTS, +) : MfiAuthenticator { + private data class CertificateInfo( + val type: MfiCertificateType, + val protocolMajor: Int, + val wireCertificate: ByteArray, + val iap2Certificate: ByteArray, + val baaCertificates: BaaCertificatePair?, + ) + + private data class HttpResponse( + val statusCode: Int, + val body: String, + ) + + private val baseAddress = serverAddress.trim().trimEnd('/') + private val bearerToken = token?.takeIf { it.isNotEmpty() } + private val operationLock = Any() + private var certificateInfo: CertificateInfo? = null + + init { + require(baseAddress.isNotEmpty()) { "Remote MFI server address must not be blank" } + require(baseAddress.startsWith("http://") || baseAddress.startsWith("https://")) { + "Remote MFI server address must use http:// or https://" + } + require(connectTimeoutMillis > 0) { "connectTimeoutMillis must be positive" } + require(readTimeoutMillis > 0) { "readTimeoutMillis must be positive" } + require(maximumAttempts > 0) { "maximumAttempts must be positive" } + } + + /** Resets the remote authentication session and invalidates the cached certificate response. */ + fun reset(): Unit = synchronized(operationLock) { + certificateInfo = null + request( + method = "POST", + path = RESET_PATH, + requestBody = "{}", + retry = false, + ) + Unit + } + + override fun protocolMajor(): Int = synchronized(operationLock) { + loadCertificateInfo().protocolMajor + } + + override val certificateType: MfiCertificateType + get() = synchronized(operationLock) { + loadCertificateInfo().type + } + + override fun readCertificate(maximumOutputLength: Int): ByteArray = synchronized(operationLock) { + require(maximumOutputLength in 1..MAXIMUM_RESPONSE_BYTES) { + "maximumOutputLength must be in 1..$MAXIMUM_RESPONSE_BYTES" + } + val certificate = loadCertificateInfo().iap2Certificate + if (certificate.size !in 1..maximumOutputLength) { + throw MfiInvalidDataException( + "Remote certificate length ${certificate.size} is outside 1..$maximumOutputLength", + ) + } + certificate.copyOf() + } + + override fun baaCertificates(): BaaCertificatePair = synchronized(operationLock) { + loadCertificateInfo().baaCertificates + ?: throw MfiInvalidDataException("Remote MFI service is not using BAA certificates") + } + + override fun signChallenge(challenge: ByteArray): ByteArray = synchronized(operationLock) { + if (challenge.size !in MINIMUM_CHALLENGE_BYTES..MAXIMUM_CHALLENGE_BYTES) { + throw MfiInvalidDataException( + "challenge must be $MINIMUM_CHALLENGE_BYTES..$MAXIMUM_CHALLENGE_BYTES bytes", + ) + } + val requestId = UUID.randomUUID().toString() + val encodedChallenge = Base64.getEncoder().encodeToString(challenge.copyOf()) + val response = request( + method = "POST", + path = SIGN_PATH, + requestBody = "{\"challenge\":\"$encodedChallenge\",\"requestId\":\"$requestId\"}", + retry = true, + ) + val signature = decodeBase64(RemoteMfiJson.string(response, "signature"), "signature") + if (signature.isEmpty() || signature.size > MAXIMUM_RESPONSE_BYTES) { + throw MfiInvalidDataException("Invalid remote signature length ${signature.size}") + } + signature + } + + private fun loadCertificateInfo(): CertificateInfo { + certificateInfo?.let { return it } + val response = request( + method = "GET", + path = CERTIFICATE_PATH, + requestBody = null, + retry = true, + ) + val protocolMajor = RemoteMfiJson.integer(response, "protocolMajor") + if (protocolMajor !in 0..0xff) { + throw MfiInvalidDataException("Invalid remote MFI protocol major $protocolMajor") + } + val typeText = RemoteMfiJson.optionalString(response, "type") ?: "mfi" + val type = when (typeText.lowercase()) { + "mfi" -> MfiCertificateType.MFI + "baa" -> MfiCertificateType.BAA + else -> throw MfiInvalidDataException("Unsupported remote MFI certificate type '$typeText'") + } + val certificate = decodeBase64( + RemoteMfiJson.string(response, "certificate"), + "certificate", + ) + if (certificate.isEmpty() || certificate.size > MAXIMUM_RESPONSE_BYTES) { + throw MfiInvalidDataException("Invalid remote certificate length ${certificate.size}") + } + val expectedDigest = decodeSha256(RemoteMfiJson.string(response, "certificateSha256")) + val actualDigest = MessageDigest.getInstance("SHA-256").digest(certificate) + if (!MessageDigest.isEqual(expectedDigest, actualDigest)) { + throw MfiInvalidDataException("Remote certificate SHA-256 does not match certificateSha256") + } + val baaCertificates = if (type == MfiCertificateType.BAA) { + parseBaaCertificatePackage(certificate) + } else { + null + } + val iap2Certificate = if (baaCertificates != null) { + Iap2AuthenticationMessages.baaCertificatePackage( + baaCertificates.leaf, + baaCertificates.intermediate, + ).payload + } else { + certificate.copyOf() + } + if (iap2Certificate.size > MAXIMUM_RESPONSE_BYTES) { + throw MfiInvalidDataException("Remote iAP2 certificate payload is too large") + } + return CertificateInfo( + type = type, + protocolMajor = protocolMajor, + wireCertificate = certificate.copyOf(), + iap2Certificate = iap2Certificate, + baaCertificates = baaCertificates, + ).also { certificateInfo = it } + } + + private fun parseBaaCertificatePackage(encoded: ByteArray): BaaCertificatePair { + if (encoded.size < BAA_PACKAGE_HEADER_BYTES) { + throw MfiInvalidDataException("BAA certificate package is too short") + } + val leafLength = readU32(encoded, 0) + val intermediateLength = readU32(encoded, 4) + if (leafLength <= 0 || intermediateLength <= 0 || + BAA_PACKAGE_HEADER_BYTES + leafLength + intermediateLength != encoded.size) { + throw MfiInvalidDataException("BAA certificate package has invalid lengths") + } + val leafEnd = BAA_PACKAGE_HEADER_BYTES + leafLength + return BaaCertificatePair( + leaf = encoded.copyOfRange(BAA_PACKAGE_HEADER_BYTES, leafEnd), + intermediate = encoded.copyOfRange(leafEnd, encoded.size), + ) + } + + private fun readU32(bytes: ByteArray, offset: Int): Int = + ((bytes[offset].toInt() and 0xff) shl 24) or + ((bytes[offset + 1].toInt() and 0xff) shl 16) or + ((bytes[offset + 2].toInt() and 0xff) shl 8) or + (bytes[offset + 3].toInt() and 0xff) + + private fun request( + method: String, + path: String, + requestBody: String?, + retry: Boolean, + ): String { + var lastFailure: Throwable? = null + val attempts = if (retry) maximumAttempts else 1 + repeat(attempts) { attempt -> + try { + val response = execute(method, path, requestBody) + if (response.statusCode in 200..299) return response.body + val detail = RemoteMfiJson.optionalString(response.body, "detail") + ?.takeIf { it.isNotBlank() } + ?: "HTTP ${response.statusCode}" + val failure = RemoteMfiHttpException(response.statusCode, detail) + if (attempt + 1 >= attempts || !isRetryable(response.statusCode)) throw failure + lastFailure = failure + } catch (failure: IOException) { + lastFailure = failure + if (attempt + 1 >= attempts) { + throw RemoteMfiException("Remote MFI request failed: ${failure.message}", failure) + } + } + } + throw RemoteMfiException("Remote MFI request failed", lastFailure) + } + + private fun execute(method: String, path: String, requestBody: String?): HttpResponse { + val connection = URL(baseAddress + path).openConnection() as HttpURLConnection + try { + connection.requestMethod = method + connection.connectTimeout = connectTimeoutMillis + connection.readTimeout = readTimeoutMillis + connection.instanceFollowRedirects = false + connection.useCaches = false + connection.setRequestProperty("Accept", JSON_CONTENT_TYPE) + bearerToken?.let { connection.setRequestProperty("Authorization", "Bearer $it") } + if (requestBody != null) { + val bodyBytes = requestBody.toByteArray(StandardCharsets.UTF_8) + connection.doOutput = true + connection.setRequestProperty("Content-Type", JSON_CONTENT_TYPE) + connection.setFixedLengthStreamingMode(bodyBytes.size) + connection.outputStream.use { it.write(bodyBytes) } + } + val statusCode = connection.responseCode + val stream = if (statusCode in 200..299) connection.inputStream else connection.errorStream + val responseBody = stream?.use(::readUtf8Limited).orEmpty() + return HttpResponse(statusCode, responseBody) + } finally { + connection.disconnect() + } + } + + private fun readUtf8Limited(input: java.io.InputStream): String { + val output = ByteArrayOutputStream() + val buffer = ByteArray(8_192) + var total = 0 + while (true) { + val count = input.read(buffer) + if (count < 0) break + total += count + if (total > MAXIMUM_HTTP_BODY_BYTES) { + throw IOException("Remote MFI response exceeds $MAXIMUM_HTTP_BODY_BYTES bytes") + } + output.write(buffer, 0, count) + } + return output.toString(StandardCharsets.UTF_8.name()) + } + + private fun decodeBase64(encoded: String, field: String): ByteArray = try { + Base64.getDecoder().decode(encoded) + } catch (failure: IllegalArgumentException) { + throw MfiInvalidDataException("Remote $field is not valid base64", failure) + } + + private fun decodeSha256(hex: String): ByteArray { + if (hex.length != SHA256_HEX_LENGTH || hex.any { it.digitToIntOrNull(16) == null }) { + throw MfiInvalidDataException("certificateSha256 must contain 64 hexadecimal characters") + } + return ByteArray(SHA256_BYTES) { index -> + hex.substring(index * 2, index * 2 + 2).toInt(16).toByte() + } + } + + private fun isRetryable(statusCode: Int): Boolean = + statusCode == HttpURLConnection.HTTP_CLIENT_TIMEOUT || + statusCode == 429 || + statusCode in 500..599 + + companion object { + private const val CERTIFICATE_PATH = "/mfi/certificate" + private const val SIGN_PATH = "/mfi/sign" + private const val RESET_PATH = "/mfi/reset" + private const val JSON_CONTENT_TYPE = "application/json; charset=utf-8" + private const val DEFAULT_CONNECT_TIMEOUT_MILLIS = 5_000 + private const val DEFAULT_READ_TIMEOUT_MILLIS = 10_000 + private const val DEFAULT_MAXIMUM_ATTEMPTS = 2 + private const val MINIMUM_CHALLENGE_BYTES = 1 + private const val MAXIMUM_CHALLENGE_BYTES = 128 + private const val MAXIMUM_RESPONSE_BYTES = 65_525 + private const val MAXIMUM_HTTP_BODY_BYTES = 2 * 1024 * 1024 + private const val SHA256_BYTES = 32 + private const val SHA256_HEX_LENGTH = SHA256_BYTES * 2 + private const val BAA_PACKAGE_HEADER_BYTES = 8 + } +} + +class RemoteMfiException(message: String, cause: Throwable? = null) : MfiException(message, cause) + +class RemoteMfiHttpException( + val statusCode: Int, + val detail: String, +) : MfiException("Remote MFI request failed with HTTP $statusCode: $detail") + +/** Minimal flat-object JSON reader for the remote MFI wire format. */ +internal object RemoteMfiJson { + fun string(json: String, name: String): String = optionalString(json, name) + ?: throw MfiInvalidDataException("Remote MFI response is missing '$name'") + + fun optionalString(json: String, name: String): String? { + val match = stringPattern(name).find(json) ?: return null + return decodeJsonString(match.groupValues[1]) + } + + fun integer(json: String, name: String): Int { + val match = integerPattern(name).find(json) + ?: throw MfiInvalidDataException("Remote MFI response is missing '$name'") + return match.groupValues[1].toIntOrNull() + ?: throw MfiInvalidDataException("Remote MFI '$name' is not a valid integer") + } + + private fun stringPattern(name: String): Regex = + Regex("\\\"${Regex.escape(name)}\\\"\\s*:\\s*\\\"((?:\\\\.|[^\\\"\\\\])*)\\\"") + + private fun integerPattern(name: String): Regex = + Regex("\\\"${Regex.escape(name)}\\\"\\s*:\\s*(-?\\d+)") + + private fun decodeJsonString(encoded: String): String { + val result = StringBuilder(encoded.length) + var index = 0 + while (index < encoded.length) { + val character = encoded[index++] + if (character != '\\') { + result.append(character) + continue + } + if (index >= encoded.length) throw MfiInvalidDataException("Invalid JSON string escape") + when (val escaped = encoded[index++]) { + '\"', '\\', '/' -> result.append(escaped) + 'b' -> result.append('\b') + 'f' -> result.append('\u000c') + 'n' -> result.append('\n') + 'r' -> result.append('\r') + 't' -> result.append('\t') + 'u' -> { + if (index + 4 > encoded.length) { + throw MfiInvalidDataException("Invalid JSON unicode escape") + } + val value = encoded.substring(index, index + 4).toIntOrNull(16) + ?: throw MfiInvalidDataException("Invalid JSON unicode escape") + result.append(value.toChar()) + index += 4 + } + else -> throw MfiInvalidDataException("Unsupported JSON string escape \\$escaped") + } + } + return result.toString() + } +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/network/CarPlayBonjour.kt b/shared/src/main/java/com/shilapi/xcertplay/network/CarPlayBonjour.kt new file mode 100644 index 0000000..1831b2a --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/network/CarPlayBonjour.kt @@ -0,0 +1,555 @@ +package com.shilapi.xcertplay.network + +import android.content.Context +import android.net.nsd.NsdManager +import android.net.nsd.NsdServiceInfo +import android.net.wifi.WifiManager +import android.os.Build +import android.util.Log +import com.shilapi.xcertplay.airplay.AirPlayConfig +import com.shilapi.xcertplay.airplay.AirPlayIdentity +import java.io.BufferedReader +import java.io.Closeable +import java.io.IOException +import java.io.InputStreamReader +import java.net.Inet4Address +import java.net.Inet6Address +import java.net.InetAddress +import java.net.InetSocketAddress +import java.net.Socket +import java.nio.charset.StandardCharsets +import java.util.concurrent.ConcurrentHashMap +import java.util.concurrent.CountDownLatch +import java.util.concurrent.LinkedBlockingQueue +import java.util.concurrent.TimeUnit +import java.util.concurrent.atomic.AtomicInteger +import java.util.concurrent.atomic.AtomicReference +import javax.jmdns.JmDNS +import javax.jmdns.ServiceEvent +import javax.jmdns.ServiceInfo +import javax.jmdns.ServiceListener + +data class CarPlayBonjourEndpoint( + val serviceName: String, + val host: String, + val port: Int, + val bluetoothId: String?, +) + +sealed interface CarPlayBonjourEvent { + data class Resolved(val endpoint: CarPlayBonjourEndpoint) : CarPlayBonjourEvent + + data class Probed( + val endpoint: CarPlayBonjourEndpoint, + val attempts: Int, + val statusLine: String?, + val error: IOException?, + ) : CarPlayBonjourEvent +} + +/** Pure protocol values shared by the Android runtime and JVM tests. */ +object CarPlayBonjourProtocol { + fun airPlayTxtRecords( + config: AirPlayConfig, + identity: AirPlayIdentity, + ): Map = linkedMapOf( + "deviceid" to config.deviceId, + "features" to "0x44540380,0x61", + "flags" to "0x4", + "model" to config.model, + "srcvers" to config.sourceVersion, + "protovers" to "1.1", + "pi" to identity.pairingId, + "pk" to identity.publicKeyHex, + ) + + fun connectProbeRequest( + host: String, + port: Int, + sourceVersion: String, + deviceId: String, + ): String { + val unbracketedHost = host.removeSurrounding("[", "]").substringBefore('%') + require(unbracketedHost.isNotBlank()) { "host must not be blank" } + require(port in 1..65535) { "port must be in 1..65535" } + require(sourceVersion.isNotEmpty()) { "sourceVersion must not be empty" } + require('\r' !in sourceVersion && '\n' !in sourceVersion) { + "sourceVersion must not contain a line break" + } + require('\r' !in unbracketedHost && '\n' !in unbracketedHost) { + "host must not contain a line break" + } + val receiverDeviceId = deviceId.replace(":", "") + require(receiverDeviceId.isNotEmpty()) { "deviceId must contain a hexadecimal value" } + require('\r' !in receiverDeviceId && '\n' !in receiverDeviceId) { + "deviceId must not contain a line break" + } + val hostHeader = if (':' in unbracketedHost) { + "[$unbracketedHost]:$port" + } else { + "$unbracketedHost:$port" + } + return "GET /ctrl-int/1/connect HTTP/1.1\r\n" + + "Host: $hostHeader\r\n" + + "User-Agent: AirPlay/$sourceVersion\r\n" + + "AirPlay-Receiver-Device-ID: $receiverDeviceId\r\n" + + "Connection: close\r\n" + + "\r\n" + } +} + +/** + * Publishes the accessory AirPlay service and discovers the iPhone's CarPlay control service. + * + * The NSD callbacks only enqueue work. Resolution, probing, and [onEvent] all run on the worker + * started by [start], so a blocking consumer callback never runs on the caller or main thread. + */ +class CarPlayBonjour( + context: Context, + private val config: AirPlayConfig, + private val identity: AirPlayIdentity, + private val advertisedHost: String? = null, + private val useInterfaceMdns: Boolean = false, + private val onEvent: (CarPlayBonjourEvent) -> Unit = {}, +) : Closeable { + private val nsdManager = (context.applicationContext ?: context) + .getSystemService(Context.NSD_SERVICE) as NsdManager + private val services = LinkedBlockingQueue() + private val interfaceServices = LinkedBlockingQueue>() + private val seenServices = ConcurrentHashMap.newKeySet() + private val lifecycleLock = Any() + private val localAdvertisedAddress = advertisedHostAddress() + private val multicastLock = (context.applicationContext ?: context) + .getSystemService(WifiManager::class.java) + .createMulticastLock("carplay-bonjour").apply { setReferenceCounted(false) } + + private var started = false + @Volatile + private var closed = false + private var registrationRequested = false + private var discoveryRequested = false + @Volatile + private var worker: Thread? = null + @Volatile + private var activeSocket: Socket? = null + private var interfaceMdns: JmDNS? = null + + private val interfaceListener = object : ServiceListener { + override fun serviceAdded(event: ServiceEvent) { + if (!closed) event.dns.requestServiceInfo(event.type, event.name, true) + } + + override fun serviceRemoved(event: ServiceEvent) { + seenServices.remove(event.name) + } + + override fun serviceResolved(event: ServiceEvent) { + if (closed) return + val info = event.info + // Keep the HTTP probe in the same address family as its bound source. + val address = info.inetAddresses.firstOrNull { + (it is Inet4Address) == (localAdvertisedAddress is Inet4Address) + }?.let(::applyLocalScope) ?: return + if (info.port !in 1..65535 || !seenServices.add(event.name)) return + val endpoint = CarPlayBonjourEndpoint( + event.name, address.hostAddress ?: return, info.port, + info.getPropertyString("id"), + ) + interfaceServices.offer(endpoint to address) + } + } + + private val registrationListener = object : NsdManager.RegistrationListener { + override fun onServiceRegistered(serviceInfo: NsdServiceInfo) = Unit + + override fun onRegistrationFailed(serviceInfo: NsdServiceInfo, errorCode: Int) { + Log.w(TAG, "AirPlay NSD registration failed code=$errorCode") + } + + override fun onServiceUnregistered(serviceInfo: NsdServiceInfo) = Unit + + override fun onUnregistrationFailed(serviceInfo: NsdServiceInfo, errorCode: Int) { + Log.w(TAG, "AirPlay NSD unregistration failed code=$errorCode") + } + } + + private val discoveryListener = object : NsdManager.DiscoveryListener { + override fun onStartDiscoveryFailed(serviceType: String, errorCode: Int) { + Log.w(TAG, "CarPlay control discovery failed code=$errorCode") + } + + override fun onStopDiscoveryFailed(serviceType: String, errorCode: Int) { + Log.w(TAG, "CarPlay control discovery stop failed code=$errorCode") + } + + override fun onDiscoveryStarted(serviceType: String) = Unit + + override fun onDiscoveryStopped(serviceType: String) = Unit + + override fun onServiceFound(serviceInfo: NsdServiceInfo) { + if (closed) return + val name = serviceInfo.serviceName ?: return + val type = serviceInfo.serviceType ?: CARPLAY_CONTROL_SERVICE_TYPE + val key = "$type|$name" + if (!seenServices.add(key)) return + services.offer(serviceInfo) + } + + override fun onServiceLost(serviceInfo: NsdServiceInfo) { + val name = serviceInfo.serviceName ?: return + val type = serviceInfo.serviceType ?: CARPLAY_CONTROL_SERVICE_TYPE + seenServices.remove("$type|$name") + } + } + + /** Starts publication and discovery. Calling this more than once is harmless. */ + fun start() { + synchronized(lifecycleLock) { + check(!closed) { "CarPlayBonjour is closed" } + if (started) return + started = true + try { + multicastLock.acquire() + if (useInterfaceMdns) { + val address = requireNotNull(localAdvertisedAddress) { + "Interface mDNS requires a local advertised address" + } + val dns = JmDNS.create(address, "carplay-${config.deviceId.replace(":", "")}") + interfaceMdns = dns + dns.addServiceListener("$CARPLAY_CONTROL_SERVICE_TYPE.local.", interfaceListener) + dns.registerService(ServiceInfo.create( + "$AIRPLAY_SERVICE_TYPE.local.", config.deviceName, config.port, + 0, 0, CarPlayBonjourProtocol.airPlayTxtRecords(config, identity), + )) + } else { + registerAirPlay() + registrationRequested = true + nsdManager.discoverServices( + CARPLAY_CONTROL_SERVICE_TYPE, + NsdManager.PROTOCOL_DNS_SD, + discoveryListener, + ) + discoveryRequested = true + } + worker = Thread(::runWorker, WORKER_NAME).apply { + isDaemon = true + start() + } + } catch (error: Exception) { + closed = true + if (registrationRequested) { + registrationRequested = false + runCatching { nsdManager.unregisterService(registrationListener) } + } + if (discoveryRequested) { + discoveryRequested = false + runCatching { nsdManager.stopServiceDiscovery(discoveryListener) } + } + worker?.interrupt() + worker = null + runCatching { interfaceMdns?.close() } + interfaceMdns = null + if (multicastLock.isHeld) multicastLock.release() + throw error + } + } + } + + override fun close() { + val workerToJoin: Thread? + val dnsToClose: JmDNS? + synchronized(lifecycleLock) { + if (closed) return + closed = true + if (registrationRequested) { + registrationRequested = false + runCatching { nsdManager.unregisterService(registrationListener) } + } + if (discoveryRequested) { + discoveryRequested = false + runCatching { nsdManager.stopServiceDiscovery(discoveryListener) } + } + activeSocket?.let { socket -> runCatching { socket.close() } } + activeSocket = null + services.clear() + interfaceServices.clear() + dnsToClose = interfaceMdns + interfaceMdns = null + workerToJoin = worker + worker = null + workerToJoin?.interrupt() + if (multicastLock.isHeld) multicastLock.release() + } + runCatching { dnsToClose?.close() } + workerToJoin?.let(::joinWorker) + } + + @Suppress("DEPRECATION") + private fun registerAirPlay() { + val serviceInfo = NsdServiceInfo().apply { + serviceName = config.deviceName + serviceType = AIRPLAY_SERVICE_TYPE + port = config.port + CarPlayBonjourProtocol.airPlayTxtRecords(config, identity).forEach { (key, value) -> + setAttribute(key, value) + } + localAdvertisedAddress?.let(::setHost) + } + nsdManager.registerService( + serviceInfo, + NsdManager.PROTOCOL_DNS_SD, + registrationListener, + ) + } + + private fun advertisedHostAddress(): InetAddress? { + val value = advertisedHost?.trim()?.takeIf { it.isNotEmpty() } ?: return null + val address = try { + InetAddress.getByName(value.removeSurrounding("[", "]")) + } catch (error: Exception) { + throw IllegalArgumentException("Invalid advertised host: $value", error) + } + require(!address.isLoopbackAddress) { + "advertisedHost must not be a loopback address" + } + require(address !is Inet6Address || address.isLinkLocalAddress) { + "advertisedHost must be link-local IPv6 or IPv4" + } + return address + } + + private fun runWorker() { + while (!closed) { + if (useInterfaceMdns) { + try { + val (endpoint, address) = interfaceServices.poll( + WORKER_POLL_MILLIS, TimeUnit.MILLISECONDS, + ) ?: continue + emit(CarPlayBonjourEvent.Resolved(endpoint)) + probe(endpoint, address)?.let(::emit) + } catch (_: InterruptedException) { + return + } catch (error: Exception) { + if (!closed) Log.w(TAG, "Interface CarPlay service handling failed", error) + } + continue + } + val service = try { + services.poll(WORKER_POLL_MILLIS, TimeUnit.MILLISECONDS) + } catch (_: InterruptedException) { + return + } ?: continue + if (closed) return + try { + handleService(service) + } catch (_: InterruptedException) { + return + } catch (error: Exception) { + if (!closed) Log.w(TAG, "CarPlay control service handling failed", error) + } + } + } + + private fun handleService(service: NsdServiceInfo) { + val resolved = resolveWithRetry(service) ?: return + val address = preferredAddress(resolved) ?: return + val port = resolved.port + if (port !in 1..65535) return + val serviceName = resolved.serviceName ?: service.serviceName ?: return + val host = address.hostAddress ?: return + val bluetoothId = resolved.attributes + ?.get("id") + ?.let(::decodeTxtValue) + ?.takeIf { it.isNotBlank() } + val endpoint = CarPlayBonjourEndpoint( + serviceName = serviceName, + host = host, + port = port, + bluetoothId = bluetoothId, + ) + emit(CarPlayBonjourEvent.Resolved(endpoint)) + probe(endpoint, address)?.let(::emit) + } + + @Suppress("DEPRECATION") + private fun resolveWithRetry(service: NsdServiceInfo): NsdServiceInfo? { + repeat(RESOLVE_ATTEMPTS) { attempt -> + if (closed) return null + val latch = CountDownLatch(1) + val resolved = AtomicReference() + val failure = AtomicInteger(FAILURE_NONE) + val listener = object : NsdManager.ResolveListener { + override fun onServiceResolved(serviceInfo: NsdServiceInfo) { + resolved.set(serviceInfo) + latch.countDown() + } + + override fun onResolveFailed(serviceInfo: NsdServiceInfo, errorCode: Int) { + failure.set(errorCode) + latch.countDown() + } + } + val submitted = try { + synchronized(lifecycleLock) { + if (closed) { + false + } else { + nsdManager.resolveService(service, listener) + true + } + } + } catch (error: RuntimeException) { + Log.w(TAG, "CarPlay control service resolution failed", error) + false + } + if (!submitted) return null + val completed = try { + latch.await(RESOLVE_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS) + } catch (error: InterruptedException) { + throw error + } + if (!completed) { + Log.w(TAG, "CarPlay control service resolution timed out") + return null + } + resolved.get()?.let { return it } + if (failure.get() != NsdManager.FAILURE_ALREADY_ACTIVE) { + Log.w(TAG, "CarPlay control service resolution failed code=${failure.get()}") + return null + } + if (!closed && attempt + 1 < RESOLVE_ATTEMPTS) { + Thread.sleep(RESOLVE_RETRY_DELAY_MILLIS) + } + } + return null + } + + @Suppress("DEPRECATION") + private fun preferredAddress(serviceInfo: NsdServiceInfo): InetAddress? { + val addresses = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) { + serviceInfo.hostAddresses.orEmpty() + } else { + listOfNotNull(serviceInfo.host) + } + return addresses.firstOrNull { it is Inet6Address && it.isLinkLocalAddress } + ?.let(::applyLocalScope) + ?: addresses.firstOrNull { it is Inet4Address } + ?: addresses.firstOrNull { it is Inet6Address } + ?: addresses.firstOrNull() + } + + private fun applyLocalScope(address: InetAddress): InetAddress { + val scope = (localAdvertisedAddress as? Inet6Address)?.scopeId ?: return address + if (address !is Inet6Address || address.scopeId != 0) return address + return try { + Inet6Address.getByAddress(null, address.address, scope) + } catch (_: Exception) { + address + } + } + + private fun probe( + endpoint: CarPlayBonjourEndpoint, + address: InetAddress, + ): CarPlayBonjourEvent.Probed? { + var lastError: IOException? = null + repeat(MAX_PROBE_ATTEMPTS) { attempt -> + if (closed) return null + try { + val statusLine = probeOnce(address, endpoint.port) + return CarPlayBonjourEvent.Probed( + endpoint = endpoint, + attempts = attempt + 1, + statusLine = statusLine, + error = null, + ) + } catch (error: IOException) { + lastError = error + } catch (error: RuntimeException) { + lastError = IOException("AirPlay control probe failed", error) + } + if (closed) return null + if (attempt + 1 < MAX_PROBE_ATTEMPTS) { + Thread.sleep(PROBE_RETRY_DELAY_MILLIS) + } + } + return CarPlayBonjourEvent.Probed( + endpoint = endpoint, + attempts = MAX_PROBE_ATTEMPTS, + statusLine = null, + error = lastError, + ) + } + + private fun probeOnce(address: InetAddress, port: Int): String { + val socket = Socket() + synchronized(lifecycleLock) { + check(!closed) { "CarPlayBonjour is closed" } + activeSocket = socket + } + try { + localAdvertisedAddress?.let { socket.bind(InetSocketAddress(it, 0)) } + socket.connect(InetSocketAddress(address, port), CONNECT_TIMEOUT_MILLIS) + socket.soTimeout = READ_TIMEOUT_MILLIS + val host = address.hostAddress + ?: throw IOException("AirPlay control service has no host address") + val request = CarPlayBonjourProtocol.connectProbeRequest( + host = host, + port = port, + sourceVersion = config.sourceVersion, + deviceId = config.deviceId, + ) + val output = socket.getOutputStream() + output.write(request.toByteArray(StandardCharsets.US_ASCII)) + output.flush() + val reader = BufferedReader( + InputStreamReader(socket.getInputStream(), StandardCharsets.US_ASCII), + ) + return reader.readLine() + ?: throw IOException("AirPlay control probe returned no status line") + } finally { + synchronized(lifecycleLock) { + if (activeSocket === socket) activeSocket = null + } + runCatching { socket.close() } + } + } + + private fun emit(event: CarPlayBonjourEvent) { + if (closed) return + try { + onEvent(event) + } catch (error: RuntimeException) { + Log.w(TAG, "CarPlay Bonjour event callback failed", error) + } + } + + private fun decodeTxtValue(value: ByteArray): String = + String(value, StandardCharsets.UTF_8).trimEnd('\u0000') + + private fun joinWorker(worker: Thread) { + if (worker === Thread.currentThread()) return + try { + worker.join(JOIN_TIMEOUT_MILLIS) + } catch (_: InterruptedException) { + Thread.currentThread().interrupt() + } + } + + private companion object { + const val TAG = "xcertplay-bonjour" + const val WORKER_NAME = "carplay-bonjour" + const val AIRPLAY_SERVICE_TYPE = "_airplay._tcp" + const val CARPLAY_CONTROL_SERVICE_TYPE = "_carplay-ctrl._tcp" + const val WORKER_POLL_MILLIS = 500L + const val RESOLVE_ATTEMPTS = 3 + const val RESOLVE_TIMEOUT_MILLIS = 10_000L + const val RESOLVE_RETRY_DELAY_MILLIS = 250L + const val MAX_PROBE_ATTEMPTS = 7 + const val PROBE_RETRY_DELAY_MILLIS = 1_500L + const val CONNECT_TIMEOUT_MILLIS = 3_000 + const val READ_TIMEOUT_MILLIS = 3_000 + const val JOIN_TIMEOUT_MILLIS = 2_000L + const val FAILURE_NONE = -1 + } +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/network/CarPlayVpnService.kt b/shared/src/main/java/com/shilapi/xcertplay/network/CarPlayVpnService.kt new file mode 100644 index 0000000..0213000 --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/network/CarPlayVpnService.kt @@ -0,0 +1,293 @@ +package com.shilapi.xcertplay.network + +import android.content.Context +import android.content.Intent +import android.net.VpnService +import android.os.Binder +import android.os.IBinder +import android.os.ParcelFileDescriptor +import android.util.Log +import com.shilapi.xcertplay.airplay.AirPlayConfig +import com.shilapi.xcertplay.airplay.AirPlayIdentity +import com.shilapi.xcertplay.airplay.AirPlayMediaHandler +import com.shilapi.xcertplay.airplay.AirPlaySession +import com.shilapi.xcertplay.airplay.AirPlaySessionListener +import com.shilapi.xcertplay.airplay.PairingStore +import com.shilapi.xcertplay.mfi.MfiAuthenticator +import com.shilapi.xcertplay.transport.NcmUsbBridge +import java.io.IOException +import java.net.Inet6Address +import java.net.InetAddress +import java.net.InetSocketAddress +import java.net.ServerSocket +import java.net.Socket +import java.util.concurrent.atomic.AtomicBoolean + +/** + * Hosts the AirPlay TCP listener for both NCM/VPN and local-only Wi-Fi transports. + * + * The wired path also owns the Android VPN tunnel and NCM IPv6 bridge. VPN consent is requested + * with [prepare] before binding. + */ +class CarPlayVpnService : VpnService() { + inner class LocalBinder : Binder() { + val service: CarPlayVpnService get() = this@CarPlayVpnService + } + + sealed class AttachResult { + data object Started : AttachResult() + data object AlreadyStarted : AttachResult() + data class Failed(val message: String) : AttachResult() + } + + private data class AirPlayAttachment( + val address: InetAddress, + val config: AirPlayConfig, + val identity: AirPlayIdentity, + val pairings: PairingStore, + val mfi: MfiAuthenticator?, + val listener: AirPlaySessionListener, + val media: AirPlayMediaHandler, + ) + + private val binder = LocalBinder() + private val active = AtomicBoolean(false) + private val sessionsLock = Any() + private val sessions = mutableSetOf() + @Volatile private var attachment: AirPlayAttachment? = null + private var serverSocket: ServerSocket? = null + private var bridge: Ipv6NcmBridge? = null + private var tun: ParcelFileDescriptor? = null + private var attachGeneration = 0 + + override fun onBind(intent: Intent?): IBinder = binder + + @Synchronized + fun attach( + ncm: NcmUsbBridge, + linkLocal: String, + hostMac: ByteArray, + config: AirPlayConfig, + identity: AirPlayIdentity, + pairings: PairingStore, + mfi: MfiAuthenticator?, + listener: AirPlaySessionListener, + media: AirPlayMediaHandler, + ): AttachResult { + if (active.get()) { + Log.i(TAG, "replacing stale NCM/VPN attachment") + releaseLocked() + } + active.set(true) + val generation = ++attachGeneration + return try { + val address = InetAddress.getByName(linkLocal) + if (address !is Inet6Address || !address.isLinkLocalAddress) { + throw IllegalArgumentException("linkLocal must be a link-local IPv6 literal") + } + require(hostMac.size == 6) { "hostMac must be 6 bytes" } + + val tunFd = Builder() + .addAddress(linkLocal, LINK_PREFIX) + .addRoute(LINK_LOCAL_ROUTE, LINK_PREFIX) + .setSession(SESSION_NAME) + .setMtu(TUN_MTU) + .setBlocking(true) + .establish() + ?: throw IOException("VpnService.establish returned null") + tun = tunFd + + val ipv6Bridge = Ipv6NcmBridge(ncm, tunFd, hostMac) { error -> + onTransportError(generation, listener, error) + } + ipv6Bridge.start() + bridge = ipv6Bridge + + startAirPlayServer( + generation, + AirPlayAttachment(address, config, identity, pairings, mfi, listener, media), + ) + AttachResult.Started + } catch (error: Exception) { + releaseLocked() + AttachResult.Failed(error.message ?: error.javaClass.simpleName) + } + } + + /** + * Starts the AirPlay listener on the local-only Wi-Fi AP address without establishing a VPN or + * NCM bridge. + */ + @Synchronized + fun attachWireless( + bindAddress: InetAddress, + config: AirPlayConfig, + identity: AirPlayIdentity, + pairings: PairingStore, + mfi: MfiAuthenticator?, + listener: AirPlaySessionListener, + media: AirPlayMediaHandler, + ): AttachResult { + if (active.get()) { + Log.i(TAG, "replacing stale local-only Wi-Fi attachment") + releaseLocked() + } + active.set(true) + val generation = ++attachGeneration + return try { + startAirPlayServer( + generation, + AirPlayAttachment(bindAddress, config, identity, pairings, mfi, listener, media), + ) + AttachResult.Started + } catch (error: Exception) { + releaseLocked() + AttachResult.Failed(error.message ?: error.javaClass.simpleName) + } + } + + /** Releases the active AirPlay listener and whichever VPN/NCM transport resources are active. */ + @Synchronized + fun detach() { + releaseLocked() + } + + fun isAttached(): Boolean = active.get() && attachment != null + + override fun onDestroy() { + detach() + super.onDestroy() + } + + private fun startAirPlayServer( + generation: Int, + replacement: AirPlayAttachment, + ) { + val server = ServerSocket() + server.bind(InetSocketAddress(replacement.address, replacement.config.port)) + attachment = replacement + serverSocket = server + Thread( + { acceptLoop(generation, server) }, + "airplay-accept", + ).apply { + isDaemon = true + start() + } + } + + private fun acceptLoop( + generation: Int, + server: ServerSocket, + ) { + try { + while (active.get()) { + val socket: Socket = server.accept() + Log.i(TAG, "airplay connection accepted from ${socket.remoteSocketAddress}") + socket.tcpNoDelay = true + socket.keepAlive = true + socket.setSoLinger(true, 0) + val session = synchronized(this) { + if (!active.get()) { + socket.close() + return + } + val current = attachment + if (current == null) { + socket.close() + return + } + AirPlaySession( + socket = socket, + config = current.config, + identity = current.identity, + pairings = current.pairings, + mfi = current.mfi, + listener = object : AirPlaySessionListener by current.listener { + override fun onSessionEnded(session: AirPlaySession) { + removeSession(session) + current.listener.onSessionEnded(session) + } + }, + media = current.media, + ).also(::addSession) + } + session.start() + } + } catch (error: IOException) { + if (active.get()) { + attachment?.listener?.let { onTransportError(generation, it, error) } + } + } + } + + private fun addSession(session: AirPlaySession) { + synchronized(sessionsLock) { sessions.add(session) } + } + + private fun removeSession(session: AirPlaySession?) { + if (session == null) return + synchronized(sessionsLock) { sessions.remove(session) } + } + + private fun closeSessionsLocked() { + synchronized(sessionsLock) { + sessions.toList().forEach { session -> + try { + session.close() + } catch (error: Exception) { + Log.w(TAG, "AirPlay session replacement failed", error) + } + } + sessions.clear() + } + } + + private fun onTransportError( + generation: Int, + listener: AirPlaySessionListener, + error: Throwable, + ) { + val message = error.message ?: error.javaClass.simpleName + Log.e(TAG, "CarPlay transport stopped: $message", error) + Thread( + { + synchronized(this) { + if (generation != attachGeneration) return@Thread + releaseLocked() + } + listener.onTransportError(message) + stopSelf() + }, + "airplay-teardown", + ).apply { + isDaemon = true + start() + } + } + + /** Caller must hold this service's monitor. Closes only resources active for this attachment. */ + private fun releaseLocked() { + attachGeneration += 1 + active.set(false) + attachment = null + serverSocket?.close() + serverSocket = null + closeSessionsLocked() + bridge?.close() + bridge = null + tun?.close() + tun = null + } + + companion object { + private const val TAG = "xcertplay-usb" + private const val LINK_PREFIX = 64 + private const val LINK_LOCAL_ROUTE = "fe80::" + private const val SESSION_NAME = "xcertplay CarPlay" + private const val TUN_MTU = 1500 + + /** Returns the VPN consent intent, or null when consent is already granted. */ + fun prepare(context: Context): Intent? = VpnService.prepare(context) + } +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/network/Ipv6NcmBridge.kt b/shared/src/main/java/com/shilapi/xcertplay/network/Ipv6NcmBridge.kt new file mode 100644 index 0000000..05e1833 --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/network/Ipv6NcmBridge.kt @@ -0,0 +1,181 @@ +package com.shilapi.xcertplay.network + +import android.os.ParcelFileDescriptor +import android.util.Log +import com.shilapi.xcertplay.transport.EthernetIpv6Codec +import com.shilapi.xcertplay.transport.NcmUsbBridge +import java.io.Closeable +import java.io.FileInputStream +import java.io.FileOutputStream +import java.io.IOException +import java.net.InetAddress +import java.util.concurrent.atomic.AtomicBoolean +import java.util.concurrent.locks.LockSupport + +/** + * Moves IPv6 packets between an Android VpnService tun and the iPhone NCM Ethernet link. + * + * NCM carries Ethernet frames while the tun is a layer-3 device, so this bridge strips and + * restores the Ethernet II header. Link-local neighbor discovery stays in the Android kernel, + * mirroring LIVI's reliance on the host kernel for NDP on its TAP interface. + */ +class Ipv6NcmBridge( + private val ncm: NcmUsbBridge, + private val tun: ParcelFileDescriptor, + private val hostMac: ByteArray, + private val onError: (Throwable) -> Unit, +) : Closeable { + init { + require(hostMac.size == EthernetIpv6Codec.MAC_BYTES) { "hostMac must be 6 bytes" } + } + + @Volatile + private var peerMac: ByteArray? = null + private var loggedInbound = false + private var loggedOutbound = false + private var loggedWaitingForPeer = false + private var inboundLogBudget = 16 + private var outboundLogBudget = 24 + private val running = AtomicBoolean(false) + private lateinit var ncmToTunThread: Thread + private lateinit var tunToNcmThread: Thread + + fun start() { + check(running.compareAndSet(false, true)) { "bridge is already started" } + ncmToTunThread = Thread(::runNcmToTun, "ncm-ipv6-in").apply { + isDaemon = true + start() + } + tunToNcmThread = Thread(::runTunToNcm, "ncm-ipv6-out").apply { + isDaemon = true + start() + } + } + + override fun close() { + if (!running.compareAndSet(true, false)) return + ncm.close() + tun.close() + join(ncmToTunThread) + join(tunToNcmThread) + } + + private fun runNcmToTun() { + val output = FileOutputStream(tun.fileDescriptor) + try { + while (running.get()) { + val frame = ncm.recv(READ_TIMEOUT_MILLIS) ?: continue + val ipv6 = EthernetIpv6Codec.parseIpv6View(frame) ?: continue + peerMac = ipv6.sourceMac + if (!loggedInbound) { + loggedInbound = true + Log.i( + TAG, + "ncm first inbound ipv6 bytes=${ipv6.payloadLength} " + + "peer=${ipv6.sourceMac.macString()}", + ) + } + if (inboundLogBudget > 0) { + inboundLogBudget-- + Log.i(TAG, "ncm inbound ${frame.summary(ipv6.payloadOffset)}") + } + output.write(frame, ipv6.payloadOffset, ipv6.payloadLength) + } + } catch (error: IOException) { + if (running.get()) onError(error) + } catch (error: RuntimeException) { + if (running.get()) onError(error) + } + } + + private fun runTunToNcm() { + val input = FileInputStream(tun.fileDescriptor) + val buffer = ByteArray(TUN_READ_BYTES) + try { + while (running.get()) { + val length = input.read(buffer) + if (length == -1) { + if (running.get()) onError(IOException("NCM IPv6 tunnel closed")) + return + } + // Android's TUN fd may transiently report a zero-byte read while its network is + // being registered. It is neither EOF (-1) nor an IPv6 packet. + if (length == 0) { + LockSupport.parkNanos(ZERO_READ_BACKOFF_NANOS) + continue + } + val tunPacket = buffer.copyOf(length) + val ipv6 = EthernetIpv6Codec.addNeighborAdvertisementTargetMac(tunPacket, hostMac) + if (ipv6.size != tunPacket.size) { + Log.i(TAG, "ncm added target-link-layer option to neighbor advertisement") + } + if (outboundLogBudget > 0) { + outboundLogBudget-- + Log.i(TAG, "ncm outbound ${ipv6.summary(0)}") + } + val multicastMac = EthernetIpv6Codec.multicastDestinationMac(ipv6) + val mac = multicastMac ?: peerMac + if (mac == null) { + if (!loggedWaitingForPeer) { + loggedWaitingForPeer = true + Log.i(TAG, "ncm deferred outbound unicast bytes=$length until peer MAC is learned") + } + continue + } + if (!loggedOutbound) { + loggedOutbound = true + Log.i( + TAG, + "ncm first outbound ipv6 bytes=$length destination=${mac.macString()} multicast=${multicastMac != null}", + ) + } + val frame = EthernetIpv6Codec.build(hostMac, mac, ipv6) + ncm.send(frame, WRITE_TIMEOUT_MILLIS) + } + } catch (error: IOException) { + if (running.get()) onError(error) + } catch (error: RuntimeException) { + if (running.get()) onError(error) + } + } + + private fun join(thread: Thread) { + if (thread === Thread.currentThread()) return + try { + thread.join(JOIN_TIMEOUT_MILLIS) + } catch (_: InterruptedException) { + Thread.currentThread().interrupt() + } + if (thread.isAlive) thread.interrupt() + } + + private fun ByteArray.macString(): String = + joinToString(":") { byte -> "%02x".format(byte.toInt() and 0xff) } + + private fun ByteArray.summary(offset: Int): String { + val payloadBytes = size - offset + if (payloadBytes < 40) return "truncated bytes=$payloadBytes" + val source = InetAddress.getByAddress(copyOfRange(offset + 8, offset + 24)).hostAddress + val destination = InetAddress.getByAddress(copyOfRange(offset + 24, offset + 40)).hostAddress + val nextHeader = this[offset + 6].toInt() and 0xff + val detail = when { + nextHeader == 6 && payloadBytes >= 44 -> " tcp=${u16(offset + 40)}->${u16(offset + 42)}" + nextHeader == 17 && payloadBytes >= 44 -> " udp=${u16(offset + 40)}->${u16(offset + 42)}" + nextHeader == 58 && payloadBytes >= 41 -> " icmp6=${this[offset + 40].toInt() and 0xff}" + else -> "" + } + return "bytes=$payloadBytes src=$source dst=$destination next=$nextHeader$detail" + } + + private fun ByteArray.u16(offset: Int): Int = + ((this[offset].toInt() and 0xff) shl 8) or (this[offset + 1].toInt() and 0xff) + + private companion object { + const val TAG = "xcertplay-usb" + const val READ_TIMEOUT_MILLIS = 1_000L + const val WRITE_TIMEOUT_MILLIS = 2_000 + const val TUN_READ_BYTES = 4_096 + const val ZERO_READ_BACKOFF_NANOS = 1_000_000L + const val JOIN_TIMEOUT_MILLIS = 2_000L + } +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/network/LocalOnlyHotspotManager.kt b/shared/src/main/java/com/shilapi/xcertplay/network/LocalOnlyHotspotManager.kt new file mode 100644 index 0000000..201054e --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/network/LocalOnlyHotspotManager.kt @@ -0,0 +1,688 @@ +package com.shilapi.xcertplay.network + +import android.content.Context +import android.net.ConnectivityManager +import android.net.MacAddress +import android.net.wifi.SoftApConfiguration +import android.net.wifi.WifiConfiguration +import android.net.wifi.WifiManager +import android.os.Build +import android.os.Handler +import android.os.HandlerThread +import android.os.Looper +import androidx.annotation.RequiresApi +import com.shilapi.xcertplay.transport.Iap2WirelessSecurity +import java.io.IOException +import java.net.Inet4Address +import java.net.Inet6Address +import java.net.InetAddress +import java.net.NetworkInterface +import java.net.SocketException +import java.net.UnknownHostException +import java.util.Collections +import java.util.concurrent.TimeUnit + +/** + * Owns one Android LocalOnlyHotspot reservation and reports its live configuration. + * + * [start] must run on a worker thread because it blocks until the system callback arrives and + * the AP interface is usable. The reservation and multicast lock stay owned by this instance + * until [close]. + */ +class LocalOnlyHotspotManager(context: Context) : WirelessHotspotManager { + private val connectivityManager = + context.applicationContext.getSystemService(ConnectivityManager::class.java) + private val wifiManager = context.applicationContext.getSystemService(WifiManager::class.java) + ?: throw IllegalStateException("WifiManager is unavailable") + private val stateLock = Object() + + private var startAttempt: StartAttempt? = null + private var reservation: WifiManager.LocalOnlyHotspotReservation? = null + private var multicastLock: WifiManager.MulticastLock? = null + private var callbackThread: HandlerThread? = null + private var stopped = false + private var closed = false + + /** + * Starts a LocalOnlyHotspot and waits up to [timeoutMillis] for the live configuration and AP + * interface. The returned credentials are not retained by this manager. + */ + override fun start(timeoutMillis: Long): WirelessHotspotInfo { + check(Looper.myLooper() != Looper.getMainLooper()) { + "LocalOnlyHotspotManager.start must not run on the main thread" + } + require(timeoutMillis > 0) { "timeoutMillis must be positive" } + + val attempt = StartAttempt() + synchronized(stateLock) { + check(!closed) { "LocalOnlyHotspotManager is closed" } + check(startAttempt == null && reservation == null) { + "A LocalOnlyHotspot is already starting or active" + } + startAttempt = attempt + } + + val thread = HandlerThread("xcertplay-local-only-hotspot").apply { start() } + attempt.thread = thread + var acquiredMulticastLock: WifiManager.MulticastLock? = null + val deadlineNanos = deadlineAfter(timeoutMillis) + val preStartInterfaces = networkInterfaceNames() + + try { + ensureStartActive(attempt) + wifiManager.startLocalOnlyHotspot( + createCallback(attempt), + Handler(thread.looper), + ) + + val activeReservation = awaitStart(attempt, deadlineNanos, timeoutMillis) + acquiredMulticastLock = acquireMulticastLock(attempt) + val configuration = readConfiguration(activeReservation) + val apInterface = awaitApInterface( + bssid = configuration.bssidBytes, + preStartInterfaces = preStartInterfaces, + attempt = attempt, + deadlineNanos = deadlineNanos, + ) + + synchronized(stateLock) { + ensureStartActiveLocked(attempt) + reservation = activeReservation + multicastLock = acquiredMulticastLock + callbackThread = thread + startAttempt = null + stopped = false + acquiredMulticastLock = null + } + + return WirelessHotspotInfo( + ssid = configuration.ssid, + passphrase = configuration.passphrase, + security = configuration.security, + channel = configuration.channel, + frequencyMHz = null, + bssid = apInterface?.bssid ?: configuration.bssid, + interfaceName = apInterface?.name, + hostAddress = apInterface?.hostAddress, + bandLabel = configuration.bandLabel, + backend = WirelessHotspotBackend.LOCAL_ONLY_HOTSPOT, + ) + } catch (failure: Exception) { + cleanupFailedStart(attempt, acquiredMulticastLock) + throw failure + } + } + + override fun close() { + val activeReservation: WifiManager.LocalOnlyHotspotReservation? + val activeMulticastLock: WifiManager.MulticastLock? + val activeCallbackThread: HandlerThread? + synchronized(stateLock) { + if (closed) return + closed = true + startAttempt?.stopped = true + stateLock.notifyAll() + activeReservation = reservation + activeMulticastLock = multicastLock + activeCallbackThread = callbackThread + reservation = null + multicastLock = null + callbackThread = null + } + + releaseMulticastLock(activeMulticastLock) + activeReservation?.close() + activeCallbackThread?.quitSafely() + } + + private fun createCallback(attempt: StartAttempt): WifiManager.LocalOnlyHotspotCallback = + object : WifiManager.LocalOnlyHotspotCallback() { + override fun onStarted( + reservation: WifiManager.LocalOnlyHotspotReservation, + ) { + val closeReservation = synchronized(stateLock) { + if ( + closed || + startAttempt !== attempt || + attempt.stopped || + attempt.reservation != null + ) { + true + } else { + attempt.reservation = reservation + stateLock.notifyAll() + false + } + } + if (closeReservation) reservation.close() + } + + override fun onFailed(reason: Int) { + synchronized(stateLock) { + if (startAttempt === attempt && attempt.failure == null) { + attempt.failure = IOException( + "LocalOnlyHotspot failed: ${failureReason(reason)}", + ) + stateLock.notifyAll() + } + } + } + + override fun onStopped() { + var lockToRelease: WifiManager.MulticastLock? = null + synchronized(stateLock) { + if (startAttempt === attempt) attempt.stopped = true + if (reservation === attempt.reservation) { + stopped = true + lockToRelease = multicastLock + multicastLock = null + } + stateLock.notifyAll() + } + releaseMulticastLock(lockToRelease) + } + } + + private fun awaitStart( + attempt: StartAttempt, + deadlineNanos: Long, + timeoutMillis: Long, + ): WifiManager.LocalOnlyHotspotReservation = synchronized(stateLock) { + while (true) { + if (closed) throw IOException("LocalOnlyHotspot manager closed while starting") + attempt.failure?.let { throw it } + if (attempt.stopped) { + throw IOException("LocalOnlyHotspot stopped before startup completed") + } + attempt.reservation?.let { return@synchronized it } + + val remainingNanos = deadlineNanos - System.nanoTime() + if (remainingNanos <= 0) { + throw IOException( + "Timed out after ${timeoutMillis}ms waiting for LocalOnlyHotspot", + ) + } + waitNanos(remainingNanos) + } + error("unreachable") + } + + private fun acquireMulticastLock(attempt: StartAttempt): WifiManager.MulticastLock { + ensureStartActive(attempt) + val lock = wifiManager.createMulticastLock(MULTICAST_LOCK_TAG) + lock.setReferenceCounted(false) + try { + lock.acquire() + synchronized(stateLock) { + ensureStartActiveLocked(attempt) + } + return lock + } catch (failure: Exception) { + releaseMulticastLock(lock) + throw failure + } + } + + private fun readConfiguration( + reservation: WifiManager.LocalOnlyHotspotReservation, + ): HotspotConfiguration { + return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + readSoftApConfiguration(reservation.softApConfiguration) + } else { + @Suppress("DEPRECATION") + val configuration = reservation.wifiConfiguration + ?: throw IOException("LocalOnlyHotspot did not provide a Wi-Fi configuration") + readWifiConfiguration(configuration) + } + } + + @Suppress("DEPRECATION") + @RequiresApi(Build.VERSION_CODES.R) + private fun readSoftApConfiguration(configuration: SoftApConfiguration): HotspotConfiguration { + val ssid = validateSsid(configuration.ssid) + val security = mapSoftApSecurity(configuration.securityType) + val passphrase = validatePassphrase(security, configuration.passphrase) + val channel = if (Build.VERSION.SDK_INT >= 36) { + readConfiguredChannel(configuration) + } else { + readLegacySoftApChannel(configuration) + } + val bssid = configuration.bssid + + return HotspotConfiguration( + ssid = ssid, + passphrase = passphrase, + security = security, + channel = channel.first, + bssid = bssid?.toString(), + bssidBytes = bssid?.toByteArray(), + bandLabel = channel.second, + ) + } + + @Suppress("DEPRECATION") + private fun readWifiConfiguration(configuration: WifiConfiguration): HotspotConfiguration { + val ssid = validateSsid(configuration.SSID) + val security = mapWifiConfigurationSecurity(configuration) + val passphrase = validatePassphrase(security, unquote(configuration.preSharedKey)) + val bssid = configuration.BSSID?.let { + try { + MacAddress.fromString(it) + } catch (failure: IllegalArgumentException) { + throw IOException("LocalOnlyHotspot reported an invalid BSSID: $it", failure) + } + } + val channel = readWifiConfigurationChannel(configuration) + + return HotspotConfiguration( + ssid = ssid, + passphrase = passphrase, + security = security, + channel = channel, + bssid = bssid?.toString(), + bssidBytes = bssid?.toByteArray(), + bandLabel = readWifiConfigurationBandLabel(configuration, channel), + ) + } + + @RequiresApi(36) + private fun readConfiguredChannel(configuration: SoftApConfiguration): Pair { + val channels = configuration.channels + if (channels.size() != 1) { + throw IOException("Expected one LocalOnlyHotspot channel, got ${channels.size()}") + } + val band = channels.keyAt(0) + val channel = requireChannel( + channels.valueAt(0), + "SoftApConfiguration.channels", + allowAuto = true, + ) + return channel to softApBandLabel(band) + } + + @RequiresApi(Build.VERSION_CODES.R) + private fun readLegacySoftApChannel(configuration: SoftApConfiguration): Pair { + val channel = try { + val getter = SoftApConfiguration::class.java.getMethod("getChannel") + val value = getter.invoke(configuration) as? Number + ?: throw IOException("SoftApConfiguration.getChannel returned no channel") + requireChannel( + value.toInt(), + "SoftApConfiguration.getChannel", + allowAuto = true, + ) + } catch (failure: ReflectiveOperationException) { + throw IOException( + "Android ${Build.VERSION.RELEASE} does not expose SoftApConfiguration.getChannel", + failure, + ) + } + return channel to readLegacySoftApBandLabel(configuration, channel) + } + + private fun readWifiConfigurationChannel(configuration: WifiConfiguration): Int { + val channel = try { + WifiConfiguration::class.java.getField("apChannel").getInt(configuration) + } catch (failure: ReflectiveOperationException) { + throw IOException( + "Android ${Build.VERSION.RELEASE} does not expose WifiConfiguration.apChannel", + failure, + ) + } + return requireChannel(channel, "WifiConfiguration.apChannel", allowAuto = true) + } + + private fun readWifiConfigurationBandLabel( + configuration: WifiConfiguration, + channel: Int, + ): String { + val band = try { + (WifiConfiguration::class.java.getField("apBand").get(configuration) as? Number) + ?.toInt() + } catch (_: ReflectiveOperationException) { + null + } + return band?.let(::softApBandLabel) ?: legacyBandLabel(channel) + } + + @RequiresApi(Build.VERSION_CODES.R) + private fun readLegacySoftApBandLabel( + configuration: SoftApConfiguration, + channel: Int, + ): String { + val band = try { + (SoftApConfiguration::class.java.getMethod("getBand").invoke(configuration) as? Number) + ?.toInt() + } catch (_: ReflectiveOperationException) { + null + } + return band?.let(::softApBandLabel) ?: legacyBandLabel(channel) + } + + private fun awaitApInterface( + bssid: ByteArray?, + preStartInterfaces: Set, + attempt: StartAttempt, + deadlineNanos: Long, + ): ApInterface? { + var matchedInterfaceName: String? = null + while (true) { + ensureStartActive(attempt) + val networkInterface = findInterface(bssid, preStartInterfaces) + if (networkInterface != null) { + matchedInterfaceName = networkInterface.name + networkInterface.hotspotAddress()?.let { hostAddress -> + val interfaceBssid = networkInterface.hardwareAddress?.toMacAddressString() + ?: (hostAddress as? Inet6Address)?.toEui64MacAddress() + if (bssid == null && interfaceBssid == null) { + return@let + } + return ApInterface( + name = networkInterface.name, + hostAddress = hostAddress, + bssid = interfaceBssid, + ) + } + } + + val remainingNanos = deadlineNanos - System.nanoTime() + if (remainingNanos <= 0) { + return matchedInterfaceName?.let { + ApInterface(it, null, null) + } + } + try { + TimeUnit.NANOSECONDS.sleep(minOf(remainingNanos, INTERFACE_POLL_NANOS)) + } catch (interrupted: InterruptedException) { + Thread.currentThread().interrupt() + throw IOException("Interrupted while waiting for the LocalOnlyHotspot interface", interrupted) + } + } + } + + private fun findInterface( + bssid: ByteArray?, + preStartInterfaces: Set, + ): NetworkInterface? { + val interfaces = NetworkInterface.getNetworkInterfaces() ?: return null + val candidates = Collections.list(interfaces).filter { networkInterface -> + try { + networkInterface.isUp && !networkInterface.isLoopback + } catch (_: SocketException) { + false + } + } + if (bssid != null) { + return candidates.firstOrNull { + try { + it.hardwareAddress?.contentEquals(bssid) == true + } catch (_: SocketException) { + false + } + } + } + candidates.firstOrNull { it.name !in preStartInterfaces && it.hotspotAddress() != null } + ?.let { return it } + + val primaryInterface = connectivityManager?.activeNetwork + ?.let { connectivityManager.getLinkProperties(it)?.interfaceName } + val nonPrimary = candidates.filter { it.name != primaryInterface } + return nonPrimary.firstOrNull { it.hasPrivate192Address() } + ?: nonPrimary.firstOrNull { it.hasSiteLocalAddress() } + ?: nonPrimary.firstOrNull { it.hasLinkLocalAddress() } + ?: nonPrimary.firstOrNull { it.hotspotAddress() != null } + } + + private fun networkInterfaceNames(): Set = + NetworkInterface.getNetworkInterfaces() + ?.let { + Collections.list(it) + .filter { networkInterface -> + try { + networkInterface.isUp + } catch (_: SocketException) { + false + } + } + .mapTo(linkedSetOf()) { n -> n.name } + } + .orEmpty() + + private fun NetworkInterface.hasPrivate192Address(): Boolean = + Collections.list(inetAddresses).any { + it is Inet4Address && it.address.size == 4 && + (it.address[0].toInt() and 0xff) == 192 && + (it.address[1].toInt() and 0xff) == 168 + } + + private fun NetworkInterface.hasSiteLocalAddress(): Boolean = + Collections.list(inetAddresses).any { it is Inet4Address && it.isSiteLocalAddress } + + private fun NetworkInterface.hasLinkLocalAddress(): Boolean = + Collections.list(inetAddresses).any { it is Inet6Address && it.isLinkLocalAddress } + + private fun NetworkInterface.hotspotAddress(): InetAddress? { + var ipv4: InetAddress? = null + for (address in Collections.list(inetAddresses)) { + if (address is Inet6Address && address.isLinkLocalAddress) { + if (address.scopeId == index) return address + try { + return Inet6Address.getByAddress(null, address.address, this) + } catch (_: UnknownHostException) { + continue + } + } + if (address is Inet4Address && !address.isLoopbackAddress && ipv4 == null) { + ipv4 = address + } + } + return ipv4 + } + + private fun ensureStartActive(attempt: StartAttempt) { + synchronized(stateLock) { + ensureStartActiveLocked(attempt) + } + } + + private fun ensureStartActiveLocked(attempt: StartAttempt) { + if (closed) throw IOException("LocalOnlyHotspot manager closed while starting") + if (startAttempt !== attempt) throw IOException("LocalOnlyHotspot startup was cancelled") + if (attempt.stopped) throw IOException("LocalOnlyHotspot stopped while starting") + } + + private fun cleanupFailedStart( + attempt: StartAttempt, + multicastLock: WifiManager.MulticastLock?, + ) { + val failedReservation: WifiManager.LocalOnlyHotspotReservation? + val failedThread: HandlerThread? + synchronized(stateLock) { + if (startAttempt === attempt) startAttempt = null + attempt.stopped = true + stateLock.notifyAll() + failedReservation = attempt.reservation + failedThread = attempt.thread + } + releaseMulticastLock(multicastLock) + failedReservation?.close() + failedThread?.quitSafely() + } + + private fun waitNanos(nanos: Long) { + val millis = nanos / NANOS_PER_MILLISECOND + val remainder = (nanos % NANOS_PER_MILLISECOND).toInt() + try { + stateLock.wait(millis, remainder) + } catch (interrupted: InterruptedException) { + Thread.currentThread().interrupt() + throw IOException("Interrupted while waiting for LocalOnlyHotspot", interrupted) + } + } + + private fun deadlineAfter(timeoutMillis: Long): Long { + val now = System.nanoTime() + val delta = timeoutMillis * NANOS_PER_MILLISECOND + return if (Long.MAX_VALUE - now < delta) Long.MAX_VALUE else now + delta + } + + private fun validateSsid(value: String?): String { + val ssid = unquote(value) + if (ssid.isNullOrEmpty() || ssid == WifiManager.UNKNOWN_SSID) { + throw IOException("LocalOnlyHotspot did not report a usable SSID") + } + if ('\u0000' in ssid) throw IOException("LocalOnlyHotspot SSID contains U+0000") + return ssid + } + + private fun validatePassphrase( + security: Iap2WirelessSecurity, + value: String?, + ): String { + val passphrase = value.orEmpty() + if (security != Iap2WirelessSecurity.NONE && passphrase.isEmpty()) { + throw IOException("LocalOnlyHotspot did not report a passphrase for secured Wi-Fi") + } + if ('\u0000' in passphrase) { + throw IOException("LocalOnlyHotspot passphrase contains U+0000") + } + return passphrase + } + + @RequiresApi(Build.VERSION_CODES.R) + private fun mapSoftApSecurity(securityType: Int): Iap2WirelessSecurity = when (securityType) { + SoftApConfiguration.SECURITY_TYPE_OPEN -> Iap2WirelessSecurity.NONE + SoftApConfiguration.SECURITY_TYPE_WPA2_PSK -> Iap2WirelessSecurity.WPA_WPA2 + SoftApConfiguration.SECURITY_TYPE_WPA3_SAE_TRANSITION -> + Iap2WirelessSecurity.WPA3_TRANSITION + SoftApConfiguration.SECURITY_TYPE_WPA3_SAE -> Iap2WirelessSecurity.WPA3_ONLY + SoftApConfiguration.SECURITY_TYPE_WPA3_OWE, + SoftApConfiguration.SECURITY_TYPE_WPA3_OWE_TRANSITION, + -> throw IOException("Unsupported LocalOnlyHotspot security type: OWE") + else -> throw IOException( + "Unsupported LocalOnlyHotspot security type: $securityType", + ) + } + + private fun mapWifiConfigurationSecurity( + configuration: WifiConfiguration, + ): Iap2WirelessSecurity { + val keyManagement = configuration.allowedKeyManagement + ?: throw IOException("LocalOnlyHotspot did not report its key management") + val open = keyManagement.get(WifiConfiguration.KeyMgmt.NONE) + val wpa2 = keyManagement.get(WifiConfiguration.KeyMgmt.WPA2_PSK) + val sae = keyManagement.get(WifiConfiguration.KeyMgmt.SAE) + val owe = keyManagement.get(WifiConfiguration.KeyMgmt.OWE) + + return when { + owe -> throw IOException("Unsupported LocalOnlyHotspot security type: OWE") + open && !wpa2 && !sae -> Iap2WirelessSecurity.NONE + wpa2 && sae -> Iap2WirelessSecurity.WPA3_TRANSITION + wpa2 -> Iap2WirelessSecurity.WPA_WPA2 + sae -> Iap2WirelessSecurity.WPA3_ONLY + else -> throw IOException( + "Unsupported LocalOnlyHotspot key management: $keyManagement", + ) + } + } + + private fun requireChannel(channel: Int, source: String): Int { + return requireChannel(channel, source, allowAuto = false) + } + + private fun requireChannel(channel: Int, source: String, allowAuto: Boolean): Int { + if (channel !in 0..0xff || (!allowAuto && channel == 0)) { + throw IOException("$source returned invalid channel: $channel") + } + return channel + } + + private fun ByteArray.toMacAddressString(): String = + joinToString(":") { "%02x".format(it.toInt() and 0xff) } + + private fun Inet6Address.toEui64MacAddress(): String? { + val bytes = address + if (!isLinkLocalAddress || bytes.size != 16 || bytes[11] != 0xff.toByte() || + bytes[12] != 0xfe.toByte() + ) { + return null + } + return byteArrayOf( + (bytes[8].toInt() xor 0x02).toByte(), + bytes[9], + bytes[10], + bytes[13], + bytes[14], + bytes[15], + ).toMacAddressString() + } + + private fun softApBandLabel(band: Int): String = when (band) { + SoftApConfiguration.BAND_2GHZ -> "2.4 GHz" + SoftApConfiguration.BAND_5GHZ -> "5 GHz" + SoftApConfiguration.BAND_6GHZ -> "6 GHz" + SoftApConfiguration.BAND_60GHZ -> "60 GHz" + else -> "Unknown band ($band)" + } + + private fun legacyBandLabel(channel: Int): String = when (channel) { + in 1..14 -> "2.4 GHz" + in 32..177 -> "5 GHz" + else -> "Unknown band" + } + + private fun unquote(value: String?): String? { + if (value == null) return null + return if (value.length >= 2 && value.first() == '"' && value.last() == '"') { + value.substring(1, value.length - 1) + } else { + value + } + } + + private fun failureReason(reason: Int): String = when (reason) { + WifiManager.LocalOnlyHotspotCallback.ERROR_NO_CHANNEL -> "no channel available" + WifiManager.LocalOnlyHotspotCallback.ERROR_GENERIC -> "generic error" + WifiManager.LocalOnlyHotspotCallback.ERROR_INCOMPATIBLE_MODE -> "incompatible Wi-Fi mode" + WifiManager.LocalOnlyHotspotCallback.ERROR_TETHERING_DISALLOWED -> "tethering disallowed" + else -> "reason $reason" + } + + private fun releaseMulticastLock(lock: WifiManager.MulticastLock?) { + if (lock == null) return + try { + if (lock.isHeld) lock.release() + } catch (_: RuntimeException) { + // close() is best-effort; the hotspot reservation remains the authoritative owner. + } + } + + private class StartAttempt { + var thread: HandlerThread? = null + var reservation: WifiManager.LocalOnlyHotspotReservation? = null + var failure: IOException? = null + var stopped = false + } + + private class HotspotConfiguration( + val ssid: String, + val passphrase: String, + val security: Iap2WirelessSecurity, + val channel: Int, + val bssid: String?, + val bssidBytes: ByteArray?, + val bandLabel: String, + ) + + private class ApInterface( + val name: String, + val hostAddress: InetAddress?, + val bssid: String?, + ) + + private companion object { + const val MULTICAST_LOCK_TAG = "xcertplay-local-only-hotspot-mdns" + const val NANOS_PER_MILLISECOND = 1_000_000L + val INTERFACE_POLL_NANOS: Long = TimeUnit.MILLISECONDS.toNanos(100) + } +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/network/ManualHotspotManager.kt b/shared/src/main/java/com/shilapi/xcertplay/network/ManualHotspotManager.kt new file mode 100644 index 0000000..4fb7160 --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/network/ManualHotspotManager.kt @@ -0,0 +1,470 @@ +package com.shilapi.xcertplay.network + +import android.annotation.SuppressLint +import android.content.Context +import android.net.ConnectivityManager +import android.net.wifi.SoftApConfiguration +import android.net.wifi.WifiConfiguration +import android.net.wifi.WifiManager +import android.os.Build +import android.os.Looper +import android.util.Log +import com.shilapi.xcertplay.orchestration.ManualHotspotBand +import com.shilapi.xcertplay.orchestration.ManualHotspotSecurity +import com.shilapi.xcertplay.transport.Iap2WirelessSecurity +import java.io.IOException +import java.net.Inet4Address +import java.net.Inet6Address +import java.net.InetAddress +import java.net.NetworkInterface +import java.net.SocketException +import java.net.UnknownHostException +import java.util.Collections +import java.util.concurrent.TimeUnit + +/** + * Attaches to a hotspot that is already running on this device. + * + * The hotspot remains owned by the system. This manager only locates its interface and reads the + * channel/security data that the public Android APIs expose. Some vendors hide the current SoftAP + * configuration, in which case the caller-supplied credentials remain authoritative and the iAP2 + * channel is reported as zero ("auto"). + */ +class ManualHotspotManager( + context: Context, + ssid: String, + passphrase: String, + band: ManualHotspotBand, + channel: Int, + security: ManualHotspotSecurity, +) : WirelessHotspotManager { + private val appContext = context.applicationContext + private val connectivityManager = + appContext.getSystemService(ConnectivityManager::class.java) + private val wifiManager = appContext.getSystemService(WifiManager::class.java) + ?: throw IllegalStateException("WifiManager is unavailable") + private val expectedSsid = ssid + private val passphrase = passphrase + private val expectedBand = band + private val expectedChannel = channel + private val expectedSecurity = security.toIap2Security() + + @Volatile + private var closed = false + + init { + require(expectedSsid.isNotBlank()) { "ssid must not be blank" } + require('\u0000' !in expectedSsid) { "ssid must not contain U+0000" } + require('\u0000' !in passphrase) { "passphrase must not contain U+0000" } + require(passphrase.isEmpty() || passphrase.length in 8..63) { + "passphrase must be empty or between 8 and 63 characters" + } + require(channel in 0..196) { "channel must be 0 or in 1..196" } + require(expectedSecurity == Iap2WirelessSecurity.NONE || passphrase.isNotEmpty()) { + "passphrase is required for secured manual hotspots" + } + require(expectedSecurity != Iap2WirelessSecurity.NONE || passphrase.isEmpty()) { + "passphrase must be empty for open manual hotspots" + } + } + + override fun start(timeoutMillis: Long): WirelessHotspotInfo { + check(Looper.myLooper() != Looper.getMainLooper()) { + "ManualHotspotManager.start must not run on the main thread" + } + require(timeoutMillis > 0) { "timeoutMillis must be positive" } + + val deadlineNanos = deadlineAfter(timeoutMillis) + val apConfiguration = readApConfiguration() + if (apConfiguration != null && apConfiguration.ssid != expectedSsid) { + throw IOException( + "Manual hotspot SSID does not match the active local AP configuration: " + + "'${apConfiguration.ssid}'", + ) + } + validateApConfiguration(apConfiguration) + + var lastReason = "local hotspot interface was not found" + while (true) { + check(!closed) { "ManualHotspotManager is closed" } + val localInterface = findLocalHotspotInterface() + if (localInterface != null) { + val connectionFrequency = frequencyFromConnectionInfo() + val scanFrequency = frequencyFromScanResult(localInterface) + val channel = observedManualHotspotChannel( + apChannel = apConfiguration?.channel ?: 0, + connectionFrequencyMHz = connectionFrequency, + scanFrequencyMHz = scanFrequency, + apFrequencyMHz = apConfiguration?.frequencyMHz, + ) + val frequencyMHz = when { + apConfiguration?.frequencyMHz != null -> apConfiguration.frequencyMHz + connectionFrequency != null -> connectionFrequency + scanFrequency != null -> scanFrequency + else -> null + } + val security = apConfiguration?.security ?: expectedSecurity + if (security != Iap2WirelessSecurity.NONE && passphrase.isEmpty()) { + throw IOException("Manual hotspot is secured but no passphrase was provided") + } + + if (channel == 0) { + Log.w( + TAG, + "Could not read the active hotspot channel from Android public APIs; " + + "reporting iAP2 channel 0 (auto) instead of configured channel " + + "$expectedChannel", + ) + } + val observedBandLabel = wifiBandLabel(apConfiguration?.band) + return WirelessHotspotInfo( + ssid = expectedSsid, + passphrase = passphrase, + security = security, + channel = channel, + frequencyMHz = frequencyMHz, + bssid = localInterface.hardwareAddress, + interfaceName = localInterface.name, + hostAddress = localInterface.hostAddress, + bandLabel = when (expectedBand) { + ManualHotspotBand.GHZ_2_4 -> "2.4 GHz" + ManualHotspotBand.GHZ_5 -> "5 GHz" + ManualHotspotBand.AUTO -> + frequencyMHz?.let(::bandLabel) ?: observedBandLabel ?: "Auto" + }, + backend = WirelessHotspotBackend.MANUAL_HOTSPOT, + ) + } + + val remainingNanos = remainingNanos(deadlineNanos) + if (remainingNanos <= 0) { + throw IOException( + "Timed out after ${timeoutMillis}ms waiting for the manual hotspot: " + + lastReason, + ) + } + sleep(minOf(remainingNanos, INTERFACE_POLL_NANOS)) + } + } + + override fun close() { + closed = true + } + + private fun validateApConfiguration(configuration: ManualApConfiguration?) { + configuration ?: return + if (expectedChannel > 0 && configuration.channel > 0 && + configuration.channel != expectedChannel + ) { + throw IOException( + "Manual hotspot channel ${configuration.channel} does not match configured " + + "channel $expectedChannel", + ) + } + val actualBand = when (configuration.band) { + 1 -> ManualHotspotBand.GHZ_2_4 + 2 -> ManualHotspotBand.GHZ_5 + else -> null + } + if (actualBand != null && expectedBand != ManualHotspotBand.AUTO && + actualBand != expectedBand + ) { + throw IOException( + "Manual hotspot band ${wifiBandLabel(configuration.band)} does not match " + + "configured band ${wifiBandLabel(if (expectedBand == ManualHotspotBand.GHZ_2_4) 1 else 2)}", + ) + } + if (configuration.security != expectedSecurity) { + throw IOException( + "Manual hotspot security ${configuration.security} does not match configured " + + "security $expectedSecurity", + ) + } + val frequency = configuration.frequencyMHz ?: return + when (expectedBand) { + ManualHotspotBand.GHZ_2_4 -> if (frequency !in 2_400..2_500) { + throw IOException("Manual hotspot is not running on 2.4 GHz") + } + ManualHotspotBand.GHZ_5 -> if (frequency !in 5_150..5_895) { + throw IOException("Manual hotspot is not running on 5 GHz") + } + ManualHotspotBand.AUTO -> Unit + } + } + + private fun findLocalHotspotInterface(): LocalHotspotInterface? { + val interfaces = try { + NetworkInterface.getNetworkInterfaces() + } catch (_: SocketException) { + null + } ?: return null + val primaryInterface = connectivityManager?.activeNetwork + ?.let { connectivityManager.getLinkProperties(it)?.interfaceName } + return Collections.list(interfaces) + .asSequence() + .filter { isUsableInterface(it, primaryInterface) } + .mapNotNull { networkInterface -> + networkInterface.hotspotAddress()?.let { address -> + LocalHotspotInterface( + name = networkInterface.name, + hostAddress = address, + hardwareAddress = networkInterface.hardwareAddress?.toMacAddressString(), + score = interfaceScore(networkInterface.name, address), + ) + } + } + .maxByOrNull(LocalHotspotInterface::score) + } + + private fun isUsableInterface( + networkInterface: NetworkInterface, + primaryInterface: String?, + ): Boolean = try { + networkInterface.name != primaryInterface && + !networkInterface.isLoopback && + networkInterface.isUp && + EXCLUDED_INTERFACE_PREFIXES.none { networkInterface.name.startsWith(it) } + } catch (_: SocketException) { + false + } + + private fun interfaceScore(name: String, address: InetAddress): Int { + var score = when { + name.startsWith("ap") || name.contains("softap", ignoreCase = true) -> 100 + name.startsWith("p2p") -> 80 + name.startsWith("wlan") -> 70 + else -> 0 + } + if (address is Inet4Address) { + val bytes = address.address + when { + bytes[0] == 192.toByte() && bytes[1] == 168.toByte() -> score += 30 + address.isSiteLocalAddress -> score += 20 + } + } + if (address is Inet6Address && address.isLinkLocalAddress) score += 15 + return score + } + + private fun NetworkInterface.hotspotAddress(): InetAddress? { + var ipv6: Inet6Address? = null + for (address in Collections.list(inetAddresses)) { + if (address is Inet4Address && !address.isLoopbackAddress && + !address.isLinkLocalAddress + ) { + return address + } + if (address is Inet6Address && address.isLinkLocalAddress) { + if (ipv6 == null) { + ipv6 = if (address.scopeId == index) { + address + } else { + try { + Inet6Address.getByAddress(null, address.address, this) + } catch (_: UnknownHostException) { + null + } + } + } + } + } + return ipv6 + } + + private fun frequencyFromConnectionInfo(): Int? { + val connectionInfo = try { + wifiManager.connectionInfo + } catch (_: SecurityException) { + null + } ?: return null + if (unquote(connectionInfo.ssid) != expectedSsid) return null + return connectionInfo.frequency.takeIf { it > 0 } + } + + private fun frequencyFromScanResult(localInterface: LocalHotspotInterface): Int? { + val localBssid = localInterface.hardwareAddress ?: return null + val scanResults = try { + wifiManager.scanResults + } catch (_: SecurityException) { + return null + } + return scanResults.firstOrNull { result -> + result.SSID == expectedSsid && + result.BSSID.equals(localBssid, ignoreCase = true) && + result.frequency > 0 + }?.frequency + } + + @SuppressLint("PrivateApi") + private fun readApConfiguration(): ManualApConfiguration? = + readSoftApConfiguration() ?: readLegacyApConfiguration() + + @SuppressLint("PrivateApi") + private fun readSoftApConfiguration(): ManualApConfiguration? { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R) return null + return try { + val method = WifiManager::class.java.getMethod("getSoftApConfiguration") + val configuration = method.invoke(wifiManager) as? SoftApConfiguration + ?: return null + val ssid = configuration.ssid ?: return null + val bandAndChannel = when { + Build.VERSION.SDK_INT >= 36 -> { + val channels = configuration.channels + if (channels.size() == 0) null else channels.keyAt(0) to channels.valueAt(0) + } + else -> { + val band = ( + SoftApConfiguration::class.java + .getMethod("getBand") + .invoke(configuration) as? Number + )?.toInt() + val channel = SoftApConfiguration::class.java + .getMethod("getChannel") + .invoke(configuration) as? Number + if (band == null || channel == null) null else band to channel.toInt() + } + } + val band = bandAndChannel?.first + val channel = bandAndChannel?.second ?: 0 + ManualApConfiguration( + ssid = ssid, + band = band, + channel = channel, + frequencyMHz = wifiChannelToFrequencyMhz(channel, band), + security = mapSoftApSecurity(configuration.securityType), + ) + } catch (_: Throwable) { + null + } + } + + @SuppressLint("PrivateApi") + private fun readLegacyApConfiguration(): ManualApConfiguration? { + return try { + val method = WifiManager::class.java.getMethod("getWifiApConfiguration") + val configuration = method.invoke(wifiManager) as? WifiConfiguration + ?: return null + val ssid = unquote(configuration.SSID) ?: return null + val channel = try { + WifiConfiguration::class.java.getField("apChannel").getInt(configuration) + } catch (_: ReflectiveOperationException) { + 0 + } + val band = try { + WifiConfiguration::class.java.getField("apBand").getInt(configuration) + } catch (_: ReflectiveOperationException) { + null + } + ManualApConfiguration( + ssid = ssid, + band = band, + channel = channel, + frequencyMHz = wifiChannelToFrequencyMhz(channel, band), + security = mapWifiConfigurationSecurity(configuration), + ) + } catch (_: Throwable) { + null + } + } + + private fun mapSoftApSecurity(securityType: Int): Iap2WirelessSecurity = when (securityType) { + SoftApConfiguration.SECURITY_TYPE_OPEN -> Iap2WirelessSecurity.NONE + SoftApConfiguration.SECURITY_TYPE_WPA2_PSK -> Iap2WirelessSecurity.WPA_WPA2 + SoftApConfiguration.SECURITY_TYPE_WPA3_SAE_TRANSITION -> + Iap2WirelessSecurity.WPA3_TRANSITION + SoftApConfiguration.SECURITY_TYPE_WPA3_SAE -> Iap2WirelessSecurity.WPA3_ONLY + else -> Iap2WirelessSecurity.WPA_WPA2 + } + + private fun mapWifiConfigurationSecurity( + configuration: WifiConfiguration, + ): Iap2WirelessSecurity { + val keyManagement = configuration.allowedKeyManagement ?: return Iap2WirelessSecurity.NONE + val open = keyManagement.get(WifiConfiguration.KeyMgmt.NONE) + val wpa2 = keyManagement.get(WifiConfiguration.KeyMgmt.WPA2_PSK) + val sae = keyManagement.get(WifiConfiguration.KeyMgmt.SAE) + return when { + open && !wpa2 && !sae -> Iap2WirelessSecurity.NONE + wpa2 && sae -> Iap2WirelessSecurity.WPA3_TRANSITION + wpa2 -> Iap2WirelessSecurity.WPA_WPA2 + sae -> Iap2WirelessSecurity.WPA3_ONLY + else -> Iap2WirelessSecurity.WPA_WPA2 + } + } + + private fun bandLabel(frequencyMHz: Int): String = when (frequencyMHz) { + in 2400..2500 -> "2.4 GHz" + in 5150..5895 -> "5 GHz" + in 5925..7125 -> "6 GHz" + else -> "Unknown band" + } + + private fun unquote(value: String?): String? { + if (value == null) return null + return if (value.length >= 2 && value.first() == '"' && value.last() == '"') { + value.substring(1, value.length - 1) + } else { + value + } + } + + private fun ByteArray.toMacAddressString(): String = + joinToString(":") { byte -> "%02x".format(byte.toInt() and 0xff) } + + private fun sleep(nanos: Long) { + try { + TimeUnit.NANOSECONDS.sleep(nanos) + } catch (interrupted: InterruptedException) { + Thread.currentThread().interrupt() + throw IOException("Interrupted while waiting for the manual hotspot", interrupted) + } + } + + private fun deadlineAfter(timeoutMillis: Long): Long { + val now = System.nanoTime() + val delta = timeoutMillis * NANOS_PER_MILLISECOND + return if (Long.MAX_VALUE - now < delta) Long.MAX_VALUE else now + delta + } + + private fun remainingNanos(deadlineNanos: Long): Long = + (deadlineNanos - System.nanoTime()).coerceAtLeast(0L) + + private class ManualApConfiguration( + val ssid: String, + val band: Int?, + val channel: Int, + val frequencyMHz: Int?, + val security: Iap2WirelessSecurity, + ) + + private class LocalHotspotInterface( + val name: String, + val hostAddress: InetAddress, + val hardwareAddress: String?, + val score: Int, + ) + + private companion object { + const val TAG = "xcertplay-usb" + const val NANOS_PER_MILLISECOND = 1_000_000L + val INTERFACE_POLL_NANOS: Long = TimeUnit.MILLISECONDS.toNanos(250) + val EXCLUDED_INTERFACE_PREFIXES = listOf( + "lo", + "dummy", + "rmnet", + "r_rmnet", + "tun", + "ppp", + "sit", + "ip6", + "bond", + ) + } +} + +private fun ManualHotspotSecurity.toIap2Security(): Iap2WirelessSecurity = when (this) { + ManualHotspotSecurity.OPEN -> Iap2WirelessSecurity.NONE + ManualHotspotSecurity.WPA2 -> Iap2WirelessSecurity.WPA_WPA2 + ManualHotspotSecurity.WPA3_TRANSITION -> Iap2WirelessSecurity.WPA3_TRANSITION + ManualHotspotSecurity.WPA3 -> Iap2WirelessSecurity.WPA3_ONLY +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/network/P2pConfigurationMemory.kt b/shared/src/main/java/com/shilapi/xcertplay/network/P2pConfigurationMemory.kt new file mode 100644 index 0000000..0fd0b04 --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/network/P2pConfigurationMemory.kt @@ -0,0 +1,37 @@ +package com.shilapi.xcertplay.network + +import android.content.Context +import java.util.UUID + +/** Only radio settings are stored: never network credentials, phone identifiers or addresses. */ +internal class P2pConfigurationMemory(context: Context) { + private val prefs = context.getSharedPreferences("carplay_wifi_p2p_success", Context.MODE_PRIVATE) + data class Record(val encoded: String, val request: P2pCreationRequest, val stationMHz: Int?) + + fun read(): Record? = runCatching { + val encoded = prefs.getString("confirmed", null) ?: return null + val fields = encoded.split('|') + if (fields.size != 5) return null + val requested = fields[1].toInt() + val request = when (fields[0]) { + "system" -> if (requested == 0) P2pCreationRequest(P2pCreationMode.SYSTEM_DEFAULT) else return null + "frequency" -> P2pStartupRecovery.rememberedFrequency(requested) ?: return null + else -> return null + } + if (wifiFrequencyMhzToChannel(fields[2].toInt()) == null) return null + UUID.fromString(fields[4]) + Record(encoded, request, fields[3].toInt().takeIf { it > 0 }) + }.getOrNull() + + fun remember(request: P2pCreationRequest, actualMHz: Int, stationMHz: Int?): Boolean { + val kind = if (request.mode == P2pCreationMode.SYSTEM_DEFAULT) "system" else "frequency" + val encoded = "$kind|${request.frequencyMHz ?: 0}|$actualMHz|${stationMHz ?: 0}|${UUID.randomUUID()}" + return synchronized(prefs) { prefs.edit().putString("confirmed", encoded).commit() } + } + + /** A late close from an older manager must not erase a newer successful session. */ + fun forget(record: Record): Boolean = runCatching { synchronized(prefs) { + if (prefs.getString("confirmed", null) != record.encoded) false + else prefs.edit().remove("confirmed").commit() + } }.getOrDefault(false) +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/network/P2pOwnership.kt b/shared/src/main/java/com/shilapi/xcertplay/network/P2pOwnership.kt new file mode 100644 index 0000000..3c0e60e --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/network/P2pOwnership.kt @@ -0,0 +1,20 @@ +package com.shilapi.xcertplay.network + +import java.io.IOException +import java.security.MessageDigest + +/** Reinstall-stable namespace; never treats a generic DIRECT-* name as ours. */ +internal object P2pOwnership { + fun prefix(packageName: String, scopedId: String): String { + val digest = MessageDigest.getInstance("SHA-256") + .digest("$packageName:$scopedId".toByteArray(Charsets.UTF_8)) + return "DIRECT-dp" + digest.take(6).joinToString("") { "%02x".format(it.toInt() and 255) } + "-" + } + + fun canReclaim(isOwner: Boolean, ssid: String?, recorded: String?, prefix: String): Boolean = + isOwner && !ssid.isNullOrBlank() && + (ssid == recorded || (ssid.startsWith(prefix) && + ssid.removePrefix(prefix).matches(Regex("[A-Za-z0-9]{4}")))) +} + +class P2pResetRequiredException : IOException("An existing Wi-Fi Direct connection needs a reset") diff --git a/shared/src/main/java/com/shilapi/xcertplay/network/P2pStartupRecovery.kt b/shared/src/main/java/com/shilapi/xcertplay/network/P2pStartupRecovery.kt new file mode 100644 index 0000000..22dfcef --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/network/P2pStartupRecovery.kt @@ -0,0 +1,75 @@ +package com.shilapi.xcertplay.network + +import android.net.wifi.p2p.WifiP2pManager +import java.io.IOException + +internal enum class P2pCreationMode { ALIGNED_5_GHZ, ALIGNED_2_GHZ, FIXED_5_GHZ, FIXED_2_GHZ, SYSTEM_DEFAULT } + +internal data class P2pCreationRequest(val mode: P2pCreationMode, val frequencyMHz: Int? = null) + +internal class P2pCreateRejected(val reason: Int, message: String) : IOException(message) + +/** Only an explicit rejection permits another request; a timeout may still create a group. */ +internal object P2pStartupRecovery { + fun rememberedFrequency(frequency: Int): P2pCreationRequest? = when { + frequency in 2412..2462 && (frequency - 2412) % 5 == 0 -> + P2pCreationRequest(P2pCreationMode.FIXED_2_GHZ, frequency) + frequency in listOf(5180, 5200, 5220, 5240, 5745, 5765, 5785, 5805, 5825) -> + P2pCreationRequest(P2pCreationMode.FIXED_5_GHZ, frequency) + else -> null + } + + /** A band-only request still needs channel selection, which some BYD drivers cannot do. */ + fun plan(stationFrequency: Int?, preferred: P2pCreationRequest? = null): List = buildList { + val aligned24 = stationFrequency != null && stationFrequency in 2412..2462 && + (stationFrequency - 2412) % 5 == 0 + val aligned5 = stationFrequency in listOf(5180, 5200, 5220, 5240, 5745, 5765, 5785, 5805, 5825) + val frequencies = mutableSetOf() + fun channel(mode: P2pCreationMode, frequency: Int) { + if (frequencies.add(frequency)) add(P2pCreationRequest(mode, frequency)) + } + if (preferred?.mode == P2pCreationMode.SYSTEM_DEFAULT && preferred.frequencyMHz == null) add(preferred) + else preferred?.frequencyMHz?.let(::rememberedFrequency)?.let { channel(it.mode, it.frequencyMHz!!) } + if (aligned24) channel(P2pCreationMode.ALIGNED_2_GHZ, requireNotNull(stationFrequency)) + if (aligned5) channel(P2pCreationMode.ALIGNED_5_GHZ, requireNotNull(stationFrequency)) + fun twoGhz() = listOf(2437, 2412, 2462).forEach { channel(P2pCreationMode.FIXED_2_GHZ, it) } + fun fiveGhz() = listOf(5180, 5745).forEach { channel(P2pCreationMode.FIXED_5_GHZ, it) } + // Keep a shared radio on its existing station channel when possible. Otherwise prefer + // explicit non-DFS 5 GHz, then channels 6/1/11. The platform enforces regulatory limits. + if (aligned24) { twoGhz(); fiveGhz() } else { fiveGhz(); twoGhz() } + // Some vendors only implement the default-configuration API. Use it last, after every + // explicit-frequency option has been rejected, never before the 2.4 GHz attempts. + if (none { it.mode == P2pCreationMode.SYSTEM_DEFAULT }) add(P2pCreationRequest(P2pCreationMode.SYSTEM_DEFAULT)) + } + + fun create( + stationFrequency: Int?, + beforeRetry: () -> Unit, + preferred: P2pCreationRequest? = null, + request: (P2pCreationRequest) -> Unit, + ): P2pCreationRequest { + val modes = plan(stationFrequency, preferred) + var retriedBusy = false + for ((index, mode) in modes.withIndex()) { + while (true) { + try { + request(mode) + return mode + } catch (failure: P2pCreateRejected) { + when { + failure.reason == WifiP2pManager.BUSY && !retriedBusy -> { + retriedBusy = true + beforeRetry() + } + failure.reason == WifiP2pManager.ERROR && index < modes.lastIndex -> { + beforeRetry() + break + } + else -> throw failure + } + } + } + } + error("No Wi-Fi Direct creation mode attempted") + } +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/network/WifiP2pGroupManager.kt b/shared/src/main/java/com/shilapi/xcertplay/network/WifiP2pGroupManager.kt new file mode 100644 index 0000000..3b753d9 --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/network/WifiP2pGroupManager.kt @@ -0,0 +1,691 @@ +package com.shilapi.xcertplay.network + +import android.Manifest +import android.app.AppOpsManager +import android.content.Context +import android.content.pm.PackageManager +import android.location.LocationManager +import android.net.wifi.SupplicantState +import android.net.wifi.WifiManager +import android.net.wifi.p2p.WifiP2pConfig +import android.net.wifi.p2p.WifiP2pGroup +import android.net.wifi.p2p.WifiP2pInfo +import android.net.wifi.p2p.WifiP2pManager +import android.os.Build +import android.os.HandlerThread +import android.os.Looper +import android.provider.Settings +import android.util.Log +import androidx.annotation.RequiresApi +import com.shilapi.xcertplay.transport.Iap2WirelessSecurity +import java.io.IOException +import java.net.Inet4Address +import java.net.Inet6Address +import java.net.InetAddress +import java.net.NetworkInterface +import java.net.SocketException +import java.net.UnknownHostException +import java.security.SecureRandom +import java.util.Collections +import java.util.concurrent.CountDownLatch +import java.util.concurrent.TimeUnit +import java.util.concurrent.atomic.AtomicReference + +/** + * Creates a temporary Wi-Fi Direct group owner, preferring 5 GHz, that can also be joined as a legacy AP. + * + * The group is deliberately not persistent. [close] removes it and releases the callback thread. + */ +class WifiP2pGroupManager( + context: Context, + private val diagnostic: (String) -> Unit = {}, +) : WirelessHotspotManager { + private val appContext = context.applicationContext + private val p2pManager = appContext.getSystemService(WifiP2pManager::class.java) + ?: throw IllegalStateException("WifiP2pManager is unavailable") + private val stateLock = Object() + private val random = SecureRandom() + private val configurationMemory = P2pConfigurationMemory(appContext) + private var rememberedAttempt: P2pConfigurationMemory.Record? = null + private var pendingSuccess: (() -> Boolean)? = null + private var carPlayConfirmed = false + private val ownership = appContext.getSharedPreferences("carplay_wifi_p2p", Context.MODE_PRIVATE) + private val ssidPrefix by lazy { + // ANDROID_ID is scoped to the signing key, user and device on our supported OS versions. + val id = runCatching { Settings.Secure.getString(appContext.contentResolver, Settings.Secure.ANDROID_ID) } + .getOrNull()?.takeIf { it.isNotBlank() } + ?: ownership.getString("fallback_id", null) + ?: java.util.UUID.randomUUID().toString().also { + check(ownership.edit().putString("fallback_id", it).commit()) + } + P2pOwnership.prefix(appContext.packageName, id) + } + + private var channel: WifiP2pManager.Channel? = null + private var callbackThread: HandlerThread? = null + private var created = false + private var closed = false + private var startAttempt: StartAttempt? = null + + override fun start(timeoutMillis: Long): WirelessHotspotInfo { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) { + throw IOException("Wi-Fi P2P credentials require Android 10 (API 29) or newer") + } + check(Looper.myLooper() != Looper.getMainLooper()) { + "WifiP2pGroupManager.start must not run on the main thread" + } + require(timeoutMillis > 0) { "timeoutMillis must be positive" } + + val attempt = StartAttempt() + synchronized(stateLock) { + check(!closed) { "WifiP2pGroupManager is closed" } + check(startAttempt == null && !created) { + "A Wi-Fi P2P group is already starting or active" + } + startAttempt = attempt + } + + val thread = HandlerThread("xcertplay-wifi-p2p").apply { start() } + attempt.thread = thread + val deadlineNanos = deadlineAfter(timeoutMillis) + val credentials = randomCredentials() + + try { + val station = readStation() + val stationFrequency = station.alignmentFrequency + checkPrerequisites(station) + val remembered = configurationMemory.read() + val preferred = remembered?.takeIf { it.stationMHz == stationFrequency } + diagnostic(when { + preferred != null -> "Wi-Fi P2P remembered first mode=${preferred.request.mode} frequencyMHz=${preferred.request.frequencyMHz ?: "auto"}" + remembered != null -> "Wi-Fi P2P remembered skipped=station_channel_changed" + else -> "Wi-Fi P2P remembered unavailable" + }) + val p2pChannel = p2pManager.initialize( + appContext, + thread.looper, + createChannelListener(attempt), + ) + attempt.channel = p2pChannel + synchronized(stateLock) { + ensureStartActiveLocked(attempt) + channel = p2pChannel + callbackThread = thread + } + + logP2pState(attempt, p2pChannel) + // Preferences disappear on reinstall, but the scoped namespace survives. + val existing = requestGroupInfo(attempt, p2pChannel, REQUEST_POLL_NANOS, requireResponse = true) + diagnostic("Wi-Fi P2P existingGroup=${existing != null}") + if (existing != null) { + if (!P2pOwnership.canReclaim(existing.isGroupOwner, existing.networkName, + ownership.getString("owned_ssid", null), ssidPrefix)) { + throw P2pResetRequiredException() + } + diagnostic("Wi-Fi P2P reclaiming retained owned group") + removeGroupBlocking(p2pChannel) + val removalDeadline = minOf(deadlineNanos, deadlineAfter(REMOVE_GROUP_TIMEOUT_MILLIS)) + while (requestGroupInfo(attempt, p2pChannel, REQUEST_POLL_NANOS, requireResponse = true) != null) { + if (remainingNanos(removalDeadline) == 0L) throw IOException("Wi-Fi Direct reset did not finish") + synchronized(stateLock) { waitNanos(TimeUnit.MILLISECONDS.toNanos(100)) } + } + } + + val creation = P2pStartupRecovery.create( + stationFrequency = stationFrequency, + preferred = preferred?.request, + beforeRetry = { + ensureStartActive(attempt) + // Do not cancel discovery, toggle Wi-Fi, or remove a newly observed group. + // A competing app may have acquired the radio since our rejected request. + synchronized(stateLock) { waitNanos(TimeUnit.MILLISECONDS.toNanos(500)) } + ensureStartActive(attempt) + checkPrerequisites(readStation()) + if (requestGroupInfo(attempt, p2pChannel, REQUEST_POLL_NANOS, requireResponse = true) != null) { + throw P2pResetRequiredException() + } + }, + request = { selection -> + ensureStartActive(attempt) + if (remainingNanos(deadlineNanos) == 0L) throw IOException("Wi-Fi Direct startup timed out") + val config = if (selection.mode == P2pCreationMode.SYSTEM_DEFAULT) null else { + val builder = WifiP2pConfig.Builder() + .setNetworkName(credentials.ssid) + .setPassphrase(credentials.passphrase) + builder.setGroupOperatingFrequency(requireNotNull(selection.frequencyMHz)) + builder.build() + } + if (config != null && !ownership.edit().putString("owned_ssid", credentials.ssid).commit()) { + throw IOException("Could not record Wi-Fi P2P group ownership") + } + val request = CreateRequest() + synchronized(stateLock) { + ensureStartActiveLocked(attempt) + attempt.request = request + } + diagnostic("Wi-Fi P2P create mode=${selection.mode} frequencyMHz=${selection.frequencyMHz ?: "auto"}") + // The API 29 overload with null config uses system-generated credentials + // without requesting a persistent group, unlike the older two-argument API. + val usingRemembered = preferred?.request == selection + if (usingRemembered) synchronized(stateLock) { rememberedAttempt = preferred } + try { + p2pManager.createGroup(p2pChannel, config, createActionListener(attempt, request)) + awaitGroupCreated(attempt, request, deadlineNanos, timeoutMillis) + } catch (failure: P2pCreateRejected) { + if (usingRemembered && failure.reason == WifiP2pManager.ERROR && preferred != null) { + if (configurationMemory.forget(preferred)) diagnostic("Wi-Fi P2P remembered cleared=create_rejected") + } + throw failure + } + }, + ) + val group = awaitUsableGroup( + attempt = attempt, + channel = p2pChannel, + credentials = if (creation.mode == P2pCreationMode.SYSTEM_DEFAULT) null else credentials, + deadlineNanos = deadlineNanos, + timeoutMillis = timeoutMillis, + ) + if (!ownership.edit().putString("owned_ssid", group.ssid).commit()) { + throw IOException("Could not record Wi-Fi P2P group ownership") + } + diagnostic("Wi-Fi P2P ready mode=${creation.mode} band=${group.bandLabel} channel=${group.channel} frequencyMHz=${group.frequencyMHz}") + diagnostic("Wi-Fi P2P channel requestedMHz=${creation.frequencyMHz ?: "auto"} actualMHz=${group.frequencyMHz} matched=${creation.frequencyMHz?.let { it == group.frequencyMHz } ?: "system_selected"}") + synchronized(stateLock) { + ensureStartActiveLocked(attempt) + created = true + startAttempt = null + pendingSuccess = { + configurationMemory.remember(creation, requireNotNull(group.frequencyMHz), stationFrequency) + } + } + return group + } catch (failure: Exception) { + diagnostic("Wi-Fi P2P startup stopped type=${failure.javaClass.simpleName}") + cleanupFailedStart(attempt) + throw failure + } + } + + override fun onCarPlayConfirmed() = synchronized(stateLock) { + if (closed || !created || carPlayConfirmed) return@synchronized + val save = pendingSuccess ?: return@synchronized + // Storage failure must not interrupt a working CarPlay session. + carPlayConfirmed = true + val saved = runCatching { save() }.getOrDefault(false) + diagnostic("Wi-Fi P2P remembered saved=$saved proof=authenticated_first_frame") + } + + override fun close() { + val attempt: StartAttempt? + val activeChannel: WifiP2pManager.Channel? + val activeThread: HandlerThread? + val removeGroup: Boolean + synchronized(stateLock) { + if (closed) return + closed = true + if (!carPlayConfirmed) rememberedAttempt?.let { + if (configurationMemory.forget(it)) diagnostic("Wi-Fi P2P remembered cleared=session_unconfirmed") + } + pendingSuccess = null + attempt = startAttempt + attempt?.stopped = true + stateLock.notifyAll() + activeChannel = channel ?: attempt?.channel + activeThread = callbackThread ?: attempt?.thread + removeGroup = created || attempt?.createSucceeded == true + channel = null + callbackThread = null + startAttempt = null + } + + if (removeGroup && activeChannel != null) { + removeGroupBlocking(activeChannel) + } + activeChannel?.close() + activeThread?.quitSafely() + } + + private fun createChannelListener( + attempt: StartAttempt, + ): WifiP2pManager.ChannelListener = object : WifiP2pManager.ChannelListener { + override fun onChannelDisconnected() { + failAttempt(attempt, IOException("Wi-Fi P2P channel disconnected")) + } + } + + private fun createActionListener( + attempt: StartAttempt, + request: CreateRequest, + ): WifiP2pManager.ActionListener = object : WifiP2pManager.ActionListener { + override fun onSuccess() { + val activeChannel = attempt.channel + val removeDetachedGroup = synchronized(stateLock) { + if (request.completed) return + request.completed = true + attempt.createSucceeded = true + if (startAttempt === attempt && attempt.request === request && !attempt.stopped && !closed) { + created = true + stateLock.notifyAll() + false + } else true + } + if (removeDetachedGroup && activeChannel != null) { + removeGroup(activeChannel, waitForCallback = false) + } + } + + override fun onFailure(reason: Int) { + synchronized(stateLock) { + if (request.completed || attempt.request !== request) return + request.completed = true + request.failure = P2pCreateRejected(reason, + "Wi-Fi P2P createGroup failed: ${failureReason(reason)} (code=$reason)") + stateLock.notifyAll() + } + diagnostic("Wi-Fi P2P create rejected code=$reason reason=${failureReason(reason)}") + } + } + + private fun failAttempt(attempt: StartAttempt, failure: IOException) { + synchronized(stateLock) { + if (startAttempt === attempt && !attempt.stopped && !closed) { + if (attempt.failure == null) attempt.failure = failure + stateLock.notifyAll() + } + } + } + + private fun awaitGroupCreated( + attempt: StartAttempt, + request: CreateRequest, + deadlineNanos: Long, + timeoutMillis: Long, + ) { + synchronized(stateLock) { + while (true) { + ensureStartActiveLocked(attempt) + attempt.failure?.let { throw it } + request.failure?.let { throw it } + if (attempt.createSucceeded) return + + val remainingNanos = remainingNanos(deadlineNanos) + if (remainingNanos <= 0) { + throw IOException( + "Timed out after ${timeoutMillis}ms waiting for Wi-Fi P2P group creation", + ) + } + waitNanos(remainingNanos) + } + } + } + + @RequiresApi(Build.VERSION_CODES.Q) + private fun awaitUsableGroup( + attempt: StartAttempt, + channel: WifiP2pManager.Channel, + credentials: Credentials?, + deadlineNanos: Long, + timeoutMillis: Long, + ): WirelessHotspotInfo { + var lastReason = "group information was not available" + while (true) { + ensureStartActive(attempt) + val remainingNanos = remainingNanos(deadlineNanos) + if (remainingNanos <= 0) { + throw IOException( + "Timed out after ${timeoutMillis}ms waiting for a usable Wi-Fi P2P group: " + + lastReason, + ) + } + + val group = requestGroupInfo( + attempt = attempt, + channel = channel, + timeoutNanos = minOf(remainingNanos, REQUEST_POLL_NANOS), + ) + if (group == null) continue + if (!group.isGroupOwner) { + throw IOException("Wi-Fi P2P device became a group client instead of owner") + } + + val networkName = group.networkName?.takeIf { it.isNotBlank() } + if (credentials != null && networkName != null && networkName != credentials.ssid) { + throw IOException("Wi-Fi Direct returned an unexpected group") + } + val passphrase = group.passphrase?.takeIf { it.isNotBlank() } + ?: credentials?.passphrase + val interfaceName = group.getInterface()?.takeIf { it.isNotBlank() } + val frequencyMHz = group.frequency + val channelNumber = wifiFrequencyMhzToChannel(frequencyMHz) + if ( + networkName == null || passphrase == null || + interfaceName == null || + frequencyMHz <= 0 || + channelNumber == null + ) { + lastReason = "incomplete group details frequencyMHz=$frequencyMHz" + continue + } + val band = when { + is5Ghz(frequencyMHz) -> "5 GHz" + frequencyMHz in 2412..2484 -> "2.4 GHz" + else -> throw IOException("Wi-Fi P2P returned an unsupported band at ${frequencyMHz}MHz") + } + + val hostAddress = awaitInterfaceAddress(attempt, interfaceName, deadlineNanos) + ?: requestConnectionAddress( + attempt = attempt, + channel = channel, + timeoutNanos = minOf(remainingNanos(deadlineNanos), REQUEST_POLL_NANOS), + ) + if (hostAddress == null) { + lastReason = "interface $interfaceName has no usable IPv6 or IPv4 address" + continue + } + + return WirelessHotspotInfo( + ssid = networkName, + passphrase = passphrase, + security = groupSecurity(group), + channel = channelNumber, + frequencyMHz = frequencyMHz, + bssid = interfaceHardwareAddress(interfaceName) + ?: group.owner?.deviceAddress?.takeIf { it.isNotBlank() }, + interfaceName = interfaceName, + hostAddress = hostAddress, + bandLabel = band, + backend = WirelessHotspotBackend.WIFI_P2P, + ) + } + } + + private fun requestGroupInfo( + attempt: StartAttempt, + channel: WifiP2pManager.Channel, + timeoutNanos: Long, + requireResponse: Boolean = false, + ): WifiP2pGroup? { + val result = AtomicReference() + val latch = CountDownLatch(1) + p2pManager.requestGroupInfo(channel) { + result.set(it) + latch.countDown() + } + if (!await(latch, timeoutNanos)) { + if (requireResponse) throw IOException("Wi-Fi Direct did not respond") + return null + } + ensureStartActive(attempt) + return result.get() + } + + private fun requestConnectionAddress( + attempt: StartAttempt, + channel: WifiP2pManager.Channel, + timeoutNanos: Long, + ): InetAddress? { + val result = AtomicReference() + val latch = CountDownLatch(1) + p2pManager.requestConnectionInfo(channel) { + result.set(it) + latch.countDown() + } + if (!await(latch, timeoutNanos)) return null + ensureStartActive(attempt) + val info = result.get() ?: return null + if (!info.groupFormed) return null + return info.groupOwnerAddress?.takeUnless(InetAddress::isAnyLocalAddress) + } + + private fun await(latch: CountDownLatch, timeoutNanos: Long): Boolean = try { + val waitNanos = timeoutNanos.coerceAtLeast(1L) + latch.await(waitNanos, TimeUnit.NANOSECONDS) + } catch (interrupted: InterruptedException) { + Thread.currentThread().interrupt() + throw IOException("Interrupted while waiting for Wi-Fi P2P", interrupted) + } + + private fun interfaceAddress(interfaceName: String): InetAddress? { + val networkInterface = networkInterface(interfaceName) ?: return null + var ipv4: InetAddress? = null + for (address in Collections.list(networkInterface.inetAddresses)) { + if (address is Inet6Address && address.isLinkLocalAddress) { + if (address.scopeId == networkInterface.index) return address + try { + return Inet6Address.getByAddress(null, address.address, networkInterface) + } catch (_: UnknownHostException) { + continue + } + } + if (address is Inet4Address && !address.isLoopbackAddress && ipv4 == null) { + ipv4 = address + } + } + return ipv4 + } + + private fun awaitInterfaceAddress( + attempt: StartAttempt, + interfaceName: String, + startupDeadlineNanos: Long, + ): InetAddress? { + // Group creation precedes IPv6 link-local configuration on some head units. + // Give IPv6 a bounded chance to appear before falling back to IPv4. + val addressDeadline = minOf(startupDeadlineNanos, deadlineAfter(2_000)) + while (true) { + ensureStartActive(attempt) + val address = interfaceAddress(interfaceName) + if (address is Inet6Address || remainingNanos(addressDeadline) <= 0) return address + Thread.sleep(100) + } + } + + private data class Station(val state: SupplicantState?, val reportedFrequency: Int?) { + // A vendor may retain the last frequency after disconnecting. Only align to an + // established Wi-Fi association; internet validation is deliberately irrelevant. + val alignmentFrequency: Int? + get() = reportedFrequency?.takeIf { state == SupplicantState.COMPLETED && it > 0 } + } + + @Suppress("DEPRECATION") + private fun readStation(): Station = runCatching { + val info = appContext.getSystemService(WifiManager::class.java)?.connectionInfo + Station(info?.supplicantState, info?.frequency?.takeIf { it > 0 }) + }.getOrDefault(Station(null, null)) + + private fun checkPrerequisites(station: Station) { + val wifi = appContext.getSystemService(WifiManager::class.java) + val fiveGhzSupported = runCatching { wifi?.is5GHzBandSupported }.getOrNull() + val wifiEnabled = runCatching { wifi?.isWifiEnabled }.getOrNull() + val locationEnabled = runCatching { + appContext.getSystemService(LocationManager::class.java)?.isLocationEnabled + }.getOrNull() + val required = if (Build.VERSION.SDK_INT >= 33) Manifest.permission.NEARBY_WIFI_DEVICES + else Manifest.permission.ACCESS_FINE_LOCATION + val granted = appContext.checkSelfPermission(required) == PackageManager.PERMISSION_GRANTED + val locationAccessMode = if (Build.VERSION.SDK_INT in 29..32) runCatching { + appContext.getSystemService(AppOpsManager::class.java)?.unsafeCheckOpNoThrow( + AppOpsManager.OPSTR_FINE_LOCATION, android.os.Process.myUid(), appContext.packageName) + }.getOrNull() else null + diagnostic("Wi-Fi P2P preflight wifiEnabled=$wifiEnabled locationEnabled=$locationEnabled permissionGranted=$granted locationAccessMode=${locationAccessMode ?: "unknown"} stationMHz=${station.alignmentFrequency ?: "unknown"} stationState=${station.state ?: "unknown"} reportedStationMHz=${station.reportedFrequency ?: "unknown"} fiveGhzSupported=${fiveGhzSupported ?: "unknown"}") + if (!granted) throw IOException(if (Build.VERSION.SDK_INT >= 33) + "Allow Nearby devices for DiPlay in the head unit's app permissions" + else "Allow precise Location for DiPlay in the head unit's app permissions") + if (wifiEnabled == false) throw IOException("Turn on Wi-Fi in the head unit's settings, then reconnect") + // Location mode is diagnostic only: AOSP createGroup does not require it to be on. + // Do not block firmware where Wi-Fi Direct works with Location services disabled. + } + + @RequiresApi(Build.VERSION_CODES.Q) + private fun logP2pState(attempt: StartAttempt, channel: WifiP2pManager.Channel) { + val result = AtomicReference() + val latch = CountDownLatch(1) + p2pManager.requestP2pState(channel) { state -> result.set(state); latch.countDown() } + await(latch, REQUEST_POLL_NANOS) + ensureStartActive(attempt) + diagnostic("Wi-Fi P2P frameworkState=${result.get() ?: "unknown"}") + } + + private fun interfaceHardwareAddress(interfaceName: String): String? = + networkInterface(interfaceName) + ?.hardwareAddress + ?.takeIf { it.isNotEmpty() } + ?.joinToString(":") { byte -> "%02x".format(byte.toInt() and 0xff) } + + private fun networkInterface(interfaceName: String): NetworkInterface? = try { + NetworkInterface.getByName(interfaceName) + } catch (_: SocketException) { + null + } + + private fun groupSecurity(group: WifiP2pGroup): Iap2WirelessSecurity { + if (Build.VERSION.SDK_INT < 36) return Iap2WirelessSecurity.WPA_WPA2 + return when (group.securityType) { + WifiP2pGroup.SECURITY_TYPE_WPA2_PSK -> Iap2WirelessSecurity.WPA_WPA2 + WifiP2pGroup.SECURITY_TYPE_WPA3_COMPATIBILITY -> + Iap2WirelessSecurity.WPA3_TRANSITION + WifiP2pGroup.SECURITY_TYPE_WPA3_SAE -> Iap2WirelessSecurity.WPA3_ONLY + else -> throw IOException( + "Unsupported Wi-Fi P2P security type: ${group.securityType}", + ) + } + } + + private fun randomCredentials(): Credentials = Credentials( + ssid = "$ssidPrefix${randomToken(4)}", + passphrase = randomToken(16), + ) + + private fun randomToken(length: Int): String = + buildString(length) { + repeat(length) { + append(TOKEN_ALPHABET[random.nextInt(TOKEN_ALPHABET.length)]) + } + } + + private fun ensureStartActive(attempt: StartAttempt) { + synchronized(stateLock) { + ensureStartActiveLocked(attempt) + } + } + + private fun ensureStartActiveLocked(attempt: StartAttempt) { + if (closed) throw IOException("WifiP2pGroupManager closed while starting") + if (startAttempt !== attempt) throw IOException("Wi-Fi P2P startup was cancelled") + if (attempt.stopped) throw IOException("Wi-Fi P2P group stopped before startup completed") + attempt.failure?.let { throw it } + } + + private fun cleanupFailedStart(attempt: StartAttempt) { + val failedChannel: WifiP2pManager.Channel? + val failedThread: HandlerThread? + val removeGroup: Boolean + synchronized(stateLock) { + if (startAttempt === attempt) startAttempt = null + attempt.stopped = true + stateLock.notifyAll() + failedChannel = attempt.channel + failedThread = attempt.thread + removeGroup = attempt.createSucceeded + created = false + if (channel === failedChannel) channel = null + if (callbackThread === failedThread) callbackThread = null + } + if (removeGroup && failedChannel != null) { + removeGroupBlocking(failedChannel) + } + failedChannel?.close() + failedThread?.quitSafely() + } + + private fun removeGroupBlocking(channel: WifiP2pManager.Channel) { + removeGroup(channel, waitForCallback = true) + } + + private fun removeGroup(channel: WifiP2pManager.Channel, waitForCallback: Boolean) { + val latch = CountDownLatch(1) + try { + p2pManager.removeGroup( + channel, + object : WifiP2pManager.ActionListener { + override fun onSuccess() { + latch.countDown() + } + + override fun onFailure(reason: Int) { + diagnostic("Wi-Fi P2P remove rejected code=$reason reason=${failureReason(reason)}") + latch.countDown() + } + }, + ) + } catch (failure: RuntimeException) { + Log.w(TAG, "Wi-Fi P2P removeGroup could not be issued", failure) + latch.countDown() + } + if (!waitForCallback) return + try { + latch.await(REMOVE_GROUP_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS) + } catch (interrupted: InterruptedException) { + Thread.currentThread().interrupt() + } + } + + private fun waitNanos(nanos: Long) { + val millis = nanos / NANOS_PER_MILLISECOND + val remainder = (nanos % NANOS_PER_MILLISECOND).toInt() + try { + stateLock.wait(millis, remainder) + } catch (interrupted: InterruptedException) { + Thread.currentThread().interrupt() + throw IOException("Interrupted while waiting for Wi-Fi P2P", interrupted) + } + } + + private fun deadlineAfter(timeoutMillis: Long): Long { + val now = System.nanoTime() + val delta = timeoutMillis * NANOS_PER_MILLISECOND + return if (Long.MAX_VALUE - now < delta) Long.MAX_VALUE else now + delta + } + + private fun remainingNanos(deadlineNanos: Long): Long = + (deadlineNanos - System.nanoTime()).coerceAtLeast(0L) + + private fun failureReason(reason: Int): String = when (reason) { + WifiP2pManager.P2P_UNSUPPORTED -> "Wi-Fi P2P is unsupported" + WifiP2pManager.BUSY -> "Wi-Fi P2P is busy" + WifiP2pManager.ERROR -> "generic error" + WifiP2pManager.NO_PERMISSION -> "permission denied" + else -> "reason $reason" + } + + private fun is5Ghz(frequencyMHz: Int): Boolean = frequencyMHz in 5150..5895 + + private class StartAttempt { + var channel: WifiP2pManager.Channel? = null + var thread: HandlerThread? = null + var createSucceeded = false + var request: CreateRequest? = null + var failure: IOException? = null + var stopped = false + } + + private class CreateRequest { + var completed = false + var failure: P2pCreateRejected? = null + } + + private class Credentials( + val ssid: String, + val passphrase: String, + ) + + private companion object { + const val TAG = "xcertplay-usb" + const val NANOS_PER_MILLISECOND = 1_000_000L + const val REMOVE_GROUP_TIMEOUT_MILLIS = 2_000L + val REQUEST_POLL_NANOS: Long = TimeUnit.MILLISECONDS.toNanos(500) + const val TOKEN_ALPHABET = + "ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz23456789" + } +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/network/WirelessHotspotManager.kt b/shared/src/main/java/com/shilapi/xcertplay/network/WirelessHotspotManager.kt new file mode 100644 index 0000000..1a75aea --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/network/WirelessHotspotManager.kt @@ -0,0 +1,95 @@ +package com.shilapi.xcertplay.network + +import com.shilapi.xcertplay.transport.Iap2WirelessSecurity +import java.io.Closeable +import java.net.InetAddress + +enum class WirelessHotspotBackend(val label: String) { + WIFI_P2P("Wi-Fi P2P"), + LOCAL_ONLY_HOTSPOT("LocalOnlyHotspot"), + MANUAL_HOTSPOT("Manual hotspot"), +} + +/** The live Wi-Fi credentials and interface details for one wireless CarPlay hotspot. */ +class WirelessHotspotInfo( + val ssid: String, + val passphrase: String, + val security: Iap2WirelessSecurity, + val channel: Int, + val frequencyMHz: Int?, + val bssid: String?, + val interfaceName: String?, + val hostAddress: InetAddress?, + val bandLabel: String, + val backend: WirelessHotspotBackend, +) { + override fun toString(): String = + "WirelessHotspotInfo(backend=${backend.label}, ssid='$ssid', " + + "passphrase=, security=$security, channel=$channel, " + + "frequencyMHz=$frequencyMHz, bssid='$bssid', interfaceName=$interfaceName, " + + "hostAddress=$hostAddress, bandLabel='$bandLabel')" +} + +/** Owns one Android Wi-Fi group and all resources needed to keep it alive. */ +interface WirelessHotspotManager : Closeable { + /** + * Starts a hotspot and waits up to [timeoutMillis] for its live configuration and AP + * interface. Implementations must not be called on the main thread. + */ + fun start(timeoutMillis: Long): WirelessHotspotInfo + + /** The authenticated wireless session has rendered CarPlay; AP creation alone is insufficient. */ + fun onCarPlayConfirmed() {} +} + +/** + * Converts IEEE 802.11 frequency in MHz to its channel number. + * + * Android's [android.net.wifi.p2p.WifiP2pGroup.getFrequency] reports MHz, while the iAP2 + * wireless CarPlay payload expects a channel number. + */ +internal fun wifiFrequencyMhzToChannel(frequencyMHz: Int): Int? = when { + frequencyMHz in 2412..2472 && (frequencyMHz - 2407) % 5 == 0 -> + (frequencyMHz - 2407) / 5 + frequencyMHz == 2484 -> 14 + frequencyMHz in 5160..5895 && (frequencyMHz - 5000) % 5 == 0 -> + (frequencyMHz - 5000) / 5 + frequencyMHz in 5955..7115 && (frequencyMHz - 5950) % 5 == 0 -> + (frequencyMHz - 5950) / 5 + else -> null +} + +/** Converts an IEEE 802.11 channel number to MHz when its band is known. */ +internal fun wifiChannelToFrequencyMhz(channel: Int, band: Int? = null): Int? = when { + channel == 0 -> null + band == 1 && channel in 1..13 -> 2407 + channel * 5 + band == 1 && channel == 14 -> 2484 + band == 2 && channel in 32..177 -> 5000 + channel * 5 + band == 3 && channel in 1..233 -> 5950 + channel * 5 + else -> null +} + +/** Maps Android's [android.net.wifi.SoftApConfiguration] band constants to a user-facing label. */ +internal fun wifiBandLabel(band: Int?): String? = when (band) { + 1 -> "2.4 GHz" + 2 -> "5 GHz" + 3 -> "6 GHz" + else -> null +} + +/** + * Returns only a channel observed from Android. An unknown channel must stay unknown instead of + * echoing the user's desired channel back to the iPhone in 0x5703. + */ +internal fun observedManualHotspotChannel( + apChannel: Int, + connectionFrequencyMHz: Int?, + scanFrequencyMHz: Int?, + apFrequencyMHz: Int?, +): Int { + if (apChannel > 0) return apChannel + connectionFrequencyMHz?.let(::wifiFrequencyMhzToChannel)?.let { return it } + scanFrequencyMHz?.let(::wifiFrequencyMhzToChannel)?.let { return it } + apFrequencyMHz?.let(::wifiFrequencyMhzToChannel)?.let { return it } + return 0 +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/orchestration/CarPlayController.kt b/shared/src/main/java/com/shilapi/xcertplay/orchestration/CarPlayController.kt new file mode 100644 index 0000000..6c560d9 --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/orchestration/CarPlayController.kt @@ -0,0 +1,1965 @@ +package com.shilapi.xcertplay.orchestration + +import android.bluetooth.BluetoothAdapter +import android.bluetooth.BluetoothA2dp +import android.bluetooth.BluetoothDevice +import android.bluetooth.BluetoothHeadset +import android.bluetooth.BluetoothManager +import android.bluetooth.BluetoothProfile +import android.bluetooth.BluetoothSocket +import android.content.ComponentName +import android.content.Context +import android.content.Intent +import android.content.ServiceConnection +import android.hardware.usb.UsbDevice +import android.hardware.usb.UsbManager +import android.os.Build +import android.os.Handler +import android.os.IBinder +import android.os.Looper +import android.provider.Settings +import android.util.Log +import com.shilapi.xcertplay.airplay.AirPlayConfig +import com.shilapi.xcertplay.airplay.AirPlayContact +import com.shilapi.xcertplay.airplay.AirPlayDeviceInfo +import com.shilapi.xcertplay.airplay.AirPlayIdentity +import com.shilapi.xcertplay.airplay.AirPlayMediaHandler +import com.shilapi.xcertplay.airplay.AirPlaySession +import com.shilapi.xcertplay.airplay.AirPlaySessionListener +import com.shilapi.xcertplay.airplay.PairingStore +import com.shilapi.xcertplay.iap2.session.Iap2Session +import com.shilapi.xcertplay.mfi.Iap2MfiAuthenticationClient +import com.shilapi.xcertplay.mfi.MfiAuthenticationClient +import com.shilapi.xcertplay.mfi.RemoteMfiAuthenticationClient +import com.shilapi.xcertplay.mfi.LocalMfiAuthenticationClient +import com.shilapi.xcertplay.network.CarPlayBonjour +import com.shilapi.xcertplay.network.CarPlayVpnService +import com.shilapi.xcertplay.network.LocalOnlyHotspotManager +import com.shilapi.xcertplay.network.ManualHotspotManager +import com.shilapi.xcertplay.network.WifiP2pGroupManager +import com.shilapi.xcertplay.network.WirelessHotspotInfo +import com.shilapi.xcertplay.network.WirelessHotspotBackend +import com.shilapi.xcertplay.network.WirelessHotspotManager +import com.shilapi.xcertplay.transport.BlockingDuplexByteStream +import com.shilapi.xcertplay.transport.BluetoothRfcommDuplexStream +import com.shilapi.xcertplay.transport.Ch341DeviceMatcher +import com.shilapi.xcertplay.transport.Ch341I2cTransport +import com.shilapi.xcertplay.transport.Ch341UsbHost +import com.shilapi.xcertplay.transport.Ch341UsbSession +import com.shilapi.xcertplay.transport.Iap2IdentificationConfig +import com.shilapi.xcertplay.transport.Iap2LocationProvider +import com.shilapi.xcertplay.transport.Iap2UsbMuxHost +import com.shilapi.xcertplay.transport.Iap2UsbSession +import com.shilapi.xcertplay.transport.Iap2WiredCarPlayEndpoint +import com.shilapi.xcertplay.transport.Iap2WiredControlClient +import com.shilapi.xcertplay.transport.Iap2WiredControlTerminal +import com.shilapi.xcertplay.transport.Iap2WirelessCarPlayEndpoint +import com.shilapi.xcertplay.transport.Iap2WirelessControlClient +import com.shilapi.xcertplay.transport.Iap2WirelessControlTerminal +import com.shilapi.xcertplay.transport.Iap2WirelessIdentification +import com.shilapi.xcertplay.transport.I2cTransport +import com.shilapi.xcertplay.transport.I2cTransportException +import com.shilapi.xcertplay.transport.IphoneCarPlayConfiguration +import com.shilapi.xcertplay.transport.IphoneUsbException +import com.shilapi.xcertplay.transport.IphoneUsbHost +import com.shilapi.xcertplay.transport.IphoneUsbMatcher +import com.shilapi.xcertplay.transport.LinuxI2cTransport +import com.shilapi.xcertplay.transport.LockdownCarKitClient +import com.shilapi.xcertplay.transport.LockdownPairingClient +import com.shilapi.xcertplay.transport.LockdownPairRecord +import com.shilapi.xcertplay.transport.NcmFunctionDiscovery +import com.shilapi.xcertplay.transport.NcmUsbBridge +import java.io.Closeable +import java.io.IOException +import java.net.InetAddress +import java.net.Inet6Address +import java.util.Locale +import java.util.UUID +import java.util.concurrent.CountDownLatch +import java.util.concurrent.ExecutorService +import java.util.concurrent.Executors +import java.util.concurrent.TimeUnit +import java.util.concurrent.atomic.AtomicBoolean +import java.util.concurrent.atomic.AtomicInteger +import java.util.concurrent.atomic.AtomicReference + +sealed class CarPlayStatus { + data object DiscoveringMfi : CarPlayStatus() + data object WaitingForMfi : CarPlayStatus() + data object RequestingMfiPermission : CarPlayStatus() + data object MfiReady : CarPlayStatus() + data object StartingHotspot : CarPlayStatus() + data class HotspotReady( + val ssid: String, + val band: String, + val channel: Int, + val bssid: String, + val address: String, + val backend: String, + ) : CarPlayStatus() + data object WaitingForPairedIphone : CarPlayStatus() + data object ConnectingBluetooth : CarPlayStatus() + data object RunningWireless : CarPlayStatus() + data object WirelessActive : CarPlayStatus() + data object DiscoveringIphone : CarPlayStatus() + data object WaitingForIphone : CarPlayStatus() + data object RequestingIphonePermission : CarPlayStatus() + data object WaitingForReenumeration : CarPlayStatus() + data object SelectingConfiguration : CarPlayStatus() + data object OpeningDataPaths : CarPlayStatus() + data object Pairing : CarPlayStatus() + data object ConnectingControl : CarPlayStatus() + data object AttachingNetwork : CarPlayStatus() + data object RunningControl : CarPlayStatus() + data object ControlEnded : CarPlayStatus() + data class Failed(val message: String, val wifiResetRequired: Boolean = false) : CarPlayStatus() +} + +internal fun isWirelessHandoffInProgress( + handoffRequested: Boolean, + tunnelActive: Boolean, + sessionActive: Boolean, +): Boolean = handoffRequested || tunnelActive || sessionActive + +/** + * Wires the complete wired or wireless CarPlay path: MFi coprocessor discovery, iPhone bring-up, + * iAP2 control, transport setup, and the AirPlay media/input sessions. + * + * All blocking USB/I2C work runs on one worker executor. Status callbacks are delivered on the + * main thread. This class is the integration seam only and is not evidence of hardware operation. + */ +class CarPlayController( + context: Context, + private val config: CarPlayRuntimeConfig, + private val airPlayConfig: AirPlayConfig, + private val identity: AirPlayIdentity, + private val pairings: PairingStore, + listener: AirPlaySessionListener, + private val media: AirPlayMediaHandler, + reportStatus: (CarPlayStatus) -> Unit, + private val loadPairRecord: () -> LockdownPairRecord? = { null }, + private val savePairRecord: (LockdownPairRecord) -> Unit = {}, + private val clearPairRecord: () -> Unit = {}, + private val locationProvider: Iap2LocationProvider? = null, +) : Closeable { + init { + require(!config.locationReportingEnabled || locationProvider != null) { + "A location provider is required when location reporting is enabled" + } + } + + private enum class Phase { IDLE, MFI, WIRELESS, IPHONE, REENUMERATION, DATAPATHS, CONTROL } + + private val appContext = context.applicationContext + private val usbManager = context.getSystemService(UsbManager::class.java) + private val bluetoothAdapter = + appContext.getSystemService(BluetoothManager::class.java)?.adapter + private val iphoneHost = IphoneUsbHost( + appContext, + usbManager, + if (config.iphoneDevices.isNotEmpty()) { + IphoneUsbMatcher(config.iphoneDevices) + } else { + IphoneUsbMatcher.appleVendor() + }, + ) + private val executor: ExecutorService = Executors.newSingleThreadExecutor() + private val touchExecutor: ExecutorService = Executors.newSingleThreadExecutor() + private val tunnelExecutor: ExecutorService = Executors.newSingleThreadExecutor() + private val mainHandler = Handler(Looper.getMainLooper()) + private val hostId = UUID.randomUUID().toString().uppercase(Locale.US) + private val systemBuid = UUID.randomUUID().toString().uppercase(Locale.US) + private val lifecycleLock = Any() + @Volatile private var uiListener: AirPlaySessionListener? = listener + @Volatile private var uiStatusReporter: ((CarPlayStatus) -> Unit)? = reportStatus + private val permissionGrant = AtomicBoolean(false) + private val availabilityPollGeneration = AtomicInteger(0) + private var permissionPollGeneration = 0 + private var reenumerationAttempts = 0 + private var lastReportedStatus: CarPlayStatus? = null + private var mfiResetLogged = false + + @Volatile private var closed = false + @Volatile private var phase = Phase.IDLE + @Volatile private var ch341Host: Ch341UsbHost? = null + @Volatile private var mfiSession: MfiSession? = null + @Volatile private var mux: Iap2UsbMuxHost? = null + @Volatile private var csm: Iap2Session? = null + @Volatile private var activeSession: AirPlaySession? = null + @Volatile private var hotspot: WirelessHotspotManager? = null + @Volatile private var bonjour: CarPlayBonjour? = null + @Volatile private var bluetoothSocket: BluetoothSocket? = null + @Volatile private var bluetoothStream: BluetoothRfcommDuplexStream? = null + @Volatile private var wirelessTunnelChannel: Iap2Session? = null + @Volatile private var wirelessIdentification: Iap2IdentificationConfig? = null + @Volatile private var wirelessAirPlayEndpoint: Iap2WirelessCarPlayEndpoint? = null + @Volatile private var vpnService: CarPlayVpnService? = null + @Volatile private var vpnBound = false + private val wirelessHandoffRequested = AtomicBoolean(false) + private val wirelessTunnelReady = AtomicBoolean(false) + private val wirelessActiveReported = AtomicBoolean(false) + private val wirelessGeneration = AtomicInteger(0) + private val wirelessConnectionProof = WirelessConnectionProof() + + private var permissionCloseable: Closeable? = null + private var attachCloseable: Closeable? = null + private var ch341PermissionCloseable: Closeable? = null + private var vpnLatch = CountDownLatch(1) + private val teardownComplete = CountDownLatch(1) + + private val serviceConnection = object : ServiceConnection { + override fun onServiceConnected(name: ComponentName, binder: IBinder) { + vpnService = (binder as CarPlayVpnService.LocalBinder).service + vpnLatch.countDown() + } + + override fun onServiceDisconnected(name: ComponentName) { + vpnService = null + fail(IphoneUsbException.DeviceUnavailable("CarPlay VPN service disconnected")) + } + } + + private val sessionListener = object : AirPlaySessionListener { + override fun onSessionActive(session: AirPlaySession) { + activeSession = session + debugLog( + "AirPlay session active controller=${session.controllerId ?: "unknown"} " + + "peer=${session.host}", + ) + uiListener?.onSessionActive(session) + } + + override fun onSessionEnded(session: AirPlaySession) { + if (activeSession === session) activeSession = null + debugLog("AirPlay session ended peer=${session.host}") + uiListener?.onSessionEnded(session) + } + + override fun onTransportError(message: String) { + debugLog("AirPlay transport error: $message") + uiListener?.onTransportError(message) + } + + override fun onDeviceInfo(session: AirPlaySession, info: AirPlayDeviceInfo) { + debugLog( + "AirPlay device info name=${info.name} deviceId=${info.deviceId} " + + "wifiMac=${info.wifiMac} model=${info.model}", + ) + uiListener?.onDeviceInfo(session, info) + } + + override fun onHostUiRequested(session: AirPlaySession) { + uiListener?.onHostUiRequested(session) + } + + override fun onCommand(session: AirPlaySession, type: String, params: Map) { + debugLog( + "AirPlay command type=$type params=${params.keys.sorted().joinToString(",")}", + ) + if ( + config.transport == CarPlayTransport.WIRELESS && + !closed && + activeSession === session && + isBluetoothHandoffCommand(type) && + wirelessHandoffRequested.compareAndSet(false, true) + ) { + debugLog( + "wireless CarPlay Bluetooth handoff requested; " + + "waiting for tunnel iAP2 readiness", + ) + armWirelessHandoffWatchdog(wirelessGeneration.get()) + maybeCompleteWirelessHandoff() + } + uiListener?.onCommand(session, type, params) + } + + override fun onDebugLog(message: String) { + debugLog(message) + } + } + + fun attachUi( + listener: AirPlaySessionListener, + reportStatus: (CarPlayStatus) -> Unit, + ) { + uiListener = listener + uiStatusReporter = reportStatus + mainHandler.post { + if (uiListener === listener) lastReportedStatus?.let(reportStatus) + } + } + + fun isClosed(): Boolean = closed + + fun hasActiveAirPlayAttachment(): Boolean = synchronized(lifecycleLock) { + !closed && vpnService?.isAttached() == true + } + + fun start() { + synchronized(this) { + if (closed) return + } + if (config.transport == CarPlayTransport.WIRED) { + permissionCloseable = iphoneHost.registerPermissionReceiver(::onIphonePermission) + attachCloseable = iphoneHost.registerAttachReceiver(::onIphoneAttached) + } + startMfi() + } + + /** Reopens the CH341/MFi path without restarting the app. */ + fun reconnectMfi() = synchronized(lifecycleLock) { + if (closed) return + closeMfiSession() + startMfi() + } + + /** Re-runs iPhone discovery/bring-up using the already-open MFi session. */ + fun reconnectIphone() = synchronized(lifecycleLock) { + if (closed) return + if (mfiSession == null) { + startMfi() + } else if (config.transport == CarPlayTransport.WIRELESS) { + restartWireless() + } else { + startIphone() + } + } + + fun sendTouch(contacts: List): Boolean { + if (closed) return false + val session = activeSession ?: return false + return try { + touchExecutor.execute { session.sendTouch(contacts) } + true + } catch (_: Exception) { + false + } + } + + override fun close() { + synchronized(this) { + if (closed) return + closed = true + } + closeReceivers() + availabilityPollGeneration.incrementAndGet() + wirelessGeneration.incrementAndGet() + permissionPollGeneration += 1 + touchExecutor.shutdownNow() + tunnelExecutor.shutdownNow() + val service = vpnService + unbindVpn() + Thread( + { + try { + if (config.transport == CarPlayTransport.WIRELESS) { + closeBestEffort("wireless stack") { closeWirelessStack(service) } + } else { + closeBestEffort("CSM") { csm?.close() } + csm = null + } + closeBestEffort("USBMUX") { mux?.close() } + mux = null + if (config.transport == CarPlayTransport.WIRED) { + closeBestEffort("VPN/NCM") { service?.detach() } + } + closeBestEffort("MFi") { mfiSession?.close() } + mfiSession = null + wirelessIdentification = null + wirelessAirPlayEndpoint = null + closeBestEffort("location provider") { locationProvider?.close() } + } finally { + executor.shutdownNow() + try { + executor.awaitTermination(EXECUTOR_CLOSE_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS) + } catch (_: InterruptedException) { + Thread.currentThread().interrupt() + } + teardownComplete.countDown() + } + }, + "xcertplay-controller-teardown", + ).apply { + isDaemon = true + start() + } + } + + /** Waits for USB, iAP2, MFi and VPN teardown; intended for a non-main lifecycle thread. */ + fun awaitClosed(timeoutMillis: Long): Boolean { + require(timeoutMillis >= 0) { "timeoutMillis must not be negative" } + return try { + teardownComplete.await(timeoutMillis, TimeUnit.MILLISECONDS) + } catch (_: InterruptedException) { + Thread.currentThread().interrupt() + false + } + } + + private fun startMfi() { + availabilityPollGeneration.incrementAndGet() + phase = Phase.MFI + onStatus(CarPlayStatus.DiscoveringMfi) + val offlineDirectory = java.io.File(appContext.noBackupFilesDir, LocalMfiAuthenticationClient.DIRECTORY) + if (offlineDirectory.exists()) { + openLocalMfi(offlineDirectory) + return + } + when (config.mfiTarget) { + MfiTarget.LOCAL -> openLocalMfi(offlineDirectory) + MfiTarget.USB_CH341 -> { + debugLog("mfi discovery backend=CH341 devices=${config.ch341Devices}") + val host = ch341Host ?: Ch341UsbHost( + appContext, + usbManager, + Ch341DeviceMatcher(config.ch341Devices), + ).also { + ch341Host = it + ch341PermissionCloseable = it.registerPermissionReceiver(::onCh341Permission) + } + checkCh341Mfi(host) + } + MfiTarget.I2C -> { + debugLog("mfi discovery backend=Linux I2C path=${config.linuxI2cPath}") + openLinuxMfi() + } + MfiTarget.REMOTE -> { + debugLog("mfi discovery backend=Remote server=${config.remoteMfiServer.orEmpty()}") + openRemoteMfi() + } + } + } + + private fun openLocalMfi(directory: java.io.File) { + debugLog("mfi discovery backend=LocalOffline remoteFallback=disabled") + executor.execute { + try { + val signatures = AtomicInteger(0) + val client = LocalMfiAuthenticationClient.load(directory) { size -> + debugLog("mfi local signature count=${signatures.incrementAndGet()} digestBytes=$size") + } + if (closed || phase != Phase.MFI) return@execute + mfiSession = MfiSession(client, null) + debugLog("mfi local offline ready protocolMajor=${client.protocolMajor()} certificateBytes=${client.readCertificate().size}") + onStatus(CarPlayStatus.MfiReady) + startPhone() + } catch (error: Throwable) { + // A broken local identity must fail closed rather than silently use the helper. + fail(error) + } + } + } + + private fun openRemoteMfi() { + executor.execute { + try { + val client = RemoteMfiAuthenticationClient( + serverAddress = checkNotNull(config.remoteMfiServer), + token = config.remoteMfiToken, + ) + client.reset() + val protocolMajor = client.protocolMajor() + if (closed || phase != Phase.MFI) return@execute + mfiSession = MfiSession(client, null) + debugLog( + "mfi remote service ready server=${config.remoteMfiServer} " + + "protocolMajor=$protocolMajor", + ) + onStatus(CarPlayStatus.MfiReady) + startPhone() + } catch (error: Throwable) { + fail(error) + } + } + } + + private fun checkCh341Mfi(host: Ch341UsbHost) { + if (closed || phase != Phase.MFI) return + val device = host.discover().firstOrNull() + if (device == null) { + waitForMfi() + } else { + availabilityPollGeneration.incrementAndGet() + requestCh341Permission(device) + } + } + + private fun openLinuxMfi() { + executor.execute { + try { + val transport = LinuxI2cTransport.open(config.linuxI2cPath!!) + try { + mfiSession = MfiSession(MfiRuntime.scan(transport), transport) + debugLog("mfi Linux I2C coprocessor ready path=${config.linuxI2cPath}") + onStatus(CarPlayStatus.MfiReady) + startPhone() + } catch (error: Throwable) { + transport.close() + throw error + } + } catch (error: MfiCoprocessorNotFoundException) { + debugLog("mfi Linux discovery failed: ${error.message}") + waitForMfi() + } catch (error: Throwable) { + fail(error) + } + } + } + + private fun requestCh341Permission(device: UsbDevice) { + try { + when (val request = ch341Host!!.requestPermission(device)) { + is Ch341UsbHost.PermissionRequest.AlreadyGranted -> { + permissionGrant.set(false) + onCh341Permission(Ch341UsbHost.PermissionResult.Granted(request.device)) + } + is Ch341UsbHost.PermissionRequest.Requested -> { + permissionGrant.set(false) + onStatus(CarPlayStatus.RequestingMfiPermission) + pollCh341Permission(device) + } + } + } catch (error: Throwable) { + fail(error) + } + } + + private fun onCh341Permission(result: Ch341UsbHost.PermissionResult) { + if (closed || phase != Phase.MFI) return + when (result) { + is Ch341UsbHost.PermissionResult.Granted -> { + // The system broadcast and CarUsbHandler's direct grant can both observe success. + if (!permissionGrant.compareAndSet(false, true)) return + permissionPollGeneration++ + openCh341(result.device) + } + is Ch341UsbHost.PermissionResult.Denied -> { + permissionGrant.set(true) + onStatus(CarPlayStatus.Failed("CH341 USB permission was denied")) + } + } + } + + /** Some car systems grant USB access through CarUsbHandler without delivering a broadcast. */ + private fun pollCh341Permission(device: UsbDevice) { + val generation = ++permissionPollGeneration + val deadlineNanos = System.nanoTime() + PERMISSION_POLL_TIMEOUT_MILLIS * 1_000_000L + val check = object : Runnable { + override fun run() { + if (closed || phase != Phase.MFI || generation != permissionPollGeneration) return + if (usbManager.hasPermission(device)) { + onCh341Permission(Ch341UsbHost.PermissionResult.Granted(device)) + return + } + if (System.nanoTime() >= deadlineNanos) { + if (permissionGrant.compareAndSet(false, true)) { + onStatus( + CarPlayStatus.Failed( + "MFi USB permission was not granted; reconnect the CH341 to retry", + ), + ) + } + return + } + mainHandler.postDelayed(this, PERMISSION_POLL_INTERVAL_MILLIS) + } + } + mainHandler.postDelayed(check, PERMISSION_POLL_INTERVAL_MILLIS) + } + + private fun openCh341(device: UsbDevice) { + ch341Host!!.openAsync(device, executor) { result -> + when (result) { + is Ch341UsbHost.OpenResult.Connected -> { + val session: Ch341UsbSession = result.session + if (closed || phase != Phase.MFI) { + session.close() + return@openAsync + } + try { + val transport = Ch341I2cTransport(session) + config.ch341MfiResetGpio?.let { gpio -> + transport.pulseActiveLowReset(gpio) + if (!mfiResetLogged) { + mfiResetLogged = true + debugLog("mfi reset pulse gpio=D$gpio mode=low/high-z") + } + } + val client = MfiRuntime.scan(transport) + val probes = mfiCandidateAddresses + .associateWith { address -> probeMfiCandidate(transport, address) } + for ((address, probe) in probes) { + debugLog("mfi probe address=0x${address.toString(16)} ${probe.describe()}") + } + val selected = preferCertificateBearingAddress(client, transport, probes) + debugLog( + "mfi coprocessor address=0x${selected.address7Bit.toString(16)} " + + "protocolMajor=${selected.protocolMajor()}", + ) + mfiSession = MfiSession(selected, session) + debugLog("mfi CH341 session ready") + onStatus(CarPlayStatus.MfiReady) + startPhone() + } catch (error: MfiCoprocessorNotFoundException) { + debugLog("mfi CH341 discovery failed: ${error.message}") + Log.w(IphoneCarPlayConfiguration.TAG, error.message ?: "MFi discovery failed") + session.close() + waitForMfi() + } catch (error: Throwable) { + session.close() + fail(error) + } + } + is Ch341UsbHost.OpenResult.Failed -> when (result.error) { + is I2cTransportException.DeviceUnavailable -> waitForMfi() + else -> fail(result.error) + } + } + } + } + + private val mfiCandidateAddresses = listOf(0x10, 0x11) + private val maxMfiCertificateBytes = 1280 + + private data class MfiCandidateProbe( + val deviceVersion: Int?, + val firmwareVersion: Int?, + val protocolMajor: Int?, + val accessoryCertificateLength: Int?, + val appleCertificateLength: Int?, + val failure: String?, + ) { + val hasAccessoryCertificate: Boolean + get() = (accessoryCertificateLength ?: 0) in 1..1280 + + fun describe(): String { + if (failure != null) return failure + return "deviceVersion=" + hex(deviceVersion) + + " firmwareVersion=" + hex(firmwareVersion) + + " protocolMajor=" + hex(protocolMajor) + + " accessoryCertificateLength=" + accessoryCertificateLength + + " appleCertificateLength=" + appleCertificateLength + } + + private fun hex(value: Int?): String = + if (value == null) "?" else "0x" + value.toString(16).padStart(2, '0') + } + + private fun probeMfiCandidate(transport: I2cTransport, address7Bit: Int): MfiCandidateProbe = try { + MfiCandidateProbe( + deviceVersion = readMfiRegister(transport, address7Bit, 0x00, 1), + firmwareVersion = readMfiRegister(transport, address7Bit, 0x01, 1), + protocolMajor = readMfiRegister(transport, address7Bit, 0x02, 1), + accessoryCertificateLength = readMfiRegister(transport, address7Bit, 0x30, 2), + appleCertificateLength = readMfiRegister(transport, address7Bit, 0x50, 2), + failure = null, + ) + } catch (error: Throwable) { + MfiCandidateProbe( + deviceVersion = null, + firmwareVersion = null, + protocolMajor = null, + accessoryCertificateLength = null, + appleCertificateLength = null, + failure = "failed: " + error.javaClass.simpleName + ": " + error.message, + ) + } + + private fun readMfiRegister( + transport: I2cTransport, + address7Bit: Int, + register: Int, + length: Int, + ): Int { + transport.transaction(address7Bit, byteArrayOf(register.toByte()), 0) + var value = 0 + for (byte in transport.transaction(address7Bit, ByteArray(0), length)) { + value = (value shl 8) or (byte.toInt() and 0xff) + } + return value + } + + private fun preferCertificateBearingAddress( + client: MfiAuthenticationClient, + transport: I2cTransport, + probes: Map, + ): MfiAuthenticationClient { + if (probes[client.address7Bit]?.hasAccessoryCertificate == true) return client + val alternative = probes.entries.firstOrNull { (address, probe) -> + address != client.address7Bit && probe.hasAccessoryCertificate + } ?: return client + debugLog( + "mfi address override: 0x" + client.address7Bit.toString(16) + + " has no accessory certificate; using 0x" + alternative.key.toString(16), + ) + return MfiAuthenticationClient(transport, alternative.key) + } + + private fun waitForMfi() { + if (closed || phase != Phase.MFI) return + onStatus(CarPlayStatus.WaitingForMfi) + scheduleAvailabilityPoll(Phase.MFI) { + when (config.mfiTarget) { + MfiTarget.USB_CH341 -> ch341Host?.let(::checkCh341Mfi) + MfiTarget.I2C -> openLinuxMfi() + MfiTarget.REMOTE, MfiTarget.LOCAL -> Unit + } + } + } + + private fun startPhone() { + if (config.locationReportingEnabled) { + val started = try { + locationProvider?.start() == true + } catch (error: Throwable) { + Log.w( + IphoneCarPlayConfiguration.TAG, + "Could not prewarm the Android location provider", + error, + ) + false + } + debugLog("location provider prewarmed=$started") + } + if (config.transport == CarPlayTransport.WIRELESS) { + startWireless() + } else { + startIphone() + } + } + + private fun startWireless() { + availabilityPollGeneration.incrementAndGet() + phase = Phase.WIRELESS + wirelessHandoffRequested.set(false) + wirelessTunnelReady.set(false) + wirelessActiveReported.set(false) + onStatus(CarPlayStatus.StartingHotspot) + val generation = wirelessGeneration.incrementAndGet() + executor.execute { + runWireless(generation) + } + } + + private fun restartWireless() { + wirelessGeneration.incrementAndGet() + Thread( + { + closeWirelessStack() + if (!closed) startWireless() + }, + "xcertplay-wireless-restart", + ).apply { + isDaemon = true + start() + } + } + + private fun runWireless(generation: Int) { + try { + debugLog("wireless bring-up generation=$generation starting") + closeWirelessStack() + if ( + closed || + phase != Phase.WIRELESS || + generation != wirelessGeneration.get() + ) { + return + } + + val mfi = mfiSession?.client + ?: throw IOException("MFi coprocessor client is unavailable") + val hotspotInfo = startWirelessHotspot(generation) + if (isStaleWirelessRun(generation)) { + closeWirelessStack() + return + } + val startedHotspot = hotspot + wirelessConnectionProof.begin(generation) { + if (!isStaleWirelessRun(generation)) startedHotspot?.onCarPlayConfirmed() + } + val hostAddress = hotspotInfo.hostAddress + ?: throw IOException( + "Wireless hotspot did not provide a usable host address", + ) + if ( + hostAddress is Inet6Address && + (!hostAddress.isLinkLocalAddress || hostAddress.scopeId == 0) + ) { + throw IOException( + "Wireless hotspot link-local IPv6 address is not scoped", + ) + } + val hostAddressText = hostAddressText(hostAddress) + val deviceIdentifier = hotspotInfo.bssid + ?.takeUnless { it.equals(ADAPTER_ADDRESS_PLACEHOLDER, ignoreCase = true) } + ?: airPlayConfig.deviceId + debugLog( + "wireless hotspot backend=${hotspotInfo.backend.label} " + + "iface=${hotspotInfo.interfaceName ?: "unknown"} " + + "host=$hostAddressText " + + "band=${hotspotInfo.bandLabel} channel=${hotspotInfo.channel} " + + "frequency=${hotspotInfo.frequencyMHz?.toString() ?: "unknown"}MHz", + ) + onStatus( + CarPlayStatus.HotspotReady( + ssid = hotspotInfo.ssid, + band = hotspotInfo.bandLabel, + channel = hotspotInfo.channel, + bssid = deviceIdentifier, + address = hostAddressText, + backend = hotspotInfo.backend.label, + ), + ) + onStatus(CarPlayStatus.WaitingForPairedIphone) + + val adapter = bluetoothAdapter + ?: throw IOException("Bluetooth adapter is unavailable") + if (!adapter.isEnabled) throw IOException("Bluetooth is not enabled") + val device = selectWirelessBluetoothDevice(adapter) + val hostBluetoothMac = accessoryBluetoothMac(adapter) + debugLog( + "wireless selected Bluetooth target name=${device.name ?: "unknown"} " + + "address=${device.address} localBt=$hostBluetoothMac", + ) + val wirelessAirPlayConfig = airPlayConfig.copy( + deviceId = deviceIdentifier, + btMac = hostBluetoothMac, + ) + + onStatus(CarPlayStatus.AttachingNetwork) + val service = awaitVpnService() + ?: throw IOException("Could not bind the CarPlay AirPlay service") + when ( + val result = service.attachWireless( + bindAddress = hostAddress, + config = wirelessAirPlayConfig, + identity = identity, + pairings = pairings, + mfi = mfi, + listener = wirelessSessionListener(generation), + media = media, + ) + ) { + CarPlayVpnService.AttachResult.Started -> Unit + CarPlayVpnService.AttachResult.AlreadyStarted -> + throw IOException("Wireless AirPlay transport is already attached") + is CarPlayVpnService.AttachResult.Failed -> + throw IOException(result.message) + } + debugLog( + "wireless AirPlay listener attached bind=$hostAddressText " + + "port=${airPlayConfig.port}", + ) + if (isStaleWirelessRun(generation)) { + closeWirelessStack() + return + } + + val bonjourClient = CarPlayBonjour( + context = appContext, + config = wirelessAirPlayConfig, + identity = identity, + advertisedHost = hostAddress.hostAddress, + useInterfaceMdns = hotspotInfo.backend == WirelessHotspotBackend.WIFI_P2P, + onEvent = { event -> debugLog("wireless bonjour: $event") }, + ) + bonjour = bonjourClient + bonjourClient.start() + debugLog("wireless Bonjour services started") + if (isStaleWirelessRun(generation)) { + closeWirelessStack() + return + } + + onStatus(CarPlayStatus.ConnectingBluetooth) + debugLog( + "wireless RFCOMM connecting address=${device.address} " + + "uuid=$IAP2_IPHONE_UUID", + ) + val socket = device + .createRfcommSocketToServiceRecord(UUID.fromString(IAP2_IPHONE_UUID)) + .also { bluetoothSocket = it } + connectBluetoothSocket(socket, device.address) + debugLog("wireless RFCOMM connected address=${device.address}") + if (isStaleWirelessRun(generation)) { + closeWirelessStack() + return + } + val stream = BluetoothRfcommDuplexStream(socket).also { bluetoothStream = it } + val channel = Iap2Session.openWireless( + stream, + traceContext = "wireless-rfcomm", + onTrace = ::debugLog, + ).also { csm = it } + debugLog("wireless iAP2 CSM channel opened over RFCOMM") + if (isStaleWirelessRun(generation)) { + closeWirelessStack() + return + } + val identification = config.identification.copy( + wireless = Iap2WirelessIdentification(hostBluetoothMac, hotspotInfo.ssid), + ) + val endpoint = Iap2WirelessCarPlayEndpoint( + ssid = hotspotInfo.ssid, + passphrase = hotspotInfo.passphrase, + channel = hotspotInfo.channel, + security = hotspotInfo.security, + ipAddresses = listOf(hostAddressText), + airPlayPort = airPlayConfig.port, + deviceIdentifier = deviceIdentifier, + publicKey = identity.publicKeyHex, + sourceVersion = airPlayConfig.sourceVersion, + ) + wirelessIdentification = identification + wirelessAirPlayEndpoint = endpoint + media.setIapTunnelHandler(::startWirelessTunnelControl) + + onStatus(CarPlayStatus.RunningWireless) + debugLog("wireless Bluetooth iAP2 control starting") + val result = Iap2WirelessControlClient( + session = channel, + mfi = Iap2MfiAuthenticationClient(mfi), + ).run( + identification = identification, + endpoint = endpoint, + timeoutMillis = controlLoopTimeoutMillis(), + locationProvider = locationProvider, + onProgress = ::debugLog, + ) + if (isStaleWirelessRun(generation)) { + closeWirelessStack() + return + } + when (result.terminal) { + Iap2WirelessControlTerminal.CHANNEL_CLOSED -> { + debugLog( + "wireless RFCOMM EOF: iap2State=${result.stage} " + + "wirelessCarPlayAvailable=${result.wirelessCarPlayAvailableSeen} " + + "transportIdentifier=${result.transportNotificationSeen} " + + "carPlayStartSessions=${result.carPlayStartSessionsSent} " + + "postTransportConfigs=${result.postTransportWiFiConfigurationsSent} " + + "handoffRequested=${wirelessHandoffRequested.get()} " + + "tunnelReady=${wirelessTunnelReady.get()} " + + "wirelessActive=${wirelessActiveReported.get()}", + ) + if (!wirelessActiveReported.get()) { + val handoffInProgress = isWirelessHandoffInProgress( + handoffRequested = wirelessHandoffRequested.get(), + tunnelActive = wirelessTunnelChannel != null, + sessionActive = activeSession != null, + ) + if (!handoffInProgress) { + throw IOException( + "Wireless CarPlay control channel closed before tunnel iAP2 ready", + ) + } + debugLog( + "wireless Bluetooth bootstrap closed during handoff; " + + "keeping the Wi-Fi AirPlay tunnel alive", + ) + } + } + Iap2WirelessControlTerminal.TIMED_OUT -> + if (!wirelessActiveReported.get()) { + onStatus(CarPlayStatus.ControlEnded) + } + } + } catch (error: Throwable) { + if (closed || generation != wirelessGeneration.get()) { + return + } + if (wirelessActiveReported.get() && error !is Error) { + debugLog("wireless RFCOMM control ended after tunnel handoff: ${error.message}") + } else { + debugLog("wireless bring-up failed", error) + closeWirelessStack() + if (error is Error) throw error + fail(error) + } + } + } + + private fun startWirelessTunnelControl(stream: BlockingDuplexByteStream): Boolean { + if (closed || config.transport != CarPlayTransport.WIRELESS) return false + val identification = wirelessIdentification ?: return false + val endpoint = wirelessAirPlayEndpoint ?: return false + val mfi = mfiSession?.client ?: return false + debugLog("wireless type-130 tunnel data stream accepted") + val channel = try { + Iap2Session.openTunnel( + stream, + traceContext = "wireless-tunnel", + onTrace = ::debugLog, + ) + } catch (error: Throwable) { + debugLog("Could not open the tunneled iAP2 link", error) + return false + } + wirelessTunnelChannel = channel + val generation = wirelessGeneration.get() + debugLog("wireless iAP2 tunnel control starting") + return try { + tunnelExecutor.execute { + try { + val result = Iap2WirelessControlClient( + session = channel, + mfi = Iap2MfiAuthenticationClient(mfi), + ).run( + identification = identification, + endpoint = endpoint, + timeoutMillis = Iap2WirelessControlClient.NO_TIMEOUT_MILLIS, + locationProvider = locationProvider, + onReady = { + onWirelessTunnelReady(generation) + }, + onProgress = { message -> debugLog("iAP tunnel $message") }, + ) + if (closed || generation != wirelessGeneration.get()) return@execute + when (result.terminal) { + Iap2WirelessControlTerminal.TIMED_OUT -> + onStatus(CarPlayStatus.ControlEnded) + Iap2WirelessControlTerminal.CHANNEL_CLOSED -> + onStatus(CarPlayStatus.Failed("Wireless iAP2 tunnel closed")) + } + } catch (error: Throwable) { + if (!closed && generation == wirelessGeneration.get()) { + debugLog("tunneled iAP2 control failed", error) + onStatus( + CarPlayStatus.Failed( + error.message ?: error.javaClass.simpleName, + ), + ) + } + } finally { + if (wirelessTunnelChannel === channel) wirelessTunnelChannel = null + } + } + true + } catch (error: Throwable) { + if (wirelessTunnelChannel === channel) wirelessTunnelChannel = null + closeBestEffort("tunneled iAP2 link") { channel.close() } + debugLog("iAP2 tunnel executor rejected the link", error) + false + } + } + + private fun wirelessSessionListener(generation: Int): AirPlaySessionListener = + object : AirPlaySessionListener by sessionListener { + override fun onSessionActive(session: AirPlaySession) { + if (isStaleWirelessRun(generation)) return + wirelessConnectionProof.activate(generation, session) + sessionListener.onSessionActive(session) + } + + override fun onSessionEnded(session: AirPlaySession) { + if (isStaleWirelessRun(generation)) return + wirelessConnectionProof.end(generation, session) + sessionListener.onSessionEnded(session) + } + + override fun onVideoFrameRendered(session: AirPlaySession) { + if (isStaleWirelessRun(generation) || activeSession !== session) return + wirelessConnectionProof.rendered(generation, session) + } + } + + private fun onWirelessTunnelReady(generation: Int) { + if ( + closed || + phase != Phase.WIRELESS || + generation != wirelessGeneration.get() + ) { + return + } + wirelessTunnelReady.set(true) + wirelessConnectionProof.authenticated(generation) + debugLog( + "wireless iAP2 tunnel ready; " + + "handoffRequested=${wirelessHandoffRequested.get()}", + ) + maybeCompleteWirelessHandoff() + } + + private fun maybeCompleteWirelessHandoff() { + if (!wirelessHandoffRequested.get() || !wirelessTunnelReady.get()) return + if (!wirelessActiveReported.compareAndSet(false, true)) return + val generation = wirelessGeneration.get() + Thread( + { + if ( + closed || + phase != Phase.WIRELESS || + generation != wirelessGeneration.get() + ) { + return@Thread + } + debugLog("wireless handoff ready; closing Bluetooth bootstrap transport") + closeBluetoothBootstrapTransport() + onStatus(CarPlayStatus.WirelessActive) + }, + "xcertplay-wireless-handoff", + ).apply { + isDaemon = true + start() + } + } + + private fun armWirelessHandoffWatchdog(generation: Int) { + mainHandler.postDelayed( + { + if ( + closed || + phase != Phase.WIRELESS || + generation != wirelessGeneration.get() || + !wirelessHandoffRequested.get() || + wirelessActiveReported.get() + ) { + return@postDelayed + } + debugLog("wireless handoff timed out waiting for tunnel iAP2 readiness") + Thread( + { + if ( + closed || + phase != Phase.WIRELESS || + generation != wirelessGeneration.get() || + wirelessActiveReported.get() + ) { + return@Thread + } + closeWirelessStack() + fail(IOException("Wireless CarPlay handoff timed out waiting for tunnel iAP2")) + }, + "xcertplay-wireless-handoff-timeout", + ).apply { + isDaemon = true + start() + } + }, + WIRELESS_HANDOFF_TIMEOUT_MILLIS, + ) + } + + private fun closeBluetoothBootstrapTransport() { + val activeCsm = csm + csm = null + if (activeCsm != null) closeBestEffort("wireless CSM") { activeCsm.close() } + + val activeStream = bluetoothStream + bluetoothStream = null + if (activeStream != null) closeBestEffort("wireless RFCOMM stream") { activeStream.close() } + + val activeSocket = bluetoothSocket + bluetoothSocket = null + if (activeSocket != null) closeBestEffort("wireless Bluetooth socket") { activeSocket.close() } + } + + private fun startIphone() { + availabilityPollGeneration.incrementAndGet() + phase = Phase.IPHONE + reenumerationAttempts = 0 + onStatus(CarPlayStatus.DiscoveringIphone) + checkIphoneAvailability() + } + + private fun checkIphoneAvailability() { + if (closed || phase != Phase.IPHONE) return + val device = iphoneHost.discover().firstOrNull() + if (device == null) { + onStatus(CarPlayStatus.WaitingForIphone) + scheduleAvailabilityPoll(Phase.IPHONE, ::checkIphoneAvailability) + } else { + debugLog( + "wired iPhone discovered vid=0x${device.vendorId.toString(16)} " + + "pid=0x${device.productId.toString(16)}", + ) + availabilityPollGeneration.incrementAndGet() + requestIphonePermission(device) + } + } + + private fun requestIphonePermission(device: UsbDevice) { + mainHandler.post { doRequestIphonePermission(device) } + } + + private fun doRequestIphonePermission(device: UsbDevice) { + if (closed) return + try { + when (val request = iphoneHost.requestPermission(device)) { + is IphoneUsbHost.PermissionRequest.AlreadyGranted -> { + debugLog("wired iPhone USB permission already granted") + permissionGrant.set(false) + onIphonePermission(IphoneUsbHost.PermissionResult.Granted(request.device)) + } + is IphoneUsbHost.PermissionRequest.Requested -> { + debugLog("wired iPhone USB permission requested") + permissionGrant.set(false) + onStatus(CarPlayStatus.RequestingIphonePermission) + pollIphonePermission(device) + } + } + } catch (error: Throwable) { + fail(error) + } + } + + private fun onIphonePermission(result: IphoneUsbHost.PermissionResult) { + when (result) { + is IphoneUsbHost.PermissionResult.Granted -> { + // The system broadcast and the polling fallback can both observe the grant. + if (!permissionGrant.compareAndSet(false, true)) return + debugLog("wired iPhone USB permission granted") + permissionPollGeneration++ + when (phase) { + Phase.REENUMERATION, Phase.IPHONE -> { + if (IphoneCarPlayConfiguration.find(result.device) != null) { + openDataPaths(result.device) + } else if (reenumerationAttempts < MAXIMUM_REENUMERATION_ATTEMPTS) { + beginReenumeration(result.device) + } else { + fail( + IphoneUsbException.Protocol( + "iPhone did not expose a complete CarPlay USB configuration", + ), + ) + } + } + else -> Unit + } + } + is IphoneUsbHost.PermissionResult.Denied -> { + permissionGrant.set(true) + onStatus(CarPlayStatus.Failed("iPhone USB permission was denied")) + } + } + } + + /** Some Android builds grant the dialog without delivering the permission broadcast. */ + private fun pollIphonePermission(device: UsbDevice) { + val generation = ++permissionPollGeneration + val deadlineNanos = System.nanoTime() + PERMISSION_POLL_TIMEOUT_MILLIS * 1_000_000L + val check = object : Runnable { + override fun run() { + if (closed || generation != permissionPollGeneration) return + if (usbManager.hasPermission(device)) { + onIphonePermission(IphoneUsbHost.PermissionResult.Granted(device)) + return + } + if (System.nanoTime() >= deadlineNanos) { + if (permissionGrant.compareAndSet(false, true)) { + onStatus( + CarPlayStatus.Failed( + "iPhone USB permission was not granted; tap Reconnect iPhone to retry", + ), + ) + } + return + } + mainHandler.postDelayed(this, PERMISSION_POLL_INTERVAL_MILLIS) + } + } + mainHandler.postDelayed(check, PERMISSION_POLL_INTERVAL_MILLIS) + } + + private fun beginReenumeration(device: UsbDevice) { + phase = Phase.REENUMERATION + reenumerationAttempts += 1 + onStatus(CarPlayStatus.SelectingConfiguration) + iphoneHost.requestCarPlayReenumerationAsync(device, executor) { transition -> + when (transition) { + IphoneUsbHost.TransitionResult.ReenumerationRequested -> + onStatus(CarPlayStatus.WaitingForReenumeration) + is IphoneUsbHost.TransitionResult.Failed -> fail(transition.error) + } + } + } + + private fun onIphoneAttached(device: UsbDevice) { + when (phase) { + Phase.REENUMERATION, Phase.IPHONE -> { + availabilityPollGeneration.incrementAndGet() + requestIphonePermission(device) + } + else -> Unit + } + } + + private fun scheduleAvailabilityPoll(phase: Phase, check: () -> Unit) { + val generation = availabilityPollGeneration.get() + mainHandler.postDelayed( + { + if ( + !closed && + this.phase == phase && + generation == availabilityPollGeneration.get() + ) { + check() + } + }, + DEVICE_AVAILABILITY_POLL_INTERVAL_MILLIS, + ) + } + + private fun openDataPaths(device: UsbDevice) { + phase = Phase.DATAPATHS + debugLog("wired opening iPhone USB data paths") + onStatus(CarPlayStatus.SelectingConfiguration) + onStatus(CarPlayStatus.OpeningDataPaths) + iphoneHost.openIap2UsbSessionAsync(device, executor) { result -> + when (result) { + is IphoneUsbHost.Iap2SessionResult.Connected -> { + try { + val ncm = openNcm(device) + runStack(result.session, ncm) + } catch (error: Throwable) { + result.session.close() + fail(error) + } + } + is IphoneUsbHost.Iap2SessionResult.Failed -> fail(result.error) + } + } + } + + private fun openNcm(device: UsbDevice): NcmUsbBridge { + val configuration = IphoneCarPlayConfiguration.find(device) + ?: throw IphoneUsbException.Protocol( + "iPhone exposes no CarPlay configuration for NCM", + ) + val function = NcmFunctionDiscovery.find(configuration) + ?: throw IphoneUsbException.Protocol("iPhone configuration does not expose an NCM function") + debugLog( + "ncm config=${configuration.id} control=${function.control.id}/${function.control.alternateSetting}" + + " data=${function.data.id}/${function.data.alternateSetting}" + + " status=${function.statusIn?.address?.let { "0x${it.toString(16)}" } ?: "none"}" + + " in=0x${function.bulkIn.address.toString(16)} out=0x${function.bulkOut.address.toString(16)}", + ) + val connection = usbManager.openDevice(device) + ?: throw IphoneUsbException.DeviceUnavailable("Could not open the iPhone NCM connection") + return NcmUsbBridge.open(connection, function) + } + + private fun runStack(usbSession: Iap2UsbSession, ncm: NcmUsbBridge) { + phase = Phase.CONTROL + var ncmOwnedLocally = true + try { + if (closed) return + val mux = Iap2UsbMuxHost.open(usbSession) + this.mux = mux + debugLog("wired USBMUX host opened") + onStatus(CarPlayStatus.Pairing) + val pairingClient = LockdownPairingClient(mux) + val savedPairRecord = loadPairRecord() + var pairRecord = savedPairRecord ?: pairNewRecord(pairingClient) + debugLog( + if (savedPairRecord != null) { + "wired using saved Lockdown pair record" + } else { + "wired created a new Lockdown pair record" + }, + ) + onStatus(CarPlayStatus.ConnectingControl) + val carKitClient = LockdownCarKitClient(mux) + // Temporary lab capture, limited to accessory/authentication messages and two minutes. + try { + val relay = carKitClient.openService(pairRecord, config.label, "com.apple.syslog_relay") + Thread({ + try { + relay.use { + val deadline = System.nanoTime() + 120_000_000_000L + val pending = StringBuilder() + val relevant = Regex(" (accessoryd|ACCCarPlayService|iap2d|CarPlay)([\\[(])", RegexOption.IGNORE_CASE) + while (!closed && System.nanoTime() < deadline) { + val bytes = relay.recv(8192, 1000) ?: continue + if (bytes.isEmpty()) break + pending.append(bytes.toString(Charsets.UTF_8).replace('\u0000', '\n')) + while (true) { + val end = pending.indexOf("\n") + if (end < 0) break + val line = pending.substring(0, end) + pending.delete(0, end + 1) + if (relevant.containsMatchIn(line)) debugLog("PHONE ${line.take(2000)}") + } + if (pending.length > 65536) pending.clear() + } + } + debugLog("phone authentication diagnostic capture ended") + } catch (error: Exception) { + debugLog("phone authentication diagnostic capture ended: ${error.javaClass.simpleName}") + } + }, "carplay-lab-phone-diagnostics").apply { isDaemon = true; start() } + debugLog("phone authentication diagnostic capture started") + } catch (error: Exception) { + debugLog("phone authentication diagnostics unavailable: ${error.message}") + } + val carkit = try { + carKitClient.open(pairRecord, config.label) + } catch (error: Throwable) { + if (!isInvalidPairRecord(error)) throw error + debugLog("saved Lockdown pair record rejected; pairing again") + clearPairRecord() + pairRecord = pairNewRecord(pairingClient) + carKitClient.open(pairRecord, config.label) + } + debugLog("wired com.apple.carkit.service stream opened") + // Lab transport diagnostics: packet headers only, never certificate or challenge data. + fun wireSummary(bytes: ByteArray): String { + if (bytes.size < 9 || bytes[0].toInt() and 0xff != 0xff || + bytes[1].toInt() and 0xff != 0x5a) return "bytes=${bytes.size}" + fun value(index: Int) = bytes[index].toInt() and 0xff + return "bytes=${bytes.size} length=${(value(2) shl 8) or value(3)} " + + "flags=${value(4)} seq=${value(5)} ack=${value(6)} session=${value(7)}" + } + val tracedCarkit = object : com.shilapi.xcertplay.transport.BlockingDuplexByteStream { + override fun send(data: ByteArray) { + debugLog("wired link TX begin ${wireSummary(data)}") + // Bound each TLS write while diagnosing the stalled certificate transfer. + for (offset in data.indices step 256) { + carkit.send(data.copyOfRange(offset, minOf(offset + 256, data.size))) + } + debugLog("wired link TX completed bytes=${data.size}") + } + override fun recv(maxBytes: Int, timeoutMillis: Long): ByteArray? = + carkit.recv(maxBytes, timeoutMillis)?.also { + debugLog("wired link RX ${wireSummary(it)}") + } + override fun close() = carkit.close() + } + val csm = Iap2Session.open( + tracedCarkit, + traceContext = "wired", + onTrace = ::debugLog, + ) + this.csm = csm + debugLog("wired iAP2 CSM channel opened") + + val ncmHostMac = ncm.hostMac ?: config.hostMac + debugLog("ncm using hostMac=${ncmHostMac.macString()}") + if (!attachVpn(ncm, ncmHostMac)) { + throw IphoneUsbException.DeviceUnavailable("Could not attach the NCM/VPN AirPlay transport") + } + ncmOwnedLocally = false + debugLog("wired NCM/VPN AirPlay transport attached") + if (closed) { + vpnService?.detach() + return + } + + val mfi = mfiSession?.client + ?: throw IphoneUsbException.DeviceUnavailable("MFi coprocessor client is unavailable") + val endpoint = Iap2WiredCarPlayEndpoint( + ipv6Addresses = listOf(config.linkLocal), + airPlayPort = airPlayConfig.port, + publicKey = identity.publicKeyHex, + sourceVersion = airPlayConfig.sourceVersion, + deviceIdentifier = ncmHostMac.macString(), + ) + onStatus(CarPlayStatus.RunningControl) + debugLog("wired iAP2 control starting") + val result = Iap2WiredControlClient(csm, Iap2MfiAuthenticationClient(mfi)).run( + identification = config.identification, + endpoint = endpoint, + availableCurrentMilliAmps = config.availableCurrentMilliAmps, + timeoutMillis = controlLoopTimeoutMillis(), + locationProvider = locationProvider, + onIncoming = { }, + onProgress = { message -> debugLog("wired $message") }, + ) + onStatus( + when (result.terminal) { + Iap2WiredControlTerminal.TIMED_OUT -> CarPlayStatus.ControlEnded + Iap2WiredControlTerminal.CHANNEL_CLOSED -> + CarPlayStatus.Failed("CarPlay control channel closed") + }, + ) + } catch (error: Throwable) { + debugLog("wired bring-up failed", error) + if (!ncmOwnedLocally) vpnService?.detach() + fail(error) + } finally { + if (ncmOwnedLocally) ncm.close() + } + } + + private fun pairNewRecord(client: LockdownPairingClient): LockdownPairRecord = + client.pair( + label = config.label, + hostId = hostId, + systemBuid = systemBuid, + totalTimeoutMillis = PAIR_TIMEOUT_MILLIS, + isCancelled = { closed }, + ).pairRecord.also(savePairRecord) + + private fun isInvalidPairRecord(error: Throwable): Boolean { + var cause: Throwable? = error + while (cause != null) { + if (cause.message?.contains("InvalidPairRecord", ignoreCase = true) == true) return true + cause = cause.cause + } + return false + } + + private fun isBluetoothHandoffCommand(type: String): Boolean = + type.equals("disableBluetooth", ignoreCase = true) || + type.equals("disable-bluetooth", ignoreCase = true) + + private fun startWirelessHotspot(generation: Int): WirelessHotspotInfo { + val hotspotMode = if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q && + config.wirelessHotspotMode == WirelessHotspotMode.WIFI_P2P + ) { + WirelessHotspotMode.LOCAL_ONLY_HOTSPOT + } else { + config.wirelessHotspotMode + } + val manager: WirelessHotspotManager = when (hotspotMode) { + WirelessHotspotMode.WIFI_P2P -> WifiP2pGroupManager(appContext, ::debugLog) + WirelessHotspotMode.LOCAL_ONLY_HOTSPOT -> LocalOnlyHotspotManager(appContext) + WirelessHotspotMode.MANUAL -> ManualHotspotManager( + context = appContext, + ssid = config.manualHotspotSsid + ?: throw IOException("Manual hotspot SSID is not configured"), + passphrase = config.manualHotspotPassphrase.orEmpty(), + band = config.manualHotspotBand, + channel = config.manualHotspotChannel, + security = config.manualHotspotSecurity, + ) + } + hotspot = manager + val timeoutMillis = if (hotspotMode == WirelessHotspotMode.WIFI_P2P) { + WIFI_P2P_START_TIMEOUT_MILLIS + } else { + HOTSPOT_START_TIMEOUT_MILLIS + } + return try { + manager.start(timeoutMillis) + } catch (failure: Exception) { + if (hotspot === manager) hotspot = null + closeBestEffort(hotspotMode.name) { manager.close() } + if (isStaleWirelessRun(generation)) throw failure + throw IOException( + "Could not establish ${hotspotMode.name} hotspot: " + + (failure.message ?: failure.javaClass.simpleName), + failure, + ) + } + } + + private fun isStaleWirelessRun(generation: Int): Boolean = + closed || phase != Phase.WIRELESS || generation != wirelessGeneration.get() + + private fun selectWirelessBluetoothDevice(adapter: BluetoothAdapter): BluetoothDevice { + val bonded = adapter.bondedDevices.orEmpty() + config.wirelessBluetoothDeviceAddress?.let { selected -> + return bonded.firstOrNull { it.address.equals(selected, ignoreCase = true) } + ?: throw IOException("The selected iPhone is no longer paired. Choose it again in DiPlay.") + } + val iPhones = bonded.filter { device -> + device.name?.contains("iPhone", ignoreCase = true) == true + } + val directlyConnectedIPhones = iPhones.filter(::isBluetoothDeviceConnected) + Log.i( + IphoneCarPlayConfiguration.TAG, + "wireless Bluetooth bondedIPhones=${iPhones.size} " + + "directlyConnected=${directlyConnectedIPhones.size}", + ) + val connectedIPhones = if (directlyConnectedIPhones.isNotEmpty()) { + directlyConnectedIPhones + } else { + val connectedAddresses = connectedBluetoothDevices(adapter).mapTo(mutableSetOf()) { + it.address + } + iPhones.filter { it.address in connectedAddresses } + } + if (connectedIPhones.size == 1) return connectedIPhones.single() + if (connectedIPhones.size > 1) { + throw IOException( + "Multiple connected iPhones found: " + + connectedIPhones.joinToString { "${it.name ?: "iPhone"} (${it.address})" }, + ) + } + if (iPhones.size == 1) return iPhones.single() + if (iPhones.size > 1) { + throw IOException( + "Multiple bonded iPhones found and none is currently connected; " + + "connect one iPhone and retry", + ) + } + if (bonded.size == 1) return bonded.single() + throw IOException( + "No unambiguous bonded iPhone found; pair one iPhone and retry", + ) + } + + private fun connectBluetoothSocket(socket: BluetoothSocket, address: String) { + val result = AtomicReference() + val connected = CountDownLatch(1) + Thread( + { + try { + socket.connect() + } catch (error: Throwable) { + result.set(error) + } finally { + connected.countDown() + } + }, + "wireless-rfcomm-connect", + ).apply { + isDaemon = true + start() + } + val completed = try { + connected.await(RFCOMM_CONNECT_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS) + } catch (error: InterruptedException) { + Thread.currentThread().interrupt() + runCatching { socket.close() } + throw IOException("Interrupted while connecting RFCOMM to $address", error) + } + if (!completed) { + debugLog( + "wireless RFCOMM connect timed out after " + + "${RFCOMM_CONNECT_TIMEOUT_MILLIS}ms address=$address", + ) + runCatching { socket.close() } + throw IOException( + "Timed out after ${RFCOMM_CONNECT_TIMEOUT_MILLIS}ms connecting RFCOMM to $address", + ) + } + when (val failure = result.get()) { + null -> Unit + is IOException -> throw failure + else -> throw IOException("Could not connect RFCOMM to $address", failure) + } + } + + private fun closeWirelessStack(service: CarPlayVpnService? = vpnService) { + wirelessConnectionProof.clear() + media.setIapTunnelHandler(null) + val activeTunnel = wirelessTunnelChannel + wirelessTunnelChannel = null + if (activeTunnel != null) closeBestEffort("tunneled iAP2 link") { activeTunnel.close() } + + closeBluetoothBootstrapTransport() + + val activeBonjour = bonjour + bonjour = null + if (activeBonjour != null) closeBestEffort("Bonjour") { activeBonjour.close() } + + val activeHotspot = hotspot + hotspot = null + if (activeHotspot != null) closeBestEffort("wireless hotspot") { activeHotspot.close() } + wirelessIdentification = null + wirelessAirPlayEndpoint = null + wirelessHandoffRequested.set(false) + wirelessTunnelReady.set(false) + wirelessActiveReported.set(false) + + if (service != null) closeBestEffort("AirPlay service") { service.detach() } + } + + private fun isBluetoothDeviceConnected(device: BluetoothDevice): Boolean = try { + val method = BluetoothDevice::class.java.getMethod("isConnected") + method.invoke(device) as? Boolean == true + } catch (error: ReflectiveOperationException) { + false + } catch (error: RuntimeException) { + Log.w(IphoneCarPlayConfiguration.TAG, "Could not read Bluetooth connection state", error) + false + } + + private fun connectedBluetoothDevices(adapter: BluetoothAdapter): Set = + buildSet { + addAll(connectedBluetoothDevices(adapter, BluetoothProfile.HEADSET, BluetoothHeadset::class.java)) + addAll(connectedBluetoothDevices(adapter, BluetoothProfile.A2DP, BluetoothA2dp::class.java)) + } + + private fun connectedBluetoothDevices( + adapter: BluetoothAdapter, + profile: Int, + profileClass: Class, + ): Set { + val latch = CountDownLatch(1) + val devices = java.util.Collections.synchronizedSet(mutableSetOf()) + val listener = object : BluetoothProfile.ServiceListener { + override fun onServiceConnected(profileId: Int, proxy: BluetoothProfile) { + try { + if (profileClass.isInstance(proxy)) { + devices.addAll(proxy.connectedDevices.orEmpty()) + } + } catch (error: SecurityException) { + Log.w(IphoneCarPlayConfiguration.TAG, "Could not read connected Bluetooth devices", error) + } finally { + adapter.closeProfileProxy(profileId, proxy) + latch.countDown() + } + } + + override fun onServiceDisconnected(profileId: Int) { + latch.countDown() + } + } + if (!adapter.getProfileProxy(appContext, listener, profile)) return emptySet() + if (!latch.await(3, TimeUnit.SECONDS)) { + Log.w(IphoneCarPlayConfiguration.TAG, "Timed out reading Bluetooth profile $profile") + } + return synchronized(devices) { devices.toSet() } + } + + @Suppress("DEPRECATION") + private fun accessoryBluetoothMac(adapter: BluetoothAdapter): String { + val address = try { + adapter.address + } catch (_: SecurityException) { + null + } + val settingsAddress = try { + Settings.Secure.getString(appContext.contentResolver, "bluetooth_address") + } catch (_: SecurityException) { + null + } + return listOfNotNull(address, settingsAddress) + .firstOrNull { + BLUETOOTH_ADDRESS.matches(it) && + !it.equals(ADAPTER_ADDRESS_PLACEHOLDER, ignoreCase = true) + } + ?: airPlayConfig.btMac + } + + private fun hostAddressText(address: InetAddress): String { + val text = address.hostAddress?.substringBefore('%') + if (text.isNullOrBlank()) { + throw IOException("LocalOnlyHotspot host address is unavailable") + } + return text + } + + private fun closeBestEffort(name: String, close: () -> Unit) { + try { + close() + } catch (error: Throwable) { + debugLog("$name teardown failed", error) + } + } + + private fun controlLoopTimeoutMillis(): Long = when { + config.transport == CarPlayTransport.WIRED -> Iap2WiredControlClient.NO_TIMEOUT_MILLIS + config.locationReportingEnabled -> LOCATION_CONTROL_LOOP_TIMEOUT_MILLIS + else -> CONTROL_LOOP_TIMEOUT_MILLIS + } + + private fun attachVpn(ncm: NcmUsbBridge, hostMac: ByteArray): Boolean { + onStatus(CarPlayStatus.AttachingNetwork) + val service = awaitVpnService() ?: run { + debugLog("wired VPN service bind failed") + ncm.close() + return false + } + debugLog("wired VPN service bound; attaching NCM transport") + val result = try { + service.attach( + ncm = ncm, + linkLocal = config.linkLocal, + hostMac = hostMac, + config = airPlayConfig, + identity = identity, + pairings = pairings, + mfi = mfiSession?.client, + listener = sessionListener, + media = media, + ) + } catch (error: Throwable) { + ncm.close() + onStatus(CarPlayStatus.Failed(error.message ?: error.javaClass.simpleName)) + return false + } + return when (result) { + CarPlayVpnService.AttachResult.Started -> { + debugLog("wired VPN/NCM transport attach result=started") + true + } + CarPlayVpnService.AttachResult.AlreadyStarted -> { + debugLog("wired VPN/NCM transport attach result=already-started") + ncm.close() + false + } + is CarPlayVpnService.AttachResult.Failed -> { + debugLog("wired VPN/NCM transport attach result=failed ${result.message}") + ncm.close() + onStatus(CarPlayStatus.Failed(result.message)) + false + } + } + } + + private fun ByteArray.macString(): String = + joinToString(":") { byte -> "%02x".format(byte.toInt() and 0xff) } + + private fun awaitVpnService(): CarPlayVpnService? { + vpnService?.let { return it } + bindVpn() + return try { + if (vpnLatch.await(VPN_CONNECT_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS)) vpnService else null + } catch (_: InterruptedException) { + Thread.currentThread().interrupt() + null + } + } + + private fun bindVpn() { + if (vpnBound) return + vpnBound = true + try { + val intent = Intent(appContext, CarPlayVpnService::class.java) + if (!appContext.bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE)) { + vpnBound = false + vpnLatch.countDown() + } + } catch (_: Throwable) { + vpnBound = false + vpnLatch.countDown() + } + } + + private fun unbindVpn() { + if (!vpnBound) return + vpnBound = false + try { + appContext.unbindService(serviceConnection) + } catch (_: Exception) { + // The service may have already been unbound. + } + vpnService = null + } + + private fun closeReceivers() { + listOfNotNull(permissionCloseable, attachCloseable, ch341PermissionCloseable).forEach { + try { + it.close() + } catch (_: Exception) { + // Receiver is already unregistered. + } + } + permissionCloseable = null + attachCloseable = null + ch341PermissionCloseable = null + } + + private fun closeMfiSession() { + val session = mfiSession + mfiSession = null + if (session != null) { + executor.execute { + try { + session.close() + } catch (_: Exception) { + // Best effort. + } + } + } + } + + private fun fail(error: Throwable) { + if (closed) return + onStatus(CarPlayStatus.Failed(error.message ?: error.javaClass.simpleName, + generateSequence(error) { it.cause }.any { it is com.shilapi.xcertplay.network.P2pResetRequiredException })) + } + + private fun debugLog(message: String) { + Log.i(IphoneCarPlayConfiguration.TAG, message) + try { + uiListener?.onDebugLog(message) + } catch (error: Exception) { + Log.w(IphoneCarPlayConfiguration.TAG, "debug log callback failed", error) + } + } + + private fun debugLog(message: String, error: Throwable) { + Log.w(IphoneCarPlayConfiguration.TAG, message, error) + try { + uiListener?.onDebugLog( + "$message: ${error.message ?: error.javaClass.simpleName}", + ) + } catch (callbackError: Exception) { + Log.w(IphoneCarPlayConfiguration.TAG, "debug log callback failed", callbackError) + } + } + + private fun onStatus(status: CarPlayStatus) { + if (closed) return + mainHandler.post { + if (!closed && status != lastReportedStatus) { + lastReportedStatus = status + uiListener?.onDebugLog(status.debugLogMessage()) + uiStatusReporter?.invoke(status) + } + } + } + + private fun CarPlayStatus.debugLogMessage(): String = when (this) { + CarPlayStatus.DiscoveringMfi -> + "STEP mfi/start: preparing the configured MFi authentication provider" + CarPlayStatus.WaitingForMfi -> + "STEP mfi/wait: MFi coprocessor not present; polling" + CarPlayStatus.RequestingMfiPermission -> + "STEP mfi/permission: requesting CH341 USB access" + CarPlayStatus.MfiReady -> + "STEP mfi/ready: MFi authentication provider is ready" + CarPlayStatus.StartingHotspot -> + "STEP wifi/ap: starting the wireless CarPlay access point" + is CarPlayStatus.HotspotReady -> + "STEP wifi/ap-ready: backend=$backend ssid=$ssid band=$band " + + "channel=$channel bssid=$bssid address=$address" + CarPlayStatus.WaitingForPairedIphone -> + "STEP bt/select: waiting for a paired or connected iPhone" + CarPlayStatus.ConnectingBluetooth -> + "STEP bt/rfcomm: connecting to the iPhone iAP2 RFCOMM service" + CarPlayStatus.RunningWireless -> + "STEP iap2/wireless: Bluetooth control loop running" + CarPlayStatus.WirelessActive -> + "STEP handoff/complete: tunnel iAP2 ready; Bluetooth bootstrap released" + CarPlayStatus.DiscoveringIphone -> + "STEP usb/discover: searching for an iPhone USB device" + CarPlayStatus.WaitingForIphone -> + "STEP usb/wait: iPhone USB device not present; polling" + CarPlayStatus.RequestingIphonePermission -> + "STEP usb/permission: requesting USB access to the iPhone" + CarPlayStatus.WaitingForReenumeration -> + "STEP usb/reenum: waiting for the CarPlay USB configuration" + CarPlayStatus.SelectingConfiguration -> + "STEP usb/config: selecting the iPhone CarPlay configuration" + CarPlayStatus.OpeningDataPaths -> + "STEP usb/data: opening iAP2 and NCM USB data paths" + CarPlayStatus.Pairing -> + "STEP lockdown/pair: loading or creating the pairing record" + CarPlayStatus.ConnectingControl -> + "STEP lockdown/carkit: opening com.apple.carkit.service" + CarPlayStatus.AttachingNetwork -> + "STEP network/attach: attaching the AirPlay network transport" + CarPlayStatus.RunningControl -> + "STEP iap2/wired: wired iAP2 control loop running" + CarPlayStatus.ControlEnded -> + "STEP control/end: the control window ended" + is CarPlayStatus.Failed -> + "ERROR $message" + } + + companion object { + private const val IAP2_IPHONE_UUID = "00000000-deca-fade-deca-deafdecacafe" + private const val HOTSPOT_START_TIMEOUT_MILLIS = 60_000L + private const val WIFI_P2P_START_TIMEOUT_MILLIS = 20_000L + private const val PAIR_TIMEOUT_MILLIS = 5 * 60_000L + private const val VPN_CONNECT_TIMEOUT_MILLIS = 10_000L + private const val CONTROL_LOOP_TIMEOUT_MILLIS = 5 * 60_000L + private const val LOCATION_CONTROL_LOOP_TIMEOUT_MILLIS = 24 * 60 * 60 * 1_000L + private const val PERMISSION_POLL_INTERVAL_MILLIS = 500L + private const val PERMISSION_POLL_TIMEOUT_MILLIS = 120_000L + private const val DEVICE_AVAILABILITY_POLL_INTERVAL_MILLIS = 2_000L + private const val WIRELESS_HANDOFF_TIMEOUT_MILLIS = 45_000L + private const val RFCOMM_CONNECT_TIMEOUT_MILLIS = 15_000L + private const val MAXIMUM_REENUMERATION_ATTEMPTS = 2 + private const val EXECUTOR_CLOSE_TIMEOUT_MILLIS = 2_000L + private const val ADAPTER_ADDRESS_PLACEHOLDER = "02:00:00:00:00:00" + private val BLUETOOTH_ADDRESS = Regex("^[0-9A-Fa-f]{2}(:[0-9A-Fa-f]{2}){5}$") + } +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/orchestration/CarPlayRuntimeConfig.kt b/shared/src/main/java/com/shilapi/xcertplay/orchestration/CarPlayRuntimeConfig.kt new file mode 100644 index 0000000..5ee0cc9 --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/orchestration/CarPlayRuntimeConfig.kt @@ -0,0 +1,153 @@ +package com.shilapi.xcertplay.orchestration + +import com.shilapi.xcertplay.transport.Iap2IdentificationConfig +import com.shilapi.xcertplay.transport.UsbDeviceId +import java.net.Inet6Address +import java.net.InetAddress + +enum class CarPlayTransport { + WIRED, + WIRELESS, +} + +enum class MfiTarget { + LOCAL, + USB_CH341, + I2C, + REMOTE, +} + +enum class WirelessHotspotMode { + WIFI_P2P, + LOCAL_ONLY_HOTSPOT, + MANUAL, +} + +enum class ManualHotspotBand { + AUTO, + GHZ_2_4, + GHZ_5, +} + +enum class ManualHotspotSecurity { + OPEN, + WPA2, + WPA3_TRANSITION, + WPA3, +} + +/** + * Deployment-owned constants for one head unit. There are deliberately no built-in Apple or + * CH341 product IDs: the physical devices attached to the target must be identified first. + */ +class CarPlayRuntimeConfig( + val iphoneDevices: List = emptyList(), + val mfiTarget: MfiTarget = MfiTarget.USB_CH341, + val ch341Devices: List = emptyList(), + val ch341MfiResetGpio: Int? = null, + val linuxI2cPath: String? = null, + val remoteMfiServer: String? = null, + val remoteMfiToken: String? = null, + val hostMac: ByteArray = DEFAULT_HOST_MAC, + val linkLocal: String = "fe80::2", + val identification: Iap2IdentificationConfig, + val availableCurrentMilliAmps: Int = 2400, + val label: String = "xcertplay", + val hostName: String = "xcertplay", + val transport: CarPlayTransport = CarPlayTransport.WIRED, + val wirelessHotspotMode: WirelessHotspotMode = WirelessHotspotMode.WIFI_P2P, + val manualHotspotSsid: String? = null, + val manualHotspotPassphrase: String? = null, + val manualHotspotBand: ManualHotspotBand = ManualHotspotBand.AUTO, + val manualHotspotChannel: Int = 0, + val manualHotspotSecurity: ManualHotspotSecurity = ManualHotspotSecurity.WPA2, + val wirelessBluetoothDeviceAddress: String? = null, + val locationReportingEnabled: Boolean = false, +) { + init { + require(iphoneDevices.all { it.vendorId == APPLE_VENDOR_ID }) { + "iPhone USB identities must use Apple vendor ID 0x${APPLE_VENDOR_ID.toString(16)}" + } + require(hostMac.size == 6) { "hostMac must be 6 bytes" } + require(isLinkLocalIpv6(linkLocal)) { "linkLocal must be a link-local IPv6 literal" } + require(availableCurrentMilliAmps in 0..0xffff) { + "availableCurrentMilliAmps must be in 0..65535" + } + require(label.isNotBlank()) { "label must not be blank" } + require(hostName.isNotBlank()) { "hostName must not be blank" } + require(mfiTarget != MfiTarget.USB_CH341 || ch341Devices.isNotEmpty()) { + "CH341 devices must be configured for the USB/CH341 MFi target" + } + require(mfiTarget != MfiTarget.I2C || !linuxI2cPath.isNullOrBlank()) { + "A Linux I2C path must be configured for the I2C MFi target" + } + require(mfiTarget != MfiTarget.REMOTE || !remoteMfiServer.isNullOrBlank()) { + "A server address must be configured for the remote MFi target" + } + require(ch341MfiResetGpio == null || ch341MfiResetGpio in 0..5) { + "CH341 MFi reset GPIO must be D0..D5" + } + require(remoteMfiServer?.contains('\u0000') != true) { + "Remote MFi server must not contain U+0000" + } + require(remoteMfiToken?.contains('\u0000') != true) { + "Remote MFi token must not contain U+0000" + } + if (wirelessHotspotMode == WirelessHotspotMode.MANUAL) { + val ssid = manualHotspotSsid + require(!ssid.isNullOrBlank()) { + "manualHotspotSsid is required in manual hotspot mode" + } + require('\u0000' !in ssid) { + "manualHotspotSsid must not contain U+0000" + } + val passphrase = manualHotspotPassphrase.orEmpty() + require('\u0000' !in passphrase) { + "manualHotspotPassphrase must not contain U+0000" + } + require(passphrase.isEmpty() || passphrase.length in 8..63) { + "manualHotspotPassphrase must be empty or between 8 and 63 characters" + } + require(manualHotspotChannel in 0..196) { + "manualHotspotChannel must be 0 or in 1..196" + } + require( + manualHotspotSecurity == ManualHotspotSecurity.OPEN || + passphrase.length in 8..63, + ) { + "A passphrase between 8 and 63 characters is required for secured manual hotspots" + } + require( + manualHotspotChannel == 0 || + isManualHotspotChannelCompatible(manualHotspotBand, manualHotspotChannel), + ) { + "manualHotspotChannel is not valid for the selected manual hotspot band" + } + require( + manualHotspotSecurity == ManualHotspotSecurity.OPEN || passphrase.isNotEmpty(), + ) { + "manualHotspotPassphrase is required for secured manual hotspots" + } + } + } + + companion object { + const val APPLE_VENDOR_ID = 0x05ac + val DEFAULT_HOST_MAC = byteArrayOf(0x02, 0x00, 0x00, 0x00, 0x00, 0x02) + private fun isLinkLocalIpv6(value: String): Boolean { + if (value.contains('%') || '\u0000' in value || !value.contains(':')) return false + return try { + val address = InetAddress.getByName(value) + address is Inet6Address && address.isLinkLocalAddress + } catch (_: Exception) { + false + } + } + } +} + +fun isManualHotspotChannelCompatible(band: ManualHotspotBand, channel: Int): Boolean = when (band) { + ManualHotspotBand.AUTO -> channel in 1..196 + ManualHotspotBand.GHZ_2_4 -> channel in 1..14 + ManualHotspotBand.GHZ_5 -> channel in 32..177 +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/orchestration/MfiRuntime.kt b/shared/src/main/java/com/shilapi/xcertplay/orchestration/MfiRuntime.kt new file mode 100644 index 0000000..3616dcf --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/orchestration/MfiRuntime.kt @@ -0,0 +1,41 @@ +package com.shilapi.xcertplay.orchestration + +import com.shilapi.xcertplay.mfi.MfiAuthenticationClient +import com.shilapi.xcertplay.mfi.MfiAuthenticator +import com.shilapi.xcertplay.mfi.MfiDeviceScanner +import com.shilapi.xcertplay.transport.I2cTransport +import java.io.Closeable +import java.io.IOException + +/** Signals the normal, retryable state where the MFi address probe found no chip. */ +internal class MfiCoprocessorNotFoundException( + message: String = "No MFi authentication coprocessor responded to the device probe", +) : IOException(message) + +/** An opened MFi coprocessor client plus the handle that releases its backing transport. */ +class MfiSession( + val client: MfiAuthenticator, + private val closeable: Closeable?, +) : Closeable { + override fun close() { + closeable?.close() + } +} + +/** Runs the documented address probe and wraps the first responding MFi coprocessor. */ +object MfiRuntime { + fun scan(transport: I2cTransport): MfiAuthenticationClient { + val discovery = MfiDeviceScanner( + transport = transport, + probeTimeoutMillis = MFI_STARTUP_PROBE_TIMEOUT_MILLIS, + ).scan() + val chip = discovery.chip + ?: throw MfiCoprocessorNotFoundException( + "No MFi authentication coprocessor responded: " + + discovery.failures.joinToString { "0x${it.address7Bit.toString(16)}=${it.error}" }, + ) + return MfiAuthenticationClient(transport, chip.address7Bit) + } + + private const val MFI_STARTUP_PROBE_TIMEOUT_MILLIS = 15_000L +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/orchestration/WirelessConnectionProof.kt b/shared/src/main/java/com/shilapi/xcertplay/orchestration/WirelessConnectionProof.kt new file mode 100644 index 0000000..51db23f --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/orchestration/WirelessConnectionProof.kt @@ -0,0 +1,57 @@ +package com.shilapi.xcertplay.orchestration + +/** Confirms one current session only after authenticated tunnel readiness AND a rendered frame. */ +internal class WirelessConnectionProof { + private var generation = -1 + private var session: S? = null + private var authenticated = false + private var rendered = false + private var confirmation: (() -> Unit)? = null + + @Synchronized fun begin(generation: Int, confirmation: () -> Unit) { + clear() + this.generation = generation + this.confirmation = confirmation + } + + @Synchronized fun activate(generation: Int, session: S) { + if (this.generation != generation || this.session === session) return + this.session = session + authenticated = false + rendered = false + } + + @Synchronized fun authenticated(generation: Int) { + if (this.generation != generation || session == null) return + authenticated = true + confirmIfReady() + } + + @Synchronized fun rendered(generation: Int, session: S) { + if (this.generation != generation || this.session !== session) return + rendered = true + confirmIfReady() + } + + @Synchronized fun end(generation: Int, session: S) { + if (this.generation != generation || this.session !== session) return + this.session = null + authenticated = false + rendered = false + } + + @Synchronized fun clear() { + generation = -1 + session = null + authenticated = false + rendered = false + confirmation = null + } + + private fun confirmIfReady() { + if (!authenticated || !rendered) return + val callback = confirmation ?: return + confirmation = null + callback() + } +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/shared/MyCarAppScreen.kt b/shared/src/main/java/com/shilapi/xcertplay/shared/MyCarAppScreen.kt new file mode 100644 index 0000000..a027c3e --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/shared/MyCarAppScreen.kt @@ -0,0 +1,16 @@ +package com.shilapi.xcertplay.shared + +import androidx.car.app.CarContext +import androidx.car.app.Screen +import androidx.car.app.model.Action +import androidx.car.app.model.MessageTemplate +import androidx.car.app.model.Template + +class MyCarAppScreen(carContext: CarContext) : Screen(carContext) { + override fun onGetTemplate(): Template { + return MessageTemplate.Builder("Hardware transport is not configured. Board I2C needs a /dev/i2c-N path and OS/SELinux permission; CH341 needs deployed VID/PID configuration.") + .setHeaderAction(Action.APP_ICON) + .setTitle("xcertplay hardware status") + .build() + } +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/shared/MyCarAppService.kt b/shared/src/main/java/com/shilapi/xcertplay/shared/MyCarAppService.kt new file mode 100644 index 0000000..c3b1fbc --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/shared/MyCarAppService.kt @@ -0,0 +1,15 @@ +package com.shilapi.xcertplay.shared + +import androidx.car.app.CarAppService +import androidx.car.app.Session +import androidx.car.app.validation.HostValidator + +class MyCarAppService : CarAppService() { + override fun createHostValidator(): HostValidator { + return HostValidator.ALLOW_ALL_HOSTS_VALIDATOR + } + + override fun onCreateSession(): Session { + return MyCarAppSession() + } +} \ No newline at end of file diff --git a/shared/src/main/java/com/shilapi/xcertplay/shared/MyCarAppSession.kt b/shared/src/main/java/com/shilapi/xcertplay/shared/MyCarAppSession.kt new file mode 100644 index 0000000..45c2301 --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/shared/MyCarAppSession.kt @@ -0,0 +1,11 @@ +package com.shilapi.xcertplay.shared + +import android.content.Intent +import androidx.car.app.Screen +import androidx.car.app.Session + +class MyCarAppSession : Session() { + override fun onCreateScreen(intent: Intent): Screen { + return MyCarAppScreen(carContext) + } +} \ No newline at end of file diff --git a/shared/src/main/java/com/shilapi/xcertplay/transport/BlockingDuplexByteStream.kt b/shared/src/main/java/com/shilapi/xcertplay/transport/BlockingDuplexByteStream.kt new file mode 100644 index 0000000..4ee2064 --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/transport/BlockingDuplexByteStream.kt @@ -0,0 +1,18 @@ +package com.shilapi.xcertplay.transport + +import java.io.Closeable + +/** + * A blocking, ordered, full-duplex byte stream. + * + * [recv] returns `null` only when its timeout expires and an empty array after the peer has + * ended its output. Implementations may split or coalesce writes arbitrarily. Calls belong on a + * worker thread, never Android's main thread. + */ +interface BlockingDuplexByteStream : Closeable { + fun send(data: ByteArray) + + fun recv(maxBytes: Int, timeoutMillis: Long): ByteArray? + + override fun close() +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/transport/BluetoothRfcommDuplexStream.kt b/shared/src/main/java/com/shilapi/xcertplay/transport/BluetoothRfcommDuplexStream.kt new file mode 100644 index 0000000..664cdce --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/transport/BluetoothRfcommDuplexStream.kt @@ -0,0 +1,219 @@ +package com.shilapi.xcertplay.transport + +import android.bluetooth.BluetoothSocket +import java.io.IOException +import java.util.ArrayDeque +import kotlin.math.min + +/** + * A bounded [BlockingDuplexByteStream] over an already-open RFCOMM socket. + * + * Android's RFCOMM input has no per-read timeout, so one daemon reader performs the blocking + * reads. [close] closes the owned socket, which unblocks that reader. + */ +class BluetoothRfcommDuplexStream( + private val socket: BluetoothSocket, +) : BlockingDuplexByteStream { + private val lock = Object() + private val sendLock = Object() + private val input = socket.inputStream + private val output = socket.outputStream + private val pending = ArrayDeque() + private var pendingBytes = 0 + private var peerEnded = false + private var closed = false + private var socketCloseStarted = false + private var failure: IOException? = null + + private val reader = Thread(::readLoop, "xcertplay-bluetooth-rfcomm-reader").apply { + isDaemon = true + } + + init { + reader.start() + } + + override fun send(data: ByteArray) { + synchronized(sendLock) { + synchronized(lock) { + failure?.let { throw it } + if (closed) throw IOException("Bluetooth RFCOMM stream is closed") + } + try { + output.write(data) + output.flush() + } catch (io: IOException) { + fail(io) + throw io + } + } + } + + override fun recv(maxBytes: Int, timeoutMillis: Long): ByteArray? { + require(maxBytes > 0) { "maxBytes must be positive" } + require(timeoutMillis >= 0) { "timeoutMillis must not be negative" } + + val deadlineNanos = deadlineAfter(timeoutMillis) + synchronized(lock) { + while (true) { + takePendingLocked(maxBytes)?.let { return it } + failure?.let { throw it } + if (peerEnded || closed) return EMPTY + + val remainingNanos = deadlineNanos - System.nanoTime() + if (remainingNanos <= 0) return null + try { + lock.wait( + remainingNanos / NANOS_PER_MILLISECOND, + (remainingNanos % NANOS_PER_MILLISECOND).toInt(), + ) + } catch (_: InterruptedException) { + Thread.currentThread().interrupt() + return null + } + } + } + } + + /** Closes the owned socket and waits briefly for the reader to leave its blocking read. */ + override fun close() { + val firstClose = synchronized(lock) { + if (closed) { + false + } else { + closed = true + lock.notifyAll() + true + } + } + if (!firstClose) return + + var closeFailure = closeSocketOnce() + if (Thread.currentThread() !== reader) { + try { + reader.join(CLOSE_JOIN_MILLIS) + } catch (interrupted: InterruptedException) { + Thread.currentThread().interrupt() + closeFailure = combine( + closeFailure, + IOException("Interrupted while closing the Bluetooth RFCOMM reader", interrupted), + ) + } + if (reader.isAlive) { + closeFailure = combine( + closeFailure, + IOException("Bluetooth RFCOMM reader did not stop after close"), + ) + } + } + if (closeFailure != null) throw closeFailure + } + + private fun readLoop() { + var readFailure: IOException? = null + try { + while (true) { + val readSize = synchronized(lock) { + while (!closed && failure == null && pendingBytes >= MAX_PENDING_BYTES) { + lock.wait() + } + if (closed || failure != null) return + min(READ_CHUNK_BYTES, MAX_PENDING_BYTES - pendingBytes) + } + + val buffer = ByteArray(readSize) + when (val count = input.read(buffer)) { + -1 -> { + synchronized(lock) { + peerEnded = true + lock.notifyAll() + } + return + } + + 0 -> Unit + else -> synchronized(lock) { + if (closed) return + pending.addLast(if (count == buffer.size) buffer else buffer.copyOf(count)) + pendingBytes += count + lock.notifyAll() + } + } + } + } catch (interrupted: InterruptedException) { + Thread.currentThread().interrupt() + if (!isClosed()) { + readFailure = IOException("Bluetooth RFCOMM reader was interrupted", interrupted) + } + } catch (io: IOException) { + if (!isClosed()) readFailure = io + } catch (failure: Throwable) { + readFailure = IOException("Bluetooth RFCOMM reader failed", failure) + if (failure is Error) throw failure + } finally { + readFailure?.let(::fail) + val closeFailure = closeSocketOnce() + if (readFailure == null && closeFailure != null && !isClosed() && !endedCleanly()) { + fail(closeFailure) + } + } + } + + private fun takePendingLocked(maxBytes: Int): ByteArray? { + val chunk = pending.pollFirst() ?: return null + pendingBytes -= chunk.size + if (chunk.size <= maxBytes) return chunk + + val head = chunk.copyOf(maxBytes) + val tail = chunk.copyOfRange(maxBytes, chunk.size) + pending.addFirst(tail) + pendingBytes += tail.size + return head + } + + private fun fail(io: IOException) { + synchronized(lock) { + if (failure == null) failure = io + lock.notifyAll() + } + closeSocketOnce() + } + + private fun closeSocketOnce(): IOException? { + synchronized(lock) { + if (socketCloseStarted) return null + socketCloseStarted = true + } + return try { + socket.close() + null + } catch (failure: Throwable) { + if (failure is Error) throw failure + IOException("Could not close the Bluetooth RFCOMM socket", failure) + } + } + + private fun isClosed(): Boolean = synchronized(lock) { closed } + + private fun endedCleanly(): Boolean = synchronized(lock) { closed || peerEnded } + + private fun deadlineAfter(timeoutMillis: Long): Long { + val now = System.nanoTime() + val delta = timeoutMillis * NANOS_PER_MILLISECOND + return if (Long.MAX_VALUE - now < delta) Long.MAX_VALUE else now + delta + } + + private fun combine(first: IOException?, second: IOException): IOException { + if (first == null) return second + if (first !== second) first.addSuppressed(second) + return first + } + + private companion object { + private const val READ_CHUNK_BYTES = 8_192 + private const val MAX_PENDING_BYTES = 65_536 + private const val CLOSE_JOIN_MILLIS = 1_000L + private const val NANOS_PER_MILLISECOND = 1_000_000L + private val EMPTY = ByteArray(0) + } +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/transport/Ch341DeviceMatcher.kt b/shared/src/main/java/com/shilapi/xcertplay/transport/Ch341DeviceMatcher.kt new file mode 100644 index 0000000..4815a28 --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/transport/Ch341DeviceMatcher.kt @@ -0,0 +1,15 @@ +package com.shilapi.xcertplay.transport + +/** A USB identity explicitly allowed by the product or deployment configuration. */ +data class UsbDeviceId(val vendorId: Int, val productId: Int) + +/** + * Matches only configured CH341 USB identities. There is intentionally no built-in VID/PID: + * deployed CH341 hardware must be identified on the target unit first. + */ +class Ch341DeviceMatcher(allowedDevices: Collection) { + private val allowedDevices = allowedDevices.toSet() + + fun matches(vendorId: Int, productId: Int): Boolean = + UsbDeviceId(vendorId, productId) in allowedDevices +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/transport/Ch341I2cStreamEncoder.kt b/shared/src/main/java/com/shilapi/xcertplay/transport/Ch341I2cStreamEncoder.kt new file mode 100644 index 0000000..576b0af --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/transport/Ch341I2cStreamEncoder.kt @@ -0,0 +1,182 @@ +package com.shilapi.xcertplay.transport + +/** CH341 I2C clock selections documented by the project's CH341 interface baseline. */ +enum class Ch341I2cSpeed(internal val command: Int, internal val bitsPerSecond: Int) { + KHZ_20(0x60, 20_000), + KHZ_100(0x61, 100_000), + KHZ_400(0x62, 400_000), + KHZ_750(0x63, 750_000), +} + +/** + * Encodes a complete CH341 I2C transaction. + * + * Every byte written to the bus is emitted as its own bare `0x80` command. A bare `0x80` is the + * only form the controller answers with an ACK/NACK status byte, which is what lets + * [Ch341I2cTransport] see a NACKed register select; a batched `0x80|n` write is answered with no + * status bytes at all. The number of written bytes is unchanged, so the transport's + * "one status byte per written byte" model stays exact. + * + * A transaction may contain several 32-byte CH341 stream segments. Intermediate segments end + * with `00` and padding, but deliberately omit STOP so the I2C transaction continues in the next + * segment. The final segment contains STOP followed by `00`. + */ +object Ch341I2cStreamEncoder { + const val MAX_STREAM_PACKET_BYTES = 32 + /** Matches the bounded I2C message size accepted by [LinuxI2cTransport]. */ + const val MAX_TRANSACTION_DATA_BYTES = 0xffff + const val MAX_READ_BYTES = MAX_TRANSACTION_DATA_BYTES + + fun configuration(speed: Ch341I2cSpeed): ByteArray = byteArrayOf( + STREAM_START.toByte(), + speed.command.toByte(), + STREAM_END.toByte(), + ) + + fun transaction(address7Bit: Int, writeData: ByteArray, readLength: Int): ByteArray { + validateRequest(address7Bit, writeData.size, readLength) + legacyTransaction(address7Bit, writeData, readLength)?.let { return it } + + val stream = SegmentedStream() + if (writeData.isNotEmpty()) { + stream.startAndWrite(addressByte(address7Bit, read = false), writeData) + } + if (readLength > 0) { + stream.startAndWrite(addressByte(address7Bit, read = true), byteArrayOf()) + stream.read(readLength) + } + return stream.finish() + } + + private fun legacyTransaction(address7Bit: Int, writeData: ByteArray, readLength: Int): ByteArray? { + if (readLength > MAX_READ_BLOCK_BYTES || writeData.size + 1 > MAX_WRITE_COMMAND_BYTES) return null + + val bytes = ArrayList(MAX_STREAM_PACKET_BYTES) + fun add(value: Int) { + bytes += value.toByte() + } + fun write(address: Byte, data: ByteArray) { + // One bare `0x80` per byte: the controller answers that form with ACK/NACK status. + add(WRITE) + add(address.toInt() and 0xff) + data.forEach { + add(WRITE) + add(it.toInt() and 0xff) + } + } + + add(STREAM_START) + if (writeData.isNotEmpty()) { + add(START) + write(addressByte(address7Bit, read = false), writeData) + } + if (readLength > 0) { + add(START) + write(addressByte(address7Bit, read = true), byteArrayOf()) + if (readLength > 1) add(READ + readLength - 1) + add(READ) + } + add(STOP) + add(STREAM_END) + return bytes.takeIf { it.size <= MAX_STREAM_PACKET_BYTES }?.toByteArray() + } + + private fun validateRequest(address7Bit: Int, writeLength: Int, readLength: Int) { + if (address7Bit !in 0..0x7f) { + throw I2cTransportException.InvalidRequest("I2C address must be a 7-bit value") + } + if (readLength < 0) { + throw I2cTransportException.InvalidRequest("Read length must not be negative") + } + if (writeLength == 0 && readLength == 0) { + throw I2cTransportException.InvalidRequest("I2C transaction must read or write data") + } + if (writeLength > MAX_TRANSACTION_DATA_BYTES || readLength > MAX_TRANSACTION_DATA_BYTES) { + throw I2cTransportException.InvalidRequest( + "CH341 transactions support at most $MAX_TRANSACTION_DATA_BYTES bytes per read or write", + ) + } + } + + private fun addressByte(address7Bit: Int, read: Boolean): Byte = + ((address7Bit shl 1) or if (read) 1 else 0).toByte() + + private class SegmentedStream { + private val result = ArrayList() + private var segment = ArrayList(MAX_STREAM_PACKET_BYTES) + + init { + segment += STREAM_START.toByte() + } + + fun startAndWrite(address: Byte, data: ByteArray) { + if (segment.size + START_AND_ADDRESS_BYTES + STREAM_END_BYTES > MAX_STREAM_PACKET_BYTES) { + finishIntermediate() + } + segment += START.toByte() + write(address, data) + } + + fun write(address: Byte, data: ByteArray) { + if (data.isEmpty()) { + // Address-only write: the read-address setup of a segmented read. Emit it as ONE + // batched `0x80|1` command, which suppresses the ACK/NACK status byte. This is the + // form the hardware-proven reference implementation uses: mfi3.py's seg_read_packets + // emits `[START, OUT | 1, address]` and then requires the accumulated reply to total + // exactly the requested data length, with no status byte in front of it. Emitting a + // bare `0x80` here instead adds a status byte and shifts the whole answer. + command(byteArrayOf((WRITE + 1).toByte(), address)) + return + } + // Writes that carry data keep one bare `0x80` per byte so that + // [Ch341I2cTransport] can still check each byte's ACK/NACK status. + command(byteArrayOf(WRITE.toByte(), address)) + data.forEach { value -> + command(byteArrayOf(WRITE.toByte(), value)) + } + } + + fun read(length: Int) { + var remaining = length + while (remaining > MAX_READ_BLOCK_BYTES) { + command(byteArrayOf((READ + MAX_READ_BLOCK_BYTES).toByte())) + finishIntermediate() + remaining -= MAX_READ_BLOCK_BYTES + } + if (remaining > 1) command(byteArrayOf((READ + remaining - 1).toByte())) + command(byteArrayOf(READ.toByte())) + } + + fun finish(): ByteArray { + if (segment.size + STOP_AND_END_BYTES > MAX_STREAM_PACKET_BYTES) finishIntermediate() + segment += STOP.toByte() + segment += STREAM_END.toByte() + result += segment + return result.toByteArray() + } + + private fun command(bytes: ByteArray) { + if (segment.size + bytes.size + STREAM_END_BYTES > MAX_STREAM_PACKET_BYTES) finishIntermediate() + segment += bytes.toList() + } + + private fun finishIntermediate() { + segment += STREAM_END.toByte() + while (segment.size < MAX_STREAM_PACKET_BYTES) segment += 0 + result += segment + segment = arrayListOf(STREAM_START.toByte()) + } + } + + private const val STREAM_START = 0xaa + private const val START = 0x74 + private const val WRITE = 0x80 + private const val READ = 0xc0 + private const val STOP = 0x75 + private const val STREAM_END = 0x00 + private const val STREAM_END_BYTES = 1 + private const val STOP_AND_END_BYTES = 2 + private const val START_AND_ADDRESS_BYTES = 3 + private const val MAX_WRITE_COMMAND_BYTES = 0x3f + private const val MAX_READ_BLOCK_BYTES = 32 +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/transport/Ch341I2cTransport.kt b/shared/src/main/java/com/shilapi/xcertplay/transport/Ch341I2cTransport.kt new file mode 100644 index 0000000..33f46be --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/transport/Ch341I2cTransport.kt @@ -0,0 +1,234 @@ +package com.shilapi.xcertplay.transport + +import java.io.ByteArrayOutputStream + +/** + * Blocking CH341 implementation of [I2cTransport]. One transport owns one USB session and + * serializes its configure/write/read sequence so stream packets cannot interleave. + */ +class Ch341I2cTransport( + private val session: Ch341UsbSession, + private val speed: Ch341I2cSpeed = Ch341I2cSpeed.KHZ_100, + private val timeoutMillis: Int = DEFAULT_TIMEOUT_MILLIS, +) : I2cTransport { + private val lock = Any() + + init { + require(timeoutMillis > 0) { "timeoutMillis must be positive" } + } + + override fun transaction(address7Bit: Int, writeData: ByteArray, readLength: Int): ByteArray { + val stream = Ch341I2cStreamEncoder.transaction(address7Bit, writeData, readLength) + val transactionTimeoutMillis = maxOf(timeoutMillis, minimumTransferTimeoutMillis(writeData.size, readLength)) + return synchronized(lock) { + configure() + // The 2.0C revision NACKs the read address when a STOP is followed by a START any + // sooner than about 3 ms, and the CH341 then answers the read request with 0xFF + // padding. Hold the bus idle across the STOP/START boundary of a register read. + if (writeData.isEmpty() && readLength > 0) { + sleepBusIdle(SELECT_TO_READ_GAP_MILLIS) + } + val response = ByteArrayOutputStream(readLength) + var offset = 0 + while (offset < stream.size) { + val end = minOf(offset + Ch341I2cStreamEncoder.MAX_STREAM_PACKET_BYTES, stream.size) + val segment = stream.copyOfRange(offset, end) + session.bulkWrite(segment, transactionTimeoutMillis) + val (writtenBytes, dataBytes) = instructionLengths(segment) + if (writtenBytes + dataBytes > 0) { + // The worst case is one ACK/NACK status byte per byte written, but the controller + // may answer a multi-byte OUT with fewer or with none. Writes always precede the + // read commands, so the answer is split from its tail instead of trusting a fixed + // status count. A write-only packet is allowed to go unanswered entirely. + val received = session.bulkReadAtMost( + maxLength = writtenBytes + dataBytes, + firstPacketMillis = if (dataBytes > 0) { + transactionTimeoutMillis + } else { + minOf(RESPONSE_QUIET_MILLIS, transactionTimeoutMillis) + }, + quietMillis = RESPONSE_QUIET_MILLIS, + allowEmpty = dataBytes == 0, + ) + if (received.size < dataBytes) { + throw I2cTransportException.DeviceUnavailable( + "CH341 stream packet answered ${received.size} bytes; " + + "expected $dataBytes data bytes", + ) + } + val dataStart = received.size - dataBytes + checkStatusBytes(received, dataStart) + if (dataBytes > 0) { + response.write(received, dataStart, dataBytes) + } + } + offset = end + } + val bytes = response.toByteArray() + if (bytes.size != readLength) { + throw I2cTransportException.Protocol( + "CH341 transaction returned ${bytes.size} bytes; expected $readLength", + ) + } + bytes + } + } + + /** + * Pulses one D0..D5 output low, then leaves the pin actively driven instead of floating. + * + * The 2.0C reset notes require RST to be held low or actively driven high for the whole reset + * window, so the release-to-input form left the address selection undefined on any board + * without a pull-up on RST. The low period is timed on the host because the CH341 UIO delay + * command cannot span the MFi reset window; the level itself sits in the CH341 output latch, so + * USB scheduling cannot shorten it. + * + * [driveHigh] leaves RST driven high, which selects coprocessor address 0x11. Do not tie RST + * straight to GND while driving high -- drive into the target's own pull-up, or pass + * [driveHigh] = false to release the pin and let that pull-up set the idle level. + */ + fun pulseActiveLowReset( + gpio: Int, + lowMillis: Long = MFI_RESET_LOW_MILLIS, + driveHigh: Boolean = true, + ) { + require(gpio in 0..5) { "CH341 output GPIO must be D0..D5" } + require(lowMillis > 0) { "reset pulse must be positive" } + val pinMask = 1 shl gpio + val driveLowStream = byteArrayOf( + UIO_STREAM.toByte(), + UIO_OUT.toByte(), // preload every output latch low while pins are inputs + (UIO_DIR or pinMask).toByte(), // D becomes an output driving low + UIO_END.toByte(), + ) + val releaseStream = byteArrayOf( + UIO_STREAM.toByte(), + if (driveHigh) (UIO_OUT or pinMask).toByte() else UIO_OUT.toByte(), + if (driveHigh) (UIO_DIR or pinMask).toByte() else UIO_DIR.toByte(), + UIO_END.toByte(), + ) + synchronized(lock) { + session.bulkWrite(driveLowStream, timeoutMillis) + sleepBusIdle(lowMillis) + session.bulkWrite(releaseStream, timeoutMillis) + sleepBusIdle(MFI_RESET_STARTUP_MILLIS) + } + } + + /** + * Splits one CH341 stream packet into the bytes it puts on the wire and the bytes it reads back. + * + * A reply of `0x80|n` writes `n` bytes to the bus -- address byte included -- and `0xc0|n` + * requests `n` bytes, with a zero count meaning a single byte. How many ACK/NACK status bytes + * the controller prepends is a firmware detail: a bare `0x80` reply is answered with one status + * byte, while a multi-byte reply may be answered with one status byte per written byte or with + * none. This count is therefore only used as an upper bound; [transaction] aligns the answer + * from its tail, which keeps the read data correct either way. + */ + private fun instructionLengths(segment: ByteArray): InstructionLengths { + var index = 1 // 0xAA stream marker + var writtenBytes = 0 + var dataBytes = 0 + while (index < segment.size) { + val command = segment[index].toInt() and 0xff + index += 1 + when { + command == STREAM_END -> return InstructionLengths(writtenBytes, dataBytes) + command == START || command == STOP -> Unit + command in WRITE_MIN..WRITE_MAX -> { + val written = encodedLength(command) + // Only the bare `0x80` command is answered with one ACK/NACK status byte per + // written byte. A batched `0x80|n` (n >= 1) suppresses those status bytes, so it + // contributes none -- otherwise the answer is over-requested by exactly the + // number of status bytes and the last packet waits out its quiet timeout. + if (command and LENGTH_MASK == 0) writtenBytes += written + index += written + } + command in READ_MIN..READ_MAX -> dataBytes += encodedLength(command) + command in SET_MIN..SET_MAX -> Unit + else -> throw I2cTransportException.Protocol( + "Unexpected CH341 I2C stream command 0x${command.toString(16)}", + ) + } + if (index > segment.size) { + throw I2cTransportException.Protocol("Truncated CH341 I2C stream command") + } + } + return InstructionLengths(writtenBytes, dataBytes) + } + + /** The count field of an OUT/IN command; the controller treats a zero count as one byte. */ + private fun encodedLength(command: Int): Int { + val encoded = command and LENGTH_MASK + return if (encoded == 0) 1 else encoded + } + + /** Rejects a stream answer whose leading ACK/NACK status bytes report an I2C NACK. */ + private fun checkStatusBytes(received: ByteArray, statusCount: Int) { + for (offset in 0 until minOf(statusCount, received.size)) { + if (received[offset].toInt() and ACK_BIT != 0) { + throw I2cTransportException.Nack( + "CH341 reported an I2C NACK on byte $offset of this stream packet", + ) + } + } + } + + private fun sleepBusIdle(millis: Long) { + try { + Thread.sleep(millis) + } catch (interrupted: InterruptedException) { + Thread.currentThread().interrupt() + throw I2cTransportException.DeviceUnavailable( + "Interrupted while holding the I2C bus idle", + interrupted, + ) + } + } + + private data class InstructionLengths(val writtenBytes: Int, val dataBytes: Int) + + private fun configure() { + session.bulkWrite(Ch341I2cStreamEncoder.configuration(speed), timeoutMillis) + } + + /** + * A simple lower bound for a complete I2C transaction at the selected clock, plus fixed USB + * scheduling margin. The caller's configured timeout can still be longer. This is not a + * hardware-performance claim; it only avoids rejecting a legal maximum-sized transfer under + * the old one-second default before its nominal wire time has elapsed. + */ + private fun minimumTransferTimeoutMillis(writeLength: Int, readLength: Int): Int { + val i2cBytes = writeLength.toLong() + readLength + I2C_TRANSACTION_OVERHEAD_BYTES + val wireMillis = (i2cBytes * BITS_PER_I2C_BYTE * MILLIS_PER_SECOND + speed.bitsPerSecond - 1) / + speed.bitsPerSecond + return (wireMillis + TRANSFER_MARGIN_MILLIS).coerceAtMost(Int.MAX_VALUE.toLong()).toInt() + } + + private companion object { + const val DEFAULT_TIMEOUT_MILLIS = 1_000 + const val I2C_TRANSACTION_OVERHEAD_BYTES = 8L + const val BITS_PER_I2C_BYTE = 9L + const val MILLIS_PER_SECOND = 1_000L + const val TRANSFER_MARGIN_MILLIS = 1_000L + const val STREAM_END = 0x00 + const val START = 0x74 + const val STOP = 0x75 + const val SET_MIN = 0x60 + const val SET_MAX = 0x63 + const val WRITE_MIN = 0x80 + const val WRITE_MAX = 0xbf + const val READ_MIN = 0xc0 + const val READ_MAX = 0xff + const val LENGTH_MASK = 0x3f + const val ACK_BIT = 0x80 + const val SELECT_TO_READ_GAP_MILLIS = 5L + const val RESPONSE_QUIET_MILLIS = 25 + const val UIO_STREAM = 0xab + const val UIO_OUT = 0x80 + const val UIO_DIR = 0x40 + const val UIO_END = 0x20 + const val MFI_RESET_LOW_MILLIS = 10L + const val MFI_RESET_STARTUP_MILLIS = 11L + } +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/transport/Ch341UsbHost.kt b/shared/src/main/java/com/shilapi/xcertplay/transport/Ch341UsbHost.kt new file mode 100644 index 0000000..eaa3155 --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/transport/Ch341UsbHost.kt @@ -0,0 +1,336 @@ +package com.shilapi.xcertplay.transport + +import android.app.PendingIntent +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.content.IntentFilter +import android.hardware.usb.UsbConstants +import android.hardware.usb.UsbDevice +import android.hardware.usb.UsbDeviceConnection +import android.hardware.usb.UsbEndpoint +import android.hardware.usb.UsbInterface +import android.hardware.usb.UsbManager +import android.os.Build +import android.util.Log +import java.io.Closeable +import java.util.concurrent.Executor + +/** + * Android USB Host discovery and authorization for a configured CH341 identity. + * + * This class intentionally stops before the CH341 I2C stream protocol. [openAsync] executes the + * potentially blocking open/claim work on the supplied executor; callers should also close the + * returned session away from the main thread. + */ +class Ch341UsbHost( + context: Context, + private val usbManager: UsbManager, + private val matcher: Ch341DeviceMatcher, + private val permissionAction: String = "${context.packageName}.CH341_USB_PERMISSION", +) { + private val appContext = context.applicationContext + sealed class PermissionRequest { + data class AlreadyGranted(val device: UsbDevice) : PermissionRequest() + data class Requested(val device: UsbDevice) : PermissionRequest() + } + + sealed class PermissionResult { + data class Granted(val device: UsbDevice) : PermissionResult() + data class Denied(val device: UsbDevice) : PermissionResult() + } + + sealed class OpenResult { + data class Connected(val session: Ch341UsbSession) : OpenResult() + data class Failed(val error: I2cTransportException) : OpenResult() + } + + fun discover(): List = + usbManager.deviceList.values.filter { matcher.matches(it.vendorId, it.productId) } + + @Throws(I2cTransportException::class) + fun requestPermission(device: UsbDevice): PermissionRequest { + requireConfiguredDevice(device) + if (usbManager.hasPermission(device)) return PermissionRequest.AlreadyGranted(device) + + usbManager.requestPermission(device, permissionPendingIntent()) + return PermissionRequest.Requested(device) + } + + /** Returns null for unrelated broadcasts, malformed results, or devices outside the matcher. */ + fun parsePermissionResult(intent: Intent): PermissionResult? { + if (intent.action != permissionAction) return null + val device = intent.usbDevice() ?: return null + if (!matcher.matches(device.vendorId, device.productId)) return null + return if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) { + PermissionResult.Granted(device) + } else { + PermissionResult.Denied(device) + } + } + + /** Register once for this host instance and close the returned handle to unregister it. */ + fun registerPermissionReceiver(onResult: (PermissionResult) -> Unit): Closeable { + val receiver = object : BroadcastReceiver() { + override fun onReceive(context: Context, intent: Intent) { + parsePermissionResult(intent)?.let(onResult) + } + } + val filter = IntentFilter(permissionAction) + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + appContext.registerReceiver(receiver, filter, Context.RECEIVER_NOT_EXPORTED) + } else { + appContext.registerReceiver(receiver, filter) + } + return Closeable { appContext.unregisterReceiver(receiver) } + } + + /** Opens and claims bulk endpoints on [executor], never on the caller thread. */ + fun openAsync(device: UsbDevice, executor: Executor, callback: (OpenResult) -> Unit) { + executor.execute { + try { + callback(OpenResult.Connected(open(device))) + } catch (error: I2cTransportException) { + callback(OpenResult.Failed(error)) + } + } + } + + private fun open(device: UsbDevice): Ch341UsbSession { + requireConfiguredDevice(device) + if (!usbManager.hasPermission(device)) { + throw I2cTransportException.PermissionDenied("USB permission has not been granted") + } + val endpoints = findBulkEndpoints(device) + ?: throw I2cTransportException.DeviceUnavailable("No USB interface has both bulk IN and OUT endpoints") + val connection = usbManager.openDevice(device) + ?: throw I2cTransportException.DeviceUnavailable("UsbManager could not open the CH341 device") + + if (!connection.claimInterface(endpoints.usbInterface, true)) { + connection.close() + throw I2cTransportException.DeviceUnavailable("Could not claim CH341 USB interface") + } + return Ch341UsbSession(connection, endpoints.usbInterface, endpoints.input, endpoints.output) + } + + private fun requireConfiguredDevice(device: UsbDevice) { + if (!matcher.matches(device.vendorId, device.productId)) { + throw I2cTransportException.DeviceUnavailable("USB device is not a configured CH341 identity") + } + } + + private fun permissionPendingIntent(): PendingIntent { + val intent = Intent(permissionAction).setPackage(appContext.packageName) + return PendingIntent.getBroadcast( + appContext, + 0, + intent, + PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE, + ) + } + + private fun Intent.usbDevice(): UsbDevice? = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + getParcelableExtra(UsbManager.EXTRA_DEVICE, UsbDevice::class.java) + } else { + @Suppress("DEPRECATION") + getParcelableExtra(UsbManager.EXTRA_DEVICE) + } + + private fun findBulkEndpoints(device: UsbDevice): BulkEndpoints? { + for (index in 0 until device.interfaceCount) { + val usbInterface = device.getInterface(index) + var input: UsbEndpoint? = null + var output: UsbEndpoint? = null + for (endpointIndex in 0 until usbInterface.endpointCount) { + val endpoint = usbInterface.getEndpoint(endpointIndex) + if (endpoint.type != UsbConstants.USB_ENDPOINT_XFER_BULK) continue + when (endpoint.direction) { + UsbConstants.USB_DIR_IN -> input = input ?: endpoint + UsbConstants.USB_DIR_OUT -> output = output ?: endpoint + } + } + if (input != null && output != null) return BulkEndpoints(usbInterface, input, output) + } + return null + } + + private data class BulkEndpoints( + val usbInterface: UsbInterface, + val input: UsbEndpoint, + val output: UsbEndpoint, + ) +} + +/** Claimed CH341 USB resources. All transfer methods are blocking and must run off the main thread. */ +class Ch341UsbSession internal constructor( + private val connection: UsbDeviceConnection, + private val usbInterface: UsbInterface, + val inputEndpoint: UsbEndpoint, + val outputEndpoint: UsbEndpoint, +) : Closeable { + private var closed = false + + @Synchronized + internal fun bulkWrite(data: ByteArray, timeoutMillis: Int) { + val transferred = transfer(outputEndpoint, data, timeoutMillis, "write") + if (transferred != data.size) { + Log.w(TAG, "bulk write sent $transferred of ${data.size} bytes: ${data.toHexPreview()}") + throw I2cTransportException.Protocol( + "CH341 bulk write transferred $transferred of ${data.size} bytes", + ) + } + } + + /** + * Reads the controller's answer to one stream packet, stopping at whatever it sends. + * + * The number of ACK/NACK status bytes the CH341 prepends to the read data is a firmware detail, + * so callers pass the worst-case length and align the answer from its tail. The first packet is + * awaited for [firstPacketMillis]; continuation packets only wait [quietMillis], so an answer + * shorter than [maxLength] costs one short wait instead of the full transaction timeout. + * [allowEmpty] accepts a packet the controller chooses not to answer at all. + */ + @Synchronized + internal fun bulkReadAtMost( + maxLength: Int, + firstPacketMillis: Int, + quietMillis: Int, + allowEmpty: Boolean, + ): ByteArray { + if (maxLength < 0) { + throw I2cTransportException.InvalidRequest("Bulk read length must not be negative") + } + if (maxLength == 0) return ByteArray(0) + if (firstPacketMillis <= 0 || quietMillis <= 0) { + throw I2cTransportException.InvalidRequest("Bulk transfer timeout must be positive") + } + val data = ByteArray(maxLength) + // A full-size USB packet does NOT complete a bulk transfer: the read returns only + // once the buffer is full or a SHORT packet arrives. Asking for even one byte past + // the end of a whole-packet answer therefore makes bulkTransfer wait for data that + // never comes and time out, discarding the bytes that already arrived. The CH341 + // answers in whole 32-byte packets, so every request stops on a packet boundary. + val packetSize = minOf(inputEndpoint.maxPacketSize.coerceAtLeast(1), MAX_USB_PACKET_BYTES) + var offset = 0 + while (offset < maxLength) { + val packet = ByteArray(minOf(maxLength - offset, packetSize)) + val waitMillis = if (offset == 0) firstPacketMillis else quietMillis + val fatal = offset == 0 && !allowEmpty + val transferred = try { + transfer(inputEndpoint, packet, waitMillis, "read", clearHaltOnFailure = fatal) + } catch (error: I2cTransportException.DeviceUnavailable) { + // The answer ended early: fewer status bytes than the worst case, or a packet the + // controller does not answer at all. + if (offset > 0 || allowEmpty) { + Log.d( + TAG, + "bulk read ended early at $offset of $maxLength bytes " + + "(quiet-packet timeout of ${waitMillis}ms; accepted as end of answer)", + ) + break + } + throw error + } + if (transferred <= 0) { + if (offset > 0 || allowEmpty) break + throw I2cTransportException.DeviceUnavailable("CH341 bulk read returned no data") + } + System.arraycopy(packet, 0, data, offset, transferred) + offset += transferred + } + if (offset != maxLength) { + // The answer was shorter than the worst-case length the transport budgeted for: the + // controller returned fewer status bytes than it had written bytes, or the stream + // framing drifted off a packet boundary. Both are worth seeing in logcat. + Log.d(TAG, "bulk read answered $offset of $maxLength bytes (allowEmpty=$allowEmpty)") + } + return data.copyOf(offset) + } + + @Synchronized + override fun close() { + if (closed) return + closed = true + connection.releaseInterface(usbInterface) + connection.close() + } + + private fun transfer( + endpoint: UsbEndpoint, + data: ByteArray, + timeoutMillis: Int, + operation: String, + clearHaltOnFailure: Boolean = true, + ): Int { + if (closed) throw I2cTransportException.DeviceUnavailable("CH341 USB session is closed") + if (data.isEmpty()) throw I2cTransportException.InvalidRequest("Bulk $operation data must not be empty") + if (timeoutMillis <= 0) { + throw I2cTransportException.InvalidRequest("Bulk transfer timeout must be positive") + } + + val transferred = try { + connection.bulkTransfer(endpoint, data, data.size, timeoutMillis) + } catch (error: SecurityException) { + throw I2cTransportException.PermissionDenied("USB permission was denied during bulk $operation") + } catch (error: RuntimeException) { + throw I2cTransportException.DeviceUnavailable("CH341 bulk $operation failed", error) + } + if (transferred < 0) { + // Android's bulkTransfer result does not identify whether the device timed out, NAKed, + // or reported another USB failure. Do not manufacture a CH341 NAK classification. + clearEndpointHalt(endpoint, operation) + throw I2cTransportException.DeviceUnavailable("CH341 bulk $operation failed or timed out") + } + return transferred + } + + /** + * Releases a bulk endpoint left halted by a failed transfer. + * + * A USB stall stays latched per endpoint, so once one transfer fails every later transfer on + * that endpoint fails the same way until something clears the halt. Re-opening the device + * clears it, which is why a full stack rebuild always recovers; clearing it here keeps a single + * stalled transfer from consuming the caller's entire retry budget. + * + * A control transfer is harmless when the endpoint was never halted, so this is a one-sided bet. + */ + private fun clearEndpointHalt(endpoint: UsbEndpoint, operation: String) { + val result = try { + connection.controlTransfer( + UsbConstants.USB_DIR_OUT or UsbConstants.USB_TYPE_STANDARD or + USB_RECIP_ENDPOINT, + USB_REQUEST_CLEAR_FEATURE, + USB_FEATURE_ENDPOINT_HALT, + endpoint.address, + null, + 0, + RECOVERY_TIMEOUT_MILLIS, + ) + } catch (error: RuntimeException) { + Log.w(TAG, "halt clear on endpoint ${endpoint.address} threw after failed bulk $operation", error) + -1 + } + Log.w(TAG, "bulk $operation failed; halt clear on endpoint ${endpoint.address} returned $result") + } + + private fun ByteArray.toHexPreview(): String = joinToString(" ") { "%02x".format(it) } + + private companion object { + const val NANOS_PER_MILLI = 1_000_000L + + /** CH341A bulk endpoints report wMaxPacketSize 32; never request across a boundary. */ + const val MAX_USB_PACKET_BYTES = 32 + + const val TAG = "Ch341UsbHost" + + /** Milliseconds allowed for the halt-clear control transfer before recovery is abandoned. */ + const val RECOVERY_TIMEOUT_MILLIS = 200 + + // USB 2.0 standard request: CLEAR_FEATURE(ENDPOINT_HALT) on one endpoint. + // Android exposes USB_DIR_* and USB_TYPE_* on UsbConstants but not the USB_RECIP_* + // recipient codes, so the recipient value is spelled out locally. + const val USB_REQUEST_CLEAR_FEATURE = 0x01 + const val USB_FEATURE_ENDPOINT_HALT = 0x0000 + const val USB_RECIP_ENDPOINT = 0x02 + } +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/transport/EthernetIpv6Codec.kt b/shared/src/main/java/com/shilapi/xcertplay/transport/EthernetIpv6Codec.kt new file mode 100644 index 0000000..e05ef93 --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/transport/EthernetIpv6Codec.kt @@ -0,0 +1,157 @@ +package com.shilapi.xcertplay.transport + +/** + * Untagged Ethernet II framing around IPv6 payloads, the shape NCM datagrams carry. + * + * The NCM data path moves raw Ethernet frames. This codec is the seam the later Android VPN layer + * uses to exchange IPv6 packets with the phone; it does not create or own a network interface. + */ +object EthernetIpv6Codec { + const val ETHERTYPE_IPV6 = 0x86dd + const val MAC_BYTES = 6 + + private const val HEADER_BYTES = 14 + + data class Ipv6Frame( + val sourceMac: ByteArray, + val destinationMac: ByteArray, + val ipv6: ByteArray, + ) + + data class Ipv6FrameView( + val sourceMac: ByteArray, + val payloadOffset: Int, + val payloadLength: Int, + ) + + /** Returns null for tagged frames, non-IPv6 frames, or truncated input. */ + fun parseIpv6(frame: ByteArray): Ipv6Frame? { + if (frame.size < HEADER_BYTES || readU16(frame, 12) != ETHERTYPE_IPV6) return null + return Ipv6Frame( + sourceMac = frame.copyOfRange(6, 12), + destinationMac = frame.copyOfRange(0, 6), + ipv6 = frame.copyOfRange(HEADER_BYTES, frame.size), + ) + } + + /** Returns an allocation-light view for callers that can consume the payload in place. */ + fun parseIpv6View(frame: ByteArray): Ipv6FrameView? { + if (frame.size <= HEADER_BYTES || readU16(frame, 12) != ETHERTYPE_IPV6) return null + return Ipv6FrameView( + sourceMac = frame.copyOfRange(6, 12), + payloadOffset = HEADER_BYTES, + payloadLength = frame.size - HEADER_BYTES, + ) + } + + fun build(sourceMac: ByteArray, destinationMac: ByteArray, ipv6: ByteArray): ByteArray { + require(sourceMac.size == MAC_BYTES) { "sourceMac must be $MAC_BYTES bytes" } + require(destinationMac.size == MAC_BYTES) { "destinationMac must be $MAC_BYTES bytes" } + require(ipv6.isNotEmpty()) { "ipv6 payload must not be empty" } + + val frame = ByteArray(HEADER_BYTES + ipv6.size) + destinationMac.copyInto(frame, 0) + sourceMac.copyInto(frame, 6) + putU16(frame, 12, ETHERTYPE_IPV6) + ipv6.copyInto(frame, HEADER_BYTES) + return frame + } + + /** Maps an IPv6 multicast destination to its Ethernet 33:33:xx:xx:xx:xx address. */ + fun multicastDestinationMac(ipv6: ByteArray): ByteArray? { + if (ipv6.size < IPV6_HEADER_BYTES || (ipv6[0].toInt() ushr 4 and 0x0f) != 6) return null + if ((ipv6[IPV6_DESTINATION_OFFSET].toInt() and 0xff) != 0xff) return null + return byteArrayOf( + 0x33, + 0x33, + ipv6[IPV6_DESTINATION_OFFSET + 12], + ipv6[IPV6_DESTINATION_OFFSET + 13], + ipv6[IPV6_DESTINATION_OFFSET + 14], + ipv6[IPV6_DESTINATION_OFFSET + 15], + ) + } + + /** + * A TUN interface has no layer-2 address, so Android emits Neighbor Advertisements without a + * Target Link-Layer Address option. Add the option required by the Ethernet peer and repair + * the IPv6 payload length and ICMPv6 checksum. + */ + fun addNeighborAdvertisementTargetMac(ipv6: ByteArray, hostMac: ByteArray): ByteArray { + require(hostMac.size == MAC_BYTES) { "hostMac must be $MAC_BYTES bytes" } + if (ipv6.size < ICMPV6_NA_MIN_BYTES || (ipv6[0].toInt() ushr 4 and 0x0f) != 6) return ipv6 + if ((ipv6[IPV6_NEXT_HEADER_OFFSET].toInt() and 0xff) != ICMPV6_NEXT_HEADER || + (ipv6[IPV6_HEADER_BYTES].toInt() and 0xff) != ICMPV6_NEIGHBOR_ADVERTISEMENT + ) return ipv6 + + val payloadBytes = readU16(ipv6, IPV6_PAYLOAD_LENGTH_OFFSET) + if (payloadBytes < ICMPV6_NA_BYTES || IPV6_HEADER_BYTES + payloadBytes > ipv6.size) return ipv6 + var optionOffset = IPV6_HEADER_BYTES + ICMPV6_NA_BYTES + val payloadEnd = IPV6_HEADER_BYTES + payloadBytes + while (optionOffset + 2 <= payloadEnd) { + val optionBytes = (ipv6[optionOffset + 1].toInt() and 0xff) * 8 + if (optionBytes == 0 || optionOffset + optionBytes > payloadEnd) break + if ((ipv6[optionOffset].toInt() and 0xff) == ICMPV6_TARGET_LINK_LAYER_OPTION && + optionBytes >= 8 + ) { + return ipv6.copyOf().also { result -> + hostMac.copyInto(result, optionOffset + 2) + writeIcmpv6Checksum(result) + } + } + optionOffset += optionBytes + } + + val result = ipv6.copyOf(payloadEnd + 8) + result[IPV6_PAYLOAD_LENGTH_OFFSET] = ((payloadBytes + 8) ushr 8).toByte() + result[IPV6_PAYLOAD_LENGTH_OFFSET + 1] = (payloadBytes + 8).toByte() + result[payloadEnd] = ICMPV6_TARGET_LINK_LAYER_OPTION.toByte() + result[payloadEnd + 1] = 1 + hostMac.copyInto(result, payloadEnd + 2) + writeIcmpv6Checksum(result) + return result + } + + private fun writeIcmpv6Checksum(ipv6: ByteArray) { + val payloadBytes = readU16(ipv6, IPV6_PAYLOAD_LENGTH_OFFSET) + ipv6[IPV6_HEADER_BYTES + 2] = 0 + ipv6[IPV6_HEADER_BYTES + 3] = 0 + var sum = 0L + fun addWords(start: Int, bytes: Int) { + var offset = start + val end = start + bytes + while (offset + 1 < end) { + sum += readU16(ipv6, offset).toLong() + offset += 2 + } + if (offset < end) sum += (ipv6[offset].toInt() and 0xff).toLong() shl 8 + } + addWords(IPV6_SOURCE_OFFSET, 32) + sum += (payloadBytes ushr 16).toLong() + sum += (payloadBytes and 0xffff).toLong() + sum += ICMPV6_NEXT_HEADER.toLong() + addWords(IPV6_HEADER_BYTES, payloadBytes) + while (sum ushr 16 != 0L) sum = (sum and 0xffff) + (sum ushr 16) + val checksum = sum.inv().toInt() and 0xffff + ipv6[IPV6_HEADER_BYTES + 2] = (checksum ushr 8).toByte() + ipv6[IPV6_HEADER_BYTES + 3] = checksum.toByte() + } + + private fun putU16(target: ByteArray, offset: Int, value: Int) { + target[offset] = (value ushr 8).toByte() + target[offset + 1] = value.toByte() + } + + private fun readU16(source: ByteArray, offset: Int): Int = + ((source[offset].toInt() and 0xff) shl 8) or (source[offset + 1].toInt() and 0xff) + + private const val IPV6_HEADER_BYTES = 40 + private const val IPV6_PAYLOAD_LENGTH_OFFSET = 4 + private const val IPV6_NEXT_HEADER_OFFSET = 6 + private const val IPV6_SOURCE_OFFSET = 8 + private const val IPV6_DESTINATION_OFFSET = 24 + private const val ICMPV6_NEXT_HEADER = 58 + private const val ICMPV6_NEIGHBOR_ADVERTISEMENT = 136 + private const val ICMPV6_NA_BYTES = 24 + private const val ICMPV6_NA_MIN_BYTES = IPV6_HEADER_BYTES + ICMPV6_NA_BYTES + private const val ICMPV6_TARGET_LINK_LAYER_OPTION = 2 +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/transport/I2cTransport.kt b/shared/src/main/java/com/shilapi/xcertplay/transport/I2cTransport.kt new file mode 100644 index 0000000..2ca5c63 --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/transport/I2cTransport.kt @@ -0,0 +1,29 @@ +package com.shilapi.xcertplay.transport + +import java.io.IOException + +/** + * Transport boundary used by the MFi register layer. Implementations perform blocking I/O away + * from Android's main thread and use [I2cTransportException] for expected transport failures. + */ +interface I2cTransport { + /** + * Executes one I2C transaction. [address7Bit] must be in `0x00..0x7f` and [readLength] must + * be non-negative. An implementation writes [writeData], then, when [readLength] is positive, + * performs a repeated-start read and returns exactly [readLength] bytes. Empty [writeData] or + * a zero [readLength] represent read-only or write-only transactions respectively. + */ + @Throws(I2cTransportException::class) + fun transaction(address7Bit: Int, writeData: ByteArray, readLength: Int): ByteArray + +} + +/** Expected, recoverable I2C transport failures. */ +sealed class I2cTransportException(message: String, cause: Throwable? = null) : IOException(message, cause) { + class InvalidRequest(message: String) : I2cTransportException(message) + class DeviceUnavailable(message: String, cause: Throwable? = null) : I2cTransportException(message, cause) + class PermissionDenied(message: String) : I2cTransportException(message) + class TimedOut(message: String, cause: Throwable? = null) : I2cTransportException(message, cause) + class Nack(message: String) : I2cTransportException(message) + class Protocol(message: String, cause: Throwable? = null) : I2cTransportException(message, cause) +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/transport/Iap2ControlDeadline.kt b/shared/src/main/java/com/shilapi/xcertplay/transport/Iap2ControlDeadline.kt new file mode 100644 index 0000000..ffdf88a --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/transport/Iap2ControlDeadline.kt @@ -0,0 +1,24 @@ +package com.shilapi.xcertplay.transport + +/** An unlimited drive still has a bounded authentication handshake and bounded I/O polls. */ +internal class Iap2ControlDeadline( + private val timeoutMillis: Long, + private val clockNanos: () -> Long = System::nanoTime, +) { + private val unlimited = timeoutMillis == Long.MAX_VALUE + private val startedNanos = clockNanos() + private var authenticated = false + fun authenticated() { authenticated = true } + fun remainingMillis(): Long { + if (unlimited && authenticated) return MAX_POLL_MILLIS + val budget = if (unlimited) HANDSHAKE_MILLIS else timeoutMillis + val elapsedNanos = (clockNanos() - startedNanos).coerceAtLeast(0) + val remainingNanos = budget * 1_000_000 - elapsedNanos + if (remainingNanos <= 0) return 0 + return ((remainingNanos + 999_999) / 1_000_000).coerceAtMost(MAX_POLL_MILLIS) + } + companion object { + const val HANDSHAKE_MILLIS = 60_000L + const val MAX_POLL_MILLIS = 30_000L + } +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/transport/Iap2CsmChannel.kt b/shared/src/main/java/com/shilapi/xcertplay/transport/Iap2CsmChannel.kt new file mode 100644 index 0000000..ce8e89c --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/transport/Iap2CsmChannel.kt @@ -0,0 +1,236 @@ +package com.shilapi.xcertplay.transport + +import com.shilapi.xcertplay.iap2.wire.Iap2CsmFramer +import com.shilapi.xcertplay.iap2.wire.Iap2Frame +import java.io.IOException +import java.util.ArrayDeque +import kotlin.math.min + +/** + * Blocking CSM facade over one owned [Iap2LinkChannel]. + * + * It keeps CSM framing separate from typed control messages. Sending waits for a completed iAP2 + * negotiation so every complete CSM frame can be split to the peer's advertised session-10 limit. + * One receiver owns the stateful framer; concurrent senders are serialized so their split frames + * cannot interleave. Closing this channel closes its link and the link's owned byte stream. + */ +class Iap2CsmChannel private constructor( + private val link: Iap2LinkChannel, +) : AutoCloseable { + private val stateLock = Object() + private val sendLock = Object() + private val receiveLock = Object() + private val framer = Iap2CsmFramer() + private val receivedFrames = ArrayDeque() + private var receivedBytes = 0 + private var closed = false + private var terminalFailure: Throwable? = null + + /** True once this channel is closed or has recorded a terminal transport failure. */ + val isClosed: Boolean + get() = synchronized(stateLock) { + closed || terminalFailure != null + } + + /** Waits for the underlying link to negotiate a writable session 10. */ + fun awaitReady(timeoutMillis: Long): Boolean { + requireTimeout(timeoutMillis) + try { + checkOpen() + } catch (failure: Error) { + fatal(failure) + } + return try { + val ready = link.awaitReady(timeoutMillis) + if (ready && link.peerMaxControlPayloadBytes() == null) { + throw IOException("iAP2 link became writable without a peer control payload limit") + } + ready + } catch (failure: Throwable) { + if (failure is Error) fatal(failure) + failClosed(failure) + } + } + + /** + * Queues one complete CSM frame. Call [awaitReady] successfully first. + * + * A false result from the link can mean that a previous chunk of this frame was accepted. In + * that case continuing would corrupt CSM framing, so the owned link is closed and an exception + * is thrown instead of returning a partial-send result. + */ + fun send(frame: Iap2Frame, timeoutMillis: Long = DEFAULT_SEND_TIMEOUT_MILLIS) { + requireTimeout(timeoutMillis) + synchronized(sendLock) { + try { + checkOpen() + } catch (failure: Error) { + fatal(failure) + } + val peerLimit = link.peerMaxControlPayloadBytes() + ?: throw IllegalStateException("CSM send requires a successful iAP2 awaitReady") + val chunks = Iap2CsmFramer.splitForLink(frame, peerLimit) + val deadlineNanos = deadlineAfter(timeoutMillis) + for (chunk in chunks) { + val queued = try { + link.sendControlAwaitCapacity(chunk, remainingMillis(deadlineNanos)) + } catch (failure: Throwable) { + if (failure is Error) fatal(failure) + failClosed(failure) + } + if (!queued) { + failClosed(IOException("iAP2 could not queue the complete CSM frame before its timeout")) + } + } + } + } + + /** + * Returns the next complete CSM frame, null on timeout or clean close, and throws on failure. + * A single underlying control payload can decode into several frames; the remainder stays in a + * bounded queue for later calls. + */ + fun recv(timeoutMillis: Long): Iap2Frame? { + requireTimeout(timeoutMillis) + synchronized(receiveLock) { + takeReceived()?.let { return it } + val deadlineNanos = deadlineAfter(timeoutMillis) + while (true) { + try { + checkOpen() + } catch (failure: Error) { + fatal(failure) + } + val control = try { + link.recvControl(remainingMillis(deadlineNanos)) + } catch (failure: Throwable) { + if (failure is Error) fatal(failure) + failClosed(failure) + } ?: return null + + val frames = try { + framer.offer(control) + } catch (failure: Throwable) { + if (failure is Error) fatal(failure) + failClosed(IOException("Invalid CSM control payload", failure)) + } + for (frame in frames) enqueue(frame) + takeReceived()?.let { return it } + if (remainingMillis(deadlineNanos) == 0L) return null + } + } + } + + /** Closes the owned iAP2 link and its owned byte stream. */ + override fun close() { + val close = synchronized(stateLock) { + if (closed) false else { + closed = true + true + } + } + if (!close) return + try { + link.close() + } catch (failure: Throwable) { + if (failure is Error) { + terminalize(failure) + throw failure + } + throw terminalize(failure) + } + } + + private fun enqueue(frame: Iap2Frame) { + val encodedBytes = frame.encodedFrame().size + if (receivedFrames.size >= MAX_PENDING_FRAMES || encodedBytes > MAX_PENDING_FRAME_BYTES - receivedBytes) { + failClosed(IOException("CSM received-frame queue limit exceeded")) + } + receivedFrames += frame + receivedBytes += encodedBytes + } + + private fun takeReceived(): Iap2Frame? { + val frame = receivedFrames.pollFirst() ?: return null + receivedBytes -= frame.encodedFrame().size + return frame + } + + private fun checkOpen() { + synchronized(stateLock) { + terminalFailure?.let { throw it } + if (closed) throw IOException("CSM channel is closed") + } + } + + /** Records a terminal error, breaks a blocked receiver, then always throws that error. */ + private fun failClosed(failure: Throwable): Nothing { + val terminal = terminalize(failure) + try { + close() + } catch (closeFailure: Throwable) { + if (closeFailure is Error) throw closeFailure + if (closeFailure !== terminal) terminal.addSuppressed(closeFailure) + } + throw terminal + } + + /** Closes best-effort before propagating the original fatal VM or transport error. */ + private fun fatal(error: Error): Nothing { + terminalize(error) + try { + close() + } catch (_: Throwable) { + // The original Error is the failure the caller must observe. + } + throw error + } + + private fun terminalize(failure: Throwable): Throwable { + synchronized(stateLock) { + val prior = terminalFailure + if (prior == null) { + terminalFailure = failure + return failure + } + if (prior !== failure) prior.addSuppressed(failure) + return prior + } + } + + private fun deadlineAfter(timeoutMillis: Long): Long { + return System.nanoTime() + timeoutMillis * NANOS_PER_MILLISECOND + } + + private fun remainingMillis(deadlineNanos: Long): Long { + val remaining = deadlineNanos - System.nanoTime() + if (remaining <= 0) return 0 + return min(MAX_TIMEOUT_MILLIS, (remaining + NANOS_PER_MILLISECOND - 1) / NANOS_PER_MILLISECOND) + } + + private fun requireTimeout(timeoutMillis: Long) { + require(timeoutMillis in 0..MAX_TIMEOUT_MILLIS) { + "timeoutMillis must be in 0..$MAX_TIMEOUT_MILLIS" + } + } + + companion object { + private const val MAX_PENDING_FRAMES = 64 + private const val MAX_PENDING_FRAME_BYTES = 1_048_576 + private const val NANOS_PER_MILLISECOND = 1_000_000L + private const val MAX_TIMEOUT_MILLIS = 5 * 60 * 1_000L + private const val DEFAULT_SEND_TIMEOUT_MILLIS = 5_000L + + /** Opens the owned iAP2 link over an owned carkit stream. */ + fun open(underlying: BlockingDuplexByteStream): Iap2CsmChannel = + Iap2CsmChannel(Iap2LinkChannel.open(underlying)) + + /** Opens the owned iAP2 link over an owned wireless RFCOMM stream. */ + fun openWireless(underlying: BlockingDuplexByteStream): Iap2CsmChannel = + Iap2CsmChannel(Iap2LinkChannel.openWireless(underlying)) + + /** Opens the owned iAP2 link over an AirPlay type-130 tunnel. */ + fun openTunnel(underlying: BlockingDuplexByteStream): Iap2CsmChannel = + Iap2CsmChannel(Iap2LinkChannel.openTunnel(underlying)) + } +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/transport/Iap2IdentificationClient.kt b/shared/src/main/java/com/shilapi/xcertplay/transport/Iap2IdentificationClient.kt new file mode 100644 index 0000000..18e5684 --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/transport/Iap2IdentificationClient.kt @@ -0,0 +1,288 @@ +package com.shilapi.xcertplay.transport + +import com.shilapi.xcertplay.iap2.body.Iap2BodyReader +import com.shilapi.xcertplay.iap2.catalog.Iap2Endpoints +import com.shilapi.xcertplay.iap2.message.Iap2Messages +import com.shilapi.xcertplay.iap2.session.Iap2Session +import com.shilapi.xcertplay.iap2.wire.Iap2Frame +import java.io.IOException +import kotlin.math.min + +/** The wireless transport identity advertised on the Bluetooth identification session. */ +class Iap2WirelessIdentification( + val bluetoothMac: String, + val ssid: String, +) { + private val macBytes: ByteArray + + init { + require(MAC_ADDRESS.matches(bluetoothMac)) { + "bluetoothMac must be six colon-separated hexadecimal bytes" + } + require(ssid.isNotBlank()) { "Wireless SSID must not be blank" } + require('\u0000' !in ssid) { "Wireless SSID must not contain U+0000" } + macBytes = ByteArray(6) { index -> + bluetoothMac.substring(index * 3, index * 3 + 2).toInt(16).toByte() + } + } + + internal fun bluetoothMacBytes(): ByteArray = macBytes.copyOf() + + private companion object { + private val MAC_ADDRESS = Regex("^[0-9A-Fa-f]{2}(:[0-9A-Fa-f]{2}){5}$") + } +} + +/** Required identity for the minimal wired or wireless iAP2 identification exchange. */ +data class Iap2IdentificationConfig( + val name: String, + val modelIdentifier: String, + val manufacturer: String, + val serialNumber: String, + val firmwareVersion: String, + val hardwareVersion: String, + /** The iPhone USB interface used by CarPlay, supplied explicitly by the deployment. */ + val carPlayUsbInterfaceNumber: Int, + val language: String = "en", + /** This app's own EA protocol identifier; it deliberately does not claim a CarPlay EA flag. */ + val externalAccessoryProtocol: String = "com.shilapi.xcertplay", + /** Non-null selects the wireless Bluetooth and WirelessCarPlay transport components. */ + val wireless: Iap2WirelessIdentification? = null, + /** Advertises and enables iAP2 LocationInformation from the accessory to the phone. */ + val locationInformationEnabled: Boolean = false, +) { + constructor( + name: String, + modelIdentifier: String, + manufacturer: String, + serialNumber: String, + firmwareVersion: String, + hardwareVersion: String, + wireless: Iap2WirelessIdentification, + language: String = "en", + externalAccessoryProtocol: String = "com.shilapi.xcertplay", + ) : this( + name = name, + modelIdentifier = modelIdentifier, + manufacturer = manufacturer, + serialNumber = serialNumber, + firmwareVersion = firmwareVersion, + hardwareVersion = hardwareVersion, + carPlayUsbInterfaceNumber = 0, + language = language, + externalAccessoryProtocol = externalAccessoryProtocol, + wireless = wireless, + ) + + init { + listOf(name, modelIdentifier, manufacturer, serialNumber, firmwareVersion, hardwareVersion).forEach { + require(it.isNotBlank()) { "Identification identity strings must not be blank" } + } + require(language.isNotBlank()) { "Identification language must not be blank" } + require(externalAccessoryProtocol.isNotBlank()) { "External accessory protocol must not be blank" } + listOf( + name, + modelIdentifier, + manufacturer, + serialNumber, + firmwareVersion, + hardwareVersion, + language, + externalAccessoryProtocol, + ).forEach { + require('\u0000' !in it) { "NUL-terminated identification strings must not contain U+0000" } + } + require(carPlayUsbInterfaceNumber in 0..0xff) { + "carPlayUsbInterfaceNumber must be in 0..255" + } + } +} + +/** Identification failures distinguished from the underlying iAP2 transport failure. */ +sealed class Iap2IdentificationException(message: String) : IOException(message) { + class Rejected(parameterIds: Set) : Iap2IdentificationException( + "iAP2 identification rejected parameters ${parameterIds.sorted().joinToString(prefix = "[", postfix = "]") { "0x${it.toString(16).padStart(4, '0')}" }}; " + + "this minimal identification profile has no optional components to remove", + ) { + val parameterIds: Set = parameterIds.toSet() + } + + class UnexpectedMessage(messageId: Int) : Iap2IdentificationException( + "Unexpected iAP2 identification message 0x${messageId.toString(16).padStart(4, '0')}", + ) +} + +/** + * Synchronous accessory-side wired or wireless identification over an already owned CSM channel. + * + * This is intentionally only identification: it neither invokes MFi nor itself starts any + * CarPlay, subscription, power, media, or UI service. + */ +class Iap2IdentificationClient(private val session: Iap2Session) { + /** Waits for link negotiation, then completes the 1D00/1D01/1D02 exchange. */ + @Throws(IphoneUsbException::class, Iap2IdentificationException::class) + fun identify(config: Iap2IdentificationConfig, timeoutMillis: Long = DEFAULT_TIMEOUT_MILLIS) { + require(timeoutMillis in 1..MAXIMUM_TIMEOUT_MILLIS) { + "timeoutMillis must be in 1..$MAXIMUM_TIMEOUT_MILLIS" + } + val deadlineNanos = System.nanoTime() + timeoutMillis * NANOS_PER_MILLISECOND + if (!session.awaitReady(remainingMillis(deadlineNanos))) { + throw IphoneUsbException.TimedOut("Timed out waiting for iAP2 control session readiness") + } + + while (true) { + val frame = session.recv(remainingMillis(deadlineNanos)) + ?: throw IphoneUsbException.TimedOut("Timed out waiting for iAP2 identification") + when (frame.messageId) { + START_IDENTIFICATION -> session.send(identificationInformation(config), remainingMillis(deadlineNanos)) + IDENTIFICATION_ACCEPTED -> return + IDENTIFICATION_REJECTED -> { + val rejected = Iap2BodyReader.of(frame).list().mapTo(LinkedHashSet()) { it.id } + throw Iap2IdentificationException.Rejected(rejected) + } + else -> throw Iap2IdentificationException.UnexpectedMessage(frame.messageId) + } + } + } + + companion object { + const val START_IDENTIFICATION = 0x1d00 + const val IDENTIFICATION_INFORMATION = 0x1d01 + const val IDENTIFICATION_ACCEPTED = 0x1d02 + const val IDENTIFICATION_REJECTED = 0x1d03 + + private const val DEFAULT_TIMEOUT_MILLIS = 10_000L + private const val MAXIMUM_TIMEOUT_MILLIS = 5 * 60 * 1_000L + private const val NANOS_PER_MILLISECOND = 1_000_000L + + /** Builds the smallest honest LIVI-compatible wired or wireless IdentificationInformation. */ + fun identificationInformation(config: Iap2IdentificationConfig): Iap2Frame { + val wireless = config.wireless + val sentMessages = if (config.locationInformationEnabled) { + MESSAGES_SENT_BY_ACCESSORY + LOCATION_INFORMATION + } else { + MESSAGES_SENT_BY_ACCESSORY + } + val receivedMessages = if (config.locationInformationEnabled) { + MESSAGES_RECEIVED_FROM_PHONE + START_LOCATION_INFORMATION + STOP_LOCATION_INFORMATION + } else { + MESSAGES_RECEIVED_FROM_PHONE + } + return Iap2Messages.build(Iap2Endpoints.IDENTIFICATION_INFORMATION) { + string(0, config.name) + string(1, config.modelIdentifier) + string(2, config.manufacturer) + string(3, config.serialNumber) + string(4, config.firmwareVersion) + string(5, config.hardwareVersion) + u16List( + 6, + if (wireless == null) { + sentMessages.asIterable() + } else { + sentMessages.filterNot { it == POWER_SOURCE_UPDATE }.toIntArray().asIterable() + + ACCESSORY_WIFI_CONFIGURATION_INFORMATION + }, + ) + u16List( + 7, + if (wireless == null) { + receivedMessages.asIterable() + } else { + receivedMessages.asIterable() + WIRELESS_PHONE_MESSAGES.asIterable() + }, + ) + u8(8, if (wireless == null) 2 else 0) + u16(9, 20) + group(10) { + u8(0, 1) + string(1, config.externalAccessoryProtocol) + u8(2, 0) + } + string(12, config.language) + strings(13, listOf(config.language)) + if (wireless == null) { + group(16) { + u16(0, 0) + string(1, "USBHostTransport") + void(2) + u8(3, config.carPlayUsbInterfaceNumber) + void(4) + } + } else { + group(17) { + u16(0, 0) + string(1, "blue") + void(2) + bytes(3, wireless.bluetoothMacBytes()) + string(4, "blue") + void(5) + } + group(24) { + u16(0, 1) + string(1, wireless.ssid) + void(2) + u16(3, 1) + void(4) + void(5) + } + } + if (config.locationInformationEnabled) { + group(22) { + u16(0, 0) + string(1, config.name) + void(17) + void(18) + } + } + } + } + + private fun remainingMillis(deadlineNanos: Long): Long { + val remainingNanos = deadlineNanos - System.nanoTime() + if (remainingNanos <= 0) throw IphoneUsbException.TimedOut("iAP2 identification timed out") + return min(MAXIMUM_TIMEOUT_MILLIS, (remainingNanos + NANOS_PER_MILLISECOND - 1) / NANOS_PER_MILLISECOND) + } + + /* Include the authentication messages implemented by Iap2MfiAuthenticationClient. */ + private val MESSAGES_SENT_BY_ACCESSORY = intArrayOf( + 0xaa01, // AuthenticationCertificate + 0xaa03, // AuthenticationResponse + 0x5000, // StartNowPlayingUpdates + 0x5002, // StopNowPlayingUpdates + 0x5200, // StartRouteGuidanceUpdates + 0x5203, // StopRouteGuidanceUpdates + 0xae00, // StartPowerUpdates + 0xae02, // StopPowerUpdates + 0x4157, // StartCommunicationsUpdates + 0x4159, // StopCommunicationsUpdates + 0x4154, // StartCallStateUpdates + 0x4156, // StopCallStateUpdates + 0xae03, // PowerSourceUpdate + 0x4301, // CarPlayStartSession + ) + private val MESSAGES_RECEIVED_FROM_PHONE = intArrayOf( + 0xaa00, // RequestAuthenticationCertificate + 0xaa02, // RequestAuthenticationChallengeResponse + 0xaa04, // AuthenticationFailed + 0xaa05, // AuthenticationSucceeded + 0xea00, // StartExternalAccessoryProtocolSession + 0xea01, // StopExternalAccessoryProtocolSession + 0x5001, // NowPlayingUpdate + 0x5201, // RouteGuidanceUpdate + 0x5202, // RouteGuidanceManeuverUpdate + 0xae01, // PowerUpdate + 0x4158, // CommunicationsUpdate + 0x4155, // CallStateUpdate + 0x4300, // CarPlayAvailability + ) + private const val POWER_SOURCE_UPDATE = 0xae03 + private const val CARPLAY_AVAILABILITY = 0x4300 + private const val CARPLAY_START_SESSION = 0x4301 + private const val ACCESSORY_WIFI_CONFIGURATION_INFORMATION = 0x5703 + private const val LOCATION_INFORMATION = 0xfffb + private const val START_LOCATION_INFORMATION = 0xfffa + private const val STOP_LOCATION_INFORMATION = 0xfffc + private val WIRELESS_PHONE_MESSAGES = intArrayOf(0x4e0d, 0x4e0e, 0x5702) + } +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/transport/Iap2LinkChannel.kt b/shared/src/main/java/com/shilapi/xcertplay/transport/Iap2LinkChannel.kt new file mode 100644 index 0000000..7e56590 --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/transport/Iap2LinkChannel.kt @@ -0,0 +1,375 @@ +package com.shilapi.xcertplay.transport + +import java.io.IOException +import java.util.ArrayDeque +import kotlin.math.min + +/** + * Blocking facade for an iAP2 link over a caller-supplied byte stream. + * + * [open] starts one worker. That worker is the only code that drives [Iap2LinkEngine] or calls + * [BlockingDuplexByteStream.send]/[BlockingDuplexByteStream.recv]. Callers may concurrently wait + * for readiness, queue complete session-10 payloads, receive session-10 payloads, or close this + * channel. This class owns and closes [underlying]. + * + * It deliberately does not parse CSM control messages or implement EA, file transfer, media, UI, + * or any Lockdown setup. + */ +class Iap2LinkChannel private constructor( + private val underlying: BlockingDuplexByteStream, + private val linkConfig: Iap2LinkConfig, + private val initiateNegotiation: Boolean, +) : AutoCloseable { + private data class Command(val control: ByteArray) + + private val lock = Object() + private val commands = ArrayDeque() + private var commandBytes = 0 + private val controls = ArrayDeque() + private var controlBytes = 0 + + private var ready = false + private var peerMaxControlPayloadBytes: Int? = null + private var closing = false + private var terminated = false + private var terminalFailure: Throwable? = null + private var streamCloseStarted = false + + private val worker = Thread(::runPump, "xcertplay-iap2-link").apply { + isDaemon = true + } + + /** Waits until session 10 is writable; returns false on timeout or clean close, and throws on failure. */ + fun awaitReady(timeoutMillis: Long): Boolean { + require(timeoutMillis >= 0) { "timeoutMillis must not be negative" } + synchronized(lock) { + waitFor(timeoutMillis) { (ready && !terminated) || terminated } + throwTerminalFailureLocked() + return ready && !terminated + } + } + + /** + * The peer's negotiated maximum session-10 payload length, available after [awaitReady] + * returns true. It excludes the nine-byte iAP2 header and one-byte payload checksum. + */ + fun peerMaxControlPayloadBytes(): Int? = synchronized(lock) { peerMaxControlPayloadBytes } + + /** + * Copies and queues one raw session-10 payload. Returns false after close/termination or when + * the bounded command queue is full. A peer LSP length violation is discovered by the worker + * when it reaches the engine and terminates the channel. + */ + fun sendControl(bytes: ByteArray): Boolean { + require(bytes.size <= Iap2LinkEngine.MAX_PAYLOAD_BYTES) { + "iAP2 control payload exceeds ${Iap2LinkEngine.MAX_PAYLOAD_BYTES} bytes" + } + val copy = bytes.copyOf() + synchronized(lock) { + if (terminated || closing) return false + return enqueueCommandLocked(copy) + } + } + + /** + * Like [sendControl], but waits for command-queue capacity. CSM uses this to queue every + * fragment of one frame without converting link backpressure into a partial CSM write. + */ + internal fun sendControlAwaitCapacity(bytes: ByteArray, timeoutMillis: Long): Boolean { + require(bytes.size <= Iap2LinkEngine.MAX_PAYLOAD_BYTES) { + "iAP2 control payload exceeds ${Iap2LinkEngine.MAX_PAYLOAD_BYTES} bytes" + } + require(timeoutMillis >= 0) { "timeoutMillis must not be negative" } + val copy = bytes.copyOf() + synchronized(lock) { + waitFor(timeoutMillis) { + terminated || closing || hasCommandCapacityLocked(copy.size) + } + throwTerminalFailureLocked() + if (terminated || closing) return false + return enqueueCommandLocked(copy) + } + } + + /** Returns the next control payload; returns null on timeout or clean close, and throws on failure. */ + fun recvControl(timeoutMillis: Long): ByteArray? { + require(timeoutMillis >= 0) { "timeoutMillis must not be negative" } + synchronized(lock) { + waitFor(timeoutMillis) { controls.isNotEmpty() || terminated } + throwTerminalFailureLocked() + if (controls.isEmpty()) return null + val bytes = controls.removeFirst() + controlBytes -= bytes.size + return bytes + } + } + + /** + * Marks the channel closed, directly closes its owned stream to break a blocking recv, then + * waits a bounded time for the worker. Stream or worker failures are rethrown, including + * [Error]s; they are never silently discarded. + */ + override fun close() { + synchronized(lock) { + if (!closing) { + closing = true + terminalLocked(null) + } + } + + var failure = closeUnderlyingOnce() + if (failure != null) { + synchronized(lock) { + terminalFailure = combineFailures(terminalFailure, failure) + lock.notifyAll() + } + } + try { + worker.join(CLOSE_JOIN_MILLIS) + } catch (interrupted: InterruptedException) { + Thread.currentThread().interrupt() + failure = combineFailures(failure, interrupted) + } + if (worker.isAlive) { + failure = combineFailures(failure, IOException("iAP2 link worker did not stop after close")) + } + synchronized(lock) { + failure = combineFailures(failure, terminalFailure) + } + if (failure != null) throw failure + } + + private fun runPump() { + val engine = Iap2LinkEngine(linkConfig) + try { + engine.start(wiredInitiator = initiateNegotiation, nowMillis = nowMillis()) + while (!isClosing()) { + drainCommands(engine) + engine.advanceTime(nowMillis()) + flush(engine) + if (!drainEvents(engine)) return + if (isClosing()) return + + val next = engine.nextDeadlineMillis() + val waitMillis = min( + RECEIVE_POLL_MILLIS, + next?.let { (it - nowMillis()).coerceAtLeast(0) } ?: RECEIVE_POLL_MILLIS, + ).coerceAtLeast(MINIMUM_RECEIVE_POLL_MILLIS) + val received = underlying.recv(RECEIVE_CHUNK_BYTES, waitMillis) + if (isClosing()) return + when { + received == null -> Unit + received.isEmpty() -> engine.feedEof() + else -> engine.feed(received, nowMillis()) + } + } + finish(null) + } catch (failure: Throwable) { + if (failure is Error) { + finish(failure) + throw failure + } + if (isClosing()) finish(null) else finish(failure) + } + } + + private fun drainCommands(engine: Iap2LinkEngine) { + while (engine.writable()) { + val command = synchronized(lock) { + if (commands.isEmpty()) { + null + } else { + commands.removeFirst().also { + commandBytes -= it.control.size + lock.notifyAll() + } + } + } ?: return + engine.sendControl(command.control, nowMillis()) + if (isClosing()) return + } + } + + private fun flush(engine: Iap2LinkEngine) { + val bytes = engine.takeOutput() + if (bytes.isNotEmpty()) underlying.send(bytes) + } + + /** Returns false when a link terminal event has been observed. */ + private fun drainEvents(engine: Iap2LinkEngine): Boolean { + while (true) { + when (val event = engine.pollEvent() ?: return true) { + is Iap2LinkEngine.Event.Writable -> synchronized(lock) { + if (event.value) { + // The engine only emits writable after validating this is positive. + peerMaxControlPayloadBytes = engine.peerSynchronization().maxLength - 10 + } + ready = event.value && !terminated + lock.notifyAll() + } + + is Iap2LinkEngine.Event.Control -> { + val overflow = synchronized(lock) { + if (controls.size >= MAX_PENDING_CONTROLS || + event.bytes.size > MAX_PENDING_CONTROL_BYTES - controlBytes + ) { + true + } else { + controls += event.bytes + controlBytes += event.bytes.size + lock.notifyAll() + false + } + } + if (overflow) { + finish(IOException("iAP2 received-control queue limit exceeded")) + return false + } + } + + is Iap2LinkEngine.Event.Dead -> { + finish(IOException(event.reason ?: "iAP2 link ended")) + return false + } + } + } + } + + private fun finish(failure: Throwable?) { + synchronized(lock) { + finishLocked(failure) + } + closeUnderlyingOnce()?.let { closeFailure -> + synchronized(lock) { + terminalFailure = combineFailures(terminalFailure, closeFailure) + lock.notifyAll() + } + } + } + + private fun finishLocked(failure: Throwable?) { + if (!terminated) terminalLocked(failure) else if (failure != null) { + terminalFailure = combineFailures(terminalFailure, failure) + lock.notifyAll() + } + } + + private fun terminalLocked(failure: Throwable?) { + terminated = true + ready = false + commands.clear() + commandBytes = 0 + controls.clear() + controlBytes = 0 + terminalFailure = combineFailures(terminalFailure, failure) + lock.notifyAll() + } + + /** lock must already be held. */ + private fun throwTerminalFailureLocked() { + terminalFailure?.let { throw it } + } + + private fun isClosing(): Boolean = synchronized(lock) { closing || terminated } + + private fun closeUnderlyingOnce(): Throwable? { + synchronized(lock) { + if (streamCloseStarted) return null + streamCloseStarted = true + } + return try { + underlying.close() + null + } catch (failure: Throwable) { + failure + } + } + + /** lock must already be held. */ + private fun hasCommandCapacityLocked(bytes: Int): Boolean = + commands.size < MAX_PENDING_COMMANDS && bytes <= MAX_PENDING_COMMAND_BYTES - commandBytes + + /** lock must already be held. */ + private fun enqueueCommandLocked(bytes: ByteArray): Boolean { + if (!hasCommandCapacityLocked(bytes.size)) return false + commands += Command(bytes) + commandBytes += bytes.size + lock.notifyAll() + return true + } + + /** lock must already be held. */ + private fun waitFor(timeoutMillis: Long, readyPredicate: () -> Boolean): Boolean { + if (readyPredicate()) return true + if (timeoutMillis == 0L) return false + val budgetNanos = timeoutMillis.coerceAtMost(MAX_WAIT_MILLIS) * NANOS_PER_MILLISECOND + val startedNanos = System.nanoTime() + while (!readyPredicate()) { + val elapsedNanos = System.nanoTime() - startedNanos + if (elapsedNanos >= budgetNanos) return false + val remainingNanos = budgetNanos - elapsedNanos + try { + lock.wait( + remainingNanos / NANOS_PER_MILLISECOND, + (remainingNanos % NANOS_PER_MILLISECOND).toInt(), + ) + } catch (interrupted: InterruptedException) { + Thread.currentThread().interrupt() + return false + } + } + return true + } + + private fun combineFailures(first: Throwable?, second: Throwable?): Throwable? { + if (first == null) return second + if (second != null && second !== first) first.addSuppressed(second) + return first + } + + companion object { + private const val RECEIVE_CHUNK_BYTES = 8_192 + private const val RECEIVE_POLL_MILLIS = 100L + private const val MINIMUM_RECEIVE_POLL_MILLIS = 1L + private const val CLOSE_JOIN_MILLIS = 1_000L + private const val NANOS_PER_MILLISECOND = 1_000_000L + private const val MAX_WAIT_MILLIS = Long.MAX_VALUE / NANOS_PER_MILLISECOND + private const val MAX_PENDING_COMMANDS = 64 + private const val MAX_PENDING_COMMAND_BYTES = 1_048_576 + private const val MAX_PENDING_CONTROLS = 64 + private const val MAX_PENDING_CONTROL_BYTES = 1_048_576 + + private val WIRED_LINK_CONFIG = Iap2LinkConfig( + maxOutgoing = 4, + controlSessionVersion = 2, + zeroAcknowledgements = true, + ) + private val WIRELESS_LINK_CONFIG = Iap2LinkConfig( + maxOutgoing = 4, + controlSessionVersion = 2, + ) + + /** Opens and immediately starts a wired iAP2 link, taking ownership of the supplied stream. */ + fun open(underlying: BlockingDuplexByteStream): Iap2LinkChannel = + Iap2LinkChannel(underlying, WIRED_LINK_CONFIG, initiateNegotiation = true) + .also { it.worker.start() } + + /** + * Opens a wireless RFCOMM link. LIVI sends the iAP2 marker but lets the phone initiate + * synchronization, and keeps acknowledgements enabled for Bluetooth. + */ + fun openWireless(underlying: BlockingDuplexByteStream): Iap2LinkChannel = + Iap2LinkChannel(underlying, WIRELESS_LINK_CONFIG, initiateNegotiation = false) + .also { it.worker.start() } + + /** + * Opens the iAP2 link carried by an AirPlay type-130 tunnel. The accessory initiates + * synchronization and zero-acknowledgement mode matches the Wi-Fi transport. + */ + fun openTunnel(underlying: BlockingDuplexByteStream): Iap2LinkChannel = + Iap2LinkChannel(underlying, WIRED_LINK_CONFIG, initiateNegotiation = true) + .also { it.worker.start() } + + private fun nowMillis(): Long = System.nanoTime() / NANOS_PER_MILLISECOND + } +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/transport/Iap2LinkEngine.kt b/shared/src/main/java/com/shilapi/xcertplay/transport/Iap2LinkEngine.kt new file mode 100644 index 0000000..4fd7d65 --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/transport/Iap2LinkEngine.kt @@ -0,0 +1,710 @@ +package com.shilapi.xcertplay.transport + +import java.io.ByteArrayOutputStream +import java.util.ArrayDeque + +/** + * The iAP2 link layer, deliberately kept independent from I/O, threads, CSM, and media. + * + * The caller supplies a monotonic millisecond clock, writes [takeOutput] to its byte stream, and + * feeds arbitrary receive fragments back through [feed]. This class only exposes control-session + * (session 10) bytes. It does not open a Lockdown connection or own a [BlockingDuplexByteStream]. + * + * An inbound wire frame is limited to the largest u16 length (`65535` bytes total). Pending + * outbound and out-of-order packets are additionally capped by [Iap2LinkConfig] (64 by default). + * Pending output is capped at 1 MiB and pending events at 256 entries by default, so neither peer + * input nor a caller that temporarily stops draining the engine can grow memory without bound. + */ +class Iap2LinkEngine( + private val config: Iap2LinkConfig = Iap2LinkConfig(), +) { + enum class State { + IDLE, + DETECTING, + NEGOTIATING, + NORMAL, + DEAD, + } + + sealed class Event { + data class Control(val bytes: ByteArray) : Event() + data class Writable(val value: Boolean) : Event() + data class Dead(val reason: String?) : Event() + } + + data class SessionDescriptor( + val id: Int, + val kind: Int, + val version: Int, + ) { + init { + require(id in 0..0xff) + require(kind in 0..0xff) + require(version in 0..0xff) + } + } + + data class SynchronizationPayload( + val maxOutgoing: Int, + val maxLength: Int, + val retransmissionTimeoutMillis: Int, + val acknowledgementTimeoutMillis: Int, + val maxRetransmissions: Int, + val maxAcknowledgements: Int, + val sessions: List, + ) { + init { + require(maxOutgoing in 0..0xff) + require(maxLength in 0..MAX_WIRE_FRAME_BYTES) + require(retransmissionTimeoutMillis in 0..0xffff) + require(acknowledgementTimeoutMillis in 0..0xffff) + require(maxRetransmissions in 0..0xff) + require(maxAcknowledgements in 0..0xff) + } + + fun encode(): ByteArray { + val out = ByteArrayOutputStream(10 + sessions.size * SESSION_DESCRIPTOR_BYTES) + out.write(SYNCHRONIZATION_VERSION) + out.write(maxOutgoing) + writeU16(out, maxLength) + writeU16(out, retransmissionTimeoutMillis) + writeU16(out, acknowledgementTimeoutMillis) + out.write(maxRetransmissions) + out.write(maxAcknowledgements) + sessions.forEach { + out.write(it.id) + out.write(it.kind) + out.write(it.version) + } + return out.toByteArray() + } + + companion object { + fun decode(bytes: ByteArray): SynchronizationPayload? { + if (bytes.size < SYNCHRONIZATION_FIXED_BYTES || u8(bytes[0]) != SYNCHRONIZATION_VERSION) { + return null + } + val descriptors = ArrayList() + var offset = SYNCHRONIZATION_FIXED_BYTES + while (offset + SESSION_DESCRIPTOR_BYTES <= bytes.size) { + descriptors += SessionDescriptor(u8(bytes[offset]), u8(bytes[offset + 1]), u8(bytes[offset + 2])) + offset += SESSION_DESCRIPTOR_BYTES + } + return SynchronizationPayload( + maxOutgoing = u8(bytes[1]), + maxLength = readU16(bytes, 2), + retransmissionTimeoutMillis = readU16(bytes, 4), + acknowledgementTimeoutMillis = readU16(bytes, 6), + maxRetransmissions = u8(bytes[8]), + maxAcknowledgements = u8(bytes[9]), + sessions = descriptors, + ) + } + } + } + + private data class Header( + val length: Int, + val control: Int, + val sequence: Int, + val acknowledgement: Int, + val sessionId: Int, + ) + + private data class Packet( + var sequence: Int, + val sessionId: Int, + val payload: ByteArray, + var retransmissions: Int = 0, + var deadlineMillis: Long = 0, + ) + + private var state = State.IDLE + private var peerSynchronization = localSynchronization() + private var peerSynchronizationReceived = false + private var sentSequence = INITIAL_SEQUENCE + private var lastSentAcknowledged: Int? = null + private var lastReceivedInOrder = 0 + private var lastAcknowledgedReceived: Int? = null + private var accumulatedAcknowledgements = 0 + private var writable = false + + private val unacknowledged = ArrayList() + private val queued = ArrayDeque() + private val outOfOrder = ArrayList() + private val events = ArrayDeque() + private val output = ByteArrayOutputStream() + private val receive = ReceiveBuffer() + private var awaitingPayload: Header? = null + + private var markerDeadlineMillis: Long? = null + private var synchronizationDeadlineMillis: Long? = null + private var sendAcknowledgementDeadlineMillis: Long? = null + private var receiveAcknowledgementDeadlineMillis: Long? = null + + fun state(): State = state + + fun writable(): Boolean = writable + + fun peerSynchronization(): SynchronizationPayload = peerSynchronization + + fun takeOutput(): ByteArray { + val bytes = output.toByteArray() + output.reset() + return bytes + } + + fun pollEvent(): Event? = if (events.isEmpty()) null else events.removeFirst() + + fun nextDeadlineMillis(): Long? = listOfNotNull( + markerDeadlineMillis, + synchronizationDeadlineMillis, + sendAcknowledgementDeadlineMillis, + receiveAcknowledgementDeadlineMillis, + ).minOrNull() + + /** Starts a link attempt. Wired CarKit uses [wiredInitiator] = true. */ + fun start(wiredInitiator: Boolean, nowMillis: Long) { + if (state != State.IDLE) return + state = State.DETECTING + if (!appendOutput(IAP2_MARKER)) return + markerDeadlineMillis = nowMillis + MARKER_RESEND_MILLIS + if (wiredInitiator && state != State.DEAD) enterNegotiating(nowMillis) + } + + /** Supplies any received byte fragment; empty fragments are harmless. */ + fun feed(bytes: ByteArray, nowMillis: Long) { + if (state == State.DEAD || bytes.isEmpty()) return + var offset = 0 + while (offset < bytes.size && state != State.DEAD) { + val room = receive.remainingCapacity() + if (room == 0) { + if (!parseAvailable(nowMillis)) { + die("iAP2 inbound frame exceeds $MAX_WIRE_FRAME_BYTES bytes") + return + } + continue + } + val count = minOf(room, bytes.size - offset) + receive.append(bytes, offset, count) + offset += count + while (parseAvailable(nowMillis) && state != State.DEAD) { + // Drain all complete frames before accepting more input. + } + } + } + + /** The byte stream ended. */ + fun feedEof() { + die(null) + } + + /** Advances all due protocol timers with the caller's monotonic clock. */ + fun advanceTime(nowMillis: Long) { + while (state != State.DEAD) { + val deadline = nextDeadlineMillis() ?: return + if (deadline > nowMillis) return + when { + markerDeadlineMillis?.let { it <= nowMillis } == true -> { + markerDeadlineMillis = null + if (state == State.DETECTING) { + if (appendOutput(IAP2_MARKER)) { + markerDeadlineMillis = nowMillis + MARKER_RESEND_MILLIS + } + } + } + + synchronizationDeadlineMillis?.let { it <= nowMillis } == true -> { + synchronizationDeadlineMillis = null + if (state == State.NEGOTIATING) { + sendSynchronization() + if (state != State.DEAD) { + synchronizationDeadlineMillis = nowMillis + SYNCHRONIZATION_RESEND_MILLIS + } + } + } + + sendAcknowledgementDeadlineMillis?.let { it <= nowMillis } == true -> { + sendAcknowledgementDeadlineMillis = null + if (state == State.NORMAL) { + lastAcknowledgedReceived = lastReceivedInOrder + sendAcknowledgement() + } + } + + receiveAcknowledgementDeadlineMillis?.let { it <= nowMillis } == true -> { + receiveAcknowledgementDeadlineMillis = null + retransmitDuePacket(nowMillis) + } + } + } + } + + /** Queues a complete raw control-session payload (session id 10). */ + fun sendControl(bytes: ByteArray, nowMillis: Long) { + require(bytes.size <= MAX_PAYLOAD_BYTES) { + "iAP2 control payload exceeds $MAX_PAYLOAD_BYTES bytes" + } + if (peerSynchronizationReceived || state == State.NORMAL) { + require(peerPayloadIsAcceptable(bytes)) { + "iAP2 control payload exceeds peer maxLength ${peerSynchronization.maxLength}" + } + } + sendPacket(Packet(0, CONTROL_SESSION_ID, bytes.copyOf()), nowMillis) + } + + private fun parseAvailable(nowMillis: Long): Boolean { + if (state == State.DEAD) return false + if (state == State.DETECTING) { + if (receive.size < IAP2_MARKER.size) return false + if (!receive.matches(IAP2_MARKER)) { + die("iAP2 marker was not received") + return false + } + receive.discard(IAP2_MARKER.size) + enterNegotiating(nowMillis) + return true + } + + val pending = awaitingPayload + if (pending != null) { + val payloadWithChecksumBytes = pending.length - HEADER_BYTES + if (receive.size < payloadWithChecksumBytes) return false + val payloadWithChecksum = receive.take(payloadWithChecksumBytes) + awaitingPayload = null + if (checksumValid(payloadWithChecksum)) { + processFrame( + pending, + payloadWithChecksum.copyOf(payloadWithChecksum.size - CHECKSUM_BYTES), + nowMillis, + ) + } + return true + } + + var discarded = false + while (receive.size >= 2 && (receive[0] != LINK_START_HIGH || receive[1] != LINK_START_LOW)) { + receive.discard(1) + discarded = true + } + if (receive.size < HEADER_BYTES) return discarded + val rawHeader = receive.take(HEADER_BYTES) + val header = parseHeader(rawHeader) + if (header == null || header.length < HEADER_BYTES) return true + if (header.length > MAX_WIRE_FRAME_BYTES) { + die("iAP2 frame length ${header.length} exceeds $MAX_WIRE_FRAME_BYTES") + return false + } + if (header.length == HEADER_BYTES) { + processFrame(header, null, nowMillis) + } else { + awaitingPayload = header + } + return true + } + + private fun enterNegotiating(nowMillis: Long) { + state = State.NEGOTIATING + markerDeadlineMillis = null + sendSynchronization() + if (state != State.DEAD) { + synchronizationDeadlineMillis = nowMillis + SYNCHRONIZATION_RESEND_MILLIS + } + } + + private fun processFrame(header: Header, payload: ByteArray?, nowMillis: Long) { + if ((header.control and CONTROL_RESET) != 0) { + die("peer sent iAP2 reset") + return + } + if ((header.control and CONTROL_SYNCHRONIZE) != 0) { + SynchronizationPayload.decode(payload ?: ByteArray(0))?.let { + handleSynchronization(it, header.sequence) + } + } + if ((header.control and CONTROL_ACKNOWLEDGEMENT) != 0) { + accumulatedAcknowledgements += 1 + handleAcknowledgement(header.acknowledgement, nowMillis) + } + if ((header.control and CONTROL_EXTENDED_ACKNOWLEDGEMENT) != 0 && payload != null) { + handleExtendedAcknowledgement(payload) + } + if ((header.control and CONTROL_ACKNOWLEDGEMENT.inv()) == 0 && payload != null) { + handleData(Packet(header.sequence, header.sessionId, payload), nowMillis) + } + if (peerSynchronization.maxAcknowledgements > 0 && + accumulatedAcknowledgements >= peerSynchronization.maxAcknowledgements + ) { + accumulatedAcknowledgements = 0 + lastAcknowledgedReceived = lastReceivedInOrder + sendAcknowledgement() + } + } + + private fun handleSynchronization(sync: SynchronizationPayload, sequence: Int) { + if (state != State.NEGOTIATING) return + peerSynchronization = sync + peerSynchronizationReceived = true + lastReceivedInOrder = sequence + lastAcknowledgedReceived = sequence + sendAcknowledgement() + } + + private fun handleAcknowledgement(acknowledgement: Int, nowMillis: Long) { + if (state == State.NEGOTIATING) { + if (!peerSynchronizationReceived || !peerLimitsAreUsable() || queued.any { !peerPayloadIsAcceptable(it.payload) }) { + die("peer iAP2 maxLength cannot carry pending control packets") + return + } + state = State.NORMAL + synchronizationDeadlineMillis = null + setWritable(true) + } + lastSentAcknowledged = acknowledgement + + var rearmed = false + while (unacknowledged.isNotEmpty()) { + val first = unacknowledged.first() + val distance = sequenceDistance(first.sequence, lastSentAcknowledged) + if (distance > 0 && distance <= peerSynchronization.maxAcknowledgements + ACK_SLACK) { + receiveAcknowledgementDeadlineMillis = first.deadlineMillis + rearmed = true + break + } + unacknowledged.removeAt(0) + } + if (!rearmed) receiveAcknowledgementDeadlineMillis = null + + while (sequenceDistance(sentSequence, lastSentAcknowledged) < peerSynchronization.maxOutgoing) { + val packet = queued.pollFirst() ?: break + sendPacket(packet, nowMillis) + setWritable(true) + } + } + + private fun handleExtendedAcknowledgement(missing: ByteArray) { + if (state != State.NORMAL) return + for (packet in unacknowledged) { + if (!missing.any { u8(it) == packet.sequence }) continue + packet.retransmissions += 1 + if (packet.retransmissions == peerSynchronization.maxRetransmissions) { + die("iAP2 packet ${packet.sequence} was not acknowledged") + return + } + sendData(packet.sequence, packet.sessionId, packet.payload) + sendAcknowledgementDeadlineMillis = null + receiveAcknowledgementDeadlineMillis = packet.deadlineMillis + } + } + + private fun handleData(packet: Packet, nowMillis: Long) { + val distance = sequenceDistance(packet.sequence, lastReceivedInOrder) + if (distance == 0 || distance > peerSynchronization.maxOutgoing + ACK_SLACK) { + sendAcknowledgement() + return + } + if (outOfOrder.any { it.sequence == packet.sequence }) return + if (outOfOrder.size >= config.maximumOutOfOrderPackets) { + die("iAP2 out-of-order packet limit exceeded") + return + } + outOfOrder += packet + if (distance > 1) { + if (distance >= peerSynchronization.maxOutgoing) { + val missing = ArrayList() + var sequence = lastReceivedInOrder + while (sequenceDistance(packet.sequence, sequence) > 1) { + sequence = nextSequence(sequence) + missing += sequence + } + sendAcknowledgementDeadlineMillis = null + sendExtendedAcknowledgement(missing) + } + return + } + + outOfOrder.sortBy { sequenceDistance(it.sequence, lastReceivedInOrder) } + while (outOfOrder.isNotEmpty() && sequenceDistance(outOfOrder.first().sequence, lastReceivedInOrder) == 1) { + val inOrder = outOfOrder.removeAt(0) + lastReceivedInOrder = inOrder.sequence + if (inOrder.sessionId == CONTROL_SESSION_ID) enqueueEvent(Event.Control(inOrder.payload)) + } + + if (peerSynchronization.maxAcknowledgements == 0) return + val windowBeforeForcedAck = (peerSynchronization.maxOutgoing - config.maxOutgoingDelta).coerceAtLeast(1) + if (sequenceDistance(lastReceivedInOrder, lastAcknowledgedReceived) >= windowBeforeForcedAck) { + sendAcknowledgementDeadlineMillis = null + lastAcknowledgedReceived = lastReceivedInOrder + sendAcknowledgement() + } else { + sendAcknowledgementDeadlineMillis = nowMillis + peerSynchronization.acknowledgementTimeoutMillis + } + } + + private fun sendPacket(packet: Packet, nowMillis: Long) { + if (state != State.NORMAL || + sequenceDistance(sentSequence, lastSentAcknowledged) > peerSynchronization.maxOutgoing + ) { + if (queued.size >= config.maximumQueuedPackets) { + die("iAP2 outbound queue limit exceeded") + } else { + queued += packet + setWritable(false) + } + return + } + sentSequence = nextSequence(sentSequence) + packet.sequence = sentSequence + packet.retransmissions = 0 + packet.deadlineMillis = nowMillis + peerSynchronization.retransmissionTimeoutMillis + sendAcknowledgementDeadlineMillis = null + sendData(packet.sequence, packet.sessionId, packet.payload) + lastAcknowledgedReceived = lastReceivedInOrder + if (peerSynchronization.maxRetransmissions > 0) { + unacknowledged += packet + receiveAcknowledgementDeadlineMillis = packet.deadlineMillis + } else { + lastSentAcknowledged = sentSequence + } + } + + private fun retransmitDuePacket(nowMillis: Long) { + if (state != State.NORMAL || unacknowledged.isEmpty()) return + val next = unacknowledged.minByOrNull { it.deadlineMillis } ?: return + val secondDeadline = unacknowledged.filter { it !== next }.minOfOrNull { it.deadlineMillis } + next.deadlineMillis = nowMillis + peerSynchronization.retransmissionTimeoutMillis + next.retransmissions += 1 + if (next.retransmissions == peerSynchronization.maxRetransmissions) { + die("iAP2 packet ${next.sequence} was not acknowledged") + return + } + sendData(next.sequence, next.sessionId, next.payload) + receiveAcknowledgementDeadlineMillis = secondDeadline ?: next.deadlineMillis + } + + private fun sendSynchronization() { + writePacket(localSynchronization().encode(), sentSequence, CONTROL_SYNCHRONIZE, 0) + } + + private fun sendAcknowledgement() { + writePacket(null, sentSequence, CONTROL_ACKNOWLEDGEMENT, 0) + } + + private fun sendExtendedAcknowledgement(missing: List) { + writePacket(missing.map { it.toByte() }.toByteArray(), sentSequence, CONTROL_EXTENDED_ACKNOWLEDGEMENT, 0) + } + + private fun sendData(sequence: Int, sessionId: Int, payload: ByteArray) { + writePacket(payload, sequence, CONTROL_ACKNOWLEDGEMENT, sessionId) + } + + private fun writePacket(payload: ByteArray?, sequence: Int, control: Int, sessionId: Int) { + if (state == State.DEAD) return + accumulatedAcknowledgements = 0 + val length = payload?.size?.plus(HEADER_BYTES + CHECKSUM_BYTES) ?: HEADER_BYTES + val header = ByteArray(HEADER_BYTES) + header[0] = LINK_START_HIGH + header[1] = LINK_START_LOW + header[2] = (length ushr 8).toByte() + header[3] = length.toByte() + header[4] = control.toByte() + header[5] = sequence.toByte() + header[6] = lastReceivedInOrder.toByte() + header[7] = sessionId.toByte() + header[8] = checksum(header, HEADER_BYTES - CHECKSUM_BYTES).toByte() + val frame = ByteArrayOutputStream(length) + frame.write(header) + if (payload != null) { + frame.write(payload) + frame.write(checksum(payload, payload.size)) + } + appendOutput(frame.toByteArray()) + } + + private fun setWritable(value: Boolean) { + if (writable == value) return + writable = value + enqueueEvent(Event.Writable(value)) + } + + private fun die(reason: String?) { + if (state == State.DEAD) return + markerDeadlineMillis = null + synchronizationDeadlineMillis = null + sendAcknowledgementDeadlineMillis = null + receiveAcknowledgementDeadlineMillis = null + state = State.DEAD + writable = false + output.reset() + events.clear() + events += Event.Dead(reason) + } + + private fun appendOutput(bytes: ByteArray): Boolean { + if (state == State.DEAD) return false + if (bytes.size > config.maximumPendingOutputBytes - output.size()) { + die("iAP2 pending output limit exceeded") + return false + } + output.write(bytes) + return true + } + + private fun enqueueEvent(event: Event) { + if (state == State.DEAD) return + if (events.size >= config.maximumPendingEvents) { + die("iAP2 pending event limit exceeded") + return + } + events += event + } + + // A usable session-10 link must carry at least one control byte in addition to its frame + // header and payload checksum. This also gives higher layers a positive chunk limit. + private fun peerLimitsAreUsable(): Boolean = peerSynchronization.maxLength > HEADER_BYTES + CHECKSUM_BYTES + + private fun peerPayloadIsAcceptable(payload: ByteArray): Boolean = + peerLimitsAreUsable() && payload.size <= peerSynchronization.maxLength - HEADER_BYTES - CHECKSUM_BYTES + + private fun localSynchronization() = SynchronizationPayload( + maxOutgoing = config.maxOutgoing, + maxLength = MAX_WIRE_FRAME_BYTES, + retransmissionTimeoutMillis = if (config.zeroAcknowledgements) 0 else DEFAULT_RETRANSMISSION_TIMEOUT_MILLIS, + acknowledgementTimeoutMillis = if (config.zeroAcknowledgements) 0 else config.acknowledgementTimeoutMillis, + maxRetransmissions = if (config.zeroAcknowledgements) 0 else DEFAULT_MAX_RETRANSMISSIONS, + maxAcknowledgements = if (config.zeroAcknowledgements) 0 else DEFAULT_MAX_ACKNOWLEDGEMENTS, + sessions = listOf( + SessionDescriptor(CONTROL_SESSION_ID, 0, config.controlSessionVersion), + SessionDescriptor(EA_SESSION_ID, 2, 1), + SessionDescriptor(FILE_TRANSFER_SESSION_ID, 1, 2), + ), + ) + + private class ReceiveBuffer { + private val bytes = ByteArray(MAX_WIRE_FRAME_BYTES) + private var head = 0 + private var tail = 0 + + val size: Int get() = tail - head + + fun remainingCapacity(): Int { + compact() + return bytes.size - tail + } + + operator fun get(index: Int): Byte = bytes[head + index] + + fun append(source: ByteArray, offset: Int, count: Int) { + require(count <= remainingCapacity()) + source.copyInto(bytes, tail, offset, offset + count) + tail += count + } + + fun discard(count: Int) { + require(count in 0..size) + head += count + if (head == tail) { + head = 0 + tail = 0 + } + } + + fun take(count: Int): ByteArray { + require(count in 0..size) + return bytes.copyOfRange(head, head + count).also { discard(count) } + } + + fun matches(expected: ByteArray): Boolean = expected.indices.all { bytes[head + it] == expected[it] } + + private fun compact() { + if (head == 0) return + if (head < tail) bytes.copyInto(bytes, 0, head, tail) + tail -= head + head = 0 + } + } + + companion object { + const val CONTROL_SESSION_ID = 10 + const val EA_SESSION_ID = 11 + const val FILE_TRANSFER_SESSION_ID = 12 + + val IAP2_MARKER = byteArrayOf(0xff.toByte(), 0x55, 0x02, 0x00, 0xee.toByte(), 0x10) + + private const val HEADER_BYTES = 9 + private const val CHECKSUM_BYTES = 1 + const val MAX_WIRE_FRAME_BYTES = 0xffff + const val MAX_PAYLOAD_BYTES = MAX_WIRE_FRAME_BYTES - HEADER_BYTES - CHECKSUM_BYTES + private const val SESSION_DESCRIPTOR_BYTES = 3 + private const val SYNCHRONIZATION_FIXED_BYTES = 10 + private const val SYNCHRONIZATION_VERSION = 1 + private const val LINK_START_HIGH: Byte = 0xff.toByte() + private const val LINK_START_LOW: Byte = 0x5a + private const val CONTROL_SYNCHRONIZE = 0x80 + private const val CONTROL_ACKNOWLEDGEMENT = 0x40 + private const val CONTROL_EXTENDED_ACKNOWLEDGEMENT = 0x20 + private const val CONTROL_RESET = 0x10 + private const val INITIAL_SEQUENCE = 99 + private const val MARKER_RESEND_MILLIS = 1_000L + private const val SYNCHRONIZATION_RESEND_MILLIS = 500L + private const val DEFAULT_RETRANSMISSION_TIMEOUT_MILLIS = 4_000 + private const val DEFAULT_MAX_RETRANSMISSIONS = 4 + private const val DEFAULT_MAX_ACKNOWLEDGEMENTS = 3 + private const val ACK_SLACK = 10 + + private fun parseHeader(bytes: ByteArray): Header? { + if (bytes.size != HEADER_BYTES || !checksumValid(bytes)) return null + if (bytes[0] != LINK_START_HIGH || bytes[1] != LINK_START_LOW) return null + return Header( + length = readU16(bytes, 2), + control = u8(bytes[4]), + sequence = u8(bytes[5]), + acknowledgement = u8(bytes[6]), + sessionId = u8(bytes[7]), + ) + } + + private fun checksumValid(bytes: ByteArray): Boolean = bytes.fold(0) { sum, byte -> (sum + u8(byte)) and 0xff } == 0 + + private fun checksum(bytes: ByteArray, count: Int): Int = + (-bytes.take(count).sumOf { u8(it) }) and 0xff + + private fun sequenceDistance(sequence: Int, previous: Int?): Int = + if (previous == null) 0 else (sequence - previous) and 0xff + + private fun nextSequence(sequence: Int): Int = (sequence + 1) and 0xff + + private fun readU16(bytes: ByteArray, offset: Int): Int = (u8(bytes[offset]) shl 8) or u8(bytes[offset + 1]) + + private fun u8(byte: Byte): Int = byte.toInt() and 0xff + + private fun writeU16(out: ByteArrayOutputStream, value: Int) { + out.write(value ushr 8) + out.write(value) + } + } +} + +/** Configuration advertised by the local link endpoint. */ +data class Iap2LinkConfig( + val maxOutgoing: Int = 30, + val maxOutgoingDelta: Int = 0, + val acknowledgementTimeoutMillis: Int = 500, + val zeroAcknowledgements: Boolean = false, + val controlSessionVersion: Int = 1, + val maximumQueuedPackets: Int = 64, + val maximumOutOfOrderPackets: Int = 64, + val maximumPendingOutputBytes: Int = 1_048_576, + val maximumPendingEvents: Int = 256, +) { + init { + require(maxOutgoing in 0..0xff) + require(maxOutgoingDelta in 0..0xff) + require(acknowledgementTimeoutMillis in 0..0xffff) + require(controlSessionVersion in 0..0xff) + require(maximumQueuedPackets in 1..256) + require(maximumOutOfOrderPackets in 1..256) + require(maximumPendingOutputBytes >= 1) + require(maximumPendingEvents >= 1) + } +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/transport/Iap2LocationClient.kt b/shared/src/main/java/com/shilapi/xcertplay/transport/Iap2LocationClient.kt new file mode 100644 index 0000000..b3661c9 --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/transport/Iap2LocationClient.kt @@ -0,0 +1,143 @@ +package com.shilapi.xcertplay.transport + +import com.shilapi.xcertplay.iap2.message.Iap2ControlMessages +import com.shilapi.xcertplay.iap2.wire.Iap2Frame +import java.util.Locale +import kotlin.math.abs +import kotlin.math.max +import kotlin.math.min + +/** One Android location sample converted into the fields carried by the NMEA pair. */ +data class CarPlayLocationFix( + val latitudeDegrees: Double, + val longitudeDegrees: Double, + val altitudeMeters: Double? = null, + val bearingDegrees: Double? = null, + val speedMetersPerSecond: Double? = null, + val accuracyMeters: Double? = null, + val timestampMillis: Long? = null, +) { + init { + require(latitudeDegrees.isFinite() && latitudeDegrees in -90.0..90.0) { + "latitudeDegrees must be between -90 and 90" + } + require(longitudeDegrees.isFinite() && longitudeDegrees in -180.0..180.0) { + "longitudeDegrees must be between -180 and 180" + } + } +} + +/** Supplies location data only while the phone has subscribed to iAP2 LocationInformation. */ +interface Iap2LocationProvider : AutoCloseable { + /** Starts location updates and returns whether at least one source was subscribed. */ + fun start(): Boolean + + fun stop() + + fun latestNmea(): String? + + override fun close() { + stop() + } +} + +/** LIVI-compatible $GPGGA + $GPRMC encoding used by iAP2 0xFFFB. */ +object NmeaLocationEncoder { + fun encode(fix: CarPlayLocationFix): String { + val timestamp = fix.timestampMillis + ?.takeIf { it > 0 } + ?.let(::ofEpochMilli) + ?: ofEpochMilli(System.currentTimeMillis()) + val time = format("%02d%02d%02d.00", timestamp.hour, timestamp.minute, timestamp.second) + val date = format( + "%02d%02d%02d", + timestamp.day, + timestamp.month, + timestamp.year % 100, + ) + + val latitude = degreesToNmea(fix.latitudeDegrees, latitude = true) + val longitude = degreesToNmea(fix.longitudeDegrees, latitude = false) + val hdop = fix.accuracyMeters + ?.takeIf { it.isFinite() && it > 0 } + ?.let { min(50.0, max(0.5, it / 5.0)) } + ?: 1.0 + val altitude = fix.altitudeMeters + ?.takeIf { it.isFinite() } + ?.let { format("%.1f", it) } + ?: "0.0" + + val ggaBody = "GPGGA,$time,${latitude.value},${latitude.hemisphere}," + + "${longitude.value},${longitude.hemisphere},1,08,${format("%.1f", hdop)}," + + "$altitude,M,0.0,M,," + val speedKnots = fix.speedMetersPerSecond + ?.takeIf { it.isFinite() && it >= 0 } + ?.let { format("%.2f", it * KNOTS_PER_METER_PER_SECOND) } + ?: "0.00" + val course = fix.bearingDegrees + ?.takeIf { it.isFinite() } + ?.let { format("%.2f", it) } + ?: "0.00" + val rmcBody = "GPRMC,$time,A,${latitude.value},${latitude.hemisphere}," + + "${longitude.value},${longitude.hemisphere},$speedKnots,$course,$date,," + + return "$${ggaBody}*${checksum(ggaBody)}\r\n$${rmcBody}*${checksum(rmcBody)}\r\n" + } + + private fun degreesToNmea(value: Double, latitude: Boolean): NmeaCoordinate { + val absolute = abs(value) + var degrees = absolute.toInt() + var minutes = (absolute - degrees) * MINUTES_PER_DEGREE + if (minutes >= MINUTES_PER_DEGREE - MINUTE_ROUNDING_TOLERANCE) { + degrees += 1 + minutes = 0.0 + } + val degreeText = if (latitude) format("%02d", degrees) else format("%03d", degrees) + val hemisphere = if (latitude) { + if (value >= 0) "N" else "S" + } else { + if (value >= 0) "E" else "W" + } + return NmeaCoordinate("$degreeText${format("%07.4f", minutes)}", hemisphere) + } + + private fun checksum(body: String): String { + var value = 0 + for (character in body) value = value xor character.code + return format("%02X", value) + } + + private fun ofEpochMilli(millis: Long): Timestamp = Timestamp(millis) + + private fun format(format: String, vararg arguments: Any): String = + String.format(Locale.US, format, *arguments) + + private data class NmeaCoordinate(val value: String, val hemisphere: String) + + private class Timestamp(millis: Long) { + private val fields = java.time.Instant.ofEpochMilli(millis) + .atZone(java.time.ZoneOffset.UTC) + + val hour: Int = fields.hour + val minute: Int = fields.minute + val second: Int = fields.second + val day: Int = fields.dayOfMonth + val month: Int = fields.monthValue + val year: Int = fields.year + } + + private const val KNOTS_PER_METER_PER_SECOND = 1.94384449 + private const val MINUTES_PER_DEGREE = 60.0 + private const val MINUTE_ROUNDING_TOLERANCE = 0.00005 +} + +object Iap2LocationMessages { + const val START_LOCATION_INFORMATION = 0xfffa + const val LOCATION_INFORMATION = 0xfffb + const val STOP_LOCATION_INFORMATION = 0xfffc + + fun locationInformation(nmeaSentence: String): Iap2Frame { + require(nmeaSentence.isNotEmpty()) { "NMEA sentence must not be empty" } + return Iap2ControlMessages.locationInformation(nmeaSentence) + } +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/transport/Iap2UsbMuxHost.kt b/shared/src/main/java/com/shilapi/xcertplay/transport/Iap2UsbMuxHost.kt new file mode 100644 index 0000000..f1402c4 --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/transport/Iap2UsbMuxHost.kt @@ -0,0 +1,558 @@ +package com.shilapi.xcertplay.transport + +import android.util.Log +import java.io.Closeable +import java.util.ArrayDeque + +/** + * USBMUX version-2 host over an already claimed iPhone bulk pipe. + * + * This is deliberately limited to USBMUX framing and one minimal outbound TCP connection. It + * does not parse lockdown messages, iAP2, TLS, NCM, AirPlay, or any media protocol. All calls + * may block and must run away from Android's main thread. + */ +class Iap2UsbMuxHost private constructor( + private val pipe: Iap2UsbSession, + private val readTimeoutMillis: Long, +) : Closeable { + private val stateLock = Any() + private val writeLock = Any() + private val connections = mutableMapOf() + private var closed = false + private var failure: IphoneUsbException? = null + private var nextMuxSequence = 0 + private var nextMuxAcknowledgement = 0 + private var nextSourcePort = FIRST_SOURCE_PORT + private lateinit var readerThread: Thread + private var receiveBuffer = ByteArray(0) + + private data class MuxFrame( + val protocol: Int, + val length: Int, + val word8: Int, + val payload: ByteArray, + ) + + /** Opens a TCP byte stream to the iPhone service on [destinationPort]. */ + fun connect( + destinationPort: Int = LOCKDOWN_PORT, + timeoutMillis: Long = CONNECT_TIMEOUT_MILLIS, + ): Iap2UsbMuxTcpConnection { + require(destinationPort in 1..0xffff) { "destinationPort must be a valid TCP port" } + require(timeoutMillis > 0) { "timeoutMillis must be positive" } + + val connection = synchronized(stateLock) { + checkOpenLocked() + val sourcePort = allocateSourcePortLocked() + Iap2UsbMuxTcpConnection(this, sourcePort, destinationPort).also { + connections[sourcePort] = it + } + } + try { + connection.beginConnect() + if (!connection.awaitConnected(timeoutMillis)) { + connection.abort() + throw IphoneUsbException.TimedOut("USBMUX TCP connection to port $destinationPort timed out") + } + return connection + } catch (error: IphoneUsbException) { + removeConnection(connection) + throw error + } + } + + override fun close() { + val activeConnections = synchronized(stateLock) { + if (closed) return + closed = true + connections.values.toList().also { connections.clear() } + } + activeConnections.forEach(Iap2UsbMuxTcpConnection::closeFromHost) + pipe.close() + if (::readerThread.isInitialized && Thread.currentThread() !== readerThread) { + try { + readerThread.join(readTimeoutMillis + CLOSE_JOIN_MARGIN_MILLIS) + } catch (_: InterruptedException) { + Thread.currentThread().interrupt() + } + } + } + + internal fun sendTcp( + sourcePort: Int, + destinationPort: Int, + sequence: Int, + acknowledgement: Int, + flags: Int, + payload: ByteArray, + ) { + if (payload.size > 512) Log.i("xcertplay-usb", "usbmux TX source=$sourcePort destination=$destinationPort bytes=${payload.size} seq=$sequence ack=$acknowledgement") + val tcp = ByteArray(TCP_HEADER_BYTES + payload.size) + putU16(tcp, 0, sourcePort) + putU16(tcp, 2, destinationPort) + putU32(tcp, 4, sequence) + putU32(tcp, 8, acknowledgement) + tcp[12] = (TCP_HEADER_BYTES / 4 shl 4).toByte() + tcp[13] = flags.toByte() + putU16(tcp, 14, TCP_WINDOW_FIELD) + payload.copyInto(tcp, TCP_HEADER_BYTES) + sendFrame(PROTOCOL_TCP, tcp) + } + + internal fun removeConnection(connection: Iap2UsbMuxTcpConnection) { + synchronized(stateLock) { + if (connections[connection.sourcePort] === connection) { + connections.remove(connection.sourcePort) + } + } + } + + private fun begin() { + val version = ByteArray(VERSION_MESSAGE_BYTES) + putU32(version, 0, PROTOCOL_VERSION) + putU32(version, 4, VERSION_MESSAGE_BYTES) + putU32(version, 8, USBMUX_VERSION) + pipe.write(version, HANDSHAKE_TIMEOUT_MILLIS.toInt()) + // The phone replies with the same proto=0, length=20, version=2 packet. Protocol 1 is not + // a distinct "version reply" here; waiting for it discards the valid reply and times out. + val deadline = System.nanoTime() + HANDSHAKE_TIMEOUT_MILLIS * NANOS_PER_MILLISECOND + var staleFrames = 0 + var reply: MuxFrame + while (true) { + val remainingNanos = deadline - System.nanoTime() + if (remainingNanos <= 0) { + throw IphoneUsbException.TimedOut("Timed out waiting for the USBMUX version reply") + } + val remainingMillis = (remainingNanos + NANOS_PER_MILLISECOND - 1) / NANOS_PER_MILLISECOND + reply = takeFrame(remainingMillis) + ?: throw IphoneUsbException.TimedOut("Timed out waiting for the USBMUX version reply") + if ( + reply.protocol == PROTOCOL_VERSION && + reply.length == VERSION_MESSAGE_BYTES && + reply.word8 == USBMUX_VERSION + ) { + break + } + // Android can leave already-received TCP payloads queued in the bulk endpoint when + // an app process is replaced. They belong to the previous host instance and must not + // be mistaken for the version reply sent in response to the new handshake. + if (reply.protocol != PROTOCOL_TCP || ++staleFrames > MAX_STALE_HANDSHAKE_FRAMES) { + throw IphoneUsbException.Protocol( + "Invalid USBMUX version reply: proto=${reply.protocol} " + + "length=${reply.length} version=${reply.word8}", + ) + } + Log.i("xcertplay-usb", "discarding stale usbmux TCP frame before version reply") + } + Log.i("xcertplay-usb", "usbmux version accepted: ${reply.word8}") + sendFrame(PROTOCOL_SETUP, byteArrayOf(SETUP_VALUE.toByte())) + readerThread = Thread(::readerLoop, "iap2-usbmux-reader").apply { + isDaemon = true + start() + } + } + + /** Reads one complete USBMUX frame, keeping partial data buffered across reads. */ + private fun takeFrame(timeoutMillis: Long): MuxFrame? { + val deadline = System.nanoTime() + timeoutMillis * NANOS_PER_MILLISECOND + while (true) { + synchronized(stateLock) { + if (closed) throw IphoneUsbException.DeviceUnavailable("USBMUX host is closed") + if (receiveBuffer.size >= MUX_HEADER_BYTES) { + val length = readU32(receiveBuffer, 4) + if (length < MUX_HEADER_BYTES || length > MAX_FRAME_BYTES) { + throw IphoneUsbException.Protocol("Invalid USBMUX frame length $length") + } + if (receiveBuffer.size >= length) { + // LIVI only trusts the length field on receive: iPhone replies do not + // carry the 0xFEEDFACE word in the header's fourth field. + Log.i( + "xcertplay-usb", + "usbmux rx proto=${readU32(receiveBuffer, 0)} length=$length word8=0x" + + readU32(receiveBuffer, 8).toUInt().toString(16), + ) + val protocol = readU32(receiveBuffer, 0) + val word8 = readU32(receiveBuffer, 8) + nextMuxAcknowledgement = readU16(receiveBuffer, 12) + val payload = receiveBuffer.copyOfRange(MUX_HEADER_BYTES, length) + receiveBuffer = receiveBuffer.copyOfRange(length, receiveBuffer.size) + return MuxFrame(protocol, length, word8, payload) + } + } + } + val remainingNanos = deadline - System.nanoTime() + if (remainingNanos <= 0) return null + val remainingMillis = (remainingNanos + NANOS_PER_MILLISECOND - 1) / NANOS_PER_MILLISECOND + val bytes = pipe.read(remainingMillis) ?: continue + synchronized(stateLock) { + receiveBuffer += bytes + } + } + } + + private fun sendFrame(protocol: Int, payload: ByteArray) = synchronized(writeLock) { + val sequenceAndAcknowledgement = synchronized(stateLock) { + checkOpenLocked() + nextMuxSequence to nextMuxAcknowledgement + } + val frame = ByteArray(MUX_HEADER_BYTES + payload.size) + putU32(frame, 0, protocol) + putU32(frame, 4, frame.size) + putU32(frame, 8, MUX_MAGIC) + putU16(frame, 12, sequenceAndAcknowledgement.first) + putU16(frame, 14, sequenceAndAcknowledgement.second) + payload.copyInto(frame, MUX_HEADER_BYTES) + try { + pipe.write(frame, WRITE_TIMEOUT_MILLIS) + } catch (error: IphoneUsbException) { + fail(error) + throw error + } + synchronized(stateLock) { + nextMuxSequence = (nextMuxSequence + 1) and 0xffff + } + } + + private fun readerLoop() { + try { + while (true) { + synchronized(stateLock) { + if (closed) return + } + val frame = takeFrame(readTimeoutMillis) ?: continue + if (frame.protocol == PROTOCOL_TCP) dispatchTcp(frame.payload) + } + } catch (error: IphoneUsbException) { + fail(error) + } catch (error: RuntimeException) { + fail(IphoneUsbException.DeviceUnavailable("USBMUX reader failed", error)) + } + } + + private fun dispatchTcp(frame: ByteArray) { + val offset = 0 + val length = frame.size + if (length < TCP_HEADER_BYTES) { + throw IphoneUsbException.Protocol("USBMUX TCP frame is shorter than its header") + } + val tcpHeaderBytes = ((frame[offset + 12].toInt() ushr 4) and 0x0f) * 4 + if (tcpHeaderBytes < TCP_HEADER_BYTES || tcpHeaderBytes > length) { + throw IphoneUsbException.Protocol("Invalid USBMUX TCP header length") + } + val destinationPort = readU16(frame, offset + 2) + if (length == tcpHeaderBytes) Log.i("xcertplay-usb", "usbmux TCP control destination=$destinationPort flags=${frame[13].toInt() and 0xff} ack=${readU32(frame, 8)} window=${readU16(frame, 14)}") + val connection = synchronized(stateLock) { connections[destinationPort] } ?: return + connection.onPacket( + flags = frame[offset + 13].toInt() and 0xff, + sequence = readU32(frame, offset + 4), + payload = frame.copyOfRange(offset + tcpHeaderBytes, offset + length), + ) + } + + private fun fail(error: IphoneUsbException) { + val activeConnections = synchronized(stateLock) { + if (closed) return + failure = failure ?: error + closed = true + connections.values.toList().also { connections.clear() } + } + activeConnections.forEach { it.closeFromHost(error) } + pipe.close() + } + + private fun allocateSourcePortLocked(): Int { + repeat(0xffff) { + val candidate = nextSourcePort + nextSourcePort = if (candidate == 0xffff) FIRST_SOURCE_PORT else candidate + 1 + if (candidate !in connections) return candidate + } + throw IphoneUsbException.DeviceUnavailable("USBMUX has no free TCP source ports") + } + + private fun checkOpenLocked() { + failure?.let { throw it } + if (closed) throw IphoneUsbException.DeviceUnavailable("USBMUX host is closed") + } + + companion object { + const val LOCKDOWN_PORT = 62078 + + private const val PROTOCOL_VERSION = 0 + private const val PROTOCOL_SETUP = 2 + private const val PROTOCOL_TCP = 6 + private const val USBMUX_VERSION = 2 + private const val SETUP_VALUE = 0x07 + private const val MUX_MAGIC = 0xfeedface.toInt() + private const val VERSION_MESSAGE_BYTES = 20 + private const val NANOS_PER_MILLISECOND = 1_000_000L + private const val MUX_HEADER_BYTES = 16 + private const val TCP_HEADER_BYTES = 20 + private const val TCP_WINDOW_FIELD = 512 + private const val MAX_FRAME_BYTES = 65_536 + private const val FIRST_SOURCE_PORT = 1 + private const val HANDSHAKE_TIMEOUT_MILLIS = 60_000L + private const val MAX_STALE_HANDSHAKE_FRAMES = 32 + private const val CONNECT_TIMEOUT_MILLIS = 5_000L + private const val WRITE_TIMEOUT_MILLIS = 2_000 + private const val CLOSE_JOIN_MARGIN_MILLIS = 100L + + /** Performs the USBMUX v2 handshake and starts the framed reader. */ + fun open( + pipe: Iap2UsbSession, + readTimeoutMillis: Long = 1_000, + ): Iap2UsbMuxHost { + require(readTimeoutMillis > 0) { "readTimeoutMillis must be positive" } + return Iap2UsbMuxHost(pipe, readTimeoutMillis).also { + try { + it.begin() + } catch (error: Throwable) { + it.close() + throw error + } + } + } + + private fun putU16(target: ByteArray, offset: Int, value: Int) { + target[offset] = (value ushr 8).toByte() + target[offset + 1] = value.toByte() + } + + private fun putU32(target: ByteArray, offset: Int, value: Int) { + target[offset] = (value ushr 24).toByte() + target[offset + 1] = (value ushr 16).toByte() + target[offset + 2] = (value ushr 8).toByte() + target[offset + 3] = value.toByte() + } + + private fun readU16(source: ByteArray, offset: Int): Int = + ((source[offset].toInt() and 0xff) shl 8) or (source[offset + 1].toInt() and 0xff) + + private fun readU32(source: ByteArray, offset: Int): Int = + ((source[offset].toInt() and 0xff) shl 24) or + ((source[offset + 1].toInt() and 0xff) shl 16) or + ((source[offset + 2].toInt() and 0xff) shl 8) or + (source[offset + 3].toInt() and 0xff) + } +} + +/** A blocking TCP byte stream carried by [Iap2UsbMuxHost]. */ +class Iap2UsbMuxTcpConnection internal constructor( + private val host: Iap2UsbMuxHost, + internal val sourcePort: Int, + private val destinationPort: Int, +) : BlockingDuplexByteStream { + private val stateLock = Object() + private val writeLock = Any() + private val received = ArrayDeque() + private var nextSequence = 0 + private var nextAcknowledgement = 0 + private var connected = false + private var closed = false + private var failure: IphoneUsbException? = null + + /** Sends [data] as an ordered byte stream, split into USBMUX TCP payloads of at most 16 KiB. */ + override fun send(data: ByteArray) { + synchronized(stateLock) { checkConnectedLocked() } + var offset = 0 + while (offset < data.size) { + val count = minOf(MAX_SEND_PAYLOAD_BYTES, data.size - offset) + val chunk = data.copyOfRange(offset, offset + count) + synchronized(writeLock) { + val sequenceAndAck = synchronized(stateLock) { + checkConnectedLocked() + nextSequence to nextAcknowledgement + } + host.sendTcp( + sourcePort, + destinationPort, + sequenceAndAck.first, + sequenceAndAck.second, + TCP_ACK, + chunk, + ) + synchronized(stateLock) { nextSequence += count } + } + offset += count + } + } + + /** + * Receives up to [maxBytes] from the byte stream. Returns null on timeout and an empty array + * after FIN or local close; a peer RST is reported as a transport failure. + */ + override fun recv(maxBytes: Int, timeoutMillis: Long): ByteArray? { + require(maxBytes > 0) { "maxBytes must be positive" } + require(timeoutMillis > 0) { "timeoutMillis must be positive" } + val deadline = System.nanoTime() + timeoutMillis * NANOS_PER_MILLISECOND + synchronized(stateLock) { + while (received.isEmpty() && !closed) { + val remainingNanos = deadline - System.nanoTime() + if (remainingNanos <= 0) return null + try { + stateLock.wait(remainingNanos / NANOS_PER_MILLISECOND, (remainingNanos % NANOS_PER_MILLISECOND).toInt()) + } catch (_: InterruptedException) { + Thread.currentThread().interrupt() + throw IphoneUsbException.DeviceUnavailable("Interrupted while waiting for USBMUX TCP data") + } + } + failure?.let { throw it } + if (received.isEmpty()) { + return ByteArray(0) + } + val packet = received.removeFirst() + return if (packet.size <= maxBytes) { + packet + } else { + received.addFirst(packet.copyOfRange(maxBytes, packet.size)) + packet.copyOf(maxBytes) + } + } + } + + override fun close() { + val shouldSendFin = synchronized(stateLock) { + if (closed) return + closed = true + stateLock.notifyAll() + connected + } + if (shouldSendFin) { + try { + synchronized(writeLock) { + val sequenceAndAck = synchronized(stateLock) { nextSequence to nextAcknowledgement } + host.sendTcp( + sourcePort, + destinationPort, + sequenceAndAck.first, + sequenceAndAck.second, + TCP_FIN or TCP_ACK, + ByteArray(0), + ) + } + } catch (_: IphoneUsbException) { + // The host may have already closed its USB pipe; the closed state remains final. + } + } + host.removeConnection(this) + } + + internal fun beginConnect() { + sendControl(TCP_SYN) + } + + internal fun awaitConnected(timeoutMillis: Long): Boolean { + val deadline = System.nanoTime() + timeoutMillis * NANOS_PER_MILLISECOND + synchronized(stateLock) { + while (!connected && !closed) { + val remainingNanos = deadline - System.nanoTime() + if (remainingNanos <= 0) return false + try { + stateLock.wait(remainingNanos / NANOS_PER_MILLISECOND, (remainingNanos % NANOS_PER_MILLISECOND).toInt()) + } catch (_: InterruptedException) { + Thread.currentThread().interrupt() + throw IphoneUsbException.DeviceUnavailable("Interrupted while connecting USBMUX TCP") + } + } + failure?.let { throw it } + return connected && !closed + } + } + + internal fun abort() { + val shouldSendReset = synchronized(stateLock) { + if (closed) return + closed = true + stateLock.notifyAll() + true + } + if (shouldSendReset) { + try { + sendControl(TCP_RST or TCP_ACK) + } catch (_: IphoneUsbException) { + // A failed reset cannot make the local connection usable again. + } + } + host.removeConnection(this) + } + + internal fun closeFromHost(error: IphoneUsbException? = null) = synchronized(stateLock) { + if (closed) return@synchronized + failure = error ?: failure + closed = true + stateLock.notifyAll() + } + + internal fun onPacket(flags: Int, sequence: Int, payload: ByteArray) { + if ((flags and TCP_RST) != 0) { + synchronized(stateLock) { + failure = IphoneUsbException.DeviceUnavailable("USBMUX TCP connection was reset by the peer") + closed = true + stateLock.notifyAll() + } + host.removeConnection(this) + return + } + if ((flags and TCP_SYN) != 0 && (flags and TCP_ACK) != 0) { + synchronized(stateLock) { + if (closed) return + nextSequence += 1 + nextAcknowledgement = sequence + 1 + } + sendControl(TCP_ACK) + synchronized(stateLock) { + if (!closed) { + connected = true + stateLock.notifyAll() + } + } + return + } + if (payload.isNotEmpty()) { + synchronized(stateLock) { + if (closed) return + nextAcknowledgement += payload.size + received.addLast(payload) + stateLock.notifyAll() + } + sendControl(TCP_ACK) + } + if ((flags and TCP_FIN) != 0) { + synchronized(stateLock) { + if (closed) return + nextAcknowledgement += 1 + } + sendControl(TCP_ACK) + synchronized(stateLock) { + closed = true + stateLock.notifyAll() + } + host.removeConnection(this) + } + } + + private fun sendControl(flags: Int) = synchronized(writeLock) { + val sequenceAndAck = synchronized(stateLock) { nextSequence to nextAcknowledgement } + host.sendTcp( + sourcePort, + destinationPort, + sequenceAndAck.first, + sequenceAndAck.second, + flags, + ByteArray(0), + ) + } + + private fun checkConnectedLocked() { + failure?.let { throw it } + if (!connected || closed) throw IphoneUsbException.DeviceUnavailable("USBMUX TCP connection is not open") + } + + private companion object { + const val TCP_FIN = 0x01 + const val TCP_SYN = 0x02 + const val TCP_RST = 0x04 + const val TCP_ACK = 0x10 + const val MAX_SEND_PAYLOAD_BYTES = 16 * 1024 + const val NANOS_PER_MILLISECOND = 1_000_000L + } +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/transport/Iap2WiredControlClient.kt b/shared/src/main/java/com/shilapi/xcertplay/transport/Iap2WiredControlClient.kt new file mode 100644 index 0000000..41fef3e --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/transport/Iap2WiredControlClient.kt @@ -0,0 +1,265 @@ +package com.shilapi.xcertplay.transport + +import com.shilapi.xcertplay.iap2.message.Iap2CarPlayMessages +import com.shilapi.xcertplay.iap2.message.Iap2ControlMessages +import com.shilapi.xcertplay.iap2.session.Iap2Session +import com.shilapi.xcertplay.iap2.wire.Iap2Frame +import com.shilapi.xcertplay.mfi.Iap2MfiAuthenticationClient +import java.net.Inet6Address +import java.net.InetAddress +import kotlin.math.min + +/** + * The wired LIVI control sequence after a CSM channel is ready: + * Identification, MFi, power announcement, five update subscriptions, then CarPlay availability. + * + * The caller retains ownership of [session]. While [run] is active it is the only receiver and + * forwards each non-availability CSM frame to [onIncoming]; it neither opens NCM nor implements + * an AirPlay receiver. + */ +class Iap2WiredControlClient( + private val session: Iap2Session, + private val mfi: Iap2MfiAuthenticationClient, +) { + fun run( + identification: Iap2IdentificationConfig, + endpoint: Iap2WiredCarPlayEndpoint, + availableCurrentMilliAmps: Int, + timeoutMillis: Long = DEFAULT_TIMEOUT_MILLIS, + locationProvider: Iap2LocationProvider? = null, + onIncoming: (Iap2Frame) -> Unit = {}, + onProgress: (String) -> Unit = {}, + ): Iap2WiredControlResult { + require(availableCurrentMilliAmps in 0..0xffff) { + "availableCurrentMilliAmps must be in 0..65535" + } + require(timeoutMillis == NO_TIMEOUT_MILLIS || timeoutMillis in 1..MAX_TIMEOUT_MILLIS) { + "timeoutMillis must be in 1..$MAX_TIMEOUT_MILLIS or NO_TIMEOUT_MILLIS" + } + + val deadlineNanos = Iap2ControlDeadline(timeoutMillis) + Iap2IdentificationClient(session).identify(identification, requireRemaining(deadlineNanos)) + onProgress("iap2 identification accepted") + var stage = Iap2WiredControlStage.IDENTIFIED + mfi.run(session, requireRemaining(deadlineNanos), onProgress) + stage = Iap2WiredControlStage.AUTHENTICATED + onProgress("iap2 authentication accepted") + deadlineNanos.authenticated() + + send(powerSourceUpdate(availableCurrentMilliAmps), deadlineNanos) + for (subscription in subscriptions()) send(subscription, deadlineNanos) + stage = Iap2WiredControlStage.SUBSCRIBED + onProgress("iap2 power/subscriptions sent") + + var forwardedFrames = 0 + var carPlayStartSessions = 0 + var locationActive = false + var locationSentLogged = false + try { + while (true) { + val remaining = remainingMillis(deadlineNanos) + if (remaining == 0L) { + return Iap2WiredControlResult(Iap2WiredControlTerminal.TIMED_OUT, stage, forwardedFrames, carPlayStartSessions) + } + if (locationActive && sendLatestLocation(locationProvider, deadlineNanos) && !locationSentLogged) { + locationSentLogged = true + onProgress("iap2 tx=0xfffb location-information") + } + val pollTimeout = if (locationActive) { + min(remaining, LOCATION_POLL_INTERVAL_MILLIS) + } else { + remaining + } + val incoming = session.recv(pollTimeout) + if (incoming == null) { + if (session.isClosed) { + return Iap2WiredControlResult( + Iap2WiredControlTerminal.CHANNEL_CLOSED, + stage, + forwardedFrames, + carPlayStartSessions, + ) + } + if (remainingMillis(deadlineNanos) == 0L) { + return Iap2WiredControlResult( + Iap2WiredControlTerminal.TIMED_OUT, + stage, + forwardedFrames, + carPlayStartSessions, + ) + } + continue + } + + when (incoming.messageId) { + CARPLAY_AVAILABILITY -> { + onProgress("iap2 rx=0x4300 carplay-availability") + onProgress(carPlayAvailabilitySummary(incoming.payload)) + // LIVI sends its wired answer on every availability notification; do not gate it on + // the phone's advertised availability boolean. + send(carPlayStartSession(endpoint), deadlineNanos) + stage = Iap2WiredControlStage.CARPLAY_START_SENT + carPlayStartSessions++ + onProgress("iap2 tx=0x4301 carplay-start-session") + } + + Iap2LocationMessages.START_LOCATION_INFORMATION -> { + onProgress("iap2 rx=0xfffa start-location-information") + locationActive = startLocationUpdates(locationProvider, onProgress) + locationSentLogged = false + if (locationActive && sendLatestLocation(locationProvider, deadlineNanos)) { + locationSentLogged = true + onProgress("iap2 tx=0xfffb location-information") + } + } + + Iap2LocationMessages.STOP_LOCATION_INFORMATION -> { + onProgress("iap2 rx=0xfffc stop-location-information") + locationActive = false + locationSentLogged = false + locationProvider?.stop() + } + + else -> { + onProgress("iap2 rx=0x${incoming.messageId.toString(16).padStart(4, '0')}") + onIncoming(incoming) + forwardedFrames++ + } + } + } + } finally { + locationProvider?.stop() + } + } + + private fun send(frame: Iap2Frame, deadlineNanos: Iap2ControlDeadline) { + session.send(frame, requireRemaining(deadlineNanos)) + } + + private fun sendLatestLocation( + provider: Iap2LocationProvider?, + deadlineNanos: Iap2ControlDeadline, + ): Boolean { + val sentence = provider?.latestNmea() ?: return false + session.send( + Iap2LocationMessages.locationInformation(sentence), + requireRemaining(deadlineNanos), + ) + return true + } + + private fun startLocationUpdates( + provider: Iap2LocationProvider?, + onProgress: (String) -> Unit, + ): Boolean { + if (provider == null) return false + return try { + provider.start().also { started -> + if (!started) onProgress("iap2 location provider did not start") + } + } catch (error: Exception) { + onProgress("iap2 location provider start failed: ${error.message}") + false + } + } + + companion object { + const val NO_TIMEOUT_MILLIS = Long.MAX_VALUE + private const val CARPLAY_AVAILABILITY = 0x4300 + private const val CARPLAY_START_SESSION = 0x4301 + private const val LOCATION_POLL_INTERVAL_MILLIS = 1_000L + private const val DEFAULT_TIMEOUT_MILLIS = 60_000L + private const val MAX_TIMEOUT_MILLIS = 24 * 60 * 60 * 1_000L + private const val MAX_RECV_TIMEOUT_MILLIS = 5 * 60 * 1_000L + private const val NANOS_PER_MILLISECOND = 1_000_000L + + /** Exact LIVI wired PowerSourceUpdate encoding: current and the charge-if-powered flag. */ + fun powerSourceUpdate(availableCurrentMilliAmps: Int): Iap2Frame = + Iap2ControlMessages.powerSourceUpdate(availableCurrentMilliAmps, charging = true) + + /** Exact five subscription requests emitted by LIVI's wired bring-up. */ + fun subscriptions(): List = Iap2ControlMessages.subscriptions() + + /** Builds the wired-only CarPlayStartSession message; no NCM or AirPlay socket is opened. */ + fun carPlayStartSession(endpoint: Iap2WiredCarPlayEndpoint): Iap2Frame = + Iap2CarPlayMessages.startSession( + wiredIpv6Addresses = endpoint.ipv6Addresses, + airPlayPort = endpoint.airPlayPort, + deviceIdentifier = endpoint.deviceIdentifier, + publicKey = endpoint.publicKey, + sourceVersion = endpoint.sourceVersion, + ) + + fun carPlayAvailabilitySummary(payload: ByteArray): String { + return try { + val availability = Iap2CarPlayMessages.availability(payload).wired + val available = availability?.available + val transport = availability?.identifier + "iap2 4300 wiredAvailable=$available usbTransport=${transport ?: "none"}" + } catch (error: RuntimeException) { + "iap2 4300 decode failed: ${error.message}" + } + } + + private fun requireRemaining(deadlineNanos: Iap2ControlDeadline): Long = remainingMillis(deadlineNanos).also { + if (it == 0L) throw IphoneUsbException.TimedOut("Timed out during wired iAP2 control bring-up") + } + + private fun remainingMillis(deadlineNanos: Iap2ControlDeadline): Long = deadlineNanos.remainingMillis() + + } +} + +/** A configured wired AirPlay endpoint; configuration does not claim that either service is live. */ +class Iap2WiredCarPlayEndpoint( + ipv6Addresses: List, + val airPlayPort: Int, + val publicKey: String, + val sourceVersion: String, + val deviceIdentifier: String? = null, +) { + /** A stable copy so a caller cannot mutate a validated endpoint before it is encoded. */ + val ipv6Addresses: List = ipv6Addresses.toList() + + init { + require(ipv6Addresses.isNotEmpty()) { "At least one wired IPv6 address is required" } + require(ipv6Addresses.all(::isIpv6Literal)) { "Every wired address must be an IPv6 text literal" } + require(airPlayPort in 1..65535) { "airPlayPort must be in 1..65535" } + require(publicKey.isNotEmpty()) { "publicKey is required and must not be empty" } + require(sourceVersion.isNotEmpty()) { "sourceVersion is required and must not be empty" } + require('\u0000' !in publicKey) { "publicKey must not contain U+0000" } + require('\u0000' !in sourceVersion) { "sourceVersion must not contain U+0000" } + deviceIdentifier?.let { + require(it.isNotEmpty()) { "deviceIdentifier is optional, but must not be empty when provided" } + require('\u0000' !in it) { "deviceIdentifier must not contain U+0000" } + } + } + + private companion object { + fun isIpv6Literal(value: String): Boolean { + if (value.contains('%') || '\u0000' in value || !value.contains(':')) return false + return try { + InetAddress.getByName(value) is Inet6Address + } catch (_: Exception) { + false + } + } + } +} + +enum class Iap2WiredControlStage { + IDENTIFIED, + AUTHENTICATED, + SUBSCRIBED, + CARPLAY_START_SENT, +} + +enum class Iap2WiredControlTerminal { CHANNEL_CLOSED, TIMED_OUT } + +/** End state of the control loop only; it is not evidence of NCM or AirPlay availability. */ +data class Iap2WiredControlResult( + val terminal: Iap2WiredControlTerminal, + val stage: Iap2WiredControlStage, + val forwardedFrames: Int, + val carPlayStartSessionsSent: Int, +) diff --git a/shared/src/main/java/com/shilapi/xcertplay/transport/Iap2WirelessControlClient.kt b/shared/src/main/java/com/shilapi/xcertplay/transport/Iap2WirelessControlClient.kt new file mode 100644 index 0000000..7bcaeb6 --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/transport/Iap2WirelessControlClient.kt @@ -0,0 +1,395 @@ +package com.shilapi.xcertplay.transport + +import com.shilapi.xcertplay.iap2.message.Iap2CarPlayMessages +import com.shilapi.xcertplay.iap2.message.Iap2WirelessMessages +import com.shilapi.xcertplay.iap2.message.Iap2WirelessSessionParameters +import com.shilapi.xcertplay.iap2.session.Iap2Session +import com.shilapi.xcertplay.iap2.wire.Iap2Frame +import com.shilapi.xcertplay.mfi.Iap2MfiAuthenticationClient +import kotlin.math.min + +/** + * The wireless LIVI control sequence after a CSM channel is ready: + * Identification, MFi, the five update subscriptions, then Wi-Fi credentials and the + * 0x4E0D/0x4E0E Wireless CarPlay transport notifications. + * + * The caller retains ownership of [session]. While [run] is active it is the only receiver and + * forwards each non-control CSM frame to [onIncoming]. + */ +class Iap2WirelessControlClient( + private val session: Iap2Session, + private val mfi: Iap2MfiAuthenticationClient, +) { + fun run( + identification: Iap2IdentificationConfig, + endpoint: Iap2WirelessCarPlayEndpoint, + timeoutMillis: Long = DEFAULT_TIMEOUT_MILLIS, + locationProvider: Iap2LocationProvider? = null, + onReady: () -> Unit = {}, + onIncoming: (Iap2Frame) -> Unit = {}, + onProgress: (String) -> Unit = {}, + ): Iap2WirelessControlResult { + require(identification.wireless != null) { + "Wireless control requires an Iap2IdentificationConfig with wireless transport" + } + require(timeoutMillis == NO_TIMEOUT_MILLIS || timeoutMillis in 1..MAX_TIMEOUT_MILLIS) { + "timeoutMillis must be in 1..$MAX_TIMEOUT_MILLIS or NO_TIMEOUT_MILLIS" + } + + val deadlineNanos = if (timeoutMillis == NO_TIMEOUT_MILLIS) { + Long.MAX_VALUE + } else { + deadlineAfter(timeoutMillis) + } + Iap2IdentificationClient(session).identify(identification, requireRemaining(deadlineNanos)) + onProgress("iap2 identification accepted") + var stage = Iap2WirelessControlStage.IDENTIFIED + + mfi.run(session, requireRemaining(deadlineNanos), onProgress) + stage = Iap2WirelessControlStage.AUTHENTICATED + onProgress("iap2 authentication accepted") + + for (subscription in Iap2WiredControlClient.subscriptions()) { + send(subscription, deadlineNanos) + } + stage = Iap2WirelessControlStage.SUBSCRIBED + onProgress("iap2 subscriptions sent") + onReady() + + var forwardedFrames = 0 + var wifiConfigurationsSent = 0 + var carPlayStartSessionsSent = 0 + var preTransportWiFiConfigurationsSent = 0 + var postTransportWiFiConfigurationsSent = 0 + var transportNotificationSeen = false + var wirelessCarPlayAvailableSeen = false + var locationActive = false + var locationSentLogged = false + while (true) { + val remaining = remainingMillis(deadlineNanos) + if (remaining == 0L) { + return Iap2WirelessControlResult( + Iap2WirelessControlTerminal.TIMED_OUT, + stage, + forwardedFrames, + wifiConfigurationsSent, + carPlayStartSessionsSent, + transportNotificationSeen, + postTransportWiFiConfigurationsSent, + wirelessCarPlayAvailableSeen, + ) + } + if (locationActive && sendLatestLocation(locationProvider, deadlineNanos) && !locationSentLogged) { + locationSentLogged = true + onProgress("iap2 tx=0xfffb location-information") + } + val pollTimeout = if (locationActive) { + min(remaining, LOCATION_POLL_INTERVAL_MILLIS) + } else { + remaining + } + val incoming = session.recv(pollTimeout) + if (incoming == null) { + if (session.isClosed) { + return Iap2WirelessControlResult( + Iap2WirelessControlTerminal.CHANNEL_CLOSED, + stage, + forwardedFrames, + wifiConfigurationsSent, + carPlayStartSessionsSent, + transportNotificationSeen, + postTransportWiFiConfigurationsSent, + wirelessCarPlayAvailableSeen, + ) + } + if (remainingMillis(deadlineNanos) == 0L) { + return Iap2WirelessControlResult( + Iap2WirelessControlTerminal.TIMED_OUT, + stage, + forwardedFrames, + wifiConfigurationsSent, + carPlayStartSessionsSent, + transportNotificationSeen, + postTransportWiFiConfigurationsSent, + wirelessCarPlayAvailableSeen, + ) + } + continue + } + + when (incoming.messageId) { + REQUEST_ACCESSORY_WIFI_CONFIGURATION -> { + onProgress("iap2 rx=0x5702 request-wifi-configuration") + val postTransport = transportNotificationSeen + val sentCount = if (postTransport) { + postTransportWiFiConfigurationsSent + } else { + preTransportWiFiConfigurationsSent + } + val limit = if (postTransport) { + MAX_POST_TRANSPORT_WIFI_CONFIGURATION_SENDS + } else { + MAX_PRE_TRANSPORT_WIFI_CONFIGURATION_SENDS + } + if (sentCount >= limit) { + onProgress( + "iap2 0x5703 ignored: maximum Wi-Fi configuration sends reached", + ) + } else { + send(accessoryWiFiConfiguration(endpoint), deadlineNanos) + stage = later( + stage, + if (postTransport) { + Iap2WirelessControlStage.POST_TRANSPORT_WIFI_CONFIG_SENT + } else { + Iap2WirelessControlStage.WIFI_CONFIG_SENT + }, + ) + wifiConfigurationsSent++ + if (postTransport) { + postTransportWiFiConfigurationsSent++ + } else { + preTransportWiFiConfigurationsSent++ + } + onProgress("iap2 tx=0x5703 accessory-wifi-configuration") + } + } + + CARPLAY_AVAILABILITY -> { + onProgress("iap2 rx=0x4300 carplay-availability") + send(carPlayStartSession(endpoint), deadlineNanos) + stage = later(stage, Iap2WirelessControlStage.CARPLAY_START_SENT) + carPlayStartSessionsSent++ + onProgress("iap2 tx=0x4301 carplay-start-session") + } + + WIRELESS_CARPLAY_UPDATE -> { + val available = Iap2WirelessMessages.wirelessCarPlayAvailability(incoming) + if (available) wirelessCarPlayAvailableSeen = true + onProgress("iap2 rx=0x4e0d wireless-carplay-update available=$available") + } + + DEVICE_TRANSPORT_IDENTIFIER_NOTIFICATION -> { + transportNotificationSeen = true + val identifiers = Iap2WirelessMessages.deviceTransportIdentifier(incoming) + stage = later(stage, Iap2WirelessControlStage.TRANSPORT_NOTIFIED) + onProgress( + "iap2 rx=0x4e0e device-transport-identifier " + + "bluetooth=${identifiers.bluetoothMac ?: "none"} " + + "usb=${identifiers.usbTransportIdentifier ?: "none"}; " + + "resending 0x5703", + ) + if ( + postTransportWiFiConfigurationsSent >= + MAX_POST_TRANSPORT_WIFI_CONFIGURATION_SENDS + ) { + onProgress( + "iap2 post-transport 0x5703 ignored: " + + "maximum Wi-Fi configuration sends reached", + ) + } else { + send(accessoryWiFiConfiguration(endpoint), deadlineNanos) + stage = later( + stage, + Iap2WirelessControlStage.POST_TRANSPORT_WIFI_CONFIG_SENT, + ) + wifiConfigurationsSent++ + postTransportWiFiConfigurationsSent++ + onProgress( + "iap2 tx=0x5703 post-transport accessory-wifi-configuration", + ) + } + } + + Iap2LocationMessages.START_LOCATION_INFORMATION -> { + onProgress("iap2 rx=0xfffa start-location-information") + locationActive = startLocationUpdates(locationProvider, onProgress) + locationSentLogged = false + if (locationActive && sendLatestLocation(locationProvider, deadlineNanos)) { + locationSentLogged = true + onProgress("iap2 tx=0xfffb location-information") + } + } + + Iap2LocationMessages.STOP_LOCATION_INFORMATION -> { + onProgress("iap2 rx=0xfffc stop-location-information") + locationActive = false + locationSentLogged = false + locationProvider?.stop() + } + + else -> { + onProgress("iap2 rx=0x${incoming.messageId.toString(16).padStart(4, '0')}") + onIncoming(incoming) + forwardedFrames++ + } + } + } + } + + private fun send(frame: Iap2Frame, deadlineNanos: Long) { + session.send(frame, requireRemaining(deadlineNanos)) + } + + private fun sendLatestLocation( + provider: Iap2LocationProvider?, + deadlineNanos: Long, + ): Boolean { + val sentence = provider?.latestNmea() ?: return false + session.send( + Iap2LocationMessages.locationInformation(sentence), + requireRemaining(deadlineNanos), + ) + return true + } + + private fun startLocationUpdates( + provider: Iap2LocationProvider?, + onProgress: (String) -> Unit, + ): Boolean { + if (provider == null) return false + return try { + provider.start().also { started -> + if (!started) onProgress("iap2 location provider did not start") + } + } catch (error: Exception) { + onProgress("iap2 location provider start failed: ${error.message}") + false + } + } + + companion object { + private const val REQUEST_ACCESSORY_WIFI_CONFIGURATION = 0x5702 + private const val ACCESSORY_WIFI_CONFIGURATION = 0x5703 + private const val CARPLAY_AVAILABILITY = 0x4300 + private const val CARPLAY_START_SESSION = 0x4301 + private const val WIRELESS_CARPLAY_UPDATE = 0x4e0d + private const val DEVICE_TRANSPORT_IDENTIFIER_NOTIFICATION = 0x4e0e + private const val LOCATION_POLL_INTERVAL_MILLIS = 1_000L + const val NO_TIMEOUT_MILLIS = Long.MAX_VALUE + private const val DEFAULT_TIMEOUT_MILLIS = 60_000L + private const val MAX_TIMEOUT_MILLIS = 24 * 60 * 60 * 1_000L + private const val MAX_RECV_TIMEOUT_MILLIS = 5 * 60 * 1_000L + private const val MAX_PRE_TRANSPORT_WIFI_CONFIGURATION_SENDS = 5 + private const val MAX_POST_TRANSPORT_WIFI_CONFIGURATION_SENDS = 2 + private const val NANOS_PER_MILLISECOND = 1_000_000L + + /** Reference-compatible 0x5703 body. BSSID is omitted when the platform does not expose it. */ + fun accessoryWiFiConfiguration(endpoint: Iap2WirelessCarPlayEndpoint): Iap2Frame = + Iap2WirelessMessages.accessoryWiFiConfiguration( + ssid = endpoint.ssid, + passphrase = endpoint.passphrase, + channel = endpoint.channel, + securityType = endpoint.security.wireValue, + ) + + /** Wireless 0x4301 reply carrying the receiver address, port and pairing identity. */ + fun carPlayStartSession(endpoint: Iap2WirelessCarPlayEndpoint): Iap2Frame = + Iap2CarPlayMessages.startSession( + wireless = Iap2WirelessSessionParameters( + ssid = endpoint.ssid, + passphrase = endpoint.passphrase, + channel = endpoint.channel, + ipAddresses = endpoint.ipAddresses, + securityType = endpoint.security.wireValue, + ), + airPlayPort = endpoint.airPlayPort, + deviceIdentifier = endpoint.deviceIdentifier, + publicKey = endpoint.publicKey, + sourceVersion = endpoint.sourceVersion, + ) + + private fun later( + current: Iap2WirelessControlStage, + next: Iap2WirelessControlStage, + ): Iap2WirelessControlStage = if (current.ordinal >= next.ordinal) current else next + + private fun deadlineAfter(timeoutMillis: Long): Long { + val now = System.nanoTime() + val delta = timeoutMillis * NANOS_PER_MILLISECOND + return if (Long.MAX_VALUE - now < delta) Long.MAX_VALUE else now + delta + } + + private fun requireRemaining(deadlineNanos: Long): Long = remainingMillis(deadlineNanos).also { + if (it == 0L) throw IphoneUsbException.TimedOut("Timed out during wireless iAP2 control bring-up") + } + + private fun remainingMillis(deadlineNanos: Long): Long { + val remaining = deadlineNanos - System.nanoTime() + if (remaining <= 0) return 0L + return min( + MAX_RECV_TIMEOUT_MILLIS, + (remaining + NANOS_PER_MILLISECOND - 1) / NANOS_PER_MILLISECOND, + ) + } + } +} + +/** Wireless 0x5703 security values. */ +enum class Iap2WirelessSecurity(val wireValue: Int) { + NONE(0), + WEP(1), + WPA_WPA2(2), + WPA3_TRANSITION(3), + WPA3_ONLY(4), +} + +/** Wireless hotspot and AirPlay endpoint sent in 0x5703 and 0x4301. */ +class Iap2WirelessCarPlayEndpoint( + val ssid: String, + val passphrase: String, + val channel: Int, + val security: Iap2WirelessSecurity, + ipAddresses: List, + val airPlayPort: Int, + val deviceIdentifier: String, + val publicKey: String, + val sourceVersion: String, +) { + val ipAddresses: List = ipAddresses.toList() + + init { + require(ssid.isNotBlank()) { "ssid is required and must not be blank" } + require('\u0000' !in ssid) { "ssid must not contain U+0000" } + require('\u0000' !in passphrase) { "passphrase must not contain U+0000" } + if (security != Iap2WirelessSecurity.NONE) { + require(passphrase.isNotEmpty()) { "passphrase is required for secured Wi-Fi" } + } + require(channel in 0..0xff) { "channel must be in 0..255" } + require(ipAddresses.isNotEmpty()) { "At least one wireless IP address is required" } + require(ipAddresses.all { it.isNotBlank() && '\u0000' !in it }) { + "Every wireless IP address must be non-blank and must not contain U+0000" + } + require(airPlayPort in 1..65535) { "airPlayPort must be in 1..65535" } + require(deviceIdentifier.isNotBlank()) { "deviceIdentifier is required and must not be blank" } + require('\u0000' !in deviceIdentifier) { "deviceIdentifier must not contain U+0000" } + require(publicKey.isNotEmpty()) { "publicKey is required and must not be empty" } + require('\u0000' !in publicKey) { "publicKey must not contain U+0000" } + require(sourceVersion.isNotEmpty()) { "sourceVersion is required and must not be empty" } + require('\u0000' !in sourceVersion) { "sourceVersion must not contain U+0000" } + } +} + +enum class Iap2WirelessControlStage { + IDENTIFIED, + AUTHENTICATED, + SUBSCRIBED, + WIFI_CONFIG_SENT, + CARPLAY_START_SENT, + TRANSPORT_NOTIFIED, + POST_TRANSPORT_WIFI_CONFIG_SENT, +} + +enum class Iap2WirelessControlTerminal { CHANNEL_CLOSED, TIMED_OUT } + +/** End state of the control loop only; it is not evidence of a live Wi-Fi or AirPlay session. */ +data class Iap2WirelessControlResult( + val terminal: Iap2WirelessControlTerminal, + val stage: Iap2WirelessControlStage, + val forwardedFrames: Int, + val wifiConfigurationsSent: Int, + val carPlayStartSessionsSent: Int, + val transportNotificationSeen: Boolean, + val postTransportWiFiConfigurationsSent: Int, + val wirelessCarPlayAvailableSeen: Boolean, +) diff --git a/shared/src/main/java/com/shilapi/xcertplay/transport/IphoneCarPlayConfiguration.kt b/shared/src/main/java/com/shilapi/xcertplay/transport/IphoneCarPlayConfiguration.kt new file mode 100644 index 0000000..bd242db --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/transport/IphoneCarPlayConfiguration.kt @@ -0,0 +1,91 @@ +package com.shilapi.xcertplay.transport + +import android.hardware.usb.UsbConfiguration +import android.hardware.usb.UsbConstants +import android.hardware.usb.UsbDevice +import android.hardware.usb.UsbEndpoint +import android.hardware.usb.UsbInterface +import android.util.Log + +/** + * Descriptor-based discovery of the iPhone's CarPlay configuration. + * + * Configuration ids differ between iPhone models, so the configuration is identified by its + * interfaces: Apple USB Multiplexor (USBMUX) plus the NCM/Ethernet function CarPlay uses. + */ +object IphoneCarPlayConfiguration { + const val TAG = "xcertplay-usb" + + private const val USBMUX_CLASS = 0xff + private const val USBMUX_SUBCLASS = 0xfe + private const val USBMUX_PROTOCOL = 0x02 + private const val APPLE_ETHERNET_CLASS = 0xff + private const val APPLE_ETHERNET_SUBCLASS = 0xfd + private const val APPLE_ETHERNET_PROTOCOL = 0x01 + private const val NCM_CONTROL_CLASS = 0x02 + private const val NCM_CONTROL_SUBCLASS = 0x0d + private const val PREFERRED_USBMUX_OUT = 0x04 + private const val PREFERRED_USBMUX_IN = 0x85 + + fun find(device: UsbDevice): UsbConfiguration? { + val configurations = (0 until device.configurationCount).map(device::getConfiguration) + val chosen = configurations.firstOrNull { usbMuxInterface(it) != null && hasCdcNcm(it) && hasAppleEthernet(it) } + ?: configurations.firstOrNull { usbMuxInterface(it) != null && hasCdcNcm(it) } + Log.i( + TAG, + "carplay config chosen=${chosen?.id} " + + "available=${configurations.map { it.id }} detail=${chosen?.let(::describe)}", + ) + return chosen + } + + fun describe(configuration: UsbConfiguration): String = + (0 until configuration.interfaceCount).joinToString(",") { index -> + val usbInterface = configuration.getInterface(index) + "${usbInterface.id}/${usbInterface.alternateSetting}" + + ":${usbInterface.interfaceClass.toString(16)}" + + ".${usbInterface.interfaceSubclass.toString(16)}" + + ".${usbInterface.interfaceProtocol.toString(16)}" + + "x${usbInterface.endpointCount}" + } + + fun usbMuxInterface(configuration: UsbConfiguration): UsbInterface? = + (0 until configuration.interfaceCount).map(configuration::getInterface).firstOrNull { + it.interfaceClass == USBMUX_CLASS && + it.interfaceSubclass == USBMUX_SUBCLASS && + it.interfaceProtocol == USBMUX_PROTOCOL + } + + fun usbMuxEndpoints(usbInterface: UsbInterface): Pair? { + val endpoints = (0 until usbInterface.endpointCount).map(usbInterface::getEndpoint) + val out = endpoints.firstOrNull { + it.address == PREFERRED_USBMUX_OUT && + it.direction == UsbConstants.USB_DIR_OUT && + it.type == UsbConstants.USB_ENDPOINT_XFER_BULK + } ?: endpoints.singleOrNull { + it.direction == UsbConstants.USB_DIR_OUT && + it.type == UsbConstants.USB_ENDPOINT_XFER_BULK + } + val input = endpoints.firstOrNull { + it.address == PREFERRED_USBMUX_IN && + it.direction == UsbConstants.USB_DIR_IN && + it.type == UsbConstants.USB_ENDPOINT_XFER_BULK + } ?: endpoints.singleOrNull { + it.direction == UsbConstants.USB_DIR_IN && + it.type == UsbConstants.USB_ENDPOINT_XFER_BULK + } + return if (out != null && input != null) out to input else null + } + + private fun hasCdcNcm(configuration: UsbConfiguration): Boolean = + (0 until configuration.interfaceCount).map(configuration::getInterface).any { + it.interfaceClass == NCM_CONTROL_CLASS && it.interfaceSubclass == NCM_CONTROL_SUBCLASS + } + + private fun hasAppleEthernet(configuration: UsbConfiguration): Boolean = + (0 until configuration.interfaceCount).map(configuration::getInterface).any { + it.interfaceClass == APPLE_ETHERNET_CLASS && + it.interfaceSubclass == APPLE_ETHERNET_SUBCLASS && + it.interfaceProtocol == APPLE_ETHERNET_PROTOCOL + } +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/transport/IphoneUsbHost.kt b/shared/src/main/java/com/shilapi/xcertplay/transport/IphoneUsbHost.kt new file mode 100644 index 0000000..d855ed3 --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/transport/IphoneUsbHost.kt @@ -0,0 +1,451 @@ +package com.shilapi.xcertplay.transport + +import android.app.PendingIntent +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.content.IntentFilter +import android.hardware.usb.UsbConfiguration +import android.hardware.usb.UsbConstants +import android.hardware.usb.UsbDevice +import android.hardware.usb.UsbDeviceConnection +import android.hardware.usb.UsbEndpoint +import android.hardware.usb.UsbInterface +import android.hardware.usb.UsbManager +import android.hardware.usb.UsbRequest +import android.os.Build +import android.util.Log +import java.io.Closeable +import java.io.IOException +import java.nio.ByteBuffer +import java.util.concurrent.Executor +import java.util.concurrent.TimeoutException +import java.util.concurrent.atomic.AtomicBoolean + +/** Exact Apple USB identities allowed by the deployment configuration. */ +class IphoneUsbMatcher private constructor( + private val allowedDevices: Set?, + private val allowAnyAppleProduct: Boolean, +) { + constructor(allowedDevices: Collection) : this( + allowedDevices.toSet(), + allowAnyAppleProduct = false, + ) + + init { + require(allowedDevices == null || allowedDevices.isNotEmpty()) { + "At least one iPhone USB identity is required when not using Apple-vendor discovery" + } + require(allowedDevices == null || allowedDevices.all { it.vendorId == APPLE_VENDOR_ID }) { + "iPhone USB identities must use Apple vendor ID 0x${APPLE_VENDOR_ID.toString(16)}" + } + } + + fun matches(vendorId: Int, productId: Int): Boolean = + if (allowAnyAppleProduct) vendorId == APPLE_VENDOR_ID + else UsbDeviceId(vendorId, productId) in allowedDevices.orEmpty() + + companion object { + /** Apple VID used by LIVI commit 0a3dcaa0bf30d5319506d0e47c7b0d46bc942ec3. */ + const val APPLE_VENDOR_ID = 0x05ac + + /** Discovers every Apple device, matching only the vendor ID confirmed by LIVI. */ + fun appleVendor(): IphoneUsbMatcher = IphoneUsbMatcher(null, allowAnyAppleProduct = true) + } +} + +/** + * Android USB Host bring-up boundary for a configured iPhone identity. + * + * LIVI's fixed commit uses Apple vendor request `0x52`, value `0`, index `4`, and then selects + * configuration `6`. The vendor request can make the iPhone re-enumerate. Android does not offer + * Linux sysfs configuration control or a synchronous re-enumeration primitive, so this class + * closes the first connection and requires the caller to receive, re-authorize, and pass the new + * [UsbDevice] to [selectCarPlayConfigurationAsync]. All opens run on the supplied executor. + */ +class IphoneUsbHost( + context: Context, + private val usbManager: UsbManager, + private val matcher: IphoneUsbMatcher, + private val permissionAction: String = "${context.packageName}.IPHONE_USB_PERMISSION", +) { + private val appContext = context.applicationContext + + sealed class PermissionRequest { + data class AlreadyGranted(val device: UsbDevice) : PermissionRequest() + data class Requested(val device: UsbDevice) : PermissionRequest() + } + + sealed class PermissionResult { + data class Granted(val device: UsbDevice) : PermissionResult() + data class Denied(val device: UsbDevice) : PermissionResult() + } + + sealed class TransitionResult { + /** The connection was closed; wait for a new matching attached device before continuing. */ + data object ReenumerationRequested : TransitionResult() + + data class Failed(val error: IphoneUsbException) : TransitionResult() + } + + sealed class Iap2SessionResult { + data class Connected(val session: Iap2UsbSession) : Iap2SessionResult() + data class Failed(val error: IphoneUsbException) : Iap2SessionResult() + } + + fun discover(): List = + usbManager.deviceList.values.filter { matcher.matches(it.vendorId, it.productId) } + + @Throws(IphoneUsbException::class) + fun requestPermission(device: UsbDevice): PermissionRequest { + requireConfiguredDevice(device) + if (usbManager.hasPermission(device)) return PermissionRequest.AlreadyGranted(device) + + usbManager.requestPermission(device, permissionPendingIntent()) + return PermissionRequest.Requested(device) + } + + /** Returns null for unrelated broadcasts, malformed results, or non-configured devices. */ + fun parsePermissionResult(intent: Intent): PermissionResult? { + if (intent.action != permissionAction) return null + val device = intent.usbDevice() ?: return null + if (!matcher.matches(device.vendorId, device.productId)) return null + return if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) { + PermissionResult.Granted(device) + } else { + PermissionResult.Denied(device) + } + } + + /** Returns the new matching device after the vendor request caused Android USB re-enumeration. */ + fun parseAttachedDevice(intent: Intent): UsbDevice? { + if (intent.action != UsbManager.ACTION_USB_DEVICE_ATTACHED) return null + val device = intent.usbDevice() ?: return null + return device.takeIf { matcher.matches(it.vendorId, it.productId) } + } + + /** Register once for this host instance and close the returned handle to unregister it. */ + fun registerPermissionReceiver(onResult: (PermissionResult) -> Unit): Closeable = + registerReceiver(IntentFilter(permissionAction)) { parsePermissionResult(it)?.let(onResult) } + + /** Register once for this host instance and close the returned handle to unregister it. */ + fun registerAttachReceiver(onAttached: (UsbDevice) -> Unit): Closeable = + registerReceiver(IntentFilter(UsbManager.ACTION_USB_DEVICE_ATTACHED)) { + parseAttachedDevice(it)?.let(onAttached) + } + + /** + * Sends the LIVI-evidenced vendor request then closes the connection before re-enumeration. + * The callback is invoked from [executor]. + */ + fun requestCarPlayReenumerationAsync( + device: UsbDevice, + executor: Executor, + callback: (TransitionResult) -> Unit, + ) { + executor.execute { + callback(runTransition(device) { connection -> + val response = ByteArray(VENDOR_RESPONSE_LENGTH) + val transferred = connection.controlTransfer( + USB_VENDOR_DEVICE_IN, + CARPLAY_CONFIGURATION_REQUEST, + 0, + CARPLAY_CONFIGURATION_INDEX, + response, + response.size, + CONTROL_TRANSFER_TIMEOUT_MILLIS, + ) + if (transferred != response.size) { + throw IphoneUsbException.Protocol( + "CarPlay configuration request transferred $transferred of ${response.size} bytes", + ) + } + TransitionResult.ReenumerationRequested + }) + } + } + + /** + * Opens LIVI's USBMUX bulk pipe on the re-enumerated iPhone. + * + * This repeats CarPlay configuration selection on the newly opened Android connection and + * claims the Apple USB Multiplexor interface, preferring the LIVI bulk pair 0x04/0x85. + * After a successful callback, it owns the returned session and must close it. If the callback + * throws, this method closes the session before propagating the callback failure. + */ + fun openIap2UsbSessionAsync( + device: UsbDevice, + executor: Executor, + callback: (Iap2SessionResult) -> Unit, + ) { + executor.execute { + val result = try { + Iap2SessionResult.Connected(openIap2UsbSession(device)) + } catch (error: IphoneUsbException) { + Iap2SessionResult.Failed(error) + } catch (error: SecurityException) { + Iap2SessionResult.Failed( + IphoneUsbException.PermissionDenied("USB permission was denied", error), + ) + } catch (error: RuntimeException) { + Iap2SessionResult.Failed( + IphoneUsbException.DeviceUnavailable("iPhone USBMUX operation failed", error), + ) + } + try { + callback(result) + } catch (error: Throwable) { + if (result is Iap2SessionResult.Connected) { + try { + result.session.close() + } catch (closeError: Throwable) { + error.addSuppressed(closeError) + } + } + throw error + } + } + } + + private fun runTransition( + device: UsbDevice, + operation: (UsbDeviceConnection) -> TransitionResult, + ): TransitionResult = try { + requireConfiguredDevice(device) + if (!usbManager.hasPermission(device)) { + throw IphoneUsbException.PermissionDenied("USB permission has not been granted") + } + val connection = usbManager.openDevice(device) + ?: throw IphoneUsbException.DeviceUnavailable("UsbManager could not open the iPhone") + try { + operation(connection) + } finally { + connection.close() + } + } catch (error: IphoneUsbException) { + TransitionResult.Failed(error) + } catch (error: SecurityException) { + TransitionResult.Failed(IphoneUsbException.PermissionDenied("USB permission was denied", error)) + } catch (error: RuntimeException) { + TransitionResult.Failed(IphoneUsbException.DeviceUnavailable("iPhone USB operation failed", error)) + } + + private fun openIap2UsbSession(device: UsbDevice): Iap2UsbSession { + requireConfiguredDevice(device) + if (!usbManager.hasPermission(device)) { + throw IphoneUsbException.PermissionDenied("USB permission has not been granted") + } + val connection = usbManager.openDevice(device) + ?: throw IphoneUsbException.DeviceUnavailable("UsbManager could not open the iPhone") + var claimedInterface: UsbInterface? = null + try { + val configuration = IphoneCarPlayConfiguration.find(device) + ?: throw IphoneUsbException.Protocol( + "Re-enumerated iPhone exposes no USBMUX CarPlay configuration", + ) + if (!connection.setConfiguration(configuration)) { + Log.w( + IphoneCarPlayConfiguration.TAG, + "setConfiguration ${configuration.id} reported failure; claiming anyway", + ) + } + val usbMux = IphoneCarPlayConfiguration.usbMuxInterface(configuration) + ?: throw IphoneUsbException.Protocol("CarPlay configuration exposes no USBMUX interface") + val endpoints = IphoneCarPlayConfiguration.usbMuxEndpoints(usbMux) + ?: throw IphoneUsbException.Protocol("USBMUX interface exposes no bulk endpoint pair") + Log.i( + IphoneCarPlayConfiguration.TAG, + "usbmux iface=${usbMux.id} alt=${usbMux.alternateSetting} " + + "out=0x${endpoints.first.address.toString(16)} in=0x${endpoints.second.address.toString(16)}", + ) + if (!connection.claimInterface(usbMux, true)) { + throw IphoneUsbException.DeviceUnavailable("Android could not claim USBMUX interface 1") + } + claimedInterface = usbMux + return Iap2UsbSession(connection, endpoints.first, endpoints.second) + } catch (error: Throwable) { + if (claimedInterface != null) connection.releaseInterface(claimedInterface) + connection.close() + throw error + } + } + + private fun requireConfiguredDevice(device: UsbDevice) { + if (!matcher.matches(device.vendorId, device.productId)) { + throw IphoneUsbException.DeviceUnavailable("USB device is not a configured iPhone identity") + } + } + + private fun permissionPendingIntent(): PendingIntent { + val intent = Intent(permissionAction).setPackage(appContext.packageName) + return PendingIntent.getBroadcast( + appContext, + 0, + intent, + PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE, + ) + } + + private fun registerReceiver(filter: IntentFilter, onReceive: (Intent) -> Unit): Closeable { + val receiver = object : BroadcastReceiver() { + override fun onReceive(context: Context, intent: Intent) = onReceive(intent) + } + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + appContext.registerReceiver(receiver, filter, Context.RECEIVER_NOT_EXPORTED) + } else { + appContext.registerReceiver(receiver, filter) + } + val registered = AtomicBoolean(true) + return Closeable { + if (registered.compareAndSet(true, false)) appContext.unregisterReceiver(receiver) + } + } + + private fun Intent.usbDevice(): UsbDevice? = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + getParcelableExtra(UsbManager.EXTRA_DEVICE, UsbDevice::class.java) + } else { + @Suppress("DEPRECATION") + getParcelableExtra(UsbManager.EXTRA_DEVICE) + } + + companion object { + private const val USB_VENDOR_DEVICE_IN = 0xc0 + private const val CARPLAY_CONFIGURATION_REQUEST = 0x52 + private const val CARPLAY_CONFIGURATION_INDEX = 0x0004 + private const val VENDOR_RESPONSE_LENGTH = 1 + private const val CONTROL_TRANSFER_TIMEOUT_MILLIS = 1_000 + } + +} + +/** + * A blocking, full-duplex USBMUX pipe. A null [read] result means only that its timeout elapsed. + * + * All operations must run off the Android main thread. The session does not parse iAP2 frames. + */ +class Iap2UsbSession internal constructor( + private val connection: UsbDeviceConnection, + private val outEndpoint: UsbEndpoint, + private val inEndpoint: UsbEndpoint, +) : Closeable { + private val stateLock = Any() + private val readLock = Any() + private val writeLock = Any() + private var closed = false + private var failure: IphoneUsbException? = null + private var pendingRead: UsbRequest? = null + + fun write(data: ByteArray, timeoutMillis: Int) = synchronized(writeLock) { + checkOpen() + require(timeoutMillis > 0) { "timeoutMillis must be positive" } + if (data.isEmpty()) return@synchronized + val transferred = connection.bulkTransfer(outEndpoint, data, data.size, timeoutMillis) + if (transferred != data.size) { + throw IphoneUsbException.DeviceUnavailable( + "USBMUX write transferred $transferred of ${data.size} bytes", + ) + } + } + + /** Returns null only when no completed USB request arrives before [timeoutMillis]. */ + fun read(timeoutMillis: Long): ByteArray? = synchronized(readLock) { + checkOpen() + require(timeoutMillis > 0) { "timeoutMillis must be positive" } + val request = UsbRequest() + var initialized = false + try { + if (!request.initialize(connection, inEndpoint)) { + throw IphoneUsbException.DeviceUnavailable("Android could not initialize USBMUX read request") + } + initialized = true + synchronized(stateLock) { + checkOpenLocked() + pendingRead = request + } + val buffer = ByteBuffer.allocateDirect(USBMUX_READ_CHUNK_BYTES) + if (!request.queue(buffer)) { + throw IphoneUsbException.DeviceUnavailable("Android could not queue USBMUX read request") + } + val completed = try { + connection.requestWait(timeoutMillis) + } catch (_: TimeoutException) { + drainCancelledRead(request) + return@synchronized null + } + if (completed == null) { + throw failSession("Android returned no USBMUX read request") + } + if (completed !== request) { + throw failSession("Android completed an unexpected USB request") + } + return@synchronized ByteArray(buffer.position()).also { + buffer.flip() + buffer.get(it) + } + } catch (error: IphoneUsbException) { + throw error + } catch (error: RuntimeException) { + throw failSession("USBMUX read failed", error) + } finally { + synchronized(stateLock) { + if (pendingRead === request) pendingRead = null + } + if (initialized) request.cancel() + request.close() + } + } + + override fun close() { + val requestToCancel = synchronized(stateLock) { + if (closed) return + closed = true + pendingRead + } + requestToCancel?.cancel() + connection.close() + } + + private fun checkOpen() { + synchronized(stateLock) { checkOpenLocked() } + } + + private fun checkOpenLocked() { + failure?.let { throw it } + if (closed) throw IphoneUsbException.DeviceUnavailable("USBMUX session is closed") + } + + private fun drainCancelledRead(request: UsbRequest) { + if (!request.cancel()) { + throw failSession("Android could not cancel timed out USBMUX read request") + } + val completed = try { + connection.requestWait(CANCEL_DRAIN_TIMEOUT_MILLIS) + } catch (_: TimeoutException) { + throw failSession("Timed out draining cancelled USBMUX read request") + } + if (completed !== request) { + throw failSession("Android did not drain the cancelled USBMUX read request") + } + } + + private fun failSession(message: String, cause: Throwable? = null): IphoneUsbException.DeviceUnavailable { + val error = IphoneUsbException.DeviceUnavailable(message, cause) + synchronized(stateLock) { + if (failure == null) failure = error + } + return error + } + + private companion object { + const val USBMUX_READ_CHUNK_BYTES = 65_536 + const val CANCEL_DRAIN_TIMEOUT_MILLIS = 1_000L + } +} + +/** USB bring-up failures that precede iAP2 and are distinct from MFi I2C failures. */ +sealed class IphoneUsbException(message: String, cause: Throwable? = null) : IOException(message, cause) { + class PermissionDenied(message: String, cause: Throwable? = null) : IphoneUsbException(message, cause) + class DeviceUnavailable(message: String, cause: Throwable? = null) : IphoneUsbException(message, cause) + class TimedOut(message: String, cause: Throwable? = null) : IphoneUsbException(message, cause) + class Protocol(message: String) : IphoneUsbException(message) +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/transport/LinuxI2cTransport.kt b/shared/src/main/java/com/shilapi/xcertplay/transport/LinuxI2cTransport.kt new file mode 100644 index 0000000..c63a78f --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/transport/LinuxI2cTransport.kt @@ -0,0 +1,145 @@ +package com.shilapi.xcertplay.transport + +import java.io.Closeable +import java.io.IOException + +/** + * I2C transport for a board-provided Linux `/dev/i2c-N` device node. + * + * The target build must grant this app access to the node. Android SELinux policy and Unix device + * permissions are not changed or bypassed here. All methods block and must not run on the main + * thread. + */ +class LinuxI2cTransport private constructor( + private val bridge: LinuxI2cBridge, + private val handle: Int, +) : I2cTransport, Closeable { + private val lock = Any() + private var closed = false + + override fun transaction(address7Bit: Int, writeData: ByteArray, readLength: Int): ByteArray = + synchronized(lock) { + checkOpen() + validateTransaction(address7Bit, writeData, readLength) + + try { + bridge.transaction(handle, address7Bit, writeData, readLength).also { response -> + if (response.size != readLength) { + throw I2cTransportException.Protocol( + "I2C backend returned ${response.size} bytes, expected $readLength", + ) + } + } + } catch (error: LinuxI2cNativeException) { + throw mapNativeError(error) + } + } + + override fun close() { + synchronized(lock) { + if (closed) return + closed = true + try { + bridge.close(handle) + } catch (error: LinuxI2cNativeException) { + throw mapNativeError(error) + } + } + } + + private fun checkOpen() { + if (closed) { + throw I2cTransportException.DeviceUnavailable("Linux I2C transport is closed") + } + } + + companion object { + private const val MAX_MESSAGE_LENGTH = 0xffff + private val I2C_DEVICE_PATH = Regex("/dev/i2c-[0-9]+") + + /** Opens a Linux I2C device node. */ + @Throws(I2cTransportException::class) + fun open(devicePath: String): LinuxI2cTransport = open(devicePath, NativeLinuxI2cBridge) + + internal fun open(devicePath: String, bridge: LinuxI2cBridge): LinuxI2cTransport { + if (!I2C_DEVICE_PATH.matches(devicePath)) { + throw I2cTransportException.InvalidRequest( + "I2C device path must be /dev/i2c-N: $devicePath", + ) + } + + return try { + LinuxI2cTransport(bridge, bridge.open(devicePath)) + } catch (error: LinuxI2cNativeException) { + throw mapNativeError(error) + } + } + + private fun validateTransaction(address7Bit: Int, writeData: ByteArray, readLength: Int) { + if (address7Bit !in 0..0x7f) { + throw I2cTransportException.InvalidRequest( + "I2C address must be 7-bit: 0x${address7Bit.toString(16)}", + ) + } + if (readLength !in 0..MAX_MESSAGE_LENGTH || writeData.size > MAX_MESSAGE_LENGTH) { + throw I2cTransportException.InvalidRequest( + "I2C message length must be at most $MAX_MESSAGE_LENGTH bytes", + ) + } + if (writeData.isEmpty() && readLength == 0) { + throw I2cTransportException.InvalidRequest("I2C transaction must read or write data") + } + } + + private fun mapNativeError(error: LinuxI2cNativeException): I2cTransportException = + when (error.errnoCode) { + 1, 13 -> I2cTransportException.PermissionDenied(error.message ?: "I2C permission denied") + 110 -> I2cTransportException.TimedOut(error.message ?: "I2C transaction timed out", error) + 121 -> I2cTransportException.Nack(error.message ?: "I2C remote NACK") + 2, 6, 9, 16, 19 -> I2cTransportException.DeviceUnavailable( + error.message ?: "I2C device unavailable", + error, + ) + else -> I2cTransportException.Protocol(error.message ?: "I2C native operation failed", error) + } + } +} + +internal interface LinuxI2cBridge { + fun open(devicePath: String): Int + fun transaction(handle: Int, address7Bit: Int, writeData: ByteArray, readLength: Int): ByteArray + fun close(handle: Int) +} + +internal class LinuxI2cNativeException( + val errnoCode: Int, + message: String, +) : IOException(message) + +private object NativeLinuxI2cBridge : LinuxI2cBridge { + init { + System.loadLibrary("xcertplay_i2c") + } + + override fun open(devicePath: String): Int = LinuxI2cNative.open(devicePath) + + override fun transaction( + handle: Int, + address7Bit: Int, + writeData: ByteArray, + readLength: Int, + ): ByteArray = LinuxI2cNative.transaction(handle, address7Bit, writeData, readLength) + + override fun close(handle: Int) = LinuxI2cNative.close(handle) +} + +private object LinuxI2cNative { + external fun open(devicePath: String): Int + external fun transaction( + handle: Int, + address7Bit: Int, + writeData: ByteArray, + readLength: Int, + ): ByteArray + external fun close(handle: Int) +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/transport/LockdownCarKitClient.kt b/shared/src/main/java/com/shilapi/xcertplay/transport/LockdownCarKitClient.kt new file mode 100644 index 0000000..0e554f4 --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/transport/LockdownCarKitClient.kt @@ -0,0 +1,143 @@ +package com.shilapi.xcertplay.transport + +import java.io.Closeable +import java.security.GeneralSecurityException +import java.util.concurrent.atomic.AtomicBoolean + +/** + * Blocking minimum Lockdown path that opens the `com.apple.carkit.service` byte stream. + * + * Connect, plist receive, and TLS engine budgets are five seconds; writes retain the underlying + * transport's bounded timeout. The returned stream is owned by the caller. This client never + * closes its caller-owned [Iap2UsbMuxHost], persists a record, sends iAP2, or performs UI work. + */ +class LockdownCarKitClient( + private val host: Iap2UsbMuxHost, +) { + @Throws(IphoneUsbException::class, GeneralSecurityException::class) + fun open(pairedRecord: PairedRecord, label: String): BlockingDuplexByteStream = + open(pairedRecord.pairRecord, label) + + @Throws(IphoneUsbException::class, GeneralSecurityException::class) + fun open(pairRecord: LockdownPairRecord, label: String): BlockingDuplexByteStream = + openService(pairRecord, label, CARKIT_SERVICE) + + fun openService(pairRecord: LockdownPairRecord, label: String, serviceName: String): BlockingDuplexByteStream { + require(label.isNotBlank()) { "label must not be blank" } + require(serviceName.isNotBlank()) { "serviceName must not be blank" } + + val lockdownConnection = host.connect( + destinationPort = Iap2UsbMuxHost.LOCKDOWN_PORT, + timeoutMillis = STEP_TIMEOUT_MILLIS, + ) + val sessionTls = LockdownPlistChannel(lockdownConnection).use { plaintext -> + val response = plaintext.request( + LockdownPlistValue.Dictionary( + linkedMapOf( + "Label" to LockdownPlistValue.Text(label), + "Request" to LockdownPlistValue.Text("StartSession"), + "HostID" to LockdownPlistValue.Text(pairRecord.hostId), + "SystemBUID" to LockdownPlistValue.Text(pairRecord.systemBuid), + ), + ), + STEP_TIMEOUT_MILLIS, + ) + rejectError(response, "StartSession") + val enableSessionSsl = (response.entries["EnableSessionSSL"] as? LockdownPlistValue.Boolean)?.value + ?: throw IphoneUsbException.Protocol("StartSession response omitted boolean EnableSessionSSL") + if (!enableSessionSsl) { + throw IphoneUsbException.Protocol("StartSession did not enable TLS") + } + TlsDuplexChannel.open( + underlying = plaintext.detach(), + pairRecord = pairRecord, + handshakeTimeoutMillis = STEP_TIMEOUT_MILLIS, + ) + } + + val secureLockdown = LockdownPlistChannel(sessionTls) + var serviceStream: BlockingDuplexByteStream? = null + try { + val response = secureLockdown.request( + LockdownPlistValue.Dictionary( + linkedMapOf( + "Request" to LockdownPlistValue.Text("StartService"), + "Service" to LockdownPlistValue.Text(serviceName), + ), + ), + STEP_TIMEOUT_MILLIS, + ) + rejectError(response, "StartService") + val port = (response.entries["Port"] as? LockdownPlistValue.Integer)?.value + ?: throw IphoneUsbException.Protocol("StartService response omitted integer Port") + if (port !in 1..0xffff) { + throw IphoneUsbException.Protocol("StartService returned an invalid Port") + } + val enableServiceSsl = (response.entries["EnableServiceSSL"] as? LockdownPlistValue.Boolean)?.value + ?: false + + val serviceConnection = host.connect( + destinationPort = port.toInt(), + timeoutMillis = STEP_TIMEOUT_MILLIS, + ) + val readyStream = if (enableServiceSsl) { + TlsDuplexChannel.open( + underlying = serviceConnection, + pairRecord = pairRecord, + handshakeTimeoutMillis = STEP_TIMEOUT_MILLIS, + ) + } else { + serviceConnection + } + serviceStream = readyStream + val ownedStream = CarkitServiceStream(readyStream, secureLockdown) + serviceStream = null + return ownedStream + } finally { + if (serviceStream != null) { + try { + serviceStream.close() + } finally { + secureLockdown.close() + } + } + } + } + + /** Keeps the Lockdown session that created carkit alive for the service stream's lifetime. */ + private class CarkitServiceStream( + private val service: BlockingDuplexByteStream, + private val lockdown: Closeable, + ) : BlockingDuplexByteStream { + private val closed = AtomicBoolean(false) + + override fun send(data: ByteArray) = service.send(data) + + override fun recv(maxBytes: Int, timeoutMillis: Long): ByteArray? = + service.recv(maxBytes, timeoutMillis) + + override fun close() { + if (!closed.compareAndSet(false, true)) return + try { + service.close() + } finally { + lockdown.close() + } + } + } + + private fun rejectError(response: LockdownPlistValue.Dictionary, request: String) { + val code = when (val error = response.entries["Error"] ?: return) { + is LockdownPlistValue.Text -> error.value + is LockdownPlistValue.Integer -> (response.entries["ErrorString"] as? LockdownPlistValue.Text)?.value + ?: error.value.toString() + else -> throw IphoneUsbException.Protocol("$request response Error was not text or integer") + } + throw IphoneUsbException.Protocol("Lockdown $request failed: $code") + } + + private companion object { + const val STEP_TIMEOUT_MILLIS = 5_000L + const val CARKIT_SERVICE = "com.apple.carkit.service" + } +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/transport/LockdownPairRecord.kt b/shared/src/main/java/com/shilapi/xcertplay/transport/LockdownPairRecord.kt new file mode 100644 index 0000000..c58b0ad --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/transport/LockdownPairRecord.kt @@ -0,0 +1,433 @@ +package com.shilapi.xcertplay.transport + +import java.io.ByteArrayOutputStream +import java.math.BigInteger +import java.nio.charset.StandardCharsets +import java.security.GeneralSecurityException +import java.security.KeyFactory +import java.security.KeyPairGenerator +import java.security.MessageDigest +import java.security.PrivateKey +import java.security.PublicKey +import java.security.Signature +import java.security.interfaces.RSAPublicKey +import java.security.spec.RSAPublicKeySpec +import java.text.SimpleDateFormat +import java.util.Base64 +import java.util.Date +import java.util.Locale +import java.util.TimeZone + +/** + * Pairing material assembled locally from Lockdown values already obtained by the caller. + * + * It deliberately has no transport dependency: it neither requests values nor sends Pair. + */ +class LockdownPairRecord private constructor( + val hostId: String, + val systemBuid: String, + val wifiMacAddress: String, + devicePublicKeyPem: ByteArray, + deviceCertificatePem: ByteArray, + hostPrivateKeyPem: ByteArray, + hostCertificatePem: ByteArray, + rootPrivateKeyPem: ByteArray, + rootCertificatePem: ByteArray, +) { + private val storedDevicePublicKeyPem = devicePublicKeyPem.copyOf() + private val storedDeviceCertificatePem = deviceCertificatePem.copyOf() + private val storedHostPrivateKeyPem = hostPrivateKeyPem.copyOf() + private val storedHostCertificatePem = hostCertificatePem.copyOf() + private val storedRootPrivateKeyPem = rootPrivateKeyPem.copyOf() + private val storedRootCertificatePem = rootCertificatePem.copyOf() + + val devicePublicKeyPem: ByteArray get() = storedDevicePublicKeyPem.copyOf() + val deviceCertificatePem: ByteArray get() = storedDeviceCertificatePem.copyOf() + val hostPrivateKeyPem: ByteArray get() = storedHostPrivateKeyPem.copyOf() + val hostCertificatePem: ByteArray get() = storedHostCertificatePem.copyOf() + val rootPrivateKeyPem: ByteArray get() = storedRootPrivateKeyPem.copyOf() + val rootCertificatePem: ByteArray get() = storedRootCertificatePem.copyOf() + + /** Builds only the nested Pair request value; EscrowBag is intentionally unavailable yet. */ + fun toPairRequestDictionary(): LockdownPlistValue.Dictionary = LockdownPlistValue.Dictionary( + linkedMapOf( + "DeviceCertificate" to LockdownPlistValue.Data(deviceCertificatePem), + "HostCertificate" to LockdownPlistValue.Data(hostCertificatePem), + "HostID" to LockdownPlistValue.Text(hostId), + "RootCertificate" to LockdownPlistValue.Data(rootCertificatePem), + "SystemBUID" to LockdownPlistValue.Text(systemBuid), + ), + ) + + override fun toString(): String = "LockdownPairRecord(redacted)" + + companion object { + /** Rebuilds a record from previously persisted material; all PEM buffers are copied. */ + fun restore( + hostId: String, + systemBuid: String, + wifiMacAddress: String, + devicePublicKeyPem: ByteArray, + deviceCertificatePem: ByteArray, + hostPrivateKeyPem: ByteArray, + hostCertificatePem: ByteArray, + rootPrivateKeyPem: ByteArray, + rootCertificatePem: ByteArray, + ): LockdownPairRecord { + require(hostId.isNotBlank()) { "hostId must not be blank" } + require(systemBuid.isNotBlank()) { "systemBuid must not be blank" } + require(wifiMacAddress.isNotBlank()) { "wifiMacAddress must not be blank" } + listOf( + devicePublicKeyPem, + deviceCertificatePem, + hostPrivateKeyPem, + hostCertificatePem, + rootPrivateKeyPem, + rootCertificatePem, + ).forEach { require(it.isNotEmpty()) { "PEM material must not be empty" } } + return LockdownPairRecord( + hostId = hostId, + systemBuid = systemBuid, + wifiMacAddress = wifiMacAddress, + devicePublicKeyPem = devicePublicKeyPem, + deviceCertificatePem = deviceCertificatePem, + hostPrivateKeyPem = hostPrivateKeyPem, + hostCertificatePem = hostCertificatePem, + rootPrivateKeyPem = rootPrivateKeyPem, + rootCertificatePem = rootCertificatePem, + ) + } + + internal fun create( + hostId: String, + systemBuid: String, + wifiMacAddress: String, + devicePublicKeyPem: ByteArray, + material: CertificateMaterial, + ) = LockdownPairRecord( + hostId = hostId, + systemBuid = systemBuid, + wifiMacAddress = wifiMacAddress, + devicePublicKeyPem = devicePublicKeyPem, + deviceCertificatePem = material.deviceCertificatePem, + hostPrivateKeyPem = material.hostPrivateKeyPem, + hostCertificatePem = material.hostCertificatePem, + rootPrivateKeyPem = material.rootPrivateKeyPem, + rootCertificatePem = material.rootCertificatePem, + ) + } +} + +/** Generates a Lockdown PairRecord from values supplied by the caller, without any USB I/O. */ +object LockdownPairRecordGenerator { + @Throws(GeneralSecurityException::class, IllegalArgumentException::class) + fun generate( + devicePublicKeyPkcs1Pem: ByteArray, + wifiAddress: String, + hostId: String, + systemBuid: String, + ): LockdownPairRecord { + require(devicePublicKeyPkcs1Pem.isNotEmpty()) { "devicePublicKeyPkcs1Pem must not be empty" } + require(wifiAddress.isNotBlank()) { "wifiAddress must not be blank" } + require(hostId.isNotBlank()) { "hostId must not be blank" } + require(systemBuid.isNotBlank()) { "systemBuid must not be blank" } + + val copiedDeviceKey = devicePublicKeyPkcs1Pem.copyOf() + val material = CertificateMaterialGenerator.generate(copiedDeviceKey) + return LockdownPairRecord.create( + hostId = hostId, + systemBuid = systemBuid, + wifiMacAddress = wifiAddress, + devicePublicKeyPem = copiedDeviceKey, + material = material, + ) + } +} + +internal class CertificateMaterial( + deviceCertificatePem: ByteArray, + hostPrivateKeyPem: ByteArray, + hostCertificatePem: ByteArray, + rootPrivateKeyPem: ByteArray, + rootCertificatePem: ByteArray, +) { + private val storedDeviceCertificatePem = deviceCertificatePem.copyOf() + private val storedHostPrivateKeyPem = hostPrivateKeyPem.copyOf() + private val storedHostCertificatePem = hostCertificatePem.copyOf() + private val storedRootPrivateKeyPem = rootPrivateKeyPem.copyOf() + private val storedRootCertificatePem = rootCertificatePem.copyOf() + + val deviceCertificatePem: ByteArray get() = storedDeviceCertificatePem.copyOf() + val hostPrivateKeyPem: ByteArray get() = storedHostPrivateKeyPem.copyOf() + val hostCertificatePem: ByteArray get() = storedHostCertificatePem.copyOf() + val rootPrivateKeyPem: ByteArray get() = storedRootPrivateKeyPem.copyOf() + val rootCertificatePem: ByteArray get() = storedRootCertificatePem.copyOf() +} + +/** Minimal Android/JCA implementation of the certificate profile used by the locked dependency. */ +private object CertificateMaterialGenerator { + private const val RSA_KEY_BITS = 2048 + private const val CERTIFICATE_LIFETIME_SECONDS = 10L * 365 * 24 * 60 * 60 + private const val MILLIS_PER_SECOND = 1_000L + private const val UTC_TIME_LAST_YEAR = 2049 + private val sha256WithRsa = algorithmIdentifier("1.2.840.113549.1.1.11") + private val rsaEncryption = algorithmIdentifier("1.2.840.113549.1.1.1") + + fun generate(devicePublicKeyPem: ByteArray): CertificateMaterial { + val devicePublicKey = parsePkcs1RsaPublicKey(devicePublicKeyPem) + val rootKeyPair = KeyPairGenerator.getInstance("RSA").apply { initialize(RSA_KEY_BITS) }.generateKeyPair() + val hostKeyPair = KeyPairGenerator.getInstance("RSA").apply { initialize(RSA_KEY_BITS) }.generateKeyPair() + val rootPublicKey = rootKeyPair.public as? RSAPublicKey + ?: throw GeneralSecurityException("Generated root key is not RSA") + val hostPublicKey = hostKeyPair.public as? RSAPublicKey + ?: throw GeneralSecurityException("Generated host key is not RSA") + val now = System.currentTimeMillis() + val emptyName = distinguishedName(null) + val rootDer = certificate( + issuer = emptyName, + subject = emptyName, + certificatePublicKey = rootPublicKey, + signingKey = rootKeyPair.private, + signingPublicKey = rootPublicKey, + nowMillis = now, + extensions = rootExtensions(), + ) + val hostDer = certificate( + issuer = emptyName, + subject = emptyName, + certificatePublicKey = hostPublicKey, + signingKey = rootKeyPair.private, + signingPublicKey = rootPublicKey, + nowMillis = now, + extensions = leafExtensions(hostPublicKey, includeSubjectKeyIdentifier = false), + ) + val deviceDer = certificate( + issuer = emptyName, + subject = emptyName, + certificatePublicKey = devicePublicKey, + signingKey = rootKeyPair.private, + signingPublicKey = rootPublicKey, + nowMillis = now, + extensions = leafExtensions(devicePublicKey, includeSubjectKeyIdentifier = true), + ) + return CertificateMaterial( + deviceCertificatePem = pem("CERTIFICATE", deviceDer), + hostPrivateKeyPem = pem("PRIVATE KEY", hostKeyPair.private.encoded), + hostCertificatePem = pem("CERTIFICATE", hostDer), + rootPrivateKeyPem = pem("PRIVATE KEY", rootKeyPair.private.encoded), + rootCertificatePem = pem("CERTIFICATE", rootDer), + ) + } + + private fun certificate( + issuer: ByteArray, + subject: ByteArray, + certificatePublicKey: RSAPublicKey, + signingKey: PrivateKey, + signingPublicKey: PublicKey, + nowMillis: Long, + extensions: ByteArray, + ): ByteArray { + val publicKeyBits = pkcs1PublicKey(certificatePublicKey) + val notAfterMillis = nowMillis + CERTIFICATE_LIFETIME_SECONDS * MILLIS_PER_SECOND + require(nowMillis in 0 until notAfterMillis) { "Invalid certificate validity" } + val tbs = sequence( + explicit(0, integer(BigInteger.valueOf(2))), + integer(BigInteger.ZERO), + sha256WithRsa, + issuer, + sequence( + certificateTime(nowMillis), + certificateTime(notAfterMillis), + ), + subject, + sequence(rsaEncryption, bitString(publicKeyBits)), + explicit(3, extensions), + ) + val signer = Signature.getInstance("SHA256withRSA").apply { + initSign(signingKey) + update(tbs) + } + val signature = signer.sign() + val encoded = sequence(tbs, sha256WithRsa, bitString(signature)) + verifyGeneratedCertificate(tbs, signature, signingPublicKey) + return encoded + } + + /** JBR's CertificateFactory rejects the locked empty issuer DN, so verify the signed TBS directly. */ + private fun verifyGeneratedCertificate(tbs: ByteArray, signature: ByteArray, signingPublicKey: PublicKey) { + val verifier = Signature.getInstance("SHA256withRSA").apply { + initVerify(signingPublicKey) + update(tbs) + } + if (!verifier.verify(signature)) throw GeneralSecurityException("Generated certificate signature does not verify") + } + + private fun rootExtensions(): ByteArray = sequence( + extension("2.5.29.19", critical = true, value = sequence(boolean(true))), + ) + + private fun leafExtensions( + publicKey: RSAPublicKey, + includeSubjectKeyIdentifier: Boolean, + ): ByteArray { + val extensions = mutableListOf( + extension("2.5.29.19", critical = true, value = sequence()), + ) + if (includeSubjectKeyIdentifier) { + extensions += extension( + "2.5.29.14", + critical = false, + value = octetString(MessageDigest.getInstance("SHA-1").digest(pkcs1PublicKey(publicKey))), + ) + } + extensions += extension( + "2.5.29.15", + critical = true, + value = bitString(byteArrayOf(0xa0.toByte()), unusedBits = 5), + ) + return sequence(*extensions.toTypedArray()) + } + + private fun extension(oid: String, critical: Boolean, value: ByteArray): ByteArray = + if (critical) sequence(objectIdentifier(oid), boolean(true), octetString(value)) + else sequence(objectIdentifier(oid), octetString(value)) + + private fun parsePkcs1RsaPublicKey(pem: ByteArray): RSAPublicKey { + val text = pem.toString(StandardCharsets.US_ASCII).trim() + val begin = "-----BEGIN RSA PUBLIC KEY-----" + val end = "-----END RSA PUBLIC KEY-----" + require(text.startsWith(begin) && text.endsWith(end)) { "Expected a PKCS#1 RSA public key" } + val encoded = text.substring(begin.length, text.length - end.length).filterNot(Char::isWhitespace) + val der = Base64.getDecoder().decode(encoded) + val outer = DerReader(der) + val sequence = outer.readConstructed(0x30) + val modulus = sequence.readPositiveInteger() + val exponent = sequence.readPositiveInteger() + require(sequence.exhausted() && outer.exhausted()) { "Trailing data in RSA public key" } + return KeyFactory.getInstance("RSA").generatePublic(RSAPublicKeySpec(modulus, exponent)) as RSAPublicKey + } + + private fun pkcs1PublicKey(publicKey: RSAPublicKey): ByteArray = sequence( + integer(publicKey.modulus), + integer(publicKey.publicExponent), + ) + + private fun distinguishedName(commonName: String?): ByteArray = + if (commonName == null) sequence() else sequence(set(sequence(objectIdentifier("2.5.4.3"), utf8String(commonName)))) + + private fun pem(label: String, der: ByteArray): ByteArray { + val encoded = Base64.getMimeEncoder(64, byteArrayOf('\n'.code.toByte())).encodeToString(der) + return "-----BEGIN $label-----\n$encoded\n-----END $label-----\n".toByteArray(StandardCharsets.US_ASCII) + } + + private fun algorithmIdentifier(oid: String): ByteArray = sequence(objectIdentifier(oid), der(0x05, ByteArray(0))) + private fun sequence(vararg values: ByteArray): ByteArray = der(0x30, concatenate(*values)) + private fun set(vararg values: ByteArray): ByteArray = der(0x31, concatenate(*values)) + private fun explicit(number: Int, value: ByteArray): ByteArray = der(0xa0 + number, value) + private fun utf8String(value: String): ByteArray = der(0x0c, value.toByteArray(StandardCharsets.UTF_8)) + + private fun certificateTime(valueMillis: Long): ByteArray { + val utc = TimeZone.getTimeZone("UTC") + val year = SimpleDateFormat("yyyy", Locale.US).apply { timeZone = utc } + .format(Date(valueMillis)).toInt() + val utcTime = year <= UTC_TIME_LAST_YEAR + val formatter = SimpleDateFormat( + if (utcTime) "yyMMddHHmmss'Z'" else "yyyyMMddHHmmss'Z'", + Locale.US, + ).apply { timeZone = utc } + return der(if (utcTime) 0x17 else 0x18, formatter.format(Date(valueMillis)).toByteArray(StandardCharsets.US_ASCII)) + } + + private fun integer(value: BigInteger): ByteArray { + require(value.signum() >= 0) { "DER integer must be non-negative" } + return der(0x02, value.toByteArray()) + } + + private fun boolean(value: Boolean): ByteArray = der(0x01, byteArrayOf(if (value) 0xff.toByte() else 0)) + private fun octetString(value: ByteArray): ByteArray = der(0x04, value) + private fun bitString(value: ByteArray, unusedBits: Int = 0): ByteArray { + require(unusedBits in 0..7) { "Invalid number of unused bits" } + return der(0x03, byteArrayOf(unusedBits.toByte()) + value) + } + + private fun objectIdentifier(value: String): ByteArray { + val arcs = value.split('.').map(String::toLong) + require(arcs.size >= 2 && arcs[0] in 0..2 && arcs[1] >= 0 && (arcs[0] == 2L || arcs[1] < 40)) { + "Invalid object identifier" + } + val output = ByteArrayOutputStream() + writeBase128(output, arcs[0] * 40 + arcs[1]) + arcs.drop(2).forEach { arc -> require(arc >= 0) { "Invalid object identifier" }; writeBase128(output, arc) } + return der(0x06, output.toByteArray()) + } + + private fun writeBase128(output: ByteArrayOutputStream, value: Long) { + var remaining = value + val bytes = ByteArray(10) + var offset = bytes.size + bytes[--offset] = (remaining and 0x7f).toByte() + remaining = remaining ushr 7 + while (remaining != 0L) { + bytes[--offset] = ((remaining and 0x7f) or 0x80).toByte() + remaining = remaining ushr 7 + } + output.write(bytes, offset, bytes.size - offset) + } + + private fun der(tag: Int, content: ByteArray): ByteArray { + val output = ByteArrayOutputStream(1 + 5 + content.size) + output.write(tag) + if (content.size < 0x80) output.write(content.size) else { + var length = content.size + val bytes = ByteArray(4) + var offset = bytes.size + while (length != 0) { bytes[--offset] = length.toByte(); length = length ushr 8 } + output.write(0x80 or (bytes.size - offset)) + output.write(bytes, offset, bytes.size - offset) + } + output.write(content) + return output.toByteArray() + } + + private fun concatenate(vararg values: ByteArray): ByteArray { + val output = ByteArrayOutputStream(values.sumOf(ByteArray::size)) + values.forEach(output::write) + return output.toByteArray() + } + + private class DerReader(private val bytes: ByteArray) { + private var offset = 0 + + fun readConstructed(expectedTag: Int): DerReader = DerReader(readValue(expectedTag)) + + fun readPositiveInteger(): BigInteger { + val value = readValue(0x02) + require(value.isNotEmpty() && (value[0].toInt() and 0x80) == 0) { "Invalid positive DER integer" } + require(value.size == 1 || value[0].toInt() != 0 || (value[1].toInt() and 0x80) != 0) { + "Non-minimal positive DER integer" + } + return BigInteger(value) + } + + fun exhausted(): Boolean = offset == bytes.size + + private fun readValue(expectedTag: Int): ByteArray { + require(offset < bytes.size && bytes[offset++].toInt() and 0xff == expectedTag) { "Unexpected DER tag" } + require(offset < bytes.size) { "Missing DER length" } + val first = bytes[offset++].toInt() and 0xff + val length = if (first < 0x80) first else { + val count = first and 0x7f + require(count in 1..4 && offset + count <= bytes.size) { "Invalid DER length" } + require(bytes[offset].toInt() != 0) { "Non-minimal DER length" } + var result = 0 + repeat(count) { result = (result shl 8) or (bytes[offset++].toInt() and 0xff) } + val minimumCount = (Integer.SIZE - Integer.numberOfLeadingZeros(result) + 7) / 8 + require(result >= 0x80 && count == minimumCount) { "Non-minimal DER length" } + result + } + require(length >= 0 && offset + length <= bytes.size) { "DER value is truncated" } + return bytes.copyOfRange(offset, offset + length).also { offset += length } + } + } +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/transport/LockdownPairingClient.kt b/shared/src/main/java/com/shilapi/xcertplay/transport/LockdownPairingClient.kt new file mode 100644 index 0000000..54d3c38 --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/transport/LockdownPairingClient.kt @@ -0,0 +1,251 @@ +package com.shilapi.xcertplay.transport + +import android.util.Log +import java.io.IOException +import java.security.GeneralSecurityException + +/** + * Blocking, plaintext Lockdown pairing over an already-open USBMUX host. + * + * Call [pair] from a worker thread, never Android's main thread. This client owns only the + * connection it creates: it closes the plist channel (and therefore that connection) after every + * outcome, but leaves [Iap2UsbMuxHost] open for its caller. It neither persists material nor + * starts a session, negotiates TLS, starts a service, or establishes any CarPlay/iAP2 session. + */ +class LockdownPairingClient( + private val host: Iap2UsbMuxHost, +) { + /** + * Fetches the two pairing inputs, generates the local record, and sends plaintext Pair. + * + * [totalTimeoutMillis] covers the entire operation, including a pending pairing dialog. + * [isCancelled] is checked between blocking protocol operations and while waiting to retry a + * pending dialog; it cannot interrupt an already-blocking plist read, which is bounded to + * five seconds. It is intentionally a small synchronous callback rather than a coroutine. + */ + @Throws(IphoneUsbException::class, LockdownPairingException::class, GeneralSecurityException::class) + fun pair( + label: String, + hostId: String, + systemBuid: String, + totalTimeoutMillis: Long, + isCancelled: () -> Boolean = { false }, + ): PairedRecord { + require(label.isNotBlank()) { "label must not be blank" } + require(hostId.isNotBlank()) { "hostId must not be blank" } + require(systemBuid.isNotBlank()) { "systemBuid must not be blank" } + require(totalTimeoutMillis in 1..MAXIMUM_TOTAL_TIMEOUT_MILLIS) { + "totalTimeoutMillis must be between 1 and $MAXIMUM_TOTAL_TIMEOUT_MILLIS" + } + + val deadline = Deadline(totalTimeoutMillis) + var pairRecord: LockdownPairRecord? = null + var attempt = 0 + while (true) { + checkCancelled(isCancelled) + attempt += 1 + val connection = host.connect( + destinationPort = Iap2UsbMuxHost.LOCKDOWN_PORT, + timeoutMillis = stepTimeoutMillis(deadline), + ) + var pending = false + LockdownPlistChannel(connection).use { channel -> + setUntrustedHostBuid(channel, label, systemBuid, deadline, isCancelled) + val record = pairRecord ?: generatePairRecord( + channel = channel, + label = label, + hostId = hostId, + systemBuid = systemBuid, + deadline = deadline, + isCancelled = isCancelled, + ).also { + pairRecord = it + Log.i( + TAG, + "lockdown pair prepared hostId=uuid systemBuid=uuid " + + "deviceKey=${it.devicePublicKeyPem.size} deviceCert=${it.deviceCertificatePem.size} " + + "hostCert=${it.hostCertificatePem.size} rootCert=${it.rootCertificatePem.size}", + ) + } + Log.i(TAG, "lockdown pair attempt=$attempt") + val response = channel.request(pairRequest(label, record), stepTimeoutMillis(deadline)) + checkCancelled(isCancelled) + when (val error = response.errorCodeOrNull()) { + null -> return PairedRecord(record, response.entries["EscrowBag"].asOptionalData()) + "PairingDialogResponsePending" -> pending = true + "UserDeniedPairing" -> throw LockdownPairingException.UserDeniedPairing + "PasswordProtected" -> throw LockdownPairingException.PasswordProtected + else -> throw LockdownPairingException.RemoteError(error) + } + } + if (pending) { + Log.i(TAG, "lockdown trust pending; reconnecting before retry") + waitForRetry(deadline, isCancelled) + } + } + } + + private fun generatePairRecord( + channel: LockdownPlistChannel, + label: String, + hostId: String, + systemBuid: String, + deadline: Deadline, + isCancelled: () -> Boolean, + ): LockdownPairRecord { + val devicePublicKey = getValue(channel, label, "DevicePublicKey", deadline, isCancelled) + as? LockdownPlistValue.Data + ?: throw LockdownPairingException.InvalidResponse("DevicePublicKey was not data") + val wifiAddress = getValue(channel, label, "WiFiAddress", deadline, isCancelled) + as? LockdownPlistValue.Text + ?: throw LockdownPairingException.InvalidResponse("WiFiAddress was not text") + return LockdownPairRecordGenerator.generate( + devicePublicKeyPkcs1Pem = devicePublicKey.bytes, + wifiAddress = wifiAddress.value, + hostId = hostId, + systemBuid = systemBuid, + ) + } + + private fun pairRequest( + label: String, + pairRecord: LockdownPairRecord, + ): LockdownPlistValue.Dictionary = LockdownPlistValue.Dictionary( + linkedMapOf( + "Label" to LockdownPlistValue.Text(label), + "PairRecord" to pairRecord.toPairRequestDictionary(), + "Request" to LockdownPlistValue.Text("Pair"), + "ProtocolVersion" to LockdownPlistValue.Text("2"), + "PairingOptions" to LockdownPlistValue.Dictionary( + linkedMapOf("ExtendedPairingErrors" to LockdownPlistValue.Boolean(true)), + ), + ), + ) + + private fun setUntrustedHostBuid( + channel: LockdownPlistChannel, + label: String, + systemBuid: String, + deadline: Deadline, + isCancelled: () -> Boolean, + ) { + checkCancelled(isCancelled) + val response = channel.request( + LockdownPlistValue.Dictionary( + linkedMapOf( + "Label" to LockdownPlistValue.Text(label), + "Request" to LockdownPlistValue.Text("SetValue"), + "Key" to LockdownPlistValue.Text("UntrustedHostBUID"), + "Value" to LockdownPlistValue.Text(systemBuid), + ), + ), + stepTimeoutMillis(deadline), + ) + checkCancelled(isCancelled) + response.errorCodeOrNull()?.let { throw LockdownPairingException.RemoteError(it) } + Log.i(TAG, "lockdown UntrustedHostBUID set") + } + + private fun getValue( + channel: LockdownPlistChannel, + label: String, + key: String, + deadline: Deadline, + isCancelled: () -> Boolean, + ): LockdownPlistValue { + checkCancelled(isCancelled) + val response = channel.request( + LockdownPlistValue.Dictionary( + linkedMapOf( + "Label" to LockdownPlistValue.Text(label), + "Request" to LockdownPlistValue.Text("GetValue"), + "Key" to LockdownPlistValue.Text(key), + ), + ), + stepTimeoutMillis(deadline), + ) + checkCancelled(isCancelled) + response.errorCodeOrNull()?.let { throw LockdownPairingException.RemoteError(it) } + return response.entries["Value"] + ?: throw LockdownPairingException.InvalidResponse("GetValue response omitted Value") + } + + private fun LockdownPlistValue?.asOptionalData(): ByteArray? = when (this) { + null -> null + is LockdownPlistValue.Data -> bytes + else -> throw LockdownPairingException.InvalidResponse("EscrowBag was not data") + } + + private fun LockdownPlistValue.Dictionary.errorCodeOrNull(): String? { + return when (val error = entries["Error"] ?: return null) { + is LockdownPlistValue.Text -> error.value + is LockdownPlistValue.Integer -> (entries["ErrorString"] as? LockdownPlistValue.Text)?.value + ?: error.value.toString() + else -> throw LockdownPairingException.InvalidResponse("Error was not text or integer") + } + } + + private fun checkCancelled(isCancelled: () -> Boolean) { + if (isCancelled()) throw LockdownPairingException.Cancelled + } + + private fun stepTimeoutMillis(deadline: Deadline): Long = + minOf(MAXIMUM_STEP_TIMEOUT_MILLIS, deadline.remainingMillis()) + + private fun waitForRetry(deadline: Deadline, isCancelled: () -> Boolean) { + var remaining = RETRY_INTERVAL_MILLIS + while (remaining > 0) { + checkCancelled(isCancelled) + val sleepMillis = minOf(RETRY_CHECK_MILLIS, remaining, deadline.remainingMillis()) + try { + Thread.sleep(sleepMillis) + } catch (_: InterruptedException) { + Thread.currentThread().interrupt() + throw LockdownPairingException.Cancelled + } + remaining -= sleepMillis + } + } + + private class Deadline(timeoutMillis: Long) { + private val deadlineNanos = System.nanoTime() + timeoutMillis * NANOS_PER_MILLISECOND + + fun remainingMillis(): Long { + val remainingNanos = deadlineNanos - System.nanoTime() + if (remainingNanos <= 0) throw LockdownPairingException.TimedOut + return (remainingNanos + NANOS_PER_MILLISECOND - 1) / NANOS_PER_MILLISECOND + } + } + + private companion object { + const val TAG = "xcertplay-usb" + const val RETRY_INTERVAL_MILLIS = 1_000L + const val RETRY_CHECK_MILLIS = 100L + const val NANOS_PER_MILLISECOND = 1_000_000L + const val MAXIMUM_STEP_TIMEOUT_MILLIS = 5_000L + const val MAXIMUM_TOTAL_TIMEOUT_MILLIS = 5 * 60_000L + } +} + +/** Successful pairing material kept in memory only. Byte-array accessors return defensive copies. */ +class PairedRecord internal constructor( + val pairRecord: LockdownPairRecord, + escrowBag: ByteArray?, +) { + private val storedEscrowBag = escrowBag?.copyOf() + + val escrowBag: ByteArray? + get() = storedEscrowBag?.copyOf() + + override fun toString(): String = "PairedRecord(redacted)" +} + +/** Typed pairing failures; their messages never include pairing keys, certificates, or escrow data. */ +sealed class LockdownPairingException(message: String) : IOException(message) { + data object Cancelled : LockdownPairingException("Lockdown pairing was cancelled") + data object TimedOut : LockdownPairingException("Lockdown pairing timed out") + data object UserDeniedPairing : LockdownPairingException("The user denied Lockdown pairing") + data object PasswordProtected : LockdownPairingException("The iPhone is password protected") + class RemoteError(val code: String) : LockdownPairingException("Lockdown pairing failed: $code") + class InvalidResponse(message: String) : LockdownPairingException("Invalid Lockdown pairing response: $message") +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/transport/LockdownPlistChannel.kt b/shared/src/main/java/com/shilapi/xcertplay/transport/LockdownPlistChannel.kt new file mode 100644 index 0000000..fdab0d2 --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/transport/LockdownPlistChannel.kt @@ -0,0 +1,331 @@ +package com.shilapi.xcertplay.transport + +import android.util.Xml +import java.io.Closeable +import java.io.StringReader +import java.nio.charset.StandardCharsets +import java.util.Base64 +import org.xmlpull.v1.XmlPullParser + +/** The small plist value set needed by Lockdown messages. */ +sealed class LockdownPlistValue { + data class Dictionary(val entries: Map) : LockdownPlistValue() + data class Text(val value: String) : LockdownPlistValue() + data class Integer(val value: Long) : LockdownPlistValue() + data class Boolean(val value: kotlin.Boolean) : LockdownPlistValue() + + class Data(bytes: ByteArray) : LockdownPlistValue() { + private val value = bytes.copyOf() + + val bytes: ByteArray + get() = value.copyOf() + } +} + +/** + * Blocking Lockdown plist framing over one already-connected USBMUX TCP byte stream. + * + * A frame is a four-byte big-endian XML plist byte length followed by UTF-8 XML. This class does + * not pair, start a session or service, negotiate TLS, or establish any CarPlay/carkit session. + * Calls may block and must run away from Android's main thread. + */ +class LockdownPlistChannel( + private val connection: BlockingDuplexByteStream, + private val maximumMessageBytes: Int = DEFAULT_MAXIMUM_MESSAGE_BYTES, + private val defaultTimeoutMillis: Long = DEFAULT_TIMEOUT_MILLIS, +) : Closeable { + private val stateLock = Any() + private val ioLock = Any() + private var closed = false + private var detached = false + + init { + require(maximumMessageBytes in 1..ABSOLUTE_MAXIMUM_MESSAGE_BYTES) { + "maximumMessageBytes must be between 1 and $ABSOLUTE_MAXIMUM_MESSAGE_BYTES" + } + require(defaultTimeoutMillis in 1..MAXIMUM_TIMEOUT_MILLIS) { + "defaultTimeoutMillis must be between 1 and $MAXIMUM_TIMEOUT_MILLIS" + } + } + + /** Sends one root dictionary as a length-prefixed XML plist. */ + fun send(message: LockdownPlistValue.Dictionary) = synchronized(ioLock) { + checkOpen() + sendLocked(message) + } + + /** Receives one root dictionary, consuming exactly one framed XML plist. */ + fun receive(timeoutMillis: Long = defaultTimeoutMillis): LockdownPlistValue.Dictionary = synchronized(ioLock) { + checkOpen() + receiveLocked(timeoutMillis) + } + + /** Sends [message] and receives its corresponding response without interleaving another request. */ + fun request( + message: LockdownPlistValue.Dictionary, + timeoutMillis: Long = defaultTimeoutMillis, + ): LockdownPlistValue.Dictionary = synchronized(ioLock) { + validateTimeout(timeoutMillis) + checkOpen() + sendLocked(message) + receiveLocked(timeoutMillis) + } + + /** + * Permanently closes this channel without closing its stream and transfers stream ownership. + * + * Detach is serialized after any active request and may succeed exactly once. Later channel + * operations fail as closed; later [close] calls are no-ops for the detached stream. + */ + fun detach(): BlockingDuplexByteStream = synchronized(ioLock) { + synchronized(stateLock) { + if (closed) { + val state = if (detached) "already detached" else "closed" + throw IphoneUsbException.DeviceUnavailable("Lockdown plist channel is $state") + } + detached = true + closed = true + connection + } + } + + override fun close() { + val shouldClose = synchronized(stateLock) { + if (closed) false else { + closed = true + true + } + } + if (shouldClose && !detached) connection.close() + } + + private fun sendLocked(message: LockdownPlistValue.Dictionary) { + val xml = encode(message).toByteArray(StandardCharsets.UTF_8) + if (xml.isEmpty() || xml.size > maximumMessageBytes) { + throw IphoneUsbException.Protocol("Lockdown plist message length ${xml.size} is outside 1..$maximumMessageBytes") + } + val frame = ByteArray(LENGTH_BYTES + xml.size) + putU32(frame, 0, xml.size.toLong()) + xml.copyInto(frame, LENGTH_BYTES) + connection.send(frame) + } + + private fun receiveLocked(timeoutMillis: Long): LockdownPlistValue.Dictionary { + validateTimeout(timeoutMillis) + val deadlineNanos = System.nanoTime() + timeoutMillis * NANOS_PER_MILLISECOND + val header = readFully(LENGTH_BYTES, deadlineNanos) + val length = readU32(header, 0) + if (length !in 1..maximumMessageBytes.toLong()) { + throw IphoneUsbException.Protocol("Invalid Lockdown plist message length $length (maximum $maximumMessageBytes)") + } + val xml = readFully(length.toInt(), deadlineNanos) + return parse(xml) + } + + private fun readFully(byteCount: Int, deadlineNanos: Long): ByteArray { + val result = ByteArray(byteCount) + var offset = 0 + while (offset < result.size) { + val remainingNanos = deadlineNanos - System.nanoTime() + if (remainingNanos <= 0) { + throw IphoneUsbException.TimedOut("Timed out while reading Lockdown plist frame") + } + val timeoutMillis = maxOf(1L, (remainingNanos + NANOS_PER_MILLISECOND - 1) / NANOS_PER_MILLISECOND) + val chunk = connection.recv(result.size - offset, timeoutMillis) + ?: throw IphoneUsbException.TimedOut("Timed out while reading Lockdown plist frame") + if (chunk.isEmpty()) { + throw IphoneUsbException.Protocol("USBMUX TCP stream ended inside a Lockdown plist frame") + } + chunk.copyInto(result, offset) + offset += chunk.size + } + return result + } + + private fun parse(xml: ByteArray): LockdownPlistValue.Dictionary { + try { + val parser = Xml.newPullParser().apply { + setFeature(XmlPullParser.FEATURE_PROCESS_DOCDECL, false) + setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false) + setInput(StringReader(xml.toString(StandardCharsets.UTF_8))) + } + if (parser.nextTag() != XmlPullParser.START_TAG || parser.name != "plist") { + throw IphoneUsbException.Protocol("Lockdown plist root must be ") + } + if (parser.nextTag() != XmlPullParser.START_TAG) { + throw IphoneUsbException.Protocol("Lockdown plist must contain exactly one root value") + } + val value = parseValue(parser, 0) + if (parser.nextTag() != XmlPullParser.END_TAG || parser.name != "plist") { + throw IphoneUsbException.Protocol("Lockdown plist must contain exactly one root value") + } + while (true) { + when (parser.nextToken()) { + XmlPullParser.END_DOCUMENT -> break + XmlPullParser.TEXT, XmlPullParser.IGNORABLE_WHITESPACE -> { + if (!parser.text.orEmpty().isBlank()) { + throw IphoneUsbException.Protocol("Unexpected content after Lockdown plist") + } + } + else -> throw IphoneUsbException.Protocol("Unexpected content after Lockdown plist") + } + } + return value as? LockdownPlistValue.Dictionary + ?: throw IphoneUsbException.Protocol("Lockdown plist root value must be ") + } catch (error: IphoneUsbException) { + throw error + } catch (error: Exception) { + throw IphoneUsbException.Protocol("Invalid Lockdown plist XML: ${error.message ?: error.javaClass.simpleName}") + } + } + + private fun parseValue(parser: XmlPullParser, depth: Int): LockdownPlistValue { + if (depth > MAXIMUM_NESTING) throw IphoneUsbException.Protocol("Lockdown plist nesting exceeds $MAXIMUM_NESTING") + return when (parser.name) { + "dict" -> { + val entries = LinkedHashMap() + while (parser.nextTag() == XmlPullParser.START_TAG) { + if (parser.name != "key" || entries.size == MAXIMUM_DICTIONARY_ENTRIES) { + throw IphoneUsbException.Protocol("Invalid Lockdown plist dictionary") + } + val keyText = simpleText(parser, "key") + if (entries.containsKey(keyText)) throw IphoneUsbException.Protocol("Duplicate Lockdown plist key '$keyText'") + if (parser.nextTag() != XmlPullParser.START_TAG) { + throw IphoneUsbException.Protocol("Lockdown plist dictionary value is missing") + } + entries[keyText] = parseValue(parser, depth + 1) + } + if (parser.name != "dict") throw IphoneUsbException.Protocol("Invalid Lockdown plist dictionary") + LockdownPlistValue.Dictionary(entries) + } + "string" -> LockdownPlistValue.Text(simpleText(parser, "string")) + "integer" -> LockdownPlistValue.Integer( + simpleText(parser, "integer").trim().toLongOrNull() + ?: throw IphoneUsbException.Protocol("Invalid Lockdown plist integer"), + ) + "true" -> { + requireEmpty(parser, "true") + LockdownPlistValue.Boolean(true) + } + "false" -> { + requireEmpty(parser, "false") + LockdownPlistValue.Boolean(false) + } + "data" -> { + val encoded = simpleText(parser, "data").filterNot(Char::isWhitespace) + try { + LockdownPlistValue.Data(Base64.getDecoder().decode(encoded)) + } catch (error: IllegalArgumentException) { + throw IphoneUsbException.Protocol("Invalid base64 Lockdown plist data") + } + } + else -> throw IphoneUsbException.Protocol("Unsupported Lockdown plist value <${parser.name}>") + } + } + + private fun encode(message: LockdownPlistValue.Dictionary): String = buildString { + append("") + append("") + append("") + appendValue(message, 0) + append("") + } + + private fun StringBuilder.appendValue(value: LockdownPlistValue, depth: Int) { + if (depth > MAXIMUM_NESTING) throw IphoneUsbException.Protocol("Lockdown plist nesting exceeds $MAXIMUM_NESTING") + when (value) { + is LockdownPlistValue.Dictionary -> { + if (value.entries.size > MAXIMUM_DICTIONARY_ENTRIES) { + throw IphoneUsbException.Protocol("Lockdown plist dictionary exceeds $MAXIMUM_DICTIONARY_ENTRIES entries") + } + append("") + value.entries.forEach { (key, entryValue) -> + append("").appendEscaped(key).append("") + appendValue(entryValue, depth + 1) + } + append("") + } + is LockdownPlistValue.Text -> append("").appendEscaped(value.value).append("") + is LockdownPlistValue.Integer -> append("").append(value.value).append("") + is LockdownPlistValue.Boolean -> append(if (value.value) "" else "") + is LockdownPlistValue.Data -> append("") + .append(Base64.getEncoder().encodeToString(value.bytes)) + .append("") + } + } + + private fun StringBuilder.appendEscaped(value: String): StringBuilder = apply { + value.forEach { character -> + append( + when (character) { + '&' -> "&" + '<' -> "<" + '>' -> ">" + '\"' -> """ + '\'' -> "'" + else -> character.toString() + }, + ) + } + } + + private fun simpleText(parser: XmlPullParser, name: String): String { + val text = StringBuilder() + while (true) { + when (parser.nextToken()) { + XmlPullParser.TEXT, XmlPullParser.CDSECT -> text.append(parser.text.orEmpty()) + XmlPullParser.ENTITY_REF -> text.append( + parser.text ?: throw IphoneUsbException.Protocol("Unknown entity in Lockdown plist <$name>"), + ) + XmlPullParser.END_TAG -> { + if (parser.name != name) throw IphoneUsbException.Protocol("Invalid Lockdown plist <$name>") + return text.toString() + } + XmlPullParser.START_TAG -> throw IphoneUsbException.Protocol("Lockdown plist <$name> must not contain elements") + XmlPullParser.END_DOCUMENT -> throw IphoneUsbException.Protocol("Lockdown plist ended inside <$name>") + } + } + } + + private fun requireEmpty(parser: XmlPullParser, name: String) { + if (parser.nextTag() != XmlPullParser.END_TAG || parser.name != name) { + throw IphoneUsbException.Protocol("Lockdown plist <$name> must be empty") + } + } + + private fun checkOpen() { + synchronized(stateLock) { + if (closed) throw IphoneUsbException.DeviceUnavailable("Lockdown plist channel is closed") + } + } + + private fun validateTimeout(timeoutMillis: Long) { + require(timeoutMillis in 1..MAXIMUM_TIMEOUT_MILLIS) { + "timeoutMillis must be between 1 and $MAXIMUM_TIMEOUT_MILLIS" + } + } + + private companion object { + const val LENGTH_BYTES = 4 + const val DEFAULT_MAXIMUM_MESSAGE_BYTES = 1 * 1024 * 1024 + const val ABSOLUTE_MAXIMUM_MESSAGE_BYTES = 4 * 1024 * 1024 + const val DEFAULT_TIMEOUT_MILLIS = 5_000L + const val MAXIMUM_TIMEOUT_MILLIS = 5 * 60_000L + const val MAXIMUM_NESTING = 64 + const val MAXIMUM_DICTIONARY_ENTRIES = 1_024 + const val NANOS_PER_MILLISECOND = 1_000_000L + + fun putU32(target: ByteArray, offset: Int, value: Long) { + target[offset] = (value ushr 24).toByte() + target[offset + 1] = (value ushr 16).toByte() + target[offset + 2] = (value ushr 8).toByte() + target[offset + 3] = value.toByte() + } + + fun readU32(source: ByteArray, offset: Int): Long = + ((source[offset].toLong() and 0xff) shl 24) or + ((source[offset + 1].toLong() and 0xff) shl 16) or + ((source[offset + 2].toLong() and 0xff) shl 8) or + (source[offset + 3].toLong() and 0xff) + } +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/transport/LockdownTlsEngineFactory.kt b/shared/src/main/java/com/shilapi/xcertplay/transport/LockdownTlsEngineFactory.kt new file mode 100644 index 0000000..6f1fe6e --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/transport/LockdownTlsEngineFactory.kt @@ -0,0 +1,104 @@ +package com.shilapi.xcertplay.transport + +import android.annotation.SuppressLint +import java.io.ByteArrayInputStream +import java.nio.charset.StandardCharsets +import java.security.GeneralSecurityException +import java.security.KeyFactory +import java.security.KeyStore +import java.security.cert.CertificateFactory +import java.security.cert.X509Certificate +import java.security.spec.PKCS8EncodedKeySpec +import java.util.Base64 +import javax.net.ssl.KeyManagerFactory +import javax.net.ssl.SSLContext +import javax.net.ssl.SSLEngine +import javax.net.ssl.X509TrustManager + +/** + * Builds an unstarted client TLS engine for the dedicated USB Lockdown channel. + * + * Matching the locked transport behavior, the engine does not authenticate the peer certificate. + * It must not be reused for internet or general-purpose TLS connections. + */ +object LockdownTlsEngineFactory { + @Throws(GeneralSecurityException::class) + fun create(pairRecord: LockdownPairRecord): SSLEngine { + val password = charArrayOf('l', 'o', 'c', 'k', 'd', 'o', 'w', 'n') + // Lockdown presents the root identity from the pair record for both the session and + // service TLS channels. HostCertificate is part of pairing, not this TLS identity. + val privateKeyPem = pairRecord.rootPrivateKeyPem + val certificatePem = pairRecord.rootCertificatePem + var privateKeyDer: ByteArray? = null + try { + privateKeyDer = decodePkcs8Pem(privateKeyPem) + val privateKey = KeyFactory.getInstance("RSA") + .generatePrivate(PKCS8EncodedKeySpec(privateKeyDer)) + val certificate = CertificateFactory.getInstance("X.509") + .generateCertificate(ByteArrayInputStream(certificatePem)) as X509Certificate + val keyStore = KeyStore.getInstance(KeyStore.getDefaultType()).apply { + load(null, password) + setKeyEntry(KEY_ALIAS, privateKey, password, arrayOf(certificate)) + } + val keyManagers = KeyManagerFactory.getInstance("PKIX").apply { + init(keyStore, password) + }.keyManagers + val context = SSLContext.getInstance("TLS").apply { + init(keyManagers, arrayOf(UsbLockdownTrustManager), null) + } + return context.createSSLEngine(PEER_HOST, PEER_PORT).apply { + useClientMode = true + sslParameters = sslParameters.apply { endpointIdentificationAlgorithm = null } + } + } finally { + password.fill('\u0000') + privateKeyPem.fill(0) + certificatePem.fill(0) + privateKeyDer?.fill(0) + } + } + + private fun decodePkcs8Pem(pem: ByteArray): ByteArray { + val begin = pem.indexOf(BEGIN_PRIVATE_KEY) + val end = pem.indexOf(END_PRIVATE_KEY, begin + BEGIN_PRIVATE_KEY.size) + if (begin < 0 || end < 0) throw GeneralSecurityException("Invalid PKCS#8 private key PEM") + val encoded = pem.copyOfRange(begin + BEGIN_PRIVATE_KEY.size, end) + return try { + Base64.getMimeDecoder().decode(encoded) + } catch (error: IllegalArgumentException) { + throw GeneralSecurityException("Invalid PKCS#8 private key PEM", error) + } finally { + encoded.fill(0) + } + } + + private fun ByteArray.indexOf(needle: ByteArray, startIndex: Int = 0): Int { + if (needle.isEmpty()) return startIndex.coerceIn(0, size) + for (offset in startIndex.coerceAtLeast(0)..size - needle.size) { + var matches = true + for (index in needle.indices) { + if (this[offset + index] != needle[index]) { + matches = false + break + } + } + if (matches) return offset + } + return -1 + } + + @SuppressLint("CustomX509TrustManager", "TrustAllX509TrustManager") + private object UsbLockdownTrustManager : X509TrustManager { + override fun checkClientTrusted(chain: Array?, authType: String?) = Unit + + override fun checkServerTrusted(chain: Array?, authType: String?) = Unit + + override fun getAcceptedIssuers(): Array = emptyArray() + } + + private const val KEY_ALIAS = "lockdown-host" + private const val PEER_HOST = "Device" + private const val PEER_PORT = 0 + private val BEGIN_PRIVATE_KEY = "-----BEGIN PRIVATE KEY-----".toByteArray(StandardCharsets.US_ASCII) + private val END_PRIVATE_KEY = "-----END PRIVATE KEY-----".toByteArray(StandardCharsets.US_ASCII) +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/transport/NcmFunctionDiscovery.kt b/shared/src/main/java/com/shilapi/xcertplay/transport/NcmFunctionDiscovery.kt new file mode 100644 index 0000000..47252bc --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/transport/NcmFunctionDiscovery.kt @@ -0,0 +1,66 @@ +package com.shilapi.xcertplay.transport + +import android.hardware.usb.UsbConfiguration +import android.hardware.usb.UsbConstants +import android.hardware.usb.UsbEndpoint +import android.hardware.usb.UsbInterface + +/** + * Finds the NCM control/data interface pair inside an active iPhone configuration. + * + * LIVI claims the control interface, claims the data interface, and selects data alternate + * setting 1, the setting that carries the bulk endpoints. This class only reads descriptors. + */ +object NcmFunctionDiscovery { + const val CONTROL_CLASS = 0x02 + const val CONTROL_SUBCLASS = 0x0d + const val DATA_CLASS = 0x0a + const val APPLE_ETHERNET_CLASS = 0xff + const val APPLE_ETHERNET_SUBCLASS = 0xfd + const val APPLE_ETHERNET_PROTOCOL = 0x01 + const val DATA_ALTERNATE_SETTING = 1 + + data class NcmFunction( + val control: UsbInterface, + val data: UsbInterface, + val statusIn: UsbEndpoint?, + val bulkIn: UsbEndpoint, + val bulkOut: UsbEndpoint, + ) + + fun find(configuration: UsbConfiguration): NcmFunction? { + return findCdcNcm(configuration) + } + + private fun findCdcNcm(configuration: UsbConfiguration): NcmFunction? { + val control = interfaces(configuration).firstOrNull { + it.interfaceClass == CONTROL_CLASS && it.interfaceSubclass == CONTROL_SUBCLASS + } ?: return null + val data = interfaces(configuration) + .filter { it.interfaceClass == DATA_CLASS && bulkEndpoints(it) != null } + .minByOrNull { if (it.alternateSetting == DATA_ALTERNATE_SETTING) 0 else 1 } + ?: return null + val endpoints = bulkEndpoints(data) ?: return null + val statusIn = (0 until control.endpointCount) + .map(control::getEndpoint) + .singleOrNull { + it.direction == UsbConstants.USB_DIR_IN && + it.type == UsbConstants.USB_ENDPOINT_XFER_INT + } + return NcmFunction(control, data, statusIn, endpoints.first, endpoints.second) + } + + private fun interfaces(configuration: UsbConfiguration): List = + (0 until configuration.interfaceCount).map(configuration::getInterface) + + private fun bulkEndpoints(usbInterface: UsbInterface): Pair? { + val endpoints = (0 until usbInterface.endpointCount).map(usbInterface::getEndpoint) + val input = endpoints.singleOrNull { + it.direction == UsbConstants.USB_DIR_IN && it.type == UsbConstants.USB_ENDPOINT_XFER_BULK + } + val output = endpoints.singleOrNull { + it.direction == UsbConstants.USB_DIR_OUT && it.type == UsbConstants.USB_ENDPOINT_XFER_BULK + } + return if (input != null && output != null) input to output else null + } +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/transport/NcmUsbBridge.kt b/shared/src/main/java/com/shilapi/xcertplay/transport/NcmUsbBridge.kt new file mode 100644 index 0000000..1e5c66b --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/transport/NcmUsbBridge.kt @@ -0,0 +1,372 @@ +package com.shilapi.xcertplay.transport + +import android.hardware.usb.UsbDeviceConnection +import android.hardware.usb.UsbEndpoint +import android.hardware.usb.UsbInterface +import android.hardware.usb.UsbConstants +import android.util.Log +import java.io.Closeable +import java.util.ArrayDeque +import java.util.concurrent.atomic.AtomicBoolean + +/** + * A blocking NCM data pipe that moves Ethernet frames as NTB16 blocks over bulk endpoints. + * + * The caller opens the USB connection while the CarPlay configuration is already active; this + * bridge claims only the NCM control/data interfaces and owns the connection thereafter. All + * calls may block and must run away from the Android main thread. + */ +class NcmUsbBridge internal constructor( + private val connection: UsbDeviceConnection, + private val outEndpoint: UsbEndpoint, + private val inEndpoint: UsbEndpoint, + private val statusEndpoint: UsbEndpoint?, + private val claimedInterfaces: List, + descriptorHostMac: ByteArray?, +) : Closeable { + private val descriptorMac = descriptorHostMac?.copyOf() + val hostMac: ByteArray? get() = descriptorMac?.copyOf() + private val stateLock = Any() + private val readLock = Any() + private val writeLock = Any() + private var closed = false + private var failure: IphoneUsbException? = null + private var sequence = 0 + private var loggedWriteTimeout = false + private val frames = ArrayDeque() + private var queuedBytes = 0 + private var buffered = ByteArray(0) + private var bufferedSize = 0 + private val readBuffer = ByteArray(READ_CHUNK_BYTES) + private val statusRunning = AtomicBoolean(statusEndpoint != null) + private val statusThread = statusEndpoint?.let { endpoint -> + Thread({ drainStatus(endpoint) }, "ncm-status-in").apply { + isDaemon = true + start() + } + } + + /** Wraps one Ethernet frame in one NTB16 block and writes it to bulk OUT. */ + fun send(frame: ByteArray, timeoutMillis: Int) = synchronized(writeLock) { + checkOpen() + require(timeoutMillis > 0) { "timeoutMillis must be positive" } + val sequence = synchronized(stateLock) { + checkOpenLocked() + this.sequence.also { this.sequence = (this.sequence + 1) and 0xffff } + } + val block = Ntb16Codec.build(frame, sequence) + val transferred = connection.bulkTransfer(outEndpoint, block, block.size, timeoutMillis) + // Before StartCarPlaySession the phone keeps the NCM data path NAKed. Android reports the + // resulting timeout as -1; it is not a detach and later packets must be allowed to retry. + if (transferred <= 0) { + if (!loggedWriteTimeout) { + loggedWriteTimeout = true + Log.i(IphoneCarPlayConfiguration.TAG, "ncm bulk-out not ready; retaining bridge for retry") + } + return@synchronized + } + if (transferred != block.size) { + throw IphoneUsbException.DeviceUnavailable( + "NCM write transferred $transferred of ${block.size} bytes", + ) + } + if (loggedWriteTimeout) { + loggedWriteTimeout = false + Log.i(IphoneCarPlayConfiguration.TAG, "ncm bulk-out became ready") + } + } + + /** + * Returns the next complete Ethernet frame, or null when [timeoutMillis] elapses without one. + * USB reads may split or coalesce NTB blocks; this method reassembles whole blocks internally. + */ + fun recv(timeoutMillis: Long): ByteArray? { + require(timeoutMillis > 0) { "timeoutMillis must be positive" } + synchronized(readLock) { + checkOpen() + if (frames.isNotEmpty()) return pollFrame() + + val deadline = System.nanoTime() + timeoutMillis * NANOS_PER_MILLISECOND + while (true) { + drainFrames() + if (frames.isNotEmpty()) return pollFrame() + val remainingNanos = deadline - System.nanoTime() + if (remainingNanos <= 0) return null + val chunkLength = + readChunk((remainingNanos + NANOS_PER_MILLISECOND - 1) / NANOS_PER_MILLISECOND) + ?: continue + appendBuffered(readBuffer, chunkLength) + } + } + } + + override fun close() { + statusRunning.set(false) + synchronized(stateLock) { + if (closed) return + closed = true + } + statusThread?.let { thread -> + try { + thread.join(STATUS_READ_TIMEOUT_MILLIS + 250L) + } catch (_: InterruptedException) { + Thread.currentThread().interrupt() + } + } + for (usbInterface in claimedInterfaces.asReversed()) { + try { + connection.releaseInterface(usbInterface) + } catch (_: RuntimeException) { + // Best-effort release; the connection close below is authoritative. + } + } + connection.close() + } + + private fun drainStatus(endpoint: UsbEndpoint) { + val buffer = ByteArray(endpoint.maxPacketSize.coerceAtLeast(64)) + var loggedFirst = false + while (statusRunning.get()) { + val transferred = try { + connection.bulkTransfer(endpoint, buffer, buffer.size, STATUS_READ_TIMEOUT_MILLIS) + } catch (_: RuntimeException) { + return + } + if (transferred <= 0) continue + if (!loggedFirst) { + loggedFirst = true + Log.i( + IphoneCarPlayConfiguration.TAG, + "ncm status notification bytes=$transferred data=${buffer.copyOf(transferred).hex(32)}", + ) + } + } + } + + private fun ByteArray.hex(limit: Int): String = + take(limit).joinToString("") { byte -> "%02x".format(byte.toInt() and 0xff) } + + private fun drainFrames() { + while (true) { + if (bufferedSize < 12) return + if (readU32(buffered, 0) != Ntb16Codec.NTH16_SIG) { + throw failSession("NCM read buffer does not begin with an NTB16 header") + } + val blockLength = readU16(buffered, 8) + if (blockLength < 28) throw failSession("Invalid NTB16 block length $blockLength") + val padded = blockLength % USB_PACKET_SIZE == 0 + val wireLength = blockLength + if (padded) 1 else 0 + if (bufferedSize < wireLength) return + if (padded && buffered[blockLength].toInt() != 0) { + throw failSession("Invalid NTB16 short-packet pad") + } + for (frame in Ntb16Codec.parse(buffered, 0, blockLength)) enqueueFrame(frame) + val remaining = bufferedSize - wireLength + buffered.copyInto(buffered, 0, wireLength, bufferedSize) + bufferedSize = remaining + } + } + + private fun appendBuffered(source: ByteArray, length: Int) { + val required = bufferedSize + length + if (required > buffered.size) { + val capacity = maxOf(required, maxOf(READ_CHUNK_BYTES, buffered.size * 2)) + val grown = ByteArray(capacity) + buffered.copyInto(grown, 0, 0, bufferedSize) + buffered = grown + } + source.copyInto(buffered, bufferedSize, 0, length) + bufferedSize += length + } + + private fun enqueueFrame(frame: ByteArray) { + if (frames.size >= MAX_QUEUED_FRAMES || queuedBytes + frame.size > MAX_QUEUED_BYTES) { + throw failSession("NCM frame queue exceeded its bounds") + } + frames.addLast(frame) + queuedBytes += frame.size + } + + private fun pollFrame(): ByteArray { + val frame = frames.removeFirst() + queuedBytes -= frame.size + return frame + } + + private fun readChunk(timeoutMillis: Long): Int? { + checkOpen() + val transferred = try { + connection.bulkTransfer(inEndpoint, readBuffer, readBuffer.size, timeoutMillis.toInt()) + } catch (error: RuntimeException) { + throw failSession("NCM read failed", error) + } + // Android reports both an ordinary bulk-IN timeout and a NAK as a negative result. Keep + // polling: USBMUX owns authoritative detach/failure detection for the same phone. + if (transferred <= 0) return null + return transferred + } + + private fun failSession(message: String, cause: Throwable? = null): IphoneUsbException.DeviceUnavailable { + val error = IphoneUsbException.DeviceUnavailable(message, cause) + synchronized(stateLock) { + if (failure == null) failure = error + } + return error + } + + private fun checkOpen() { + synchronized(stateLock) { checkOpenLocked() } + } + + private fun checkOpenLocked() { + failure?.let { throw it } + if (closed) throw IphoneUsbException.DeviceUnavailable("NCM bridge is closed") + } + + private fun readU16(source: ByteArray, offset: Int): Int = + (source[offset].toInt() and 0xff) or ((source[offset + 1].toInt() and 0xff) shl 8) + + private fun readU32(source: ByteArray, offset: Int): Int = + (source[offset].toInt() and 0xff) or + ((source[offset + 1].toInt() and 0xff) shl 8) or + ((source[offset + 2].toInt() and 0xff) shl 16) or + ((source[offset + 3].toInt() and 0xff) shl 24) + + companion object { + private const val READ_CHUNK_BYTES = 32 * 1024 + private const val USB_PACKET_SIZE = 512 + private const val STATUS_READ_TIMEOUT_MILLIS = 1_000 + private const val MAX_QUEUED_FRAMES = 256 + private const val MAX_QUEUED_BYTES = 1 shl 20 + private const val NANOS_PER_MILLISECOND = 1_000_000L + + /** Claims and activates the NCM control/data interfaces; owns the connection on success. */ + fun open(connection: UsbDeviceConnection, function: NcmFunctionDiscovery.NcmFunction): NcmUsbBridge { + val claimed = ArrayList(2) + try { + val descriptorHostMac = readNcmHostMac(connection, function.control.id) + Log.i( + IphoneCarPlayConfiguration.TAG, + "ncm descriptor hostMac=${descriptorHostMac?.macString() ?: "unavailable"}", + ) + // Apple's Ethernet function exposes control and data as alternate settings of the + // same interface id, so it must be claimed once and switched with setInterface. + val sameInterface = function.control.id == function.data.id + val first = if (sameInterface) function.data else function.control + val firstClaimed = connection.claimInterface(first, true) + Log.i( + IphoneCarPlayConfiguration.TAG, + "claim iface=${first.id}/${first.alternateSetting} class=${first.interfaceClass}" + + " subclass=${first.interfaceSubclass} proto=${first.interfaceProtocol} ok=$firstClaimed", + ) + if (!firstClaimed) { + throw IphoneUsbException.DeviceUnavailable( + "Android could not claim the NCM interface ${first.id}", + ) + } + claimed.add(first) + if (!sameInterface) { + val dataClaimed = connection.claimInterface(function.data, true) + Log.i( + IphoneCarPlayConfiguration.TAG, + "claim iface=${function.data.id}/${function.data.alternateSetting}" + + " class=${function.data.interfaceClass} ok=$dataClaimed", + ) + if (!dataClaimed) { + throw IphoneUsbException.DeviceUnavailable( + "Android could not claim the NCM data interface ${function.data.id}", + ) + } + claimed.add(function.data) + } + val altSelected = connection.setInterface(function.data) + Log.i( + IphoneCarPlayConfiguration.TAG, + "setInterface iface=${function.data.id}/${function.data.alternateSetting} ok=$altSelected", + ) + if (!altSelected) { + throw IphoneUsbException.DeviceUnavailable( + "Android could not select the NCM data alternate setting", + ) + } + Log.i( + IphoneCarPlayConfiguration.TAG, + "ncm status endpoint=${function.statusIn?.address?.let { "0x${it.toString(16)}" } ?: "none"}", + ) + return NcmUsbBridge( + connection, + function.bulkOut, + function.bulkIn, + function.statusIn, + claimed, + descriptorHostMac, + ) + } catch (error: Throwable) { + for (usbInterface in claimed.asReversed()) { + try { + connection.releaseInterface(usbInterface) + } catch (_: RuntimeException) { + // The connection close below is authoritative. + } + } + connection.close() + if (error is IphoneUsbException) throw error + throw IphoneUsbException.DeviceUnavailable("Android NCM open failed", error) + } + } + + private fun readNcmHostMac(connection: UsbDeviceConnection, controlInterfaceId: Int): ByteArray? { + val index = ethernetMacStringIndex(connection.rawDescriptors, controlInterfaceId) ?: return null + val buffer = ByteArray(256) + val length = connection.controlTransfer( + UsbConstants.USB_DIR_IN or UsbConstants.USB_TYPE_STANDARD, + USB_REQUEST_GET_DESCRIPTOR, + (USB_STRING_DESCRIPTOR_TYPE shl 8) or index, + USB_ENGLISH_US, + buffer, + buffer.size, + USB_CONTROL_TIMEOUT_MILLIS, + ) + if (length < 4 || (buffer[1].toInt() and 0xff) != USB_STRING_DESCRIPTOR_TYPE) return null + val descriptorLength = (buffer[0].toInt() and 0xff).coerceAtMost(length) + if (descriptorLength < 4) return null + val value = buffer.copyOfRange(2, descriptorLength).toString(Charsets.UTF_16LE) + val hex = value.filter { it.digitToIntOrNull(16) != null } + if (hex.length != 12) return null + return ByteArray(6) { offset -> hex.substring(offset * 2, offset * 2 + 2).toInt(16).toByte() } + } + + private fun ethernetMacStringIndex(raw: ByteArray, controlInterfaceId: Int): Int? { + var offset = 0 + var currentInterface = -1 + while (offset + 2 <= raw.size) { + val length = raw[offset].toInt() and 0xff + val type = raw[offset + 1].toInt() and 0xff + if (length < 2 || offset + length > raw.size) return null + if (type == USB_INTERFACE_DESCRIPTOR_TYPE && length >= 9) { + currentInterface = raw[offset + 2].toInt() and 0xff + } else if ( + type == CDC_FUNCTIONAL_DESCRIPTOR_TYPE && + length >= 4 && + currentInterface == controlInterfaceId && + (raw[offset + 2].toInt() and 0xff) == CDC_ETHERNET_SUBTYPE + ) { + return (raw[offset + 3].toInt() and 0xff).takeIf { it != 0 } + } + offset += length + } + return null + } + + private fun ByteArray.macString(): String = + joinToString(":") { byte -> "%02x".format(byte.toInt() and 0xff) } + + private const val USB_INTERFACE_DESCRIPTOR_TYPE = 0x04 + private const val USB_REQUEST_GET_DESCRIPTOR = 0x06 + private const val USB_STRING_DESCRIPTOR_TYPE = 0x03 + private const val CDC_FUNCTIONAL_DESCRIPTOR_TYPE = 0x24 + private const val CDC_ETHERNET_SUBTYPE = 0x0f + private const val USB_ENGLISH_US = 0x0409 + private const val USB_CONTROL_TIMEOUT_MILLIS = 1_000 + } +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/transport/Ntb16Codec.kt b/shared/src/main/java/com/shilapi/xcertplay/transport/Ntb16Codec.kt new file mode 100644 index 0000000..00cf2be --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/transport/Ntb16Codec.kt @@ -0,0 +1,112 @@ +package com.shilapi.xcertplay.transport + +/** + * Minimal NTB16 codec for the iPhone NCM data link. + * + * Only the 16-bit transfer-block layout used by LIVI's `iap2-usbmux/src/ntb.rs` is implemented: + * one NTH16 header, one NDP16 table with one datagram, and the USB short-packet pad byte. There + * is no NTB32, alignment, CRC, or NCM control-plane handling here. + */ +object Ntb16Codec { + const val NTH16_SIG = 0x484d434e + const val NDP16_SIG = 0x304d434e + + private const val NTH_LENGTH = 12 + private const val NDP_LENGTH = 16 + private const val DATAGRAM_INDEX = 28 + private const val USB_PACKET_SIZE = 512 + + /** Wraps one Ethernet frame in one NTB16 block, padding an exact 512-byte boundary. */ + fun build(frame: ByteArray, sequence: Int): ByteArray { + require(frame.isNotEmpty()) { "frame must not be empty" } + require(frame.size <= MAX_DATAGRAM_BYTES) { "frame exceeds the NTB16 length field" } + require(sequence in 0..0xffff) { "sequence must fit in u16" } + + val blockLength = DATAGRAM_INDEX + frame.size + val block = ByteArray(blockLength) + putU32(block, 0, NTH16_SIG) + putU16(block, 4, NTH_LENGTH) + putU16(block, 6, sequence) + putU16(block, 8, blockLength) + putU16(block, 10, NTH_LENGTH) + + putU32(block, 12, NDP16_SIG) + putU16(block, 16, NDP_LENGTH) + putU16(block, 18, 0) + putU16(block, 20, DATAGRAM_INDEX) + putU16(block, 22, frame.size) + putU16(block, 24, 0) + putU16(block, 26, 0) + + frame.copyInto(block, DATAGRAM_INDEX) + // A transfer that ends exactly on a USB packet boundary is read as a short packet. + return if (block.size % USB_PACKET_SIZE == 0) block + byteArrayOf(0) else block + } + + /** + * Extracts the Ethernet frames carried by one NTB16 block. + * + * Wire garbage returns an empty list instead of throwing; malformed entries are skipped where + * a bounds check fails. A step guard stops a malformed NDP pointer chain from cycling. + */ + fun parse(block: ByteArray): List = parse(block, 0, block.size) + + /** Parses one NTB16 block from [offset] without copying the containing buffer. */ + fun parse(block: ByteArray, offset: Int, length: Int): List { + require(offset >= 0 && length >= 0 && offset <= block.size - length) { + "NTB16 range is outside the source buffer" + } + val end = offset + length + if (length < NTH_LENGTH || readU32(block, offset) != NTH16_SIG) return emptyList() + + val datagrams = ArrayList(1) + var ndpOffset = offset + readU16(block, offset + 10) + var hops = 0 + val maxHops = maxOf(1, length / 4) + while (ndpOffset != 0 && hops < maxHops) { + if (ndpOffset < offset || ndpOffset + 12 > end) break + if (readU32(block, ndpOffset) and 0x00ffffff != NDP16_SIG and 0x00ffffff) break + val ndpLength = readU16(block, ndpOffset + 4) + val nextNdp = readU16(block, ndpOffset + 6) + var entry = ndpOffset + 8 + val ndpEnd = minOf(ndpOffset + ndpLength, end) + while (entry + 4 <= ndpEnd) { + val datagramIndex = readU16(block, entry) + val datagramLength = readU16(block, entry + 2) + if (datagramIndex == 0 || datagramLength == 0) break + val datagramStart = offset + datagramIndex + val datagramEnd = datagramStart + datagramLength + if (datagramStart >= offset && datagramStart <= end && datagramEnd <= end) { + datagrams.add(block.copyOfRange(datagramStart, datagramEnd)) + } + entry += 4 + } + ndpOffset = if (nextNdp == 0) 0 else offset + nextNdp + hops++ + } + return datagrams + } + + private fun putU16(target: ByteArray, offset: Int, value: Int) { + target[offset] = value.toByte() + target[offset + 1] = (value ushr 8).toByte() + } + + private fun putU32(target: ByteArray, offset: Int, value: Int) { + target[offset] = value.toByte() + target[offset + 1] = (value ushr 8).toByte() + target[offset + 2] = (value ushr 16).toByte() + target[offset + 3] = (value ushr 24).toByte() + } + + private fun readU16(source: ByteArray, offset: Int): Int = + (source[offset].toInt() and 0xff) or ((source[offset + 1].toInt() and 0xff) shl 8) + + private fun readU32(source: ByteArray, offset: Int): Int = + (source[offset].toInt() and 0xff) or + ((source[offset + 1].toInt() and 0xff) shl 8) or + ((source[offset + 2].toInt() and 0xff) shl 16) or + ((source[offset + 3].toInt() and 0xff) shl 24) + + private const val MAX_DATAGRAM_BYTES = 0xffff - DATAGRAM_INDEX +} diff --git a/shared/src/main/java/com/shilapi/xcertplay/transport/TlsDuplexChannel.kt b/shared/src/main/java/com/shilapi/xcertplay/transport/TlsDuplexChannel.kt new file mode 100644 index 0000000..4a384b9 --- /dev/null +++ b/shared/src/main/java/com/shilapi/xcertplay/transport/TlsDuplexChannel.kt @@ -0,0 +1,437 @@ +package com.shilapi.xcertplay.transport + +import java.nio.ByteBuffer +import java.security.GeneralSecurityException +import javax.net.ssl.SSLEngine +import javax.net.ssl.SSLEngineResult + +/** + * Blocking plaintext stream carried by one client-mode TLS engine and one owned byte stream. + * + * [open] completes the TLS handshake before returning. Calls must run on worker threads. This + * class does not send Lockdown StartSession/StartService messages and does not persist records. + */ +class TlsDuplexChannel private constructor( + private val underlying: BlockingDuplexByteStream, + private val engine: SSLEngine, +) : BlockingDuplexByteStream { + private val stateLock = Any() + private val engineLock = Any() + private val readLock = Any() + private val writeLock = Any() + private val encryptedInput = ByteQueue() + private val plaintextInput = ByteQueue() + private var closed = false + private var inboundEnded = false + private var failure: IphoneUsbException? = null + + override fun send(data: ByteArray) = synchronized(writeLock) { + checkWritable() + if (data.isEmpty()) return@synchronized + try { + val source = ByteBuffer.wrap(data) + while (source.hasRemaining()) { + val outcome = wrap(source) + sendEncrypted(outcome.bytes) + if (outcome.result.status == SSLEngineResult.Status.CLOSED) { + throw IphoneUsbException.Protocol("TLS outbound stream closed during send") + } + if (progressPostHandshake(outcome.result.handshakeStatus)) { + throw IphoneUsbException.Protocol("TLS send requires inbound post-handshake processing") + } + if (outcome.result.bytesConsumed() == 0 && outcome.bytes.isEmpty()) { + throw IphoneUsbException.Protocol("TLS send made no progress") + } + } + } catch (error: Exception) { + throw fail(error) + } + } + + override fun recv(maxBytes: Int, timeoutMillis: Long): ByteArray? = synchronized(readLock) { + require(maxBytes > 0) { "maxBytes must be positive" } + require(timeoutMillis > 0) { "timeoutMillis must be positive" } + try { + receiveLocked(maxBytes, Deadline(timeoutMillis)) + } catch (error: Exception) { + throw fail(error) + } + } + + override fun close() { + val shouldClose = synchronized(stateLock) { + if (closed) false else { + closed = true + true + } + } + if (!shouldClose) return + try { + synchronized(writeLock) { + synchronized(engineLock) { + if (!engine.isOutboundDone) engine.closeOutbound() + } + var steps = 0 + while (steps++ < MAXIMUM_CLOSE_WRAP_STEPS && + !synchronized(engineLock) { engine.isOutboundDone } + ) { + val outcome = wrap(ByteBuffer.allocate(0)) + sendEncrypted(outcome.bytes) + var status = outcome.result.handshakeStatus + if (status == SSLEngineResult.HandshakeStatus.NEED_TASK) { + status = runDelegatedTasks() + } + if (outcome.result.status == SSLEngineResult.Status.CLOSED || + status != SSLEngineResult.HandshakeStatus.NEED_WRAP + ) { + break + } + } + } + } catch (_: Exception) { + // close_notify is best effort; closing the owned transport is the final boundary. + } finally { + try { + underlying.close() + } catch (_: Exception) { + // The local state remains closed. + } + } + } + + private fun performHandshake(timeoutMillis: Long) { + val deadline = Deadline(timeoutMillis) + var status = synchronized(engineLock) { + engine.beginHandshake() + engine.handshakeStatus + } + var noProgress = 0 + while (!isHandshakeComplete(status)) { + deadline.requireRemainingMillis() + when { + status == SSLEngineResult.HandshakeStatus.NEED_TASK -> { + status = runDelegatedTasks() + noProgress = 0 + } + status == SSLEngineResult.HandshakeStatus.NEED_WRAP -> { + val outcome = synchronized(writeLock) { + wrap(ByteBuffer.allocate(0)).also { sendEncrypted(it.bytes) } + } + if (outcome.result.status == SSLEngineResult.Status.CLOSED) { + throw IphoneUsbException.Protocol("TLS handshake closed while wrapping") + } + status = outcome.result.handshakeStatus + noProgress = checkProgress(outcome, noProgress) + } + isNeedUnwrap(status) -> { + val outcome = unwrap() + plaintextInput.append(outcome.bytes) + when (outcome.result.status) { + SSLEngineResult.Status.OK -> { + status = outcome.result.handshakeStatus + noProgress = checkProgress(outcome, noProgress) + } + SSLEngineResult.Status.BUFFER_UNDERFLOW -> { + val incoming = underlying.recv(RECEIVE_CHUNK_BYTES, deadline.requireRemainingMillis()) + ?: throw IphoneUsbException.TimedOut("TLS handshake timed out") + if (incoming.isEmpty()) { + throw IphoneUsbException.Protocol("TLS transport ended during handshake") + } + encryptedInput.append(incoming) + noProgress = 0 + } + SSLEngineResult.Status.CLOSED -> { + throw IphoneUsbException.Protocol("TLS peer closed during handshake") + } + SSLEngineResult.Status.BUFFER_OVERFLOW -> error("unwrap handles overflow internally") + } + } + else -> throw IphoneUsbException.Protocol("Unsupported TLS handshake state ${status.name}") + } + } + deadline.requireRemainingMillis() + } + + private fun receiveLocked(maxBytes: Int, deadline: Deadline): ByteArray? { + plaintextInput.take(maxBytes)?.let { return it } + synchronized(stateLock) { + failure?.let { throw it } + if (inboundEnded) return ByteArray(0) + if (closed) throw IphoneUsbException.DeviceUnavailable("TLS channel is closed") + } + + var noProgress = 0 + while (true) { + if (deadline.remainingMillis() == null) return null + val outcome = unwrap() + plaintextInput.append(outcome.bytes) + when (outcome.result.status) { + SSLEngineResult.Status.OK -> { + noProgress = checkProgress(outcome, noProgress) + progressPostHandshake(outcome.result.handshakeStatus) + } + SSLEngineResult.Status.BUFFER_UNDERFLOW -> { + plaintextInput.take(maxBytes)?.let { return it } + val remaining = deadline.remainingMillis() ?: return null + val incoming = underlying.recv(RECEIVE_CHUNK_BYTES, remaining) ?: return null + if (incoming.isEmpty()) { + if (encryptedInput.size != 0) { + throw IphoneUsbException.Protocol("TLS transport ended inside a record") + } + throw IphoneUsbException.Protocol("TLS transport ended without close_notify") + } + encryptedInput.append(incoming) + noProgress = 0 + continue + } + SSLEngineResult.Status.CLOSED -> { + plaintextInput.take(maxBytes)?.let { + finishInbound() + return it + } + finishInbound() + return ByteArray(0) + } + SSLEngineResult.Status.BUFFER_OVERFLOW -> error("unwrap handles overflow internally") + } + plaintextInput.take(maxBytes)?.let { return it } + } + } + + /** Returns true only when further inbound TLS processing is required. */ + private fun progressPostHandshake(initialStatus: SSLEngineResult.HandshakeStatus): Boolean { + var status = initialStatus + var steps = 0 + while (true) { + if (++steps > MAXIMUM_CONTROL_STEPS) { + throw IphoneUsbException.Protocol("TLS post-handshake processing did not converge") + } + when { + status == SSLEngineResult.HandshakeStatus.NEED_TASK -> status = runDelegatedTasks() + status == SSLEngineResult.HandshakeStatus.NEED_WRAP -> { + val outcome = synchronized(writeLock) { + wrap(ByteBuffer.allocate(0)).also { sendEncrypted(it.bytes) } + } + if (outcome.result.status == SSLEngineResult.Status.CLOSED) { + throw IphoneUsbException.Protocol("TLS outbound stream closed during post-handshake processing") + } + if (outcome.result.bytesConsumed() == 0 && outcome.bytes.isEmpty() && + outcome.result.handshakeStatus == SSLEngineResult.HandshakeStatus.NEED_WRAP + ) { + throw IphoneUsbException.Protocol("TLS post-handshake wrap made no progress") + } + status = outcome.result.handshakeStatus + } + isNeedUnwrap(status) -> return true + isHandshakeComplete(status) -> return false + else -> throw IphoneUsbException.Protocol("Unsupported TLS post-handshake state ${status.name}") + } + } + } + + private fun runDelegatedTasks(): SSLEngineResult.HandshakeStatus = synchronized(engineLock) { + while (true) { + val task = engine.delegatedTask ?: break + task.run() + } + engine.handshakeStatus + } + + private fun wrap(source: ByteBuffer): EngineOutcome { + var capacity = synchronized(engineLock) { engine.session.packetBufferSize }.coerceAtLeast(1) + while (true) { + if (capacity > MAXIMUM_TLS_BUFFER_BYTES) { + throw IphoneUsbException.Protocol("TLS packet buffer exceeds the defensive limit") + } + val output = ByteBuffer.allocate(capacity) + val result = synchronized(engineLock) { engine.wrap(source, output) } + if (result.status == SSLEngineResult.Status.BUFFER_OVERFLOW) { + if (result.bytesConsumed() != 0 || result.bytesProduced() != 0) { + throw IphoneUsbException.Protocol("TLS wrap overflow consumed data") + } + capacity = grow(capacity) + continue + } + if (result.status == SSLEngineResult.Status.BUFFER_UNDERFLOW) { + throw IphoneUsbException.Protocol("TLS wrap reported buffer underflow") + } + output.flip() + return EngineOutcome(result, ByteArray(output.remaining()).also(output::get)) + } + } + + private fun unwrap(): EngineOutcome { + var capacity = synchronized(engineLock) { engine.session.applicationBufferSize }.coerceAtLeast(1) + while (true) { + if (capacity > MAXIMUM_TLS_BUFFER_BYTES) { + throw IphoneUsbException.Protocol("TLS application buffer exceeds the defensive limit") + } + val input = encryptedInput.asByteBuffer() + val output = ByteBuffer.allocate(capacity) + val result = synchronized(engineLock) { engine.unwrap(input, output) } + if (result.status == SSLEngineResult.Status.BUFFER_OVERFLOW) { + if (result.bytesConsumed() != 0 || result.bytesProduced() != 0) { + throw IphoneUsbException.Protocol("TLS unwrap overflow consumed data") + } + capacity = grow(capacity) + continue + } + encryptedInput.discard(result.bytesConsumed()) + output.flip() + return EngineOutcome(result, ByteArray(output.remaining()).also(output::get)) + } + } + + private fun sendEncrypted(bytes: ByteArray) { + if (bytes.isNotEmpty()) underlying.send(bytes) + } + + private fun finishInbound() { + synchronized(stateLock) { inboundEnded = true } + close() + } + + private fun checkWritable() = synchronized(stateLock) { + failure?.let { throw it } + if (closed) throw IphoneUsbException.DeviceUnavailable("TLS channel is closed") + } + + private fun checkProgress(outcome: EngineOutcome, previous: Int): Int { + if (outcome.result.bytesConsumed() != 0 || outcome.bytes.isNotEmpty()) return 0 + if (previous + 1 >= MAXIMUM_NO_PROGRESS_STEPS) { + throw IphoneUsbException.Protocol("TLS engine made no progress") + } + return previous + 1 + } + + private fun fail(error: Exception): IphoneUsbException { + val mapped = when (error) { + is IphoneUsbException -> error + else -> IphoneUsbException.Protocol("TLS channel failed (${error.javaClass.simpleName})") + } + val shouldClose = synchronized(stateLock) { + if (failure == null) failure = mapped + if (closed) false else { + closed = true + true + } + } + if (shouldClose) { + try { + underlying.close() + } catch (_: Exception) { + // Preserve the original failure. + } + } + return synchronized(stateLock) { failure ?: mapped } + } + + private fun grow(capacity: Int): Int { + if (capacity >= MAXIMUM_TLS_BUFFER_BYTES) return MAXIMUM_TLS_BUFFER_BYTES + 1 + return minOf(MAXIMUM_TLS_BUFFER_BYTES, capacity * 2) + } + + private data class EngineOutcome( + val result: SSLEngineResult, + val bytes: ByteArray, + ) + + private class Deadline(timeoutMillis: Long) { + private val startNanos = System.nanoTime() + private val timeoutNanos = minOf(timeoutMillis, Long.MAX_VALUE / NANOS_PER_MILLISECOND) * + NANOS_PER_MILLISECOND + + fun remainingMillis(): Long? { + val remaining = timeoutNanos - (System.nanoTime() - startNanos) + if (remaining <= 0) return null + return (remaining - 1) / NANOS_PER_MILLISECOND + 1 + } + + fun requireRemainingMillis(): Long = remainingMillis() + ?: throw IphoneUsbException.TimedOut("TLS handshake timed out") + } + + private class ByteQueue { + private var bytes = ByteArray(0) + private var offset = 0 + + val size: Int + get() = bytes.size - offset + + fun append(value: ByteArray) { + if (value.isEmpty()) return + if (size > MAXIMUM_TLS_BUFFER_BYTES - value.size) { + throw IphoneUsbException.Protocol("TLS buffered data exceeds the defensive limit") + } + val combined = ByteArray(size + value.size) + bytes.copyInto(combined, 0, offset) + value.copyInto(combined, size) + bytes = combined + offset = 0 + } + + fun asByteBuffer(): ByteBuffer = ByteBuffer.wrap(bytes, offset, size).slice() + + fun discard(count: Int) { + require(count in 0..size) { "Invalid TLS queue discard" } + offset += count + if (offset == bytes.size) { + bytes = ByteArray(0) + offset = 0 + } + } + + fun take(maxBytes: Int): ByteArray? { + if (size == 0) return null + val count = minOf(maxBytes, size) + return bytes.copyOfRange(offset, offset + count).also { discard(count) } + } + } + + companion object { + private val ALLOWED_PROTOCOLS = arrayOf("TLSv1.3", "TLSv1.2") + private const val RECEIVE_CHUNK_BYTES = 16 * 1024 + private const val MAXIMUM_TLS_BUFFER_BYTES = 1024 * 1024 + private const val MAXIMUM_CONTROL_STEPS = 32 + private const val MAXIMUM_NO_PROGRESS_STEPS = 8 + private const val MAXIMUM_CLOSE_WRAP_STEPS = 4 + private const val NANOS_PER_MILLISECOND = 1_000_000L + + /** Creates and fully handshakes a TLS client stream, taking ownership of [underlying]. */ + @JvmStatic + @Throws(IphoneUsbException::class, GeneralSecurityException::class) + fun open( + underlying: BlockingDuplexByteStream, + pairRecord: LockdownPairRecord, + handshakeTimeoutMillis: Long = 5_000, + ): TlsDuplexChannel { + require(handshakeTimeoutMillis > 0) { "handshakeTimeoutMillis must be positive" } + try { + val engine = LockdownTlsEngineFactory.create(pairRecord) + val supported = engine.supportedProtocols.toSet() + val enabled = ALLOWED_PROTOCOLS.filter(supported::contains).toTypedArray() + if (enabled.isEmpty()) { + throw IphoneUsbException.Protocol("TLS engine supports neither TLSv1.2 nor TLSv1.3") + } + engine.enabledProtocols = enabled + return TlsDuplexChannel(underlying, engine).also { + it.performHandshake(handshakeTimeoutMillis) + } + } catch (error: Exception) { + try { + underlying.close() + } catch (_: Exception) { + // Preserve the handshake failure. + } + throw error + } + } + + private fun isHandshakeComplete(status: SSLEngineResult.HandshakeStatus): Boolean = + status == SSLEngineResult.HandshakeStatus.FINISHED || + status == SSLEngineResult.HandshakeStatus.NOT_HANDSHAKING + + private fun isNeedUnwrap(status: SSLEngineResult.HandshakeStatus): Boolean = + status == SSLEngineResult.HandshakeStatus.NEED_UNWRAP || status.name == "NEED_UNWRAP_AGAIN" + } +} diff --git a/shared/src/main/jni/Android.mk b/shared/src/main/jni/Android.mk new file mode 100644 index 0000000..45f9c33 --- /dev/null +++ b/shared/src/main/jni/Android.mk @@ -0,0 +1,6 @@ +LOCAL_PATH := $(call my-dir) + +include $(CLEAR_VARS) +LOCAL_MODULE := xcertplay_i2c +LOCAL_SRC_FILES := linux_i2c_jni.c +include $(BUILD_SHARED_LIBRARY) diff --git a/shared/src/main/jni/Application.mk b/shared/src/main/jni/Application.mk new file mode 100644 index 0000000..0e1d0d2 --- /dev/null +++ b/shared/src/main/jni/Application.mk @@ -0,0 +1,2 @@ +APP_PLATFORM := android-28 +APP_STL := none diff --git a/shared/src/main/jni/linux_i2c_jni.c b/shared/src/main/jni/linux_i2c_jni.c new file mode 100644 index 0000000..7f5ceb3 --- /dev/null +++ b/shared/src/main/jni/linux_i2c_jni.c @@ -0,0 +1,149 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define MAX_I2C_MESSAGE_LENGTH 0xffff + +static void throw_native_error(JNIEnv *env, int error_number, const char *operation) { + char message[160]; + if (error_number == 0) { + snprintf(message, sizeof(message), "%s returned an incomplete I2C transfer", operation); + } else { + snprintf(message, sizeof(message), "%s failed: errno=%d (%s)", operation, error_number, + strerror(error_number)); + } + + jclass exception_class = (*env)->FindClass( + env, "com/shilapi/xcertplay/transport/LinuxI2cNativeException"); + if (exception_class == NULL) return; + + jmethodID constructor = (*env)->GetMethodID(env, exception_class, "", "(ILjava/lang/String;)V"); + if (constructor == NULL) return; + + jstring detail = (*env)->NewStringUTF(env, message); + if (detail == NULL) return; + + jobject exception = (*env)->NewObject(env, exception_class, constructor, error_number, detail); + if (exception != NULL) (*env)->Throw(env, exception); +} + +JNIEXPORT jint JNICALL +Java_com_shilapi_xcertplay_transport_LinuxI2cNative_open( + JNIEnv *env, jobject receiver, jstring device_path) { + (void) receiver; + if (device_path == NULL) { + throw_native_error(env, EINVAL, "open"); + return -1; + } + + const char *path = (*env)->GetStringUTFChars(env, device_path, NULL); + if (path == NULL) return -1; + + int file_descriptor; + do { + file_descriptor = open(path, O_RDWR | O_CLOEXEC); + } while (file_descriptor < 0 && errno == EINTR); + + int error_number = file_descriptor < 0 ? errno : 0; + (*env)->ReleaseStringUTFChars(env, device_path, path); + if (file_descriptor < 0) throw_native_error(env, error_number, "open"); + return file_descriptor; +} + +JNIEXPORT jbyteArray JNICALL +Java_com_shilapi_xcertplay_transport_LinuxI2cNative_transaction( + JNIEnv *env, + jobject receiver, + jint file_descriptor, + jint address, + jbyteArray write_data, + jint read_length) { + (void) receiver; + if (file_descriptor < 0 || write_data == NULL || address < 0 || address > 0x7f || read_length < 0) { + throw_native_error(env, EINVAL, "I2C_RDWR"); + return NULL; + } + + jsize write_length = (*env)->GetArrayLength(env, write_data); + if (write_length > MAX_I2C_MESSAGE_LENGTH || read_length > MAX_I2C_MESSAGE_LENGTH || + (write_length == 0 && read_length == 0)) { + throw_native_error(env, EINVAL, "I2C_RDWR"); + return NULL; + } + + jbyte *write_bytes = NULL; + uint8_t *read_bytes = NULL; + struct i2c_msg messages[2]; + uint32_t message_count = 0; + + if (write_length > 0) { + write_bytes = (*env)->GetByteArrayElements(env, write_data, NULL); + if (write_bytes == NULL) return NULL; + messages[message_count++] = (struct i2c_msg) { + .addr = (uint16_t) address, + .flags = 0, + .len = (uint16_t) write_length, + .buf = (uint8_t *) write_bytes, + }; + } + + if (read_length > 0) { + read_bytes = malloc((size_t) read_length); + if (read_bytes == NULL) { + if (write_bytes != NULL) (*env)->ReleaseByteArrayElements(env, write_data, write_bytes, JNI_ABORT); + throw_native_error(env, ENOMEM, "I2C read buffer allocation"); + return NULL; + } + messages[message_count++] = (struct i2c_msg) { + .addr = (uint16_t) address, + .flags = I2C_M_RD, + .len = (uint16_t) read_length, + .buf = read_bytes, + }; + } + + struct i2c_rdwr_ioctl_data request = { + .msgs = messages, + .nmsgs = message_count, + }; + int result; + do { + result = ioctl(file_descriptor, I2C_RDWR, &request); + } while (result < 0 && errno == EINTR); + + if (write_bytes != NULL) (*env)->ReleaseByteArrayElements(env, write_data, write_bytes, JNI_ABORT); + if (result != (int) message_count) { + int error_number = result < 0 ? errno : 0; + free(read_bytes); + throw_native_error(env, error_number, "I2C_RDWR"); + return NULL; + } + + jbyteArray response = (*env)->NewByteArray(env, read_length); + if (response != NULL && read_length > 0) { + (*env)->SetByteArrayRegion(env, response, 0, read_length, (const jbyte *) read_bytes); + } + free(read_bytes); + return response; +} + +JNIEXPORT void JNICALL +Java_com_shilapi_xcertplay_transport_LinuxI2cNative_close( + JNIEnv *env, jobject receiver, jint file_descriptor) { + (void) receiver; + if (file_descriptor < 0) { + throw_native_error(env, EINVAL, "close"); + return; + } + if (close(file_descriptor) != 0) { + throw_native_error(env, errno, "close"); + } +} diff --git a/shared/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/shared/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 0000000..9764d2a --- /dev/null +++ b/shared/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/shared/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/shared/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 0000000..9764d2a --- /dev/null +++ b/shared/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/shared/src/main/res/mipmap-hdpi/ic_launcher.webp b/shared/src/main/res/mipmap-hdpi/ic_launcher.webp new file mode 100644 index 0000000000000000000000000000000000000000..218fd9c332ace9434478ae5f21cd10f6ed7a1ceb GIT binary patch literal 2568 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 literal 0 HcmV?d00001 diff --git a/shared/src/main/res/mipmap-hdpi/ic_launcher_background.webp b/shared/src/main/res/mipmap-hdpi/ic_launcher_background.webp new file mode 100644 index 0000000000000000000000000000000000000000..cf3f376f315689ca22868a6ce9874e5c831bac82 GIT binary patch literal 3034 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 WHVUBQilVCprJ}VB*d71fzJdZHn3eMY literal 0 HcmV?d00001 diff --git a/shared/src/main/res/mipmap-hdpi/ic_launcher_monochrome.webp b/shared/src/main/res/mipmap-hdpi/ic_launcher_monochrome.webp new file mode 100644 index 0000000000000000000000000000000000000000..64fee0f4018cb833ea8a6dad27e8e278df2baca0 GIT binary patch literal 1718 zcmV;n21)r+Nk&Gl1^@t8MM6+kP&iDY1^@srp+G1Q)ll00Ns*+?N5h$lnjUo4EB?_9 zkGng}5xH?k`LvL2zBNK4?3glyMCc>Et@*yleV_Z`m&o zs-|!+I;3Z%e;r$}Psox)hiO?tN^Xz#gtN~$Hw_YCX5~87kW0xn2rR>d0~y(i+Rcr6 zOXm)SdR;YVksYS@qZJP`+M(P+RJj8VNz8sUV1cNuP#Y;WpJKc7`ieE6NcEb6CqXkS zJ0_&`f|Yx$kpsr{yvujUH^}1G-m#fc-ZfNONu{IG4!Me$c0Eeq!=E31hu{Cc`ZDjp zY)fIHbS1pX*=Y-(@1tt-bo3f=oayb4 z1&3xdUh*o$-VQbno1~_F?|9i=VxX0%yo>4Q=S)8}y1Y2F^WSn|r@@Rg?t zkbpgflRB7k&T8Zcf^5tXjYnO!Uhgei9*>y6Tn~f zalnjrNJ0^@ajqj^PJUU6|$yirQaFnjvC?zJ~Fqnc?nHN?%q zTv1Bx2=>BV%@_a7%t{+IPW1JnRE=TxpMUaa#?~1|YiG4!YX`)mlp0a21Fl{C^7{J< zGczkvwGcfA)T0z8)@QVLTnUzStcp^4^~;J3C3i%poOV*OJk8 z3bavRt1yLy^*U@-_(9}KKnTtKUnY@%;Y3!sbf(a~)OW_*CS-NopxC()!{AShroCwO zaG^U%oqb(~Q;3%CWgYF*lz}>ki31IN>`+njxZaK&Q9)GdQ|UUhqE?67h_M~FTh+m% zS;wAT<3c&Q8_55q5n38U(e*)*?zh3&<`+4{mHTRYp?n#J4y@pw-e)GCU)PzL(OMDL zVabX>$?V#I)w+C zEqf0xD_6Mh(i5Jwlb=G<{J+IY*}dV(1*EexGm_Jev{(|yG1RQ(nk?#PV^?!C8fsrL zT$`?Z#YTr`NXcz@3017RYD?_!RfcC zfIG{c-|kFvIDZ;el8CF2jHmR#U;Uc;1GW)%HK4PNaZoxb_IM>dqtdRKIiRO*B^yfH_`l%yrA7 zVRtWVE2=yo>Qb^P=V3l#eS&t0?5eHF1EtYIh81u}63V&ljErCyy=X!)64;~CX0FX+ MC^is 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 literal 0 HcmV?d00001 diff --git a/shared/src/main/res/mipmap-mdpi/ic_launcher_monochrome.webp b/shared/src/main/res/mipmap-mdpi/ic_launcher_monochrome.webp new file mode 100644 index 0000000000000000000000000000000000000000..f40b4b64ec47505210e7bd72739758272e8fe02b GIT binary patch literal 1140 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 literal 0 HcmV?d00001 diff --git a/shared/src/main/res/mipmap-xhdpi/ic_launcher_background.webp b/shared/src/main/res/mipmap-xhdpi/ic_launcher_background.webp new file mode 100644 index 0000000000000000000000000000000000000000..f41c80b88989cf7f2107f02f163a20137df12cf7 GIT binary patch literal 7120 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 aM}Fx0jzeFMabzyit!JqW=@X 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 MTUuJCZpUzmQUQ~y4FCWD literal 0 HcmV?d00001 diff --git a/shared/src/main/res/mipmap-xxhdpi/ic_launcher_background.webp b/shared/src/main/res/mipmap-xxhdpi/ic_launcher_background.webp new file mode 100644 index 0000000000000000000000000000000000000000..24e8fd703f9ec72d432ebf46fb302cbc30f1b14b GIT binary patch literal 22618 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 literal 0 HcmV?d00001 diff --git a/shared/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/shared/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp new file mode 100644 index 0000000000000000000000000000000000000000..40dbf4d359bb4ff05eaa5912c8eba0f2aaf0317e GIT binary patch literal 10536 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 qua(9+q=uT_tWEQUIbr#Utj+XZ{`86fr$Q3 z0Dq_*{*>0Kg=CJq%^XooW$CKO>At4V$mf!zKTeqB%lZYY%AQn5lRUVx*`(n z8C?PrTPSXTXro1hG3|c=L?EIW77T+E1_1~Fh&ByG1W*Am#F`*RgU8qN?fI4g+62Jr z&?X{;nxIWYP!b#VfB+GRB#~GHAOaR3B79Lr4Dy0*9NVJ(v8Av%A4P+$I4_5}rC%3^ zg0^j>ocXi9S2_X_F#+Stwpx$o(ZjLaanTZm#nNP(gIQY25n{?sLD!4$C>%KmCmqlO zC`Tq~Z8u9xE|P7xRMA7|cx;Zx`fhxw$NhiTwk>5Jy!YOFGH?4pNGoU*{h%LY)d9Ts z_5@>$xz?Lim470l%1T2+CmFcZ^Yp`e&y~vi>cY#0XaeG@vKx_=$^IEVczV(40jg|e z#H1eNHnwe5+2`S|nY&X1AuZ4^T{y8vU(m})k|YsXi~m2@iB{0IjpRKL#-Hh3CxEK7 zZObI*{hF4UDeM?D>qtI<97mr|4uF}-GBYj1K*RJWg8eP2RBn}1V2<2zTYoLOH@FPv z(K_|nR1MhCA@|Ev`@FS!eA{q5wu+KeTidc_`+9IF;LeZ`q#y!07!iiCC-5fvyS~qJ zL#}OWd2;S2NpN>YR!BOd09vv+iy;NLyMBMZeD6t>ZCkaYwf8ya-7qu9F{&tL1{EKd z$`3H-9~dn(HEr8!H*y$^vdj)MGc&`FO%C$|_=p)A&FnT?CP@ct ztu6h8dm7XMb!g|S-Ctl0Gmr8(?rL>X8cii?hofPppd4BOy93RxVde=b_@3AbGs8X# z4yi+LP=TQ^T9qn>ZQF*Svj0zBji7DYIO9+GZ%lxIctxAS=`8U4W9Sdx)%|`od_^-G zay#S#Sb?l8ty7_1j%pMfB6pH zL=#0&f_DPmkwTPEf(j|bn?n$&kpn8CL(eUWg(}s33O$M@p37 zg_Qj@wMB&rDx`!GmCb%2k>aW}O$)C7r;qo7Yc~I8B${>w(qSpbYov6FzzY>fZBm31 zl%_}#Dz<$|4mhGn5f!BDuX$5Q5nf1e$B=K6GRCWypXcL<|9#}f(j{8LS^&9wiI>bxl+i-@Ta}^ zeoOZ$-+P-DMWVqU-ywhZzw#cu8J;-xm(Tsu{RF2xSS%OkK@6wMDdJ7uJDtug^@q>9 zzg+wQ3+4MF$*G&~wFBFxCsyYjczgHq}g79-hVvs|*X?8z^E5mQ^^2 z5+&s(zdV85!esRs7e`&3|8lOw5T_7urc!?@2wH;!=b?!xkDeliXRjKaPC+$CyGDn4 zConn6!ErH46cTGDm0f%s^Q)S1m9c4&DCa10RAuuXq<>Y*s@JcdDZ3#QF` zfm1|xHf1drXI!2FTW}CWiE<6RmYI#nE>0vARu)p@^rMbLC>=s3qZlE^apL;aR&Os% zS5JeZnrZK)D-a+sQO3Iy&tB`mG@O_aPVZ)*Dmr6bX36Sj)qfupJ*PJu2PwJWU~2c` z=vPz0X-wUvL{YvrhIZ*3Wt;ZL5UHq$tkd=Md8tr{n!wACpw%wokb zm{8i%-Fso|sV0bh!@v1il&@Ay%hfvQJ6jFa=Y0;%s{#I5>u%Xs7O4 z`UWx(hDbkbYp>?<61Dd7%o+RyWQLKIeNzC2eVX#@ay+=dw3k2-m!rSg)x)h3t#j34StKbk zV?@O-1)v~h1f-q1lE1pFz;QX+(p{GBk4onk)cJLbnM)h9m|-n6rd}R9r=#s<_q4O4 zZEL?_ef-kp@sqp!pg4FT`h{u=yK_*66M~6EA^;|KQG10&P%U3Q%_yu!B1k*k$tv_)orz{wawNUgb8p!DPq}6#pQCnBySPiwkl13 zviE|mTb+U_wX1-ta>iaFuT-zH%~LaD^kAfq@11RSW?TCHD%%|a4#;3SY}+RuJUG3D zuW{qjRlh#GwKt}Ac23i^g#E_i_QrYDHnXaL=*f6y*qT%H;p=#3A-acZilZAG-K{OTQH+CC z7RuG=M^~+R-Rspdy{Lld(RiW&cGkzP4_sU3@z%t}=pF=E>y=+k&90-oF&ug!FS|{`a zRSuDA5TKaKCj$#v9xSCF&f@)cKQMx=dpxnQx9I0a2quK38>Wjht3j{4TfAadqlh2? zMUo;a0yuyoAR;J{^n)CquRCkmGr63eow`Rq?rQ>p_l)jzv6_HVT6uZb07L>ACAPP% zv#ss4UD;zDOpex96U}O2Iy2YI%qS;a31e){wbeF)l{80%Wl^2Dv48`6&!)5$%+nN+ z0KPzNsx1Jcv`!sgQ!8hc{qKJ;vosu zK{ZpmnNV@#2{P9z%lJTG0)w%+YMBaD3_zssul29fb1IwJv(Cl=2S#dIjxdCcotSmK zEH9TuGea2N)ab)jo0?>NZJl?2Xx(#>cQev!@}D=K&z5ZRZSq_*zSQ z2{3^Js@7O83}FbYk=g6Xul6ivurvwpyjI%QK(sRm8%H$-ac9S7*+;)}VeHeY9_VTS z6;cmwpO4Uo&GCDizy!$hiY!MM0tZZ>pIyXjKQG5G_>n;r6#wzn@cHKGF2ppfxU<8u z5tpk|qdqH&{vsB|=H~vxS=!W#-SBQT{ zL3H;8)N1 z#jX617>G>!&2E0RjHg8ezP38GY4E)9gzpM^>eH7DowJ$sWe#dQ2^pEaY zE=IrffA?d4>*iB?z0BKNJ$D(c0Z#YBhuC#G6D6xnZ?R&+93*bNEbB=TV4&T8eFrwR zLh43aYJcVjs+rN<+G@&h!gTml^u6J{=`#j%PM9IoJVOO0-W2VopbV>g-+gvIx;TS6 zI1QkIofNO8Aj0^H?U`U|4~oTxxEO62`{H@me{;pg`HqY;dV3#(8FWmVy38)^XWm}Z-G@KV4@V+;B{_Ky*?AOkr^|o;n3-*LE zEcdQ$BTYuf_@PH)j9VvhXx||@UEcO)!fZYmmZ-JhV1kK17Vu~Pd^l~45Zm)!`-bW9 ziB#QZ6OL!^YU{SgLuD7j!-|k{eOcPzG}ouk^c}?cQ$Ie{7Yx0}d*8f$$>l-{DY?xX zH==(~=YfHx{!fPxDqH9GdKm>`TAhI{4T6lOgHRv?88v6kIp?86heG(ScYE(fHtGV- zBud;jQ9aBcSAKJc0sW+3-XsJEOn|3U4#L5~G%V4bI1>}eC&oYkO?j7F8RFt>ii6nq zp*;WMGp!&dA;zani$MtxAfQ4H2n8QpJXrdrFEc+;h8QEQ^~!?9Y-V#gZe7A`syXvQ z{4jq!l8nIMO`MAccwQj~sB#d*#o#jvF*cKE1|Tx)IQh{nSJUwE2Wak7qCX);GS;xx zDA5<~8U~mSg~0O)6@Y-4t_BCuJy0E&@M1+f!~W*@=~}(I9No`^*?i2tPg_mFnH-kV zQ6E52Jfg^4^lA>-Gk{aczXYJlL6l*^G@K2N?h%;7%5U$!d(X9|=)r@d`!Vhu1rt&( z>eSkxJO_xt3+69Uqwj#KKp=Z!au6*2NoJ2Q7x=v&PX(|CuCBOql<{#jKI8+`SushB zarl*XqktLL23j(UK3g!eX)FXBlwmp8`o(e4T)0n>+RwvLJ@UGbN=WBwKYWbVul^81 zC_)I~RoN;Z#KH= z&B2+R!J^zfkk0Iwc;@vLKmht>!~CEKovSB4LzLXRWn0}}XS=ruNM@4R8;%Eqa`905 zDVPrXvt{O1alN#ryd!7Xj0+IS`uh2GK0}zJdKx=Q7qqu^+j9TBak;rvQ@&iB&Fo;> zRxd6dZDFr$-P{MS3sZLl{+Tfl&~Mt8AL!7nj5=$7PISu{xY5%0b`ue1G7%hYxx96c z2ZLC~FL!?7^tyXNbwi#~6oJ$R{h0EZi#ye){qO&mBEU#atG_r&)ihE#NOf{$Ee_&y z{Bq~==(2OZYqK?9h*XcKFooHC%CZ^ST9hcjrqOqJ2$-%*?zM+6Q5Avd@lBND!Gm)t z?)*wGgN^FcCW}UlDGl}Y!%z@x=-;qP5J1y;b=`IRvQOL=;1bSz+7!pdGdOHdj_zJm zQ+22B*FXA;HN_gcA(=jL=6V{Y%VJY~)%j@xu(4OKnSt@GoE!olJbW+hdl(F3E$tNM z>1FDsVZuc2(*~-y*Iow}u9+1IEC8(5<`M;k)nI$I2}(BFm<}-ZOKoQmMyF~1?zd~> zAU9;hb~OYC$ApE_PpZD}9zPwL6sGQC2fWN00|LO=rzXI`#O@gPUbjkv@=P3{ukAHs zMn!#Y@|Q?%G7k=lrLCr1jl%X|x$zfXWmv|;FR4i8j#)P#hFdGKUccWB%8hc8CuXY; z_`O*gHj^s)bK5wk;Tas*%jKga_bHb*3u;}nR>=CNf2Mj+9h3vyVe^14Q8(ojhJWd| z9WI}d3EcEk%R-cgW3ueUY|8E5q9D~fcu&CQ>U^?S&b^WTYNo*a-s=bPU@TJL#Iz%` z@_{jj!kM~9ca925yLDq2bsMB~ziAN^=IMo@D~dV@_g)QC^tbElB)UD&nKZ^`u4BOS zhh+w3IGgg!wR*FcC^t^Qv{;6J6d@9Uf8J43q<=~GP%ilA!%z>Xcvu>KVi>q#z4Z6s z!8zKt?s2i?J}IcZw~sKPxkWGtRoI%7r0%&;#?AxiwxB3dVB&>9UHzDBFs&x)5l&~Z zRWm%4xNi{?rnboSr%gct6tKm5!C_+>J8Vj{M;!c^rD0`K<;Dod^l*&Vgc`JQ>*$vD zMa-hFKt~| zjzl2BHgK@_O2b4spnL6Ck1)}c3sxea+$`bUWpksYXMc`kzJ7m%Ue;;~`cc!f2bQf{8@ z2kcQV*WpfwZ(8NfLJ%rczUpDeoYc$z(-6v|g6hZ({mR9-ZUEx)mu3{? zh;F?n%Y+H#da!+TXE);t#U1W`c}%luhti8cVB-1ZXT)VADPRt5AR}|j)-7T>mkwL- z{r7QjdKD`C#ly&+RR|kRj_H62W-NWKjHCc2UJ@Ay$Fi)>$^<(3#cpCEk#_v_aLb?G94;7x?6vW8<#ee{@(b-A8u75IbVNkC|4H( zE*XRAb1J%7$GnAYrg0fZccoY2)`^P~3+>bKm#;)o6vYKYlv-@v;g>Wp&n+g40xyr! z?Y35y%TsVL^^e(1hkD&e6=qW`%YmgP{=L1E z52IY}J2GAWwSD1rVW_@xb>-p*q#1{DK~>@t5`dQ`HmUL(5wtXnOc zkJ`TDZ=NVo!OP{-*MA+Ivj&G#j1SSan#ScIm^fIy(#?%ZnCAi0)^_Jal%Po)+P1vG zFekH9XHG|TQpDl>sG;J?bWo#oj0~fOq-bW8E*fcad4pA`Gs=bq~0_4LkM61GwMfYqWh8bXMNt| zGp=3BB{zP2l^k*o5-L>i!V7^3ssfx6kIM@RrWn55xL%$pV6AOyF=8Z#f7J|Z5oA&71@MLOGJ8c&!99Kcx~KZPjwZ2%bAt_L{4mfWpOc1JecaNn)sX_Y8} z12RmGsXe4a^tY$Jeqtg2@uyc~bWQvD*tV(VA`tyEaSBoVG`NWy`K4eQ$UygQua{hP zfC$Oro5%l4l;D627Ev(6f%3%arS~6xfWrjXoe#VHvpH}K3xOy<5ZrYWGU~?^tgc>C zk?Si;k`b%4b^bDAA(sQ7A7MG99-^9L;a=A!vZOla@7l?5PSN4s9Yj;fJ z$(hC*Q~yAK@V{;Ng=Bxo0k&^L)>J1@gSBk;Ex9r|ss|T%vu3CSpnmRjOle0Mrd(e3 zQu;CVCuXHgYEJU#w;PX6!@YLB?j!1q+Ns@4LhdwA-@m&;oV}*Wz6o*hAUI}YF^$Us zkqcTEF?q*WvlRvdXV`;H%qFwboeso(qdQSex$cJi`ag@~t9v3jU9Eb-yfBQ?-OKP8 zPRl|XCuAP1gg~*v)@&v?INIvT+CG*$*DDmJ?qLt2M7;(bVuT#R>*$eZ33FixJYggS zro56nAOjf)Ys!+mbei!fAl@m(HAR$Yj2J1^8*0z&BD%l< z2ON+gsEW#n0S*EX&tJexppm45(UfF22r70 znj9d;3*gPy;C0VBiV2V*4CNIY0TbYWjEOH@#Jv2kgOM6zj0fYRo^^!j(b8R=mpi{m zd2W=b2-t6(6PQg+1~7WyZ&%yzd{qH5gdr+bfdmN9CAFiZ{##DH?DASaIh~aQ3B?i+;@wHDZ)AVI~%skj!q(Aq=E@BkWrqPskyY) ztSJLTVhST&?T)dCyYs0LOiv61;?61Ku$S&>il|`b!hiVik4&Xk35nEwdFHlx=6ORg zzm4SrcbGUZJ*G!OYq~-vV7hMdwxRvmA8#45tNw^ zaw;`zDrT9fQ)UGyf?~|?IC=G&_Q{3rJRT30iz)a0e#3%7E)9dd5hjj?15G2kTk*`m zNR1tJ+2{Q8IGHh?Blh0SM3h@6h3Sd22_}mL=E5GfH${v3ytImE1|#*WHf^i6ty?e2 zgX8hz`qAb_3S~2Kn(72cyRj*AVJ?pTaPRYPU z_YJ|a%Jn)_P!=3Wmo)Hv!uRCko%y|PNl$udoezVz77vjcM%)RXi z^8%*f8$(QlxsW?3?#i}y_>TtcdZ~C~@ZbK?U%6~+c5ag}Vu_H3bgtJ~&Bgfgnlg^d z)8&KUPrmu>m-%hm9}}(9npT@dUk|AG;cwjDc0Ly${X^dTIoPh(X(rCKo$cYeQ`F$N zcw8>jsBns75>%z@UvuI02ODc*%)J|!>J$0E7dQ_k%7A-3<5-f32>J3)apzJ<%uP3T;IfjLTL~4U}CN2 z!KuG6<=}t}fgucm31qCjT|HN>@3luYxOYVv9v6dRm+P-iTVNw#0%Qn7U;<1a1Iwf7 z%uWf`@zmTY+c?_U>95c4YoB^>3vj?e7y?6J0&1&5zAvTemdn{si92tVLAPAox-}~O z)7e&z12_mHMPLFPa($i;s)y6NxLK%&f~xzxNxec{8Bc33j*An@aM>_{43L4q1SY_N z5s2yeYwx|7x^r|;a+88vp%z)kec)4^`9QI>a}*DL4T7VcP(gGz1*JVmXLhDzFSdTP zr-O7`Z%>QC01K^22v6DzSe{<@3IZi4b@>IE`ESX%;qzEsvjjDUb^W#Tw-DA zA8izAV6ar-`;uNiQ*a{z*hA(lxBd8k?+5STfXfr6?drsYg2G-bPdy0s);$oMYYt+2 zbQ<<1RYIlseDl$7S7=EF&#GB<%5IZU?I&D)3HB( zm&eQS|3G&M9V0vvxJUR>_t^;uaiV8p@gL5&iojlwhYH(*^NGeooZ_6QJ^dZC@|`#*K~^Z0 zn1>nIoitYuj^S3Wp58njEWt6J#*6J@86M2wJ*FqYEE%Z#S!ik-ZA-w;8`R-LQTzli_PE=DwcWn;RncCy(GCNP6HrsQ9I`9MBm1nwP{>1L( zzd0U7DEV}i5KW*2q0tEM@@)i;u!ISr>#Jg8#GlrXos^CP*PlP-$LG3Q@WTSkITPF0Ze5pR%BCV38w6wl2zZ0Q zG-^^to;rDV-9i^?&~L z|3{0X`%g}3KI1lOre_MmXrSr{$pl@Y6dhKjphc?GkK`I5x?=&7n`>jUr~M4 z4c?GSvN$!U1Y1t_1cAUC8UoBhdA2s2&1O4purK<`UUgVt1^({cyOp5L=<8EeVDa%P$rq41XMpF%qKGi-HjMcjuMl>^mS5Q=06EwqEDHUZcP}lfg1{(l5 CHv`K6 literal 0 HcmV?d00001 diff --git a/shared/src/main/res/mipmap-xxxhdpi/ic_launcher_background.webp b/shared/src/main/res/mipmap-xxxhdpi/ic_launcher_background.webp new file mode 100644 index 0000000000000000000000000000000000000000..0458418894681a84766d452e998143052f215ef9 GIT binary patch literal 45084 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 Dkl@sn literal 0 HcmV?d00001 diff --git a/shared/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp b/shared/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp new file mode 100644 index 0000000000000000000000000000000000000000..a1e28ab037333ba5bdfb178a98fc2d4969f502bb GIT binary patch literal 7638 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 z zCJ(-W)$ZJr*^Ax_jeJdYw)gt&_VBEa@&AKweenMuqVm<&wDL9++}*a**hh)Tu>ZsU Y5Bopt|FHkV{tx>V4 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 O7;RKFK&h&XR;FDB%<7x~ literal 0 HcmV?d00001 diff --git a/shared/src/main/res/xml/automotive_app_desc.xml b/shared/src/main/res/xml/automotive_app_desc.xml new file mode 100644 index 0000000..8dc476f --- /dev/null +++ b/shared/src/main/res/xml/automotive_app_desc.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/shared/src/test/java/com/shilapi/xcertplay/airplay/AirPlayDisplaySettingsTest.kt b/shared/src/test/java/com/shilapi/xcertplay/airplay/AirPlayDisplaySettingsTest.kt new file mode 100644 index 0000000..d43d8a3 --- /dev/null +++ b/shared/src/test/java/com/shilapi/xcertplay/airplay/AirPlayDisplaySettingsTest.kt @@ -0,0 +1,51 @@ +package com.shilapi.xcertplay.airplay + +import org.junit.Assert.assertEquals +import org.junit.Test + +class AirPlayDisplaySettingsTest { + @Test + fun maximumObservedWidthScalesPhysicalSizeWithCurrentActivityWidth() { + val size = AirPlayDisplaySettings.resolvePhysicalSizeMm( + currentWidthPixels = 768, + currentHeightPixels = 800, + maximumWidthPixels = 1920, + maximumHeightPixels = 1080, + referenceMillimeters = 200, + basis = AirPlayPhysicalSizeBasis.WIDTH, + ) + + assertEquals(80, size.widthMm) + assertEquals(83, size.heightMm) + } + + @Test + fun maximumObservedHeightScalesPhysicalSizeWithCurrentActivityHeight() { + val size = AirPlayDisplaySettings.resolvePhysicalSizeMm( + currentWidthPixels = 1920, + currentHeightPixels = 978, + maximumWidthPixels = 1920, + maximumHeightPixels = 1080, + referenceMillimeters = 200, + basis = AirPlayPhysicalSizeBasis.HEIGHT, + ) + + assertEquals(356, size.widthMm) + assertEquals(181, size.heightMm) + } + + @Test + fun maximumResolutionKeepsConfiguredReferenceLength() { + val size = AirPlayDisplaySettings.resolvePhysicalSizeMm( + currentWidthPixels = 1920, + currentHeightPixels = 1080, + maximumWidthPixels = 1920, + maximumHeightPixels = 1080, + referenceMillimeters = 250, + basis = AirPlayPhysicalSizeBasis.WIDTH, + ) + + assertEquals(250, size.widthMm) + assertEquals(141, size.heightMm) + } +} diff --git a/shared/src/test/java/com/shilapi/xcertplay/airplay/AirPlayIapTunnelStreamTest.kt b/shared/src/test/java/com/shilapi/xcertplay/airplay/AirPlayIapTunnelStreamTest.kt new file mode 100644 index 0000000..dcd4f4b --- /dev/null +++ b/shared/src/test/java/com/shilapi/xcertplay/airplay/AirPlayIapTunnelStreamTest.kt @@ -0,0 +1,73 @@ +package com.shilapi.xcertplay.airplay + +import java.net.InetAddress +import java.net.Socket +import org.junit.Assert.assertArrayEquals +import org.junit.Assert.assertTrue +import org.junit.Test + +class AirPlayIapTunnelStreamTest { + @Test + fun inputConnectionCloseKeepsEventChannelAvailableForOutboundIap() { + val sent = mutableListOf() + val session = testSession() + val bridge = AirPlayIapTunnelStream( + session = session, + tunnel = IapTunnel(ByteArray(32)), + sendCommand = { data, _ -> + sent += data.copyOf() + true + }, + ) + + try { + val port = bridge.listen() + Socket(InetAddress.getByName("127.0.0.1"), port).use { } + + val payload = byteArrayOf(1, 2, 3) + bridge.send(payload) + + assertTrue(sent.size == 1) + assertArrayEquals(payload, sent.single()) + } finally { + bridge.close() + session.close() + } + } + + @Test + fun ipv6ListenerAcceptsIpv6Loopback() { + val bridge = AirPlayIapTunnelStream( + session = testSession(), + tunnel = IapTunnel( + readKey = ByteArray(32), + bindAddress = InetAddress.getByName("::"), + ), + sendCommand = { _, _ -> true }, + ) + + try { + val port = bridge.listen() + Socket(InetAddress.getByName("::1"), port).use { } + } finally { + bridge.close() + } + } + + private fun testSession(): AirPlaySession = AirPlaySession( + socket = Socket(), + config = AirPlayConfig( + deviceName = "test", + deviceId = "02:00:00:00:00:02", + btMac = "02:00:00:00:00:01", + sourceVersion = "1.0", + main = AirPlayDisplayConfig(widthPixels = 800, heightPixels = 480), + ), + identity = AirPlayIdentity.generate(), + pairings = PairingStore(), + mfi = null, + listener = object : AirPlaySessionListener {}, + media = object : AirPlayMediaHandler {}, + ) + +} diff --git a/shared/src/test/java/com/shilapi/xcertplay/airplay/AirPlayInfoPlistTest.kt b/shared/src/test/java/com/shilapi/xcertplay/airplay/AirPlayInfoPlistTest.kt new file mode 100644 index 0000000..97c2a4a --- /dev/null +++ b/shared/src/test/java/com/shilapi/xcertplay/airplay/AirPlayInfoPlistTest.kt @@ -0,0 +1,233 @@ +package com.shilapi.xcertplay.airplay + +import org.junit.Assert.assertEquals +import org.junit.Assert.assertFalse +import org.junit.Assert.assertNotNull +import org.junit.Assert.assertTrue +import org.junit.Test + +class AirPlayInfoPlistTest { + @Test + fun defaultDisplayIncludesFullViewAndSafeAreas() { + val info = AirPlayInfoPlist.build( + AirPlayConfig( + deviceName = "test", + deviceId = "02:00:00:00:00:02", + btMac = "02:00:00:00:00:02", + sourceVersion = "366.0", + main = AirPlayDisplayConfig(widthPixels = 1280, heightPixels = 720), + ), + ) + + val display = (info["displays"] as List<*>).single() as Map<*, *> + val view = (display["viewAreas"] as List<*>).single() as Map<*, *> + val safe = view["safeArea"] as Map<*, *> + assertEquals(0, display["initialViewArea"]) + assertEquals(1280, view["widthPixels"]) + assertEquals(720, view["heightPixels"]) + assertEquals(0, view["originXPixels"]) + assertEquals(0, view["originYPixels"]) + assertEquals(1, display["primaryInputDevice"]) + assertNotNull(safe) + assertEquals(1280, safe["widthPixels"]) + assertEquals(720, safe["heightPixels"]) + assertEquals(true, safe["drawUIOutsideSafeArea"]) + } + + @Test + fun hevcCapabilityIsAdvertisedOnlyWhenEnabled() { + val base = AirPlayConfig( + deviceName = "test", + deviceId = "02:00:00:00:00:02", + btMac = "02:00:00:00:00:02", + sourceVersion = "366.0", + main = AirPlayDisplayConfig(widthPixels = 1280, heightPixels = 720), + ) + + assertFalse(AirPlayInfoPlist.build(base).containsKey("hevcInfo")) + assertTrue(AirPlayInfoPlist.build(base.copy(hevc = true)).containsKey("hevcInfo")) + } + + @Test + fun drivingSideAndDisplayValuesAreAdvertised() { + val info = AirPlayInfoPlist.build( + AirPlayConfig( + deviceName = "test", + deviceId = "02:00:00:00:00:02", + btMac = "02:00:00:00:00:02", + sourceVersion = "366.0", + main = AirPlayDisplayConfig( + widthPixels = 1280, + heightPixels = 720, + fps = 37, + widthPhysicalMm = 125, + ), + rightHandDrive = true, + manufacturer = "Example", + model = "HeadUnit", + ), + ) + + val display = (info["displays"] as List<*>).single() as Map<*, *> + assertEquals(true, info["rightHandDrive"]) + assertEquals("Example", info["manufacturer"]) + assertEquals("HeadUnit", info["model"]) + assertEquals(35, display["maxFPS"]) + assertEquals(125, display["widthPhysical"]) + assertEquals(70, display["heightPhysical"]) + } + + @Test + fun squareOemIconIsAdvertisedWithItsOriginalBytes() { + val iconBytes = byteArrayOf(0x01, 0x02, 0x03, 0x04) + val info = AirPlayInfoPlist.build( + AirPlayConfig( + deviceName = "test", + deviceId = "02:00:00:00:00:02", + btMac = "02:00:00:00:00:02", + sourceVersion = "366.0", + main = AirPlayDisplayConfig(widthPixels = 1280, heightPixels = 720), + icons = listOf(AirPlayIcon(1, 1, iconBytes)), + oemLabel = "xcertplay", + ), + ) + + val icon = (info["oemIcons"] as List<*>).single() as Map<*, *> + assertEquals(true, info["oemIconVisible"]) + assertEquals("xcertplay", info["oemIconLabel"]) + assertEquals(1, icon["widthPixels"]) + assertEquals(1, icon["heightPixels"]) + assertTrue((icon["imageData"] as ByteArray).contentEquals(iconBytes)) + } + + @Test + fun safeAreaInsetsReachTheAirPlayViewArea() { + val info = AirPlayInfoPlist.build( + AirPlayConfig( + deviceName = "test", + deviceId = "02:00:00:00:00:02", + btMac = "02:00:00:00:00:02", + sourceVersion = "366.0", + main = AirPlayDisplayConfig( + widthPixels = 960, + heightPixels = 540, + safeArea = AirPlayInsets(top = 10, bottom = 15, left = 20, right = 25), + safeAreaDrawOutside = false, + ), + ), + ) + + val display = (info["displays"] as List<*>).single() as Map<*, *> + val view = (display["viewAreas"] as List<*>).single() as Map<*, *> + val safe = view["safeArea"] as Map<*, *> + assertEquals(915, safe["widthPixels"]) + assertEquals(515, safe["heightPixels"]) + assertEquals(20, safe["originXPixels"]) + assertEquals(10, safe["originYPixels"]) + assertEquals(false, safe["drawUIOutsideSafeArea"]) + } + + @Test + fun reportedSafeAreaUsesActivityMappingAndEvenAlignment() { + val fullHdInsets = AirPlaySafeArea.toInsets( + mapping = SafeAreaRect(left = 0, top = 0, right = 1920, bottom = 975), + activityWidthPixels = 1920, + activityHeightPixels = 1080, + displayWidthPixels = 1920, + displayHeightPixels = 1080, + ) + val compactInsets = AirPlaySafeArea.toInsets( + mapping = SafeAreaRect(left = 34, top = 75, right = 734, bottom = 725), + activityWidthPixels = 768, + activityHeightPixels = 800, + displayWidthPixels = 768, + displayHeightPixels = 800, + ) + + fun safeArea( + widthPixels: Int, + heightPixels: Int, + insets: AirPlayInsets, + ): Map<*, *> { + val info = AirPlayInfoPlist.build( + AirPlayConfig( + deviceName = "test", + deviceId = "02:00:00:00:00:02", + btMac = "02:00:00:00:00:02", + sourceVersion = "366.0", + main = AirPlayDisplayConfig( + widthPixels = widthPixels, + heightPixels = heightPixels, + safeArea = insets, + ), + ), + ) + val display = (info["displays"] as List<*>).single() as Map<*, *> + val view = (display["viewAreas"] as List<*>).single() as Map<*, *> + return view["safeArea"] as Map<*, *> + } + + val fullHd = safeArea(1920, 1080, fullHdInsets) + val compact = safeArea(768, 800, compactInsets) + + assertEquals(1920, fullHd["widthPixels"]) + assertEquals(976, fullHd["heightPixels"]) + assertEquals(700, compact["widthPixels"]) + assertEquals(650, compact["heightPixels"]) + assertEquals(34, compact["originXPixels"]) + assertEquals(75, compact["originYPixels"]) + } + + @Test + fun microphoneInputsAreAdvertisedOnlyWhenEnabled() { + val base = AirPlayConfig( + deviceName = "test", + deviceId = "02:00:00:00:00:02", + btMac = "02:00:00:00:00:02", + sourceVersion = "366.0", + main = AirPlayDisplayConfig(widthPixels = 1280, heightPixels = 720), + ) + + fun telephony(info: Map): Map<*, *> = + (info["audioFormats"] as List<*>) + .map { it as Map<*, *> } + .single { it["audioType"] == "telephony" } + + fun defaultAudio(info: Map): Map<*, *> = + (info["audioFormats"] as List<*>) + .map { it as Map<*, *> } + .single { it["type"] == 100 && it["audioType"] == "default" } + + assertFalse(telephony(AirPlayInfoPlist.build(base)).containsKey("audioInputFormats")) + assertTrue( + telephony(AirPlayInfoPlist.build(base.copy(microphone = true))) + .containsKey("audioInputFormats"), + ) + assertEquals( + 0x70004154, + defaultAudio(AirPlayInfoPlist.build(base.copy(microphone = true)))["audioInputFormats"], + ) + assertEquals( + 0x70004154, + telephony(AirPlayInfoPlist.build(base.copy(microphone = true)))["audioInputFormats"], + ) + } + + @Test + fun mainAltAndHighAudioStreamsAreDeclared() { + val info = AirPlayInfoPlist.build( + AirPlayConfig( + deviceName = "test", + deviceId = "02:00:00:00:00:02", + btMac = "02:00:00:00:00:02", + sourceVersion = "366.0", + main = AirPlayDisplayConfig(widthPixels = 1280, heightPixels = 720), + ), + ) + + val types = (info["audioFormats"] as List<*>) + .map { (it as Map<*, *>)["type"] } + .toSet() + assertEquals(setOf(100, 101, 102), types) + } +} diff --git a/shared/src/test/java/com/shilapi/xcertplay/airplay/AirPlayPeerDiagnosticsTest.kt b/shared/src/test/java/com/shilapi/xcertplay/airplay/AirPlayPeerDiagnosticsTest.kt new file mode 100644 index 0000000..e88bce8 --- /dev/null +++ b/shared/src/test/java/com/shilapi/xcertplay/airplay/AirPlayPeerDiagnosticsTest.kt @@ -0,0 +1,16 @@ +package com.shilapi.xcertplay.airplay + +import org.junit.Assert.* +import org.junit.Test + +class AirPlayPeerDiagnosticsTest { + @Test fun productAndVersionDetailsAreAvailableWithoutIdentity() { + assertEquals("Phone display peer model=iPhone11,2 ios=18.7.10 airplay=950.7.1", + AirPlayPeerDiagnostics.summary("iPhone11,2", "18.7.10", "950.7.1")) + } + + @Test fun absentOrUnexpectedFieldsCannotLeakPersonalOrMultilineValues() { + val summary = AirPlayPeerDiagnostics.summary("Jane's iPhone", "26.0\npassword=secret", "") + assertEquals("Phone display peer model=not_reported ios=not_reported airplay=not_reported", summary) + } +} diff --git a/shared/src/test/java/com/shilapi/xcertplay/airplay/CarPlayDisplayScaleTest.kt b/shared/src/test/java/com/shilapi/xcertplay/airplay/CarPlayDisplayScaleTest.kt new file mode 100644 index 0000000..5563d52 --- /dev/null +++ b/shared/src/test/java/com/shilapi/xcertplay/airplay/CarPlayDisplayScaleTest.kt @@ -0,0 +1,33 @@ +package com.shilapi.xcertplay.airplay + +import org.junit.Assert.assertEquals +import org.junit.Test + +class CarPlayDisplayScaleTest { + @Test + fun scalesHandshakeDisplayAtSupportedSteps() { + val native = AirPlayDisplayConfig(widthPixels = 1080, heightPixels = 2160) + + val half = CarPlayDisplayScale.apply(native, 5) + + assertEquals(540, half.widthPixels) + assertEquals(1080, half.heightPixels) + assertEquals("0.5x", CarPlayDisplayScale.label(5)) + } + + @Test + fun clampsScaleToTheUiRange() { + assertEquals(3, CarPlayDisplayScale.sanitize(0)) + assertEquals(10, CarPlayDisplayScale.sanitize(20)) + } + + @Test + fun alignsScaledDisplayDimensionsToEvenPixels() { + val native = AirPlayDisplayConfig(widthPixels = 1920, heightPixels = 978) + + val scaled = CarPlayDisplayScale.apply(native, 7) + + assertEquals(1344, scaled.widthPixels) + assertEquals(686, scaled.heightPixels) + } +} diff --git a/shared/src/test/java/com/shilapi/xcertplay/airplay/CarPlayMediaEngineTest.kt b/shared/src/test/java/com/shilapi/xcertplay/airplay/CarPlayMediaEngineTest.kt new file mode 100644 index 0000000..88d2a3d --- /dev/null +++ b/shared/src/test/java/com/shilapi/xcertplay/airplay/CarPlayMediaEngineTest.kt @@ -0,0 +1,83 @@ +package com.shilapi.xcertplay.airplay + +import java.io.Closeable +import java.net.Socket +import java.math.BigInteger +import org.junit.Assert.assertEquals +import org.junit.Assert.assertTrue +import org.junit.Test + +class CarPlayMediaEngineTest { + @Test + fun streamConnectionIdUsesUnsignedDecimalForHkdfSalt() { + assertEquals("18446744073709551615", unsignedPlistDecimal(-1L)) + assertEquals( + BigInteger("18446744073709551615"), + unsignedPlistInteger(-1L), + ) + } + + @Test + fun screenStreamTeardownReportsInactive() { + val events = mutableListOf>() + val sink = object : MediaSink { + override fun onScreenStreamActive(type: Int, active: Boolean) { + events += type to active + } + } + val session = testSession() + + try { + val engine = CarPlayMediaEngine(sink) + engine.onTeardown(session, 110) + engine.onTeardown(session, 100) + } finally { + session.close() + } + + assertEquals(listOf(110 to false), events) + } + + @Test + fun sessionCloseReportsAllScreenStreamsInactive() { + val events = mutableListOf>() + val sink = object : MediaSink { + override fun onScreenStreamActive(type: Int, active: Boolean) { + events += type to active + } + } + val session = testSession() + val engine = CarPlayMediaEngine(sink) + val streamsField = CarPlayMediaEngine::class.java.getDeclaredField("streams").apply { + isAccessible = true + } + @Suppress("UNCHECKED_CAST") + val streams = streamsField.get(engine) as + MutableMap + streams[CarPlayMediaEngine.StreamKey(session, 110)] = Closeable {} + streams[CarPlayMediaEngine.StreamKey(session, 111)] = Closeable {} + streams[CarPlayMediaEngine.StreamKey(session, 100)] = Closeable {} + + engine.onSessionClosed(session) + session.close() + + assertEquals(setOf(110 to false, 111 to false), events.toSet()) + assertTrue(streams.isEmpty()) + } + + private fun testSession(): AirPlaySession = AirPlaySession( + socket = Socket(), + config = AirPlayConfig( + deviceName = "test", + deviceId = "02:00:00:00:00:02", + btMac = "02:00:00:00:00:01", + sourceVersion = "1.0", + main = AirPlayDisplayConfig(widthPixels = 800, heightPixels = 480), + ), + identity = AirPlayIdentity.generate(), + pairings = PairingStore(), + mfi = null, + listener = object : AirPlaySessionListener {}, + media = object : AirPlayMediaHandler {}, + ) +} diff --git a/shared/src/test/java/com/shilapi/xcertplay/airplay/CarPlayUiScaleTest.kt b/shared/src/test/java/com/shilapi/xcertplay/airplay/CarPlayUiScaleTest.kt new file mode 100644 index 0000000..fefc425 --- /dev/null +++ b/shared/src/test/java/com/shilapi/xcertplay/airplay/CarPlayUiScaleTest.kt @@ -0,0 +1,63 @@ +package com.shilapi.xcertplay.airplay + +import org.junit.Assert.* +import org.junit.Test + +class CarPlayUiScaleTest { + private val display = AirPlayDisplayConfig(1920, 1080, 200, 113, fps = 30) + + @Test fun smallerCanvasMatchesTheLiveVerifiedProfile() { + val smaller = CarPlayUiScale.apply(display, 75) + assertEquals(2560, smaller.widthPixels) + assertEquals(1440, smaller.heightPixels) + assertEquals(display, smaller.copy(widthPixels = 1920, heightPixels = 1080)) + val small = CarPlayUiScale.apply(display, 85) + assertEquals(2258, small.widthPixels) + assertEquals(1270, small.heightPixels) + val large = CarPlayUiScale.apply(display, 115) + assertEquals(1670, large.widthPixels) + assertEquals(940, large.heightPixels) + } + + @Test fun safeAndViewAreasKeepTheirPositionOnTheTouchSurface() { + val original = display.copy(safeArea = AirPlayInsets(30, 60, 90, 120), + viewArea = AirPlayInsets(6, 12, 18, 24)) + val smaller = CarPlayUiScale.apply(original, 75) + assertEquals(AirPlayInsets(40, 80, 120, 160), smaller.safeArea) + assertEquals(AirPlayInsets(8, 16, 24, 32), smaller.viewArea) + assertEquals(original.safeArea!!.left.toDouble() / original.widthPixels, + smaller.safeArea!!.left.toDouble() / smaller.widthPixels, 0.0001) + } + + @Test fun reducedResolutionRemainsASeparateBaseForTheCanvas() { + val reduced = CarPlayDisplayScale.apply(display, 6) + val smaller = CarPlayUiScale.apply(reduced, 75) + assertEquals(1536, smaller.widthPixels) + assertEquals(864, smaller.heightPixels) + assertEquals(30, smaller.fps) + } + + @Test fun defaultUnknownAndExcessiveRequestsDoNotAlterTheExistingDisplay() { + assertSame(display, CarPlayUiScale.apply(display, 100)) + assertSame(display, CarPlayUiScale.apply(display, 0)) + assertSame(display, CarPlayUiScale.apply(display, Int.MAX_VALUE)) + val fourK = display.copy(widthPixels = 3840, heightPixels = 2160) + assertSame(fourK, CarPlayUiScale.apply(fourK, 75)) + val portrait = display.copy(widthPixels = 2160, heightPixels = 3840) + assertSame(portrait, CarPlayUiScale.apply(portrait, 75)) + assertEquals(3840, CarPlayUiScale.apply(display.copy(widthPixels = 2880, heightPixels = 1620), 75).widthPixels) + } + + @Test fun negotiatedDisplayAndAreasUseTheSameCanvas() { + val main = CarPlayUiScale.apply(display, 75) + val info = AirPlayInfoPlist.build(AirPlayConfig("Test", "00:11:22:33:44:55", "00:11:22:33:44:55", sourceVersion = "950.7.1", main = main)) + val screen = (info["displays"] as List<*>).first() as Map<*, *> + val view = (screen["viewAreas"] as List<*>).first() as Map<*, *> + val safe = view["safeArea"] as Map<*, *> + for (area in listOf(screen, view, safe)) { + assertEquals(2560, area["widthPixels"]) + assertEquals(1440, area["heightPixels"]) + } + assertFalse(screen.containsKey("zoomFactor")) + } +} diff --git a/shared/src/test/java/com/shilapi/xcertplay/airplay/MicrophonePacketizerTest.kt b/shared/src/test/java/com/shilapi/xcertplay/airplay/MicrophonePacketizerTest.kt new file mode 100644 index 0000000..bc3e57e --- /dev/null +++ b/shared/src/test/java/com/shilapi/xcertplay/airplay/MicrophonePacketizerTest.kt @@ -0,0 +1,52 @@ +package com.shilapi.xcertplay.airplay + +import org.junit.Assert.assertArrayEquals +import org.junit.Assert.assertEquals +import org.junit.Test + +class MicrophonePacketizerTest { + @Test + fun packetUsesRtpHeaderAndInputKeyAad() { + val key = ByteArray(32) { index -> (index + 1).toByte() } + val counters = MicrophoneCounters() + val body = byteArrayOf(0x28, 0x01, 0x02, 0x03) + + val packet = MicrophonePacketizer.sealPacket(key, 100, counters, body, 480) + + assertEquals(0x80, packet[0].toInt() and 0xff) + assertEquals(100, packet[1].toInt() and 0xff) + assertEquals(0, ((packet[2].toInt() and 0xff) shl 8) or (packet[3].toInt() and 0xff)) + assertEquals( + 0, + ((packet[4].toInt() and 0xff) shl 24) or + ((packet[5].toInt() and 0xff) shl 16) or + ((packet[6].toInt() and 0xff) shl 8) or + (packet[7].toInt() and 0xff), + ) + + val sealedEnd = packet.size - MicrophonePacketizer.NONCE_LEN + val nonce = ByteArray(12) + packet.copyInto(nonce, 4, sealedEnd, packet.size) + val opened = AirPlayCrypto.chachaOpen( + key, + nonce, + packet.copyOfRange(MicrophonePacketizer.RTP_HEADER_LEN, sealedEnd), + packet.copyOfRange(4, MicrophonePacketizer.RTP_HEADER_LEN), + ) + + assertArrayEquals(body, opened) + assertEquals(1, counters.sequence) + assertEquals(480, counters.timestamp) + assertEquals(1L, counters.nonce) + } + + @Test + fun pcmIsConvertedToBigEndian() { + assertArrayEquals( + byteArrayOf(0x12, 0x34, 0x56, 0x78), + MicrophonePacketizer.toWirePcm( + byteArrayOf(0x34, 0x12, 0x78, 0x56), + ), + ) + } +} diff --git a/shared/src/test/java/com/shilapi/xcertplay/airplay/SafeAreaTest.kt b/shared/src/test/java/com/shilapi/xcertplay/airplay/SafeAreaTest.kt new file mode 100644 index 0000000..c00c18d --- /dev/null +++ b/shared/src/test/java/com/shilapi/xcertplay/airplay/SafeAreaTest.kt @@ -0,0 +1,134 @@ +package com.shilapi.xcertplay.airplay + +import org.junit.Assert.assertEquals +import org.junit.Assert.assertNull +import org.junit.Test + +class SafeAreaTest { + @Test + fun defaultEditorUsesQuarterInsetsFromEveryEdge() { + val rect = AirPlaySafeArea.default(1920, 1080) + + assertEquals(480, rect.left) + assertEquals(270, rect.top) + assertEquals(1440, rect.right) + assertEquals(810, rect.bottom) + } + + @Test + fun activityMappingIsScaledIntoNegotiatedDisplaySpace() { + val mapping = SafeAreaRect(left = 10, top = 20, right = 1910, bottom = 1060) + + val insets = AirPlaySafeArea.toInsets( + mapping = mapping, + activityWidthPixels = 1920, + activityHeightPixels = 1080, + displayWidthPixels = 960, + displayHeightPixels = 540, + ) + + assertEquals(5, insets.left) + assertEquals(10, insets.top) + assertEquals(5, insets.right) + assertEquals(10, insets.bottom) + } + + @Test + fun missingMappingResolvesToFullDisplay() { + val insets = AirPlaySafeArea.toInsets( + mapping = null, + activityWidthPixels = 1920, + activityHeightPixels = 1080, + displayWidthPixels = 576, + displayHeightPixels = 324, + ) + + assertEquals(AirPlayInsets(), insets) + } + + @Test + fun safeAreaDimensionsAreAlignedToEvenPixelsAfterActivityMapping() { + val insets = AirPlaySafeArea.toInsets( + mapping = SafeAreaRect(left = 0, top = 0, right = 1920, bottom = 975), + activityWidthPixels = 1920, + activityHeightPixels = 1080, + displayWidthPixels = 1920, + displayHeightPixels = 1080, + ) + + assertEquals(AirPlayInsets(bottom = 104), insets) + } + + @Test + fun alreadyEvenSafeAreaDimensionsAreUnchanged() { + val insets = AirPlaySafeArea.toInsets( + mapping = SafeAreaRect(left = 34, top = 75, right = 734, bottom = 725), + activityWidthPixels = 768, + activityHeightPixels = 800, + displayWidthPixels = 768, + displayHeightPixels = 800, + ) + + assertEquals(AirPlayInsets(top = 75, bottom = 75, left = 34, right = 34), insets) + } + + @Test + fun activity978MapsThroughEvenAlignedDisplayDimensions() { + val native = AirPlayDisplayConfig(widthPixels = 1920, heightPixels = 978) + val display = CarPlayDisplayScale.apply(native, 7) + + val full = AirPlaySafeArea.toInsets( + mapping = null, + activityWidthPixels = 1920, + activityHeightPixels = 978, + displayWidthPixels = display.widthPixels, + displayHeightPixels = display.heightPixels, + ) + val custom = AirPlaySafeArea.toInsets( + mapping = SafeAreaRect(left = 100, top = 50, right = 1800, bottom = 900), + activityWidthPixels = 1920, + activityHeightPixels = 978, + displayWidthPixels = display.widthPixels, + displayHeightPixels = display.heightPixels, + ) + + assertEquals(1344, display.widthPixels) + assertEquals(686, display.heightPixels) + assertEquals(AirPlayInsets(), full) + assertEquals(70, custom.left) + assertEquals(35, custom.top) + assertEquals(84, custom.right) + assertEquals(55, custom.bottom) + } + + @Test + fun editorCanScaleBetweenActivitySizesWithoutChangingRatios() { + val activityRect = SafeAreaRect(1900, 1000, 2100, 1200) + + val editorRect = AirPlaySafeArea.scaleRect( + rect = activityRect, + sourceWidthPixels = 2400, + sourceHeightPixels = 1600, + targetWidthPixels = 1200, + targetHeightPixels = 800, + ) + val restored = AirPlaySafeArea.scaleRect( + rect = editorRect, + sourceWidthPixels = 1200, + sourceHeightPixels = 800, + targetWidthPixels = 2400, + targetHeightPixels = 1600, + ) + + assertEquals(activityRect, restored) + } + + @Test + fun codecRoundTripsAndRejectsInvalidData() { + val rect = SafeAreaRect(100, 200, 900, 700) + + assertEquals(rect, SafeAreaCodec.decode(SafeAreaCodec.encode(rect))) + assertNull(SafeAreaCodec.decode("1,2,3")) + assertNull(SafeAreaCodec.decode("1,2,1,4")) + } +} diff --git a/shared/src/test/java/com/shilapi/xcertplay/airplay/ScreenCodecTest.kt b/shared/src/test/java/com/shilapi/xcertplay/airplay/ScreenCodecTest.kt new file mode 100644 index 0000000..fcf38c3 --- /dev/null +++ b/shared/src/test/java/com/shilapi/xcertplay/airplay/ScreenCodecTest.kt @@ -0,0 +1,34 @@ +package com.shilapi.xcertplay.airplay + +import org.junit.Assert.assertArrayEquals +import org.junit.Assert.assertSame +import org.junit.Test + +class ScreenCodecTest { + @Test + fun validLengthPrefixesBecomeAnnexBInPlace() { + val first = byteArrayOf(0x40, 0x01) + val second = byteArrayOf(0x42, 0x01, 0x02) + val payload = + byteArrayOf(0, 0, 0, first.size.toByte()) + first + + byteArrayOf(0, 0, 0, second.size.toByte()) + second + + val converted = ScreenCodec.lengthPrefixedToAnnexB(payload) + + assertSame(payload, converted) + assertArrayEquals( + byteArrayOf(0, 0, 0, 1) + first + + byteArrayOf(0, 0, 0, 1) + second, + converted, + ) + } + + @Test + fun malformedLengthsLeavePayloadUntouched() { + val payload = byteArrayOf(0, 0, 0, 5, 0x40, 0x01) + val original = payload.copyOf() + + assertSame(payload, ScreenCodec.lengthPrefixedToAnnexB(payload)) + assertArrayEquals(original, payload) + } +} diff --git a/shared/src/test/java/com/shilapi/xcertplay/iap2/Iap2ProtocolTest.kt b/shared/src/test/java/com/shilapi/xcertplay/iap2/Iap2ProtocolTest.kt new file mode 100644 index 0000000..5838684 --- /dev/null +++ b/shared/src/test/java/com/shilapi/xcertplay/iap2/Iap2ProtocolTest.kt @@ -0,0 +1,189 @@ +package com.shilapi.xcertplay.iap2 + +import com.shilapi.xcertplay.iap2.body.Iap2BodyReader +import com.shilapi.xcertplay.iap2.catalog.Iap2Endpoints +import com.shilapi.xcertplay.iap2.message.Iap2CarPlayMessages +import com.shilapi.xcertplay.iap2.message.Iap2ClusterAsset +import com.shilapi.xcertplay.iap2.message.Iap2ControlMessages +import com.shilapi.xcertplay.iap2.message.Iap2Messages +import com.shilapi.xcertplay.iap2.message.Iap2WirelessMessages +import com.shilapi.xcertplay.iap2.message.Iap2WirelessSessionParameters +import com.shilapi.xcertplay.iap2.trace.Iap2FrameFormatter +import com.shilapi.xcertplay.iap2.trace.Iap2TraceDirection +import com.shilapi.xcertplay.iap2.wire.Iap2CsmFramer +import com.shilapi.xcertplay.iap2.wire.Iap2Frame +import com.shilapi.xcertplay.iap2.wire.Iap2Parameter +import com.shilapi.xcertplay.iap2.wire.Iap2ParameterList +import com.shilapi.xcertplay.iap2.wire.Iap2ProtocolException +import org.junit.Assert.assertArrayEquals +import org.junit.Assert.assertEquals +import org.junit.Assert.assertFalse +import org.junit.Assert.assertNull +import org.junit.Assert.assertTrue +import org.junit.Test + +class Iap2ProtocolTest { + @Test + fun catalogRegistersEveryReferenceEndpointOnce() { + assertEquals(151, Iap2Endpoints.ALL.size) + assertEquals(151, Iap2Endpoints.ALL.map { it.id }.toSet().size) + } + + @Test + fun framerAcceptsFragmentedAndConcatenatedFrames() { + val first = Iap2Frame(0x4300, byteArrayOf(0, 4, 0, 0)) + val second = Iap2Frame(0x4301, byteArrayOf(0, 5, 0, 0, 1)) + val bytes = first.encodedFrame() + second.encodedFrame() + val framer = Iap2CsmFramer() + + assertTrue(framer.offer(bytes.copyOfRange(0, 3)).isEmpty()) + assertEquals(listOf(first, second), framer.offer(bytes.copyOfRange(3, bytes.size))) + } + + @Test + fun orderedParameterListPreservesRepeatedAndUnknownIds() { + val original = listOf( + Iap2Parameter(0, byteArrayOf(1)), + Iap2Parameter(0, byteArrayOf(2)), + Iap2Parameter(0x7fff, byteArrayOf(3, 4)), + ) + val decoded = Iap2ParameterList.parse(Iap2ParameterList.of(original).encode()) + + assertEquals(listOf(0, 0, 0x7fff), decoded.asList().map { it.id }) + assertArrayEquals(byteArrayOf(1), decoded.all(0)[0].payload) + assertArrayEquals(byteArrayOf(2), decoded.all(0)[1].payload) + assertArrayEquals(byteArrayOf(3, 4), decoded.first(0x7fff)?.payload) + } + + @Test + fun genericBuilderCanConstructNestedUnmodeledEndpointBody() { + val frame = Iap2Messages.buildRaw(0x0d01) { + u16(0, 1) + group(4) { + u32(0, 7) + u8(1, 2) + } + } + val body = Iap2BodyReader.of(frame) + val roadSign = body.group(4) + + assertEquals(1, body.u16(0)) + assertEquals(7L, roadSign.u32(0)) + assertEquals(2, roadSign.u8(1)) + } + + @Test + fun carPlayStartSessionSupportsReferenceOptionalFields() { + val frame = Iap2CarPlayMessages.startSession( + wiredIpv6Addresses = listOf("fe80::2"), + wiredReserved = 3L, + wireless = Iap2WirelessSessionParameters( + ssid = "LIVI", + passphrase = "secret", + channel = 36, + ipAddresses = listOf("192.168.1.1", "192.168.1.2"), + securityType = 3, + ), + airPlayPort = 7000, + deviceIdentifier = "dev-1", + publicKey = "pub", + sourceVersion = "1.0", + sdkVersion = "27.0", + clusterAsset = Iap2ClusterAsset("cluster", 4), + mutualAuth = true, + ) + val body = Iap2BodyReader.of(frame) + val wired = body.group(0) + val wireless = body.group(1) + + assertEquals("fe80::2", wired.string(0)) + assertEquals(3L, wired.u32(1)) + assertEquals("LIVI", wireless.string(0)) + assertEquals(2, wireless.all(3).size) + assertEquals("192.168.1.2", wireless.all(3)[1].payload?.let { String(it).trimEnd('\u0000') }) + assertEquals(7000L, body.u32(2)) + assertEquals("27.0", body.string(6)) + assertEquals("cluster", body.group(7).string(0)) + assertEquals(4L, body.group(7).u32(1)) + assertEquals(1, body.u8(8)) + } + + @Test + fun wirelessCarPlayAvailabilityUsesBooleanReferenceSemantics() { + assertFalse( + Iap2WirelessMessages.wirelessCarPlayAvailability( + Iap2Messages.buildRaw(0x4e0d) { u8(0, 0) }, + ), + ) + assertTrue( + Iap2WirelessMessages.wirelessCarPlayAvailability( + Iap2Messages.buildRaw(0x4e0d) { u8(0, 1) }, + ), + ) + val invalid = Iap2Messages.buildRaw(0x4e0d) { u8(0, 2) } + try { + Iap2WirelessMessages.wirelessCarPlayAvailability(invalid) + throw AssertionError("Expected an invalid boolean availability to be rejected") + } catch (_: Iap2ProtocolException) { + // Expected. + } + } + + @Test + fun accessoryWifiConfigurationOmitsOrIncludesOptionalBssid() { + val withoutBssid = Iap2WirelessMessages.accessoryWiFiConfiguration( + ssid = "LIVI", + passphrase = "secret", + channel = 36, + securityType = 3, + ) + val withBssid = Iap2WirelessMessages.accessoryWiFiConfiguration( + ssid = "LIVI", + passphrase = "secret", + channel = 36, + securityType = 3, + bssid = byteArrayOf(1, 2, 3, 4, 5, 6), + ) + + assertNull(Iap2BodyReader.of(withoutBssid).first(0)) + assertArrayEquals(byteArrayOf(1, 2, 3, 4, 5, 6), Iap2BodyReader.of(withBssid).bytes(0)) + } + + @Test + fun formatterShowsEndpointNamesFieldsAndNestedGroups() { + val frame = Iap2CarPlayMessages.startSession( + wiredIpv6Addresses = listOf("fe80::2"), + airPlayPort = 7000, + publicKey = "pub", + sourceVersion = "1.0", + ) + + val formatted = Iap2FrameFormatter.format(Iap2TraceDirection.TX, "wired", frame) + + assertTrue(formatted.startsWith("IAP2 TX [wired] 0x4301 CarPlayStartSession")) + assertTrue("wired:" in formatted) + assertTrue("wiredIP: \"fe80::2\"" in formatted) + assertTrue("airPlayPort: u32=7000" in formatted) + assertTrue("raw-body=" in formatted) + } + + @Test + fun formatterFallsBackForMalformedBodies() { + val formatted = Iap2FrameFormatter.format( + Iap2TraceDirection.RX, + "wired", + Iap2Frame(0x4300, byteArrayOf(0, 1, 2)), + ) + + assertTrue(formatted.contains("body=malformed TLV")) + assertTrue(formatted.contains("raw-body=00 01 02")) + } + + @Test + fun formatterEscapesLineBreaksInNmeaStrings() { + val frame = Iap2ControlMessages.locationInformation("\$GPGGA,1\r\n") + val formatted = Iap2FrameFormatter.format(Iap2TraceDirection.TX, "wired", frame) + + assertTrue(formatted.contains("\\r\\n")) + } +} diff --git a/shared/src/test/java/com/shilapi/xcertplay/media/AndroidMediaSinkStateTest.kt b/shared/src/test/java/com/shilapi/xcertplay/media/AndroidMediaSinkStateTest.kt new file mode 100644 index 0000000..efb4a1c --- /dev/null +++ b/shared/src/test/java/com/shilapi/xcertplay/media/AndroidMediaSinkStateTest.kt @@ -0,0 +1,21 @@ +package com.shilapi.xcertplay.media + +import org.junit.Assert.* +import org.junit.Test + +class AndroidMediaSinkStateTest { + @Test fun recreatingTheScreenRestoresItsActiveVideoState() { + val sink = AndroidMediaSink() + sink.onScreenStreamActive(110, true) + sink.onScreenStreamActive(111, true) + sink.onScreenStreamActive(111, false) + val events = mutableListOf>() + sink.setScreenStreamActiveChangedListener { type, active -> events.add(type to active) } + assertEquals(listOf(110 to true), events) + sink.close() + assertEquals(listOf(110 to true, 110 to false), events) + val afterClose = mutableListOf>() + sink.setScreenStreamActiveChangedListener { type, active -> afterClose.add(type to active) } + assertTrue(afterClose.isEmpty()) + } +} diff --git a/shared/src/test/java/com/shilapi/xcertplay/media/AudioChannelMappingTest.kt b/shared/src/test/java/com/shilapi/xcertplay/media/AudioChannelMappingTest.kt new file mode 100644 index 0000000..10d4d0d --- /dev/null +++ b/shared/src/test/java/com/shilapi/xcertplay/media/AudioChannelMappingTest.kt @@ -0,0 +1,105 @@ +package com.shilapi.xcertplay.media + +import org.junit.Assert.assertEquals +import org.junit.Test + +class AudioChannelMappingTest { + @Test + fun mobileCompatibleMappingMatchesTheOriginalRouting() { + assertMapped( + mode = AudioChannelMappingMode.MOBILE_COMPATIBLE, + audioType = "telephony", + payloadType = 100, + channel = AudioChannel.PHONE, + contentType = AudioContentType.SPEECH, + ) + assertMapped( + mode = AudioChannelMappingMode.MOBILE_COMPATIBLE, + audioType = "speechRecognition", + payloadType = 100, + channel = AudioChannel.ASSISTANT, + contentType = AudioContentType.SPEECH, + ) + assertMapped( + mode = AudioChannelMappingMode.MOBILE_COMPATIBLE, + audioType = "media", + payloadType = 100, + channel = AudioChannel.MEDIA, + contentType = AudioContentType.MUSIC, + ) + listOf("default", "alert", "compatibility").forEach { audioType -> + assertMapped( + mode = AudioChannelMappingMode.MOBILE_COMPATIBLE, + audioType = audioType, + payloadType = 100, + channel = AudioChannel.NAVIGATION, + contentType = AudioContentType.SPEECH, + ) + } + } + + @Test + fun automotiveMappingUsesTheBusSpecificCarPlayTypes() { + listOf("media", "default", "compatibility").forEach { audioType -> + assertMapped( + mode = AudioChannelMappingMode.AUTOMOTIVE_BUS, + audioType = audioType, + payloadType = 100, + channel = AudioChannel.MEDIA, + contentType = AudioContentType.MUSIC, + ) + } + assertMapped( + mode = AudioChannelMappingMode.AUTOMOTIVE_BUS, + audioType = "telephony", + payloadType = 100, + channel = AudioChannel.PHONE, + contentType = AudioContentType.SPEECH, + ) + assertMapped( + mode = AudioChannelMappingMode.AUTOMOTIVE_BUS, + audioType = "speechRecognition", + payloadType = 100, + channel = AudioChannel.ASSISTANT, + contentType = AudioContentType.SPEECH, + ) + assertMapped( + mode = AudioChannelMappingMode.AUTOMOTIVE_BUS, + audioType = "alert", + payloadType = 100, + channel = AudioChannel.NAVIGATION, + contentType = AudioContentType.SPEECH, + ) + } + + @Test + fun unknownTypesKeepTheMainHighAudioFallback() { + assertMapped( + mode = AudioChannelMappingMode.MOBILE_COMPATIBLE, + audioType = "unknown", + payloadType = AudioChannelMapper.STREAM_TYPE_MAIN_HIGH_AUDIO, + channel = AudioChannel.MEDIA, + contentType = AudioContentType.MUSIC, + ) + assertMapped( + mode = AudioChannelMappingMode.AUTOMOTIVE_BUS, + audioType = "unknown", + payloadType = 100, + channel = AudioChannel.NAVIGATION, + contentType = AudioContentType.SPEECH, + ) + } + + private fun assertMapped( + mode: AudioChannelMappingMode, + audioType: String, + payloadType: Int, + channel: AudioChannel, + contentType: AudioContentType, + ) { + assertEquals( + AudioChannelSelection(channel, contentType), + AudioChannelMapper.map(audioType, payloadType, mode), + ) + } +} diff --git a/shared/src/test/java/com/shilapi/xcertplay/media/MediaCodecSupportTest.kt b/shared/src/test/java/com/shilapi/xcertplay/media/MediaCodecSupportTest.kt new file mode 100644 index 0000000..dc15754 --- /dev/null +++ b/shared/src/test/java/com/shilapi/xcertplay/media/MediaCodecSupportTest.kt @@ -0,0 +1,85 @@ +package com.shilapi.xcertplay.media + +import org.junit.Assert.assertArrayEquals +import org.junit.Assert.assertEquals +import org.junit.Test +import com.shilapi.xcertplay.airplay.VideoCodec +import org.junit.Assert.assertTrue +import org.junit.Assert.assertFalse + +class MediaCodecSupportTest { + @Test fun truncatedAccessUnitIsRejectedInsteadOfSubmittingItsValidPrefix() { + assertEquals(0, MediaCodecSupport.toAnnexB(byteArrayOf(0, 0, 0, 2, 0x41, 1, 0, 0, 0, 9, 0x41)).size) + assertEquals(0, MediaCodecSupport.toAnnexB(byteArrayOf(0, 0, 0, 2, 0x41, 1, 0)).size) + } + + @Test fun findsRandomAccessAfterParameterSetsButNeverOnInterframes() { + val sps = byteArrayOf(0, 0, 0, 1, 0x67, 10) + assertTrue(MediaCodecSupport.isRandomAccess(sps + byteArrayOf(0, 0, 1, 0x65, 20), VideoCodec.H264)) + assertFalse(MediaCodecSupport.isRandomAccess(sps + byteArrayOf(0, 0, 1, 0x41, 20), VideoCodec.H264)) + for (type in 16..21) assertTrue(MediaCodecSupport.isRandomAccess(byteArrayOf(0, 0, 0, 1, (type shl 1).toByte(), 1, 20), VideoCodec.H265)) + assertFalse(MediaCodecSupport.isRandomAccess(byteArrayOf(0, 0, 0, 1, 2, 1, 20), VideoCodec.H265)) + } + + @Test + fun lengthPrefixedNalUnitsBecomeOneAnnexBBuffer() { + val first = byteArrayOf(0x40, 0x01) + val second = byteArrayOf(0x42, 0x01, 0x02) + val lengthPrefixed = + byteArrayOf(0, 0, 0, first.size.toByte()) + first + + byteArrayOf(0, 0, 0, second.size.toByte()) + second + + assertArrayEquals( + byteArrayOf(0, 0, 0, 1) + first + + byteArrayOf(0, 0, 0, 1) + second, + MediaCodecSupport.toAnnexB(lengthPrefixed), + ) + } + + @Test + fun hevcCodecSpecificDataBuildsAnnexBParameterSets() { + val vps = byteArrayOf(0x40, 0x01) + val sps = byteArrayOf(0x42, 0x01, 0x02) + val pps = byteArrayOf(0x44, 0x01) + val record = hevcRecord( + vps, + sps, + pps, + ) + + assertArrayEquals( + byteArrayOf(0, 0, 0, 1) + vps + + byteArrayOf(0, 0, 0, 1) + sps + + byteArrayOf(0, 0, 0, 1) + pps, + MediaCodecSupport.hevcCodecSpecificData(record), + ) + } + + @Test + fun malformedHevcCodecSpecificDataIsRejected() { + val truncated = hevcRecord(byteArrayOf(0x40, 0x01), byteArrayOf()) + .copyOfRange(0, 25) + + assertEquals(0, MediaCodecSupport.hevcCodecSpecificData(truncated).size) + } + + private fun hevcRecord(vararg parameterSets: ByteArray): ByteArray { + var size = 23 + parameterSets.forEach { size += 5 + it.size } + val record = ByteArray(size) + record[0] = 1 + record[21] = 3 + record[22] = parameterSets.size.toByte() + var cursor = 23 + parameterSets.forEachIndexed { index, parameterSet -> + record[cursor++] = (32 + index).toByte() + record[cursor++] = 0 + record[cursor++] = 1 + record[cursor++] = (parameterSet.size ushr 8).toByte() + record[cursor++] = parameterSet.size.toByte() + parameterSet.copyInto(record, cursor) + cursor += parameterSet.size + } + return record + } +} diff --git a/shared/src/test/java/com/shilapi/xcertplay/media/VideoDecodeQueueTest.kt b/shared/src/test/java/com/shilapi/xcertplay/media/VideoDecodeQueueTest.kt new file mode 100644 index 0000000..df9a6ea --- /dev/null +++ b/shared/src/test/java/com/shilapi/xcertplay/media/VideoDecodeQueueTest.kt @@ -0,0 +1,76 @@ +package com.shilapi.xcertplay.media + +import com.shilapi.xcertplay.airplay.VideoCodec +import org.junit.Assert.* +import org.junit.Test + +class VideoDecodeQueueTest { + @Test fun lostReferenceChainWaitsForSuccessfullyQueuedKeyframe() { + val chain = VideoReferenceChain() + val predicted = byteArrayOf(0, 0, 0, 1, 0x41, 1) + val idr = byteArrayOf(0, 0, 0, 1, 0x65, 1) + assertFalse(chain.accepts(predicted, VideoCodec.H264)) + assertTrue(chain.accepts(idr, VideoCodec.H264)) + assertTrue(chain.needsKeyFrame) // Receiving it is insufficient if the codec is still busy. + chain.onQueued() + assertTrue(chain.accepts(predicted, VideoCodec.H264)) + chain.reset() + assertFalse(chain.accepts(predicted, VideoCodec.H264)) + } + + @Test fun overflowPreservesConfigurationAndResetsBeforeNewReferenceChain() { + val queue = VideoDecodeQueue(maxFrames = 2) + val config = VideoJob.Config(VideoCodec.H264, byteArrayOf(1)) + val surface = VideoJob.SurfaceChanged(null) + queue.offer(config) + queue.offer(VideoJob.Frame(byteArrayOf(1))) + queue.offer(surface) + queue.offer(VideoJob.Frame(byteArrayOf(2))) + queue.offer(VideoJob.Frame(byteArrayOf(3))) + assertSame(config, queue.poll(0)) + assertSame(surface, queue.poll(0)) + assertEquals(VideoJob.Resync, queue.poll(0)) + assertArrayEquals(byteArrayOf(3), (queue.poll(0) as VideoJob.Frame).nalus) + assertNull(queue.poll(0)) + } + + @Test fun byteBudgetAlsoTriggersRecoveryAndRejectsOversizedFrame() { + val queue = VideoDecodeQueue(maxFrames = 8, maxBytes = 5) + queue.offer(VideoJob.Frame(ByteArray(3))) + queue.offer(VideoJob.Frame(ByteArray(3))) + assertEquals(VideoJob.Resync, queue.poll(0)) + assertEquals(3, (queue.poll(0) as VideoJob.Frame).nalus.size) + queue.offer(VideoJob.Frame(ByteArray(6))) + assertEquals(VideoJob.Resync, queue.poll(0)) + assertNull(queue.poll(0)) + } + + @Test fun fullOutputMustBeDrainedWhileRetryingTheSameInput() { + var heldOutputs = 2 + var dequeues = 0 + val submitted = mutableListOf() + for (frame in 1..3) { + val index = VideoInputPump.acquire( + running = { true }, + drain = { if (heldOutputs > 0) heldOutputs-- }, + dequeue = { dequeues++; if (heldOutputs > 0) -1 else 0 }, + ) + assertEquals(0, index) + submitted.add(frame) + heldOutputs = 2 + } + assertEquals(listOf(1, 2, 3), submitted) + assertEquals(6, dequeues) + } + + @Test fun stalledDecoderHasFiniteWaitAndShutdownCancelsImmediately() { + var time = 0L + var attempts = 0 + assertEquals(-1, VideoInputPump.acquire( + running = { true }, drain = {}, dequeue = { attempts++; -1 }, + nanoTime = { time.also { time += 10 } }, timeoutNs = 30, + )) + assertEquals(3, attempts) + assertEquals(-1, VideoInputPump.acquire(running = { false }, drain = { fail() }, dequeue = { fail(); 0 })) + } +} diff --git a/shared/src/test/java/com/shilapi/xcertplay/mfi/LocalMfiAuthenticationClientTest.kt b/shared/src/test/java/com/shilapi/xcertplay/mfi/LocalMfiAuthenticationClientTest.kt new file mode 100644 index 0000000..45f07ef --- /dev/null +++ b/shared/src/test/java/com/shilapi/xcertplay/mfi/LocalMfiAuthenticationClientTest.kt @@ -0,0 +1,110 @@ +package com.shilapi.xcertplay.mfi + +import java.io.File +import java.math.BigInteger +import java.security.KeyPairGenerator +import java.security.MessageDigest +import java.security.Signature +import java.security.cert.CertificateFactory +import java.security.spec.ECGenParameterSpec +import java.util.Date +import org.bouncycastle.asn1.ASN1Encodable +import org.bouncycastle.asn1.ASN1Integer +import org.bouncycastle.asn1.DERBitString +import org.bouncycastle.asn1.x500.X500Name +import org.bouncycastle.asn1.x509.AlgorithmIdentifier +import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo +import org.bouncycastle.asn1.x509.Time +import org.bouncycastle.asn1.x509.V3TBSCertificateGenerator +import org.bouncycastle.asn1.x9.X9ObjectIdentifiers +import org.bouncycastle.asn1.DERSequence +import org.junit.Assert.* +import org.junit.Rule +import org.junit.Test +import org.junit.rules.TemporaryFolder + +class LocalMfiAuthenticationClientTest { + @get:Rule val temporary = TemporaryFolder() + + private fun identity(): File = temporary.newFolder().also { directory -> + // Fresh self-signed test material for each test. No stored accessory identity. + val generator = KeyPairGenerator.getInstance("EC") + generator.initialize(ECGenParameterSpec("secp256r1")) + val pair = generator.generateKeyPair() + val algorithm = AlgorithmIdentifier(X9ObjectIdentifiers.ecdsa_with_SHA256) + val name = X500Name("CN=DiPlay synthetic test only") + val tbs = V3TBSCertificateGenerator().apply { + setSerialNumber(ASN1Integer(BigInteger.ONE)) + setSignature(algorithm) + setIssuer(name) + setSubject(name) + setStartDate(Time(Date(0))) + setEndDate(Time(Date(4102444800000L))) + setSubjectPublicKeyInfo(SubjectPublicKeyInfo.getInstance(pair.public.encoded)) + }.generateTBSCertificate() + val signer = Signature.getInstance("SHA256withECDSA") + signer.initSign(pair.private) + signer.update(tbs.encoded) + val certificate = DERSequence(arrayOf( + tbs, algorithm, DERBitString(signer.sign()), + )).encoded + File(directory, "identity.pk8").writeBytes(pair.private.encoded) + File(directory, "certificate.p7b").writeBytes(certificate) + } + + @Test fun freshDigestsVerifyWithoutDoubleHashingAndRejectReplay() { + val directory = identity() + var count = 0 + val client = LocalMfiAuthenticationClient.load(directory) { count++ } + val certificate = CertificateFactory.getInstance("X.509") + .generateCertificates(client.readCertificate().inputStream()).single() + repeat(8) { index -> + val digest = MessageDigest.getInstance("SHA-256").digest("challenge-$index".toByteArray()) + val signature = client.signChallenge(digest) + assertEquals(64, signature.size) + val der = DERSequence(arrayOf( + ASN1Integer(BigInteger(1, signature.copyOfRange(0, 32))), + ASN1Integer(BigInteger(1, signature.copyOfRange(32, 64))), + )).encoded + val verifier = Signature.getInstance("NONEwithECDSA") + verifier.initVerify(certificate.publicKey) + verifier.update(digest) + assertTrue(verifier.verify(der)) + digest[0] = (digest[0].toInt() xor 1).toByte() + verifier.initVerify(certificate.publicKey) + verifier.update(digest) + assertFalse(verifier.verify(der)) + } + assertEquals(8, count) + assertEquals(3, client.protocolMajor()) + assertEquals(MfiCertificateType.MFI, client.certificateType) + } + + @Test fun rejectsDifferentPrivateKey() { + val directory = identity() + val generator = KeyPairGenerator.getInstance("EC") + generator.initialize(ECGenParameterSpec("secp256r1")) + File(directory, "identity.pk8").writeBytes(generator.generateKeyPair().private.encoded) + assertThrows(IllegalArgumentException::class.java) { LocalMfiAuthenticationClient.load(directory) } + } + + @Test fun rejectsIncompleteIdentityAndWrongChallengeLength() { + assertThrows(Exception::class.java) { LocalMfiAuthenticationClient.load(temporary.newFolder()) } + val client = LocalMfiAuthenticationClient.load(identity()) + for (length in listOf(0, 20, 31, 33, 64)) { + assertThrows(IllegalArgumentException::class.java) { client.signChallenge(ByteArray(length)) } + } + assertThrows(IllegalArgumentException::class.java) { client.readCertificate(1) } + } + + @Test fun certificateIsReturnedAsIndependentCopyAndSurvivesReload() { + val directory = identity() + val first = LocalMfiAuthenticationClient.load(directory) + val certificate = first.readCertificate() + val second = LocalMfiAuthenticationClient.load(directory) + assertArrayEquals(certificate, second.readCertificate()) + certificate.fill(0) + assertFalse(first.readCertificate().all { it == 0.toByte() }) + assertEquals(64, second.signChallenge(ByteArray(32) { it.toByte() }).size) + } +} diff --git a/shared/src/test/java/com/shilapi/xcertplay/mfi/MfiAuthenticationClientTest.kt b/shared/src/test/java/com/shilapi/xcertplay/mfi/MfiAuthenticationClientTest.kt new file mode 100644 index 0000000..52d0275 --- /dev/null +++ b/shared/src/test/java/com/shilapi/xcertplay/mfi/MfiAuthenticationClientTest.kt @@ -0,0 +1,72 @@ +package com.shilapi.xcertplay.mfi + +import com.shilapi.xcertplay.transport.I2cTransport +import org.junit.Assert.assertArrayEquals +import org.junit.Assert.assertEquals +import org.junit.Assert.assertTrue +import org.junit.Test + +class MfiAuthenticationClientTest { + @Test + fun readsCertificateInIncrementing128ByteWindows() { + val certificate = bytes(300) { it } + val transport = ScriptedTransport( + select(0x30), pureRead(2, bytes(1, 44)), + select(0x31), pureRead(128, certificate.copyOfRange(0, 128)), + select(0x32), pureRead(128, certificate.copyOfRange(128, 256)), + select(0x33), pureRead(44, certificate.copyOfRange(256, 300)), + ) + + val result = MfiAuthenticationClient(transport, 0x11).readCertificate() + + assertArrayEquals(certificate, result) + assertEquals(0, transport.unconsumedSteps) + } + + @Test + fun signsChallengeWithSeparatedRegisterSelectAndRead() { + val challenge = bytes(20) { it + 1 } + val signature = bytes(128) { 0xa0 + it } + val transport = ScriptedTransport( + write(0x20, bytes(0, 20)), + write(0x21, challenge), + write(0x10, bytes(1)), + select(0x10), pureRead(1, bytes(0x10)), + select(0x11), pureRead(2, bytes(0, 128)), + select(0x12), pureRead(128, signature), + ) + + val result = MfiAuthenticationClient(transport, 0x10).signChallenge(challenge) + + assertArrayEquals(signature, result) + assertEquals(0, transport.unconsumedSteps) + } + + private class ScriptedTransport(vararg steps: Step) : I2cTransport { + private val steps = ArrayDeque(steps.toList()) + val unconsumedSteps: Int get() = steps.size + + override fun transaction(address7Bit: Int, writeData: ByteArray, readLength: Int): ByteArray { + assertTrue("Expected a scripted transaction", steps.isNotEmpty()) + val step = steps.removeFirst() + assertTrue("Unexpected I2C address 0x${address7Bit.toString(16)}", address7Bit in 0x10..0x11) + assertArrayEquals(step.writeData, writeData) + assertEquals(step.readLength, readLength) + return step.response.copyOf() + } + } + + private data class Step(val writeData: ByteArray, val readLength: Int, val response: ByteArray) + + private fun select(register: Int): Step = Step(bytes(register), 0, ByteArray(0)) + + private fun pureRead(readLength: Int, response: ByteArray): Step = + Step(ByteArray(0), readLength, response) + + private fun write(register: Int, payload: ByteArray): Step = + Step(bytes(register) + payload, 0, ByteArray(0)) + + private fun bytes(vararg values: Int): ByteArray = ByteArray(values.size) { values[it].toByte() } + + private fun bytes(size: Int, value: (Int) -> Int): ByteArray = ByteArray(size) { value(it).toByte() } +} diff --git a/shared/src/test/java/com/shilapi/xcertplay/mfi/MfiSelfCheckTest.kt b/shared/src/test/java/com/shilapi/xcertplay/mfi/MfiSelfCheckTest.kt new file mode 100644 index 0000000..30886be --- /dev/null +++ b/shared/src/test/java/com/shilapi/xcertplay/mfi/MfiSelfCheckTest.kt @@ -0,0 +1,69 @@ +package com.shilapi.xcertplay.mfi + +import com.shilapi.xcertplay.transport.I2cTransport +import com.shilapi.xcertplay.transport.I2cTransportException +import org.junit.Assert.assertEquals +import org.junit.Assert.assertTrue +import org.junit.Test + +class MfiSelfCheckTest { + @Test + fun ignoresFloatingBusValueAndSelectsRealSecondCandidate() { + var selectedRegister = -1 + val transport = object : I2cTransport { + override fun transaction(address7Bit: Int, writeData: ByteArray, readLength: Int): ByteArray { + if (writeData.isNotEmpty()) { + selectedRegister = writeData.single().toInt() and 0xff + return ByteArray(0) + } + return when { + selectedRegister != 0x00 || readLength != 1 -> + throw I2cTransportException.Nack("unexpected request") + address7Bit == 0x10 -> bytes(0xff) + address7Bit == 0x11 -> bytes(0x07) + else -> throw I2cTransportException.Nack("unexpected address") + } + } + } + + val result = MfiDeviceScanner(transport).scan() + + assertEquals(0x11, result.chip?.address7Bit) + assertEquals(0x07, result.chip?.deviceVersion) + assertTrue(result.failures.single().error is MfiDiscoveryError.InvalidDeviceVersion) + } + + @Test + fun fallsBackToSecondCandidateThenReportsRawProtocolMajor() { + val calls = mutableListOf>() + val transport = object : I2cTransport { + override fun transaction(address7Bit: Int, writeData: ByteArray, readLength: Int): ByteArray { + val register = writeData.firstOrNull()?.toInt()?.and(0xff) ?: -1 + calls += address7Bit to register + return when (address7Bit to register) { + 0x10 to 0x00 -> throw I2cTransportException.Nack("first candidate did not respond") + 0x11 to 0x00, 0x11 to 0x02 -> ByteArray(0) + 0x11 to -1 -> when (readLength) { + 1 -> if (calls.count { it == 0x11 to -1 } == 1) bytes(3) else bytes(7) + else -> throw I2cTransportException.Nack("unexpected read length") + } + else -> throw I2cTransportException.Nack("unexpected request") + } + } + } + + val result = MfiSelfCheck(transport).run() + + assertEquals( + listOf(0x10 to 0x00, 0x11 to 0x00, 0x11 to -1, 0x11 to 0x02, 0x11 to -1), + calls, + ) + assertEquals(0x11, result.discovery.chip?.address7Bit) + assertEquals(3, result.discovery.chip?.deviceVersion) + assertEquals(0x10, result.discovery.failures.single().address7Bit) + assertTrue(result.chip?.protocolMajor is MfiProtocolMajorResult.Value) + assertEquals(7, (result.chip?.protocolMajor as MfiProtocolMajorResult.Value).major) + } + + private fun bytes(vararg values: Int): ByteArray = ByteArray(values.size) { values[it].toByte() } +} diff --git a/shared/src/test/java/com/shilapi/xcertplay/mfi/RemoteMfiAuthenticationClientTest.kt b/shared/src/test/java/com/shilapi/xcertplay/mfi/RemoteMfiAuthenticationClientTest.kt new file mode 100644 index 0000000..20c3ea1 --- /dev/null +++ b/shared/src/test/java/com/shilapi/xcertplay/mfi/RemoteMfiAuthenticationClientTest.kt @@ -0,0 +1,195 @@ +package com.shilapi.xcertplay.mfi + +import com.sun.net.httpserver.HttpExchange +import com.sun.net.httpserver.HttpServer +import com.shilapi.xcertplay.iap2.message.Iap2AuthenticationMessages +import java.net.InetSocketAddress +import java.nio.charset.StandardCharsets +import java.security.MessageDigest +import java.util.Base64 +import java.util.Collections +import java.util.concurrent.ExecutorService +import java.util.concurrent.Executors +import java.util.concurrent.atomic.AtomicInteger +import org.junit.After +import org.junit.Assert.assertArrayEquals +import org.junit.Assert.assertEquals +import org.junit.Assert.assertThrows +import org.junit.Before +import org.junit.Test + +class RemoteMfiAuthenticationClientTest { + private lateinit var server: HttpServer + private lateinit var serverExecutor: ExecutorService + + @Before + fun startServer() { + server = HttpServer.create(InetSocketAddress("127.0.0.1", 0), 0) + serverExecutor = Executors.newCachedThreadPool() + server.executor = serverExecutor + server.start() + } + + @After + fun stopServer() { + server.stop(0) + serverExecutor.shutdownNow() + } + + @Test + fun resetsLoadsAndCachesCertificateThenSignsWithStableRequestId() { + val certificate = ByteArray(300) { it.toByte() } + val signature = ByteArray(64) { (0xa0 + it).toByte() } + val certificateRequests = AtomicInteger() + val signRequests = Collections.synchronizedList(mutableListOf()) + + server.createContext("/mfi/reset") { exchange -> + assertEquals("POST", exchange.requestMethod) + assertEquals("Bearer test-token", exchange.requestHeaders.getFirst("Authorization")) + assertEquals("{}", exchange.requestBody.readText()) + exchange.respond(200, "{\"detail\":\"\"}") + } + server.createContext("/mfi/certificate") { exchange -> + certificateRequests.incrementAndGet() + val encoded = Base64.getEncoder().encodeToString(certificate) + val digest = MessageDigest.getInstance("SHA-256").digest(certificate).toHex() + exchange.respond( + 200, + "{\"protocolMajor\":3,\"certificate\":\"$encoded\"," + + "\"certificateSha256\":\"$digest\"}", + ) + } + server.createContext("/mfi/sign") { exchange -> + val body = exchange.requestBody.readText() + signRequests += body + if (signRequests.size == 1) { + Thread.sleep(200) + } + exchange.respond( + 200, + "{\"signature\":\"${Base64.getEncoder().encodeToString(signature)}\"}", + ) + } + + val client = RemoteMfiAuthenticationClient( + serverAddress = serverAddress(), + token = "test-token", + readTimeoutMillis = 50, + ) + client.reset() + assertEquals(3, client.protocolMajor()) + assertArrayEquals(certificate, client.readCertificate()) + assertEquals(1, certificateRequests.get()) + + val challenge = byteArrayOf(1, 2, 3, 4) + assertArrayEquals(signature, client.signChallenge(challenge)) + assertEquals(2, signRequests.size) + val firstRequestId = RemoteMfiJson.string(signRequests[0], "requestId") + val secondRequestId = RemoteMfiJson.string(signRequests[1], "requestId") + assertEquals(firstRequestId, secondRequestId) + assertEquals( + Base64.getEncoder().encodeToString(challenge), + RemoteMfiJson.string(signRequests[0], "challenge"), + ) + } + + @Test + fun rejectsCertificateWhenSha256DoesNotMatch() { + server.createContext("/mfi/certificate") { exchange -> + exchange.respond( + 200, + "{\"protocolMajor\":3,\"certificate\":\"AQID\"," + + "\"certificateSha256\":\"${"00".repeat(32)}\"}", + ) + } + + val error = assertThrows(MfiInvalidDataException::class.java) { + RemoteMfiAuthenticationClient(serverAddress()).readCertificate() + } + assertEquals( + "Remote certificate SHA-256 does not match certificateSha256", + error.message, + ) + } + + @Test + fun loadsBaaPackageAndBuildsShowcaseIap2Payload() { + val leaf = ByteArray(40) { (0x10 + it).toByte() } + val intermediate = ByteArray(60) { (0x80 + it).toByte() } + val packageBytes = u32(leaf.size) + u32(intermediate.size) + leaf + intermediate + + server.createContext("/mfi/certificate") { exchange -> + val encoded = Base64.getEncoder().encodeToString(packageBytes) + val digest = MessageDigest.getInstance("SHA-256").digest(packageBytes).toHex() + exchange.respond( + 200, + "{\"type\":\"baa\",\"protocolMajor\":3,\"certificate\":\"$encoded\"," + + "\"certificateSha256\":\"$digest\"}", + ) + } + + val client = RemoteMfiAuthenticationClient(serverAddress()) + assertEquals(MfiCertificateType.BAA, client.certificateType) + assertArrayEquals( + Iap2AuthenticationMessages.baaCertificatePackage(leaf, intermediate).payload, + client.readCertificate(), + ) + val certificates = client.baaCertificates() + assertArrayEquals(leaf, certificates.leaf) + assertArrayEquals(intermediate, certificates.intermediate) + } + + @Test + fun rejectsUnknownCertificateType() { + server.createContext("/mfi/certificate") { exchange -> + exchange.respond( + 200, + "{\"type\":\"unknown\",\"protocolMajor\":3,\"certificate\":\"AQID\"," + + "\"certificateSha256\":\"${"00".repeat(32)}\"}", + ) + } + + val error = assertThrows(MfiInvalidDataException::class.java) { + RemoteMfiAuthenticationClient(serverAddress()).readCertificate() + } + assertEquals("Unsupported remote MFI certificate type 'unknown'", error.message) + } + + @Test + fun resetSurfacesHttp500DetailWithoutRetrying() { + val requests = AtomicInteger() + server.createContext("/mfi/reset") { exchange -> + requests.incrementAndGet() + exchange.respond(500, "{\"detail\":\"chip reset failed\"}") + } + + val error = assertThrows(RemoteMfiHttpException::class.java) { + RemoteMfiAuthenticationClient(serverAddress()).reset() + } + assertEquals(500, error.statusCode) + assertEquals("chip reset failed", error.detail) + assertEquals(1, requests.get()) + } + + private fun serverAddress(): String = "http://127.0.0.1:${server.address.port}" + + private fun HttpExchange.respond(statusCode: Int, body: String) { + val bytes = body.toByteArray(StandardCharsets.UTF_8) + responseHeaders.set("Content-Type", "application/json") + sendResponseHeaders(statusCode, bytes.size.toLong()) + responseBody.use { it.write(bytes) } + close() + } + + private fun java.io.InputStream.readText(): String = + use { String(it.readBytes(), StandardCharsets.UTF_8) } + + private fun ByteArray.toHex(): String = joinToString("") { "%02x".format(it.toInt() and 0xff) } + + private fun u32(value: Int): ByteArray = byteArrayOf( + (value ushr 24).toByte(), + (value ushr 16).toByte(), + (value ushr 8).toByte(), + value.toByte(), + ) +} diff --git a/shared/src/test/java/com/shilapi/xcertplay/network/CarPlayBonjourTest.kt b/shared/src/test/java/com/shilapi/xcertplay/network/CarPlayBonjourTest.kt new file mode 100644 index 0000000..0cd2409 --- /dev/null +++ b/shared/src/test/java/com/shilapi/xcertplay/network/CarPlayBonjourTest.kt @@ -0,0 +1,58 @@ +package com.shilapi.xcertplay.network + +import com.shilapi.xcertplay.airplay.AirPlayConfig +import com.shilapi.xcertplay.airplay.AirPlayDisplayConfig +import com.shilapi.xcertplay.airplay.AirPlayIdentity +import org.junit.Assert.assertEquals +import org.junit.Test + +class CarPlayBonjourTest { + private val config = AirPlayConfig( + deviceName = "xcertplay", + deviceId = "02:00:00:00:00:02", + btMac = "02:00:00:00:00:02", + sourceVersion = "366.0", + main = AirPlayDisplayConfig(widthPixels = 1280, heightPixels = 720), + model = "LIVI", + ) + private val identity = AirPlayIdentity( + privateKey = ByteArray(32), + publicKey = byteArrayOf(0x01, 0x23, 0xab.toByte()), + pairingId = "pairing-1", + ) + + @Test + fun airPlayTxtRecordsMatchLivi() { + assertEquals( + linkedMapOf( + "deviceid" to "02:00:00:00:00:02", + "features" to "0x44540380,0x61", + "flags" to "0x4", + "model" to "LIVI", + "srcvers" to "366.0", + "protovers" to "1.1", + "pi" to "pairing-1", + "pk" to "0123ab", + ), + CarPlayBonjourProtocol.airPlayTxtRecords(config, identity), + ) + } + + @Test + fun connectProbeRequestMatchesExactRequestLineAndHeaders() { + assertEquals( + "GET /ctrl-int/1/connect HTTP/1.1\r\n" + + "Host: [fe80::1]:7000\r\n" + + "User-Agent: AirPlay/366.0\r\n" + + "AirPlay-Receiver-Device-ID: 020000000002\r\n" + + "Connection: close\r\n" + + "\r\n", + CarPlayBonjourProtocol.connectProbeRequest( + host = "fe80::1%wlan0", + port = 7000, + sourceVersion = "366.0", + deviceId = "02:00:00:00:00:02", + ), + ) + } +} diff --git a/shared/src/test/java/com/shilapi/xcertplay/network/P2pOwnershipTest.kt b/shared/src/test/java/com/shilapi/xcertplay/network/P2pOwnershipTest.kt new file mode 100644 index 0000000..4027d32 --- /dev/null +++ b/shared/src/test/java/com/shilapi/xcertplay/network/P2pOwnershipTest.kt @@ -0,0 +1,25 @@ +package com.shilapi.xcertplay.network + +import org.junit.Assert.* +import org.junit.Test + +class P2pOwnershipTest { + @Test fun reinstallWithoutPreferencesCanReclaimOnlyItsOwnNamespace() { + val prefix = P2pOwnership.prefix("com.shihab.diplay", "device-user-signing-key-id") + val ssid = prefix + "aB23" + assertTrue(P2pOwnership.canReclaim(true, ssid, null, prefix)) + assertFalse(P2pOwnership.canReclaim(false, ssid, null, prefix)) + assertFalse(P2pOwnership.canReclaim(true, ssid, null, P2pOwnership.prefix("other.app", "device-user-signing-key-id"))) + assertFalse(P2pOwnership.canReclaim(true, ssid, null, P2pOwnership.prefix("com.shihab.diplay", "other-device"))) + assertTrue(ssid.length <= 32) + } + + @Test fun legacyGroupNeedsExactRecordAndUnknownGroupsNeedExplicitReset() { + val prefix = P2pOwnership.prefix("app", "id") + assertTrue(P2pOwnership.canReclaim(true, "DIRECT-xcaB23", "DIRECT-xcaB23", prefix)) + assertFalse(P2pOwnership.canReclaim(true, "DIRECT-xcaB23", null, prefix)) + assertFalse(P2pOwnership.canReclaim(true, null, null, prefix)) + assertFalse(P2pOwnership.canReclaim(true, prefix + "", null, prefix)) + assertFalse(P2pOwnership.canReclaim(true, prefix + "aB23-extra", null, prefix)) + } +} diff --git a/shared/src/test/java/com/shilapi/xcertplay/network/P2pStartupRecoveryTest.kt b/shared/src/test/java/com/shilapi/xcertplay/network/P2pStartupRecoveryTest.kt new file mode 100644 index 0000000..b443afa --- /dev/null +++ b/shared/src/test/java/com/shilapi/xcertplay/network/P2pStartupRecoveryTest.kt @@ -0,0 +1,139 @@ +package com.shilapi.xcertplay.network + +import android.net.wifi.p2p.WifiP2pManager +import org.junit.Assert.* +import org.junit.Test +import java.io.IOException + +class P2pStartupRecoveryTest { + @Test fun confirmedFrequencyGoesFirstWithoutBeingRetriedLater() { + val preferred = P2pCreationRequest(P2pCreationMode.FIXED_2_GHZ, 2437) + val plan = P2pStartupRecovery.plan(5180, preferred) + assertEquals(preferred, plan.first()) + assertEquals(1, plan.count { it.frequencyMHz == 2437 }) + assertEquals(listOf(2437, 5180, 5745, 2412, 2462, null), plan.map { it.frequencyMHz }) + } + + @Test fun rejectedRememberedSystemConfigurationFallsBackToExplicitChannels() { + val attempted = mutableListOf() + val result = P2pStartupRecovery.create(5180, {}, P2pCreationRequest(P2pCreationMode.SYSTEM_DEFAULT)) { + attempted += it.frequencyMHz + if (it.frequencyMHz == null) throw P2pCreateRejected(WifiP2pManager.ERROR, "rejected") + } + assertEquals(listOf(null, 5180), attempted) + assertEquals(5180, result.frequencyMHz) + } + + @Test fun unsafeRememberedFrequenciesDoNotBypassTheChannelPolicy() { + for (frequency in listOf(0, 2472, 2484, 5500, 5955)) { + assertEquals(P2pStartupRecovery.plan(null), P2pStartupRecovery.plan(null, + P2pCreationRequest(P2pCreationMode.FIXED_5_GHZ, frequency))) + } + } + + @Test fun workingAlignedChannelNeverUsesFallback() { + val attempts = mutableListOf() + val mode = P2pStartupRecovery.create(5180, { fail("Unexpected retry") }) { attempts += it } + assertEquals(listOf(P2pCreationRequest(P2pCreationMode.ALIGNED_5_GHZ, 5180)), attempts) + assertEquals(P2pCreationMode.ALIGNED_5_GHZ, mode.mode) + } + + @Test fun rejectedChannelAndCustomGroupFallBackToSystemConfiguration() { + val attempts = mutableListOf() + var retries = 0 + val mode = P2pStartupRecovery.create(5180, { retries++ }) { + attempts += it + if (it.mode != P2pCreationMode.SYSTEM_DEFAULT) throw P2pCreateRejected(WifiP2pManager.ERROR, "rejected") + } + assertEquals(listOf(5180, 5745, 2437, 2412, 2462, null), attempts.map { it.frequencyMHz }) + assertEquals(P2pCreationMode.SYSTEM_DEFAULT, mode.mode) + assertEquals(5, retries) + } + + @Test fun unconnectedStationStartsWithFiveGhzAndBusyRetriesOnlyOnce() { + val attempts = mutableListOf() + try { + P2pStartupRecovery.create(null, {}) { + attempts += it + throw P2pCreateRejected(WifiP2pManager.BUSY, "busy") + } + fail("Expected busy") + } catch (failure: P2pCreateRejected) { assertEquals(WifiP2pManager.BUSY, failure.reason) } + assertEquals(List(2) { P2pCreationRequest(P2pCreationMode.FIXED_5_GHZ, 5180) }, attempts) + } + + @Test fun everyConfigurationRejectedStopsAfterBoundedAttempts() { + var calls = 0 + try { + P2pStartupRecovery.create(null, {}) { + calls++ + throw P2pCreateRejected(WifiP2pManager.ERROR, "rejected") + } + fail("Expected rejection") + } catch (_: P2pCreateRejected) { assertEquals(6, calls) } + } + + @Test fun twoGhzOnlyDriverWithoutChannelSelectionRecoversBeforeAnyAutomaticRequest() { + val attempts = mutableListOf() + val result = P2pStartupRecovery.create(null, {}) { + attempts += it + if (it.frequencyMHz !in listOf(2412, 2437, 2462)) { + throw P2pCreateRejected(WifiP2pManager.ERROR, "unsupported band or automatic channel") + } + } + assertEquals(2437, result.frequencyMHz) + assertTrue(attempts.all { it.frequencyMHz != null }) + assertEquals(listOf(5180, 5745, 2437), attempts.map { it.frequencyMHz }) + } + + @Test fun existingTwoGhzStationUsesItsExactChannelFirst() { + val result = P2pStartupRecovery.create(2422, { fail("Unexpected fallback") }) { + assertEquals(2422, it.frequencyMHz) + } + assertEquals(P2pCreationMode.ALIGNED_2_GHZ, result.mode) + } + + @Test fun rejectedChannelSixTriesOtherExplicitTwoGhzChannels() { + val attempted = mutableListOf() + val result = P2pStartupRecovery.create(null, {}) { + attempted += it.frequencyMHz + if (it.frequencyMHz != 2462) throw P2pCreateRejected(WifiP2pManager.ERROR, "rejected") + } + assertEquals(2462, result.frequencyMHz) + assertEquals(listOf(5180, 5745, 2437, 2412, 2462), attempted) + } + + @Test fun planNeverRequestsDfsSixGhzInvalidOrPhoneUnfriendlyStationFrequencies() { + for (station in listOf(0, -1, 5191, 5260, 5500, 5955, 2472, 2484)) { + val plan = P2pStartupRecovery.plan(station) + assertEquals(listOf(5180, 5745, 2437, 2412, 2462, null), plan.map { it.frequencyMHz }) + } + val plan = P2pStartupRecovery.plan(5200) + assertEquals(5200, plan.first().frequencyMHz) + assertEquals(plan.size, plan.distinctBy { it.frequencyMHz }.size) + assertTrue(plan.size <= 7) + } + + @Test fun permissionUnsupportedAndUncertainTimeoutNeverTriggerAnotherCreation() { + for (failure in listOf(P2pCreateRejected(WifiP2pManager.NO_PERMISSION, "permission"), + P2pCreateRejected(WifiP2pManager.P2P_UNSUPPORTED, "unsupported"), IOException("timeout"))) { + var calls = 0 + try { + P2pStartupRecovery.create(5180, { fail("Unsafe retry") }) { calls++; throw failure } + fail("Expected error") + } catch (actual: IOException) { assertSame(failure, actual) } + assertEquals(1, calls) + } + } + + @Test fun groupAppearingDuringRecoveryPreventsASecondCreation() { + var calls = 0 + try { + P2pStartupRecovery.create(5180, { throw P2pResetRequiredException() }) { + calls++ + throw P2pCreateRejected(WifiP2pManager.ERROR, "rejected") + } + fail("Expected occupied group") + } catch (_: P2pResetRequiredException) { assertEquals(1, calls) } + } +} diff --git a/shared/src/test/java/com/shilapi/xcertplay/network/WirelessHotspotManagerTest.kt b/shared/src/test/java/com/shilapi/xcertplay/network/WirelessHotspotManagerTest.kt new file mode 100644 index 0000000..19ea3ef --- /dev/null +++ b/shared/src/test/java/com/shilapi/xcertplay/network/WirelessHotspotManagerTest.kt @@ -0,0 +1,69 @@ +package com.shilapi.xcertplay.network + +import org.junit.Assert.assertEquals +import org.junit.Assert.assertNull +import org.junit.Test + +class WirelessHotspotManagerTest { + @Test + fun convertsWifiP2pFrequencyToIap2Channel() { + assertEquals(1, wifiFrequencyMhzToChannel(2412)) + assertEquals(6, wifiFrequencyMhzToChannel(2437)) + assertEquals(14, wifiFrequencyMhzToChannel(2484)) + assertEquals(36, wifiFrequencyMhzToChannel(5180)) + assertEquals(149, wifiFrequencyMhzToChannel(5745)) + assertEquals(177, wifiFrequencyMhzToChannel(5885)) + assertEquals(1, wifiFrequencyMhzToChannel(5955)) + } + + @Test + fun rejectsUnsupportedOrInvalidFrequencies() { + assertNull(wifiFrequencyMhzToChannel(0)) + assertNull(wifiFrequencyMhzToChannel(2413)) + assertNull(wifiFrequencyMhzToChannel(6001)) + } + + @Test + fun convertsKnownChannelAndBandToFrequency() { + assertEquals(2412, wifiChannelToFrequencyMhz(1, band = 1)) + assertEquals(5180, wifiChannelToFrequencyMhz(36, band = 2)) + assertEquals(5955, wifiChannelToFrequencyMhz(1, band = 3)) + assertNull(wifiChannelToFrequencyMhz(0, band = 2)) + assertNull(wifiChannelToFrequencyMhz(36, band = null)) + } + + @Test + fun doesNotReportDesiredChannelWhenAndroidDoesNotExposeOne() { + assertEquals( + 0, + observedManualHotspotChannel( + apChannel = 0, + connectionFrequencyMHz = null, + scanFrequencyMHz = null, + apFrequencyMHz = null, + ), + ) + } + + @Test + fun reportsOnlyAnObservedActiveChannel() { + assertEquals( + 36, + observedManualHotspotChannel( + apChannel = 36, + connectionFrequencyMHz = null, + scanFrequencyMHz = null, + apFrequencyMHz = null, + ), + ) + assertEquals( + 44, + observedManualHotspotChannel( + apChannel = 0, + connectionFrequencyMHz = 5220, + scanFrequencyMHz = null, + apFrequencyMHz = null, + ), + ) + } +} diff --git a/shared/src/test/java/com/shilapi/xcertplay/orchestration/ManualHotspotConfigTest.kt b/shared/src/test/java/com/shilapi/xcertplay/orchestration/ManualHotspotConfigTest.kt new file mode 100644 index 0000000..81d541d --- /dev/null +++ b/shared/src/test/java/com/shilapi/xcertplay/orchestration/ManualHotspotConfigTest.kt @@ -0,0 +1,21 @@ +package com.shilapi.xcertplay.orchestration + +import org.junit.Assert.assertFalse +import org.junit.Assert.assertTrue +import org.junit.Test + +class ManualHotspotConfigTest { + @Test + fun autoBandAcceptsBoth2GhzAnd5GhzChannels() { + assertTrue(isManualHotspotChannelCompatible(ManualHotspotBand.AUTO, 6)) + assertTrue(isManualHotspotChannelCompatible(ManualHotspotBand.AUTO, 36)) + } + + @Test + fun explicitBandRejectsChannelsFromTheOtherBand() { + assertTrue(isManualHotspotChannelCompatible(ManualHotspotBand.GHZ_2_4, 11)) + assertFalse(isManualHotspotChannelCompatible(ManualHotspotBand.GHZ_2_4, 36)) + assertTrue(isManualHotspotChannelCompatible(ManualHotspotBand.GHZ_5, 149)) + assertFalse(isManualHotspotChannelCompatible(ManualHotspotBand.GHZ_5, 11)) + } +} diff --git a/shared/src/test/java/com/shilapi/xcertplay/orchestration/MfiTargetConfigTest.kt b/shared/src/test/java/com/shilapi/xcertplay/orchestration/MfiTargetConfigTest.kt new file mode 100644 index 0000000..58c0f63 --- /dev/null +++ b/shared/src/test/java/com/shilapi/xcertplay/orchestration/MfiTargetConfigTest.kt @@ -0,0 +1,76 @@ +package com.shilapi.xcertplay.orchestration + +import com.shilapi.xcertplay.transport.Iap2IdentificationConfig +import com.shilapi.xcertplay.transport.UsbDeviceId +import org.junit.Assert.assertEquals +import org.junit.Assert.assertThrows +import org.junit.Test + +class MfiTargetConfigTest { + @Test + fun usbTargetRequiresACh341Device() { + assertThrows(IllegalArgumentException::class.java) { + config(mfiTarget = MfiTarget.USB_CH341) + } + } + + @Test + fun i2cTargetUsesTheConfiguredDevicePath() { + val config = config( + mfiTarget = MfiTarget.I2C, + linuxI2cPath = "/dev/i2c-7", + ) + + assertEquals("/dev/i2c-7", config.linuxI2cPath) + } + + @Test + fun i2cTargetRejectsABlankDevicePath() { + assertThrows(IllegalArgumentException::class.java) { + config(mfiTarget = MfiTarget.I2C, linuxI2cPath = " ") + } + } + + @Test + fun remoteTargetDoesNotRequireALocalDevice() { + val config = config( + mfiTarget = MfiTarget.REMOTE, + remoteMfiServer = "https://mfi.example.test", + remoteMfiToken = "secret", + ) + + assertEquals(MfiTarget.REMOTE, config.mfiTarget) + assertEquals("https://mfi.example.test", config.remoteMfiServer) + assertEquals("secret", config.remoteMfiToken) + } + + @Test + fun remoteTargetRequiresAServerAddress() { + assertThrows(IllegalArgumentException::class.java) { + config(mfiTarget = MfiTarget.REMOTE, remoteMfiServer = " ") + } + } + + private fun config( + mfiTarget: MfiTarget, + ch341Devices: List = emptyList(), + linuxI2cPath: String? = null, + remoteMfiServer: String? = null, + remoteMfiToken: String? = null, + ): CarPlayRuntimeConfig = CarPlayRuntimeConfig( + mfiTarget = mfiTarget, + ch341Devices = ch341Devices, + linuxI2cPath = linuxI2cPath, + remoteMfiServer = remoteMfiServer, + remoteMfiToken = remoteMfiToken, + identification = Iap2IdentificationConfig( + name = "test", + modelIdentifier = "test", + manufacturer = "test", + serialNumber = "test", + firmwareVersion = "1", + hardwareVersion = "1", + carPlayUsbInterfaceNumber = 3, + ), + ) +} diff --git a/shared/src/test/java/com/shilapi/xcertplay/orchestration/WirelessConnectionProofTest.kt b/shared/src/test/java/com/shilapi/xcertplay/orchestration/WirelessConnectionProofTest.kt new file mode 100644 index 0000000..38c25ab --- /dev/null +++ b/shared/src/test/java/com/shilapi/xcertplay/orchestration/WirelessConnectionProofTest.kt @@ -0,0 +1,81 @@ +package com.shilapi.xcertplay.orchestration + +import org.junit.Assert.assertEquals +import org.junit.Test + +class WirelessConnectionProofTest { + @Test fun authenticationWithoutVideoDoesNotConfirm() { + var saves = 0 + val proof = WirelessConnectionProof() + proof.begin(1) { saves++ } + proof.activate(1, Any()) + proof.authenticated(1) + assertEquals(0, saves) + } + + @Test fun bothEventsAreRequiredInEitherOrderAndOnlySaveOnce() { + for (videoFirst in listOf(true, false)) { + var saves = 0 + val session = Any() + val proof = WirelessConnectionProof() + proof.begin(1) { saves++ } + proof.activate(1, session) + if (videoFirst) proof.rendered(1, session) else proof.authenticated(1) + assertEquals(0, saves) + if (videoFirst) proof.authenticated(1) else proof.rendered(1, session) + proof.rendered(1, session) + proof.authenticated(1) + assertEquals(1, saves) + } + } + + @Test fun oldGenerationAndOldSessionCannotConfirmANewConnection() { + var saves = 0 + val old = Any() + val current = Any() + val proof = WirelessConnectionProof() + proof.begin(1) { saves++ } + proof.activate(1, old) + proof.authenticated(1) + proof.begin(2) { saves++ } + proof.activate(2, current) + proof.rendered(1, old) + proof.authenticated(1) + proof.rendered(2, old) + proof.authenticated(2) + assertEquals(0, saves) + proof.rendered(2, current) + assertEquals(1, saves) + } + + @Test fun endedOrClearedSessionCannotBeLearnedByLateCallbacks() { + val session = Any() + var saves = 0 + val proof = WirelessConnectionProof() + proof.begin(1) { saves++ } + proof.activate(1, session) + proof.rendered(1, session) + proof.end(1, session) + proof.authenticated(1) + proof.clear() + proof.activate(1, session) + proof.authenticated(1) + proof.rendered(1, session) + assertEquals(0, saves) + } + + @Test fun replacementSessionNeedsItsOwnAuthenticationAndFrame() { + val first = Any() + val second = Any() + var saves = 0 + val proof = WirelessConnectionProof() + proof.begin(1) { saves++ } + proof.activate(1, first) + proof.authenticated(1) + proof.activate(1, second) + proof.rendered(1, second) + assertEquals(0, saves) + proof.authenticated(1) + assertEquals(1, saves) + } +} diff --git a/shared/src/test/java/com/shilapi/xcertplay/orchestration/WirelessHandoffTest.kt b/shared/src/test/java/com/shilapi/xcertplay/orchestration/WirelessHandoffTest.kt new file mode 100644 index 0000000..635eafb --- /dev/null +++ b/shared/src/test/java/com/shilapi/xcertplay/orchestration/WirelessHandoffTest.kt @@ -0,0 +1,29 @@ +package com.shilapi.xcertplay.orchestration + +import org.junit.Assert.assertFalse +import org.junit.Assert.assertTrue +import org.junit.Test + +class WirelessHandoffTest { + @Test + fun activeTunnelKeepsHandoffAliveAfterBluetoothBootstrapCloses() { + assertTrue( + isWirelessHandoffInProgress( + handoffRequested = false, + tunnelActive = true, + sessionActive = true, + ), + ) + } + + @Test + fun ordinaryBootstrapLossStillFailsWithoutHandoffState() { + assertFalse( + isWirelessHandoffInProgress( + handoffRequested = false, + tunnelActive = false, + sessionActive = false, + ), + ) + } +} diff --git a/shared/src/test/java/com/shilapi/xcertplay/transport/Ch341DeviceMatcherTest.kt b/shared/src/test/java/com/shilapi/xcertplay/transport/Ch341DeviceMatcherTest.kt new file mode 100644 index 0000000..feb4d25 --- /dev/null +++ b/shared/src/test/java/com/shilapi/xcertplay/transport/Ch341DeviceMatcherTest.kt @@ -0,0 +1,17 @@ +package com.shilapi.xcertplay.transport + +import org.junit.Assert.assertFalse +import org.junit.Assert.assertTrue +import org.junit.Test + +class Ch341DeviceMatcherTest { + @Test + fun matchesOnlyConfiguredUsbIdentities() { + val matcher = Ch341DeviceMatcher(listOf(UsbDeviceId(0x1A86, 0x5512))) + + assertTrue(matcher.matches(0x1A86, 0x5512)) + assertFalse(matcher.matches(0x1A86, 0x5513)) + assertFalse(matcher.matches(0x1234, 0x5512)) + } + +} diff --git a/shared/src/test/java/com/shilapi/xcertplay/transport/Ch341I2cStreamEncoderTest.kt b/shared/src/test/java/com/shilapi/xcertplay/transport/Ch341I2cStreamEncoderTest.kt new file mode 100644 index 0000000..d8c75bb --- /dev/null +++ b/shared/src/test/java/com/shilapi/xcertplay/transport/Ch341I2cStreamEncoderTest.kt @@ -0,0 +1,40 @@ +package com.shilapi.xcertplay.transport + +import org.junit.Assert.assertArrayEquals +import org.junit.Assert.assertEquals +import org.junit.Assert.assertTrue +import org.junit.Test + +class Ch341I2cStreamEncoderTest { + @Test + fun encodesWriteReadWithRepeatedStartAndFinalReadNack() { + assertArrayEquals( + bytes(0xaa, 0x74, 0x80, 0x22, 0x80, 0x30, 0x74, 0x80, 0x23, 0xc1, 0xc0, 0x75, 0x00), + Ch341I2cStreamEncoder.transaction(0x11, bytes(0x30), 2), + ) + } + + @Test + fun encodesMaximumPureReadWithOnlyFinalNackAndStop() { + val stream = Ch341I2cStreamEncoder.transaction( + 0x11, + ByteArray(0), + Ch341I2cStreamEncoder.MAX_READ_BYTES, + ) + + assertEquals(1, stream.count { it.toInt() and 0xff == 0x75 }) + // The read-address setup of a segmented read is one batched `0x80|1` command, matching the + // hardware-proven reference (mfi3.py: `[START, OUT | 1, address]`), whose reply carries the + // requested data bytes with no leading ACK/NACK status byte. + assertArrayEquals(bytes(0xaa, 0x74, 0x81, 0x23), stream.copyOfRange(0, 4)) + assertArrayEquals(bytes(0xde, 0xc0, 0x75, 0x00), stream.takeLast(4).toByteArray()) + assertTrue(Ch341I2cStreamEncoder.transaction(0x11, ByteArray(129), 0).isNotEmpty()) + for (offset in 0 until stream.size - Ch341I2cStreamEncoder.MAX_STREAM_PACKET_BYTES step Ch341I2cStreamEncoder.MAX_STREAM_PACKET_BYTES) { + assertEquals(0xaa, stream[offset].toInt() and 0xff) + assertEquals(0, stream[offset + Ch341I2cStreamEncoder.MAX_STREAM_PACKET_BYTES - 1].toInt() and 0xff) + } + assertTrue(stream.size > Ch341I2cStreamEncoder.MAX_STREAM_PACKET_BYTES) + } + + private fun bytes(vararg values: Int): ByteArray = ByteArray(values.size) { values[it].toByte() } +} diff --git a/shared/src/test/java/com/shilapi/xcertplay/transport/EthernetIpv6CodecTest.kt b/shared/src/test/java/com/shilapi/xcertplay/transport/EthernetIpv6CodecTest.kt new file mode 100644 index 0000000..bb247dd --- /dev/null +++ b/shared/src/test/java/com/shilapi/xcertplay/transport/EthernetIpv6CodecTest.kt @@ -0,0 +1,84 @@ +package com.shilapi.xcertplay.transport + +import org.junit.Assert.assertArrayEquals +import org.junit.Assert.assertEquals +import org.junit.Assert.assertNull +import org.junit.Test + +class EthernetIpv6CodecTest { + @Test + fun `maps IPv6 multicast destination to Ethernet multicast`() { + val packet = ByteArray(40) + packet[0] = 0x60 + val destination = byteArrayOf( + 0xff.toByte(), 0x02, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0xff.toByte(), 0, 0, 2, + ) + destination.copyInto(packet, 24) + + assertArrayEquals( + byteArrayOf(0x33, 0x33, 0xff.toByte(), 0, 0, 2), + EthernetIpv6Codec.multicastDestinationMac(packet), + ) + } + + @Test + fun `does not map IPv6 unicast destination`() { + val packet = ByteArray(40) + packet[0] = 0x60 + packet[24] = 0xfe.toByte() + packet[25] = 0x80.toByte() + + assertNull(EthernetIpv6Codec.multicastDestinationMac(packet)) + } + + @Test + fun `rejects truncated or non IPv6 packets`() { + assertNull(EthernetIpv6Codec.multicastDestinationMac(ByteArray(39))) + assertNull(EthernetIpv6Codec.multicastDestinationMac(ByteArray(40))) + } + + @Test + fun `adds target link layer option to tun neighbor advertisement`() { + val packet = ByteArray(64) + packet[0] = 0x60 + packet[5] = 24 + packet[6] = 58 + byteArrayOf(0xfe.toByte(), 0x80.toByte(), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2) + .copyInto(packet, 8) + byteArrayOf(0xfe.toByte(), 0x80.toByte(), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3) + .copyInto(packet, 24) + packet[40] = 136.toByte() + packet[44] = 0x60 + val mac = byteArrayOf(0x02, 0, 0, 0, 0, 2) + + val result = EthernetIpv6Codec.addNeighborAdvertisementTargetMac(packet, mac) + + assertEquals(72, result.size) + assertEquals(32, ((result[4].toInt() and 0xff) shl 8) or (result[5].toInt() and 0xff)) + assertEquals(2, result[64].toInt() and 0xff) + assertEquals(1, result[65].toInt() and 0xff) + assertArrayEquals(mac, result.copyOfRange(66, 72)) + assertEquals(0xffff, ipv6IcmpChecksumSum(result)) + } + + private fun ipv6IcmpChecksumSum(packet: ByteArray): Int { + val payloadBytes = ((packet[4].toInt() and 0xff) shl 8) or (packet[5].toInt() and 0xff) + var sum = 0L + fun words(start: Int, bytes: Int) { + var offset = start + val end = start + bytes + while (offset + 1 < end) { + sum += (((packet[offset].toInt() and 0xff) shl 8) or + (packet[offset + 1].toInt() and 0xff)).toLong() + offset += 2 + } + } + words(8, 32) + sum += payloadBytes + sum += 58 + words(40, payloadBytes) + while (sum ushr 16 != 0L) sum = (sum and 0xffff) + (sum ushr 16) + return sum.toInt() + } +} diff --git a/shared/src/test/java/com/shilapi/xcertplay/transport/Iap2ControlDeadlineTest.kt b/shared/src/test/java/com/shilapi/xcertplay/transport/Iap2ControlDeadlineTest.kt new file mode 100644 index 0000000..ca1cda9 --- /dev/null +++ b/shared/src/test/java/com/shilapi/xcertplay/transport/Iap2ControlDeadlineTest.kt @@ -0,0 +1,31 @@ +package com.shilapi.xcertplay.transport + +import org.junit.Assert.* +import org.junit.Test + +class Iap2ControlDeadlineTest { + @Test fun anAuthenticatedDriveSurvivesFiveMinutesAndAFullDay() { + var now = 0L + val deadline = Iap2ControlDeadline(Long.MAX_VALUE) { now } + deadline.authenticated() + for (minutes in listOf(6L, 90L, 25L * 60L)) { + now = minutes * 60_000_000_000L + assertEquals(30_000L, deadline.remainingMillis()) + } + } + @Test fun unlimitedDriveDoesNotLeaveAnUnauthenticatedHandshakeHanging() { + var now = 0L + val deadline = Iap2ControlDeadline(Long.MAX_VALUE) { now } + now = 59_999_000_000L + assertEquals(1L, deadline.remainingMillis()) + now = 60_000_000_000L + assertEquals(0L, deadline.remainingMillis()) + } + @Test fun explicitFiniteWindowsStillExpireAfterAuthentication() { + var now = -1_000_000_000L + val deadline = Iap2ControlDeadline(100) { now } + deadline.authenticated() + now += 100_000_000L + assertEquals(0L, deadline.remainingMillis()) + } +} diff --git a/shared/src/test/java/com/shilapi/xcertplay/transport/Iap2LocationClientTest.kt b/shared/src/test/java/com/shilapi/xcertplay/transport/Iap2LocationClientTest.kt new file mode 100644 index 0000000..313f17f --- /dev/null +++ b/shared/src/test/java/com/shilapi/xcertplay/transport/Iap2LocationClientTest.kt @@ -0,0 +1,123 @@ +package com.shilapi.xcertplay.transport + +import com.shilapi.xcertplay.iap2.body.Iap2BodyReader +import com.shilapi.xcertplay.iap2.wire.Iap2ParameterList +import org.junit.Assert.assertEquals +import org.junit.Assert.assertFalse +import org.junit.Assert.assertNotNull +import org.junit.Assert.assertNull +import org.junit.Assert.assertTrue +import org.junit.Test +import java.time.Instant + +class Iap2LocationClientTest { + @Test + fun locationInformationEncodesNulTerminatedNmeaSentence() { + val frame = Iap2LocationMessages.locationInformation("\$GPGGA") + + assertEquals(Iap2LocationMessages.LOCATION_INFORMATION, frame.messageId) + val parameter = Iap2BodyReader.of(frame).list().single() + assertEquals(0, parameter.id) + assertTrue(parameter.payload.contentEquals("\$GPGGA\u0000".encodeToByteArray())) + } + + @Test + fun nmeaEncoderBuildsGgaAndRmcPairWithValidChecksums() { + val encoded = NmeaLocationEncoder.encode( + CarPlayLocationFix( + latitudeDegrees = 48.1173, + longitudeDegrees = 11.5166667, + altitudeMeters = 545.4, + bearingDegrees = 84.4, + speedMetersPerSecond = 11.524, + accuracyMeters = 4.5, + timestampMillis = Instant.parse("2026-03-23T12:35:19Z").toEpochMilli(), + ), + ) + + val sentences = encoded.split("\r\n").filter { it.isNotBlank() } + assertEquals(2, sentences.size) + assertTrue(sentences[0].startsWith("\$GPGGA,123519.00,4807.0380,N,01131.0000,E")) + assertTrue(sentences[1].startsWith("\$GPRMC,123519.00,A,4807.0380,N,01131.0000,E")) + sentences.forEach { sentence -> + val star = sentence.lastIndexOf('*') + assertTrue(star > 0) + assertEquals(checksum(sentence.substring(1, star)), sentence.substring(star + 1)) + } + } + + @Test + fun identificationAdvertisesLocationMessagesAndComponentOnlyWhenEnabled() { + val base = wiredIdentification(locationInformationEnabled = false) + val enabled = wiredIdentification(locationInformationEnabled = true) + + val baseParameters = parameters( + Iap2IdentificationClient.identificationInformation(base).payload, + ) + val enabledParameters = parameters( + Iap2IdentificationClient.identificationInformation(enabled).payload, + ) + + assertNull(baseParameters.firstOrNull { it.id == 22 }) + assertFalse(0xfffb in u16Values(baseParameters.single { it.id == 6 }.payload)) + assertFalse(0xfffa in u16Values(baseParameters.single { it.id == 7 }.payload)) + + val component = enabledParameters.single { it.id == 22 } + assertNotNull(component) + val fields = parameters(component.payload) + assertTrue(fields.single { it.id == 0 }.payload.contentEquals(byteArrayOf(0, 0))) + assertTrue(fields.single { it.id == 1 }.payload.contentEquals("xcertplay\u0000".encodeToByteArray())) + assertTrue(fields.any { it.id == 17 && it.payload.isEmpty() }) + assertTrue(fields.any { it.id == 18 && it.payload.isEmpty() }) + assertTrue(0xfffb in u16Values(enabledParameters.single { it.id == 6 }.payload)) + assertTrue(0xfffa in u16Values(enabledParameters.single { it.id == 7 }.payload)) + assertTrue(0xfffc in u16Values(enabledParameters.single { it.id == 7 }.payload)) + } + + @Test + fun wirelessIdentificationKeepsLocationMessagesAndOmitsWiredPowerSource() { + val config = wiredIdentification(locationInformationEnabled = true).copy( + wireless = Iap2WirelessIdentification( + bluetoothMac = "AA:BB:CC:DD:EE:FF", + ssid = "LIVI", + ), + ) + + val parameters = parameters( + Iap2IdentificationClient.identificationInformation(config).payload, + ) + val sent = u16Values(parameters.single { it.id == 6 }.payload) + val received = u16Values(parameters.single { it.id == 7 }.payload) + + assertTrue(0xfffb in sent) + assertTrue(0x5703 in sent) + assertFalse(0xae03 in sent) + assertTrue(0xfffa in received) + assertTrue(0xfffc in received) + } + + private fun wiredIdentification(locationInformationEnabled: Boolean) = Iap2IdentificationConfig( + name = "xcertplay", + modelIdentifier = "xcertplay", + manufacturer = "xcertplay", + serialNumber = "xcertplay", + firmwareVersion = "1.0.0", + hardwareVersion = "1.0", + carPlayUsbInterfaceNumber = 3, + locationInformationEnabled = locationInformationEnabled, + ) + + private fun u16Values(bytes: ByteArray): List = + List(bytes.size / 2) { index -> + ((bytes[index * 2].toInt() and 0xff) shl 8) or + (bytes[index * 2 + 1].toInt() and 0xff) + } + + private fun parameters(bytes: ByteArray) = Iap2ParameterList.parse(bytes).asList() + + private fun checksum(body: String): String { + var value = 0 + for (character in body) value = value xor character.code + return "%02X".format(value) + } +} diff --git a/shared/src/test/java/com/shilapi/xcertplay/transport/Iap2WiredControlClientTest.kt b/shared/src/test/java/com/shilapi/xcertplay/transport/Iap2WiredControlClientTest.kt new file mode 100644 index 0000000..6e6dde8 --- /dev/null +++ b/shared/src/test/java/com/shilapi/xcertplay/transport/Iap2WiredControlClientTest.kt @@ -0,0 +1,30 @@ +package com.shilapi.xcertplay.transport + +import com.shilapi.xcertplay.iap2.body.Iap2BodyReader +import com.shilapi.xcertplay.iap2.wire.Iap2ParameterList +import org.junit.Assert.assertArrayEquals +import org.junit.Assert.assertEquals +import org.junit.Test + +class Iap2WiredControlClientTest { + @Test + fun carPlayStartSessionNestsAddressesInsideWiredAttributes() { + val frame = Iap2WiredControlClient.carPlayStartSession( + Iap2WiredCarPlayEndpoint( + ipv6Addresses = listOf("fe80::2"), + airPlayPort = 7000, + deviceIdentifier = "02:00:00:00:00:02", + publicKey = "abcd", + sourceVersion = "1.0", + ), + ) + + assertEquals(0x4301, frame.messageId) + val outer = Iap2BodyReader.of(frame).list() + val wired = outer.single { it.id == 0 } + val addresses = Iap2ParameterList.parse(wired.payload).asList() + assertEquals(1, addresses.size) + assertEquals(0, addresses.single().id) + assertArrayEquals("fe80::2\u0000".encodeToByteArray(), addresses.single().payload) + } +} diff --git a/shared/src/test/java/com/shilapi/xcertplay/transport/Iap2WirelessControlClientTest.kt b/shared/src/test/java/com/shilapi/xcertplay/transport/Iap2WirelessControlClientTest.kt new file mode 100644 index 0000000..5f4ff44 --- /dev/null +++ b/shared/src/test/java/com/shilapi/xcertplay/transport/Iap2WirelessControlClientTest.kt @@ -0,0 +1,129 @@ +package com.shilapi.xcertplay.transport + +import com.shilapi.xcertplay.iap2.message.Iap2WirelessMessages +import com.shilapi.xcertplay.iap2.wire.Iap2Frame +import com.shilapi.xcertplay.iap2.wire.Iap2Parameter +import com.shilapi.xcertplay.iap2.wire.Iap2ParameterList +import org.junit.Assert.assertArrayEquals +import org.junit.Assert.assertEquals +import org.junit.Assert.assertFalse +import org.junit.Assert.assertNull +import org.junit.Assert.assertTrue +import org.junit.Test + +class Iap2WirelessControlClientTest { + @Test + fun accessoryWiFiConfigurationMatchesLiviVector() { + val frame = Iap2WirelessControlClient.accessoryWiFiConfiguration(endpoint()) + + assertEquals( + "404000275703000900014c49564900000e00027365637265743132330000050003030005000424", + frame.encodedFrame().hex(), + ) + } + + @Test + fun carPlayStartSessionMatchesLiviWirelessVector() { + val frame = Iap2WirelessControlClient.carPlayStartSession(endpoint()) + + assertEquals( + "40400060430100350001000900004c49564900000e000173656372657431323300000500022400100003" + + "3139322e3136382e322e31000005000403000800020000c000000a00036465762d3100000b000461" + + "61626263630000080005312e3000", + frame.encodedFrame().hex(), + ) + } + + @Test + fun wirelessIdentificationAdvertisesTransportComponentsWithoutUsbHost() { + val config = Iap2IdentificationConfig( + name = "LIVI", + modelIdentifier = "LIVI", + manufacturer = "LIVI", + serialNumber = "0123456", + firmwareVersion = "1.0.0", + hardwareVersion = "1.0", + wireless = Iap2WirelessIdentification( + bluetoothMac = "AA:BB:CC:DD:EE:FF", + ssid = "LIVI", + ), + ) + val parameters = parameters( + Iap2IdentificationClient.identificationInformation(config).payload, + ) + + assertNull(parameters.firstOrNull { it.id == 16 }) + assertArrayEquals(byteArrayOf(0), parameters.single { it.id == 8 }.payload) + + val bluetooth = parameters(parameters.single { it.id == 17 }.payload) + assertEquals("blue\u0000", bluetooth.single { it.id == 1 }.payload.decodeToString()) + assertArrayEquals( + byteArrayOf(0xaa.toByte(), 0xbb.toByte(), 0xcc.toByte(), 0xdd.toByte(), 0xee.toByte(), 0xff.toByte()), + bluetooth.single { it.id == 3 }.payload, + ) + + val wireless = parameters(parameters.single { it.id == 24 }.payload) + assertEquals("LIVI\u0000", wireless.single { it.id == 1 }.payload.decodeToString()) + + val sent = u16Values(parameters.single { it.id == 6 }.payload) + val received = u16Values(parameters.single { it.id == 7 }.payload) + assertTrue(0x5703 in sent) + assertTrue(0x4301 in sent) + assertFalse(0xae03 in sent) + assertTrue(0x4300 in received) + assertTrue(0x4e0d in received) + assertTrue(0x4e0e in received) + assertTrue(0x5702 in received) + } + + @Test + fun wirelessCarPlayUpdateReadsBooleanAvailability() { + val frame = Iap2Frame( + 0x4e0d, + Iap2ParameterList.of(Iap2Parameter(0, byteArrayOf(1))).encode(), + ) + + assertTrue(Iap2WirelessMessages.wirelessCarPlayAvailability(frame)) + } + + @Test + fun wiredIdentificationKeepsCarPlayStartSessionDeclaration() { + val config = Iap2IdentificationConfig( + name = "wired", + modelIdentifier = "wired", + manufacturer = "test", + serialNumber = "1", + firmwareVersion = "1.0", + hardwareVersion = "1.0", + carPlayUsbInterfaceNumber = 4, + ) + val parameters = parameters( + Iap2IdentificationClient.identificationInformation(config).payload, + ) + + assertTrue(0x4301 in u16Values(parameters.single { it.id == 6 }.payload)) + assertTrue(0x4300 in u16Values(parameters.single { it.id == 7 }.payload)) + } + + private fun endpoint(): Iap2WirelessCarPlayEndpoint = Iap2WirelessCarPlayEndpoint( + ssid = "LIVI", + passphrase = "secret123", + channel = 36, + security = Iap2WirelessSecurity.WPA3_TRANSITION, + ipAddresses = listOf("192.168.2.1"), + airPlayPort = 49152, + deviceIdentifier = "dev-1", + publicKey = "aabbcc", + sourceVersion = "1.0", + ) + + private fun u16Values(bytes: ByteArray): List = + List(bytes.size / 2) { index -> + ((bytes[index * 2].toInt() and 0xff) shl 8) or (bytes[index * 2 + 1].toInt() and 0xff) + } + + private fun parameters(bytes: ByteArray) = Iap2ParameterList.parse(bytes).asList() + + private fun ByteArray.hex(): String = + joinToString(separator = "") { "%02x".format(it.toInt() and 0xff) } +} diff --git a/shared/src/test/java/com/shilapi/xcertplay/transport/LinuxI2cTransportTest.kt b/shared/src/test/java/com/shilapi/xcertplay/transport/LinuxI2cTransportTest.kt new file mode 100644 index 0000000..e15a490 --- /dev/null +++ b/shared/src/test/java/com/shilapi/xcertplay/transport/LinuxI2cTransportTest.kt @@ -0,0 +1,70 @@ +package com.shilapi.xcertplay.transport + +import org.junit.Assert.assertArrayEquals +import org.junit.Assert.assertEquals +import org.junit.Assert.fail +import org.junit.Test + +class LinuxI2cTransportTest { + @Test + fun transactionDelegatesCombinedReadAndMapsNackBeforeClose() { + val bridge = RecordingBridge(response = byteArrayOf(0x12, 0x34)) + val transport = LinuxI2cTransport.open("/dev/i2c-2", bridge) + + assertArrayEquals(byteArrayOf(0x12, 0x34), transport.transaction(0x11, byteArrayOf(0x30), 2)) + assertEquals("/dev/i2c-2", bridge.openedPath) + assertEquals(0x11, bridge.address) + assertArrayEquals(byteArrayOf(0x30), bridge.writeData) + assertEquals(2, bridge.readLength) + + try { + LinuxI2cTransport.open( + "/dev/i2c-1", + RecordingBridge(error = LinuxI2cNativeException(121, "remote error")), + ).transaction(0x11, byteArrayOf(1), 0) + fail("expected Nack") + } catch (_: I2cTransportException.Nack) { + } + + transport.close() + assertEquals(7, bridge.closedHandle) + try { + transport.transaction(0x11, byteArrayOf(1), 0) + fail("expected closed transport") + } catch (_: I2cTransportException.DeviceUnavailable) { + } + } + + private class RecordingBridge( + private val response: ByteArray = byteArrayOf(), + private val error: LinuxI2cNativeException? = null, + ) : LinuxI2cBridge { + var openedPath: String? = null + var address: Int? = null + var writeData: ByteArray? = null + var readLength: Int? = null + var closedHandle: Int? = null + + override fun open(devicePath: String): Int { + openedPath = devicePath + return 7 + } + + override fun transaction( + handle: Int, + address7Bit: Int, + writeData: ByteArray, + readLength: Int, + ): ByteArray { + address = address7Bit + this.writeData = writeData + this.readLength = readLength + error?.let { throw it } + return response + } + + override fun close(handle: Int) { + closedHandle = handle + } + } +} diff --git a/shared/src/test/java/com/shilapi/xcertplay/transport/Ntb16CodecTest.kt b/shared/src/test/java/com/shilapi/xcertplay/transport/Ntb16CodecTest.kt new file mode 100644 index 0000000..d8787fe --- /dev/null +++ b/shared/src/test/java/com/shilapi/xcertplay/transport/Ntb16CodecTest.kt @@ -0,0 +1,32 @@ +package com.shilapi.xcertplay.transport + +import org.junit.Assert.assertArrayEquals +import org.junit.Assert.assertEquals +import org.junit.Test + +class Ntb16CodecTest { + @Test + fun parseCanReadBlockFromLargerBuffer() { + val frame = byteArrayOf(0x33, 0x33, 0, 0, 0, 1, 0x86.toByte(), 0xdd.toByte()) + val block = Ntb16Codec.build(frame, 7) + val buffer = ByteArray(11) + block + ByteArray(3) + + val parsed = Ntb16Codec.parse(buffer, 11, block.size) + + assertArrayEquals(frame, parsed.single()) + } + + @Test + fun largestDatagramKeepsBlockLengthWithinU16() { + val block = Ntb16Codec.build(ByteArray(65_507), 0x1234) + + assertEquals(65_535, block.size) + assertEquals(0xff, block[8].toInt() and 0xff) + assertEquals(0xff, block[9].toInt() and 0xff) + } + + @Test(expected = IllegalArgumentException::class) + fun datagramThatWouldOverflowBlockLengthIsRejected() { + Ntb16Codec.build(ByteArray(65_508), 0x1234) + } +} diff --git a/site/.nojekyll b/site/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/site/ar/index.html b/site/ar/index.html new file mode 100644 index 0000000..b26fdb6 --- /dev/null +++ b/site/ar/index.html @@ -0,0 +1,7 @@ + + +DiPlay · التنزيلات معلّقة + +

    DiPlay
    +
    التنزيلات معلّقة

    تنزيل DiPlay
    متوقف مؤقتاً.

    تم سحب ملف APK للإصدار 0.1.0 أثناء مراجعة بيانات اعتماد مصادقة الملحق. يُرجى عدم إعادة نشر الملف أو استخدام الهوية المضمّنة فيه. لا يتوفر ملف APK بديل حالياً.

    إزالة رابط التنزيل أو إعادة ضبط سجل Git لا تسترجع النسخ التي تمت مشاركتها ولا تُبطل بيانات اعتماد مكشوفة.

    +

    مشروع مستقل مبني على xcertplay وبتصميم واجهة من DiAuto. غير تابع لـ Apple أو BYD. كار بلاي وأيقونته ملك لشركة Apple.

    \ No newline at end of file diff --git a/site/assets/home.png b/site/assets/home.png new file mode 100644 index 0000000000000000000000000000000000000000..21197f4ae83e7792698680ab5949e4f5a8e61797 GIT binary patch literal 130440 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ⅈQ>84 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
    5OkF^4#PLmUl7C`?imS<^&rMDzE+(w-+L9=q!c zwN^aU$DM1%*&KV{WvvCaeu+g>%|!3{*3>y6d4{C>riGj*G7-f|eN#2AlB8^E*1-K! zNt-ja>{Yv78)TatQf7&JjY~KK zqI!x>)2qHzgO&M4U0&W>W$~(a0SDtUfzMhMCl4w z9Mjj@_c~tOR@!U)o5Di8PxwL)JQFEFslO-X@N+FJisE7!smcoYroXgdaphDl-zc{) zqs6b*r#atOr0hE2NKUCw3zRu%IKK0@Bh7fb1^9Jg7=h*%i#-2n-7>u0^|* z!Mhn>i)4pgD#?M?e{AK~q2riR+f?>iL1`xSTU_sR_+2WK~ilo^6n z?1-yfZPEDq_VWgvA~zSkQWYXyE+baDE|>ay&#*epX<%iG)226>05Wq-(VJ+xjdT#X z>8&=XZWo>OJ|4b&m9eu6*=&s_+{)@CgB3 z3+r{C&x<=_FGRb~t1y#1n;JTjaB5gIps!!^icJsZWVoEs;Pq401R=`|Aejs|aPRfm zkr5k*u71q(tvIwKYWZ%S+bv57I*KY$nYL44d>G{G_>1*u2YeMD7ACJQiKM0Ne&*}Q zKG6p%M{z~b2Yp|vq@WEZ0gAIIyr&gv7}8@+T&>GMw+4F8864DNo_NjnEe7eB*`6(J zA+8?+dNv5-%DCvIK$j0~ZEn$=4=bQ!FS@f|+v1X*_Ks3q4Dgia=Qfuu1(Z6`C$52f-CE&-nf^lKdz6&Zl4+ikMlI(_6__qZ3^#H9PSCt1p)4Tr5C05_ zLZEd`f=^Zw#7up9Rx*Q5{Uf@OfhMT_M2-DM)9cS3?Aop^*MSuTCqt)Z(uRne9-(MD z@$#h>jNk^e_bg}&Zv+7-Eh_MVzj(_(O3OT7`k-j9=ADB7*E?0)4XwXmm+gzEe^!Rv z^BhQh0jI8qgat8-J1{83Ov8)}SO2p6Z9p;sj z;T^Ap!P6z+ZR-QIa%r#H;(0Xetn3&yNX$3Pn>@LWX}jT&zc$9Wd zsA#GBrd6EsO!Lef(2Z1nN7GxW9gQ)d*($D9LLY)|lnS!n`0O@tPdVH}Fq|))*g)6r zVt9Gf9Kni300&L8V7KpgkLDLSMkBWi1aJO(PMho_lW62VtT@SGrXjSe>rKDJ{^O+s zECC|XFL41&0!Am-&MCD1&}*V)71L|h2ul)st_m*0-ma6aFKi^V{97(vVAWfQK1$<& z_Ig7vCL$-C*Pu6VAJ>CRbjlxR4E!28riyk>Q{>n0CcD{7wB&!E9q{f=&(7tKB z(xfa{G0JAZm2MaIKG}W!*F^7@mY?-YUEN0?n6?anZ*~~gcQ&YoT@{uD+_!Pr1pHJ< z0TjQg)dgl&+c|DxD)0qel!Ib7*G(s@G!kdWOYQcz7A-Fr%?c3|R%TfqU#M zqvs9|T|02{f48UX@fUiF;QIt&>oW<8fbGoK(u-v0#!A)MVFdhsgO4#;=c%G}j=z7P z5gZRppZhNiXS|Z3mw5L&f^cZ%`aVb8f<~91(80CyjeY0YFWA}iYw01`3y0>GZ8Bhw z>?`9yOhEF5E~Qt2^L2T86Q+ITJ`6`*o!&YBFF^lim%EBlej9d=U)STMARNz6w~S)O zRMDX9l}D@!Io!H!FOQ@7lVj3dr1DNdpCP+0o)1;K#l^v;eVin1*NYz?6|Wz4iIMI* zO@2W&05OqxyVF99NdS(T56%L%HBBGKs~*nd^DLg-pg2ym_!4th8E{(rc$!lQy}chs50ILFfG`ip&WC$B7^$qU8z_sa@4k>$qhNcr_J1 z7kO(Xb;M;W@i==cVfGbmN0Ds@zI!MP3KKUm;1L83VgDR^1|S_>)|8rhGV>P)D91hAUyuOKl(ke#v$Z}d8VjqeB}y&LE+ z9B2qdh_Sg8R7X+Cb(q2dvTWM|2b9h%?2>y#FogdUw8X)V?Q-lR*sE27uaXUX%-myL>P-kufSuPsKxNWngL%hTCIzB@JqB zT)fzoK?_annw#(|{dA>9(wwn)Y2eTWPg84o0L>*|soykin`9d_eF50qoz{qg%)!Z3 zS0e!A__`KQL7kfjABnc9HEc&Ou+#i+jo|aS1n4l%c_04JLH7-c03%mEZn5-e9;~@~ z!(e)Yr(zo5q`1h_>IuEJQZmDJfjf$j!RoN;_XZ77SdsuBxFU>YP?{DGaOnK>%u91B z%`5ya4GYKf*P zZ_XdG**i5v|LNnw){gGZ@=?x7Xi1L0>c84=L_Ed)gFzpBoYPKSG=tL2&QN^y>GBJ@6mB{`d(Lp_*NUP=>$^!t3=Oi`Y1d2*fPi0^zdUPD~A)V zfsv5cDOm6gO5R{%l$wIW5a`41P++5{zwh-8IudA^f#EXxtUx!*Id88vCn#Ituv$p3 z@i1^U2@(3&+G(Ts*y`8%;)p+*xP_SSuo+e8yNMGM&r*;pmp?pchSBUIDz>0(5y7hh75z152EAdxMbk$BmdAdIRhPMAS7Uo?ofa><@T`qbsgF`~grbHJBye6S&zN+m7Dd}`?AA)?m_~ZZe)O3d>R9a3Y}h*6 zsA`gG7VH>K&X3J?M#58Eho4lZ1)e_)SnaK-+DA9~I!=wgtcTBxbpSqF3BCW*`Eq|T zN^zt~|9x%BawD|C#5K9}DKCJRK7ZU9Hf{1@wU*VLXHUrE0K<-2ofg343_O4oSL{qz zTD(3AUz{t6zlx>Wmb~NR*Mr;^2!u*Gey0H(_yw8pyZZp){6@=hGl%=@azMn^fmZt< z^WysmWk<`{8M4+&rLT)4xFTkJ&9@L#mNS{Ohb+J3{;Q_jRH7)&59V@e*-LjipKz-X zUVfEdtS(ahWiWmSl(%kL)C#3l^1OWfIb_<%4jVcVvcBJf`5xbR=j?Fj+So#`wzcW% z1mhuQ&ppQ5Stj}El0xEnOEq3_^Q{5@ILU-*_JPLv+>|iG|53cr{r%xU?~!?!fh(eN z0QuoNV_868znh^jMM-gbH#piB<7$=nW~s#y)w;?*emXjUG!VV{p(5sHQi5Zk`dh5okGl%S<0$*;qtZYjMANgZG*T_4o2S}2O)KJH@13_nb5QF!B zxe$G4NVSCe(u{?Y=~OKEvGD^A#ae2uwe1&@E4 ze)tgf!bktz!UktfdM(?qlJa6)-C$PI9`ivrOKrR6=Whw6j(Md{I)i^mQ4BiG*Ti#W zh*ag~W;yI;XS!WZbv#!HLRb2fTB1%J4KFTrrG|=ZGW%|a-6CL362}Jc-NjoT&3)dA zqknkLbal{x7@ipuC>8rQw3220a}U_0GrQ%$DzIdJsu*BhT>GGcl^VZgw6ylv!<)z) zCKM|f?Jtx70829)2Hnn1Q=P-JYQl^@z-iFD{~<2b`vI|s+O;N1ABTO(YXIwq5ZCu^73*y4 zP!sKGmc+Q#!gcUJ_jN3wLl!@3J=7JSA8hG5-06BD5mv;YP!q(C%#8TGyYcgS#(5E3 zbf_z5$$L79LD_l~Nmfv9=vyZLeV<~bM~=iob-<-SN-Jx6VnVF&0`L@g3$GE+fKU>{ z%`rt$h4XiJ1sv$*6p?=2ah?<^%cplkE?4$OF@}n?R3u%!;4&Ig-iLWMI|!WWfwD~D z17abv)^vbJ!q8VZk}GzwJeK+#aFmW}d7wMm5OLYEp+f_1)fCF$Yr74zkLsRr48?;hTYG6=<>cvOD?$lHCtwBy6~S00dkPzQ(f z$-{exLmZ9a#0^BJM@=PChWmp)3}-`%j=mj1?8nF zjW;h;w|EuE^ecbc>6o_wo;Jn#Jj1VR*V!acUO9chjy-emlzG!Nfz-AT)W3e}*F+;c zdQjkq2b6jWYn_@P^rlkFA`QcY zhK#Lt;}s~T+t3#paNP%nA6_=@*e&(Q4IJbf`A?j}ddnJ){2Cf>5zh#<1v=6I-C*5@ z8Zb_0Ze9Q}sCNVKT|1_0eX8B&$!z;XhiLQJ`)JJ2_{;tWIzDQvxTI{lh>-_%h=Kjx z2^Xk^e7k^#l+5#_cFK+rr1}yNCL@XJ{9`!^SkFo+RJh@49JORv?CEJx@T|j0u&n?w z=7q#w@ep~Fz)|u4dQZ1|La>=vMF@S;%UKkhAoxUhHe+;+%Q2+7r9;HykpVVtAalc^d z>^hG?YiwiaR5YS^A5h1qk1#MRny%h0UW8Bwzt2`=74tZy1)4MjRlg>H&5Rir))YJ2 z7G7SCK=9ymYNCoWfO+l={4w%0AM|?XOD?$ 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 literal 0 HcmV?d00001 diff --git a/site/assets/icon.png b/site/assets/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..1f7e3f07ed86214662ec3e55e1bc74aa31d27113 GIT binary patch literal 35437 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 H7LxG~!&qBv literal 0 HcmV?d00001 diff --git a/site/assets/settings.png b/site/assets/settings.png new file mode 100644 index 0000000000000000000000000000000000000000..c5d226dc9094e28e43d92587e467599e3c661492 GIT binary patch literal 123439 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 literal 0 HcmV?d00001 diff --git a/site/assets/site.css b/site/assets/site.css new file mode 100644 index 0000000..01852c6 --- /dev/null +++ b/site/assets/site.css @@ -0,0 +1,4 @@ +:root{color-scheme:dark;font-family:Inter,-apple-system,BlinkMacSystemFont,"Segoe UI",Arial,sans-serif;background:#0c121c;color:#eef3fb;font-synthesis:none}*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;line-height:1.65}main{max-width:1160px;margin:auto;padding:36px 32px}a{color:#a6c9ff;text-underline-offset:4px}a:focus-visible{outline:3px solid #a6c9ff;outline-offset:5px}header{display:flex;align-items:center;justify-content:space-between;gap:24px;flex-wrap:wrap;padding-bottom:30px;border-bottom:1px solid #263449}.brand{display:flex;align-items:center;gap:14px;text-decoration:none;color:inherit}.brand strong{font-size:24px;letter-spacing:-.5px}.brand small{display:block;color:#a8b7cb;font-size:12px}.languages{display:flex;flex-wrap:wrap;gap:4px}.languages a{font-size:13px;min-height:44px;display:flex;align-items:center;padding:8px 12px;border-radius:10px;text-decoration:none;color:#bdcadd}.languages a[aria-current]{background:#1b2c43;color:#b9d5ff}.hero{padding:72px 0 52px;max-width:850px}.badge,.eyebrow{font-size:12px;font-weight:700;letter-spacing:2px;color:#aacaff}.badge{padding:7px 12px;background:#17253a;border:1px solid #304766;border-radius:8px}h1{font-size:clamp(40px,6.5vw,76px);line-height:1.1;letter-spacing:-2.5px;margin:26px 0}h2{font-size:25px;line-height:1.3;letter-spacing:-.4px;margin:0 0 18px}h3{font-size:18px;margin-top:30px}.intro{font-size:21px;line-height:1.6;color:#b9c7db;max-width:740px}.actions{display:flex;gap:12px;flex-wrap:wrap;margin:30px 0 24px}.button{display:inline-flex;align-items:center;justify-content:center;gap:24px;background:#a6c9ff;color:#102542;border:1px solid transparent;border-radius:12px;padding:14px 23px;min-height:52px;text-decoration:none;font-weight:650}.button:hover{background:#bed8ff}.button.secondary{background:#172335;border-color:#2b3d55;color:#d4e4fc}.button.secondary:hover{background:#223650}.promise{font-size:16px;font-weight:600;margin-bottom:8px}.note{font-size:14px;color:#9faec2;max-width:760px}.gallery{margin-bottom:50px}.screens{display:grid;grid-template-columns:1fr 1fr;gap:24px}figure{margin:0;min-width:0}figure:first-child{grid-column:1/-1}figure img{width:100%;height:auto;display:block;border:1px solid #2c3d53;border-radius:16px;background:#121b29}figcaption{font-size:14px;color:#a8b8ce;padding:12px 3px}.grid{display:grid;grid-template-columns:1fr 1fr;gap:24px}.card{background:#141e2c;border:1px solid #28384d;border-radius:20px;padding:30px}.eyebrow{display:block;margin-bottom:16px}li{padding-inline-start:4px;margin-bottom:14px}ol,ul{padding-inline-start:22px;color:#b9c7da}.card p{color:#b9c7da}.updates{display:flex;align-items:center;justify-content:space-between;gap:28px;margin-top:24px}.updates h2{margin-bottom:8px}.updates p{margin:0}.updates .button{flex-shrink:0}.signing{padding:36px 0;max-width:900px}.signing h2{font-size:18px}.signing p,footer{font-size:14px;color:#9faec2}footer{border-top:1px solid #263449;padding:25px 0}footer nav{display:flex;flex-wrap:wrap;gap:22px}footer a{color:#b9c7da}html[dir=rtl] h1{letter-spacing:0;line-height:1.3}html[dir=rtl] .badge{letter-spacing:0}@media(max-width:700px){main{padding:24px 20px}.hero{padding:42px 0 30px}h1{letter-spacing:-1px}.intro{font-size:18px}.screens,.grid{grid-template-columns:1fr}.card{padding:24px}.updates{align-items:flex-start;flex-direction:column}header{gap:18px}.languages a{padding:8px 10px}.gallery{margin-bottom:32px}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}} + +/* DiPlay: two actual app screenshots, equal columns. */ +figure:first-child{grid-column:auto}.brand img{border-radius:12px}html[dir=rtl] .eyebrow{letter-spacing:0}@media(max-width:700px){figure:first-child{grid-column:1/-1}} diff --git a/site/content.json b/site/content.json new file mode 100644 index 0000000..5571123 --- /dev/null +++ b/site/content.json @@ -0,0 +1,57 @@ +{ + "en": { + "name": "English", + "dir": "ltr", + "badge": "DOWNLOADS SUSPENDED", + "title": "DiPlay downloads\nare paused.", + "body": "The 0.1.0 APK has been withdrawn while we review its accessory-authentication credentials. Please do not redistribute that APK or reuse its bundled identity. No replacement APK is available.", + "detail": "Removing a download or resetting Git history cannot recall copies already shared or invalidate an exposed credential.", + "source": "Source project", + "security": "Security status", + "footer": "Independent project based on xcertplay, with interface design from DiAuto. Not affiliated with Apple or BYD. CarPlay and its icon belong to Apple Inc." + }, + "ar": { + "name": "العربية", + "dir": "rtl", + "badge": "التنزيلات معلّقة", + "title": "تنزيل DiPlay\nمتوقف مؤقتاً.", + "body": "تم سحب ملف APK للإصدار 0.1.0 أثناء مراجعة بيانات اعتماد مصادقة الملحق. يُرجى عدم إعادة نشر الملف أو استخدام الهوية المضمّنة فيه. لا يتوفر ملف APK بديل حالياً.", + "detail": "إزالة رابط التنزيل أو إعادة ضبط سجل Git لا تسترجع النسخ التي تمت مشاركتها ولا تُبطل بيانات اعتماد مكشوفة.", + "source": "المشروع المصدري", + "security": "حالة الأمان", + "footer": "مشروع مستقل مبني على xcertplay وبتصميم واجهة من DiAuto. غير تابع لـ Apple أو BYD. كار بلاي وأيقونته ملك لشركة Apple." + }, + "ru": { + "name": "Русский", + "dir": "ltr", + "badge": "ЗАГРУЗКИ ПРИОСТАНОВЛЕНЫ", + "title": "Загрузка DiPlay\nприостановлена.", + "body": "APK версии 0.1.0 отозван на время проверки учётных данных аутентификации аксессуара. Пожалуйста, не распространяйте этот APK и не используйте встроенные в него данные идентификации. Замены APK пока нет.", + "detail": "Удаление загрузки или сброс истории Git не отзывает уже распространённые копии и не аннулирует раскрытые учётные данные.", + "source": "Исходный проект", + "security": "Информация о безопасности", + "footer": "Независимый проект на базе xcertplay с дизайном интерфейса DiAuto. Не связан с Apple или BYD. CarPlay и его значок принадлежат Apple Inc." + }, + "es": { + "name": "Español", + "dir": "ltr", + "badge": "DESCARGAS SUSPENDIDAS", + "title": "Las descargas de DiPlay\nestán pausadas.", + "body": "El APK 0.1.0 se ha retirado mientras revisamos sus credenciales de autenticación de accesorio. No redistribuyas ese APK ni reutilices la identidad incluida. Aún no hay un APK de reemplazo.", + "detail": "Retirar una descarga o reiniciar el historial de Git no recupera las copias compartidas ni invalida una credencial expuesta.", + "source": "Proyecto fuente", + "security": "Estado de seguridad", + "footer": "Proyecto independiente basado en xcertplay, con diseño de interfaz de DiAuto. Sin afiliación a Apple ni BYD. CarPlay y su icono pertenecen a Apple Inc." + }, + "zh-Hans": { + "name": "简体中文", + "dir": "ltr", + "badge": "下载已暂停", + "title": "DiPlay 下载\n已暂停。", + "body": "在审查配件认证凭据期间,0.1.0 APK 已撤下。请勿继续分发该 APK 或重复使用其中的配件身份。目前没有替代 APK。", + "detail": "移除下载链接或重置 Git 历史记录无法撤回已分享的副本,也不会使已泄露的凭据失效。", + "source": "源代码项目", + "security": "安全状态", + "footer": "基于 xcertplay 的独立项目,界面设计源自 DiAuto。与 Apple 或比亚迪无隶属关系。CarPlay 及其图标归 Apple Inc. 所有。" + } +} diff --git a/site/es/index.html b/site/es/index.html new file mode 100644 index 0000000..b865553 --- /dev/null +++ b/site/es/index.html @@ -0,0 +1,7 @@ + + +DiPlay · DESCARGAS SUSPENDIDAS + +

    DiPlay
    +
    DESCARGAS SUSPENDIDAS

    Las descargas de DiPlay
    están pausadas.

    El APK 0.1.0 se ha retirado mientras revisamos sus credenciales de autenticación de accesorio. No redistribuyas ese APK ni reutilices la identidad incluida. Aún no hay un APK de reemplazo.

    Retirar una descarga o reiniciar el historial de Git no recupera las copias compartidas ni invalida una credencial expuesta.

    +

    Proyecto independiente basado en xcertplay, con diseño de interfaz de DiAuto. Sin afiliación a Apple ni BYD. CarPlay y su icono pertenecen a Apple Inc.

    \ No newline at end of file diff --git a/site/index.html b/site/index.html new file mode 100644 index 0000000..1f9efea --- /dev/null +++ b/site/index.html @@ -0,0 +1,7 @@ + + +DiPlay · DOWNLOADS SUSPENDED + +
    DiPlay
    +
    DOWNLOADS SUSPENDED

    DiPlay downloads
    are paused.

    The 0.1.0 APK has been withdrawn while we review its accessory-authentication credentials. Please do not redistribute that APK or reuse its bundled identity. No replacement APK is available.

    Removing a download or resetting Git history cannot recall copies already shared or invalidate an exposed credential.

    +

    Independent project based on xcertplay, with interface design from DiAuto. Not affiliated with Apple or BYD. CarPlay and its icon belong to Apple Inc.

    \ No newline at end of file diff --git a/site/ru/index.html b/site/ru/index.html new file mode 100644 index 0000000..2767c93 --- /dev/null +++ b/site/ru/index.html @@ -0,0 +1,7 @@ + + +DiPlay · ЗАГРУЗКИ ПРИОСТАНОВЛЕНЫ + +
    DiPlay
    +
    ЗАГРУЗКИ ПРИОСТАНОВЛЕНЫ

    Загрузка DiPlay
    приостановлена.

    APK версии 0.1.0 отозван на время проверки учётных данных аутентификации аксессуара. Пожалуйста, не распространяйте этот APK и не используйте встроенные в него данные идентификации. Замены APK пока нет.

    Удаление загрузки или сброс истории Git не отзывает уже распространённые копии и не аннулирует раскрытые учётные данные.

    +

    Независимый проект на базе xcertplay с дизайном интерфейса DiAuto. Не связан с Apple или BYD. CarPlay и его значок принадлежат Apple Inc.

    \ No newline at end of file diff --git a/site/zh-Hans/index.html b/site/zh-Hans/index.html new file mode 100644 index 0000000..e681ecc --- /dev/null +++ b/site/zh-Hans/index.html @@ -0,0 +1,7 @@ + + +DiPlay · 下载已暂停 + +
    DiPlay
    +
    下载已暂停

    DiPlay 下载
    已暂停。

    在审查配件认证凭据期间,0.1.0 APK 已撤下。请勿继续分发该 APK 或重复使用其中的配件身份。目前没有替代 APK。

    移除下载链接或重置 Git 历史记录无法撤回已分享的副本,也不会使已泄露的凭据失效。

    +

    基于 xcertplay 的独立项目,界面设计源自 DiAuto。与 Apple 或比亚迪无隶属关系。CarPlay 及其图标归 Apple Inc. 所有。

    \ No newline at end of file

    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%0A%vc#S~GKxUTBp;17Po=Mr7qx{uhR{eW_ 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