libftdi Archives

Subject: ftdi_read_data returns immediately without waiting for timeout and with no data

From: mxb7642 <maxbobrov@xxxxxxxxx>
To: libftdi@xxxxxxxxxxxxxxxxxxxxxxx
Date: Sun, 17 Jun 2012 12:02:48 -0700 (PDT)
When executing an ftdi_read_data, the command always returns extremely
quickly (I've timed it and it takes 0ms when the timeout is set to 50sec)
without waiting the set timeout time and always returns 0 bytes of data. My
code is below. Why is this happening? I assume this is not the intended
functionality? Thanks! 

int main(void){ 
        bool success = false; 
        int status; 

        // Try to connect 
        status = ftdi_init(&ftdic); 
        success = (status==0); 

        if(success){ 
                status = ftdi_usb_open(&ftdic, VENDOR_ID, PRODUCT_ID); 
                success = (status==0); 
        } 

        // Set baud rate 
        if(success){ 
                status = ftdi_set_baudrate(&ftdic, 2400); 
                success = (status==0); 
        } 

        // Set bit mode to serial 
        if(success){ 
                status = ftdi_set_bitmode(&ftdic, 0xFF, BITMODE_RESET); 
                success = (status==0); 
        } 

        // Set data characteristics to 8 bits, 1 stop, no parity 
        if(success){ 
                status = ftdi_set_line_property(&ftdic, BITS_8, STOP_BIT_1,
NONE); 
                success = (status==0); 
        } 

        // Set flow control to none 
        if(success){ 
                status = ftdi_setflowctrl(&ftdic, SIO_DISABLE_FLOW_CTRL); 
                success = (status==0); 
        } 

        // Set read data chunk size 
        if(success){ 
                status = ftdi_read_data_set_chunksize(&ftdic, 2); 
                success = (status==0); 
        } 

        // Set write data chunk size 
        if(success){ 
                status = ftdi_write_data_set_chunksize(&ftdic, 4); 
                success = (status==0); 
        } 

        // Set latency timer 
        if(success){ 
                status = ftdi_set_latency_timer(&ftdic, 1); 
                success = (status==0); 
        } 

        // Set maximum packet size 
        ftdic.max_packet_size = 4; 

        // Clear Tx and Rx buffers 
        if(success){ 
                status = ftdi_usb_purge_buffers(&ftdic); 
                success = (status==0); 
        } 

        if(!success){ 
                ftdi_free(&ftdic); 
        } 

        int RxBytesRead; 
        uchar RxBuffer[2]; 
        ftdic.usb_read_timeout = 50000; 
        printf("%d\t%d\t%d\n", ftdic.usb_read_timeout,
ftdic.usb_write_timeout, ftdic.max_packet_size); 
        clock_t t1, t2, ms; 
        while(1){ 
                t1 = clock(); 
                RxBytesRead = ftdi_read_data(&ftdic, RxBuffer,
sizeof(RxBuffer)); 
                t2 = clock(); 
                ms = (t2-t1)*1000/CLOCKS_PER_SEC; 
                if(RxBytesRead==0) 
                        printf("timeout"); 
                else if(RxBytesRead<0) 
                        printf("error"); 
                else 
                        printf("%0X\t%0X", RxBuffer[0], RxBuffer[1]); 
                printf("\t%d\n", ms); 
        } 

        return success; 
} 

--
View this message in context: 
http://libftdi.141977.n3.nabble.com/ftdi-read-data-returns-immediately-without-waiting-for-timeout-and-with-no-data-tp4025001.html
Sent from the libFTDI mailing list archive at Nabble.com.

--
libftdi - see http://www.intra2net.com/en/developer/libftdi for details.
To unsubscribe send a mail to libftdi+unsubscribe@xxxxxxxxxxxxxxxxxxxxxxx   

Current Thread