)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"9ac0888920fd2bfed54bb21ede80f1522eb95f64","unresolved":true,"context_lines":[{"line_number":15,"context_line":"The driver implements:"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"  - Full DebugServer init sequence: selfreg setup, operational clock,"},{"line_number":18,"context_line":"    5-wire -\u003e 2-wire -\u003e 5-wire mode toggle (effective TAP reset)."},{"line_number":19,"context_line":"  - JTAG_SCAN via the probe\u0027s single-entry batch opcode with IR caching"},{"line_number":20,"context_line":"    across execute_queue boundaries; end-of-queue flush populates the"},{"line_number":21,"context_line":"    IR scan\u0027s in_value with hardware-captured Capture-IR data."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"19b5a28a_ef10d020","line":18,"updated":"2026-04-24 02:29:17.000000000","message":"What is this 2-wire mode?\nDoes Bouffalo give it a name? cJTAG?","commit_id":"e37057465e6fe31036447986ec47cbf28db35684"},{"author":{"_account_id":1002512,"name":"will-tm","email":"william.markezana@gmail.com","username":"will-tm"},"change_message_id":"4d184841fe9db6548b55d6a2177e60399ec5669c","unresolved":true,"context_lines":[{"line_number":15,"context_line":"The driver implements:"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"  - Full DebugServer init sequence: selfreg setup, operational clock,"},{"line_number":18,"context_line":"    5-wire -\u003e 2-wire -\u003e 5-wire mode toggle (effective TAP reset)."},{"line_number":19,"context_line":"  - JTAG_SCAN via the probe\u0027s single-entry batch opcode with IR caching"},{"line_number":20,"context_line":"    across execute_queue boundaries; end-of-queue flush populates the"},{"line_number":21,"context_line":"    IR scan\u0027s in_value with hardware-captured Capture-IR data."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"87d7e247_3191a6ac","line":18,"in_reply_to":"19b5a28a_ef10d020","updated":"2026-04-27 15:34:52.000000000","message":"not explicitly it\u0027s basically cJTAG yes","commit_id":"e37057465e6fe31036447986ec47cbf28db35684"},{"author":{"_account_id":1002512,"name":"will-tm","email":"william.markezana@gmail.com","username":"will-tm"},"change_message_id":"f391529faacd8ac61d392ea86ef3048394df6f86","unresolved":false,"context_lines":[{"line_number":15,"context_line":"The driver implements:"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"  - Full DebugServer init sequence: selfreg setup, operational clock,"},{"line_number":18,"context_line":"    5-wire -\u003e 2-wire -\u003e 5-wire mode toggle (effective TAP reset)."},{"line_number":19,"context_line":"  - JTAG_SCAN via the probe\u0027s single-entry batch opcode with IR caching"},{"line_number":20,"context_line":"    across execute_queue boundaries; end-of-queue flush populates the"},{"line_number":21,"context_line":"    IR scan\u0027s in_value with hardware-captured Capture-IR data."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"a3454e0b_f0d4d3d9","line":18,"in_reply_to":"650edb0b_961a1165","updated":"2026-05-02 15:59:28.000000000","message":"Done","commit_id":"e37057465e6fe31036447986ec47cbf28db35684"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"66b9f0ebb65b2f84fb2316d96ef5c15ad0e1dd68","unresolved":true,"context_lines":[{"line_number":15,"context_line":"The driver implements:"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"  - Full DebugServer init sequence: selfreg setup, operational clock,"},{"line_number":18,"context_line":"    5-wire -\u003e 2-wire -\u003e 5-wire mode toggle (effective TAP reset)."},{"line_number":19,"context_line":"  - JTAG_SCAN via the probe\u0027s single-entry batch opcode with IR caching"},{"line_number":20,"context_line":"    across execute_queue boundaries; end-of-queue flush populates the"},{"line_number":21,"context_line":"    IR scan\u0027s in_value with hardware-captured Capture-IR data."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"e36fe0ce_5ee33730","line":18,"in_reply_to":"87d7e247_3191a6ac","updated":"2026-04-28 12:53:44.000000000","message":"So this CK-Link is able to support cJTAG. Interesting... I will try to extend OpenOCD to drive natively cJTAG. Today there is a dirty hack done on FTDI adapter driver, but cannot be extended easily to the other adapters.\nDo you know why you need to pass through JTAG -\u003e cJTAG -\u003e JTAG during the init sequence? Is it just copy/paste from the behavior you have seen in the reverse engineering?","commit_id":"e37057465e6fe31036447986ec47cbf28db35684"},{"author":{"_account_id":1002512,"name":"will-tm","email":"william.markezana@gmail.com","username":"will-tm"},"change_message_id":"9a7ed3b6aa1d09fa8fb398ec79fc87b091060d5e","unresolved":true,"context_lines":[{"line_number":15,"context_line":"The driver implements:"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"  - Full DebugServer init sequence: selfreg setup, operational clock,"},{"line_number":18,"context_line":"    5-wire -\u003e 2-wire -\u003e 5-wire mode toggle (effective TAP reset)."},{"line_number":19,"context_line":"  - JTAG_SCAN via the probe\u0027s single-entry batch opcode with IR caching"},{"line_number":20,"context_line":"    across execute_queue boundaries; end-of-queue flush populates the"},{"line_number":21,"context_line":"    IR scan\u0027s in_value with hardware-captured Capture-IR data."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"650edb0b_961a1165","line":18,"in_reply_to":"e36fe0ce_5ee33730","updated":"2026-04-29 12:51:31.000000000","message":"Actually after further testing the mode switching sequence doesn\u0027t seem necessary (at least for the scope I\u0027m able to test), it was initially there because this what I captured from the original DebugServer, removed for now.","commit_id":"e37057465e6fe31036447986ec47cbf28db35684"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"9ac0888920fd2bfed54bb21ede80f1522eb95f64","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"a9f3dfaf_7a3fa471","updated":"2026-04-24 02:29:17.000000000","message":"Thanks for this work.\nI have not reviewed the driver code at all, only the other files of this patch. I will return shortly for the remaining review.","commit_id":"e37057465e6fe31036447986ec47cbf28db35684"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"d8eb542cdbcac3a724fb3bb9f24cb5bfe32f6a5f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"1fc13921_43cc495f","updated":"2026-05-02 15:21:55.000000000","message":"I finally run the review, sorry for the delay.\nThe code looks good, with only some minor formatting issues due to the coding style (see it in `https://openocd.org/doc-release/doxygen/stylec.html`)\nand some `int` that should be better be converted to `unsigned int`.\nPlease consider that we should minimize the use of C casts, so try to balance the conversion `int` to `unsigned int` to avoid adding casts to call functions in jtag framework.\nThen, 9584 has been merged, so the command `cklink vid_pid` can be dropped","commit_id":"a8fb4b4508e4d33a21440125d29fe5c24f0b07bb"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"32d185e1e22167a83930c1090762bc4c46478c0c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"55b052f9_70de24ba","updated":"2026-05-09 21:44:11.000000000","message":"The indentation with TABs is still not correct, but we don\u0027t have a strict guideline in the coding style for this, so we can not enforce it.\nOpenOCD uses TAB size of 4 positions, so this should be set in you editor to see the code properly rendered.\nNever mind!","commit_id":"fbd3a66e66f7a9437bd97959461bd2df7a959ba2"},{"author":{"_account_id":1002512,"name":"will-tm","email":"william.markezana@gmail.com","username":"will-tm"},"change_message_id":"01de93ebddeaa2bfe617c7108b569166ee272bed","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"90b9a093_f99261a9","in_reply_to":"55b052f9_70de24ba","updated":"2026-05-11 12:13:20.000000000","message":"Sorry about that, it should be better now","commit_id":"fbd3a66e66f7a9437bd97959461bd2df7a959ba2"}],"NEWS":[{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"9ac0888920fd2bfed54bb21ede80f1522eb95f64","unresolved":true,"context_lines":[{"line_number":2,"context_line":"source archive release."},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"JTAG Layer:"},{"line_number":5,"context_line":"\t* Added support for T-Head CK-Link Lite JTAG adapters, including the"},{"line_number":6,"context_line":"\t  Bouffalo Lab BL616/BL702 clone probes (BL618 eval board debugger)."},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"Boundary Scan:"}],"source_content_type":"application/octet-stream","patch_set":1,"id":"7d998727_3b012ac0","line":5,"updated":"2026-04-24 02:29:17.000000000","message":"Please drop this change to the file NEWS.\nIf every patch changes this file, there would be too many merge conflicts. I\u0027m taking care to keep it updated separately.\nSee https://review.openocd.org/c/openocd/+/7689\nI already taken some info from this line for future changes there","commit_id":"e37057465e6fe31036447986ec47cbf28db35684"},{"author":{"_account_id":1002512,"name":"will-tm","email":"william.markezana@gmail.com","username":"will-tm"},"change_message_id":"4d184841fe9db6548b55d6a2177e60399ec5669c","unresolved":true,"context_lines":[{"line_number":2,"context_line":"source archive release."},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"JTAG Layer:"},{"line_number":5,"context_line":"\t* Added support for T-Head CK-Link Lite JTAG adapters, including the"},{"line_number":6,"context_line":"\t  Bouffalo Lab BL616/BL702 clone probes (BL618 eval board debugger)."},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"Boundary Scan:"}],"source_content_type":"application/octet-stream","patch_set":1,"id":"bcce075e_29627271","line":5,"in_reply_to":"7d998727_3b012ac0","updated":"2026-04-27 15:34:52.000000000","message":"understood, thanks. revised","commit_id":"e37057465e6fe31036447986ec47cbf28db35684"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"66b9f0ebb65b2f84fb2316d96ef5c15ad0e1dd68","unresolved":false,"context_lines":[{"line_number":2,"context_line":"source archive release."},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"JTAG Layer:"},{"line_number":5,"context_line":"\t* Added support for T-Head CK-Link Lite JTAG adapters, including the"},{"line_number":6,"context_line":"\t  Bouffalo Lab BL616/BL702 clone probes (BL618 eval board debugger)."},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"Boundary Scan:"}],"source_content_type":"application/octet-stream","patch_set":1,"id":"9ca7707b_f651cebb","line":5,"in_reply_to":"bcce075e_29627271","updated":"2026-04-28 12:53:44.000000000","message":"Done","commit_id":"e37057465e6fe31036447986ec47cbf28db35684"}],"contrib/60-openocd.rules":[{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"9ac0888920fd2bfed54bb21ede80f1522eb95f64","unresolved":true,"context_lines":[{"line_number":269,"context_line":"# CMSIS-DAP compatible adapters"},{"line_number":270,"context_line":"ATTRS{product}\u003d\u003d\"*CMSIS-DAP*\", MODE\u003d\"660\", GROUP\u003d\"plugdev\", TAG+\u003d\"uaccess\""},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"# T-Head CK-Link Lite and Bouffalo Lab BL616/BL702 clones"},{"line_number":273,"context_line":"ATTRS{idVendor}\u003d\u003d\"32bf\", ATTRS{idProduct}\u003d\u003d\"b210\", MODE\u003d\"660\", GROUP\u003d\"plugdev\", TAG+\u003d\"uaccess\""},{"line_number":274,"context_line":"ATTRS{idVendor}\u003d\u003d\"42bf\", ATTRS{idProduct}\u003d\u003d\"b210\", MODE\u003d\"660\", GROUP\u003d\"plugdev\", TAG+\u003d\"uaccess\""},{"line_number":275,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":1,"id":"289bfea5_bce544b2","line":272,"updated":"2026-04-24 02:29:17.000000000","message":"Please keep the file sorted by vendor ID, don\u0027t add these at the end of the file.\nStrange that Bouffalo Lab gets two different vendor ID.\n0x32bf is registered at usb.org as \"PingTouGe Semiconductor Co., Ltd.\"\n0x42bf is not registered at all!\nAnyway, we need them in this file","commit_id":"e37057465e6fe31036447986ec47cbf28db35684"},{"author":{"_account_id":1002512,"name":"will-tm","email":"william.markezana@gmail.com","username":"will-tm"},"change_message_id":"4d184841fe9db6548b55d6a2177e60399ec5669c","unresolved":true,"context_lines":[{"line_number":269,"context_line":"# CMSIS-DAP compatible adapters"},{"line_number":270,"context_line":"ATTRS{product}\u003d\u003d\"*CMSIS-DAP*\", MODE\u003d\"660\", GROUP\u003d\"plugdev\", TAG+\u003d\"uaccess\""},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"# T-Head CK-Link Lite and Bouffalo Lab BL616/BL702 clones"},{"line_number":273,"context_line":"ATTRS{idVendor}\u003d\u003d\"32bf\", ATTRS{idProduct}\u003d\u003d\"b210\", MODE\u003d\"660\", GROUP\u003d\"plugdev\", TAG+\u003d\"uaccess\""},{"line_number":274,"context_line":"ATTRS{idVendor}\u003d\u003d\"42bf\", ATTRS{idProduct}\u003d\u003d\"b210\", MODE\u003d\"660\", GROUP\u003d\"plugdev\", TAG+\u003d\"uaccess\""},{"line_number":275,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":1,"id":"81a8b910_fbac4502","line":272,"in_reply_to":"289bfea5_bce544b2","updated":"2026-04-27 15:34:52.000000000","message":"no problem, revised","commit_id":"e37057465e6fe31036447986ec47cbf28db35684"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"66b9f0ebb65b2f84fb2316d96ef5c15ad0e1dd68","unresolved":false,"context_lines":[{"line_number":269,"context_line":"# CMSIS-DAP compatible adapters"},{"line_number":270,"context_line":"ATTRS{product}\u003d\u003d\"*CMSIS-DAP*\", MODE\u003d\"660\", GROUP\u003d\"plugdev\", TAG+\u003d\"uaccess\""},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"# T-Head CK-Link Lite and Bouffalo Lab BL616/BL702 clones"},{"line_number":273,"context_line":"ATTRS{idVendor}\u003d\u003d\"32bf\", ATTRS{idProduct}\u003d\u003d\"b210\", MODE\u003d\"660\", GROUP\u003d\"plugdev\", TAG+\u003d\"uaccess\""},{"line_number":274,"context_line":"ATTRS{idVendor}\u003d\u003d\"42bf\", ATTRS{idProduct}\u003d\u003d\"b210\", MODE\u003d\"660\", GROUP\u003d\"plugdev\", TAG+\u003d\"uaccess\""},{"line_number":275,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":1,"id":"c69b571b_bf28468a","line":272,"in_reply_to":"81a8b910_fbac4502","updated":"2026-04-28 12:53:44.000000000","message":"Done","commit_id":"e37057465e6fe31036447986ec47cbf28db35684"}],"doc/openocd.texi":[{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"9ac0888920fd2bfed54bb21ede80f1522eb95f64","unresolved":false,"context_lines":[{"line_number":2622,"context_line":"T-Head DebugServer-compatible framed command protocol."},{"line_number":2623,"context_line":""},{"line_number":2624,"context_line":"The driver only supports JTAG transport and a single-TAP chain. The"},{"line_number":2625,"context_line":"probe runs at a fixed clock; @command{adapter speed} requests are"},{"line_number":2626,"context_line":"accepted but ignored (with a one-time warning). @command{JTAG_TMS} and"},{"line_number":2627,"context_line":"@command{JTAG_PATHMOVE} are not supported by this probe\u0027s protocol."},{"line_number":2628,"context_line":""}],"source_content_type":"text/x-texinfo","patch_set":1,"id":"80fd3345_378d753c","line":2625,"updated":"2026-04-24 02:29:17.000000000","message":"There is a new ticket https://sourceforge.net/p/openocd/tickets/470/ for adapters that cannot change speed.\nI haven\u0027t check it yet. Maybe later on we would need to change this behavior.","commit_id":"e37057465e6fe31036447986ec47cbf28db35684"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"9ac0888920fd2bfed54bb21ede80f1522eb95f64","unresolved":true,"context_lines":[{"line_number":2626,"context_line":"accepted but ignored (with a one-time warning). @command{JTAG_TMS} and"},{"line_number":2627,"context_line":"@command{JTAG_PATHMOVE} are not supported by this probe\u0027s protocol."},{"line_number":2628,"context_line":""},{"line_number":2629,"context_line":"@deffn {Config Command} {cklink vid_pid} [vid pid]+"},{"line_number":2630,"context_line":"Override the built-in VID/PID table. By default the driver matches"},{"line_number":2631,"context_line":"0x42bf/0xb210 (Bouffalo) and 0x32bf/0xb210 (T-Head). Up to eight"},{"line_number":2632,"context_line":"@var{vid}/@var{pid} pairs may be specified."}],"source_content_type":"text/x-texinfo","patch_set":1,"id":"ad07d4e3_7b8aea43","line":2629,"updated":"2026-04-24 02:29:17.000000000","message":"Please check the ongoing change https://review.openocd.org/c/openocd/+/9584\nIt will be merged soon.\nI prefer this driver to use it, instead of implementing again the similar code.\nLeft it as is, for the moment, then in one week I will merge it and you can rebase this code.\nAn example on how to use the new code is in https://review.openocd.org/c/openocd/+/9585","commit_id":"e37057465e6fe31036447986ec47cbf28db35684"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"66b9f0ebb65b2f84fb2316d96ef5c15ad0e1dd68","unresolved":false,"context_lines":[{"line_number":2626,"context_line":"accepted but ignored (with a one-time warning). @command{JTAG_TMS} and"},{"line_number":2627,"context_line":"@command{JTAG_PATHMOVE} are not supported by this probe\u0027s protocol."},{"line_number":2628,"context_line":""},{"line_number":2629,"context_line":"@deffn {Config Command} {cklink vid_pid} [vid pid]+"},{"line_number":2630,"context_line":"Override the built-in VID/PID table. By default the driver matches"},{"line_number":2631,"context_line":"0x42bf/0xb210 (Bouffalo) and 0x32bf/0xb210 (T-Head). Up to eight"},{"line_number":2632,"context_line":"@var{vid}/@var{pid} pairs may be specified."}],"source_content_type":"text/x-texinfo","patch_set":1,"id":"ad98a9ea_f7b3ff79","line":2629,"in_reply_to":"4bfd0a21_b64e884f","updated":"2026-04-28 12:53:44.000000000","message":"Done","commit_id":"e37057465e6fe31036447986ec47cbf28db35684"},{"author":{"_account_id":1002512,"name":"will-tm","email":"william.markezana@gmail.com","username":"will-tm"},"change_message_id":"4d184841fe9db6548b55d6a2177e60399ec5669c","unresolved":true,"context_lines":[{"line_number":2626,"context_line":"accepted but ignored (with a one-time warning). @command{JTAG_TMS} and"},{"line_number":2627,"context_line":"@command{JTAG_PATHMOVE} are not supported by this probe\u0027s protocol."},{"line_number":2628,"context_line":""},{"line_number":2629,"context_line":"@deffn {Config Command} {cklink vid_pid} [vid pid]+"},{"line_number":2630,"context_line":"Override the built-in VID/PID table. By default the driver matches"},{"line_number":2631,"context_line":"0x42bf/0xb210 (Bouffalo) and 0x32bf/0xb210 (T-Head). Up to eight"},{"line_number":2632,"context_line":"@var{vid}/@var{pid} pairs may be specified."}],"source_content_type":"text/x-texinfo","patch_set":1,"id":"4bfd0a21_b64e884f","line":2629,"in_reply_to":"ad07d4e3_7b8aea43","updated":"2026-04-27 15:34:52.000000000","message":"sure, I\u0027ll monitor this PR and realign when merged","commit_id":"e37057465e6fe31036447986ec47cbf28db35684"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"d8eb542cdbcac3a724fb3bb9f24cb5bfe32f6a5f","unresolved":false,"context_lines":[{"line_number":2626,"context_line":"accepted but ignored (with a one-time warning). @command{JTAG_TMS} and"},{"line_number":2627,"context_line":"@command{JTAG_PATHMOVE} are not supported by this probe\u0027s protocol."},{"line_number":2628,"context_line":""},{"line_number":2629,"context_line":"@deffn {Config Command} {cklink vid_pid} [vid pid]+"},{"line_number":2630,"context_line":"Override the built-in VID/PID table. By default the driver matches"},{"line_number":2631,"context_line":"0x42bf/0xb210 (Bouffalo) and 0x32bf/0xb210 (T-Head). Up to eight"},{"line_number":2632,"context_line":"@var{vid}/@var{pid} pairs may be specified."}],"source_content_type":"text/x-texinfo","patch_set":1,"id":"d88c819c_17340501","line":2629,"in_reply_to":"ad98a9ea_f7b3ff79","updated":"2026-05-02 15:21:55.000000000","message":"Merged!","commit_id":"e37057465e6fe31036447986ec47cbf28db35684"}],"src/jtag/drivers/cklink.c":[{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"d8eb542cdbcac3a724fb3bb9f24cb5bfe32f6a5f","unresolved":true,"context_lines":[{"line_number":26,"context_line":"#include \u003chelper/time_support.h\u003e"},{"line_number":27,"context_line":"#include \"libusb_helper.h\""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"/* USB identification. VID/PID table is extendable via `cklink vid_pid`. */"},{"line_number":30,"context_line":"#define CKLINK_VID_BOUFFALO\t\t0x42bf"},{"line_number":31,"context_line":"#define CKLINK_VID_THEAD\t\t0x32bf"},{"line_number":32,"context_line":"#define CKLINK_PID_LITE_V2\t\t0xb210"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"dadc7c0c_0413d40c","line":29,"updated":"2026-05-02 15:21:55.000000000","message":"Current coding style requires that single line comments should have the C99 format\n`// USB identification. VID/PID table is extendable via \u0027cklink vid_pid\u0027`\nPlease extend this to all the single line comments below.","commit_id":"a8fb4b4508e4d33a21440125d29fe5c24f0b07bb"},{"author":{"_account_id":1002512,"name":"will-tm","email":"william.markezana@gmail.com","username":"will-tm"},"change_message_id":"af67edbf8b19f5dd6aacf370272886837e174c2b","unresolved":false,"context_lines":[{"line_number":26,"context_line":"#include \u003chelper/time_support.h\u003e"},{"line_number":27,"context_line":"#include \"libusb_helper.h\""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"/* USB identification. VID/PID table is extendable via `cklink vid_pid`. */"},{"line_number":30,"context_line":"#define CKLINK_VID_BOUFFALO\t\t0x42bf"},{"line_number":31,"context_line":"#define CKLINK_VID_THEAD\t\t0x32bf"},{"line_number":32,"context_line":"#define CKLINK_PID_LITE_V2\t\t0xb210"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"a6cae11c_92d26d87","line":29,"in_reply_to":"8a1e44eb_b33c4559","updated":"2026-05-04 22:17:12.000000000","message":"Done","commit_id":"a8fb4b4508e4d33a21440125d29fe5c24f0b07bb"},{"author":{"_account_id":1002512,"name":"will-tm","email":"william.markezana@gmail.com","username":"will-tm"},"change_message_id":"f391529faacd8ac61d392ea86ef3048394df6f86","unresolved":true,"context_lines":[{"line_number":26,"context_line":"#include \u003chelper/time_support.h\u003e"},{"line_number":27,"context_line":"#include \"libusb_helper.h\""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"/* USB identification. VID/PID table is extendable via `cklink vid_pid`. */"},{"line_number":30,"context_line":"#define CKLINK_VID_BOUFFALO\t\t0x42bf"},{"line_number":31,"context_line":"#define CKLINK_VID_THEAD\t\t0x32bf"},{"line_number":32,"context_line":"#define CKLINK_PID_LITE_V2\t\t0xb210"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"8a1e44eb_b33c4559","line":29,"in_reply_to":"dadc7c0c_0413d40c","updated":"2026-05-02 15:59:28.000000000","message":"Should be ok now, thanks","commit_id":"a8fb4b4508e4d33a21440125d29fe5c24f0b07bb"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"d8eb542cdbcac3a724fb3bb9f24cb5bfe32f6a5f","unresolved":true,"context_lines":[{"line_number":32,"context_line":"#define CKLINK_PID_LITE_V2\t\t0xb210"},{"line_number":33,"context_line":"#define CKLINK_MAX_VID_PIDS\t\t8"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"#define CKLINK_USB_INTERFACE\t\t0"},{"line_number":36,"context_line":"#define CKLINK_EP_OUT\t\t\t0x02"},{"line_number":37,"context_line":"#define CKLINK_EP_IN\t\t\t0x81"},{"line_number":38,"context_line":"#define CKLINK_USB_TIMEOUT_MS\t\t1000"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"dadbd18d_d1aedaf8","line":35,"updated":"2026-05-02 15:21:55.000000000","message":"Pay attention that OpenOCD coding style requires using TAB of 4 whitespaces.\nThese macros have the value indented only with TAB of 8 whitespaces.\nPlease change the TAB size in you editor and review this file.\nThe other files in this commit looks ok.","commit_id":"a8fb4b4508e4d33a21440125d29fe5c24f0b07bb"},{"author":{"_account_id":1002512,"name":"will-tm","email":"william.markezana@gmail.com","username":"will-tm"},"change_message_id":"af67edbf8b19f5dd6aacf370272886837e174c2b","unresolved":false,"context_lines":[{"line_number":32,"context_line":"#define CKLINK_PID_LITE_V2\t\t0xb210"},{"line_number":33,"context_line":"#define CKLINK_MAX_VID_PIDS\t\t8"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"#define CKLINK_USB_INTERFACE\t\t0"},{"line_number":36,"context_line":"#define CKLINK_EP_OUT\t\t\t0x02"},{"line_number":37,"context_line":"#define CKLINK_EP_IN\t\t\t0x81"},{"line_number":38,"context_line":"#define CKLINK_USB_TIMEOUT_MS\t\t1000"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"ad877cd1_90f83012","line":35,"in_reply_to":"64d4f436_a71f8767","updated":"2026-05-04 22:17:12.000000000","message":"Done","commit_id":"a8fb4b4508e4d33a21440125d29fe5c24f0b07bb"},{"author":{"_account_id":1002512,"name":"will-tm","email":"william.markezana@gmail.com","username":"will-tm"},"change_message_id":"f391529faacd8ac61d392ea86ef3048394df6f86","unresolved":true,"context_lines":[{"line_number":32,"context_line":"#define CKLINK_PID_LITE_V2\t\t0xb210"},{"line_number":33,"context_line":"#define CKLINK_MAX_VID_PIDS\t\t8"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"#define CKLINK_USB_INTERFACE\t\t0"},{"line_number":36,"context_line":"#define CKLINK_EP_OUT\t\t\t0x02"},{"line_number":37,"context_line":"#define CKLINK_EP_IN\t\t\t0x81"},{"line_number":38,"context_line":"#define CKLINK_USB_TIMEOUT_MS\t\t1000"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"64d4f436_a71f8767","line":35,"in_reply_to":"dadbd18d_d1aedaf8","updated":"2026-05-02 15:59:28.000000000","message":"done","commit_id":"a8fb4b4508e4d33a21440125d29fe5c24f0b07bb"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"d8eb542cdbcac3a724fb3bb9f24cb5bfe32f6a5f","unresolved":true,"context_lines":[{"line_number":114,"context_line":"};"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"/* Sum-mod-256. */"},{"line_number":117,"context_line":"static uint8_t cklink_checksum(const uint8_t *buf, int len)"},{"line_number":118,"context_line":"{"},{"line_number":119,"context_line":"\tunsigned int sum \u003d 0;"},{"line_number":120,"context_line":"\tfor (int i \u003d 0; i \u003c len; i++)"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"025b9b77_16cae35c","line":117,"updated":"2026-05-02 15:21:55.000000000","message":"Prefer use \u0027unsigned int\u0027 for \u0027len\u0027, as there is no need for negative values.\nChanging this will require changing also the type of the variable passed as argument by the callers.","commit_id":"a8fb4b4508e4d33a21440125d29fe5c24f0b07bb"},{"author":{"_account_id":1002512,"name":"will-tm","email":"william.markezana@gmail.com","username":"will-tm"},"change_message_id":"f391529faacd8ac61d392ea86ef3048394df6f86","unresolved":true,"context_lines":[{"line_number":114,"context_line":"};"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"/* Sum-mod-256. */"},{"line_number":117,"context_line":"static uint8_t cklink_checksum(const uint8_t *buf, int len)"},{"line_number":118,"context_line":"{"},{"line_number":119,"context_line":"\tunsigned int sum \u003d 0;"},{"line_number":120,"context_line":"\tfor (int i \u003d 0; i \u003c len; i++)"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"9fc7ded8_8e38537c","line":117,"in_reply_to":"025b9b77_16cae35c","updated":"2026-05-02 15:59:28.000000000","message":"good call, revised","commit_id":"a8fb4b4508e4d33a21440125d29fe5c24f0b07bb"},{"author":{"_account_id":1002512,"name":"will-tm","email":"william.markezana@gmail.com","username":"will-tm"},"change_message_id":"af67edbf8b19f5dd6aacf370272886837e174c2b","unresolved":false,"context_lines":[{"line_number":114,"context_line":"};"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"/* Sum-mod-256. */"},{"line_number":117,"context_line":"static uint8_t cklink_checksum(const uint8_t *buf, int len)"},{"line_number":118,"context_line":"{"},{"line_number":119,"context_line":"\tunsigned int sum \u003d 0;"},{"line_number":120,"context_line":"\tfor (int i \u003d 0; i \u003c len; i++)"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"db054b78_9869aec2","line":117,"in_reply_to":"9fc7ded8_8e38537c","updated":"2026-05-04 22:17:12.000000000","message":"Done","commit_id":"a8fb4b4508e4d33a21440125d29fe5c24f0b07bb"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"d8eb542cdbcac3a724fb3bb9f24cb5bfe32f6a5f","unresolved":true,"context_lines":[{"line_number":119,"context_line":"\tunsigned int sum \u003d 0;"},{"line_number":120,"context_line":"\tfor (int i \u003d 0; i \u003c len; i++)"},{"line_number":121,"context_line":"\t\tsum +\u003d buf[i];"},{"line_number":122,"context_line":"\treturn (uint8_t)(sum \u0026 0xff);"},{"line_number":123,"context_line":"}"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"/* Send a framed command; NULL rxlen means fire-and-forget (selfreg writes"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"da337f97_b915667a","line":122,"updated":"2026-05-02 15:21:55.000000000","message":"if `sum` is declared as `uint8_t` you will be able to drop the mask and the cast, and simply\n`return sum;`","commit_id":"a8fb4b4508e4d33a21440125d29fe5c24f0b07bb"},{"author":{"_account_id":1002512,"name":"will-tm","email":"william.markezana@gmail.com","username":"will-tm"},"change_message_id":"af67edbf8b19f5dd6aacf370272886837e174c2b","unresolved":false,"context_lines":[{"line_number":119,"context_line":"\tunsigned int sum \u003d 0;"},{"line_number":120,"context_line":"\tfor (int i \u003d 0; i \u003c len; i++)"},{"line_number":121,"context_line":"\t\tsum +\u003d buf[i];"},{"line_number":122,"context_line":"\treturn (uint8_t)(sum \u0026 0xff);"},{"line_number":123,"context_line":"}"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"/* Send a framed command; NULL rxlen means fire-and-forget (selfreg writes"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"c9b1a6fa_7dc36d64","line":122,"in_reply_to":"57050783_64c337f1","updated":"2026-05-04 22:17:12.000000000","message":"Done","commit_id":"a8fb4b4508e4d33a21440125d29fe5c24f0b07bb"},{"author":{"_account_id":1002512,"name":"will-tm","email":"william.markezana@gmail.com","username":"will-tm"},"change_message_id":"f391529faacd8ac61d392ea86ef3048394df6f86","unresolved":true,"context_lines":[{"line_number":119,"context_line":"\tunsigned int sum \u003d 0;"},{"line_number":120,"context_line":"\tfor (int i \u003d 0; i \u003c len; i++)"},{"line_number":121,"context_line":"\t\tsum +\u003d buf[i];"},{"line_number":122,"context_line":"\treturn (uint8_t)(sum \u0026 0xff);"},{"line_number":123,"context_line":"}"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"/* Send a framed command; NULL rxlen means fire-and-forget (selfreg writes"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"57050783_64c337f1","line":122,"in_reply_to":"da337f97_b915667a","updated":"2026-05-02 15:59:28.000000000","message":"absolutely, revised","commit_id":"a8fb4b4508e4d33a21440125d29fe5c24f0b07bb"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"d8eb542cdbcac3a724fb3bb9f24cb5bfe32f6a5f","unresolved":true,"context_lines":[{"line_number":125,"context_line":"/* Send a framed command; NULL rxlen means fire-and-forget (selfreg writes"},{"line_number":126,"context_line":" * are not acknowledged). @p opcode selects the response-checksum rule. */"},{"line_number":127,"context_line":"static int cklink_usb_xfer(struct cklink_ctx *ck, uint8_t opcode,"},{"line_number":128,"context_line":"\t\t\t   int txlen, int *rxlen)"},{"line_number":129,"context_line":"{"},{"line_number":130,"context_line":"\tint actual \u003d 0;"},{"line_number":131,"context_line":"\tint ret \u003d jtag_libusb_bulk_write(ck-\u003eusb_dev, CKLINK_EP_OUT,"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"eba043ff_334b7700","line":128,"updated":"2026-05-02 15:21:55.000000000","message":"Also `txlen` and `rxlen` should be `unsigned int`, I think","commit_id":"a8fb4b4508e4d33a21440125d29fe5c24f0b07bb"},{"author":{"_account_id":1002512,"name":"will-tm","email":"william.markezana@gmail.com","username":"will-tm"},"change_message_id":"af67edbf8b19f5dd6aacf370272886837e174c2b","unresolved":false,"context_lines":[{"line_number":125,"context_line":"/* Send a framed command; NULL rxlen means fire-and-forget (selfreg writes"},{"line_number":126,"context_line":" * are not acknowledged). @p opcode selects the response-checksum rule. */"},{"line_number":127,"context_line":"static int cklink_usb_xfer(struct cklink_ctx *ck, uint8_t opcode,"},{"line_number":128,"context_line":"\t\t\t   int txlen, int *rxlen)"},{"line_number":129,"context_line":"{"},{"line_number":130,"context_line":"\tint actual \u003d 0;"},{"line_number":131,"context_line":"\tint ret \u003d jtag_libusb_bulk_write(ck-\u003eusb_dev, CKLINK_EP_OUT,"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"801a86e8_285a8506","line":128,"in_reply_to":"1809351f_6d60d616","updated":"2026-05-04 22:17:12.000000000","message":"Done","commit_id":"a8fb4b4508e4d33a21440125d29fe5c24f0b07bb"},{"author":{"_account_id":1002512,"name":"will-tm","email":"william.markezana@gmail.com","username":"will-tm"},"change_message_id":"f391529faacd8ac61d392ea86ef3048394df6f86","unresolved":true,"context_lines":[{"line_number":125,"context_line":"/* Send a framed command; NULL rxlen means fire-and-forget (selfreg writes"},{"line_number":126,"context_line":" * are not acknowledged). @p opcode selects the response-checksum rule. */"},{"line_number":127,"context_line":"static int cklink_usb_xfer(struct cklink_ctx *ck, uint8_t opcode,"},{"line_number":128,"context_line":"\t\t\t   int txlen, int *rxlen)"},{"line_number":129,"context_line":"{"},{"line_number":130,"context_line":"\tint actual \u003d 0;"},{"line_number":131,"context_line":"\tint ret \u003d jtag_libusb_bulk_write(ck-\u003eusb_dev, CKLINK_EP_OUT,"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"1809351f_6d60d616","line":128,"in_reply_to":"eba043ff_334b7700","updated":"2026-05-02 15:59:28.000000000","message":"agreed, revised","commit_id":"a8fb4b4508e4d33a21440125d29fe5c24f0b07bb"}]}
