The TTi TF930

Thurlby Thandar's TF9301 is a fine addition to any workbench. It features a USB port, and happily TTi document the commands in the manual.2

However if you connect the TF930 to a Mac, nothing much happens. Happily the System Information system sees the device on the USB bus, but no entries are created in /dev.

FTDI

Although I'm sure there are alternatives, in practice almost all the USB-to-serial converters I've encountered use one of FTDI's chips. Happily the TF930 is no different, but sadly the TTi specific vendor and product IDs aren't supported by the stock driver.

The Internet being what it is though, it turns out that all the details of solving this problem have already been sorted out by someone else. Datafusion Systems have a fine article3 which tells you all you need to know.

In essence:

  1. Download and install the virtual COM port drivers4 from the FTDI website.
  2. Edit System/Library/Extensions/FTDIUSBSerialDriver.kext/Contents/Info.plist and add a record for the TF930. You'll need to know:
    • Vendor ID: 0x103e = 4158
    • Product ID: 0x0442 = 1090
  3. Connect the TF930 and enjoy!

A toy program

Here's a little toy program to read data from the device (you'll probably have to change the serial port):

#! /usr/bin/perl				
						
use strict;					
use warnings;					
						
use Device::SerialPort;				
use Date::Manip;				
						
my $port = "/dev/tty.usbserial-soUC8ESW";	
						
my $dev = Device::SerialPort->new($port)	
  or die "Unable to open $port, ";		
    						
$dev->databits(8);				
$dev->baudrate(115200);				
$dev->parity("none");				
$dev->stopbits(1);				
$dev->write_settings;				
						
$dev->write("*IDN?\n\r");			
$dev->write_drain;				
						
print "# Identity: ", read_packet($dev);	
						
$dev->write("E?\n\r");				
						
while(1)					
  {						
    my $data = read_packet($dev);		
    chomp $data;				
						
    my $time  = UnixDate("now", "%Y-%m-%d %H:%M:%S");
    						
    print "$time $data\n";			
  }						
						
sub read_packet					
{						
  my $dev = shift;				
						
  while(1)					
    {						
      my ($n, $string) = $dev->read(255);	
      return $string if $n;			
						
      sleep 1;					
    }						
}						

If you run it, you'll see something like this:

# Identity: Thurlby-Thandar,TF930,0,V1.20
2012-02-19 21:06:33 0000000000.e+0
2012-02-19 21:06:34 0000000000.e+0
2012-02-19 21:06:35 0000000000.e+0
2012-02-19 21:06:36 0000000000.e+0

Linux

Unsurprisingly you can do something similar on Linux. The relevant crib sheet is the documentation for the ftdi-usb-sio driver.5

I think the approved solution is to simply add the device IDs to the driver and recompile, but you can hack things when you load the driver. This worked for me:

sudo modprobe ftdi_sio vendor=0x103e product=0x0442 debug