Page 1 of 1

Placa USB HID programar

PostPosted: Wed Nov 09, 2016 6:06 pm
by softruz
Muy buenas foro, me pongo en contacto con ustedes porque acabo de comprar una placa por USB que cambia de color un LED, y no sé como programarla, os digo, lo unico que me han pasado es tenemos que programarla por el HID y me han dado los datos VendorID, ProductID, BufferInSize y BufferOutSize, tambien me han dicho para que cambiar los estados del LED hay que mandar:

Bytes 1 a 3 = 0xF1 = Encender led verde
Bytes 1 a 3 = 0xF2 = Encender led ámbar

Bytes 1 a 3 = 0xA1 = Apagar led verde
Bytes 1 a 3 = 0xA2 = Apagar led ambar

¿alquien sabe como por lo menos conectar con el HID?

Gracias.

Re: Placa USB HID programar

PostPosted: Thu Nov 10, 2016 8:29 am
by Antonio Linares

Re: Placa USB HID programar

PostPosted: Thu Nov 10, 2016 10:43 am
by softruz
Muchas gracias Antonio, ya busque pero lo que encuentro no me dice como conectar, lo que necesito es si alguien del foro ha tenido que tratar este tema, para ver algo de código en nuestro gran lenguaje.

Gracias.

Re: Placa USB HID programar

PostPosted: Thu Nov 17, 2016 10:28 am
by softruz
Muy buenas grupo, ya he conseguido conectar con HID USB y tambíen conseguir el Handle del Dispositivo USB, pero tengo un gran problema no se como desarrrollar la funcion de escritir, os dejo lo que he desarrollado para ver si alguien sabría como puedo enviar datos a este dispositivo USB

Los datos de configuración de l HID USB Son

VendorID = 9957
ProductID = 101
BufferInSize = 64 bytes
BufferOutSize = 64 bytes


Lo que no comprendo es cuando en C se pasa un parametro como BYTE, como lo tengo que recoger y tratarlo en C.
Las Funciones Connect y GetHandle funcionan, pero la WriteEx NO

Código Fuente


function Test()
local BufferInSize:=64
local BufferOutSize:=64
local BufferIn:=array(BufferInSize)
local BufferOut:=array(BufferOutSize),i:=0


for i:=1 to len(BufferOut)
if i=4
BufferOut[i]:=241
else
BufferOut[i]:=0
end if
next
if MYHIDCONNECT(n)
if MYHIDGETHANDLE(9957,101)<>0
for i:=1 to len(BufferOut)
msginfo(MYWRITEEX(9957,101,BufferOut[i]))
next

else
msginfo("ERROR. No hay conexion con el USB")
end if
else
msginfo("Error. No hay conexion con HID USB Windows.")
end IF
return


¿Que puede hacer?

#pragma BEGINDUMP

#include <hbapi.h>
#include <windows.h>

// Funcion Para Conectar el Dispositivo
BOOL WINAPI Connect( int pHostWin );
HB_FUNC( MYHIDCONNECT )
{
INT pHostWin;
BOOL lReturn;

pHostWin = hb_parni(1);
lReturn = Connect(pHostWin);
hb_retl(lReturn);
}


LONG WINAPI GetHandle( int pVendoID,int pProductID);
HB_FUNC( MYHIDGETHANDLE )
{
INT pVendoID;
INT pProductID;
LONG lReturn;

pVendoID = hb_parni(1);
pProductID = hb_parni(2);
lReturn = GetHandle(pVendoID,pProductID);
hb_retnl(lReturn);
}

BOOL WINAPI WriteEx(int pVendorID,int pProductID,BYTE pData );
HB_FUNC( MYWRITEEX )
{
INT pVendorID;
INT pProductID;
BYTE pData;
BOOL lReturn;

pVendorID = hb_parni(1);
pProductID = hb_parni(2);
pData = hb_parni(3);
lReturn = WriteEx(pVendorID,pProductID,pData);
hb_retl(lReturn);
}


#pragma ENDDUMP



DLL32 function Connect(pHostWin as LONG) AS BOOL PASCAL FROM "Connect" LIB "mcHID.dll"
DLL32 function GetHandle(pVendoID as LONG,pProductID as LONG) As LONG PASCAL FROM "GetHandle" LIB "mcHID.dll"
DLL32 function WriteEx(pVendoID as LONG,pProductID as LONG,pData as BYTE) AS BOOL PASCAL FROM "WriteEx" LIB "mcHID.dll"

Re: Placa USB HID programar

PostPosted: Thu Nov 17, 2016 10:46 am
by Antonio Linares
Prueba a cambiarla asi:

Code: Select all  Expand view
HB_FUNC( MYWRITEEX )
{
   hb_retl( WriteEx( hb_parnl( 1 ), hb_parnl( 2 ), hb_parnl( 3 ) ) );
}

Re: Placa USB HID programar

PostPosted: Thu Nov 17, 2016 1:17 pm
by softruz
Tambien probado y me retorna .f.

¿sabeis que puede ser?

Re: Placa USB HID programar

PostPosted: Thu Nov 17, 2016 6:45 pm
by Antonio Linares
En tu código usas un bucle para llamar a MYWRITEEX() sin embargo en el ejemplo que te copié no lo hacen asi, sino que generan una cadena
y se le envía entera llamando una sola vez a MYWRITEEX()

Re: Placa USB HID programar

PostPosted: Thu Nov 17, 2016 6:50 pm
by Antonio Linares
En realidad esta función debe ser así:

BOOL WINAPI WriteEx(int pVendorID,int pProductID, unsigned char * pData );

Code: Select all  Expand view
HB_FUNC( MYWRITEEX )
{
   hb_retl( WriteEx( hb_parnl( 1 ), hb_parnl( 2 ), hb_parc( 3 ) ) );
}

Re: Placa USB HID programar

PostPosted: Thu Nov 17, 2016 6:53 pm
by Antonio Linares
Una única llamada a esta función así:

MYWRITEEX( 9957, 101, Chr( 0 ) + Chr( Asc( "P" ) ) + Chr( Asc( "=" ) ) + Chr( nValorAEnviar ) + Chr( Asc( "T" ) ) )

Re: Placa USB HID programar

PostPosted: Fri Nov 18, 2016 8:17 am
by softruz
Muchas gracias, lo del bucle lo utilizé por que no funcionaba y dije de probar así, voy a probar lo que me dices y te comento.

Muchas Gracias Antonio por tu tiempo

Re: Placa USB HID programar

PostPosted: Fri Nov 18, 2016 12:17 pm
by softruz
Conseguido, muchas gracias Antonio, ya puedo conectar y enviarle datos al USB.

Gracias

Re: Placa USB HID programar

PostPosted: Fri Nov 18, 2016 5:37 pm
by Antonio Linares
muy bien :-)