a comment would have been nice.
*/
+#if BUILD_FT2232_FTD2XX == 1
+#define FT2232_BUFFER_READ_QUEUE_SIZE (64*64)
+#else
+#define FT2232_BUFFER_READ_QUEUE_SIZE (64*4)
+#endif
+
#define FT2232_BUFFER_SIZE 131072
static uint8_t* ft2232_buffer = NULL;
{
#if BUILD_FT2232_FTD2XX == 1
FT_STATUS status;
- DWORD dw_bytes_written;
+ DWORD dw_bytes_written = 0;
if ((status = FT_Write(ftdih, buf, size, &dw_bytes_written)) != FT_OK)
{
*bytes_written = dw_bytes_written;
while (cmd)
{
+ /* fill the write buffer with the desired command */
if (ft2232_execute_command(cmd) != ERROR_OK)
retval = ERROR_JTAG_QUEUE_FAILED;
- /* Start reading input before FT2232 TX buffer fills up */
+ /* Start reading input before FT2232 TX buffer fills up.
+ * Sometimes this happens because we don't know the
+ * length of the last command before we execute it. So
+ * we simple inform the user.
+ */
cmd = cmd->next;
- if (ft2232_expect_read > 256)
+
+ if (ft2232_expect_read >= FT2232_BUFFER_READ_QUEUE_SIZE )
{
+ if (ft2232_expect_read > (FT2232_BUFFER_READ_QUEUE_SIZE+1) )
+ LOG_WARNING("read buffer size looks to high");
if (ft2232_send_and_recv(first_unsent, cmd) != ERROR_OK)
retval = ERROR_JTAG_QUEUE_FAILED;
first_unsent = cmd;