)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"ae102a6fab9c9285b3bac9503470129965f4afb1","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"af1ede6c_7b0c9db4","updated":"2025-11-16 15:34:39.000000000","message":"Nice to see this attempt to improve the performance of the driver.\nPersonally I would have preferred seeing the switch from libftdi to libusb before this patch (now we have to convert more libftdi APIs), but that\u0027s it!\n\nI\u0027m surprised that in this patch you anticipate the read before the write.\nWith libusb I would have put the write and then the read in a single bulk transfer, e.g. using `jtag_libusb_bulk_transfer_n()`\nBut with libftdi I don\u0027t see a way to queue in a single transfer a write and a read. So probably what you have done is the only way.\n\nBut at least we should document this inversion.\nI added a proposal for a comment in the code. Please have a look at it!","commit_id":"70bce72646aef03bc2db69fd4f0713cd9e6a3d18"},{"author":{"_account_id":1002105,"name":"N S","email":"nlshipp@yahoo.com","username":"nlshipp"},"change_message_id":"8f82b417b42b2213195e8e9d0f538f7fa8610177","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"5cdcfe58_55cbec78","in_reply_to":"af1ede6c_7b0c9db4","updated":"2026-04-28 23:24:26.000000000","message":"Thanks for the quick review. I\u0027ve added the comment. One issue with moving to directly to libusb and removing the FTDI layer is that the USB IN stream from an FTDI device to the host also includes RS232 device status information from the FTDI device itself such as DTR, Carrier Detect, etc. For full speed USB devices, it\u0027s the first two bytes of each 64 byte or smaller packet. For highspeed, bulk packet sizes can be up to 512 bytes so we\u0027d need to investigate what cadence FTDI uses in that case, detect the speed of the interface and act appropriately.","commit_id":"70bce72646aef03bc2db69fd4f0713cd9e6a3d18"}],"src/jtag/drivers/openjtag.c":[{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"ae102a6fab9c9285b3bac9503470129965f4afb1","unresolved":true,"context_lines":[{"line_number":569,"context_line":"\t\t}"},{"line_number":570,"context_line":"\t}"},{"line_number":571,"context_line":""},{"line_number":572,"context_line":"\topenjtag_start_buf_read(usb_rx_buf, rx_expected);"},{"line_number":573,"context_line":"\topenjtag_buf_write(usb_tx_buf, usb_tx_buf_offs, \u0026written);"},{"line_number":574,"context_line":"\topenjtag_buf_read(usb_rx_buf, rx_expected, \u0026usb_rx_buf_len);"},{"line_number":575,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":1,"id":"08ee5ca6_7c3dd5b1","line":572,"updated":"2025-11-16 15:34:39.000000000","message":"Please add a comment to explain the inversion, e.g.:\n```\n/*\n * Here we should run write() followed by read(). To reduce the delay\n * and improve the performance, we would like to put write and read in\n * a single bulk transfer, but libftdi does not provide such feature.\n * Queue the async read() in advance, so it will get the data as soon\n * as the write() gets completed.\n */\n```","commit_id":"70bce72646aef03bc2db69fd4f0713cd9e6a3d18"},{"author":{"_account_id":1002105,"name":"N S","email":"nlshipp@yahoo.com","username":"nlshipp"},"change_message_id":"8f82b417b42b2213195e8e9d0f538f7fa8610177","unresolved":false,"context_lines":[{"line_number":569,"context_line":"\t\t}"},{"line_number":570,"context_line":"\t}"},{"line_number":571,"context_line":""},{"line_number":572,"context_line":"\topenjtag_start_buf_read(usb_rx_buf, rx_expected);"},{"line_number":573,"context_line":"\topenjtag_buf_write(usb_tx_buf, usb_tx_buf_offs, \u0026written);"},{"line_number":574,"context_line":"\topenjtag_buf_read(usb_rx_buf, rx_expected, \u0026usb_rx_buf_len);"},{"line_number":575,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":1,"id":"fbfc2712_78651a5f","line":572,"in_reply_to":"08ee5ca6_7c3dd5b1","updated":"2026-04-28 23:24:26.000000000","message":"Done","commit_id":"70bce72646aef03bc2db69fd4f0713cd9e6a3d18"},{"author":{"_account_id":1002105,"name":"N S","email":"nlshipp@yahoo.com","username":"nlshipp"},"change_message_id":"8f82b417b42b2213195e8e9d0f538f7fa8610177","unresolved":false,"context_lines":[{"line_number":576,"context_line":"\t * Queue the async read() in advance, so it will get the data as soon"},{"line_number":577,"context_line":"\t * as the write() gets completed."},{"line_number":578,"context_line":"\t */"},{"line_number":579,"context_line":"\topenjtag_start_buf_read(usb_rx_buf, rx_expected);"},{"line_number":580,"context_line":"\topenjtag_buf_write(usb_tx_buf, usb_tx_buf_offs, \u0026written);"},{"line_number":581,"context_line":"\topenjtag_buf_read(usb_rx_buf, rx_expected, \u0026usb_rx_buf_len);"},{"line_number":582,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":3,"id":"ba085c1c_b06063e6","line":579,"updated":"2026-04-28 23:24:26.000000000","message":"Fixed an indentation issue where it wasn\u0027t using tab characters.","commit_id":"da68602783c3692c6433feaccb448e375917bbe0"}]}
