Browse Source

ftdi: ft232h_mpsse_set_axbus function

Luke Dashjr 12 years ago
parent
commit
f9842992c8
2 changed files with 13 additions and 0 deletions
  1. 10 0
      ft232r.c
  2. 3 0
      ft232r.h

+ 10 - 0
ft232r.c

@@ -87,6 +87,8 @@ struct lowlevel_device_info *ft232r_devinfo_scan()
 #define FTDI_TIMEOUT  1000
 
 // http://www.ftdichip.com/Support/Documents/AppNotes/AN_108_Command_Processor_for_MPSSE_and_MCU_Host_Bus_Emulation_Modes.pdf
+#define FTDI_ADBUS_SET         0x80
+#define FTDI_ACBUS_SET         0x82
 #define FTDI_LOOPBACK_DISABLE  0x85
 #define FTDI_TCK_DIVISOR       0x86
 // Divide-by-five clock prescaler
@@ -457,6 +459,14 @@ bool ft232r_get_cbus_bits(struct ft232r_device_handle *dev, bool *out_sio0, bool
 	return true;
 }
 
+bool ft232h_mpsse_set_axbus(struct ft232r_device_handle * const ftdi, const uint8_t value, const uint8_t directions, const bool adbus)
+{
+	if (ft232r_flush(ftdi))
+		cgsleep_ms(1);
+	const uint8_t buf[] = { adbus ? FTDI_ADBUS_SET : FTDI_ACBUS_SET, value, directions };
+	return (ft232r_write(ftdi, buf, 3) == 3) && (ft232r_flush(ftdi) == 3);
+}
+
 struct lowlevel_driver lowl_ft232r = {
 	.dname = "ft232r",
 	.devinfo_scan = ft232r_devinfo_scan,

+ 3 - 0
ft232r.h

@@ -38,5 +38,8 @@ extern ssize_t ft232r_read_all(struct ft232r_device_handle *, void *data, size_t
 extern bool ft232r_get_pins(struct ft232r_device_handle *, uint8_t *pins);
 extern bool ft232r_set_cbus_bits(struct ft232r_device_handle *dev, bool sc, bool cs);
 extern bool ft232r_get_cbus_bits(struct ft232r_device_handle *dev, bool *out_sio0, bool *out_sio1);
+extern bool ft232h_mpsse_set_axbus(struct ft232r_device_handle *, uint8_t value, uint8_t directions, bool adbus);
+#define ft232h_mpsse_set_acbus(ftdi, val, dir)  ft232h_mpsse_set_axbus(ftdi, val, dir, false)
+#define ft232h_mpsse_set_adbus(ftdi, val, dir)  ft232h_mpsse_set_axbus(ftdi, val, dir, true)
 
 #endif