LibUsbDotNet
Jose Pablo <[email protected]>
| Newsgroups | gmane.comp.gnome.mono.hispano |
|---|---|
| Message-ID | <[email protected]> |
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?
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
--
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