X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Fcom%2Fftdi%2Fusb%2FFtdiUart.java;h=0990079da37307b3d1487418ced466db06de56fa;hb=9752e92536ce2e72fd2a214690743d21d644df5a;hp=a7ad5aa258e38e96a79cf0b04e57b83efc2386ed;hpb=eec5429e0e0fd0f3bcbe3dba4f4ed00b4f7db94a;p=slipway.git diff --git a/src/com/ftdi/usb/FtdiUart.java b/src/com/ftdi/usb/FtdiUart.java index a7ad5aa..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(); + private SWIGTYPE_p_ftdi_context context = FtdiUartNative.new_ftdi_context(); - public OutputStream getOutputStream() { return out; } - public InputStream getInputStream() { return in; } - - public FtdiUart(int vendor, int product, int baud) { - 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); + public FtdiUart(int vendor, int product, int baud) throws IOException { + 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). @@ -34,8 +38,9 @@ public class FtdiUart { * @param cbus_mask a four-bit mask; set bit=1 to write to a CBUS line, bit=0 to read from it * @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) { - example.ftdi_set_bitmode(context, (short)((cbus_mask << 4) | cbus_bits), (short)0x20); + public synchronized void uart_and_cbus_mode(int cbus_mask, int cbus_bits) throws IOException { + FtdiUartNative.ftdi_set_bitmode(context, (short)((cbus_mask << 4) | cbus_bits), (short)0x20); + FtdiUartNative.ftdi_setflowctrl(context, (1<<8)); } /** @@ -44,25 +49,25 @@ 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) { - example.ftdi_set_bitmode(context, (short)dbus_mask, (short)0x01); + public synchronized void dbus_mode(int dbus_mask) throws IOException { + 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() { - try { - getOutputStream().flush(); - } catch (IOException e) { - throw new RuntimeException(e); - } + 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() { - example.ftdi_usb_purge_buffers(context); + public synchronized void purge() throws IOException { + FtdiUartNative.ftdi_usb_purge_buffers(context); } private final InputStream in = new InputStream() { @@ -83,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); @@ -106,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;