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
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.