You need to initialize the ftdi context before you can open the device with it.
ftdi_init (& ftdic_context);
You also need to install the interface channel before opening the device.
Here is the function I use to configure the ftdi context
int initFTDI(struct ftdi_context * ftdic)
{
unsigned char Mask = 0x1F;
int ret=0;
fprintf(stderr,"start init\n");
ftdi_init(ftdic);
if(ftdi_set_interface(ftdic,INTERFACE_B))
fprintf(stderr,"%s\n",ftdi_get_error_string(ftdic));
if((ret = ftdi_usb_open(ftdic, VID, PID)) < 0){
fprintf(stderr, "unable to open ftdi device: %d (%s)\n", ret, ftdi_get_error_string(ftdic));
return EXIT_FAILURE;
}
if(ftdi_usb_reset(ftdic))
fprintf(stderr,"%s\n",ftdi_get_error_string(ftdic));
if(ftdi_usb_purge_buffers(ftdic))
fprintf(stderr,"%s\n",ftdi_get_error_string(ftdic));
if(ftdi_write_data_set_chunksize(ftdic,65536))
fprintf(stderr,"%s\n",ftdi_get_error_string(ftdic));
if(ftdi_read_data_set_chunksize(ftdic,4096))
fprintf(stderr,"%s\n",ftdi_get_error_string(ftdic));
if(ftdi_set_event_char(ftdic,false,0))
fprintf(stderr,"%s\n",ftdi_get_error_string(ftdic));
if(ftdi_set_error_char(ftdic,false,0))
fprintf(stderr,"%s\n",ftdi_get_error_string(ftdic));
if(ftdi_set_latency_timer(ftdic,2))
fprintf(stderr,"%s\n",ftdi_get_error_string(ftdic));
if(ftdi_set_baudrate(ftdic,921600))
fprintf(stderr,"%s\n",ftdi_get_error_string(ftdic));
if(ftdi_setflowctrl(ftdic,SIO_RTS_CTS_HS))
fprintf(stderr,"%s\n",ftdi_get_error_string(ftdic));
if ((ret = ftdi_set_bitmode( ftdic, 0x00, BITMODE_RESET )) < 0 )
{
fprintf(stderr, "can't set bitmode to %x: %d (%s)\n", BITMODE_RESET, ret, ftdi_get_error_string(ftdic));
fprintf( stderr, "RESET\n" );
return EXIT_FAILURE;
}
if ((ret = ftdi_set_bitmode( ftdic, Mask, BITMODE_BITBANG )) < 0 )
fprintf(stderr, "can't set bitmode to %x: %d (%s)\n", BITMODE_BITBANG, ret, ftdi_get_error_string(ftdic));
fprintf( stderr, "RESET\n" );
return EXIT_FAILURE;
}
return ret;
}