Programmation d'un câble de transfert USB / conversation avec un pilote de périphérique USB
-
03-07-2019 - |
Question
Comment accéder par programme à un câble de transfert USB (tel que le Câble de transfert facile de Belkin) à partir de Windows ?
Je connais libusb-win32 , mais d'après ce que je peux dire, l'utiliser avec les nouveaux appareils et avec Windows Vista semble incertain.
Je sais que Windows Easy Transfer peut faire ce. Comment puis-je écrire du code qui fait la même chose que Windows Easy Transfer?
S'il n'y a pas de documentation prédéfinie sur la façon de procéder, je suis disposé à faire des recherches, mais je ne sais pas par où commencer. Comment puis-je regarder ce que Windows Easy Transfer fait pour savoir comment il le fait? Je constate que Windows attribue même aux câbles de transfert leur propre catégorie dans le Gestionnaire de périphériques, " Transférer des périphériques de câble. & Quot; Comment puis-je communiquer à bas niveau avec l'un de ces pilotes?
La solution
J'ai découvert que Microsoft propose désormais WinUSB pour les utilisateurs simples. mode de communication avec les périphériques USB. (Un pilote de périphérique WinUSB doit tout d'abord être installé pour le périphérique; cela ressemble un peu à un pilote de périphérique libusb-win32.) WinUSB fonctionne sous XP (SP2 et versions ultérieures) et Vista.
Le câble de transfert facile utilise WinUSB pour son pilote de périphérique. J'ai donc pu communiquer avec lui en suivant l'exemple de code fourni par Microsoft document WinUSB .
Autres conseils
Pour ce faire, vous devrez utiliser l'API win32 de bas niveau. Microsoft a quelques exemples intéressants sur l’accès à un périphérique à interface humaine. Le câble de transfert n'est pas explicitement un HID comme une souris ou un clavier, mais il est conforme à la spécification HID.
Par exemple, pour obtenir le nom du périphérique USB, vous appelez
.HidD_GetProductString(...)
http://msdn.microsoft.com/en-us/library /ms790920.aspx
Il y en a beaucoup plus, vous devriez absolument jeter un coup d'œil à l'exemple d'application c qui fonctionne pour toutes les versions de Windows de 2000 à Vista.
http://msdn.microsoft.com/en-us/library /dd163258.aspx
Bonne chance!
Vous devez disposer d’un câble de transfert de données USB (également appelé câble de liaison de données USB) qui support API ou SDK, utilisez le code suivant:
void CU2uDlg::OnOK()
{
BYTE buf[65530];
LPU2URET pU2uRet;
BOOL bRet;
int ret;
CString msgstr;
ret = u2u_open();
if (ret == -1){
AfxMessageBox("Open U2U device Success.");
}else{
msgstr.Format("Open U2U device fail,return:%d", ret);
AfxMessageBox(msgstr);
return;
}
//send data
bRet = u2u_SendData(buf, 65530, ret);
if(!bRet)
{
msgstr.Format("Send data error,return:%d", ret);
AfxMessageBox(msgstr);
return;
}
//receive data
while (1){
bRet = u2u_RecvData(recvData, dataLen, ret);
if( !bRet )
{
msgstr.Format("Receive data error,return:%d", ret);
AfxMessageBox(msgstr);
u2u_close();
return;
}else{
break;
}
}
u2u_close();
}
Voir: Référence1 , Référence2