X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Fcom%2Fftdi%2Fusb%2FFtdiUart.java;h=0990079da37307b3d1487418ced466db06de56fa;hb=9752e92536ce2e72fd2a214690743d21d644df5a;hp=c897b4ec2f711733b0886d9113f4361167abf8a7;hpb=423974291c90fbba82ed586499e01c774ee96ae0;p=slipway.git diff --git a/src/com/ftdi/usb/FtdiUart.java b/src/com/ftdi/usb/FtdiUart.java index c897b4e..0990079 100644 --- a/src/com/ftdi/usb/FtdiUart.java +++ b/src/com/ftdi/usb/FtdiUart.java @@ -12,20 +12,24 @@ import java.io.*; */ public class FtdiUart { - private SWIGTYPE_p_ftdi_context context = example.new_ftdi_context(); - - public OutputStream getOutputStream() { return out; } - public InputStream getInputStream() { return in; } + private SWIGTYPE_p_ftdi_context context = FtdiUartNative.new_ftdi_context(); public FtdiUart(int vendor, int product, int baud) throws IOException { - example.ftdi_init(context); - example.ftdi_usb_open(context, vendor, product); - example.ftdi_usb_reset(context); - example.ftdi_set_baudrate(context, baud); - example.ftdi_set_line_property(context, 8, 0, 0); + FtdiUartNative.ftdi_init(context); + FtdiUartNative.ftdi_usb_open(context, vendor, product); + FtdiUartNative.ftdi_usb_reset(context); + FtdiUartNative.ftdi_set_baudrate(context, baud); + FtdiUartNative.ftdi_set_line_property(context, 8, 0, 0); + FtdiUartNative.ftdi_setflowctrl(context, (1<<8)); purge(); } + /** the output stream to the uart or dbus pins (depending on mode) */ + public OutputStream getOutputStream() { return out; } + + /** the input stream from the uart or dbus pins (depending on mode) */ + public InputStream getInputStream() { return in; } + /** * Switch to uart mode, with read/write access to four CBUS lines. * This function is used to write to the CBUS lines (re-invoke it to change their state). @@ -35,7 +39,8 @@ public class FtdiUart { * @param cbus_bits a four-bit mask; the bits to assert on the write-enabled CBUS lines */ public synchronized void uart_and_cbus_mode(int cbus_mask, int cbus_bits) throws IOException { - example.ftdi_set_bitmode(context, (short)((cbus_mask << 4) | cbus_bits), (short)0x20); + FtdiUartNative.ftdi_set_bitmode(context, (short)((cbus_mask << 4) | cbus_bits), (short)0x20); + FtdiUartNative.ftdi_setflowctrl(context, (1<<8)); } /** @@ -45,20 +50,24 @@ public class FtdiUart { * @param dbus_mask an eight-bit mask; set bit=1 to write to a DBUS line, bit=0 to read from it */ public synchronized void dbus_mode(int dbus_mask) throws IOException { - example.ftdi_set_bitmode(context, (short)dbus_mask, (short)0x01); + FtdiUartNative.ftdi_set_bitmode(context, (short)dbus_mask, (short)0x01); + } + + public synchronized void setBitRate(int bitRate) throws IOException { + FtdiUartNative.ftdi_set_baudrate(context, bitRate); } /** returns the instantaneous value present on the DBUS pins */ public synchronized int readPins() throws IOException { getOutputStream().flush(); byte[] b = new byte[1]; - example.ftdi_read_pins(context, b); + FtdiUartNative.ftdi_read_pins(context, b); return b[0]; } /** purge the on-chip buffers */ public synchronized void purge() throws IOException { - example.ftdi_usb_purge_buffers(context); + FtdiUartNative.ftdi_usb_purge_buffers(context); } private final InputStream in = new InputStream() { @@ -79,7 +88,7 @@ public class FtdiUart { if (len==0) return 0; byte[] b0 = new byte[len]; synchronized(FtdiUart.this) { - result = example.ftdi_read_data(context, b0, len); + result = FtdiUartNative.ftdi_read_data(context, b0, len); } if (result>0) { System.arraycopy(b0, 0, b, off, result); @@ -102,7 +111,7 @@ public class FtdiUart { System.arraycopy(b, off, b2, 0, Math.min(b2.length, len)); int result; synchronized(FtdiUart.this) { - result = example.ftdi_write_data(context, b2, Math.min(b2.length, len)); + result = FtdiUartNative.ftdi_write_data(context, b2, Math.min(b2.length, len)); } off += result; len -= result;