Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 21 Sep 2009 18:27:52 +0200
From:      Hans Petter Selasky <hselasky@c2i.net>
To:        "Pierre-Luc Drouin" <pldrouin@pldrouin.net>, ed@freebsd.org
Cc:        freebsd-usb@freebsd.org
Subject:   Re: usb/138659: uftdi driver broken in RELENG_8/CURRENT
Message-ID:  <200909211827.53014.hselasky@c2i.net>
In-Reply-To: <4AB6DA79.7050209@pldrouin.net>
References:  <4AB6DA79.7050209@pldrouin.net>

next in thread | previous in thread | raw e-mail | index | archive | help
On Monday 21 September 2009 03:44:25 Pierre-Luc Drouin wrote:
> Hi,
>
> I am also having troubles with the uftdi driver on 8.0-BETA4.
> I am trying to use a fan controller (mCubed bigNG) that uses a FT232BL chip
> and it does not seem to be responding on FreeBSD 8.0 while the same code
> works perfectly on Linux (I have not tried the code on RELENG_7 yet but I
> could install it if necessary).
>
> Here is the very simple code I am using for testing:
> #include <termios.h>
> #include <fcntl.h>
> #include <string.h>
> #include <unistd.h>
> #include <stdio.h>
>
> int main();
>
> #define DEV "/dev/ttyU0"
>
> #define TBAN_SER_SOURCE1        0x05 /* Primary source */
> #define TBAN_SER_SOURCE2        0x06 /* Alternative source (miniNG...) */
>
> #define TBAN_SER_REQUEST        0x36
>
> int main()
> {
>   int fd;
>   int result;
>   struct termios oldtio, newtio;
>   unsigned char buf[285];
>
>   printf("Opening device\n");
>   fd=open(DEV, O_RDWR | O_NOCTTY);
>
>   if(fd<0) {
>     perror(DEV);
>     return 1;
>   }
>
>   result=tcgetattr(fd,&oldtio);
>   if(result<0) {
>     perror("tcgetattr");
>     return 1;
>   }
>
>   memcpy(&newtio,&oldtio,sizeof(struct termios));
>   newtio.c_cflag = B19200
>
>     | CRTSCTS
>     | CS8
>     | CREAD;
>
>   newtio.c_iflag     = IGNPAR;
>   newtio.c_oflag     = 0;
>   newtio.c_lflag     = 0;
>   newtio.c_cc[VMIN]  = 1;
>   newtio.c_cc[VTIME] = 0;
>
>   result=tcflush(fd, TCIFLUSH);
>   if(result<0) {
>     perror("tcflush");
>     return 1;
>   }
>
>   result=tcsetattr(fd,TCSANOW,&newtio);
>   if(result<0) {
>     perror("tcsetattr");
>     return 1;
>   }
>
>   sleep(1);
>
>   printf("Performing initial query\n");
>   buf[0]=TBAN_SER_SOURCE1;
>   buf[1]=TBAN_SER_REQUEST;
>
>   printf("Requesting status\n");
>   result=write(fd,buf,2);
>   if(result<0) {
>     perror("write");
>     return 1;
>   }
>
>   sleep(1);
>
>   printf("Reading status\n");
>   result=read(fd,buf,32);
>   if(result<0) {
>     perror("read");
>     return 1;
>   }
>
>   result=tcsetattr(fd,TCSANOW,&oldtio);
>   if(result<0) {
>     perror("tcsetattr");
>     return 1;
>   }
>
>   result=close(fd);
>   if(result<0) {
>     perror("close");
>     return 1;
>   }
>   return 0;
> }
>
> It hangs while reading independently of the number of bits I am reading.
>
> Here is the output from dmesg when I load the uftdi module:
> Sep 20 21:31:31 ldaemon kernel: uftdi0: <USB - Serial> on usbus6
> Sep 20 21:31:31 ldaemon kernel: ucom_attach_tty:317: tp =
> 0xffffff001f12b400, unit = 0 Sep 20 21:31:31 ldaemon kernel:
> ucom_attach_tty:346: ttycreate: U0 Sep 20 21:31:34 ldaemon root: Unknown
> USB device: vendor 0x051d product 0x0002 bus uhub0
>
> Here is the output in /var/log/messages when I enable the debug output for
> ucom and uftdi: Sep 20 21:33:30 ldaemon kernel: ucom_open:554: tp =
> 0xffffff001f12b400 Sep 20 21:33:30 ldaemon kernel: ucom_dtr:827: onoff = 1
> Sep 20 21:33:30 ldaemon kernel: ucom_line_state:799: on=0x01, off=0x00
> Sep 20 21:33:30 ldaemon kernel: ucom_rts:838: onoff = 1
> Sep 20 21:33:30 ldaemon kernel: ucom_line_state:799: on=0x02, off=0x00
> Sep 20 21:33:30 ldaemon kernel: ucom_break:816: onoff = 0
> Sep 20 21:33:30 ldaemon kernel: ucom_line_state:799: on=0x00, off=0x04
> Sep 20 21:33:30 ldaemon kernel: ucom_status_change:901:
> Sep 20 21:33:30 ldaemon kernel: ucom_param:950: sc = 0xffffff001f12ac58
> Sep 20 21:33:30 ldaemon kernel: uftdi_pre_param:653:
> Sep 20 21:33:30 ldaemon kernel: ucom_dtr:827: onoff = 1
> Sep 20 21:33:30 ldaemon kernel: ucom_line_state:799: on=0x01, off=0x00
> Sep 20 21:33:30 ldaemon kernel: ucom_rts:838: onoff = 1
> Sep 20 21:33:30 ldaemon kernel: ucom_line_state:799: on=0x02, off=0x00
> Sep 20 21:33:30 ldaemon kernel: ucom_cfg_open:520:
> Sep 20 21:33:30 ldaemon kernel: uftdi_cfg_open:354:
> Sep 20 21:33:30 ldaemon kernel: uftdi_read_callback:459: status change
> msr=0xf0 (0x00) lsr=0x60 (0x00) Sep 20 21:33:30 ldaemon kernel:
> ucom_status_change:901:
> Sep 20 21:33:30 ldaemon kernel: uftdi_cfg_get_status:705: msr=0xf0 lsr=0x60
> Sep 20 21:33:30 ldaemon kernel: ucom_cfg_status_change:887: DCD changed to
> 1 Sep 20 21:33:30 ldaemon kernel: uftdi_cfg_param:672:
> Sep 20 21:33:30 ldaemon kernel: ucom_ioctl:653: cmd = 0x402c7413
> Sep 20 21:33:30 ldaemon kernel: ucom_ioctl:653: cmd = 0x80047410
> Sep 20 21:33:30 ldaemon kernel: ucom_ioctl:653: cmd = 0x802c7414
> Sep 20 21:33:30 ldaemon kernel: ucom_param:950: sc = 0xffffff001f12ac58
> Sep 20 21:33:30 ldaemon kernel: uftdi_pre_param:653:
> Sep 20 21:33:30 ldaemon kernel: uftdi_cfg_get_status:705: msr=0xf0 lsr=0x60
> Sep 20 21:33:30 ldaemon kernel: uftdi_cfg_param:672:
> Sep 20 21:33:30 ldaemon kernel: ucom_get_data:1064: cnt=0
> Sep 20 21:33:31 ldaemon kernel: ucom_ioctl:653: cmd = 0x80047410
> Sep 20 21:33:32 ldaemon kernel: ucom_outwakeup:1009: sc =
> 0xffffff001f12ac58 Sep 20 21:33:32 ldaemon kernel: ucom_get_data:1064:
> cnt=2
> Sep 20 21:33:32 ldaemon kernel: ucom_get_data:1064: cnt=0
>
> I really need to get this working so I am ready to test things as much as I
> can...

Hi,

You need to set raw mode for the TTY device I think. Maybe Ed can give you the 
function name you need to call to do that?

--HPS



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200909211827.53014.hselasky>