Fwd: LibUsbDotNet

Jose Pablo <[email protected]>
Newsgroups gmane.comp.gnome.mono.hispano
Message-ID <[email protected]>
Hola.
Parece que tienes razón respecto a que DeviceList no contiene ningún
elemento lo estraño es que no se por que no contiene nada. En otra parte del
programa llamo a mEpWriter.Write y ahi es donde se cae diciendo que no es
una instancia válida de un objeto. Estuve conversando con Eric Petit y
revisando mas a fondo la libreria y parece que el problema es interno de la
libreria en Linux por que en windows si funciona tal y como está sin hacerle
cambios. Estoy haciendo una segunda clase pero con la libreria SharpLibUSB
para ver si logro la comunicación en Linux. Lo malo de esta segunda librería
es que ya no es mantenida y no es tan robusta como LibUsbDotNet, revisando
las diferencias en SharpLibUsb se implementan TODAS las funciones de
libusb0.dll mientras que LibUsbDotNet no lo hace, pienso hacerle un
"enhanced" a LibUsbDotNet para que funcione en ambos sistemas.

Respecto a tu proyecto Pigmeo está bastante interesante se lo voy a comentar
a mi profesor por que él va a estar trabajando junto a estudiantess en un
proyecto con sistemas empotrados con MCU de varios niveles de hecho quiere
trabajar principalmente con el PIC32 y él desea realizar el proyecto con
todas las herramientas de software libre disponibles y dejar el software que
se genere con licencia GPL y de paso poner a los estudiantes de un curso de
micros a hacer librerías para el sdcc y dejarlas líbres. Si podes mandame a
mi correo [email protected] más información respecto al proyecto.
Yo veo al profesor hoy y se lo comento. Gracias

---------- Forwarded message ----------
From: Adrián Bulnes <[email protected]>
Date: 2009/1/30
Subject: Re: [Mono-hispano] LibUsbDotNet
To: Jose Pablo <[email protected]>


On Thursday 29 January 2009 04:41:21 you wrote:
> Hola a todo el mundo.
>
> He estado realizando un programa que se comunica con un PIC(MCU 18F4550) a
> través del puerto USB. Ya defini el VendorId y el ProductID
correspondiente
> al dispositivo (yo lo programe y defini el VendorId y el ProductID). He
> logrado la comunicación con el dispositivo en windows y quiero hacer lo
> mismo en Linux. Consegui el codigo de un proyecto (MonoObex) que utiliza
la
> libreria LibUsbDotNet con un ligera modificación para que funcione en
> Linux/Mono. He revisado bien el código y tengo un problema en Linux con el
> siguiente método:
>
>  public void openDevice()
>         {
>             closeDevice();
>             Console.WriteLine("Dentro del OpenDevice ejecutando
> closeDevice();");
>             mDevList = UsbGlobals.DeviceList;
>             Console.WriteLine("Dentro del OpenDevice ejecutando mDevList =
> UsbGlobals.DeviceList;");
>             foreach (UsbDevice bus in mDevList)
>             {
>                 Console.WriteLine("Vid A : {0}  vid B :
> {1}",bus.Info.IdVendor,VENDOR_ID);
>                 Console.WriteLine("PID A : {0}  PID B :
> {1}",bus.Info.IdProduct,PRODUCT_ID);
>                 Console.WriteLine("Dentro del OpenDevice ejecutando
foreach
> (UsbDevice bus in mDevList)");
>                 Console.WriteLine("Dentro del OpenDevice ejecutando
> bus.Info.IdVendor={0},
> bus.Info.IdProduct={1}",bus.Info.IdVendor,bus.Info.IdProduct);
>                 if (bus.Info.IdVendor == VENDOR_ID && bus.Info.IdProduct
==
> PRODUCT_ID)
>                 {
>                     mDev = bus;
>                     Console.WriteLine("Device: " + mDev.Info.ProductString
> + " - " + mDev.Info.ManufacturerString);
>                     mDev.Open();
>                     Debug.Assert(mDev.SetConfiguration(1) == 0);
>                     Debug.Assert(mDev.ClaimInterface(0) == 0);
>
>                     mEpReader =
> mDev.OpenBulkEndpointReader(ReadEndpoints.Ep01);
>                     mEpWriter =
> mDev.OpenBulkEndpointWriter(WriteEndpoints.Ep01);
>                     mEpReader.DataReceivedEnabled = false;
>                 }
>             }
>         }
>
> Como pueden observar imprimo en pantalla casi todas las líneas que el
> método ejecuta. Cuando corro el programa en la consola solo sale lo
> siguiente: Dentro del OpenDevice ejecutando closeDevice();
> Dentro del OpenDevice ejecutando mDevList = UsbGlobals.DeviceList;
>
> Se está saltando desde foreach (UsbDevice bus in mDevList) en adelante. No
> se que pueda ser, el dispositivo externo esta conectado y encendido. En
> windows no da el menor problema y según lo que observe del MonoObex y lo
> que converse con Eric Petit (Él escribió el MonoObex), el codigo está bien
> y deberia funcionar. Pienso que podria ser un problema del runtime de mono
> o algo que debo configurar en alguna parte y no se donde?

Tiene toda la pinta de que "UsbGlobals.DeviceList" no contiene ningún
elemento. No puedo decirte la razón ya que no sé dónde ni cómo se debe
llenar
DeviceList

> Cuando trato de ejecutar el siguiente método:
> public int Write(byte[] buf, Int32 of, Int32 size)
>         {
>             int ret = 0;
>             ret = mEpWriter.Write(buf, of, size, 2000);
>             return ret;
>         }
> En la consola tengo lo siguiente:
> Unhandled Exception: System.NullReferenceException: Object reference not
> set to an instance of an object
>   at Xcom.USBPort.Write (System.Byte[] buf, Int32 of, Int32 size)
[0x00000]
>   at Xcom.Program.PruebaUSBEbert () [0x00000]
>   at Xcom.Program.Main (System.String[] args) [0x00000]
>
> Si alguno tiene idea de por donde podria estar mi problema se los
> agradecería muchisimo.
> PD:Este es mi primer proyecto en C# utilizando Mono, tengan paciencia
> conmigo :) y gracias

Lo más probable es que el objeto "mEpWriter" sea null. Quizás se te haya
olvidado inicializarlo, o no has llamado a una función que lo inicialice
antes de llamar a Xcom.USBPort.Write().


Por cierto, como veo que usas C# y programas microcontroladores, te comento
que estoy trabajando en un proyecto que seguramente te interese. Ahora mismo
está muy verde pero espero tener versiones usables dentro de unos meses. Mi
proyecto se llama Pigmeo y la intención es poder programar
microcontroladores
en cualquier lenguaje de .NET (C#, Visual Basic .NET, C++/CLI...). Consta de
un compilador que genera el lenguaje ensamblador o código máquina, y de una
serie de librerías que permiten acceder fácillmente a los periféricos
integrados de los micros (timers, ADCs, PWM...) y también manejar
periféricos
externos (motores, displays de 7 segmentos, LCDs...). Si te interesa:
Sitio web oficial -> http://en.pigmeo.org
Sitio web de desarrollo -> http://dev.pigmeo.org
Si quieres ayudar en el desarrollo ->
http://dev.pigmeo.org/wiki/Contributing
Si quieres mantenerte al tanto de las novedades ->
https://lists.sourceforge.net/lists/listinfo/pigmeo-announce

Ojo, ahora mismo el proyecto no se puede usar para hacer casi nada, y no es
conocido porque no le estoy dando publicidad hasta que no esté más avanzado.

Un saludo



-- 
Santiago 1:5 Y si alguno de vosotros tiene falta de sabiduría, pídala a
Dios, el cual da a todos abundantemente y sin reproche, y le será dada.

_______________________________________________
Mono-hispano mailing list
[email protected]
https://listas.hispalinux.es/mailman/listinfo/mono-hispano
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.