I'm trying to talk to a USB device connected to an EasySync USB2-H-5004-M USB adapter to RS485 at a speed of 370,000 bits, but on OSX.
I have C ++ code running on Windows and I just managed to compile it on OSX (using DylX dylib instead of dll), but I have a communication problem somewhere and I'm not sure where to start and how to solve this problem.
I am using openFrameworks / C ++, and the method for displaying devices is as follows:
int FTDI::enumerateDevices(){ DWORD numDevs; FT_STATUS ftStatus = FT_CreateDeviceInfoList(&numDevs); numPortsFound = 0; if (ftStatus == FT_OK) { ofLog(OF_LOG_NOTICE, "Number of FTDI devices is %d",numDevs); devicesList = (FT_DEVICE_LIST_INFO_NODE*)malloc(sizeof(FT_DEVICE_LIST_INFO_NODE)*numDevs); ftStatus = FT_GetDeviceInfoList(devicesList, &numDevs); if (ftStatus == FT_OK) { printf("\n"); for (int i = 0; i < numDevs; i++) { ofLog(OF_LOG_VERBOSE, "Dev %d:",i); ofLog(OF_LOG_VERBOSE, " Flags=0x%x",devicesList[i].Flags); ofLog(OF_LOG_VERBOSE, " Type=0x%x",devicesList[i].Type); ofLog(OF_LOG_VERBOSE, " ID=0x%x",devicesList[i].ID); ofLog(OF_LOG_VERBOSE, " LocId=0x%x",devicesList[i].LocId); ofLog(OF_LOG_VERBOSE, " SerialNumber=%s",devicesList[i].SerialNumber); ofLog(OF_LOG_VERBOSE, " Description=%s",devicesList[i].Description); ofLog(OF_LOG_VERBOSE, " ftHandle=0x%x\n",devicesList[i].ftHandle); } numPortsFound = numDevs; } else { ofLog(OF_LOG_ERROR, "FTD2XX::FT_GetDeviceInfoList() failed"); } } else { ofLog(OF_LOG_ERROR, "FTD2XX::FT_CreateDeviceInfoList() failed"); } return numPortsFound; }
Problem in OSX I get this output:
[notice ] Number of FTDI devices is 4 [verbose] Dev 0: [verbose] Flags=0x1 [verbose] Type=0x3 [verbose] ID=0x0 [verbose] LocId=0x0 [verbose] SerialNumber= [verbose] Description= [verbose] ftHandle=0x0 [verbose] Dev 1: [verbose] Flags=0x1 [verbose] Type=0x3 [verbose] ID=0x0 [verbose] LocId=0x0 [verbose] SerialNumber= [verbose] Description= [verbose] ftHandle=0x0 [verbose] Dev 2: [verbose] Flags=0x1 [verbose] Type=0x3 [verbose] ID=0x0 [verbose] LocId=0x0 [verbose] SerialNumber= [verbose] Description= [verbose] ftHandle=0x0 [verbose] Dev 3: [verbose] Flags=0x1 [verbose] Type=0x3 [verbose] ID=0x0 [verbose] LocId=0x0 [verbose] SerialNumber= [verbose] Description= [verbose] ftHandle=0x0 [ error ] failed to register FTDI device with serial FTWVZVEBA in internal register [ error ] error opening port with serial: FTWVZVEBA
which looks wrong. For example, on Windows, on port A / channel 1 / device index 0, I see the following:
[verbose] Dev 0: [verbose] Flags=0x2 [verbose] Type=0x7 [verbose] ID=0x4036011 [verbose] LocId=0x02111 [verbose] SerialNumber=FTWVZVEBA [verbose] Description=USB2-H-5004-MA [verbose] ftHandle=0x0
A quick look at / dev things looks fine:
ls /dev/tty.* /dev/tty.Bluetooth-Incoming-Port /dev/tty.usbserial-FTWVZVEBB /dev/tty.Bluetooth-Modem /dev/tty.usbserial-FTWVZVEBC /dev/tty.usbmodemfa131 /dev/tty.usbserial-FTWVZVEBD
and through System Information I get:
USB2-H-5004-M: Product ID: 0x6011 Vendor ID: 0x0403 (Future Technology Devices International Limited) Version: 8.00 Serial Number: FTWVZVEB Speed: Up to 480 Mb/sec Manufacturer: FTDI Location ID: 0xfd120000 / 4 Current Available (mA): 500 Current Required (mA): 200
I installed the D2XX driver according to the FTDI OSX Installation Guide (pdf link) instruction, but I'm not sure what I am missing / doing wrong.
How can I correctly contact the device using the FTDI D2XX library?