Hi Ales, What I did was one device list loop (per VID/PID because I couldn't switch to the newer libftdi at the time, I hope next time I can sit on that driver the project will agree to change the dependency) which built a list of device for which an ftdi_context should be initiated.
You can have a look at the code here: https://github.com/OpenLightingProject/ola/blob/master/plugins/ftdidmx/FtdiWidget.cpp The FtdiInterface class is the final port while the FtdiWidget first builds the list iirc. HTH, Eli 2016-06-02 18:58 GMT+03:00 Ales Fiala <[email protected]>: > Eli, > > Thanks. That validates my initial assessment. > > Still, I find the API overly cumbersome in trying to do this. I basically > have to get a separate *ftdi_device_list* for each context, then discard > all the other devices and only keep the one I want to assign to that > context. There should be a way to only get the ftdi_device_list only once > and then use the devices off that list with the multiple contexts. I hope > I am explaining my concern clearly. > > Thanks again > > Ales > > > On Thu, Jun 2, 2016 at 9:33 AM, E.S. Rosenberg < > [email protected]> wrote: > >> That sounds correct, from my experience with the Open Lighting >> Architecture ftdi driver you need a separate context for each port (I >> modified it to support a 4-port single FTDI device), so devices would >> definitely need their individual context. >> >> HTH, >> Eli >> >> 2016-06-01 18:50 GMT+03:00 Ales Fiala <[email protected]>: >> >>> I am trying to understand how to open and use multiple FTDI devices in >>> the same program. >>> >>> I am using *ftdi_usb_find_all()* to enumerate the devices and then >>> *ftdi_usb_open_dev()* to open each one and identify it. Afterwards I >>> close each device. I do this part with just one ftdi_context. >>> >>> Now that I found all the devices I want to open each selected device and >>> keep it open for reading and writing. I notice that *ftdi_context* >>> contains the following: >>> >>> - libusb_device_handle >>> - readbuffer >>> - eeprom >>> >>> All this makes me believe that I need a separate *ftdi_context* for >>> each device that I want to access. Am I on the right track? >>> >>> Using the *ftdi_device_list* that I found above I want to create a new >>> context for each device and open it. >>> I tried doing >>> >>> ftdi_new(); >>> ftdi_usb_open_dev(); >>> >>> for each device using the old device list. But I get a SIGSEGV >>> somewhere in the depths of usb_open() in libusb. I am thinking it is >>> because I used a device list created with one context and now am trying to >>> open the same device using a different context. >>> >>> So how do I accomplish what I want? Any advice would be appreciated. >>> >>> Regards >>> >>> Ales Fiala >>> >>> >>> >>> ------------------------------ >>> >>> *libftdi* - see http://www.intra2net.com/en/developer/libftdi >>> <https://urldefense.proofpoint.com/v2/url?u=http-3A__www.intra2net.com_en_developer_libftdi&d=CwMFaQ&c=IGDlg0lD0b-nebmJJ0Kp8A&r=-SmqadLCYk9IMhrst02n3mD42hRmzmdi2wTAlHCAlng&m=SJ9F9dLCs0vx3I6DckAFo83KZhiPDFMjE1C9-utKTk4&s=CU0_5mo7o-iD5-jMvuQwUj8Fs3yYkpj3RFZYapJQ4RE&e=> >>> for details. >>> To unsubscribe send a mail to >>> [email protected] >>> >>> >> >> ------------------------------ >> >> *libftdi* - see http://www.intra2net.com/en/developer/libftdi >> <https://urldefense.proofpoint.com/v2/url?u=http-3A__www.intra2net.com_en_developer_libftdi&d=CwMFaQ&c=IGDlg0lD0b-nebmJJ0Kp8A&r=-SmqadLCYk9IMhrst02n3mD42hRmzmdi2wTAlHCAlng&m=SJ9F9dLCs0vx3I6DckAFo83KZhiPDFMjE1C9-utKTk4&s=CU0_5mo7o-iD5-jMvuQwUj8Fs3yYkpj3RFZYapJQ4RE&e=> >> for details. >> To unsubscribe send a mail to [email protected] >> >> > > ------------------------------ > > *libftdi* - see http://www.intra2net.com/en/developer/libftdi for details. > To unsubscribe send a mail to [email protected] > > -- libftdi - see http://www.intra2net.com/en/developer/libftdi for details. To unsubscribe send a mail to [email protected]
