2011-11-21 62 views
5

? He estado investigando este problema desde hace un tiempo y parece que no puedo hacerlo bien. Tengo una versión C++ del software que me gustaría hacer en Delphi, pero no puedo hacer que funcione en Delphi. Necesito algún tipo de tutorial o guía que pueda mostrarme cómo conectarme, leer y escribir datos en un dispositivo USB HID.¿Cómo puedo comunicarme con un dispositivo USB HID en Delphi

+0

Los votos cercanos probablemente signifiquen que su pregunta carece de suficientes detalles para ser directamente responsable. ¿Se supone que debemos saber por arte de magia lo que hace tu programa C++? ¿Por qué no deletrearlo? –

+1

Ojalá pudiera votar para no cerrar. Por favor no. Esta es una pregunta general justa sobre el enfoque a usar para hablar con un dispositivo poco común. Los detalles pueden venir más tarde. Yo, también quiero saber esta respuesta de alto nivel. – mj2008

Respuesta

6

Vea Jan Axelson's USB page para ejemplos. Él también ha escrito un libro. USB Complete.

Véase también Robert Marquardt's HID controller suite for Delphi.

Si está utilizando Delphi 2009 o más reciente, siga el enlace dado en la respuesta en cuestión de forma: using-hidcontroller-on-delphi-2010

+1

Me hace sonreír cada vez que veo a alguien usando el legado de Robert :) ... +1 para señalar su componente. – 0xC0000022L

+0

@STATUS_ACCESS_DENIED: +1 !!! – Remko

+0

Gracias, para este componente, hay guías sobre cómo usarlo. – Grant

3

Puede utilizar QueryDosDevice para obtener el nombre completo del dispositivo. Enumere todas las entradas antes de enchufar el dispositivo, y luego, y vea qué nueva entrada aparece en la lista. (He encontrado que la mayoría de los dispositivos HID aparecen dos veces en la lista, todavía no he encontrado el motivo). El código contendrá "USB" "VID" "PID" y un GUID.

Puede utilizar este código con CreateFile si lo antepone con '\\? \' Y utiliza este asa como puerto serie (personalmente prefiero usar THandleStream). El código podría verse así:

var 
    h:THandle; 
begin 
    h:=CreateFile(
    PChar('\\?\'+MyPortName), 
    GENERIC_WRITE or GENERIC_READ,FILE_SHARE_WRITE or FILE_SHARE_READ, 
    nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0); 
    if h=INVALID_HANDLE_VALUE then RaiseLastOSError; 
    MyPort:=THandleStream.Create(h); 
    SetCommTimeouts(h,MyFCommTimeouts); 
Cuestiones relacionadas