Autor Tema: Delphi+GTPUSBPLUS+USB  (Leído 10583 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Delphi+GTPUSBPLUS+USB
« en: 31 de Octubre de 2008, 22:23:20 »
Estoy intentando detectar el GTP USB PLUS (le estoy utilizando para pruebas de conexión) y no me lo detecta, el programa es:

unit UsbTest;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, UsbApi, StdCtrls, Buttons;

Const
    vid_pid  : PCHAR  = 'Vid_04d8&Pid_ffa2'+#0;

type
  TForm1 = class(TForm)
    BitBtn1: TBitBtn;
    procedure BitBtn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  ShowMessage(IntToStr(MPUSBGetDeviceCount('VID_04D8&PID_FFA2')));
  ShowMessage(IntToStr(MPUSBGetDeviceCount('Vid_04d8&Pid_ffa2')));
  ShowMessage(IntToStr(MPUSBGetDeviceCount('vid_04d8&pid_ffa2')));
  ShowMessage(IntToStr(MPUSBGetDeviceCount(vid_pid)));
end;

end.

¿Que hago mal?

Un saludo
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Delphi+GTPUSBPLUS+USB
« Respuesta #1 en: 01 de Noviembre de 2008, 00:00:21 »
Bueno ya tengo localizado el problema. Todo proviene de que cada librería mpusbapi.dll es propia de cada fabricante de tal forma que en su interior puede llevar su propio GUID, con lo que el GUID de Microchip no coincide con el GUID del GtpUsb+ y por lo tanto no sirven las librerías de unos para otros. Si se pone el GUID de Microchip se ha de utilizar su librería. No se si existe una razón para para que esto sea así y no utilizar una versión de librería que permita cualquier GUID. Aquí pongo el trozo de la librería donde esta definido el problema:

GUID guid = GUID_DEVINTERFACE_MCHPUSB;

    /* Modify DevicePath to use registry format */
    pDevicePath[0] = '#';
    pDevicePath[1] = '#';
    pDevicePath[3] = '#';

    /* Form SubKey */
    wsprintf(lpSubKey,
    "SYSTEM\\CURRENTCONTROLSET\\CONTROL\\DEVICECLASSES\\{%4.2x-%2.2x-%2.2x-%.2x%.2x-%.2x%.2x%.2x%.2x%.2x%.2x}\\%s",
    guid.Data1,guid.Data2,guid.Data3,guid.Data4[0],guid.Data4[1],guid.Data4[2],
    guid.Data4[3],guid.Data4[4],guid.Data4[5],guid.Data4[6],guid.Data4[7],pDevicePath);


Un saludo
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5490
    • Electrónica Didacta
Re: Delphi+GTPUSBPLUS+USB
« Respuesta #2 en: 01 de Noviembre de 2008, 14:44:12 »
muy pero muy interesante amigo Jesús, ¿pero donde está GUID_DEVINTERFACE_MCHPUSB? no lo consigo

La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Delphi+GTPUSBPLUS+USB
« Respuesta #3 en: 01 de Noviembre de 2008, 14:51:42 »
Este valor esta en el fichero de cabecera _mpusbapi.h (o debería de estar), pero yo no tengo dicho fichero. Buscando el valor del GUID_DEVINTERFACE_MCHPUSB en google obtuve el valor que es:

5354FA28-6D14-4E35-A1F5-75BB54E6030F

En esta página de Microchip podemos ver como transferir información por el USB sin llamar a las librerías:

http://forum.microchip.com/printable.aspx?m=136407

Un saludo
« Última modificación: 01 de Noviembre de 2008, 14:56:08 por jfh900 »
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5490
    • Electrónica Didacta
Re: Delphi+GTPUSBPLUS+USB
« Respuesta #4 en: 01 de Noviembre de 2008, 15:17:23 »
Es que es bien extraño que no la tenga (a mi me compila bien el fuente)

Yo creo que no la deberia tener, es más, la intuición me dice que el valor del classguid no es único (sino para que se toman molestias en declarar variables)

Estoy viendo una segmento de código en _mpusbapi.ccp

Código: C
  1. ...
  2. if(!SetupDiEnumDeviceInterfaces(info,
  3.                                     NULL,
  4.                                     (LPGUID)&GUID_DEVINTERFACE_MCHPUSB,
  5.                                     instance,
  6.                                     &intf_data))
  7. ...

no he averiguado aún de que se trata, pero debe haber alguna relación en GUID_DEVINTERFACE_MCHPUSB y el classguid que aparece en mchpusb.inf

La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Delphi+GTPUSBPLUS+USB
« Respuesta #5 en: 01 de Noviembre de 2008, 15:35:23 »
Yo la referencia la he encontrado en este otro archivo que adjunto (ioctl.h):


///////////////////////////////////////////////////////////////////////////////
// Interface GUID for Microchip PIC18F4550 family driver

// {5354FA28-6D14-4E35-A1F5-75BB54E6030F}
DEFINE_GUID(GUID_DEVINTERFACE_MCHPUSB, 0x5354fa28L, 0x6d14, 0x4e35, 0xa1, 0xf5, 0x75, 0xbb, 0x54, 0xe6, 0x03, 0x0f);

// Suffix strings for forming device names. Take the "device detail" path string
// returned by a SetupDiXxx enumeration and add on one of these, followed by
// a zero-based DECIMAL integer denoting the endpoint address. Use the resulting
// name string as the first argument in a call to CreateFile. Application
// code should use constructs like this to specify names in either Unicode or
// ANSI format: _T(MCHPUSB_PIPE_NAME). Driver code can use TEXT(MCHPUSB_PIPE_NAME), etc.
// For interrupt endpoints, using the "ASYNC" suffix means that you must use
// IOCTL_MCHPUPSB_WAIT_INTERRUPT to read input from the pipe. Using the EP
// suffix means you must use ReadFile or WriteFile, as appropriate to the endpoint's
// directionality.

#define MCHPUSB_PIPE_NAME         "\\MCHP_EP"
#define MCHPUSB_ASYNC_PIPE_SUFFIX   "_ASYNC"

///////////////////////////////////////////////////////////////////////////////
//   IOCTL definitions.
//
//   Note that "input" and "output" refer to the parameter designations in calls to
//   DeviceIoControl, which are the opposite of common sense from the perspective of
//   an application making the calls.
//
//   IOCTL_MCHPUSB_GET_VERSION -- get driver revision level
//   Input:
//      None
//   Output:
//      32-bit revision level MMMMmmmm


Un saludo
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5490
    • Electrónica Didacta
Re: Delphi+GTPUSBPLUS+USB
« Respuesta #6 en: 04 de Noviembre de 2008, 14:20:09 »
Hola

Según lo que he investigado, ese classguid se usa cuando se trabaja directamente con la dll, es decir, sin instalar ningún driver


2. Interface your Windows® application directly to the driver. In this case, you must include the Ioctls.h file to your source project. This method provides greater flexibility and control, but is also more complicated. Example source code of how to interface directly with the driver can be found in the MPUSBAPI.dll source code which can be found in the “<Install Directory>\USB Tools\MCHPUSB Custom Driver” folder.




si vas a usar directamente la dll, entonces se usa ioctls.h


La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Delphi+GTPUSBPLUS+USB
« Respuesta #7 en: 04 de Noviembre de 2008, 14:35:33 »
Hola Palitroquez.

No será al revés, se actúa directamente sobre el driver, en cuyo caso hay que utilizar el ioctl.h y como ejemplo de manejo del driver está la librería mpusbapi.dll. Como esta librería es la que interactua con el driver se asegura a través del GUID que la librería enlaza con su driver correcto.

Un saludo
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5490
    • Electrónica Didacta
Re: Delphi+GTPUSBPLUS+USB
« Respuesta #8 en: 04 de Noviembre de 2008, 14:57:11 »
ah! no se   :5}

en la cita cuando ellos dicen driver, pensaba que se referian a  mchpusb.sys, mchpusb64.sys

por lo que tengo entendido, cuando se trabaja en esos lenguajes (c++, delphi) se puede incluir el código fuente de mpusbapi.dll en el proyecto para no tener que llamar una dll externa

ahora tengo la duda  :shock:

La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Delphi+GTPUSBPLUS+USB
« Respuesta #9 en: 04 de Noviembre de 2008, 22:58:38 »
Eso es lo que yo digo. El driver es mchpusb.sys y la librería es mpusbapi.dll, tu decías:

Según lo que he investigado, ese classguid se usa cuando se trabaja directamente con la dll, es decir, sin instalar ningún driver

Que es justamente lo contrario: usar dll sin driver, cuando lo correcto es decir usar driver sin usar dll.

Un saludo
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5490
    • Electrónica Didacta
Re: Delphi+GTPUSBPLUS+USB
« Respuesta #10 en: 06 de Noviembre de 2008, 12:36:44 »
Entonces quiere decir que solo hay que tener cuidado cuando se use el driver directamente, porque en caso contrario ese guid (5354FA28-6D14-4E35-A1F5-75BB54E6030F), es indispensable.

La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Delphi+GTPUSBPLUS+USB
« Respuesta #11 en: 06 de Noviembre de 2008, 13:35:59 »
Efectivamente ese es el quid de la cuestión ya que la dll debe de estar en consonancia con el driver.

Un saludo
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado Geo

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 922
    • Mexchip
Re: Delphi+GTPUSBPLUS+USB
« Respuesta #12 en: 04 de Diciembre de 2008, 20:40:01 »
Jaja, perdonen la intromisión, pero me gustaría entender de qué están hablando :P.

¿Se necesita un GUID? Según recuerdo haber leído en la documentación de Microsoft algunas funciones para conectarse con dispositivos necesitan un identificador, yo sólo lo he usado con WinUSB, haciendo a un lado la MCHPUSB.

En cuanto a lo de no conectarse con las librerías, en realidad sería usar las que el sistema operativo tiene implementado, por ejemplo, WinUSB en el caso de Windows Vista.
La imaginación es el límite.
Visita mi blog, en inglés o en español :).
Mini curso de introducción a VHDL en MEXCHIP :-/

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5490
    • Electrónica Didacta
Re: Delphi+GTPUSBPLUS+USB
« Respuesta #13 en: 05 de Diciembre de 2008, 13:23:15 »
eso tiene que ver con la forma en que guindos maneja los dispositivos y demases, asignando un GUID, lo que Jesús y yo estabamos hablando era el GUID que usa microchip de acuerdo a como se vaya a manejar al driver en la programación.

enlaces relacionados al guid:

http://es.wikipedia.org/wiki/Globally_Unique_Identifier

http://msdn.microsoft.com/es-es/library/system.guid(VS.80).aspx

La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado Geo

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 922
    • Mexchip
Re: Delphi+GTPUSBPLUS+USB
« Respuesta #14 en: 06 de Diciembre de 2008, 18:10:04 »
eso tiene que ver con la forma en que guindos maneja los dispositivos y demases, asignando un GUID, lo que Jesús y yo estabamos hablando era el GUID que usa microchip de acuerdo a como se vaya a manejar al driver en la programación.
Aah, ok :).
La imaginación es el límite.
Visita mi blog, en inglés o en español :).
Mini curso de introducción a VHDL en MEXCHIP :-/