Skip to content

Commit a4a88d5

Browse files
authored
Merge pull request #30 from PlayerData/erase-command
Expose ability to erase secondary image
2 parents 49df09f + affe659 commit a4a88d5

File tree

4 files changed

+64
-3
lines changed

4 files changed

+64
-3
lines changed

android/src/main/java/uk/co/playerdata/reactnativemcumanager/McuManagerModule.kt

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,10 @@ import android.net.Uri
66
import android.util.Log
77
import com.facebook.react.bridge.*
88
import com.facebook.react.modules.core.DeviceEventManagerModule.RCTDeviceEventEmitter
9+
import io.runtime.mcumgr.ble.McuMgrBleTransport
10+
import io.runtime.mcumgr.managers.ImageManager
911

10-
class McuManagerModule(val reactContext: ReactApplicationContext) : ReactContextBaseJavaModule(reactContext) {
12+
class McuManagerModule(private val reactContext: ReactApplicationContext) : ReactContextBaseJavaModule(reactContext) {
1113
private val TAG = "McuManagerModule"
1214
private val bluetoothAdapter: BluetoothAdapter? = BluetoothAdapter.getDefaultAdapter()
1315
private val upgrades: MutableMap<String, DeviceUpgrade> = mutableMapOf()
@@ -16,13 +18,35 @@ class McuManagerModule(val reactContext: ReactApplicationContext) : ReactContext
1618
return "McuManager"
1719
}
1820

21+
@ReactMethod
22+
fun eraseImage(macAddress: String?, promise: Promise) {
23+
if (this.bluetoothAdapter == null) {
24+
throw Exception("No bluetooth adapter")
25+
}
26+
27+
try {
28+
val device: BluetoothDevice = bluetoothAdapter.getRemoteDevice(macAddress)
29+
30+
var transport = McuMgrBleTransport(reactContext, device)
31+
transport.connect(device).timeout(60000).await()
32+
33+
val imageManager = ImageManager(transport);
34+
imageManager.erase()
35+
36+
promise.resolve(null)
37+
} catch (e: Throwable) {
38+
promise.reject(e)
39+
}
40+
}
41+
1942
@ReactMethod
2043
fun createUpgrade(id: String, macAddress: String?, updateFileUriString: String?, updateOptions: ReadableMap) {
2144
if (this.bluetoothAdapter == null) {
22-
throw Exception("no bluetooth adapter")
45+
throw Exception("No bluetooth adapter")
2346
}
47+
2448
if (upgrades.contains(id)){
25-
throw Exception("update ID already present")
49+
throw Exception("Update ID already present")
2650
}
2751

2852
val device: BluetoothDevice = bluetoothAdapter.getRemoteDevice(macAddress)

ios/McuManager.m

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,13 @@ + (BOOL)requiresMainQueueSetup
1212
supportedEvents
1313
)
1414

15+
RCT_EXTERN_METHOD(
16+
eraseImage:
17+
NSString
18+
resolver:(RCTPromiseResolveBlock)resolve
19+
rejecter:(RCTPromiseRejectBlock)reject
20+
)
21+
1522
RCT_EXTERN_METHOD(
1623
createUpgrade:
1724
NSString

ios/McuManager.swift

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import os
22
import CoreBluetooth
3+
import iOSMcuManagerLibrary
34

45

56
@objc(RNMcuManager)
@@ -19,6 +20,27 @@ class RNMcuManager: RCTEventEmitter {
1920
]
2021
}
2122

23+
@objc
24+
func eraseImage(_ bleId: String, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) -> Void {
25+
guard let bleUuid = UUID(uuidString: bleId) else {
26+
let error = NSError(domain: "", code: 200, userInfo: nil)
27+
return reject("error", "failed to parse uuid", error);
28+
}
29+
30+
let bleTransport = McuMgrBleTransport(bleUuid)
31+
let imageManager = ImageManager(transporter: bleTransport)
32+
33+
imageManager.erase { (response: McuMgrResponse?, err: Error?) in
34+
if (err != nil) {
35+
reject("ERASE_ERR", err?.localizedDescription, err)
36+
return
37+
}
38+
39+
resolve(nil)
40+
return
41+
}
42+
}
43+
2244
@objc
2345
func createUpgrade(_ id: String, bleId: String, updateFileUriString: String, updateOptions: Dictionary<String, Any>) -> Void {
2446
upgrades[id] = DeviceUpgrade(id: id, bleId: bleId, fileURI: updateFileUriString, options: updateOptions, eventEmitter: self)

src/index.tsx

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,15 @@
1+
import { NativeModules } from 'react-native';
2+
3+
const { McuManager } = NativeModules;
4+
15
import Upgrade, {
26
FirmwareUpgradeState,
37
UpgradeOptions,
48
UpgradeMode,
59
} from './Upgrade';
610

11+
export const eraseImage = McuManager.eraseImage as (
12+
bleId: string
13+
) => Promise<void>;
14+
715
export { Upgrade, FirmwareUpgradeState, UpgradeOptions, UpgradeMode };

0 commit comments

Comments
 (0)