)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"1549daf702d03141ba53fd03884602b063417112","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"e407922c_ed294606","updated":"2025-06-07 19:48:25.000000000","message":"reviewing this patch is a real nightmare.\nGerrit reports that the file `angie.c` has 1159 lines added and 2050 lines removed.\nMost of the changes looks due to rename of variables or fields in struct, space and alignments of macros, code reordering.\nYou are not helping the reviewers to get through it with all such changes\nI strongly invite you to try to reduce the delta.\n\nAlso, please check my comments about the command `angie memaccess_tck`","commit_id":"318bcf876b4d3c14fc91683c0476d453db4ff329"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"24a6317a9ef055156314001068d73f154c9d0d3d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"e0625835_5a1cf57c","in_reply_to":"caca967f_3dd9cb85","updated":"2025-06-20 23:30:49.000000000","message":"ok, let\u0027s review it as it was a brand new adapter with no history","commit_id":"318bcf876b4d3c14fc91683c0476d453db4ff329"},{"author":{"_account_id":1002344,"name":"Adrien Charruel","email":"acharruel@nanoxplore.com","username":"acharruel","status":"NanoXplore"},"change_message_id":"c3503c380d5803b602ae2d777c99af11321f5ad7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"9d6348ba_5dff7fbf","in_reply_to":"e0625835_5a1cf57c","updated":"2025-06-25 14:06:10.000000000","message":"Thanks!","commit_id":"318bcf876b4d3c14fc91683c0476d453db4ff329"},{"author":{"_account_id":1002344,"name":"Adrien Charruel","email":"acharruel@nanoxplore.com","username":"acharruel","status":"NanoXplore"},"change_message_id":"5b6a4ca5dff2c26c55e662809dfcaf363edc20ad","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"caca967f_3dd9cb85","in_reply_to":"e407922c_ed294606","updated":"2025-06-11 10:01:21.000000000","message":"Hi Antonio,\n\nThanks for your review.\nI fully agree that this patch is a real mess to review...\n\nUnfortunately there has been two major refactorings of our Angie probe, involving both the embedded firmware and the driver.\nThat\u0027s why the new code that we finally pushed upstream is completely different from the old one.\n\nIt will be difficult and error prone for me to try to break this down in small changes.\nIs it possible to review this not as a diff against the old version, but as a whole new file?\n\nThanks again. I\u0027m open to any suggestions to make the review smoother. And if you prefer me to break this in smaller modifications I\u0027ll take the time to do it. We are enclined to put a lot of effort to upstream our stuffs and to do it properly.","commit_id":"318bcf876b4d3c14fc91683c0476d453db4ff329"},{"author":{"_account_id":1000853,"name":"zapb","display_name":"Marc Schink","email":"dev@zapb.de","username":"zapb"},"change_message_id":"b28fdb0e3fb35d4d1f7cc4044dbf9c48040d06d1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"f31833ab_af34a0f6","updated":"2025-06-16 19:54:56.000000000","message":"Is this “angie” probe available to everyone or something you only use internally at the company? Cannot find it on Mouser or similar distributors.","commit_id":"60f645cf5fe24bf83db8ce9140e7f8f978180f93"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"24a6317a9ef055156314001068d73f154c9d0d3d","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":9,"id":"cebe7a2c_e06c5380","in_reply_to":"26bf84ca_35dbe153","updated":"2025-06-20 23:30:49.000000000","message":"It\u0027s cool that you have put in OpenOCD the source of both MCU firmware and FPGA VHDL.\nHave you ever considered making also the schematic available?","commit_id":"60f645cf5fe24bf83db8ce9140e7f8f978180f93"},{"author":{"_account_id":1002344,"name":"Adrien Charruel","email":"acharruel@nanoxplore.com","username":"acharruel","status":"NanoXplore"},"change_message_id":"1107597674dbf549f7d21bdbc29701b27b383f47","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":9,"id":"757c4382_e7923dec","in_reply_to":"6c6932b3_1e780dbd","updated":"2025-07-29 08:17:35.000000000","message":"Hi,\nOk I\u0027ll check internally where to put the schematics and any other useful information we can share and I\u0027ll reference it in the angie.cfg file.\nIf that\u0027s OK for you, could it be done in a further commit?\nThanks","commit_id":"60f645cf5fe24bf83db8ce9140e7f8f978180f93"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"33deee96fe4426c223b9b85a8e61f268752d1a52","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"a747a3a0_a71b5d0f","in_reply_to":"757c4382_e7923dec","updated":"2025-08-02 16:01:40.000000000","message":"Yes, please update the file with a new commit once the link gets available.","commit_id":"60f645cf5fe24bf83db8ce9140e7f8f978180f93"},{"author":{"_account_id":1002344,"name":"Adrien Charruel","email":"acharruel@nanoxplore.com","username":"acharruel","status":"NanoXplore"},"change_message_id":"cecd33bd3b29915573ea46fb4f0b088659b5dff2","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":9,"id":"e3035c70_9fbaec64","in_reply_to":"cebe7a2c_e06c5380","updated":"2025-06-25 14:40:41.000000000","message":"\u003e It\u0027s cool that you have put in OpenOCD the source of both MCU firmware and FPGA VHDL.\n\u003e Have you ever considered making also the schematic available?\n\nHi Antonio,\nAfter some discussion in my company I have the right to publish the schematic of our Angie probe.\nWhere do you suggest I put it? I was thinking of \u0027doc/usb_adapters/angie\u0027, we already have a folder ready.","commit_id":"60f645cf5fe24bf83db8ce9140e7f8f978180f93"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"830116e6a94156d558e3e1d6dedfbe35cbafcf3f","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":9,"id":"6c6932b3_1e780dbd","in_reply_to":"e3035c70_9fbaec64","updated":"2025-07-26 22:38:54.000000000","message":"That\u0027s really great!\nI don\u0027t think OpenOCD should be the place to distribute the schematic.\nAny possibility to put it on your company website? or on github? Then adding the link in OpenOCD documentation and in angie.cfg?","commit_id":"60f645cf5fe24bf83db8ce9140e7f8f978180f93"},{"author":{"_account_id":1002344,"name":"Adrien Charruel","email":"acharruel@nanoxplore.com","username":"acharruel","status":"NanoXplore"},"change_message_id":"5bf868c7647d24208a4edfed974fcbf58875d2b4","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":9,"id":"26bf84ca_35dbe153","in_reply_to":"f31833ab_af34a0f6","updated":"2025-06-17 08:42:39.000000000","message":"Hi,\n\nAngie is used internally and it is also available to our customer along with our devkits.\nHere is a blog post advertising its support in OpenOCD:\nhttps://nanoxplore.com/index.php/2023/11/08/ngultra-openocd/\n\nWe are still trying to improve the solution and we\u0027d like to keep the support in OpenOCD.\n\nThanks.","commit_id":"60f645cf5fe24bf83db8ce9140e7f8f978180f93"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"24a6317a9ef055156314001068d73f154c9d0d3d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"95232c67_821e135f","updated":"2025-06-20 23:30:49.000000000","message":"please review the following:\n- don\u0027t let a function return either an error or a value;\n- move the declaration of variables to the point of its first use or assignment, when possible;\n- exit path of the functions should do something useful. If it only returns a value, drop the exit path and return directly in place of goto.","commit_id":"7bd283841c8ad827492b1066947b3050f3fdbef6"},{"author":{"_account_id":1002344,"name":"Adrien Charruel","email":"acharruel@nanoxplore.com","username":"acharruel","status":"NanoXplore"},"change_message_id":"c3503c380d5803b602ae2d777c99af11321f5ad7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"6f54fe30_eeafcf8b","updated":"2025-06-25 14:06:10.000000000","message":"Hi,\n\nHere is the amended commit, main changes are:\n- Remove exit paths almost everywhere.\n- Functions only return error codes.\n- Drop the size return in transfer functions except for one function where it\u0027s used. The size is then passed as a pointer argument.\n- Do not allocate the firmware data on the stack.\n\nThank you for the review, really appreciate it.","commit_id":"11ac1151076b3282eb3c6e50637a323070c6e926"},{"author":{"_account_id":1002344,"name":"Adrien Charruel","email":"acharruel@nanoxplore.com","username":"acharruel","status":"NanoXplore"},"change_message_id":"1107597674dbf549f7d21bdbc29701b27b383f47","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"010f05bf_ef1ef28f","updated":"2025-07-29 08:17:35.000000000","message":"Hi,\nCode style remarks have been taken into account and hopefuly they are all fixed.\nThanks!","commit_id":"11ac1151076b3282eb3c6e50637a323070c6e926"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"830116e6a94156d558e3e1d6dedfbe35cbafcf3f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"73cd1884_c5245e2a","updated":"2025-07-26 22:38:54.000000000","message":"I have added few more comments, but all minor changes.\nLooks close to be merged!","commit_id":"11ac1151076b3282eb3c6e50637a323070c6e926"},{"author":{"_account_id":1000853,"name":"zapb","display_name":"Marc Schink","email":"dev@zapb.de","username":"zapb"},"change_message_id":"20bd4047d681a6385043565721f557b75a305c1f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"51a9a57f_ac246176","updated":"2025-08-02 17:16:45.000000000","message":"Just a short review from my side, probably not covered all yet.","commit_id":"9442336fd45ff651688632203a9775f3c0bf3993"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"33deee96fe4426c223b9b85a8e61f268752d1a52","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"f6a36943_73372b2e","updated":"2025-08-02 16:01:40.000000000","message":"Thanks!","commit_id":"9442336fd45ff651688632203a9775f3c0bf3993"},{"author":{"_account_id":1002344,"name":"Adrien Charruel","email":"acharruel@nanoxplore.com","username":"acharruel","status":"NanoXplore"},"change_message_id":"0b13f6d40bccdf89c44919095c860c5f866dd0a7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"492cf659_e7d4009a","updated":"2025-08-04 08:14:43.000000000","message":"Hi Marc,\n\nThanks for the review.\nI just pushed the fixes in patchset 13.","commit_id":"94f76faaf954d95055b66efcba1a263942db1913"}],"src/jtag/drivers/angie.c":[{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"1549daf702d03141ba53fd03884602b063417112","unresolved":true,"context_lines":[{"line_number":9,"context_line":" * \u003caboudjelida@nanoxplore.com\u003e"},{"line_number":10,"context_line":" ****************************************************************************/"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"#include \"helper/log.h\""},{"line_number":13,"context_line":"#ifdef HAVE_CONFIG_H"},{"line_number":14,"context_line":"#include \"config.h\""},{"line_number":15,"context_line":"#endif"}],"source_content_type":"text/x-csrc","patch_set":7,"id":"abae6eff_0b41b32e","line":12,"updated":"2025-06-07 19:48:25.000000000","message":"No, the very first include file must be \u0027config.h\u0027.\nPlease move this include \u0027helper/log.h\u0027 below","commit_id":"318bcf876b4d3c14fc91683c0476d453db4ff329"},{"author":{"_account_id":1002344,"name":"Adrien Charruel","email":"acharruel@nanoxplore.com","username":"acharruel","status":"NanoXplore"},"change_message_id":"5b6a4ca5dff2c26c55e662809dfcaf363edc20ad","unresolved":true,"context_lines":[{"line_number":9,"context_line":" * \u003caboudjelida@nanoxplore.com\u003e"},{"line_number":10,"context_line":" ****************************************************************************/"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"#include \"helper/log.h\""},{"line_number":13,"context_line":"#ifdef HAVE_CONFIG_H"},{"line_number":14,"context_line":"#include \"config.h\""},{"line_number":15,"context_line":"#endif"}],"source_content_type":"text/x-csrc","patch_set":7,"id":"fcdd92a0_641aadd2","line":12,"in_reply_to":"abae6eff_0b41b32e","updated":"2025-06-11 10:01:21.000000000","message":"Agreed.\nThis include is not required anyway.","commit_id":"318bcf876b4d3c14fc91683c0476d453db4ff329"},{"author":{"_account_id":1002344,"name":"Adrien Charruel","email":"acharruel@nanoxplore.com","username":"acharruel","status":"NanoXplore"},"change_message_id":"3e16d993d22c764abe41d2e5e3da115e64aa60ec","unresolved":false,"context_lines":[{"line_number":9,"context_line":" * \u003caboudjelida@nanoxplore.com\u003e"},{"line_number":10,"context_line":" ****************************************************************************/"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"#include \"helper/log.h\""},{"line_number":13,"context_line":"#ifdef HAVE_CONFIG_H"},{"line_number":14,"context_line":"#include \"config.h\""},{"line_number":15,"context_line":"#endif"}],"source_content_type":"text/x-csrc","patch_set":7,"id":"d2378ad6_c27b68e8","line":12,"in_reply_to":"fcdd92a0_641aadd2","updated":"2025-06-17 09:22:48.000000000","message":"Done","commit_id":"318bcf876b4d3c14fc91683c0476d453db4ff329"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"1549daf702d03141ba53fd03884602b063417112","unresolved":true,"context_lines":[{"line_number":86,"context_line":"#define ANGIE_VID\t\t\t    0x584E /* NX Vendor id */"},{"line_number":87,"context_line":"#define ANGIE_NPROG_PID\t\t\t0x424E /* ANGIE non programmed */"},{"line_number":88,"context_line":"#define ANGIE_PROG_OOCD_PID\t\t0x414F /* ANGIE programmed OpenOCD */"},{"line_number":89,"context_line":"#define ANGIE_PROG_NXB2_PID\t\t0x4a55 /* ANGIE programmed Nxbase2 */"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"#define TCK_GPIO\t\t0"},{"line_number":92,"context_line":"#define TDI_GPIO\t\t1"}],"source_content_type":"text/x-csrc","patch_set":7,"id":"ebcbf857_312fa97f","line":89,"updated":"2025-06-07 19:48:25.000000000","message":"So you have stopped supporting PID 0x4255 and 0x4355.\nShould these be removed from `contrib/60-openocd.rules` too?","commit_id":"318bcf876b4d3c14fc91683c0476d453db4ff329"},{"author":{"_account_id":1002344,"name":"Adrien Charruel","email":"acharruel@nanoxplore.com","username":"acharruel","status":"NanoXplore"},"change_message_id":"3e16d993d22c764abe41d2e5e3da115e64aa60ec","unresolved":false,"context_lines":[{"line_number":86,"context_line":"#define ANGIE_VID\t\t\t    0x584E /* NX Vendor id */"},{"line_number":87,"context_line":"#define ANGIE_NPROG_PID\t\t\t0x424E /* ANGIE non programmed */"},{"line_number":88,"context_line":"#define ANGIE_PROG_OOCD_PID\t\t0x414F /* ANGIE programmed OpenOCD */"},{"line_number":89,"context_line":"#define ANGIE_PROG_NXB2_PID\t\t0x4a55 /* ANGIE programmed Nxbase2 */"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"#define TCK_GPIO\t\t0"},{"line_number":92,"context_line":"#define TDI_GPIO\t\t1"}],"source_content_type":"text/x-csrc","patch_set":7,"id":"1db06f8e_14e13517","line":89,"in_reply_to":"ac53e287_a7b90c87","updated":"2025-06-17 09:22:48.000000000","message":"I confirmed those IDs are not used anymore.","commit_id":"318bcf876b4d3c14fc91683c0476d453db4ff329"},{"author":{"_account_id":1002344,"name":"Adrien Charruel","email":"acharruel@nanoxplore.com","username":"acharruel","status":"NanoXplore"},"change_message_id":"5b6a4ca5dff2c26c55e662809dfcaf363edc20ad","unresolved":true,"context_lines":[{"line_number":86,"context_line":"#define ANGIE_VID\t\t\t    0x584E /* NX Vendor id */"},{"line_number":87,"context_line":"#define ANGIE_NPROG_PID\t\t\t0x424E /* ANGIE non programmed */"},{"line_number":88,"context_line":"#define ANGIE_PROG_OOCD_PID\t\t0x414F /* ANGIE programmed OpenOCD */"},{"line_number":89,"context_line":"#define ANGIE_PROG_NXB2_PID\t\t0x4a55 /* ANGIE programmed Nxbase2 */"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"#define TCK_GPIO\t\t0"},{"line_number":92,"context_line":"#define TDI_GPIO\t\t1"}],"source_content_type":"text/x-csrc","patch_set":7,"id":"ac53e287_a7b90c87","line":89,"in_reply_to":"ebcbf857_312fa97f","updated":"2025-06-11 10:01:21.000000000","message":"Good point.\nI\u0027m not sure how the PID has been chosen. I\u0027ll check with my coworker.","commit_id":"318bcf876b4d3c14fc91683c0476d453db4ff329"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"24a6317a9ef055156314001068d73f154c9d0d3d","unresolved":true,"context_lines":[{"line_number":169,"context_line":"\tlist_for_each_entry_safe(entry, tmp, \u0026queue-\u003elist, list) {"},{"line_number":170,"context_line":"\t\tint scan_size \u003d jtag_scan_size(entry-\u003ecmd);"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"\t\t//iterate over each bit in scan data :"},{"line_number":173,"context_line":"\t\tfor (int bit_cnt \u003d 0; bit_cnt \u003c scan_size; bit_cnt++) {"},{"line_number":174,"context_line":"\t\t\t// calculate byte index :"},{"line_number":175,"context_line":"\t\t\tint bytec \u003d bit_cnt / 8;"}],"source_content_type":"text/x-csrc","patch_set":10,"id":"a8a580c8_3165ba8e","line":172,"updated":"2025-06-20 23:30:49.000000000","message":"add a space after `//`","commit_id":"7bd283841c8ad827492b1066947b3050f3fdbef6"},{"author":{"_account_id":1002344,"name":"Adrien Charruel","email":"acharruel@nanoxplore.com","username":"acharruel","status":"NanoXplore"},"change_message_id":"c3503c380d5803b602ae2d777c99af11321f5ad7","unresolved":false,"context_lines":[{"line_number":169,"context_line":"\tlist_for_each_entry_safe(entry, tmp, \u0026queue-\u003elist, list) {"},{"line_number":170,"context_line":"\t\tint scan_size \u003d jtag_scan_size(entry-\u003ecmd);"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"\t\t//iterate over each bit in scan data :"},{"line_number":173,"context_line":"\t\tfor (int bit_cnt \u003d 0; bit_cnt \u003c scan_size; bit_cnt++) {"},{"line_number":174,"context_line":"\t\t\t// calculate byte index :"},{"line_number":175,"context_line":"\t\t\tint bytec \u003d bit_cnt / 8;"}],"source_content_type":"text/x-csrc","patch_set":10,"id":"87a6ba04_1dde5ac0","line":172,"in_reply_to":"a8a580c8_3165ba8e","updated":"2025-06-25 14:06:10.000000000","message":"Done","commit_id":"7bd283841c8ad827492b1066947b3050f3fdbef6"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"24a6317a9ef055156314001068d73f154c9d0d3d","unresolved":true,"context_lines":[{"line_number":221,"context_line":" * @param xfer_size: amount of bytes to transfer"},{"line_number":222,"context_line":" * @param offset: total bytes already sent during this transfer, this will"},{"line_number":223,"context_line":" *                offset the receive buffer accordingly"},{"line_number":224,"context_line":" * @return amount of bytes sent or a negative error code"},{"line_number":225,"context_line":" */"},{"line_number":226,"context_line":"static int angie_buffer_flush_chunk(struct angie *device,"},{"line_number":227,"context_line":"\t\t\t\t\t\t\t\t\tint xfer_size,"}],"source_content_type":"text/x-csrc","patch_set":10,"id":"1cce09dc_097559c2","line":224,"updated":"2025-06-20 23:30:49.000000000","message":"No, don\u0027t mix error codes with values.\nIf you need to return a value, then pass an additional pointer as parameter to the function.\nIn this case it\u0027s even easier, because the code either returns an error or returns the input parameter `xfer_size`, already known by the caller. You can skip returning the value!","commit_id":"7bd283841c8ad827492b1066947b3050f3fdbef6"},{"author":{"_account_id":1002344,"name":"Adrien Charruel","email":"acharruel@nanoxplore.com","username":"acharruel","status":"NanoXplore"},"change_message_id":"c3503c380d5803b602ae2d777c99af11321f5ad7","unresolved":false,"context_lines":[{"line_number":221,"context_line":" * @param xfer_size: amount of bytes to transfer"},{"line_number":222,"context_line":" * @param offset: total bytes already sent during this transfer, this will"},{"line_number":223,"context_line":" *                offset the receive buffer accordingly"},{"line_number":224,"context_line":" * @return amount of bytes sent or a negative error code"},{"line_number":225,"context_line":" */"},{"line_number":226,"context_line":"static int angie_buffer_flush_chunk(struct angie *device,"},{"line_number":227,"context_line":"\t\t\t\t\t\t\t\t\tint xfer_size,"}],"source_content_type":"text/x-csrc","patch_set":10,"id":"3c2119fa_e2f171f5","line":224,"in_reply_to":"1cce09dc_097559c2","updated":"2025-06-25 14:06:10.000000000","message":"Done","commit_id":"7bd283841c8ad827492b1066947b3050f3fdbef6"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"24a6317a9ef055156314001068d73f154c9d0d3d","unresolved":true,"context_lines":[{"line_number":235,"context_line":""},{"line_number":236,"context_line":"\tret \u003d jtag_libusb_control_transfer(device-\u003eusbdev,"},{"line_number":237,"context_line":"\t\tLIBUSB_ENDPOINT_OUT | LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_RECIPIENT_DEVICE,"},{"line_number":238,"context_line":"\t\tVR_DATAOUTOPEN, 0, 0, (char *)gpifcnt, 4, 1000, NULL);"},{"line_number":239,"context_line":"\tif (ret !\u003d ERROR_OK) {"},{"line_number":240,"context_line":"\t\tLOG_ERROR(\"Failed to send GPIF count to target\");"},{"line_number":241,"context_line":"\t\tgoto exit;"}],"source_content_type":"text/x-csrc","patch_set":10,"id":"a664dd48_b209eb1c","line":238,"updated":"2025-06-20 23:30:49.000000000","message":"Instead of `4` use `sizeof(gpifcnt)`\nHere and also below, instead of `1000` define and use a macro e.g.\n`#define ANGIE_USB_TIMEOUT_MS 1000`\nor reuse the existing `LIBUSB_TIMEOUT_MS` that is set to `6000`.","commit_id":"7bd283841c8ad827492b1066947b3050f3fdbef6"},{"author":{"_account_id":1002344,"name":"Adrien Charruel","email":"acharruel@nanoxplore.com","username":"acharruel","status":"NanoXplore"},"change_message_id":"c3503c380d5803b602ae2d777c99af11321f5ad7","unresolved":false,"context_lines":[{"line_number":235,"context_line":""},{"line_number":236,"context_line":"\tret \u003d jtag_libusb_control_transfer(device-\u003eusbdev,"},{"line_number":237,"context_line":"\t\tLIBUSB_ENDPOINT_OUT | LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_RECIPIENT_DEVICE,"},{"line_number":238,"context_line":"\t\tVR_DATAOUTOPEN, 0, 0, (char *)gpifcnt, 4, 1000, NULL);"},{"line_number":239,"context_line":"\tif (ret !\u003d ERROR_OK) {"},{"line_number":240,"context_line":"\t\tLOG_ERROR(\"Failed to send GPIF count to target\");"},{"line_number":241,"context_line":"\t\tgoto exit;"}],"source_content_type":"text/x-csrc","patch_set":10,"id":"09d68a08_fac89083","line":238,"in_reply_to":"a664dd48_b209eb1c","updated":"2025-06-25 14:06:10.000000000","message":"Done","commit_id":"7bd283841c8ad827492b1066947b3050f3fdbef6"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"24a6317a9ef055156314001068d73f154c9d0d3d","unresolved":true,"context_lines":[{"line_number":266,"context_line":"\t}"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"exit:"},{"line_number":269,"context_line":"\tif (ret \u003c 0) {"},{"line_number":270,"context_line":"\t\tLOG_ERROR(\"Failed to transfer USB chunk\");"},{"line_number":271,"context_line":"\t\treturn ret;"},{"line_number":272,"context_line":"\t} else {"}],"source_content_type":"text/x-csrc","patch_set":10,"id":"3156dc8b_1a4b8615","line":269,"updated":"2025-06-20 23:30:49.000000000","message":"All error checks should be\n`if (ret !\u003d ERROR_OK) {`\nor similar","commit_id":"7bd283841c8ad827492b1066947b3050f3fdbef6"},{"author":{"_account_id":1002344,"name":"Adrien Charruel","email":"acharruel@nanoxplore.com","username":"acharruel","status":"NanoXplore"},"change_message_id":"c3503c380d5803b602ae2d777c99af11321f5ad7","unresolved":false,"context_lines":[{"line_number":266,"context_line":"\t}"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"exit:"},{"line_number":269,"context_line":"\tif (ret \u003c 0) {"},{"line_number":270,"context_line":"\t\tLOG_ERROR(\"Failed to transfer USB chunk\");"},{"line_number":271,"context_line":"\t\treturn ret;"},{"line_number":272,"context_line":"\t} else {"}],"source_content_type":"text/x-csrc","patch_set":10,"id":"4c724b75_0ad5af02","line":269,"in_reply_to":"3156dc8b_1a4b8615","updated":"2025-06-25 14:06:10.000000000","message":"Done","commit_id":"7bd283841c8ad827492b1066947b3050f3fdbef6"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"24a6317a9ef055156314001068d73f154c9d0d3d","unresolved":true,"context_lines":[{"line_number":281,"context_line":" * Then the read queue list is executed once the read buffer has been retrieved."},{"line_number":282,"context_line":" *"},{"line_number":283,"context_line":" * @param device: Angie device pointer"},{"line_number":284,"context_line":" * @return amount of bytes sent or a negative error code"},{"line_number":285,"context_line":" */"},{"line_number":286,"context_line":"static int angie_buffer_flush(struct angie *device)"},{"line_number":287,"context_line":"{"}],"source_content_type":"text/x-csrc","patch_set":10,"id":"3d6cb2c3_ddfa508a","line":284,"updated":"2025-06-20 23:30:49.000000000","message":"As above, don\u0027t mix error codes and values.\nToo many callers, I don\u0027t know if we can skip returning the value, so safer changing the prototype:\n`static int angie_buffer_flush(struct angie *device, unsigned int *transferred)`\n\nSimilar issues in the functions below.","commit_id":"7bd283841c8ad827492b1066947b3050f3fdbef6"},{"author":{"_account_id":1002344,"name":"Adrien Charruel","email":"acharruel@nanoxplore.com","username":"acharruel","status":"NanoXplore"},"change_message_id":"c3503c380d5803b602ae2d777c99af11321f5ad7","unresolved":false,"context_lines":[{"line_number":281,"context_line":" * Then the read queue list is executed once the read buffer has been retrieved."},{"line_number":282,"context_line":" *"},{"line_number":283,"context_line":" * @param device: Angie device pointer"},{"line_number":284,"context_line":" * @return amount of bytes sent or a negative error code"},{"line_number":285,"context_line":" */"},{"line_number":286,"context_line":"static int angie_buffer_flush(struct angie *device)"},{"line_number":287,"context_line":"{"}],"source_content_type":"text/x-csrc","patch_set":10,"id":"5718ddd3_681fab50","line":284,"in_reply_to":"3d6cb2c3_ddfa508a","updated":"2025-06-25 14:06:10.000000000","message":"Agree\nI reworked the transfer functions, I didn\u0027t need to check the size everywhere, so it could be simplified.","commit_id":"7bd283841c8ad827492b1066947b3050f3fdbef6"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"24a6317a9ef055156314001068d73f154c9d0d3d","unresolved":true,"context_lines":[{"line_number":387,"context_line":"\tint ret \u003d jtag_libusb_open(avids, apids, NULL, \u0026usb_dev, NULL);"},{"line_number":388,"context_line":"\tif (ret !\u003d ERROR_OK) {"},{"line_number":389,"context_line":"\t\tLOG_ERROR(\"Failed to open ANGIE USB interface\");"},{"line_number":390,"context_line":"\t\tgoto exit;"},{"line_number":391,"context_line":"\t}"},{"line_number":392,"context_line":""},{"line_number":393,"context_line":"\tdevice-\u003eusbdev \u003d usb_dev;"}],"source_content_type":"text/x-csrc","patch_set":10,"id":"926a02e2_443bc775","line":390,"updated":"2025-06-20 23:30:49.000000000","message":"directly `return ret;`","commit_id":"7bd283841c8ad827492b1066947b3050f3fdbef6"},{"author":{"_account_id":1002344,"name":"Adrien Charruel","email":"acharruel@nanoxplore.com","username":"acharruel","status":"NanoXplore"},"change_message_id":"c3503c380d5803b602ae2d777c99af11321f5ad7","unresolved":false,"context_lines":[{"line_number":387,"context_line":"\tint ret \u003d jtag_libusb_open(avids, apids, NULL, \u0026usb_dev, NULL);"},{"line_number":388,"context_line":"\tif (ret !\u003d ERROR_OK) {"},{"line_number":389,"context_line":"\t\tLOG_ERROR(\"Failed to open ANGIE USB interface\");"},{"line_number":390,"context_line":"\t\tgoto exit;"},{"line_number":391,"context_line":"\t}"},{"line_number":392,"context_line":""},{"line_number":393,"context_line":"\tdevice-\u003eusbdev \u003d usb_dev;"}],"source_content_type":"text/x-csrc","patch_set":10,"id":"4480ef86_57b985ea","line":390,"in_reply_to":"926a02e2_443bc775","updated":"2025-06-25 14:06:10.000000000","message":"Done","commit_id":"7bd283841c8ad827492b1066947b3050f3fdbef6"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"24a6317a9ef055156314001068d73f154c9d0d3d","unresolved":true,"context_lines":[{"line_number":392,"context_line":""},{"line_number":393,"context_line":"\tdevice-\u003eusbdev \u003d usb_dev;"},{"line_number":394,"context_line":""},{"line_number":395,"context_line":"exit:"},{"line_number":396,"context_line":"\treturn ret;"},{"line_number":397,"context_line":"}"},{"line_number":398,"context_line":""},{"line_number":399,"context_line":"/**"}],"source_content_type":"text/x-csrc","patch_set":10,"id":"5368f28f_3222a535","line":396,"range":{"start_line":395,"start_character":0,"end_line":396,"end_character":12},"updated":"2025-06-20 23:30:49.000000000","message":"drop the label and directly `return ERROR_OK;`","commit_id":"7bd283841c8ad827492b1066947b3050f3fdbef6"},{"author":{"_account_id":1002344,"name":"Adrien Charruel","email":"acharruel@nanoxplore.com","username":"acharruel","status":"NanoXplore"},"change_message_id":"c3503c380d5803b602ae2d777c99af11321f5ad7","unresolved":false,"context_lines":[{"line_number":392,"context_line":""},{"line_number":393,"context_line":"\tdevice-\u003eusbdev \u003d usb_dev;"},{"line_number":394,"context_line":""},{"line_number":395,"context_line":"exit:"},{"line_number":396,"context_line":"\treturn ret;"},{"line_number":397,"context_line":"}"},{"line_number":398,"context_line":""},{"line_number":399,"context_line":"/**"}],"source_content_type":"text/x-csrc","patch_set":10,"id":"c8041294_f45e4509","line":396,"range":{"start_line":395,"start_character":0,"end_line":396,"end_character":12},"in_reply_to":"5368f28f_3222a535","updated":"2025-06-25 14:06:10.000000000","message":"Done","commit_id":"7bd283841c8ad827492b1066947b3050f3fdbef6"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"24a6317a9ef055156314001068d73f154c9d0d3d","unresolved":true,"context_lines":[{"line_number":405,"context_line":"static int angie_usb_close(struct angie *device)"},{"line_number":406,"context_line":"{"},{"line_number":407,"context_line":"\tif (device-\u003eusbdev) {"},{"line_number":408,"context_line":"\t\tif (libusb_release_interface(device-\u003eusbdev, 0) !\u003d 0) {"},{"line_number":409,"context_line":"\t\t\tLOG_ERROR(\"Could not release interface 0\");"},{"line_number":410,"context_line":"\t\t\treturn ERROR_FAIL;"},{"line_number":411,"context_line":"\t\t}"}],"source_content_type":"text/x-csrc","patch_set":10,"id":"30d1f16d_582210cf","line":408,"updated":"2025-06-20 23:30:49.000000000","message":"respect the libusb return values\n`if (libusb_release_interface(...) !\u003d LIBUSB_SUCCESS) {`","commit_id":"7bd283841c8ad827492b1066947b3050f3fdbef6"},{"author":{"_account_id":1002344,"name":"Adrien Charruel","email":"acharruel@nanoxplore.com","username":"acharruel","status":"NanoXplore"},"change_message_id":"c3503c380d5803b602ae2d777c99af11321f5ad7","unresolved":false,"context_lines":[{"line_number":405,"context_line":"static int angie_usb_close(struct angie *device)"},{"line_number":406,"context_line":"{"},{"line_number":407,"context_line":"\tif (device-\u003eusbdev) {"},{"line_number":408,"context_line":"\t\tif (libusb_release_interface(device-\u003eusbdev, 0) !\u003d 0) {"},{"line_number":409,"context_line":"\t\t\tLOG_ERROR(\"Could not release interface 0\");"},{"line_number":410,"context_line":"\t\t\treturn ERROR_FAIL;"},{"line_number":411,"context_line":"\t\t}"}],"source_content_type":"text/x-csrc","patch_set":10,"id":"e78f89b3_05a7ec7b","line":408,"in_reply_to":"30d1f16d_582210cf","updated":"2025-06-25 14:06:10.000000000","message":"Done","commit_id":"7bd283841c8ad827492b1066947b3050f3fdbef6"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"24a6317a9ef055156314001068d73f154c9d0d3d","unresolved":true,"context_lines":[{"line_number":407,"context_line":"\tif (device-\u003eusbdev) {"},{"line_number":408,"context_line":"\t\tif (libusb_release_interface(device-\u003eusbdev, 0) !\u003d 0) {"},{"line_number":409,"context_line":"\t\t\tLOG_ERROR(\"Could not release interface 0\");"},{"line_number":410,"context_line":"\t\t\treturn ERROR_FAIL;"},{"line_number":411,"context_line":"\t\t}"},{"line_number":412,"context_line":""},{"line_number":413,"context_line":"\t\tjtag_libusb_close(device-\u003eusbdev);"}],"source_content_type":"text/x-csrc","patch_set":10,"id":"beae0e70_d0412a50","line":410,"updated":"2025-06-20 23:30:49.000000000","message":"probably you can skip the `return` here, and go ahead closing the libusb device.\nI\u0027m not sure!","commit_id":"7bd283841c8ad827492b1066947b3050f3fdbef6"},{"author":{"_account_id":1002344,"name":"Adrien Charruel","email":"acharruel@nanoxplore.com","username":"acharruel","status":"NanoXplore"},"change_message_id":"c3503c380d5803b602ae2d777c99af11321f5ad7","unresolved":false,"context_lines":[{"line_number":407,"context_line":"\tif (device-\u003eusbdev) {"},{"line_number":408,"context_line":"\t\tif (libusb_release_interface(device-\u003eusbdev, 0) !\u003d 0) {"},{"line_number":409,"context_line":"\t\t\tLOG_ERROR(\"Could not release interface 0\");"},{"line_number":410,"context_line":"\t\t\treturn ERROR_FAIL;"},{"line_number":411,"context_line":"\t\t}"},{"line_number":412,"context_line":""},{"line_number":413,"context_line":"\t\tjtag_libusb_close(device-\u003eusbdev);"}],"source_content_type":"text/x-csrc","patch_set":10,"id":"830c4c6b_9b1f81fc","line":410,"in_reply_to":"beae0e70_d0412a50","updated":"2025-06-25 14:06:10.000000000","message":"Done","commit_id":"7bd283841c8ad827492b1066947b3050f3fdbef6"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"24a6317a9ef055156314001068d73f154c9d0d3d","unresolved":true,"context_lines":[{"line_number":447,"context_line":"\t\t\t\t\t\t\t\t\t\tint section_index)"},{"line_number":448,"context_line":"{"},{"line_number":449,"context_line":"\tint addr, bytes_remaining, chunk_size;"},{"line_number":450,"context_line":"\tuint8_t data[ANGIE_FW_SECTION_SIZE];"},{"line_number":451,"context_line":"\tuint8_t *data_ptr \u003d data;"},{"line_number":452,"context_line":"\tuint16_t size;"},{"line_number":453,"context_line":"\tsize_t size_read;"}],"source_content_type":"text/x-csrc","patch_set":10,"id":"b0d55d7a_a738d1ab","line":450,"updated":"2025-06-20 23:30:49.000000000","message":"16 kbyte in the stack!\nPeanuts for a PC, not sure for embedded devices...\nI would suggest to move some code in the loop of the caller, and there:\n- outside the loop allocate a buffer of 16k reuse for all sections,\n- call `image_read_section()` in the loop,\n- pass here the buffer and the data size","commit_id":"7bd283841c8ad827492b1066947b3050f3fdbef6"},{"author":{"_account_id":1002344,"name":"Adrien Charruel","email":"acharruel@nanoxplore.com","username":"acharruel","status":"NanoXplore"},"change_message_id":"c3503c380d5803b602ae2d777c99af11321f5ad7","unresolved":false,"context_lines":[{"line_number":447,"context_line":"\t\t\t\t\t\t\t\t\t\tint section_index)"},{"line_number":448,"context_line":"{"},{"line_number":449,"context_line":"\tint addr, bytes_remaining, chunk_size;"},{"line_number":450,"context_line":"\tuint8_t data[ANGIE_FW_SECTION_SIZE];"},{"line_number":451,"context_line":"\tuint8_t *data_ptr \u003d data;"},{"line_number":452,"context_line":"\tuint16_t size;"},{"line_number":453,"context_line":"\tsize_t size_read;"}],"source_content_type":"text/x-csrc","patch_set":10,"id":"6c474648_b6cf5c88","line":450,"in_reply_to":"b0d55d7a_a738d1ab","updated":"2025-06-25 14:06:10.000000000","message":"Done","commit_id":"7bd283841c8ad827492b1066947b3050f3fdbef6"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"24a6317a9ef055156314001068d73f154c9d0d3d","unresolved":true,"context_lines":[{"line_number":570,"context_line":""},{"line_number":571,"context_line":"\tint ret \u003d angie_load_firmware(device, filename);"},{"line_number":572,"context_line":"\tif (ret !\u003d ERROR_OK)"},{"line_number":573,"context_line":"\t\tgoto exit;"},{"line_number":574,"context_line":""},{"line_number":575,"context_line":"\tret \u003d angie_usb_close(device);"},{"line_number":576,"context_line":"\tif (ret !\u003d ERROR_OK)"}],"source_content_type":"text/x-csrc","patch_set":10,"id":"c36e2e3f_b97b5a64","line":573,"updated":"2025-06-20 23:30:49.000000000","message":"there is nothing in the exit path. Directly:\n`return ret;`\nalso below","commit_id":"7bd283841c8ad827492b1066947b3050f3fdbef6"},{"author":{"_account_id":1002344,"name":"Adrien Charruel","email":"acharruel@nanoxplore.com","username":"acharruel","status":"NanoXplore"},"change_message_id":"c3503c380d5803b602ae2d777c99af11321f5ad7","unresolved":false,"context_lines":[{"line_number":570,"context_line":""},{"line_number":571,"context_line":"\tint ret \u003d angie_load_firmware(device, filename);"},{"line_number":572,"context_line":"\tif (ret !\u003d ERROR_OK)"},{"line_number":573,"context_line":"\t\tgoto exit;"},{"line_number":574,"context_line":""},{"line_number":575,"context_line":"\tret \u003d angie_usb_close(device);"},{"line_number":576,"context_line":"\tif (ret !\u003d ERROR_OK)"}],"source_content_type":"text/x-csrc","patch_set":10,"id":"56953fab_f7169ab8","line":573,"in_reply_to":"c36e2e3f_b97b5a64","updated":"2025-06-25 14:06:10.000000000","message":"Done","commit_id":"7bd283841c8ad827492b1066947b3050f3fdbef6"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"24a6317a9ef055156314001068d73f154c9d0d3d","unresolved":true,"context_lines":[{"line_number":642,"context_line":"\th_u32_to_be(gpifcnt, bitstream_size);"},{"line_number":643,"context_line":"\tret \u003d jtag_libusb_control_transfer(device-\u003eusbdev,"},{"line_number":644,"context_line":"\t\tLIBUSB_ENDPOINT_OUT | LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_RECIPIENT_DEVICE,"},{"line_number":645,"context_line":"\t\tVR_CFGOPEN, 0, 0, (char *)gpifcnt, 4, 1000, \u0026transferred);"},{"line_number":646,"context_line":"\tif (ret !\u003d ERROR_OK) {"},{"line_number":647,"context_line":"\t\tLOG_ERROR(\"Failed opencfg\");"},{"line_number":648,"context_line":"\t\treturn ERROR_FAIL;"}],"source_content_type":"text/x-csrc","patch_set":10,"id":"fd294dd6_fc1fdbc9","line":645,"updated":"2025-06-20 23:30:49.000000000","message":"replace `4` with `sizeof(gpifcnt)`","commit_id":"7bd283841c8ad827492b1066947b3050f3fdbef6"},{"author":{"_account_id":1002344,"name":"Adrien Charruel","email":"acharruel@nanoxplore.com","username":"acharruel","status":"NanoXplore"},"change_message_id":"c3503c380d5803b602ae2d777c99af11321f5ad7","unresolved":false,"context_lines":[{"line_number":642,"context_line":"\th_u32_to_be(gpifcnt, bitstream_size);"},{"line_number":643,"context_line":"\tret \u003d jtag_libusb_control_transfer(device-\u003eusbdev,"},{"line_number":644,"context_line":"\t\tLIBUSB_ENDPOINT_OUT | LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_RECIPIENT_DEVICE,"},{"line_number":645,"context_line":"\t\tVR_CFGOPEN, 0, 0, (char *)gpifcnt, 4, 1000, \u0026transferred);"},{"line_number":646,"context_line":"\tif (ret !\u003d ERROR_OK) {"},{"line_number":647,"context_line":"\t\tLOG_ERROR(\"Failed opencfg\");"},{"line_number":648,"context_line":"\t\treturn ERROR_FAIL;"}],"source_content_type":"text/x-csrc","patch_set":10,"id":"4fb78918_9214b999","line":645,"in_reply_to":"fd294dd6_fc1fdbc9","updated":"2025-06-25 14:06:10.000000000","message":"Done","commit_id":"7bd283841c8ad827492b1066947b3050f3fdbef6"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"24a6317a9ef055156314001068d73f154c9d0d3d","unresolved":true,"context_lines":[{"line_number":660,"context_line":""},{"line_number":661,"context_line":"\tLOG_INFO(\"Bitstream sent successfully.\");"},{"line_number":662,"context_line":""},{"line_number":663,"context_line":"\tfree(bitstream_data);"},{"line_number":664,"context_line":"\tfclose(bitstream_file);"},{"line_number":665,"context_line":""},{"line_number":666,"context_line":"\treturn ERROR_OK;"}],"source_content_type":"text/x-csrc","patch_set":10,"id":"6e6d4868_4a5f5a71","line":663,"updated":"2025-06-20 23:30:49.000000000","message":"in this function it would have make sense adding an exit path for `free()` and `fclose()`","commit_id":"7bd283841c8ad827492b1066947b3050f3fdbef6"},{"author":{"_account_id":1002344,"name":"Adrien Charruel","email":"acharruel@nanoxplore.com","username":"acharruel","status":"NanoXplore"},"change_message_id":"c3503c380d5803b602ae2d777c99af11321f5ad7","unresolved":false,"context_lines":[{"line_number":660,"context_line":""},{"line_number":661,"context_line":"\tLOG_INFO(\"Bitstream sent successfully.\");"},{"line_number":662,"context_line":""},{"line_number":663,"context_line":"\tfree(bitstream_data);"},{"line_number":664,"context_line":"\tfclose(bitstream_file);"},{"line_number":665,"context_line":""},{"line_number":666,"context_line":"\treturn ERROR_OK;"}],"source_content_type":"text/x-csrc","patch_set":10,"id":"7f9fe6bd_40d60777","line":663,"in_reply_to":"6e6d4868_4a5f5a71","updated":"2025-06-25 14:06:10.000000000","message":"Done","commit_id":"7bd283841c8ad827492b1066947b3050f3fdbef6"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"24a6317a9ef055156314001068d73f154c9d0d3d","unresolved":true,"context_lines":[{"line_number":679,"context_line":"\t// Get String Descriptor to determine if firmware needs to be loaded"},{"line_number":680,"context_line":"\tint ret \u003d libusb_get_device_descriptor(libusb_get_device(angie_handle-\u003eusbdev),"},{"line_number":681,"context_line":"\t\t\t\t\t\t\t\t\t\t\u0026desc);"},{"line_number":682,"context_line":"\tif (ret \u003c 0)"},{"line_number":683,"context_line":"\t\t// Could not get descriptor -\u003e Unconfigured or original Keil firmware"},{"line_number":684,"context_line":"\t\treturn true;"},{"line_number":685,"context_line":"\telse if (desc.idProduct !\u003d 0x414f)"}],"source_content_type":"text/x-csrc","patch_set":10,"id":"14ffab07_a5c7dae7","line":682,"updated":"2025-06-20 23:30:49.000000000","message":"`if (ret !\u003d LIBUSB_SUCCESS)`","commit_id":"7bd283841c8ad827492b1066947b3050f3fdbef6"},{"author":{"_account_id":1002344,"name":"Adrien Charruel","email":"acharruel@nanoxplore.com","username":"acharruel","status":"NanoXplore"},"change_message_id":"c3503c380d5803b602ae2d777c99af11321f5ad7","unresolved":false,"context_lines":[{"line_number":679,"context_line":"\t// Get String Descriptor to determine if firmware needs to be loaded"},{"line_number":680,"context_line":"\tint ret \u003d libusb_get_device_descriptor(libusb_get_device(angie_handle-\u003eusbdev),"},{"line_number":681,"context_line":"\t\t\t\t\t\t\t\t\t\t\u0026desc);"},{"line_number":682,"context_line":"\tif (ret \u003c 0)"},{"line_number":683,"context_line":"\t\t// Could not get descriptor -\u003e Unconfigured or original Keil firmware"},{"line_number":684,"context_line":"\t\treturn true;"},{"line_number":685,"context_line":"\telse if (desc.idProduct !\u003d 0x414f)"}],"source_content_type":"text/x-csrc","patch_set":10,"id":"7e3b812b_4ecbb3fb","line":682,"in_reply_to":"14ffab07_a5c7dae7","updated":"2025-06-25 14:06:10.000000000","message":"Done","commit_id":"7bd283841c8ad827492b1066947b3050f3fdbef6"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"24a6317a9ef055156314001068d73f154c9d0d3d","unresolved":false,"context_lines":[{"line_number":699,"context_line":"\t\ttap_set_end_state(state);"},{"line_number":700,"context_line":"\t} else {"},{"line_number":701,"context_line":"\t\tLOG_ERROR(\"BUG: %i is not a valid end state\", state);"},{"line_number":702,"context_line":"\t\texit(-1);"},{"line_number":703,"context_line":"\t}"},{"line_number":704,"context_line":"}"},{"line_number":705,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":10,"id":"4c8f7882_0d879807","line":702,"updated":"2025-06-20 23:30:49.000000000","message":"I don\u0027t like the `exit()` here, but I see it is done in other 15 drivers.\nLet\u0027s keep it!","commit_id":"7bd283841c8ad827492b1066947b3050f3fdbef6"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"24a6317a9ef055156314001068d73f154c9d0d3d","unresolved":true,"context_lines":[{"line_number":739,"context_line":"\ttap_set_state(tap_get_end_state());"},{"line_number":740,"context_line":""},{"line_number":741,"context_line":"\treturn cmd_size;"},{"line_number":742,"context_line":"exit:"},{"line_number":743,"context_line":"\treturn ret;"},{"line_number":744,"context_line":"}"},{"line_number":745,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":10,"id":"310b261d_70baeeba","line":742,"updated":"2025-06-20 23:30:49.000000000","message":"no need for exit path","commit_id":"7bd283841c8ad827492b1066947b3050f3fdbef6"},{"author":{"_account_id":1002344,"name":"Adrien Charruel","email":"acharruel@nanoxplore.com","username":"acharruel","status":"NanoXplore"},"change_message_id":"c3503c380d5803b602ae2d777c99af11321f5ad7","unresolved":false,"context_lines":[{"line_number":739,"context_line":"\ttap_set_state(tap_get_end_state());"},{"line_number":740,"context_line":""},{"line_number":741,"context_line":"\treturn cmd_size;"},{"line_number":742,"context_line":"exit:"},{"line_number":743,"context_line":"\treturn ret;"},{"line_number":744,"context_line":"}"},{"line_number":745,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":10,"id":"f6682555_9f08c360","line":742,"in_reply_to":"310b261d_70baeeba","updated":"2025-06-25 14:06:10.000000000","message":"Done","commit_id":"7bd283841c8ad827492b1066947b3050f3fdbef6"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"24a6317a9ef055156314001068d73f154c9d0d3d","unresolved":true,"context_lines":[{"line_number":766,"context_line":"\t/* add scan size */"},{"line_number":767,"context_line":"\tcmd_size +\u003d jtag_scan_size(cmd) * 2;"},{"line_number":768,"context_line":""},{"line_number":769,"context_line":"\t/*"},{"line_number":770,"context_line":"\t\t * move to cmd specified end state"},{"line_number":771,"context_line":"\t\t * Also, see below function:"},{"line_number":772,"context_line":"\t\t * we *KNOW* the above loop transitioned out of"},{"line_number":773,"context_line":"\t\t * the shift state, so we skip the first state"}],"source_content_type":"text/x-csrc","patch_set":10,"id":"6bcc5e94_54043da8","line":770,"range":{"start_line":769,"start_character":1,"end_line":770,"end_character":27},"updated":"2025-06-20 23:30:49.000000000","message":"indentation issue","commit_id":"7bd283841c8ad827492b1066947b3050f3fdbef6"},{"author":{"_account_id":1002344,"name":"Adrien Charruel","email":"acharruel@nanoxplore.com","username":"acharruel","status":"NanoXplore"},"change_message_id":"c3503c380d5803b602ae2d777c99af11321f5ad7","unresolved":false,"context_lines":[{"line_number":766,"context_line":"\t/* add scan size */"},{"line_number":767,"context_line":"\tcmd_size +\u003d jtag_scan_size(cmd) * 2;"},{"line_number":768,"context_line":""},{"line_number":769,"context_line":"\t/*"},{"line_number":770,"context_line":"\t\t * move to cmd specified end state"},{"line_number":771,"context_line":"\t\t * Also, see below function:"},{"line_number":772,"context_line":"\t\t * we *KNOW* the above loop transitioned out of"},{"line_number":773,"context_line":"\t\t * the shift state, so we skip the first state"}],"source_content_type":"text/x-csrc","patch_set":10,"id":"afa079c4_467c3ccb","line":770,"range":{"start_line":769,"start_character":1,"end_line":770,"end_character":27},"in_reply_to":"6bcc5e94_54043da8","updated":"2025-06-25 14:06:10.000000000","message":"Done","commit_id":"7bd283841c8ad827492b1066947b3050f3fdbef6"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"830116e6a94156d558e3e1d6dedfbe35cbafcf3f","unresolved":true,"context_lines":[{"line_number":394,"context_line":""},{"line_number":395,"context_line":"\tdevice-\u003eusbdev \u003d usb_dev;"},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"\treturn ret;"},{"line_number":398,"context_line":"}"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"/**"}],"source_content_type":"text/x-csrc","patch_set":11,"id":"3be62157_7c8a575f","line":397,"updated":"2025-07-26 22:38:54.000000000","message":"`return ERROR_OK;`","commit_id":"11ac1151076b3282eb3c6e50637a323070c6e926"},{"author":{"_account_id":1002344,"name":"Adrien Charruel","email":"acharruel@nanoxplore.com","username":"acharruel","status":"NanoXplore"},"change_message_id":"1107597674dbf549f7d21bdbc29701b27b383f47","unresolved":false,"context_lines":[{"line_number":394,"context_line":""},{"line_number":395,"context_line":"\tdevice-\u003eusbdev \u003d usb_dev;"},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"\treturn ret;"},{"line_number":398,"context_line":"}"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"/**"}],"source_content_type":"text/x-csrc","patch_set":11,"id":"a08a36a8_dfc37b8d","line":397,"in_reply_to":"3be62157_7c8a575f","updated":"2025-07-29 08:17:35.000000000","message":"Done","commit_id":"11ac1151076b3282eb3c6e50637a323070c6e926"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"830116e6a94156d558e3e1d6dedfbe35cbafcf3f","unresolved":true,"context_lines":[{"line_number":406,"context_line":"static int angie_usb_close(struct angie *device)"},{"line_number":407,"context_line":"{"},{"line_number":408,"context_line":"\tif (device-\u003eusbdev) {"},{"line_number":409,"context_line":"\t\tif (libusb_release_interface(device-\u003eusbdev, 0) !\u003d LIBUSB_SUCCESS)"},{"line_number":410,"context_line":"\t\t\tLOG_ERROR(\"Could not release interface 0\");"},{"line_number":411,"context_line":""},{"line_number":412,"context_line":"\t\tjtag_libusb_close(device-\u003eusbdev);"}],"source_content_type":"text/x-csrc","patch_set":11,"id":"0402e416_8c3e1198","line":409,"updated":"2025-07-26 22:38:54.000000000","message":"The callers of `angie_usb_close()` check the returned value.\nyou should propagate the error.","commit_id":"11ac1151076b3282eb3c6e50637a323070c6e926"},{"author":{"_account_id":1002344,"name":"Adrien Charruel","email":"acharruel@nanoxplore.com","username":"acharruel","status":"NanoXplore"},"change_message_id":"1107597674dbf549f7d21bdbc29701b27b383f47","unresolved":false,"context_lines":[{"line_number":406,"context_line":"static int angie_usb_close(struct angie *device)"},{"line_number":407,"context_line":"{"},{"line_number":408,"context_line":"\tif (device-\u003eusbdev) {"},{"line_number":409,"context_line":"\t\tif (libusb_release_interface(device-\u003eusbdev, 0) !\u003d LIBUSB_SUCCESS)"},{"line_number":410,"context_line":"\t\t\tLOG_ERROR(\"Could not release interface 0\");"},{"line_number":411,"context_line":""},{"line_number":412,"context_line":"\t\tjtag_libusb_close(device-\u003eusbdev);"}],"source_content_type":"text/x-csrc","patch_set":11,"id":"2b540d37_2e4db852","line":409,"in_reply_to":"0402e416_8c3e1198","updated":"2025-07-29 08:17:35.000000000","message":"Done","commit_id":"11ac1151076b3282eb3c6e50637a323070c6e926"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"830116e6a94156d558e3e1d6dedfbe35cbafcf3f","unresolved":true,"context_lines":[{"line_number":508,"context_line":""},{"line_number":509,"context_line":"\tuint8_t *data \u003d malloc(ANGIE_FW_SECTION_SIZE);"},{"line_number":510,"context_line":"\tif (!data)"},{"line_number":511,"context_line":"\t\treturn ERROR_FAIL;"},{"line_number":512,"context_line":""},{"line_number":513,"context_line":"\t/* Download all sections in the image to ANGIE */"},{"line_number":514,"context_line":"\tfor (unsigned int i \u003d 0; i \u003c angie_firmware_image.num_sections; i++) {"}],"source_content_type":"text/x-csrc","patch_set":11,"id":"ec6eb754_65579596","line":511,"updated":"2025-07-26 22:38:54.000000000","message":"Add also\n`LOG_ERROR(\"Out of memory\");`","commit_id":"11ac1151076b3282eb3c6e50637a323070c6e926"},{"author":{"_account_id":1002344,"name":"Adrien Charruel","email":"acharruel@nanoxplore.com","username":"acharruel","status":"NanoXplore"},"change_message_id":"1107597674dbf549f7d21bdbc29701b27b383f47","unresolved":false,"context_lines":[{"line_number":508,"context_line":""},{"line_number":509,"context_line":"\tuint8_t *data \u003d malloc(ANGIE_FW_SECTION_SIZE);"},{"line_number":510,"context_line":"\tif (!data)"},{"line_number":511,"context_line":"\t\treturn ERROR_FAIL;"},{"line_number":512,"context_line":""},{"line_number":513,"context_line":"\t/* Download all sections in the image to ANGIE */"},{"line_number":514,"context_line":"\tfor (unsigned int i \u003d 0; i \u003c angie_firmware_image.num_sections; i++) {"}],"source_content_type":"text/x-csrc","patch_set":11,"id":"2cf47251_fbece3a9","line":511,"in_reply_to":"ec6eb754_65579596","updated":"2025-07-29 08:17:35.000000000","message":"Done","commit_id":"11ac1151076b3282eb3c6e50637a323070c6e926"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"830116e6a94156d558e3e1d6dedfbe35cbafcf3f","unresolved":true,"context_lines":[{"line_number":583,"context_line":"\tif (ret !\u003d ERROR_OK)"},{"line_number":584,"context_line":"\t\treturn ret;"},{"line_number":585,"context_line":""},{"line_number":586,"context_line":"\tret \u003d libusb_claim_interface(angie_handle-\u003eusbdev, 0);"},{"line_number":587,"context_line":"\tif (ret !\u003d LIBUSB_SUCCESS) {"},{"line_number":588,"context_line":"\t\tret \u003d ERROR_FAIL;"},{"line_number":589,"context_line":"\t\treturn ret;"},{"line_number":590,"context_line":"\t}"},{"line_number":591,"context_line":""},{"line_number":592,"context_line":"\treturn ret;"},{"line_number":593,"context_line":"}"},{"line_number":594,"context_line":""},{"line_number":595,"context_line":"/**"}],"source_content_type":"text/x-csrc","patch_set":11,"id":"6775ebb6_7d2d511f","line":592,"range":{"start_line":586,"start_character":1,"end_line":592,"end_character":12},"updated":"2025-07-26 22:38:54.000000000","message":"To avoid mixing libusb and OpenOCD codes in the same variable, please rewrite this as:\n```\nif (libusb_claim_interface(angie_handle-\u003eusbdev, 0) !\u003d LIBUSB_SUCCESS)\n    return ERROR_FAIL;\n    \nreturn ERROR_OK;\n```","commit_id":"11ac1151076b3282eb3c6e50637a323070c6e926"},{"author":{"_account_id":1002344,"name":"Adrien Charruel","email":"acharruel@nanoxplore.com","username":"acharruel","status":"NanoXplore"},"change_message_id":"1107597674dbf549f7d21bdbc29701b27b383f47","unresolved":false,"context_lines":[{"line_number":583,"context_line":"\tif (ret !\u003d ERROR_OK)"},{"line_number":584,"context_line":"\t\treturn ret;"},{"line_number":585,"context_line":""},{"line_number":586,"context_line":"\tret \u003d libusb_claim_interface(angie_handle-\u003eusbdev, 0);"},{"line_number":587,"context_line":"\tif (ret !\u003d LIBUSB_SUCCESS) {"},{"line_number":588,"context_line":"\t\tret \u003d ERROR_FAIL;"},{"line_number":589,"context_line":"\t\treturn ret;"},{"line_number":590,"context_line":"\t}"},{"line_number":591,"context_line":""},{"line_number":592,"context_line":"\treturn ret;"},{"line_number":593,"context_line":"}"},{"line_number":594,"context_line":""},{"line_number":595,"context_line":"/**"}],"source_content_type":"text/x-csrc","patch_set":11,"id":"1d52ecf8_a385f8b9","line":592,"range":{"start_line":586,"start_character":1,"end_line":592,"end_character":12},"in_reply_to":"6775ebb6_7d2d511f","updated":"2025-07-29 08:17:35.000000000","message":"Done","commit_id":"11ac1151076b3282eb3c6e50637a323070c6e926"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"830116e6a94156d558e3e1d6dedfbe35cbafcf3f","unresolved":true,"context_lines":[{"line_number":734,"context_line":""},{"line_number":735,"context_line":"\ttap_set_state(tap_get_end_state());"},{"line_number":736,"context_line":""},{"line_number":737,"context_line":"\treturn ret;"},{"line_number":738,"context_line":"}"},{"line_number":739,"context_line":""},{"line_number":740,"context_line":"/**"}],"source_content_type":"text/x-csrc","patch_set":11,"id":"ade38a06_67954d28","line":737,"updated":"2025-07-26 22:38:54.000000000","message":"`return ERROR_OK;`","commit_id":"11ac1151076b3282eb3c6e50637a323070c6e926"},{"author":{"_account_id":1002344,"name":"Adrien Charruel","email":"acharruel@nanoxplore.com","username":"acharruel","status":"NanoXplore"},"change_message_id":"1107597674dbf549f7d21bdbc29701b27b383f47","unresolved":false,"context_lines":[{"line_number":734,"context_line":""},{"line_number":735,"context_line":"\ttap_set_state(tap_get_end_state());"},{"line_number":736,"context_line":""},{"line_number":737,"context_line":"\treturn ret;"},{"line_number":738,"context_line":"}"},{"line_number":739,"context_line":""},{"line_number":740,"context_line":"/**"}],"source_content_type":"text/x-csrc","patch_set":11,"id":"c20ca087_ac97437f","line":737,"in_reply_to":"ade38a06_67954d28","updated":"2025-07-29 08:17:35.000000000","message":"Done","commit_id":"11ac1151076b3282eb3c6e50637a323070c6e926"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"830116e6a94156d558e3e1d6dedfbe35cbafcf3f","unresolved":true,"context_lines":[{"line_number":851,"context_line":"\t\tstruct read_queue_entry *entry \u003d malloc(sizeof(*entry));"},{"line_number":852,"context_line":"\t\tif (!entry) {"},{"line_number":853,"context_line":"\t\t\tfree(buffer);"},{"line_number":854,"context_line":"\t\t\treturn ERROR_OK;"},{"line_number":855,"context_line":"\t\t}"},{"line_number":856,"context_line":""},{"line_number":857,"context_line":"\t\tentry-\u003ereply_buffer_offset \u003d start_offset;"}],"source_content_type":"text/x-csrc","patch_set":11,"id":"87c8e966_0624b77d","line":854,"updated":"2025-07-26 22:38:54.000000000","message":"we arrive here because `entry \u003d malloc(...)` has failed.\nWe need\n`LOG_ERROR(\"Out of memory\");`\nDo we need to propagate the error? Or `ERROR_OK` is correct in this case?","commit_id":"11ac1151076b3282eb3c6e50637a323070c6e926"},{"author":{"_account_id":1002344,"name":"Adrien Charruel","email":"acharruel@nanoxplore.com","username":"acharruel","status":"NanoXplore"},"change_message_id":"1107597674dbf549f7d21bdbc29701b27b383f47","unresolved":false,"context_lines":[{"line_number":851,"context_line":"\t\tstruct read_queue_entry *entry \u003d malloc(sizeof(*entry));"},{"line_number":852,"context_line":"\t\tif (!entry) {"},{"line_number":853,"context_line":"\t\t\tfree(buffer);"},{"line_number":854,"context_line":"\t\t\treturn ERROR_OK;"},{"line_number":855,"context_line":"\t\t}"},{"line_number":856,"context_line":""},{"line_number":857,"context_line":"\t\tentry-\u003ereply_buffer_offset \u003d start_offset;"}],"source_content_type":"text/x-csrc","patch_set":11,"id":"3b7de862_8e158956","line":854,"in_reply_to":"87c8e966_0624b77d","updated":"2025-07-29 08:17:35.000000000","message":"Right, this is a mistake I need to propagate the error.","commit_id":"11ac1151076b3282eb3c6e50637a323070c6e926"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"830116e6a94156d558e3e1d6dedfbe35cbafcf3f","unresolved":true,"context_lines":[{"line_number":897,"context_line":"static int angie_jtag_execute_runtest(struct angie *device,"},{"line_number":898,"context_line":"\t\t\t\t\t\t\t\t\t  const struct runtest_command *cmd)"},{"line_number":899,"context_line":"{"},{"line_number":900,"context_line":"\tint ret \u003d ERROR_OK;"},{"line_number":901,"context_line":"\tenum tap_state saved_end_state \u003d tap_get_end_state();"},{"line_number":902,"context_line":""},{"line_number":903,"context_line":"\tLOG_DEBUG_IO(\"RUNTEST: %d cycles\", cmd-\u003enum_cycles);"}],"source_content_type":"text/x-csrc","patch_set":11,"id":"e9f85194_987875ae","line":900,"updated":"2025-07-26 22:38:54.000000000","message":"No need for initialization in this case.\n`int ret;`","commit_id":"11ac1151076b3282eb3c6e50637a323070c6e926"},{"author":{"_account_id":1002344,"name":"Adrien Charruel","email":"acharruel@nanoxplore.com","username":"acharruel","status":"NanoXplore"},"change_message_id":"1107597674dbf549f7d21bdbc29701b27b383f47","unresolved":false,"context_lines":[{"line_number":897,"context_line":"static int angie_jtag_execute_runtest(struct angie *device,"},{"line_number":898,"context_line":"\t\t\t\t\t\t\t\t\t  const struct runtest_command *cmd)"},{"line_number":899,"context_line":"{"},{"line_number":900,"context_line":"\tint ret \u003d ERROR_OK;"},{"line_number":901,"context_line":"\tenum tap_state saved_end_state \u003d tap_get_end_state();"},{"line_number":902,"context_line":""},{"line_number":903,"context_line":"\tLOG_DEBUG_IO(\"RUNTEST: %d cycles\", cmd-\u003enum_cycles);"}],"source_content_type":"text/x-csrc","patch_set":11,"id":"002070db_c454e9f0","line":900,"in_reply_to":"e9f85194_987875ae","updated":"2025-07-29 08:17:35.000000000","message":"Done","commit_id":"11ac1151076b3282eb3c6e50637a323070c6e926"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"830116e6a94156d558e3e1d6dedfbe35cbafcf3f","unresolved":true,"context_lines":[{"line_number":931,"context_line":"\t\t\treturn ret;"},{"line_number":932,"context_line":"\t}"},{"line_number":933,"context_line":""},{"line_number":934,"context_line":"\treturn ret;"},{"line_number":935,"context_line":"}"},{"line_number":936,"context_line":""},{"line_number":937,"context_line":"/**"}],"source_content_type":"text/x-csrc","patch_set":11,"id":"3cadfbbd_db39578c","line":934,"updated":"2025-07-26 22:38:54.000000000","message":"`return ERROR_OK;`","commit_id":"11ac1151076b3282eb3c6e50637a323070c6e926"},{"author":{"_account_id":1002344,"name":"Adrien Charruel","email":"acharruel@nanoxplore.com","username":"acharruel","status":"NanoXplore"},"change_message_id":"1107597674dbf549f7d21bdbc29701b27b383f47","unresolved":false,"context_lines":[{"line_number":931,"context_line":"\t\t\treturn ret;"},{"line_number":932,"context_line":"\t}"},{"line_number":933,"context_line":""},{"line_number":934,"context_line":"\treturn ret;"},{"line_number":935,"context_line":"}"},{"line_number":936,"context_line":""},{"line_number":937,"context_line":"/**"}],"source_content_type":"text/x-csrc","patch_set":11,"id":"6de0df91_5f82a18b","line":934,"in_reply_to":"3cadfbbd_db39578c","updated":"2025-07-29 08:17:35.000000000","message":"Done","commit_id":"11ac1151076b3282eb3c6e50637a323070c6e926"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"830116e6a94156d558e3e1d6dedfbe35cbafcf3f","unresolved":true,"context_lines":[{"line_number":946,"context_line":"static int angie_jtag_execute_tms(struct angie *device,"},{"line_number":947,"context_line":"\t\t\t\t\t\t\t\t  const struct tms_command *cmd)"},{"line_number":948,"context_line":"{"},{"line_number":949,"context_line":"\tint ret \u003d ERROR_OK;"},{"line_number":950,"context_line":"\tunsigned int num_bits \u003d cmd-\u003enum_bits;"},{"line_number":951,"context_line":"\tconst uint8_t *bits \u003d cmd-\u003ebits;"},{"line_number":952,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":11,"id":"3849f665_5a973612","line":949,"updated":"2025-07-26 22:38:54.000000000","message":"No need for initialization in this case.\n`int ret;`","commit_id":"11ac1151076b3282eb3c6e50637a323070c6e926"},{"author":{"_account_id":1002344,"name":"Adrien Charruel","email":"acharruel@nanoxplore.com","username":"acharruel","status":"NanoXplore"},"change_message_id":"1107597674dbf549f7d21bdbc29701b27b383f47","unresolved":false,"context_lines":[{"line_number":946,"context_line":"static int angie_jtag_execute_tms(struct angie *device,"},{"line_number":947,"context_line":"\t\t\t\t\t\t\t\t  const struct tms_command *cmd)"},{"line_number":948,"context_line":"{"},{"line_number":949,"context_line":"\tint ret \u003d ERROR_OK;"},{"line_number":950,"context_line":"\tunsigned int num_bits \u003d cmd-\u003enum_bits;"},{"line_number":951,"context_line":"\tconst uint8_t *bits \u003d cmd-\u003ebits;"},{"line_number":952,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":11,"id":"94a88be3_35751916","line":949,"in_reply_to":"3849f665_5a973612","updated":"2025-07-29 08:17:35.000000000","message":"Done","commit_id":"11ac1151076b3282eb3c6e50637a323070c6e926"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"830116e6a94156d558e3e1d6dedfbe35cbafcf3f","unresolved":true,"context_lines":[{"line_number":962,"context_line":"\t\tif (ret !\u003d ERROR_OK)"},{"line_number":963,"context_line":"\t\t\treturn ret;"},{"line_number":964,"context_line":"\t}"},{"line_number":965,"context_line":"\tret \u003d angie_buffer_append(device, 0, tms, 0);"},{"line_number":966,"context_line":"\tif (ret !\u003d ERROR_OK)"},{"line_number":967,"context_line":"\t\treturn ret;"},{"line_number":968,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":11,"id":"db4cf241_aefb5941","line":965,"updated":"2025-07-26 22:38:54.000000000","message":"you can directly\n`return angie_buffer_append(device, 0, tms, 0);`","commit_id":"11ac1151076b3282eb3c6e50637a323070c6e926"},{"author":{"_account_id":1002344,"name":"Adrien Charruel","email":"acharruel@nanoxplore.com","username":"acharruel","status":"NanoXplore"},"change_message_id":"1107597674dbf549f7d21bdbc29701b27b383f47","unresolved":false,"context_lines":[{"line_number":962,"context_line":"\t\tif (ret !\u003d ERROR_OK)"},{"line_number":963,"context_line":"\t\t\treturn ret;"},{"line_number":964,"context_line":"\t}"},{"line_number":965,"context_line":"\tret \u003d angie_buffer_append(device, 0, tms, 0);"},{"line_number":966,"context_line":"\tif (ret !\u003d ERROR_OK)"},{"line_number":967,"context_line":"\t\treturn ret;"},{"line_number":968,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":11,"id":"81af71c8_2d93a2a9","line":965,"in_reply_to":"db4cf241_aefb5941","updated":"2025-07-29 08:17:35.000000000","message":"Done","commit_id":"11ac1151076b3282eb3c6e50637a323070c6e926"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"830116e6a94156d558e3e1d6dedfbe35cbafcf3f","unresolved":true,"context_lines":[{"line_number":998,"context_line":"\telse if (cmd-\u003esrst \u003d\u003d 0)"},{"line_number":999,"context_line":"\t\tout_value |\u003d (1 \u003c\u003c NSYSRST_GPIO);\t\t/* switch /SYSRST high */"},{"line_number":1000,"context_line":""},{"line_number":1001,"context_line":"\tint ret \u003d angie_buffer_append_simple(device, out_value);"},{"line_number":1002,"context_line":"\tif (ret !\u003d ERROR_OK)"},{"line_number":1003,"context_line":"\t\treturn ret;"},{"line_number":1004,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":11,"id":"ca80215b_2208ecae","line":1001,"updated":"2025-07-26 22:38:54.000000000","message":"directly\n`return angie_buffer_append_simple(device, out_value);`","commit_id":"11ac1151076b3282eb3c6e50637a323070c6e926"},{"author":{"_account_id":1002344,"name":"Adrien Charruel","email":"acharruel@nanoxplore.com","username":"acharruel","status":"NanoXplore"},"change_message_id":"1107597674dbf549f7d21bdbc29701b27b383f47","unresolved":false,"context_lines":[{"line_number":998,"context_line":"\telse if (cmd-\u003esrst \u003d\u003d 0)"},{"line_number":999,"context_line":"\t\tout_value |\u003d (1 \u003c\u003c NSYSRST_GPIO);\t\t/* switch /SYSRST high */"},{"line_number":1000,"context_line":""},{"line_number":1001,"context_line":"\tint ret \u003d angie_buffer_append_simple(device, out_value);"},{"line_number":1002,"context_line":"\tif (ret !\u003d ERROR_OK)"},{"line_number":1003,"context_line":"\t\treturn ret;"},{"line_number":1004,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":11,"id":"873eb2db_da0def7c","line":1001,"in_reply_to":"ca80215b_2208ecae","updated":"2025-07-29 08:17:35.000000000","message":"Done","commit_id":"11ac1151076b3282eb3c6e50637a323070c6e926"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"830116e6a94156d558e3e1d6dedfbe35cbafcf3f","unresolved":true,"context_lines":[{"line_number":1020,"context_line":"static int angie_jtag_execute_stableclocks(struct angie *device,"},{"line_number":1021,"context_line":"\t\t\t\t\t\t\t\t\t\t   const struct stableclocks_command *cmd)"},{"line_number":1022,"context_line":"{"},{"line_number":1023,"context_line":"\tint ret \u003d ERROR_OK;"},{"line_number":1024,"context_line":"\tint tms \u003d (tap_get_state() \u003d\u003d TAP_RESET ? 1 : 0);"},{"line_number":1025,"context_line":""},{"line_number":1026,"context_line":"\t/* send num_cycles clocks onto the cable */"}],"source_content_type":"text/x-csrc","patch_set":11,"id":"4cf84a9e_31778f10","line":1023,"updated":"2025-07-26 22:38:54.000000000","message":"remove this line","commit_id":"11ac1151076b3282eb3c6e50637a323070c6e926"},{"author":{"_account_id":1002344,"name":"Adrien Charruel","email":"acharruel@nanoxplore.com","username":"acharruel","status":"NanoXplore"},"change_message_id":"1107597674dbf549f7d21bdbc29701b27b383f47","unresolved":false,"context_lines":[{"line_number":1020,"context_line":"static int angie_jtag_execute_stableclocks(struct angie *device,"},{"line_number":1021,"context_line":"\t\t\t\t\t\t\t\t\t\t   const struct stableclocks_command *cmd)"},{"line_number":1022,"context_line":"{"},{"line_number":1023,"context_line":"\tint ret \u003d ERROR_OK;"},{"line_number":1024,"context_line":"\tint tms \u003d (tap_get_state() \u003d\u003d TAP_RESET ? 1 : 0);"},{"line_number":1025,"context_line":""},{"line_number":1026,"context_line":"\t/* send num_cycles clocks onto the cable */"}],"source_content_type":"text/x-csrc","patch_set":11,"id":"2335459b_16efa118","line":1023,"in_reply_to":"4cf84a9e_31778f10","updated":"2025-07-29 08:17:35.000000000","message":"Done","commit_id":"11ac1151076b3282eb3c6e50637a323070c6e926"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"830116e6a94156d558e3e1d6dedfbe35cbafcf3f","unresolved":true,"context_lines":[{"line_number":1025,"context_line":""},{"line_number":1026,"context_line":"\t/* send num_cycles clocks onto the cable */"},{"line_number":1027,"context_line":"\tfor (unsigned int i \u003d 0; i \u003c cmd-\u003enum_cycles; i++) {"},{"line_number":1028,"context_line":"\t\tret \u003d angie_buffer_append(device, 1, tms, 0);"},{"line_number":1029,"context_line":"\t\tif (ret !\u003d ERROR_OK)"},{"line_number":1030,"context_line":"\t\t\treturn ret;"},{"line_number":1031,"context_line":"\t\tret \u003d angie_buffer_append(device, 0, tms, 0);"}],"source_content_type":"text/x-csrc","patch_set":11,"id":"9a0e1460_98236fb4","line":1028,"updated":"2025-07-26 22:38:54.000000000","message":"`int ret \u003d ...`","commit_id":"11ac1151076b3282eb3c6e50637a323070c6e926"},{"author":{"_account_id":1002344,"name":"Adrien Charruel","email":"acharruel@nanoxplore.com","username":"acharruel","status":"NanoXplore"},"change_message_id":"1107597674dbf549f7d21bdbc29701b27b383f47","unresolved":false,"context_lines":[{"line_number":1025,"context_line":""},{"line_number":1026,"context_line":"\t/* send num_cycles clocks onto the cable */"},{"line_number":1027,"context_line":"\tfor (unsigned int i \u003d 0; i \u003c cmd-\u003enum_cycles; i++) {"},{"line_number":1028,"context_line":"\t\tret \u003d angie_buffer_append(device, 1, tms, 0);"},{"line_number":1029,"context_line":"\t\tif (ret !\u003d ERROR_OK)"},{"line_number":1030,"context_line":"\t\t\treturn ret;"},{"line_number":1031,"context_line":"\t\tret \u003d angie_buffer_append(device, 0, tms, 0);"}],"source_content_type":"text/x-csrc","patch_set":11,"id":"4d2fe945_efeea93b","line":1028,"in_reply_to":"9a0e1460_98236fb4","updated":"2025-07-29 08:17:35.000000000","message":"Done","commit_id":"11ac1151076b3282eb3c6e50637a323070c6e926"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"830116e6a94156d558e3e1d6dedfbe35cbafcf3f","unresolved":true,"context_lines":[{"line_number":1036,"context_line":"\tLOG_DEBUG_IO(\"clocks %i while in %s\", cmd-\u003enum_cycles,"},{"line_number":1037,"context_line":"\t\ttap_state_name(tap_get_state()));"},{"line_number":1038,"context_line":""},{"line_number":1039,"context_line":"\treturn ret;"},{"line_number":1040,"context_line":"}"},{"line_number":1041,"context_line":""},{"line_number":1042,"context_line":"/**"}],"source_content_type":"text/x-csrc","patch_set":11,"id":"5bf32d15_fd727c9e","line":1039,"updated":"2025-07-26 22:38:54.000000000","message":"`return ERROR_OK;`","commit_id":"11ac1151076b3282eb3c6e50637a323070c6e926"},{"author":{"_account_id":1002344,"name":"Adrien Charruel","email":"acharruel@nanoxplore.com","username":"acharruel","status":"NanoXplore"},"change_message_id":"1107597674dbf549f7d21bdbc29701b27b383f47","unresolved":false,"context_lines":[{"line_number":1036,"context_line":"\tLOG_DEBUG_IO(\"clocks %i while in %s\", cmd-\u003enum_cycles,"},{"line_number":1037,"context_line":"\t\ttap_state_name(tap_get_state()));"},{"line_number":1038,"context_line":""},{"line_number":1039,"context_line":"\treturn ret;"},{"line_number":1040,"context_line":"}"},{"line_number":1041,"context_line":""},{"line_number":1042,"context_line":"/**"}],"source_content_type":"text/x-csrc","patch_set":11,"id":"320fe4dc_6f164e83","line":1039,"in_reply_to":"5bf32d15_fd727c9e","updated":"2025-07-29 08:17:35.000000000","message":"Done","commit_id":"11ac1151076b3282eb3c6e50637a323070c6e926"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"830116e6a94156d558e3e1d6dedfbe35cbafcf3f","unresolved":true,"context_lines":[{"line_number":1053,"context_line":"\tLOG_DEBUG_IO(\"statemove end in %s\", tap_state_name(cmd-\u003eend_state));"},{"line_number":1054,"context_line":""},{"line_number":1055,"context_line":"\tangie_set_end_state(cmd-\u003eend_state);"},{"line_number":1056,"context_line":"\tret \u003d angie_state_move(device, 0);"},{"line_number":1057,"context_line":"\tif (ret !\u003d ERROR_OK)"},{"line_number":1058,"context_line":"\t\treturn ret;"},{"line_number":1059,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":11,"id":"749a2667_5692acbe","line":1056,"updated":"2025-07-26 22:38:54.000000000","message":"`return angie_state_move(device, 0);`","commit_id":"11ac1151076b3282eb3c6e50637a323070c6e926"},{"author":{"_account_id":1002344,"name":"Adrien Charruel","email":"acharruel@nanoxplore.com","username":"acharruel","status":"NanoXplore"},"change_message_id":"1107597674dbf549f7d21bdbc29701b27b383f47","unresolved":false,"context_lines":[{"line_number":1053,"context_line":"\tLOG_DEBUG_IO(\"statemove end in %s\", tap_state_name(cmd-\u003eend_state));"},{"line_number":1054,"context_line":""},{"line_number":1055,"context_line":"\tangie_set_end_state(cmd-\u003eend_state);"},{"line_number":1056,"context_line":"\tret \u003d angie_state_move(device, 0);"},{"line_number":1057,"context_line":"\tif (ret !\u003d ERROR_OK)"},{"line_number":1058,"context_line":"\t\treturn ret;"},{"line_number":1059,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":11,"id":"b65aa715_06122a46","line":1056,"in_reply_to":"749a2667_5692acbe","updated":"2025-07-29 08:17:35.000000000","message":"Done","commit_id":"11ac1151076b3282eb3c6e50637a323070c6e926"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"830116e6a94156d558e3e1d6dedfbe35cbafcf3f","unresolved":true,"context_lines":[{"line_number":1070,"context_line":"static int angie_jtag_execute_pathmove(struct angie *device,"},{"line_number":1071,"context_line":"\t\t\t\t\t\t\t\t\t   const struct pathmove_command *cmd)"},{"line_number":1072,"context_line":"{"},{"line_number":1073,"context_line":"\tint ret \u003d ERROR_OK;"},{"line_number":1074,"context_line":"\tint num_states \u003d cmd-\u003enum_states;"},{"line_number":1075,"context_line":"\tint tms \u003d 0;"},{"line_number":1076,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":11,"id":"0a6308ca_d06c1d6b","line":1073,"updated":"2025-07-26 22:38:54.000000000","message":"`int ret;`","commit_id":"11ac1151076b3282eb3c6e50637a323070c6e926"},{"author":{"_account_id":1002344,"name":"Adrien Charruel","email":"acharruel@nanoxplore.com","username":"acharruel","status":"NanoXplore"},"change_message_id":"1107597674dbf549f7d21bdbc29701b27b383f47","unresolved":false,"context_lines":[{"line_number":1070,"context_line":"static int angie_jtag_execute_pathmove(struct angie *device,"},{"line_number":1071,"context_line":"\t\t\t\t\t\t\t\t\t   const struct pathmove_command *cmd)"},{"line_number":1072,"context_line":"{"},{"line_number":1073,"context_line":"\tint ret \u003d ERROR_OK;"},{"line_number":1074,"context_line":"\tint num_states \u003d cmd-\u003enum_states;"},{"line_number":1075,"context_line":"\tint tms \u003d 0;"},{"line_number":1076,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":11,"id":"395594f3_34dd4bc8","line":1073,"in_reply_to":"0a6308ca_d06c1d6b","updated":"2025-07-29 08:17:35.000000000","message":"Done","commit_id":"11ac1151076b3282eb3c6e50637a323070c6e926"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"830116e6a94156d558e3e1d6dedfbe35cbafcf3f","unresolved":true,"context_lines":[{"line_number":1107,"context_line":""},{"line_number":1108,"context_line":"\ttap_set_end_state(tap_get_state());"},{"line_number":1109,"context_line":""},{"line_number":1110,"context_line":"\treturn ret;"},{"line_number":1111,"context_line":"}"},{"line_number":1112,"context_line":""},{"line_number":1113,"context_line":"/**"}],"source_content_type":"text/x-csrc","patch_set":11,"id":"8e6e9556_e7858b9b","line":1110,"updated":"2025-07-26 22:38:54.000000000","message":"`return ERROR_OK;`","commit_id":"11ac1151076b3282eb3c6e50637a323070c6e926"},{"author":{"_account_id":1002344,"name":"Adrien Charruel","email":"acharruel@nanoxplore.com","username":"acharruel","status":"NanoXplore"},"change_message_id":"1107597674dbf549f7d21bdbc29701b27b383f47","unresolved":false,"context_lines":[{"line_number":1107,"context_line":""},{"line_number":1108,"context_line":"\ttap_set_end_state(tap_get_state());"},{"line_number":1109,"context_line":""},{"line_number":1110,"context_line":"\treturn ret;"},{"line_number":1111,"context_line":"}"},{"line_number":1112,"context_line":""},{"line_number":1113,"context_line":"/**"}],"source_content_type":"text/x-csrc","patch_set":11,"id":"4930d098_064a924d","line":1110,"in_reply_to":"8e6e9556_e7858b9b","updated":"2025-07-29 08:17:35.000000000","message":"Done","commit_id":"11ac1151076b3282eb3c6e50637a323070c6e926"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"830116e6a94156d558e3e1d6dedfbe35cbafcf3f","unresolved":true,"context_lines":[{"line_number":1120,"context_line":"static int angie_cmd_size(struct angie *device, const struct jtag_command *cmd)"},{"line_number":1121,"context_line":"{"},{"line_number":1122,"context_line":"\tswitch (cmd-\u003etype) {"},{"line_number":1123,"context_line":"\t\tcase JTAG_SCAN:"},{"line_number":1124,"context_line":"\t\t\treturn angie_jtag_scan_size(device, cmd-\u003ecmd.scan);"},{"line_number":1125,"context_line":"\t\tcase JTAG_TMS:"},{"line_number":1126,"context_line":"\t\t\treturn cmd-\u003ecmd.tms-\u003enum_bits + 2 + 1;"}],"source_content_type":"text/x-csrc","patch_set":11,"id":"275b96c8_21887765","line":1123,"updated":"2025-07-26 22:38:54.000000000","message":"Coding style requires `switch` and `case` aligned with the same indentation.\nSee commit message and code in\nhttps://review.openocd.org/c/openocd/+/9055","commit_id":"11ac1151076b3282eb3c6e50637a323070c6e926"},{"author":{"_account_id":1002344,"name":"Adrien Charruel","email":"acharruel@nanoxplore.com","username":"acharruel","status":"NanoXplore"},"change_message_id":"1107597674dbf549f7d21bdbc29701b27b383f47","unresolved":false,"context_lines":[{"line_number":1120,"context_line":"static int angie_cmd_size(struct angie *device, const struct jtag_command *cmd)"},{"line_number":1121,"context_line":"{"},{"line_number":1122,"context_line":"\tswitch (cmd-\u003etype) {"},{"line_number":1123,"context_line":"\t\tcase JTAG_SCAN:"},{"line_number":1124,"context_line":"\t\t\treturn angie_jtag_scan_size(device, cmd-\u003ecmd.scan);"},{"line_number":1125,"context_line":"\t\tcase JTAG_TMS:"},{"line_number":1126,"context_line":"\t\t\treturn cmd-\u003ecmd.tms-\u003enum_bits + 2 + 1;"}],"source_content_type":"text/x-csrc","patch_set":11,"id":"9034531d_9dadc396","line":1123,"in_reply_to":"275b96c8_21887765","updated":"2025-07-29 08:17:35.000000000","message":"Done","commit_id":"11ac1151076b3282eb3c6e50637a323070c6e926"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"830116e6a94156d558e3e1d6dedfbe35cbafcf3f","unresolved":true,"context_lines":[{"line_number":1162,"context_line":"\t\t\treturn retval;"},{"line_number":1163,"context_line":""},{"line_number":1164,"context_line":"\t\tswitch (cmd-\u003etype) {"},{"line_number":1165,"context_line":"\t\t\tcase JTAG_SCAN:"},{"line_number":1166,"context_line":"\t\t\t\tretval \u003d angie_jtag_execute_scan(device, cmd-\u003ecmd.scan);"},{"line_number":1167,"context_line":"\t\t\t\tif (retval !\u003d ERROR_OK)"},{"line_number":1168,"context_line":"\t\t\t\t\treturn retval;"}],"source_content_type":"text/x-csrc","patch_set":11,"id":"01391518_426c0cd8","line":1165,"updated":"2025-07-26 22:38:54.000000000","message":"Coding style requires `switch` and `case` aligned with the same indentation.\nSee commit message and code in\nhttps://review.openocd.org/c/openocd/+/9055","commit_id":"11ac1151076b3282eb3c6e50637a323070c6e926"},{"author":{"_account_id":1002344,"name":"Adrien Charruel","email":"acharruel@nanoxplore.com","username":"acharruel","status":"NanoXplore"},"change_message_id":"1107597674dbf549f7d21bdbc29701b27b383f47","unresolved":false,"context_lines":[{"line_number":1162,"context_line":"\t\t\treturn retval;"},{"line_number":1163,"context_line":""},{"line_number":1164,"context_line":"\t\tswitch (cmd-\u003etype) {"},{"line_number":1165,"context_line":"\t\t\tcase JTAG_SCAN:"},{"line_number":1166,"context_line":"\t\t\t\tretval \u003d angie_jtag_execute_scan(device, cmd-\u003ecmd.scan);"},{"line_number":1167,"context_line":"\t\t\t\tif (retval !\u003d ERROR_OK)"},{"line_number":1168,"context_line":"\t\t\t\t\treturn retval;"}],"source_content_type":"text/x-csrc","patch_set":11,"id":"78c58b6c_40763f93","line":1165,"in_reply_to":"01391518_426c0cd8","updated":"2025-07-29 08:17:35.000000000","message":"Done","commit_id":"11ac1151076b3282eb3c6e50637a323070c6e926"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"830116e6a94156d558e3e1d6dedfbe35cbafcf3f","unresolved":true,"context_lines":[{"line_number":1247,"context_line":"\tfree(angie_handle);"},{"line_number":1248,"context_line":"\tangie_handle \u003d NULL;"},{"line_number":1249,"context_line":""},{"line_number":1250,"context_line":"\treturn ret;"},{"line_number":1251,"context_line":"}"},{"line_number":1252,"context_line":""},{"line_number":1253,"context_line":"/**"}],"source_content_type":"text/x-csrc","patch_set":11,"id":"72e00a63_e89c2ab5","line":1250,"updated":"2025-07-26 22:38:54.000000000","message":"`return ERROR_OK;`","commit_id":"11ac1151076b3282eb3c6e50637a323070c6e926"},{"author":{"_account_id":1002344,"name":"Adrien Charruel","email":"acharruel@nanoxplore.com","username":"acharruel","status":"NanoXplore"},"change_message_id":"1107597674dbf549f7d21bdbc29701b27b383f47","unresolved":false,"context_lines":[{"line_number":1247,"context_line":"\tfree(angie_handle);"},{"line_number":1248,"context_line":"\tangie_handle \u003d NULL;"},{"line_number":1249,"context_line":""},{"line_number":1250,"context_line":"\treturn ret;"},{"line_number":1251,"context_line":"}"},{"line_number":1252,"context_line":""},{"line_number":1253,"context_line":"/**"}],"source_content_type":"text/x-csrc","patch_set":11,"id":"b24dd7e9_490c0d33","line":1250,"in_reply_to":"72e00a63_e89c2ab5","updated":"2025-07-29 08:17:35.000000000","message":"Done","commit_id":"11ac1151076b3282eb3c6e50637a323070c6e926"},{"author":{"_account_id":1000853,"name":"zapb","display_name":"Marc Schink","email":"dev@zapb.de","username":"zapb"},"change_message_id":"20bd4047d681a6385043565721f557b75a305c1f","unresolved":true,"context_lines":[{"line_number":317,"context_line":" * @param size to check"},{"line_number":318,"context_line":" * @return ERROR_OK on success, negative error code otherwise"},{"line_number":319,"context_line":" */"},{"line_number":320,"context_line":"static int angie_buffer_flush_check(struct angie *device, int size)"},{"line_number":321,"context_line":"{"},{"line_number":322,"context_line":"\tif (device-\u003exfer_buffer_len + size \u003e\u003d ANGIE_XFER_BUFFER_TOTAL_SIZE)"},{"line_number":323,"context_line":"\t\treturn angie_buffer_flush(device);"}],"source_content_type":"text/x-csrc","patch_set":12,"id":"db89e9e8_73a38fc5","line":320,"updated":"2025-08-02 17:16:45.000000000","message":"Use `size_t` or `unsigned int` as used for `xfer_buffer_len`.","commit_id":"9442336fd45ff651688632203a9775f3c0bf3993"},{"author":{"_account_id":1002344,"name":"Adrien Charruel","email":"acharruel@nanoxplore.com","username":"acharruel","status":"NanoXplore"},"change_message_id":"0b13f6d40bccdf89c44919095c860c5f866dd0a7","unresolved":false,"context_lines":[{"line_number":317,"context_line":" * @param size to check"},{"line_number":318,"context_line":" * @return ERROR_OK on success, negative error code otherwise"},{"line_number":319,"context_line":" */"},{"line_number":320,"context_line":"static int angie_buffer_flush_check(struct angie *device, int size)"},{"line_number":321,"context_line":"{"},{"line_number":322,"context_line":"\tif (device-\u003exfer_buffer_len + size \u003e\u003d ANGIE_XFER_BUFFER_TOTAL_SIZE)"},{"line_number":323,"context_line":"\t\treturn angie_buffer_flush(device);"}],"source_content_type":"text/x-csrc","patch_set":12,"id":"7fa9b41d_20676717","line":320,"in_reply_to":"db89e9e8_73a38fc5","updated":"2025-08-04 08:14:43.000000000","message":"Done","commit_id":"9442336fd45ff651688632203a9775f3c0bf3993"},{"author":{"_account_id":1000853,"name":"zapb","display_name":"Marc Schink","email":"dev@zapb.de","username":"zapb"},"change_message_id":"20bd4047d681a6385043565721f557b75a305c1f","unresolved":true,"context_lines":[{"line_number":446,"context_line":" * @param size: size of the data"},{"line_number":447,"context_line":" * @return ERROR_OK on success, negative error code otherwise"},{"line_number":448,"context_line":" */"},{"line_number":449,"context_line":"static int angie_write_firmware_section(struct angie *device, int address,"},{"line_number":450,"context_line":"\t\t\t\t\t\t\t\t\t\tuint8_t *data, size_t size)"},{"line_number":451,"context_line":"{"},{"line_number":452,"context_line":"\tint bytes_remaining \u003d size;"}],"source_content_type":"text/x-csrc","patch_set":12,"id":"7d8504ab_eb7171ec","line":449,"updated":"2025-08-02 17:16:45.000000000","message":"Can the address be negative? Use `uint16_t` or something similar.","commit_id":"9442336fd45ff651688632203a9775f3c0bf3993"},{"author":{"_account_id":1002344,"name":"Adrien Charruel","email":"acharruel@nanoxplore.com","username":"acharruel","status":"NanoXplore"},"change_message_id":"0b13f6d40bccdf89c44919095c860c5f866dd0a7","unresolved":false,"context_lines":[{"line_number":446,"context_line":" * @param size: size of the data"},{"line_number":447,"context_line":" * @return ERROR_OK on success, negative error code otherwise"},{"line_number":448,"context_line":" */"},{"line_number":449,"context_line":"static int angie_write_firmware_section(struct angie *device, int address,"},{"line_number":450,"context_line":"\t\t\t\t\t\t\t\t\t\tuint8_t *data, size_t size)"},{"line_number":451,"context_line":"{"},{"line_number":452,"context_line":"\tint bytes_remaining \u003d size;"}],"source_content_type":"text/x-csrc","patch_set":12,"id":"37a6b235_834c8db9","line":449,"in_reply_to":"7d8504ab_eb7171ec","updated":"2025-08-04 08:14:43.000000000","message":"Done","commit_id":"9442336fd45ff651688632203a9775f3c0bf3993"},{"author":{"_account_id":1000853,"name":"zapb","display_name":"Marc Schink","email":"dev@zapb.de","username":"zapb"},"change_message_id":"20bd4047d681a6385043565721f557b75a305c1f","unresolved":true,"context_lines":[{"line_number":519,"context_line":"\t/* Download all sections in the image to ANGIE */"},{"line_number":520,"context_line":"\tfor (unsigned int i \u003d 0; i \u003c angie_firmware_image.num_sections; i++) {"},{"line_number":521,"context_line":"\t\tsize_t size_read;"},{"line_number":522,"context_line":"\t\tuint16_t size \u003d angie_firmware_image.sections[i].size;"},{"line_number":523,"context_line":"\t\tint addr \u003d angie_firmware_image.sections[i].base_address;"},{"line_number":524,"context_line":""},{"line_number":525,"context_line":"\t\tLOG_DEBUG(\"section %02i at addr 0x%04x (size 0x%04\" PRIx16 \")\","}],"source_content_type":"text/x-csrc","patch_set":12,"id":"f73c1f64_5e06b417","line":522,"updated":"2025-08-02 17:16:45.000000000","message":"The data type of `size` in `struct imagesection` is `uint32_t`.","commit_id":"9442336fd45ff651688632203a9775f3c0bf3993"},{"author":{"_account_id":1002344,"name":"Adrien Charruel","email":"acharruel@nanoxplore.com","username":"acharruel","status":"NanoXplore"},"change_message_id":"0b13f6d40bccdf89c44919095c860c5f866dd0a7","unresolved":false,"context_lines":[{"line_number":519,"context_line":"\t/* Download all sections in the image to ANGIE */"},{"line_number":520,"context_line":"\tfor (unsigned int i \u003d 0; i \u003c angie_firmware_image.num_sections; i++) {"},{"line_number":521,"context_line":"\t\tsize_t size_read;"},{"line_number":522,"context_line":"\t\tuint16_t size \u003d angie_firmware_image.sections[i].size;"},{"line_number":523,"context_line":"\t\tint addr \u003d angie_firmware_image.sections[i].base_address;"},{"line_number":524,"context_line":""},{"line_number":525,"context_line":"\t\tLOG_DEBUG(\"section %02i at addr 0x%04x (size 0x%04\" PRIx16 \")\","}],"source_content_type":"text/x-csrc","patch_set":12,"id":"80e5362e_2198b4ac","line":522,"in_reply_to":"f73c1f64_5e06b417","updated":"2025-08-04 08:14:43.000000000","message":"Done","commit_id":"9442336fd45ff651688632203a9775f3c0bf3993"},{"author":{"_account_id":1000853,"name":"zapb","display_name":"Marc Schink","email":"dev@zapb.de","username":"zapb"},"change_message_id":"20bd4047d681a6385043565721f557b75a305c1f","unresolved":true,"context_lines":[{"line_number":686,"context_line":"\tif (ret !\u003d LIBUSB_SUCCESS)"},{"line_number":687,"context_line":"\t\t// Could not get descriptor -\u003e Unconfigured or original Keil firmware"},{"line_number":688,"context_line":"\t\treturn true;"},{"line_number":689,"context_line":"\telse if (desc.idProduct !\u003d 0x414f)"},{"line_number":690,"context_line":"\t\treturn true;"},{"line_number":691,"context_line":""},{"line_number":692,"context_line":"\treturn false;"}],"source_content_type":"text/x-csrc","patch_set":12,"id":"f063975c_80820b7b","line":689,"updated":"2025-08-02 17:16:45.000000000","message":"`ANGIE_PROG_OOCD_PID`?","commit_id":"9442336fd45ff651688632203a9775f3c0bf3993"},{"author":{"_account_id":1002344,"name":"Adrien Charruel","email":"acharruel@nanoxplore.com","username":"acharruel","status":"NanoXplore"},"change_message_id":"0b13f6d40bccdf89c44919095c860c5f866dd0a7","unresolved":false,"context_lines":[{"line_number":686,"context_line":"\tif (ret !\u003d LIBUSB_SUCCESS)"},{"line_number":687,"context_line":"\t\t// Could not get descriptor -\u003e Unconfigured or original Keil firmware"},{"line_number":688,"context_line":"\t\treturn true;"},{"line_number":689,"context_line":"\telse if (desc.idProduct !\u003d 0x414f)"},{"line_number":690,"context_line":"\t\treturn true;"},{"line_number":691,"context_line":""},{"line_number":692,"context_line":"\treturn false;"}],"source_content_type":"text/x-csrc","patch_set":12,"id":"910b67b2_5b831c70","line":689,"in_reply_to":"f063975c_80820b7b","updated":"2025-08-04 08:14:43.000000000","message":"Done","commit_id":"9442336fd45ff651688632203a9775f3c0bf3993"},{"author":{"_account_id":1000853,"name":"zapb","display_name":"Marc Schink","email":"dev@zapb.de","username":"zapb"},"change_message_id":"20bd4047d681a6385043565721f557b75a305c1f","unresolved":true,"context_lines":[{"line_number":806,"context_line":"\tangie_set_end_state(cmd-\u003eend_state);"},{"line_number":807,"context_line":""},{"line_number":808,"context_line":"\t// Execute scan"},{"line_number":809,"context_line":"\tint  scan_size \u003d jtag_build_buffer(cmd, \u0026buffer);"},{"line_number":810,"context_line":"\tenum scan_type type \u003d jtag_scan_type(cmd);"},{"line_number":811,"context_line":""},{"line_number":812,"context_line":"\t// starting byte index"}],"source_content_type":"text/x-csrc","patch_set":12,"id":"b8d98377_5644e3fc","line":809,"updated":"2025-08-02 17:16:45.000000000","message":"Too many whitespaces","commit_id":"9442336fd45ff651688632203a9775f3c0bf3993"},{"author":{"_account_id":1002344,"name":"Adrien Charruel","email":"acharruel@nanoxplore.com","username":"acharruel","status":"NanoXplore"},"change_message_id":"0b13f6d40bccdf89c44919095c860c5f866dd0a7","unresolved":false,"context_lines":[{"line_number":806,"context_line":"\tangie_set_end_state(cmd-\u003eend_state);"},{"line_number":807,"context_line":""},{"line_number":808,"context_line":"\t// Execute scan"},{"line_number":809,"context_line":"\tint  scan_size \u003d jtag_build_buffer(cmd, \u0026buffer);"},{"line_number":810,"context_line":"\tenum scan_type type \u003d jtag_scan_type(cmd);"},{"line_number":811,"context_line":""},{"line_number":812,"context_line":"\t// starting byte index"}],"source_content_type":"text/x-csrc","patch_set":12,"id":"80bd4157_a8586171","line":809,"in_reply_to":"b8d98377_5644e3fc","updated":"2025-08-04 08:14:43.000000000","message":"Done","commit_id":"9442336fd45ff651688632203a9775f3c0bf3993"},{"author":{"_account_id":1000853,"name":"zapb","display_name":"Marc Schink","email":"dev@zapb.de","username":"zapb"},"change_message_id":"20bd4047d681a6385043565721f557b75a305c1f","unresolved":true,"context_lines":[{"line_number":821,"context_line":"\t\ttms \u003d (i \u003d\u003d scan_size - 1) ? 1 : 0;"},{"line_number":822,"context_line":"\t\t// calculate byte index:"},{"line_number":823,"context_line":"\t\tint bytec \u003d i / 8;"},{"line_number":824,"context_line":"\t\t// calculate bit mask: isolate the specific bit in corresponding byte:"},{"line_number":825,"context_line":"\t\tint bcval \u003d 1 \u003c\u003c (i % 8);"},{"line_number":826,"context_line":"\t\t// if type is not SCAN_IN (not just reading data)."},{"line_number":827,"context_line":"\t\t// and the bit masked is \u00271\u0027 then tdi \u003d \u00271\u0027 :"}],"source_content_type":"text/x-csrc","patch_set":12,"id":"e5c81ee6_1ef3b3ee","line":824,"updated":"2025-08-02 17:16:45.000000000","message":"Please remove the \u0027:\u0027 at the end of all comments. It\u0027s not consistent anyway.","commit_id":"9442336fd45ff651688632203a9775f3c0bf3993"},{"author":{"_account_id":1002344,"name":"Adrien Charruel","email":"acharruel@nanoxplore.com","username":"acharruel","status":"NanoXplore"},"change_message_id":"0b13f6d40bccdf89c44919095c860c5f866dd0a7","unresolved":false,"context_lines":[{"line_number":821,"context_line":"\t\ttms \u003d (i \u003d\u003d scan_size - 1) ? 1 : 0;"},{"line_number":822,"context_line":"\t\t// calculate byte index:"},{"line_number":823,"context_line":"\t\tint bytec \u003d i / 8;"},{"line_number":824,"context_line":"\t\t// calculate bit mask: isolate the specific bit in corresponding byte:"},{"line_number":825,"context_line":"\t\tint bcval \u003d 1 \u003c\u003c (i % 8);"},{"line_number":826,"context_line":"\t\t// if type is not SCAN_IN (not just reading data)."},{"line_number":827,"context_line":"\t\t// and the bit masked is \u00271\u0027 then tdi \u003d \u00271\u0027 :"}],"source_content_type":"text/x-csrc","patch_set":12,"id":"b186505f_d26802dc","line":824,"in_reply_to":"e5c81ee6_1ef3b3ee","updated":"2025-08-04 08:14:43.000000000","message":"Done","commit_id":"9442336fd45ff651688632203a9775f3c0bf3993"},{"author":{"_account_id":1000853,"name":"zapb","display_name":"Marc Schink","email":"dev@zapb.de","username":"zapb"},"change_message_id":"20bd4047d681a6385043565721f557b75a305c1f","unresolved":true,"context_lines":[{"line_number":1018,"context_line":"{"},{"line_number":1019,"context_line":"\tint tms \u003d (tap_get_state() \u003d\u003d TAP_RESET ? 1 : 0);"},{"line_number":1020,"context_line":""},{"line_number":1021,"context_line":"\t/* send num_cycles clocks onto the cable */"},{"line_number":1022,"context_line":"\tfor (unsigned int i \u003d 0; i \u003c cmd-\u003enum_cycles; i++) {"},{"line_number":1023,"context_line":"\t\tint ret \u003d angie_buffer_append(device, 1, tms, 0);"},{"line_number":1024,"context_line":"\t\tif (ret !\u003d ERROR_OK)"}],"source_content_type":"text/x-csrc","patch_set":12,"id":"f0361e71_b4c718e4","line":1021,"updated":"2025-08-02 17:16:45.000000000","message":"Please use `//` for all single-line comments as required by the coding style","commit_id":"9442336fd45ff651688632203a9775f3c0bf3993"},{"author":{"_account_id":1002344,"name":"Adrien Charruel","email":"acharruel@nanoxplore.com","username":"acharruel","status":"NanoXplore"},"change_message_id":"0b13f6d40bccdf89c44919095c860c5f866dd0a7","unresolved":false,"context_lines":[{"line_number":1018,"context_line":"{"},{"line_number":1019,"context_line":"\tint tms \u003d (tap_get_state() \u003d\u003d TAP_RESET ? 1 : 0);"},{"line_number":1020,"context_line":""},{"line_number":1021,"context_line":"\t/* send num_cycles clocks onto the cable */"},{"line_number":1022,"context_line":"\tfor (unsigned int i \u003d 0; i \u003c cmd-\u003enum_cycles; i++) {"},{"line_number":1023,"context_line":"\t\tint ret \u003d angie_buffer_append(device, 1, tms, 0);"},{"line_number":1024,"context_line":"\t\tif (ret !\u003d ERROR_OK)"}],"source_content_type":"text/x-csrc","patch_set":12,"id":"62695856_91732a9c","line":1021,"in_reply_to":"f0361e71_b4c718e4","updated":"2025-08-04 08:14:43.000000000","message":"Done","commit_id":"9442336fd45ff651688632203a9775f3c0bf3993"},{"author":{"_account_id":1000853,"name":"zapb","display_name":"Marc Schink","email":"dev@zapb.de","username":"zapb"},"change_message_id":"20bd4047d681a6385043565721f557b75a305c1f","unresolved":true,"context_lines":[{"line_number":1106,"context_line":" * @param cmd: JTAG command"},{"line_number":1107,"context_line":" * @return command size in the transfer buffer in bytes"},{"line_number":1108,"context_line":" */"},{"line_number":1109,"context_line":"static int angie_cmd_size(struct angie *device, const struct jtag_command *cmd)"},{"line_number":1110,"context_line":"{"},{"line_number":1111,"context_line":"\tswitch (cmd-\u003etype) {"},{"line_number":1112,"context_line":"\tcase JTAG_SCAN:"}],"source_content_type":"text/x-csrc","patch_set":12,"id":"eafc0e81_0de69799","line":1109,"updated":"2025-08-02 17:16:45.000000000","message":"Wrong data type, use `unsigned int` or `size_t`. See my other comment.","commit_id":"9442336fd45ff651688632203a9775f3c0bf3993"},{"author":{"_account_id":1002344,"name":"Adrien Charruel","email":"acharruel@nanoxplore.com","username":"acharruel","status":"NanoXplore"},"change_message_id":"0b13f6d40bccdf89c44919095c860c5f866dd0a7","unresolved":false,"context_lines":[{"line_number":1106,"context_line":" * @param cmd: JTAG command"},{"line_number":1107,"context_line":" * @return command size in the transfer buffer in bytes"},{"line_number":1108,"context_line":" */"},{"line_number":1109,"context_line":"static int angie_cmd_size(struct angie *device, const struct jtag_command *cmd)"},{"line_number":1110,"context_line":"{"},{"line_number":1111,"context_line":"\tswitch (cmd-\u003etype) {"},{"line_number":1112,"context_line":"\tcase JTAG_SCAN:"}],"source_content_type":"text/x-csrc","patch_set":12,"id":"20fca245_e376c4ea","line":1109,"in_reply_to":"eafc0e81_0de69799","updated":"2025-08-04 08:14:43.000000000","message":"Done","commit_id":"9442336fd45ff651688632203a9775f3c0bf3993"}],"tcl/interface/angie.cfg":[{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"1549daf702d03141ba53fd03884602b063417112","unresolved":true,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"lappend post_init_commands {"},{"line_number":12,"context_line":"    # speed up firmware upload by reducing nb of RUNTEST cycles"},{"line_number":13,"context_line":"    angie memaccess_tck 5"},{"line_number":14,"context_line":"}"}],"source_content_type":"text/x-ttcn-cfg","patch_set":7,"id":"14d86908_3adcf64c","line":13,"updated":"2025-06-07 19:48:25.000000000","message":"would you get the same result by the following setup?\n```\nforeach t [target names] {\n    set dap [$t cget -dap]\n    $dap apsel [$t cget -ap]\n    $dap memaccess 5\n}\n```\nI actually consider quite dangerous to limit \"every\" `JTAG_RUNTEST`, as it is done by this new `angie memaccess_tck`.\nInstead, limiting the `JTAG_RUNTEST` only for target\u0027s access port could be ok, depending on the specific target SoC\n\nIf I understand correctly your issue, you are trying to upload a FW using a `mem_ap` target. This has default 255 tck. So it should be enough to only change this odd value:\n```\n$dap apsel $apnum\n$dap memaccess 5\n```\n\nSo, I consider useless the new command `angie memaccess_tck`.\nBut if you really need it, please document it in `doc/openocd.texi`","commit_id":"318bcf876b4d3c14fc91683c0476d453db4ff329"},{"author":{"_account_id":1002344,"name":"Adrien Charruel","email":"acharruel@nanoxplore.com","username":"acharruel","status":"NanoXplore"},"change_message_id":"5b6a4ca5dff2c26c55e662809dfcaf363edc20ad","unresolved":true,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"lappend post_init_commands {"},{"line_number":12,"context_line":"    # speed up firmware upload by reducing nb of RUNTEST cycles"},{"line_number":13,"context_line":"    angie memaccess_tck 5"},{"line_number":14,"context_line":"}"}],"source_content_type":"text/x-ttcn-cfg","patch_set":7,"id":"d5850394_280451ea","line":13,"in_reply_to":"14d86908_3adcf64c","updated":"2025-06-11 10:01:21.000000000","message":"Right.\nI didn\u0027t get how to access dap-\u003ememaccess_tck and ended up adding my own command.\nYour suggestion works for me.","commit_id":"318bcf876b4d3c14fc91683c0476d453db4ff329"},{"author":{"_account_id":1002344,"name":"Adrien Charruel","email":"acharruel@nanoxplore.com","username":"acharruel","status":"NanoXplore"},"change_message_id":"3e16d993d22c764abe41d2e5e3da115e64aa60ec","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"lappend post_init_commands {"},{"line_number":12,"context_line":"    # speed up firmware upload by reducing nb of RUNTEST cycles"},{"line_number":13,"context_line":"    angie memaccess_tck 5"},{"line_number":14,"context_line":"}"}],"source_content_type":"text/x-ttcn-cfg","patch_set":7,"id":"bbfc28d4_a74ea15e","line":13,"in_reply_to":"d5850394_280451ea","updated":"2025-06-17 09:22:48.000000000","message":"Done","commit_id":"318bcf876b4d3c14fc91683c0476d453db4ff329"}]}
