public boolean SetConfig( int index, int baud, byte dataBits, byte stopBits, byte parity, byte flowControl) { FT_Device ftDev; switch (index) { case 0: ftDev = ft_device_0; break; case 1: ftDev = ft_device_1; break; default: ftDev = ft_device_0; break; } if (ftDev.isOpen() == false) { Log.e(">>@@", "SetConfig: ftDev not open!!!!!! index:" + index); } else { Log.e(">>@@", "SetConfig: ftDev open, index:" + index); /* Log.e(">>@@", "port isn:" + ftDev.deviceInfoNode.iSerialNumber + " bcd:" + ftDev.deviceInfoNode.bcdDevice + " id:" + ftDev.deviceInfoNode.id + " loc:" + ftDev.deviceInfoNode.location + " sn:" + ftDev.deviceInfoNode.serialNumber); */ } // open our first device // ftdid2xx.openByIndex(0); // configure our port // reset to UART mode for 232 devices ftDev.setBitMode((byte) 0, D2xxManager.FT_BITMODE_RESET); // set 230400 baud rate // ftdid2xx.setBaudRate(9600 ); ftDev.setBaudRate(baud); // set 8 data bits, 1 stop bit, no parity // ftdid2xx.setDataCharacteristics(D2xx.FT_DATA_BITS_8, // D2xx.FT_STOP_BITS_1, D2xx.FT_PARITY_NONE); switch (dataBits) { case 7: dataBits = D2xxManager.FT_DATA_BITS_7; break; case 8: dataBits = D2xxManager.FT_DATA_BITS_8; break; default: dataBits = D2xxManager.FT_DATA_BITS_8; break; } switch (stopBits) { case 1: stopBits = D2xxManager.FT_STOP_BITS_1; break; case 2: stopBits = D2xxManager.FT_STOP_BITS_2; break; default: stopBits = D2xxManager.FT_STOP_BITS_1; break; } switch (parity) { case 0: parity = D2xxManager.FT_PARITY_NONE; break; case 1: parity = D2xxManager.FT_PARITY_ODD; break; case 2: parity = D2xxManager.FT_PARITY_EVEN; break; case 3: parity = D2xxManager.FT_PARITY_MARK; break; case 4: parity = D2xxManager.FT_PARITY_SPACE; break; default: parity = D2xxManager.FT_PARITY_NONE; break; } ftDev.setDataCharacteristics(dataBits, stopBits, parity); // set RTS/CTS flow control // ftdid2xx.setFlowControl(D2xx.FT_FLOW_RTS_CTS, (byte)0x00, // (byte)0x00); // ftdid2xx.setFlowControl(D2xx.FT_FLOW_NONE, (byte)0x00, (byte)0x00); short flowCtrlSetting; switch (flowControl) { case 0: flowCtrlSetting = D2xxManager.FT_FLOW_NONE; break; case 1: flowCtrlSetting = D2xxManager.FT_FLOW_RTS_CTS; break; case 2: flowCtrlSetting = D2xxManager.FT_FLOW_DTR_DSR; break; case 3: flowCtrlSetting = D2xxManager.FT_FLOW_XON_XOFF; break; default: flowCtrlSetting = D2xxManager.FT_FLOW_NONE; break; } // TODO : check xon, xoff // TODO : check xon, xoff ftDev.setFlowControl(flowCtrlSetting, (byte) 0x00, (byte) 0x00); switch (index) { case 0: uart_configured_0 = true; Toast.makeText(DeviceFT2232HTestContext, "Port 0 config done", Toast.LENGTH_SHORT).show(); break; case 1: uart_configured_1 = true; Toast.makeText(DeviceFT2232HTestContext, "Port 1 config done", Toast.LENGTH_SHORT).show(); break; default: ftDev = ft_device_0; break; } Log.e( ">>@@", "SCon[" + index + "] 0:0x" + Integer.toHexString(ft_device_0.getModemStatus()) + " 1:0x" + Integer.toHexString(ft_device_1.getModemStatus()) /*+ " 2:0x" + Integer.toHexString(ft_device_2.getModemStatus())*/ ); return true; }