libftdi Archives

Subject: Re: FT232RL Reading DMX

From: Rui Barreiros <rui.barreiros@xxxxxxxxxxxx>
To: libftdi@xxxxxxxxxxxxxxxxxxxxxxx
Date: Wed, 30 May 2012 16:09:04 +0100
Hello Thomas,

Here goes a small example

int main(int argc, char **argv)
{
  int f = 0, i = 0, tmp = 0;
  unsigned short status = 0;
  unsigned char pins;
  struct ftdi_context *ftdi;
  unsigned char buff[513];
  int VID = 0x0403;
  int PID = 0x6001;

  if ((ftdi = ftdi_new()) == 0) {
    fprintf(stderr, "ftdi_new failed\n");
    return EXIT_FAILURE;
  }

  fprintf(stdout, "Opening...\n");
  if(ftdi_usb_open_desc(ftdi, VID, PID, "USB Serial Converter", "MYSERIALNUMBER") < 0) {
    fprintf(stderr, " ftdi_usb_open failed\n");
    fprintf(stderr, "%s\n", ftdi_get_error_string(ftdi));
    exit -1;
  }

  fprintf(stdout, "Reset...\n");
  if(ftdi_usb_reset(ftdi) < 0) {
    fprintf(stderr, " ftdi_usb_reset failed\n");
    fprintf(stderr, "%s\n", ftdi_get_error_string(ftdi));
    exit -1;
  }

  fprintf(stdout, "Setting Line Properties...\n");
  //if(ftdi_set_line_property(ftdi, BITS_8, STOP_BIT_2, NONE) < 0) {
  if(ftdi_set_line_property2(ftdi, BITS_8, STOP_BIT_2, NONE, BREAK_ON) < 0) {
    fprintf(stderr, " ftdi_set_line_property failed\n");
    fprintf(stderr, "%s\n", ftdi_get_error_string(ftdi));
    exit -1;
  }
 
  fprintf(stdout, "Setting Baudrate...\n");
  if(ftdi_set_baudrate(ftdi, 250000) < 0) {
    fprintf(stderr, " ftdi_set_baudrate failed\n");
    fprintf(stderr, "%s\n", ftdi_get_error_string(ftdi));
    exit -1;
  }

  fprintf(stdout, "Setting Flow Ctrl...\n");
  if(ftdi_setflowctrl(ftdi, SIO_RESET) < 0) {
    fprintf(stderr, " ftdi_set_setflowctrl failed\n");
    fprintf(stderr, "%s\n", ftdi_get_error_string(ftdi));
    exit -1;
  }

  fprintf(stdout, "Purging Buffers...\n");
  if(ftdi_usb_purge_buffers(ftdi) < 0) {
    fprintf(stderr, " ftdi_usb_purge_buffers failed\n");
    fprintf(stderr, "%s\n", ftdi_get_error_string(ftdi));
    exit -1;
  }

  // Set Line to Read
  fprintf(stdout, "Setting RTS...\n");
  if(ftdi_setrts(ftdi, SIO_SET_RTS_HIGH) < 0) {
    fprintf(stderr, " ftdi_setrts failed\n");
    fprintf(stderr, "%s\n", ftdi_get_error_string(ftdi));
    exit -1;
  }

  while(!exitRequested) {
    ftdi_poll_modem_status(ftdi, &status);

    if(status & 0x1000) { // BREAK_INTERRUPT
      f = ftdi_read_data(ftdi, buff, sizeof(buff));
      if(f < 0)
        sleep(1);
      else if(f > 0) {
        ftdi_usb_purge_rx_buffer(ftdi);
        fprintf(stdout, "Read %d bytes\n", f);
        for(i = 0; i < sizeof(buff); i++) {
          fprintf(stdout, "%02X ", ((unsigned char *) buff)[i] );
        }
       
        fprintf(stdout, "\n");
        fflush(stdout);
      }
    } // BREAK INTERRUPT
  }

  ftdi_usb_close(ftdi);
  ftdi_free(ftdi);

  return 0;
}

Best regards,

On 05/29/2012 02:23 PM, Thomas Jarosch wrote:
Hello Rui,

On Thursday, 24. May 2012 18:26:04 Rui Barreiros wrote:
Is it possible to do this with libftdi ?! How can I ?
Can you post your ported code? Would make things easier.
Also remove any code that's not directly needed for this to work.

Thomas


--

Rui Barreiros
rui.barreiros@xxxxxxxxxxxx
Tlm: +351 962 356 020
Rua Alminhas das Cais, 950
4410-497 Serzedo VNG
Portugal
NIF: 506 107 523
Tlm: +351 968 015 215
Tlf: +351 227 625 805
Fax: +351 227 534 304
geral@xxxxxxxxxxxx




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


Current Thread