From d6f1e2f6b8f67ee58adfd0ae1d18d7dbd9de4def Mon Sep 17 00:00:00 2001 From: yecong Date: Wed, 17 Jun 2026 14:39:05 +0800 Subject: [PATCH] Fix Android DFU target id handling --- android/gradle.properties | 4 ---- src/DfuScreen.tsx | 17 ++++++++++++++++- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/android/gradle.properties b/android/gradle.properties index 47d6d85..9afe615 100644 --- a/android/gradle.properties +++ b/android/gradle.properties @@ -42,7 +42,3 @@ hermesEnabled=true # This allows your app to draw behind system bars for an immersive UI. # Note: Only works with ReactActivity and should not be used with custom Activity. edgeToEdgeEnabled=false - - - -org.gradle.java.home=E:\\jdk\\jdk-17.0.12 \ No newline at end of file diff --git a/src/DfuScreen.tsx b/src/DfuScreen.tsx index 0716643..0beb119 100644 --- a/src/DfuScreen.tsx +++ b/src/DfuScreen.tsx @@ -5,6 +5,7 @@ import { RootStackParamList } from "../App"; import RNFS from "react-native-fs"; import { startDfu, + getDfuTargetId, addDfuEventListener, DfuProgressEvent, DfuStateEvent, @@ -64,6 +65,8 @@ const trace = (step: string, payload?: unknown) => { export default function DfuScreen({ route, navigation }: Props) { const { deviceId, + systemId, + address, name, firmware: deviceFirmware, } = route.params; @@ -154,12 +157,24 @@ export default function DfuScreen({ route, navigation }: Props) { setError(undefined); const rawDeviceId = String(deviceId ?? "").trim(); - const safeDeviceId = rawDeviceId; + const rawSystemId = String(systemId ?? rawDeviceId).trim(); + const rawAddress = + typeof address === "number" + ? address + : address !== undefined && address !== null + ? Number(address) + : undefined; + const safeDeviceId = getDfuTargetId({ + systemId: rawSystemId, + address: Number.isFinite(rawAddress) ? rawAddress : undefined, + }); const firmwareText = String(deviceFirmware ?? "").trim(); trace("resolved input", { rawDeviceId, + rawSystemId, + rawAddress, safeDeviceId, firmwareText, });