Как выполнить аппаратное обеспечение reset конкретного HID-устройства?

Цель

Выполните аппаратное обеспечение reset конкретного USB-ключа ANT, HID-устройства с приложением Delphi.


1. Ошибка функции CM_Request_Device_Eject

Я попытался использовать функцию CM_Request_Device_Eject, и она корректно выбрасывает мое устройство, но в некоторых системах автоматически не запускается снова.

Это код, который я использовал для извлечения устройства:

str := PChar(GetDeviceID(DeviceInfoData.DevInst));
status := CM_Locate_DevNodeA(dev, str, CM_LOCATE_DEVNODE_NORMAL);
status := CM_Request_Device_EjectA(dev, nil, '', 0, 0);

Есть ли способ убедиться, что мое устройство запустится, если оно не будет автоматически запускаться после извлечения при использовании этой функции?


2. Ошибка настройки SetupDiRestartDevices

В качестве альтернативы я попытался использовать функцию SetupDiRestartDevices, и это правильно сбрасывает мое устройство, но за исключением того, что сбрасывает все Устройства HID (такие как мышь, клавиатура и т.д.), И для этой функции требуются права администратора:

rslt1 := SetupDiRestartDevices(hDevInfo, DeviceInfoData);

Как я могу reset только мое устройство с этой функцией?


Вопрос

Существует ли общий рекомендуемый способ выполнения аппаратного обеспечения reset конкретного USB-устройства HID? Или есть способ решить любую из вышеуказанных проблем?

Ответ 1

Жесткий reset - это не то, что вы можете сделать сами по себе... для жесткого reset для какого-либо устройства, это конкретное устройство должно поддерживать жесткие reset... способы жесткие reset варьируются от устройства к устройству. на некоторых устройствах есть кнопка на жестком диске reset. для некоторых требуется фрагмент кода. большая часть компании выпускает набор списков AT-команд для определенных устройств.

например.. здесь - это список команд, выпущенных производителем для определенного устройства

это может помочь вам в этом случае... если не держать googling.