Я создаю приложение macOS, которое будет обновлять прошивку запоминающего устройства USB. Для этого есть только два шага: скопируйте файлы на устройство хранения (сделано с этим) и отправьте команду перезагрузки на устройство, используя наборы команд SCSI.
Я попробовал библиотеку ниже, чтобы отправить команду, однако устройство не перезагрузилось. Я не уверен, что с моей просьбой что-то не так.
https://github.com/Arti3DPlayer/USBDeviceSwift
Я обратился к разработчику этой библиотеки, однако он ответил мне: «Извините, я не работал с USB и Swift около года и не помню этого :)»
Команда перезагрузки - "0xdf 0x40".
Это запрос, который я отправил на устройство.
''»
guard let deviceInterface = self.deviceInfo.deviceInterfacePtrPtr? .pointee? .pointee else {
throw STM32DeviceError.DeviceInterfaceNotFound
}
var kr:Int32 = 0
let length:Int = 6
var requestPtr:[UInt8] = [UInt8](repeating: 0, count: length)
// Creating request
var request = IOUSBDevRequest(bmRequestType: USBmakebmRequestType(direction: kUSBIn, type: kUSBDevice, recipient: kUSBStandard),
bRequest: STM32REQUEST.DETACH.rawValue,
wValue: UInt16(0xdf),
wIndex: 0,
wLength: UInt16(length),
pData: &requestPtr,
wLenDone: 255)
kr = deviceInterface.DeviceRequest(self.deviceInfo.deviceInterfacePtrPtr, &request)
if (kr != kIOReturnSuccess) {
throw STM32DeviceError.RequestError(desc: "Get device status request error: \(kr)")
}
'' '