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