)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"8b6c4fb7ccf998ee62f9b777830f9c2b527f7c60","unresolved":true,"context_lines":[{"line_number":4,"context_line":"Commit:     Patrick Dussud \u003cphdussud@hotmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2022-11-09 16:08:13 -0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Support for the DirtyJTAG probe"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"It is a low cost probe build on top of STM32F1 boards"},{"line_number":10,"context_line":"(like blue pill and such) and RP Pico boards."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"88dc93e8_1988e64e","line":7,"updated":"2022-11-11 21:48:45.000000000","message":"Please use:\njtag: add support for adapter DirtyJTAG","commit_id":"529ac78bb4b042af8632136e89780067cf599ee9"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"a64b38f65c98f2259c0da92eddd70eadbc2bd03c","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Patrick Dussud \u003cphdussud@hotmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2022-11-09 16:08:13 -0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Support for the DirtyJTAG probe"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"It is a low cost probe build on top of STM32F1 boards"},{"line_number":10,"context_line":"(like blue pill and such) and RP Pico boards."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"0f7dbf36_539ac231","line":7,"in_reply_to":"88dc93e8_1988e64e","updated":"2022-11-13 13:33:09.000000000","message":"Done","commit_id":"529ac78bb4b042af8632136e89780067cf599ee9"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"8b6c4fb7ccf998ee62f9b777830f9c2b527f7c60","unresolved":true,"context_lines":[{"line_number":9,"context_line":"It is a low cost probe build on top of STM32F1 boards"},{"line_number":10,"context_line":"(like blue pill and such) and RP Pico boards."},{"line_number":11,"context_line":"see https://github.com/phdussud/pico-dirtyJtag and"},{"line_number":12,"context_line":"https: //github.com/jeanthom/DirtyJTAG"},{"line_number":13,"context_line":"Signed-off-by: phdussud \u003cphdussud@users.noreply.github.com\u003e"},{"line_number":14,"context_line":"Change-Id: I941607982c24f99b19e921952fd288471a3d3a4d"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"12a7e945_70a38557","line":12,"updated":"2022-11-11 21:48:45.000000000","message":"remove the space after https:","commit_id":"529ac78bb4b042af8632136e89780067cf599ee9"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"a64b38f65c98f2259c0da92eddd70eadbc2bd03c","unresolved":false,"context_lines":[{"line_number":9,"context_line":"It is a low cost probe build on top of STM32F1 boards"},{"line_number":10,"context_line":"(like blue pill and such) and RP Pico boards."},{"line_number":11,"context_line":"see https://github.com/phdussud/pico-dirtyJtag and"},{"line_number":12,"context_line":"https: //github.com/jeanthom/DirtyJTAG"},{"line_number":13,"context_line":"Signed-off-by: phdussud \u003cphdussud@users.noreply.github.com\u003e"},{"line_number":14,"context_line":"Change-Id: I941607982c24f99b19e921952fd288471a3d3a4d"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"554133e7_6fdcaa10","line":12,"in_reply_to":"12a7e945_70a38557","updated":"2022-11-13 13:33:09.000000000","message":"Done","commit_id":"529ac78bb4b042af8632136e89780067cf599ee9"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":1002076,"name":"Patrick Dussud","display_name":"phdussud","email":"phdussud@hotmail.com","username":"phdussud"},"change_message_id":"6b25c7f759ca3e7f17d381615b6540eee2f43fe0","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":2,"id":"eeb6b704_81c2fd12","updated":"2022-11-09 23:49:05.000000000","message":"\u003e Patch Set 1: Verified-1\n\u003e \n\u003e Build Failed \n\u003e \n\u003e https://build.openocd.org/job/openocd-gerrit-build/16214/ : FAILURE\n\u003e \n\u003e https://build.openocd.org/job/openocd-gerrit/17004/ : FAILURE\n\nIs there a way to get a log showing the failure (source file, line number and error message)? \nAll I can see on the log is that the touchstone failed. I am not familiar at all with this infrastructure so I am a bit lost. Sorry about this.... \nPatrick","commit_id":"8ff28452531944c31be1a21b22c3e77e1de5a6fe"},{"author":{"_account_id":1002076,"name":"Patrick Dussud","display_name":"phdussud","email":"phdussud@hotmail.com","username":"phdussud"},"change_message_id":"9dce9e740bcec4327e58528eea4ac986cfe7c799","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"cb59c9b8_2c29856b","in_reply_to":"eeb6b704_81c2fd12","updated":"2022-11-14 17:56:16.000000000","message":"Done","commit_id":"8ff28452531944c31be1a21b22c3e77e1de5a6fe"},{"author":{"_account_id":1000687,"name":"Tomas Vanek","display_name":"Tomas Vanek","email":"vanekt@fbl.cz","username":"vanekt"},"change_message_id":"65e603942ed3453f88db688c6e4bd0137cc9a377","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":2,"id":"fa35b323_1950f5eb","in_reply_to":"eeb6b704_81c2fd12","updated":"2022-11-11 20:41:52.000000000","message":"https://openocd.org/doc/doxygen/html/patchguide.html#stepbystep\n\nmainly point 5: run\n tools/checkpatch.sh\n\nto verify your patch style is ok.","commit_id":"8ff28452531944c31be1a21b22c3e77e1de5a6fe"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"2f916b90d7344738fc02329743e7d200c6c25b80","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"f0b82a2c_fc72b179","in_reply_to":"fa35b323_1950f5eb","updated":"2022-11-12 10:03:46.000000000","message":"Done","commit_id":"8ff28452531944c31be1a21b22c3e77e1de5a6fe"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"8b6c4fb7ccf998ee62f9b777830f9c2b527f7c60","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"8f563924_35bfe2fc","updated":"2022-11-11 21:48:45.000000000","message":"Thanks for you patch.\nI\u0027m happy to see another opensource adapter, but I\u0027m surprised to see only JTAG supported, not SWD. I hope it get extended soon.\nThe github projects you mentioned do not contain a LICENSE file. Would be nice to add such file to easily clarify the license. By the way, it is a standard MIT license https://spdx.org/licenses/MIT.html\n\nI have run a quick review and there are few points that need attention.\nI will review it more carefully after these points get fixed","commit_id":"529ac78bb4b042af8632136e89780067cf599ee9"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"2f916b90d7344738fc02329743e7d200c6c25b80","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"6d1e704f_580ae4b3","updated":"2022-11-12 10:03:46.000000000","message":"thanks for the update.\nI have added the \u0027done\u0027 to the comments resolved so they disappear form the list, plus added some minor new comment","commit_id":"5981da1185a3e35fb1f6d46411c9a58dee8f26cd"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"a64b38f65c98f2259c0da92eddd70eadbc2bd03c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"825ff720_1b5fef93","updated":"2022-11-13 13:33:09.000000000","message":"very close to complete this, thanks\nSome minor comments below, plus request to clarify what append to the generated file. I want to understand if my script failed in your system.","commit_id":"143c0f46807d4f0856810e6ed9ca02866b0e667c"},{"author":{"_account_id":1000687,"name":"Tomas Vanek","display_name":"Tomas Vanek","email":"vanekt@fbl.cz","username":"vanekt"},"change_message_id":"ff58e6b8b865a2514dc77ef9ffff47976a10c98a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"863e28ab_8aff3c0b","updated":"2022-11-14 06:01:39.000000000","message":"Patrick,\n\nmy concern is assumed poor performance of this adapter.\nEach JTAG SCAN is handled synchronously over USB, in other words it takes usually 2 or 3 msec.\nThis might be sufficient for loading of long bitstreams to a programmable logic but turns to annoyingly slow for CPU/MCU debugging.\n\nYou copied the JTAG related code from ft232r.c\nFT232R is a simple device which cannot handle more than 64 bits JTAG transfer in one USB packet. Buffering more than one SCAN is mostly impossible due to the size limit.\nIn your case a much more capable MCU is used as the adapter. Most (or all other) MCU based adapters send more transactions in one USB transfer.\nIs the source of code copying the only reason why SCAN is handled synchronously?\nOr doesn\u0027t the communication protocol support multiple SCANs in USB transfer?\nBTW I didn\u0027t find any description of the protocol.\n\nYou described the probe as low cost. Ok, but one can build a probe on the same cheap blue-pill or ST-Link fake with much better performing open source firmware (e.g. CMSIS-DAP or vsllink). Can you give a reason why to use the DirtyJTAG?","commit_id":"2fc329571f5605a5fca2cb41cbe1e2614081ef21"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"cd93af7defb469e84e77d559f13ddd2dba96286b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"7616d02c_34693217","updated":"2022-11-13 23:41:41.000000000","message":"Thanks!\nI will merge it after v0.12.0 release","commit_id":"2fc329571f5605a5fca2cb41cbe1e2614081ef21"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"ba0f838fef41efc8a2e9079d221cb516c57777fe","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"f2a68dd9_eab3cf4d","in_reply_to":"07483def_1647b5db","updated":"2022-11-14 22:14:20.000000000","message":"The STM32H723 used for ST-Link V3 embeds a USB HS with phy. There are other in the same STM32H7 family","commit_id":"2fc329571f5605a5fca2cb41cbe1e2614081ef21"},{"author":{"_account_id":1002076,"name":"Patrick Dussud","display_name":"phdussud","email":"phdussud@hotmail.com","username":"phdussud"},"change_message_id":"3fd0f1b981e3598977612831c51963b802288887","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":13,"id":"de6a50d0_07e0ab54","in_reply_to":"0bfeaa10_df52567a","updated":"2022-11-25 00:40:23.000000000","message":"Hello all, \nI rewrote most of the driver and I used the bitq framework. I had to fix a few issues with the DirtyJTAG firmware. I haven\u0027t checked them in the repos yet but I will soon. \nThank you again for pointing out the fact that openocd supports batching jtag commands.","commit_id":"2fc329571f5605a5fca2cb41cbe1e2614081ef21"},{"author":{"_account_id":1002076,"name":"Patrick Dussud","display_name":"phdussud","email":"phdussud@hotmail.com","username":"phdussud"},"change_message_id":"9bf4effe1bea515fa55a32ecc8ef1f6a1ef3de93","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":13,"id":"0bfeaa10_df52567a","in_reply_to":"44b76843_4ea7fe36","updated":"2022-11-15 18:31:15.000000000","message":"Ah I see! Thanks!","commit_id":"2fc329571f5605a5fca2cb41cbe1e2614081ef21"},{"author":{"_account_id":1000687,"name":"Tomas Vanek","display_name":"Tomas Vanek","email":"vanekt@fbl.cz","username":"vanekt"},"change_message_id":"083bb4495ebeab63f3c5a3770a1419d86a9d9b36","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":13,"id":"44b76843_4ea7fe36","in_reply_to":"4d710a56_d0ad3fe6","updated":"2022-11-15 18:19:58.000000000","message":"\u003e About vsllink: As I said I am sure that the original implementation, which doesn\u0027t seem to have support for the bluepill works better. \n\nhttps://github.com/zoobab/versaloon/blob/master/firmware/Projects/hw_cfg_MiniRelease1.h#L383-L384\n\nhttps://github.com/zoobab/versaloon/blob/master/firmware/Projects/hw_cfg_MiniRelease1.h#L514-L515\n\nhttps://github.com/zoobab/versaloon/blob/master/firmware/Interfaces/APP/JTAG/JTAG_TAP.c#L745-L749\n\nbut\n\nhttps://github.com/zoobab/versaloon/blob/master/README.md?plain\u003d1#L107\n\nIt\u0027s sad, very sad. Probably neither zoobab knows the sweet secret:\nIf you solder a wire connecting B3 and B13 on a bluepill you get full speed JTAG!\n\nSorry for being off topic!","commit_id":"2fc329571f5605a5fca2cb41cbe1e2614081ef21"},{"author":{"_account_id":1002076,"name":"Patrick Dussud","display_name":"phdussud","email":"phdussud@hotmail.com","username":"phdussud"},"change_message_id":"6c9f374b1690c742e75c61eceafb65b827f1f2b8","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":13,"id":"4d710a56_d0ad3fe6","in_reply_to":"8119ea17_503d5d4d","updated":"2022-11-15 16:40:54.000000000","message":"Hi Thomas, \nThe relevant distinguishing spec for FS/HS is the max number of bytes transferred in a single bulk transaction. It is 64 bytes for FS and 512 bytes for HS. \nIf you send a transaction larger than those values, it will be broken up in 64/512 chunks with the same latencies as if you broke it yourself by issuing consecutive bulk_write of the max size (64/512). \n\nAbout vsllink: As I said I am sure that the original implementation, which doesn\u0027t seem to have support for the bluepill works better. \n\nAbout my test: Yes FPGA programming is all about sending a large SCAN_OUT to the device. The bits size I am quoting is one SCAN_OUT statement in SVF\nSDR\t2538800\tTDI ....\nThe fact that OpenOCD can program FPGA with decent performance using low cost probes is seen by many as a great asset. People have asked me to revive the broken openocd drivers because they use openocd for their FPGA boards and wanted to use DirtyJtag for the boards without a built-in probe. \n\nAbout MCU debugging:\nI understand what you are saying. Do you know if the size of the scan transactions used in gdb next or step are shorter than 64*8 bits? If they are then definitely, buffering the SCANs is worth it.","commit_id":"2fc329571f5605a5fca2cb41cbe1e2614081ef21"},{"author":{"_account_id":1000687,"name":"Tomas Vanek","display_name":"Tomas Vanek","email":"vanekt@fbl.cz","username":"vanekt"},"change_message_id":"485140ecb6d78246867314fff358a586c2094dee","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":13,"id":"8119ea17_503d5d4d","in_reply_to":"81bf0a6e_22792c5e","updated":"2022-11-15 07:31:01.000000000","message":"Patrick, Antonio,\nI don\u0027t understand why you started discussing about USB HS. HS with microframes as short as 125 uS is quite a different category. But it surely does not fit into low budget. So lets forget USB HS and focus to the USB FS reality...\n\n(BTW There are MCUs with USB HS and internal PHY, e.g. SAME70 or V71, but nothing cheap)\n\n\u003e I just obtained the latest firmware for a bluepill (same board used for DirtyJTAG) on https://github.com/zoobab/versaloon\n\u003e It works but I can\u0027t program the FPGA at JTAG clock frequency higher than 200Khz. \n\u003e That gives a programming time of 30s. \n\nRecheck the hardware. Vsllink switches from GPIO bitbanging at low clk freq to JTAG controlled by two synchronous SPI interfaces (one for TDI/TDO and the second for TMS: what an ingenious idea!). IIRC It needs at least TCK connected to more than one bluepill pin. With the proper hw vsllink (at least with the original Quian\u0027s fw, never tested zoobab\u0027s fork) drives easily 20 MHz and more.\n\n\u003e To give you an idea of the speed of the probe I give you the wall time clock of a \u003e ECP5 85 FPGA using a SVF file as a source. The programming size is 2538800 bits\n\nAnd how many bits per one scan? Let me guess: many.\nRemember I expected\n\u003e This might be sufficient for loading of long bitstreams to a programmable logic \n\u003e but turns to annoyingly slow for CPU/MCU debugging.\n\nbecause the bottleneck will be USB FS turnaround time in the sync implementation of JTAG scan. And it shows when many short scans take place e.g. reading CPU registers.\n\nI have to finish other work first then I\u0027ll put your fw to a Pico and give it the try. I don\u0027t think this comment is resolved.","commit_id":"2fc329571f5605a5fca2cb41cbe1e2614081ef21"},{"author":{"_account_id":1002076,"name":"Patrick Dussud","display_name":"phdussud","email":"phdussud@hotmail.com","username":"phdussud"},"change_message_id":"9dce9e740bcec4327e58528eea4ac986cfe7c799","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"07483def_1647b5db","in_reply_to":"863e28ab_8aff3c0b","updated":"2022-11-14 17:56:16.000000000","message":"Good questions. \nMost microprocessors can only handle USB 2.0 full speed (12mb/s) and bulk transfers are limited to 64 bytes. Isochronous transfers can be longer but are not reliable so I don\u0027t think anybody uses them for programming devices. There are very few MCU with integrated PHY that can handle high speed. One or 2 SAMD devices can do it. \nAbout timings. I did extensive USB trace analysis to measure the effective throughput. See \nhttps://github.com/jeanthom/DirtyJTAG/pull/76 for details. For a SCAN_OUT operation  it takes 172us for each transfer. For SCAN_IO, it takes 253us\nAs you said, packing more than one SCAN per transfer is not very productive due to the size of a USB packet. \nI am sure you are correct about the origin of this code but I was not aware of it as I tried to fix an existing implementation of the OpenOCD port here https://github.com/jeanthom/openocd-dirtyjtag\nI fixed the problems that made it non functional and ported the V2 of the DirtyJTAG protocol for optimal speed. V2 allows for the full 64 bytes transfer (32 bytes for V1) and allows for send only transfers (SCAN_IO only for V1)\n\nBecause of the USB spec on full speed transfers, I don\u0027t think that other probes using MCU are able to transfer more than 64 bytes per USB packet, so there does not seem to be a reason for them to be much faster than a DirtyJTAG V2 probe. \n\nTo give you an idea of the speed of the probe I give you the wall time clock of a ECP5 85 FPGA using a SVF file as a source. The programming size is 2538800 bits\n\n$ code/src/openocd.exe --file code/tcl/interface/dirtyjtag.cfg --file ecp5.cfg\nOpen On-Chip Debugger 0.12.0-rc2+dev-00013-g6d84aeeef (2022-11-13-09:04)\nLicensed under GNU GPL v2\nFor bug reports, read\n        http://openocd.org/doc/doxygen/bugs.html\nInfo : only one transport option; autoselect \u0027jtag\u0027\nadapter speed: 1000 kHz\n\nInfo : dirtyjtag version 2\nInfo : clock speed 1000 kHz\nInfo : JTAG tap: lfe5.tap tap/device found: 0x41113043 (mfg: 0x021 (Lattice Semi.), part: 0x1113, ver: 0x4)\nWarn : gdb services need one or more targets defined\nsvf processing file: \"bitstream.svf\"\n...\nFREQUENCY       6.0e+006 HZ;\nadapter speed: 6000 kHz\n...\nSTATE   RESET;\nshutdown command invoked\n\nreal    0m3.136s\nuser    0m0.000s\nsys     0m0.000s\n\nThe same thing using a FT2232 which can handle high speed (512 byte transfers) gives us:\n$ time code/src/openocd.exe --file tigard-jtag.cfg --file ecp5.cfg\nOpen On-Chip Debugger 0.12.0-rc2+dev-00013-g6d84aeeef (2022-11-13-09:04)\n....\nreal    0m1.857s\nuser    0m0.015s\nsys     0m0.000s\n\nUsing OpenFPGALoader which uses pretty much the same code for the probe:\n$ time /p/openFPGALoader/build/openFPGALoader.exe -c dirtyJtag bitstream.svf\nJtag frequency : requested 6000000Hz -\u003e real 6000000Hz\nJtag frequency : requested 6000000Hz -\u003e real 6000000Hz\nend of SVF file\n\nreal    0m0.977s\nuser    0m0.000s\nsys     0m0.015s\n\nI don\u0027t have timings about debugging a MCU with the probe. I think the main bottleneck is the fact that multiple small packets are sent and received for debugging operations such as gdb next or step.","commit_id":"2fc329571f5605a5fca2cb41cbe1e2614081ef21"},{"author":{"_account_id":1002076,"name":"Patrick Dussud","display_name":"phdussud","email":"phdussud@hotmail.com","username":"phdussud"},"change_message_id":"7c9c3a9e840733a20e6e1da50d11bb54ea418e11","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"5500fced_5d765b0d","in_reply_to":"de6a50d0_07e0ab54","updated":"2023-01-14 23:34:53.000000000","message":"Done","commit_id":"2fc329571f5605a5fca2cb41cbe1e2614081ef21"},{"author":{"_account_id":1002076,"name":"Patrick Dussud","display_name":"phdussud","email":"phdussud@hotmail.com","username":"phdussud"},"change_message_id":"e45fe3e7c12ef29c70e638a557fba670a7b5bd8e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"81bf0a6e_22792c5e","in_reply_to":"e7f3c9ff_719dd3ee","updated":"2022-11-14 23:25:54.000000000","message":"I just obtained the latest firmware for a bluepill (same board used for DirtyJTAG) on https://github.com/zoobab/versaloon\nIt works but I can\u0027t program the FPGA at JTAG clock frequency higher than 200Khz. \nThat gives a programming time of 30s. \nI am sure that other hardware based on a higher priced STM32 family will fare better...","commit_id":"2fc329571f5605a5fca2cb41cbe1e2614081ef21"},{"author":{"_account_id":1002076,"name":"Patrick Dussud","display_name":"phdussud","email":"phdussud@hotmail.com","username":"phdussud"},"change_message_id":"f61280b47c7bcae3d805a4a945cac47cb99bb49a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"e7f3c9ff_719dd3ee","in_reply_to":"f2a68dd9_eab3cf4d","updated":"2022-11-14 23:06:31.000000000","message":"Not quite. You have to supply an external PHY. From the Data sheet:\nThe devices embed two USB OTG high-speed (up to 480 Mbit/s) device/host/OTG \nperipheral. OTG-HS1 supports both full-speed and high-speed operations, while OTG-HS2 \nsupports only full-speed operations. They both integrate the transceivers for full-speed \noperation (12 Mbit/s) and are able to operate from the internal HSI48 oscillator. OTG-HS1 \nfeatures a UTMI low-pin interface (ULPI) for high-speed operation (480 Mbit/s). When using \nthe USB OTG-HS1 in HS mode, an external PHY device connected to the ULPI is required.\nThe price is $20 per unit, whereas a bluepill board costs less than $5","commit_id":"2fc329571f5605a5fca2cb41cbe1e2614081ef21"},{"author":{"_account_id":1002076,"name":"Patrick Dussud","display_name":"phdussud","email":"phdussud@hotmail.com","username":"phdussud"},"change_message_id":"d4e6dbfe10c876ca96f6e554a223d3a8bde75986","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":16,"id":"e0804d2c_7e31cafa","updated":"2022-11-16 20:05:13.000000000","message":"OK I now understand the issue with this code. Tomas, thank you very much for your patience and clarifications. When I took over this code, I cared too much about fixing it and not enough about understanding the debugging scenarios and the architecture of openocd. I want to re-implement this driver the right way, with queuing small scan up to the request size of the USB interface (64 bytes). \nI read the docs about openocd and I must say I am a little confused about which interface to use/implement that will leverage the existing openocd support for jtag. I see the minidriver interface Is this the one I should be using? \nnews0.2.0 talks about a stub minidriver for developing new jtag drivers, but does not say which file(s) this stub minidriver consists of. I would appreciate knowing what the relevant files are.\nAlternatively if a jtag driver already implements the best development practices, please point me to it. \nThank you for your support.","commit_id":"6c1e69d9345a3850022eb8f9aa0de46992b83ae9"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"04389458611569099ef85d45b80917fb80dcbbab","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":16,"id":"7bbd2f27_3a5c1944","in_reply_to":"016fd528_99531119","updated":"2022-11-17 10:58:59.000000000","message":"Minidriver is an internal API that we are not using anymore for adapter drivers. The last adapter using it has been dropped. The API is still there, but I prefer not using it.\nYes, FTDI is the most complete and for sure better tested.\nIf you are only looking for queuing and merging the scan then stream you can find other examples. I think osbdm should be ok, and it is JTAG only so slightly simpler than FTDI, but I\u0027m not sure it\u0027s still functional.\nBy the way, any documentation available for DirtyJTAG protocol?","commit_id":"6c1e69d9345a3850022eb8f9aa0de46992b83ae9"},{"author":{"_account_id":1002076,"name":"Patrick Dussud","display_name":"phdussud","email":"phdussud@hotmail.com","username":"phdussud"},"change_message_id":"fb3451263c1d77fb505c349108e5547319fb4697","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":16,"id":"ad99baa9_ad917acc","in_reply_to":"7486fba2_785cdf6e","updated":"2022-11-17 17:14:57.000000000","message":"Tomas and Antonio,\nThanks for the pointers. I tried to briefly read more code and bitq.c intrigued me as it seems to implement a lot of the infrastructure for a TAP: state management and queueing. I see only two driver using it: presto.c and esp_usb_jtag.c \nWhat do you think about this layer? \nThanks!","commit_id":"6c1e69d9345a3850022eb8f9aa0de46992b83ae9"},{"author":{"_account_id":1002076,"name":"Patrick Dussud","display_name":"phdussud","email":"phdussud@hotmail.com","username":"phdussud"},"change_message_id":"2afc03e77b99bff409a409f790614364bdf46d57","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":16,"id":"7486fba2_785cdf6e","in_reply_to":"7bbd2f27_3a5c1944","updated":"2022-11-17 17:08:15.000000000","message":"About the DirtyJTAG protocol specs: I am not sure... \nHere is a brief description:\nCommands consists of a byte designating the command, followed by the payload. If the payload can have variable size, the second byte indicates the length of the payload. \nThe commands are queueable up to a length of 64 bytes. CMD_STOP designates the end of the command queue. The accumulated output is sent after CMD_STOP has been processed.\nenum CommandIdentifier {\n  CMD_STOP \u003d 0x00,\n  CMD_INFO \u003d 0x01,\n  CMD_FREQ \u003d 0x02,\n  CMD_XFER \u003d 0x03,\n  CMD_SETSIG \u003d 0x04,\n  CMD_GETSIG \u003d 0x05,\n  CMD_CLK \u003d 0x06,\n  CMD_SETVOLTAGE \u003d 0x07,\n  CMD_GOTOBOOTLOADER \u003d 0x08\n};\n\nenum CommandModifier\n{\n  // CMD_XFER\n  NO_READ \u003d 0x80,\n  EXTEND_LENGTH \u003d 0x40,\n  // CMD_CLK\n  READOUT \u003d 0x80,\n};\n\nenum SignalIdentifier {\n  SIG_TCK \u003d 1 \u003c\u003c 1,\n  SIG_TDI \u003d 1 \u003c\u003c 2,\n  SIG_TDO \u003d 1 \u003c\u003c 3,\n  SIG_TMS \u003d 1 \u003c\u003c 4,\n  SIG_TRST \u003d 1 \u003c\u003c 5,\n  SIG_SRST \u003d 1 \u003c\u003c 6\n};\n\n/**\n * @brief Handle CMD_INFO command\n *\n * CMD_INFO returns a string to the host software. This\n * could be used to check DirtyJTAG firmware version\n * or supported commands.\n */\n\n/**\n * @brief Handle CMD_FREQ command\n *\n * CMD_FREQ sets the clock frequency on the probe.\n * Currently this does not changes anything.\n */\n\n/**\n * @brief Handle CMD_XFER command\n *\n * CMD_XFER writes data on TDI, reads TDO unless NO_READ modifier is used.\n * payload[0] is the length of the tdi stream in bits. EXTEND_LENGTH adds 256 to \n * the length. Effective max bit length is 62*8\n * payload[1....] is the stream of tdi bits\n */\n\n/**\n * @brief Handle CMD_SETSIG command\n *\n * CMD_SETSIG set the logic state TDO. \n * payload[0] is a mask of what to set according to SignalIdentifier\n * payload[1] is the signals values according to SignalIdentifier\n */\n\n\n/**\n * @brief Handle CMD_GETSIG command\n *\n * CMD_GETSIG gets the current signal state of TDO\n * \n */\n\n/**\n * @brief Handle CMD_CLK command\n *\n * CMD_CLK sends clock pulses with specific TMS and TDI state.\n * if READOUT is added to the command, it will read TDO \n * payload[0] signals, payload[1] number of clock pulses\n */","commit_id":"6c1e69d9345a3850022eb8f9aa0de46992b83ae9"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"0831d15cd7a17a823ded4c68a0195f3eb45bc326","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":16,"id":"d4e20760_6bb2a34b","in_reply_to":"ad99baa9_ad917acc","updated":"2022-11-17 17:59:09.000000000","message":"An extract from this description could nicely fit in a comment at the beginning of src/jtag/drivers/dirtyjtag.c\n\npresto.c is quite old with nobody maintaining it (I\u0027m looking for a sample of the adapter, but it\u0027s overly expensive for just this silly task).\n\nesp_usb_jtag.c is a new entry, and you can easily talk with the developer if you need.","commit_id":"6c1e69d9345a3850022eb8f9aa0de46992b83ae9"},{"author":{"_account_id":1002076,"name":"Patrick Dussud","display_name":"phdussud","email":"phdussud@hotmail.com","username":"phdussud"},"change_message_id":"7c9c3a9e840733a20e6e1da50d11bb54ea418e11","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"d3ad22af_5b852bf9","in_reply_to":"d4e20760_6bb2a34b","updated":"2023-01-14 23:34:53.000000000","message":"Done","commit_id":"6c1e69d9345a3850022eb8f9aa0de46992b83ae9"},{"author":{"_account_id":1000687,"name":"Tomas Vanek","display_name":"Tomas Vanek","email":"vanekt@fbl.cz","username":"vanekt"},"change_message_id":"3718e4848c50735848b6d19d7efa87655d7c9504","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":16,"id":"016fd528_99531119","in_reply_to":"e0804d2c_7e31cafa","updated":"2022-11-17 10:30:55.000000000","message":"Patrick, if you\u0027re looking for a reference implementation probably the best tuned one is ftdi.c. Unfortunately it\u0027s also one of the most complicated ones and you need study mpsse.c as well. Also the code style is better than the awful code from fr232r.c\nI\u0027m not a JTAG guru though, I\u0027m more focused to Cortex-M MCUs and SWD.\nThe minidriver stuff is a dark history for me, I started contributing ~2014. Maybe I\u0027m wrong but seems me that the minidriver evolved to the standard adapter driver. Antonio, do you have more?","commit_id":"6c1e69d9345a3850022eb8f9aa0de46992b83ae9"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"79c778d78ea6d404a3e56a22bb57186a79c89cfe","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"f61d7e13_3d476fcd","updated":"2022-11-25 15:09:51.000000000","message":"thanks for the new version!\nI have only quickly compared it with the previous version and I\u0027ve noticed a problem.\nCan you please check it?\nI will review the whole patch asap","commit_id":"3b0edb6353bff133944c79dab143f3f9f8c0626b"},{"author":{"_account_id":1002076,"name":"Patrick Dussud","display_name":"phdussud","email":"phdussud@hotmail.com","username":"phdussud"},"change_message_id":"90d398036502a172a65bb85e1ce3211f20248cd1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"64cd3d6d_7d5f32f0","updated":"2022-11-28 18:47:45.000000000","message":"Hello all, \nI discovered through more testing that svf files don\u0027t work with my patch 19. bitq.c does not handle the JTAG command JTAG_STABLECLOCKS. I fixed this. I also saw that it does not support JTAG_TMS but by looking at the infrastructure code, it seems that it is used only when switching from JTAG to SWD. I assume that this is fine since bitq does not have any support for swd. But then why does my dirtyjtag interface claims to support it? .supported \u003d DEBUG_CAP_TMS_SEQ. This is a problem with other code base(s) based on bitq. I removed this supported line from the interface. \nThanks for your attention, \nPatrick","commit_id":"8232c103bfdf8e55027025cc1b3179067714e406"},{"author":{"_account_id":1002076,"name":"Patrick Dussud","display_name":"phdussud","email":"phdussud@hotmail.com","username":"phdussud"},"change_message_id":"7913e83bfad0cb365aa2f5ddc172aa40a6b735aa","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":21,"id":"259002d6_dc1fc14d","updated":"2022-12-01 23:15:49.000000000","message":"Hello! \nI updated the error message dirtyjyag.c:178\nThanks!","commit_id":"8eaa16989d8589f11067f248d29f5de9d938be73"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"74b17d9373b9e8c27eb150568bda6e499abbf43c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":21,"id":"30eafabd_ee8b3e65","updated":"2023-01-08 11:08:35.000000000","message":"Thanks for the big effort of reworking the initial driver.\nI still did not checked all the bitq changes, but I have some minor comment here and there.","commit_id":"8eaa16989d8589f11067f248d29f5de9d938be73"},{"author":{"_account_id":1002076,"name":"Patrick Dussud","display_name":"phdussud","email":"phdussud@hotmail.com","username":"phdussud"},"change_message_id":"7c9c3a9e840733a20e6e1da50d11bb54ea418e11","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":23,"id":"7d87020a_1621b877","updated":"2023-01-14 23:34:53.000000000","message":"Hi Antonio! \nI think I resolved all of the issues you pointed out thus far. \nThanks! ","commit_id":"1947efbf1d23e5974800987652164bf758de7c7e"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"bc68753490e6940d0812e02c3268659deb91f1d2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":23,"id":"25b5f1d9_f718e740","updated":"2023-01-18 22:23:23.000000000","message":"Patrick, you have done a huge and complex job to port this driver to bitq, but:\n- the code has become overly complicated and almost unmaintainable;\n- I\u0027m not sure the result provides better performance that the original code, as now every single bit is sent with a single command.\nBefore going ahead with the code, can we add a better description of the protocol? I already asked for it, but you did not provided any link.\nI\u0027m quite lost and I went back to patchset 13 to decrypt something.\nI have just copy/paste from my notes to give a first draft, but feel free to rewrite all or copy it from some other source.","commit_id":"1947efbf1d23e5974800987652164bf758de7c7e"},{"author":{"_account_id":1002076,"name":"Patrick Dussud","display_name":"phdussud","email":"phdussud@hotmail.com","username":"phdussud"},"change_message_id":"9da7900fb2aa8d62ee559504f702ea390cd78fdd","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":23,"id":"d55c56b9_034664ae","in_reply_to":"25b5f1d9_f718e740","updated":"2023-01-18 23:53:53.000000000","message":"Hello Antonio! \nI am not quite sure what you mean by \"overly complicated\" The code is quite a bit shorter than esp_usb_jtag.c which is the most recent example of a bitq based driver and is about the same size as presto,c\nIt is faster because the commands are buffered up to 64 bit long (in dirtyjtag_close_command) and sent in a batch (see dirtyjtag_flush_bitq)\nI am sorry about the protocol description but I didn\u0027t find one, besides the source code that implements the probe so I tried to write one, which you expanded on. I am grateful for this.","commit_id":"1947efbf1d23e5974800987652164bf758de7c7e"},{"author":{"_account_id":1002076,"name":"Patrick Dussud","display_name":"phdussud","email":"phdussud@hotmail.com","username":"phdussud"},"change_message_id":"5c9f80ddbe6dc073e43a4344504745fe6e2978a7","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":23,"id":"3f18a789_a490a4a0","in_reply_to":"d55c56b9_034664ae","updated":"2023-01-19 17:35:55.000000000","message":"Sorry, I meant 64 bytes.","commit_id":"1947efbf1d23e5974800987652164bf758de7c7e"}],"configure.ac":[{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"8b6c4fb7ccf998ee62f9b777830f9c2b527f7c60","unresolved":true,"context_lines":[{"line_number":123,"context_line":"\t[[vsllink], [Versaloon-Link JTAG Programmer], [VSLLINK]],"},{"line_number":124,"context_line":"\t[[xds110], [TI XDS110 Debug Probe], [XDS110]],"},{"line_number":125,"context_line":"\t[[cmsis_dap_v2], [CMSIS-DAP v2 Compliant Debugger], [CMSIS_DAP_USB]],"},{"line_number":126,"context_line":"  [[dirtyjtag], [DirtyJTAG], [DIRTYJTAG]],"},{"line_number":127,"context_line":"  [[osbdm], [OSBDM (JTAG only) Programmer], [OSBDM]],"},{"line_number":128,"context_line":"\t[[opendous], [eStick/opendous JTAG Programmer], [OPENDOUS]],"},{"line_number":129,"context_line":"\t[[armjtagew], [Olimex ARM-JTAG-EW Programmer], [ARMJTAGEW]],"}],"source_content_type":"application/octet-stream","patch_set":4,"id":"0b65492d_550197d6","line":126,"updated":"2022-11-11 21:48:45.000000000","message":"Please use the same indentation of the original code, one TAB","commit_id":"529ac78bb4b042af8632136e89780067cf599ee9"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"2f916b90d7344738fc02329743e7d200c6c25b80","unresolved":false,"context_lines":[{"line_number":123,"context_line":"\t[[vsllink], [Versaloon-Link JTAG Programmer], [VSLLINK]],"},{"line_number":124,"context_line":"\t[[xds110], [TI XDS110 Debug Probe], [XDS110]],"},{"line_number":125,"context_line":"\t[[cmsis_dap_v2], [CMSIS-DAP v2 Compliant Debugger], [CMSIS_DAP_USB]],"},{"line_number":126,"context_line":"  [[dirtyjtag], [DirtyJTAG], [DIRTYJTAG]],"},{"line_number":127,"context_line":"  [[osbdm], [OSBDM (JTAG only) Programmer], [OSBDM]],"},{"line_number":128,"context_line":"\t[[opendous], [eStick/opendous JTAG Programmer], [OPENDOUS]],"},{"line_number":129,"context_line":"\t[[armjtagew], [Olimex ARM-JTAG-EW Programmer], [ARMJTAGEW]],"}],"source_content_type":"application/octet-stream","patch_set":4,"id":"9ffb03eb_eb7166e6","line":126,"in_reply_to":"0b65492d_550197d6","updated":"2022-11-12 10:03:46.000000000","message":"Done","commit_id":"529ac78bb4b042af8632136e89780067cf599ee9"}],"contrib/60-openocd.rules":[{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"2f916b90d7344738fc02329743e7d200c6c25b80","unresolved":true,"context_lines":[{"line_number":233,"context_line":"ATTRS{product}\u003d\u003d\"*CMSIS-DAP*\", MODE\u003d\"660\", GROUP\u003d\"plugdev\", TAG+\u003d\"uaccess\""},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"# DirtyJTAG adapter"},{"line_number":236,"context_line":"ATTRS{idVendor}\u003d\u003d\"1209\", ATTRS{idProduct}\u003d\u003d\"c0ca\", MODE\u003d\"660\", GROUP\u003d\"plugdev\", TAG+\u003d\"uaccess\""},{"line_number":237,"context_line":"LABEL\u003d\"openocd_rules_end\""}],"source_content_type":"application/octet-stream","patch_set":5,"id":"58e1bbbe_13e60b23","line":236,"updated":"2022-11-12 10:03:46.000000000","message":"the file is ordered by VID, then PID\nPlease move it to the proper line","commit_id":"5981da1185a3e35fb1f6d46411c9a58dee8f26cd"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"a64b38f65c98f2259c0da92eddd70eadbc2bd03c","unresolved":false,"context_lines":[{"line_number":233,"context_line":"ATTRS{product}\u003d\u003d\"*CMSIS-DAP*\", MODE\u003d\"660\", GROUP\u003d\"plugdev\", TAG+\u003d\"uaccess\""},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"# DirtyJTAG adapter"},{"line_number":236,"context_line":"ATTRS{idVendor}\u003d\u003d\"1209\", ATTRS{idProduct}\u003d\u003d\"c0ca\", MODE\u003d\"660\", GROUP\u003d\"plugdev\", TAG+\u003d\"uaccess\""},{"line_number":237,"context_line":"LABEL\u003d\"openocd_rules_end\""}],"source_content_type":"application/octet-stream","patch_set":5,"id":"b2b3fe37_8a031e9d","line":236,"in_reply_to":"58e1bbbe_13e60b23","updated":"2022-11-13 13:33:09.000000000","message":"Done","commit_id":"5981da1185a3e35fb1f6d46411c9a58dee8f26cd"}],"doc/openocd.texi":[{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"8b6c4fb7ccf998ee62f9b777830f9c2b527f7c60","unresolved":true,"context_lines":[{"line_number":488,"context_line":"ARM has released a interface standard called CMSIS-DAP that simplifies connecting"},{"line_number":489,"context_line":"debuggers to ARM Cortex based targets @url{http://www.keil.com/support/man/docs/dapdebug/dapdebug_introduction.htm}."},{"line_number":490,"context_line":""},{"line_number":491,"context_line":"@section USB Other"},{"line_number":492,"context_line":"@itemize @bullet"},{"line_number":493,"context_line":"@item @b{USBprog}"},{"line_number":494,"context_line":"@* Link: @url{http://shop.embedded-projects.net/} - which uses an Atmel MEGA32 and a UBN9604"}],"source_content_type":"text/x-texinfo","patch_set":4,"id":"271efef9_6c676bb4","line":491,"range":{"start_line":491,"start_character":0,"end_line":491,"end_character":1},"updated":"2022-11-11 21:48:45.000000000","message":"please add a reference to DirtyJTAG in this section","commit_id":"529ac78bb4b042af8632136e89780067cf599ee9"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"a64b38f65c98f2259c0da92eddd70eadbc2bd03c","unresolved":false,"context_lines":[{"line_number":488,"context_line":"ARM has released a interface standard called CMSIS-DAP that simplifies connecting"},{"line_number":489,"context_line":"debuggers to ARM Cortex based targets @url{http://www.keil.com/support/man/docs/dapdebug/dapdebug_introduction.htm}."},{"line_number":490,"context_line":""},{"line_number":491,"context_line":"@section USB Other"},{"line_number":492,"context_line":"@itemize @bullet"},{"line_number":493,"context_line":"@item @b{USBprog}"},{"line_number":494,"context_line":"@* Link: @url{http://shop.embedded-projects.net/} - which uses an Atmel MEGA32 and a UBN9604"}],"source_content_type":"text/x-texinfo","patch_set":4,"id":"7ae89b49_edf3c439","line":491,"range":{"start_line":491,"start_character":0,"end_line":491,"end_character":1},"in_reply_to":"271efef9_6c676bb4","updated":"2022-11-13 13:33:09.000000000","message":"Done","commit_id":"529ac78bb4b042af8632136e89780067cf599ee9"},{"author":{"_account_id":1000687,"name":"Tomas Vanek","display_name":"Tomas Vanek","email":"vanekt@fbl.cz","username":"vanekt"},"change_message_id":"ff58e6b8b865a2514dc77ef9ffff47976a10c98a","unresolved":true,"context_lines":[{"line_number":2488,"context_line":"openjtag, osbdm, presto, rlink, st-link, usb_blaster (ublast2), usbprog, vsllink, xds110."},{"line_number":2489,"context_line":"@end deffn"},{"line_number":2490,"context_line":""},{"line_number":2491,"context_line":"@section Interface Drivers"},{"line_number":2492,"context_line":""},{"line_number":2493,"context_line":"Each of the interface drivers listed here must be explicitly"},{"line_number":2494,"context_line":"enabled when OpenOCD is configured, in order to be made"}],"source_content_type":"text/x-texinfo","patch_set":13,"id":"ae69e851_e3629d63","line":2491,"range":{"start_line":2491,"start_character":0,"end_line":2491,"end_character":26},"updated":"2022-11-14 06:01:39.000000000","message":"Missing description in this section","commit_id":"2fc329571f5605a5fca2cb41cbe1e2614081ef21"},{"author":{"_account_id":1002076,"name":"Patrick Dussud","display_name":"phdussud","email":"phdussud@hotmail.com","username":"phdussud"},"change_message_id":"46f5dd6dc5bfb2249de3db1b424c3ce03b84774f","unresolved":false,"context_lines":[{"line_number":2488,"context_line":"openjtag, osbdm, presto, rlink, st-link, usb_blaster (ublast2), usbprog, vsllink, xds110."},{"line_number":2489,"context_line":"@end deffn"},{"line_number":2490,"context_line":""},{"line_number":2491,"context_line":"@section Interface Drivers"},{"line_number":2492,"context_line":""},{"line_number":2493,"context_line":"Each of the interface drivers listed here must be explicitly"},{"line_number":2494,"context_line":"enabled when OpenOCD is configured, in order to be made"}],"source_content_type":"text/x-texinfo","patch_set":13,"id":"feb9fcb2_545e847f","line":2491,"range":{"start_line":2491,"start_character":0,"end_line":2491,"end_character":26},"in_reply_to":"ae69e851_e3629d63","updated":"2022-11-14 23:33:13.000000000","message":"Done","commit_id":"2fc329571f5605a5fca2cb41cbe1e2614081ef21"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"ba0f838fef41efc8a2e9079d221cb516c57777fe","unresolved":true,"context_lines":[{"line_number":3541,"context_line":""},{"line_number":3542,"context_line":"@deffn {Interface Driver} {dirtyjtag}"},{"line_number":3543,"context_line":"Low cost JTAG probe using Raspberry Pico boards or blue pill stm32f1x boards."},{"line_number":3544,"context_line":"Please refer to https://github.com/phdussud/pico-dirtyJtag or https://github.com/jeanthom/DirtyJTAG\u003e"},{"line_number":3545,"context_line":"for pinout. SRST and TRST pins are supported."},{"line_number":3546,"context_line":"@end deffn"},{"line_number":3547,"context_line":""}],"source_content_type":"text/x-texinfo","patch_set":15,"id":"1695bd74_953d2ebb","line":3544,"updated":"2022-11-14 22:14:20.000000000","message":"please use @url{https://github...} for the URL.\nRemove the dirty \u0027\u003e\u0027 after second URL.","commit_id":"9559bb79fb6382725f4a619f6870d31ad6342734"},{"author":{"_account_id":1002076,"name":"Patrick Dussud","display_name":"phdussud","email":"phdussud@hotmail.com","username":"phdussud"},"change_message_id":"2424595e55868d260ba9e72ec5505dcb08c9223c","unresolved":false,"context_lines":[{"line_number":3541,"context_line":""},{"line_number":3542,"context_line":"@deffn {Interface Driver} {dirtyjtag}"},{"line_number":3543,"context_line":"Low cost JTAG probe using Raspberry Pico boards or blue pill stm32f1x boards."},{"line_number":3544,"context_line":"Please refer to https://github.com/phdussud/pico-dirtyJtag or https://github.com/jeanthom/DirtyJTAG\u003e"},{"line_number":3545,"context_line":"for pinout. SRST and TRST pins are supported."},{"line_number":3546,"context_line":"@end deffn"},{"line_number":3547,"context_line":""}],"source_content_type":"text/x-texinfo","patch_set":15,"id":"dde88d07_7de9ea80","line":3544,"in_reply_to":"1695bd74_953d2ebb","updated":"2022-11-14 23:33:47.000000000","message":"Done","commit_id":"9559bb79fb6382725f4a619f6870d31ad6342734"}],"doc/usb_adapters/1209_c0ca_dirtyjtag.txt":[{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"a64b38f65c98f2259c0da92eddd70eadbc2bd03c","unresolved":true,"context_lines":[{"line_number":1,"context_line":"# SPDX-License-Identifier: GPL-2.0-or-later OR GFDL-1.2-no-invariants-or-later"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Optional comment"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"Bus 001 Device 004: ID 1209:c0ca Generic Jean THOMAS DirtyJTAG"},{"line_number":6,"context_line":"Device Descriptor:"}],"source_content_type":"text/plain","patch_set":10,"id":"7bfc7beb_b947b256","line":3,"updated":"2022-11-13 13:33:09.000000000","message":"can you please move this file in a new folder\ndoc/usb_adapters/dirtyjtag/\nand add here, as optional comment, the github link of the firmware?","commit_id":"143c0f46807d4f0856810e6ed9ca02866b0e667c"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"cd93af7defb469e84e77d559f13ddd2dba96286b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# SPDX-License-Identifier: GPL-2.0-or-later OR GFDL-1.2-no-invariants-or-later"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Optional comment"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"Bus 001 Device 004: ID 1209:c0ca Generic Jean THOMAS DirtyJTAG"},{"line_number":6,"context_line":"Device Descriptor:"}],"source_content_type":"text/plain","patch_set":10,"id":"e2c788b6_1b0f4fa7","line":3,"in_reply_to":"7bfc7beb_b947b256","updated":"2022-11-13 23:41:41.000000000","message":"Done","commit_id":"143c0f46807d4f0856810e6ed9ca02866b0e667c"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"a64b38f65c98f2259c0da92eddd70eadbc2bd03c","unresolved":true,"context_lines":[{"line_number":59,"context_line":"        wMaxPacketSize     0x0040  1x 64 bytes"},{"line_number":60,"context_line":"        bInterval               1"},{"line_number":61,"context_line":"Device Status:     0x0000"},{"line_number":62,"context_line":"  (Bus Powered)"}],"source_content_type":"text/plain","patch_set":10,"id":"bf878e6f_9091135f","line":62,"updated":"2022-11-13 13:33:09.000000000","message":"Strange, the script did not added the newline to the last line of the file!\nOn which OS did you run it? Or did you re-edited the file?","commit_id":"143c0f46807d4f0856810e6ed9ca02866b0e667c"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"cd93af7defb469e84e77d559f13ddd2dba96286b","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        wMaxPacketSize     0x0040  1x 64 bytes"},{"line_number":60,"context_line":"        bInterval               1"},{"line_number":61,"context_line":"Device Status:     0x0000"},{"line_number":62,"context_line":"  (Bus Powered)"}],"source_content_type":"text/plain","patch_set":10,"id":"ac4bf786_578651b4","line":62,"in_reply_to":"bf878e6f_9091135f","updated":"2022-11-13 23:41:41.000000000","message":"Done","commit_id":"143c0f46807d4f0856810e6ed9ca02866b0e667c"}],"src/jtag/drivers/bitq.c":[{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"74b17d9373b9e8c27eb150568bda6e499abbf43c","unresolved":false,"context_lines":[{"line_number":203,"context_line":"\tbitq_scan_field(\u0026cmd-\u003efields[i], 1);"},{"line_number":204,"context_line":"}"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"static void bitq_stableclocks(struct stableclocks_command *cmd)"},{"line_number":207,"context_line":"{"},{"line_number":208,"context_line":"\tLOG_DEBUG_IO(\"add %d clocks\", cmd-\u003enum_cycles);"},{"line_number":209,"context_line":"\tint tms \u003d 0;"}],"source_content_type":"text/x-csrc","patch_set":21,"id":"baa059bd_07969604","line":206,"updated":"2023-01-08 11:08:35.000000000","message":"Cool, thanks.\nIdeally this improvement to bitq should go in a separate patch, but it\u0027s so self contained that we can probably keep it here","commit_id":"8eaa16989d8589f11067f248d29f5de9d938be73"}],"src/jtag/drivers/dirtyjtag.c":[{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"8b6c4fb7ccf998ee62f9b777830f9c2b527f7c60","unresolved":true,"context_lines":[{"line_number":5,"context_line":" *\t pub0@git.jeanthomas.me\t\t\t\t\t\t\t\t\t\t\t\t\t*"},{"line_number":6,"context_line":" *\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t*"},{"line_number":7,"context_line":" *\t This program is free software; you can redistribute it and/or modify\t*"},{"line_number":8,"context_line":" *\t it under the terms of the GNU General Public License as published by\t*"},{"line_number":9,"context_line":" *\t the Free Software Foundation; either version 2 of the License, or\t\t*"},{"line_number":10,"context_line":" *\t (at your option) any later version.\t\t\t\t\t\t\t\t\t*"},{"line_number":11,"context_line":" *\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t*"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"db44edeb_72797c60","line":8,"updated":"2022-11-11 21:48:45.000000000","message":"drop this GPL boilerplate. We use only the SPDX tag in the first line","commit_id":"529ac78bb4b042af8632136e89780067cf599ee9"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"a64b38f65c98f2259c0da92eddd70eadbc2bd03c","unresolved":false,"context_lines":[{"line_number":5,"context_line":" *\t pub0@git.jeanthomas.me\t\t\t\t\t\t\t\t\t\t\t\t\t*"},{"line_number":6,"context_line":" *\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t*"},{"line_number":7,"context_line":" *\t This program is free software; you can redistribute it and/or modify\t*"},{"line_number":8,"context_line":" *\t it under the terms of the GNU General Public License as published by\t*"},{"line_number":9,"context_line":" *\t the Free Software Foundation; either version 2 of the License, or\t\t*"},{"line_number":10,"context_line":" *\t (at your option) any later version.\t\t\t\t\t\t\t\t\t*"},{"line_number":11,"context_line":" *\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t*"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"09486848_4a858b80","line":8,"in_reply_to":"bf72389f_31d22dd7","updated":"2022-11-13 13:33:09.000000000","message":"Done","commit_id":"529ac78bb4b042af8632136e89780067cf599ee9"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"2f916b90d7344738fc02329743e7d200c6c25b80","unresolved":true,"context_lines":[{"line_number":5,"context_line":" *\t pub0@git.jeanthomas.me\t\t\t\t\t\t\t\t\t\t\t\t\t*"},{"line_number":6,"context_line":" *\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t*"},{"line_number":7,"context_line":" *\t This program is free software; you can redistribute it and/or modify\t*"},{"line_number":8,"context_line":" *\t it under the terms of the GNU General Public License as published by\t*"},{"line_number":9,"context_line":" *\t the Free Software Foundation; either version 2 of the License, or\t\t*"},{"line_number":10,"context_line":" *\t (at your option) any later version.\t\t\t\t\t\t\t\t\t*"},{"line_number":11,"context_line":" *\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t*"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"bf72389f_31d22dd7","line":8,"in_reply_to":"db44edeb_72797c60","updated":"2022-11-12 10:03:46.000000000","message":"You should left the original copyright.\nAnd, since you are contributing to upstream it in OpenOCD, you can even add your own, if you want.","commit_id":"529ac78bb4b042af8632136e89780067cf599ee9"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"8b6c4fb7ccf998ee62f9b777830f9c2b527f7c60","unresolved":true,"context_lines":[{"line_number":38,"context_line":"static unsigned int dirtyjtag_ep_read \u003d 0x82;"},{"line_number":39,"context_line":"#define DIRTYJTAG_USB_TIMEOUT 100"},{"line_number":40,"context_line":"static const uint16_t dirtyjtag_vid \u003d 0x1209;"},{"line_number":41,"context_line":"static const uint16_t dirtyjtag_pid \u003d 0xC0CA;"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"enum dirtyjtag_cmd {"},{"line_number":44,"context_line":"\tCMD_STOP \u003d 0x00,"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"f9d8d4a8_41f00880","line":41,"updated":"2022-11-11 21:48:45.000000000","message":"this VID:PID should be added in the file\ncontrib/60-openocd.rules\n\nAlso, I will soon add the patch series\nhttps://review.openocd.org/7296\nhttps://review.openocd.org/7297\nhttps://review.openocd.org/7298\nCan you please run the script in the first patch and propose a file\ndoc/usb_adapters/dirtyjtag/1209_c0ca_dirtyjtag.txt","commit_id":"529ac78bb4b042af8632136e89780067cf599ee9"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"a64b38f65c98f2259c0da92eddd70eadbc2bd03c","unresolved":false,"context_lines":[{"line_number":38,"context_line":"static unsigned int dirtyjtag_ep_read \u003d 0x82;"},{"line_number":39,"context_line":"#define DIRTYJTAG_USB_TIMEOUT 100"},{"line_number":40,"context_line":"static const uint16_t dirtyjtag_vid \u003d 0x1209;"},{"line_number":41,"context_line":"static const uint16_t dirtyjtag_pid \u003d 0xC0CA;"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"enum dirtyjtag_cmd {"},{"line_number":44,"context_line":"\tCMD_STOP \u003d 0x00,"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"255918f8_18bf0c49","line":41,"in_reply_to":"f9d8d4a8_41f00880","updated":"2022-11-13 13:33:09.000000000","message":"Done","commit_id":"529ac78bb4b042af8632136e89780067cf599ee9"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"8b6c4fb7ccf998ee62f9b777830f9c2b527f7c60","unresolved":true,"context_lines":[{"line_number":50,"context_line":"\tCMD_CLK \u003d 0x06"},{"line_number":51,"context_line":"};"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"// Modifiers applicable only to DirtyJTAG2"},{"line_number":54,"context_line":"enum command_modifier { EXTEND_LENGTH \u003d 0x40, NO_READ \u003d 0x80, READOUT \u003d 0x80 };"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"struct version_specific {"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"39d8c5b5_55c07ef2","line":53,"updated":"2022-11-11 21:48:45.000000000","message":"comments should use /* ... */\nAlso below","commit_id":"529ac78bb4b042af8632136e89780067cf599ee9"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"2f916b90d7344738fc02329743e7d200c6c25b80","unresolved":false,"context_lines":[{"line_number":50,"context_line":"\tCMD_CLK \u003d 0x06"},{"line_number":51,"context_line":"};"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"// Modifiers applicable only to DirtyJTAG2"},{"line_number":54,"context_line":"enum command_modifier { EXTEND_LENGTH \u003d 0x40, NO_READ \u003d 0x80, READOUT \u003d 0x80 };"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"struct version_specific {"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"7d818927_d0fbb62b","line":53,"in_reply_to":"39d8c5b5_55c07ef2","updated":"2022-11-12 10:03:46.000000000","message":"Done","commit_id":"529ac78bb4b042af8632136e89780067cf599ee9"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"8b6c4fb7ccf998ee62f9b777830f9c2b527f7c60","unresolved":true,"context_lines":[{"line_number":51,"context_line":"};"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"// Modifiers applicable only to DirtyJTAG2"},{"line_number":54,"context_line":"enum command_modifier { EXTEND_LENGTH \u003d 0x40, NO_READ \u003d 0x80, READOUT \u003d 0x80 };"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"struct version_specific {"},{"line_number":57,"context_line":"\tuint8_t no_read;\t\t// command modifier for xfer no read"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"f2e5caf5_f7510281","line":54,"updated":"2022-11-11 21:48:45.000000000","message":"put them in separate lines, as you have done above for enum dirtyjtag_cmd","commit_id":"529ac78bb4b042af8632136e89780067cf599ee9"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"2f916b90d7344738fc02329743e7d200c6c25b80","unresolved":false,"context_lines":[{"line_number":51,"context_line":"};"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"// Modifiers applicable only to DirtyJTAG2"},{"line_number":54,"context_line":"enum command_modifier { EXTEND_LENGTH \u003d 0x40, NO_READ \u003d 0x80, READOUT \u003d 0x80 };"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"struct version_specific {"},{"line_number":57,"context_line":"\tuint8_t no_read;\t\t// command modifier for xfer no read"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"631999f8_1005ea18","line":54,"in_reply_to":"f2e5caf5_f7510281","updated":"2022-11-12 10:03:46.000000000","message":"Done","commit_id":"529ac78bb4b042af8632136e89780067cf599ee9"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"8b6c4fb7ccf998ee62f9b777830f9c2b527f7c60","unresolved":true,"context_lines":[{"line_number":59,"context_line":"};"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"static struct version_specific dirtyjtag_v_options[3] \u003d {"},{"line_number":62,"context_line":"\t\t{0, 240}, {0, 240}, {NO_READ, 496}};"},{"line_number":63,"context_line":"static int dirtyjtag_version;"},{"line_number":64,"context_line":"enum dirtyjtag_signal {"},{"line_number":65,"context_line":"\tSIG_TCK \u003d (1 \u003c\u003c 1),"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"75c5ea3e_4b0dd52f","line":62,"updated":"2022-11-11 21:48:45.000000000","message":"also here, one per line","commit_id":"529ac78bb4b042af8632136e89780067cf599ee9"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"2f916b90d7344738fc02329743e7d200c6c25b80","unresolved":false,"context_lines":[{"line_number":59,"context_line":"};"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"static struct version_specific dirtyjtag_v_options[3] \u003d {"},{"line_number":62,"context_line":"\t\t{0, 240}, {0, 240}, {NO_READ, 496}};"},{"line_number":63,"context_line":"static int dirtyjtag_version;"},{"line_number":64,"context_line":"enum dirtyjtag_signal {"},{"line_number":65,"context_line":"\tSIG_TCK \u003d (1 \u003c\u003c 1),"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"57be62a3_941f7d8b","line":62,"in_reply_to":"75c5ea3e_4b0dd52f","updated":"2022-11-12 10:03:46.000000000","message":"Done","commit_id":"529ac78bb4b042af8632136e89780067cf599ee9"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"8b6c4fb7ccf998ee62f9b777830f9c2b527f7c60","unresolved":true,"context_lines":[{"line_number":62,"context_line":"\t\t{0, 240}, {0, 240}, {NO_READ, 496}};"},{"line_number":63,"context_line":"static int dirtyjtag_version;"},{"line_number":64,"context_line":"enum dirtyjtag_signal {"},{"line_number":65,"context_line":"\tSIG_TCK \u003d (1 \u003c\u003c 1),"},{"line_number":66,"context_line":"\tSIG_TDI \u003d (1 \u003c\u003c 2),"},{"line_number":67,"context_line":"\tSIG_TDO \u003d (1 \u003c\u003c 3),"},{"line_number":68,"context_line":"\tSIG_TMS \u003d (1 \u003c\u003c 4),"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"b5a68dc4_5fec76ba","line":65,"updated":"2022-11-11 21:48:45.000000000","message":"SIG_TCK \u003d BIT(1),","commit_id":"529ac78bb4b042af8632136e89780067cf599ee9"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"a64b38f65c98f2259c0da92eddd70eadbc2bd03c","unresolved":false,"context_lines":[{"line_number":62,"context_line":"\t\t{0, 240}, {0, 240}, {NO_READ, 496}};"},{"line_number":63,"context_line":"static int dirtyjtag_version;"},{"line_number":64,"context_line":"enum dirtyjtag_signal {"},{"line_number":65,"context_line":"\tSIG_TCK \u003d (1 \u003c\u003c 1),"},{"line_number":66,"context_line":"\tSIG_TDI \u003d (1 \u003c\u003c 2),"},{"line_number":67,"context_line":"\tSIG_TDO \u003d (1 \u003c\u003c 3),"},{"line_number":68,"context_line":"\tSIG_TMS \u003d (1 \u003c\u003c 4),"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"97febe6c_132a4f66","line":65,"in_reply_to":"b5a68dc4_5fec76ba","updated":"2022-11-13 13:33:09.000000000","message":"Done","commit_id":"529ac78bb4b042af8632136e89780067cf599ee9"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"8b6c4fb7ccf998ee62f9b777830f9c2b527f7c60","unresolved":true,"context_lines":[{"line_number":75,"context_line":"/**"},{"line_number":76,"context_line":" * Utils"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"static int min(int a, int b)"},{"line_number":79,"context_line":"{"},{"line_number":80,"context_line":"\treturn (a \u003c b) ? a : b;"},{"line_number":81,"context_line":"}"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"68f2b1fa_0f110637","line":78,"updated":"2022-11-11 21:48:45.000000000","message":"this is commented, can be removed?","commit_id":"529ac78bb4b042af8632136e89780067cf599ee9"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"2f916b90d7344738fc02329743e7d200c6c25b80","unresolved":false,"context_lines":[{"line_number":75,"context_line":"/**"},{"line_number":76,"context_line":" * Utils"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"static int min(int a, int b)"},{"line_number":79,"context_line":"{"},{"line_number":80,"context_line":"\treturn (a \u003c b) ? a : b;"},{"line_number":81,"context_line":"}"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"7d094248_e8405bd4","line":78,"in_reply_to":"68f2b1fa_0f110637","updated":"2022-11-12 10:03:46.000000000","message":"Done","commit_id":"529ac78bb4b042af8632136e89780067cf599ee9"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"8b6c4fb7ccf998ee62f9b777830f9c2b527f7c60","unresolved":true,"context_lines":[{"line_number":80,"context_line":"\treturn (a \u003c b) ? a : b;"},{"line_number":81,"context_line":"}"},{"line_number":82,"context_line":"*/"},{"line_number":83,"context_line":"static unsigned char swap_bits(unsigned char x)"},{"line_number":84,"context_line":"{"},{"line_number":85,"context_line":"\tconst unsigned char lut[16] \u003d {0x0, 0x8, 0x4, 0xc, 0x2, 0xa, 0x6, 0xe,"},{"line_number":86,"context_line":"\t\t\t\t 0x1, 0x9, 0x5, 0xd, 0x3, 0xb, 0x7, 0xf};"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"45154277_c312a964","line":83,"updated":"2022-11-11 21:48:45.000000000","message":"we already have flip_u32(), please use it in place of this new function","commit_id":"529ac78bb4b042af8632136e89780067cf599ee9"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"2f916b90d7344738fc02329743e7d200c6c25b80","unresolved":false,"context_lines":[{"line_number":80,"context_line":"\treturn (a \u003c b) ? a : b;"},{"line_number":81,"context_line":"}"},{"line_number":82,"context_line":"*/"},{"line_number":83,"context_line":"static unsigned char swap_bits(unsigned char x)"},{"line_number":84,"context_line":"{"},{"line_number":85,"context_line":"\tconst unsigned char lut[16] \u003d {0x0, 0x8, 0x4, 0xc, 0x2, 0xa, 0x6, 0xe,"},{"line_number":86,"context_line":"\t\t\t\t 0x1, 0x9, 0x5, 0xd, 0x3, 0xb, 0x7, 0xf};"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"e4cd43a6_ab132b98","line":83,"in_reply_to":"45154277_c312a964","updated":"2022-11-12 10:03:46.000000000","message":"Done","commit_id":"529ac78bb4b042af8632136e89780067cf599ee9"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"8b6c4fb7ccf998ee62f9b777830f9c2b527f7c60","unresolved":true,"context_lines":[{"line_number":105,"context_line":""},{"line_number":106,"context_line":"\tdirtyjtag_buffer[dirtyjtag_buffer_use] \u003d CMD_STOP;"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"\tres \u003d jtag_libusb_bulk_write(usb_handle, dirtyjtag_ep_write, (char *)dirtyjtag_buffer,"},{"line_number":109,"context_line":"\t\t\t\t\t\t\t\t dirtyjtag_buffer_use + 1, DIRTYJTAG_USB_TIMEOUT, (int *)\u0026sent);"},{"line_number":110,"context_line":"\tassert(res \u003d\u003d ERROR_OK);"},{"line_number":111,"context_line":"\tassert(sent \u003d\u003d dirtyjtag_buffer_use + 1);"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"0d4bd0da_86e0a681","line":108,"updated":"2022-11-11 21:48:45.000000000","message":"the variable should be defined in the place of its first use. Here it should be\n int res \u003d jtag_libusb_bulk_write(...\n\nPlease fix the other occurrences below","commit_id":"529ac78bb4b042af8632136e89780067cf599ee9"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"a64b38f65c98f2259c0da92eddd70eadbc2bd03c","unresolved":false,"context_lines":[{"line_number":105,"context_line":""},{"line_number":106,"context_line":"\tdirtyjtag_buffer[dirtyjtag_buffer_use] \u003d CMD_STOP;"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"\tres \u003d jtag_libusb_bulk_write(usb_handle, dirtyjtag_ep_write, (char *)dirtyjtag_buffer,"},{"line_number":109,"context_line":"\t\t\t\t\t\t\t\t dirtyjtag_buffer_use + 1, DIRTYJTAG_USB_TIMEOUT, (int *)\u0026sent);"},{"line_number":110,"context_line":"\tassert(res \u003d\u003d ERROR_OK);"},{"line_number":111,"context_line":"\tassert(sent \u003d\u003d dirtyjtag_buffer_use + 1);"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"37cf4f31_32c0e5b0","line":108,"in_reply_to":"0d4bd0da_86e0a681","updated":"2022-11-13 13:33:09.000000000","message":"Done","commit_id":"529ac78bb4b042af8632136e89780067cf599ee9"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"8b6c4fb7ccf998ee62f9b777830f9c2b527f7c60","unresolved":true,"context_lines":[{"line_number":107,"context_line":""},{"line_number":108,"context_line":"\tres \u003d jtag_libusb_bulk_write(usb_handle, dirtyjtag_ep_write, (char *)dirtyjtag_buffer,"},{"line_number":109,"context_line":"\t\t\t\t\t\t\t\t dirtyjtag_buffer_use + 1, DIRTYJTAG_USB_TIMEOUT, (int *)\u0026sent);"},{"line_number":110,"context_line":"\tassert(res \u003d\u003d ERROR_OK);"},{"line_number":111,"context_line":"\tassert(sent \u003d\u003d dirtyjtag_buffer_use + 1);"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"\tdirtyjtag_buffer_use \u003d 0;"},{"line_number":114,"context_line":"}"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"44c1e16a_b5918b2b","line":111,"range":{"start_line":110,"start_character":1,"end_line":111,"end_character":28},"updated":"2022-11-11 21:48:45.000000000","message":"NO!\nabsolutely no assert() for runtime errors. We cannot accept that openocd crash because of an issue on USB connection.\nChange the prototype of this function so the error gets propagated and use:\n if (res !\u003d ERROR_OK)\n   return res;\n if (sent !\u003d dirtyjtag_buffer_use + 1) {\n   LOG_ERROR(\"something\")\n   return ERROR_JTAG_DEVICE_ERROR;\n }","commit_id":"529ac78bb4b042af8632136e89780067cf599ee9"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"2f916b90d7344738fc02329743e7d200c6c25b80","unresolved":false,"context_lines":[{"line_number":107,"context_line":""},{"line_number":108,"context_line":"\tres \u003d jtag_libusb_bulk_write(usb_handle, dirtyjtag_ep_write, (char *)dirtyjtag_buffer,"},{"line_number":109,"context_line":"\t\t\t\t\t\t\t\t dirtyjtag_buffer_use + 1, DIRTYJTAG_USB_TIMEOUT, (int *)\u0026sent);"},{"line_number":110,"context_line":"\tassert(res \u003d\u003d ERROR_OK);"},{"line_number":111,"context_line":"\tassert(sent \u003d\u003d dirtyjtag_buffer_use + 1);"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"\tdirtyjtag_buffer_use \u003d 0;"},{"line_number":114,"context_line":"}"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"64e0f371_e0d2d010","line":111,"range":{"start_line":110,"start_character":1,"end_line":111,"end_character":28},"in_reply_to":"44c1e16a_b5918b2b","updated":"2022-11-12 10:03:46.000000000","message":"Done","commit_id":"529ac78bb4b042af8632136e89780067cf599ee9"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"8b6c4fb7ccf998ee62f9b777830f9c2b527f7c60","unresolved":true,"context_lines":[{"line_number":115,"context_line":""},{"line_number":116,"context_line":"static void dirtyjtag_buffer_append(const uint8_t *command, size_t length)"},{"line_number":117,"context_line":"{"},{"line_number":118,"context_line":"\tassert(length \u003c dirtyjtag_buffer_size);"},{"line_number":119,"context_line":"\tassert(command);"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"\tif ((dirtyjtag_buffer_use + length + 1) \u003e dirtyjtag_buffer_size)"},{"line_number":122,"context_line":"\t\tdirtyjtag_buffer_flush();"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"a61cbcff_ca875f4e","line":119,"range":{"start_line":118,"start_character":1,"end_line":119,"end_character":16},"updated":"2022-11-11 21:48:45.000000000","message":"Here I don\u0027t know. I\u0027m still concerned about use of assert().\nIf the check is about of runtime error, it should just return ERROR_something.\nIf the check is to detect an incorrect code modification, meaning this error should never happen, than the use of assert() is allowed","commit_id":"529ac78bb4b042af8632136e89780067cf599ee9"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"2f916b90d7344738fc02329743e7d200c6c25b80","unresolved":false,"context_lines":[{"line_number":115,"context_line":""},{"line_number":116,"context_line":"static void dirtyjtag_buffer_append(const uint8_t *command, size_t length)"},{"line_number":117,"context_line":"{"},{"line_number":118,"context_line":"\tassert(length \u003c dirtyjtag_buffer_size);"},{"line_number":119,"context_line":"\tassert(command);"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"\tif ((dirtyjtag_buffer_use + length + 1) \u003e dirtyjtag_buffer_size)"},{"line_number":122,"context_line":"\t\tdirtyjtag_buffer_flush();"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"8d22b659_cbab8615","line":119,"range":{"start_line":118,"start_character":1,"end_line":119,"end_character":16},"in_reply_to":"a61cbcff_ca875f4e","updated":"2022-11-12 10:03:46.000000000","message":"Done","commit_id":"529ac78bb4b042af8632136e89780067cf599ee9"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"8b6c4fb7ccf998ee62f9b777830f9c2b527f7c60","unresolved":true,"context_lines":[{"line_number":150,"context_line":""},{"line_number":151,"context_line":"\tres \u003d jtag_libusb_bulk_read(usb_handle, dirtyjtag_ep_read, \u0026state, 1,"},{"line_number":152,"context_line":"\t\t\t\t\t\tDIRTYJTAG_USB_TIMEOUT, \u0026read);"},{"line_number":153,"context_line":"\tassert(res \u003d\u003d ERROR_OK);"},{"line_number":154,"context_line":"\tassert(read \u003d\u003d 1);"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"\treturn !!(state \u0026 SIG_TDO);"},{"line_number":157,"context_line":"}"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"1d247ff2_32778048","line":154,"range":{"start_line":153,"start_character":1,"end_line":154,"end_character":19},"updated":"2022-11-11 21:48:45.000000000","message":"here, no assert()","commit_id":"529ac78bb4b042af8632136e89780067cf599ee9"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"2f916b90d7344738fc02329743e7d200c6c25b80","unresolved":false,"context_lines":[{"line_number":150,"context_line":""},{"line_number":151,"context_line":"\tres \u003d jtag_libusb_bulk_read(usb_handle, dirtyjtag_ep_read, \u0026state, 1,"},{"line_number":152,"context_line":"\t\t\t\t\t\tDIRTYJTAG_USB_TIMEOUT, \u0026read);"},{"line_number":153,"context_line":"\tassert(res \u003d\u003d ERROR_OK);"},{"line_number":154,"context_line":"\tassert(read \u003d\u003d 1);"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"\treturn !!(state \u0026 SIG_TDO);"},{"line_number":157,"context_line":"}"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"5d6129aa_96f3ce84","line":154,"range":{"start_line":153,"start_character":1,"end_line":154,"end_character":19},"in_reply_to":"1d247ff2_32778048","updated":"2022-11-12 10:03:46.000000000","message":"Done","commit_id":"529ac78bb4b042af8632136e89780067cf599ee9"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"8b6c4fb7ccf998ee62f9b777830f9c2b527f7c60","unresolved":true,"context_lines":[{"line_number":205,"context_line":"\tuint8_t rx_buf[64];"},{"line_number":206,"context_line":"\tres \u003d jtag_libusb_bulk_write(usb_handle, dirtyjtag_ep_write, (char *)buf, 2,"},{"line_number":207,"context_line":"\t\t\t\t\t\t DIRTYJTAG_USB_TIMEOUT, \u0026actual_length);"},{"line_number":208,"context_line":"\tassert(res \u003d\u003d ERROR_OK);"},{"line_number":209,"context_line":"\tif (res) {"},{"line_number":210,"context_line":"\t\tLOG_ERROR(\"%s: usb bulk write failed\", __func__);"},{"line_number":211,"context_line":"\t\treturn ERROR_JTAG_INIT_FAILED;"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"573f3ff2_549678a0","line":208,"updated":"2022-11-11 21:48:45.000000000","message":"no assert() here","commit_id":"529ac78bb4b042af8632136e89780067cf599ee9"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"2f916b90d7344738fc02329743e7d200c6c25b80","unresolved":false,"context_lines":[{"line_number":205,"context_line":"\tuint8_t rx_buf[64];"},{"line_number":206,"context_line":"\tres \u003d jtag_libusb_bulk_write(usb_handle, dirtyjtag_ep_write, (char *)buf, 2,"},{"line_number":207,"context_line":"\t\t\t\t\t\t DIRTYJTAG_USB_TIMEOUT, \u0026actual_length);"},{"line_number":208,"context_line":"\tassert(res \u003d\u003d ERROR_OK);"},{"line_number":209,"context_line":"\tif (res) {"},{"line_number":210,"context_line":"\t\tLOG_ERROR(\"%s: usb bulk write failed\", __func__);"},{"line_number":211,"context_line":"\t\treturn ERROR_JTAG_INIT_FAILED;"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"e6b41290_efaaa07b","line":208,"in_reply_to":"573f3ff2_549678a0","updated":"2022-11-12 10:03:46.000000000","message":"Done","commit_id":"529ac78bb4b042af8632136e89780067cf599ee9"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"8b6c4fb7ccf998ee62f9b777830f9c2b527f7c60","unresolved":true,"context_lines":[{"line_number":342,"context_line":"\t\t\tLOG_ERROR(\"BUG: %s -\u003e %s isn\u0027t a valid TAP transition\","},{"line_number":343,"context_line":"\t\ttap_state_name(tap_get_state()),"},{"line_number":344,"context_line":"\t\ttap_state_name(cmd-\u003epath[state_count]));"},{"line_number":345,"context_line":"\t\t\texit(-1);"},{"line_number":346,"context_line":"\t\t}"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"\t\tdirtyjtag_clk(1, tms, 0);"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"10504a14_002aee2c","line":345,"updated":"2022-11-11 21:48:45.000000000","message":"NO!\nabsolutely no exit()\nRuntime errors should be handled by the function returning ERROR_something.\nOpenOCD cannot exit() for such case.","commit_id":"529ac78bb4b042af8632136e89780067cf599ee9"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"a64b38f65c98f2259c0da92eddd70eadbc2bd03c","unresolved":false,"context_lines":[{"line_number":342,"context_line":"\t\t\tLOG_ERROR(\"BUG: %s -\u003e %s isn\u0027t a valid TAP transition\","},{"line_number":343,"context_line":"\t\ttap_state_name(tap_get_state()),"},{"line_number":344,"context_line":"\t\ttap_state_name(cmd-\u003epath[state_count]));"},{"line_number":345,"context_line":"\t\t\texit(-1);"},{"line_number":346,"context_line":"\t\t}"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"\t\tdirtyjtag_clk(1, tms, 0);"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"2cf6ae1e_0c933658","line":345,"in_reply_to":"10504a14_002aee2c","updated":"2022-11-13 13:33:09.000000000","message":"Done","commit_id":"529ac78bb4b042af8632136e89780067cf599ee9"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"8b6c4fb7ccf998ee62f9b777830f9c2b527f7c60","unresolved":true,"context_lines":[{"line_number":402,"context_line":"\t// {"},{"line_number":403,"context_line":"\t//\tprintf(\"%02x\", buffer[i]);"},{"line_number":404,"context_line":"\t// }"},{"line_number":405,"context_line":"\t// printf(\"\\n\");"},{"line_number":406,"context_line":""},{"line_number":407,"context_line":"\tassert(scan_size \u003e 0);"},{"line_number":408,"context_line":"\tscan_size--;"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"a0e510d5_fb95e886","line":405,"updated":"2022-11-11 21:48:45.000000000","message":"no reason to keep this commented code, please drop it","commit_id":"529ac78bb4b042af8632136e89780067cf599ee9"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"2f916b90d7344738fc02329743e7d200c6c25b80","unresolved":false,"context_lines":[{"line_number":402,"context_line":"\t// {"},{"line_number":403,"context_line":"\t//\tprintf(\"%02x\", buffer[i]);"},{"line_number":404,"context_line":"\t// }"},{"line_number":405,"context_line":"\t// printf(\"\\n\");"},{"line_number":406,"context_line":""},{"line_number":407,"context_line":"\tassert(scan_size \u003e 0);"},{"line_number":408,"context_line":"\tscan_size--;"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"8c26992c_0e426c4f","line":405,"in_reply_to":"a0e510d5_fb95e886","updated":"2022-11-12 10:03:46.000000000","message":"Done","commit_id":"529ac78bb4b042af8632136e89780067cf599ee9"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"8b6c4fb7ccf998ee62f9b777830f9c2b527f7c60","unresolved":true,"context_lines":[{"line_number":404,"context_line":"\t// }"},{"line_number":405,"context_line":"\t// printf(\"\\n\");"},{"line_number":406,"context_line":""},{"line_number":407,"context_line":"\tassert(scan_size \u003e 0);"},{"line_number":408,"context_line":"\tscan_size--;"},{"line_number":409,"context_line":""},{"line_number":410,"context_line":"\tif (!((!ir_scan \u0026\u0026 (tap_get_state() \u003d\u003d TAP_DRSHIFT)) ||"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"acb0d9cb_48b56a4f","line":407,"updated":"2022-11-11 21:48:45.000000000","message":"ditto","commit_id":"529ac78bb4b042af8632136e89780067cf599ee9"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"2f916b90d7344738fc02329743e7d200c6c25b80","unresolved":false,"context_lines":[{"line_number":404,"context_line":"\t// }"},{"line_number":405,"context_line":"\t// printf(\"\\n\");"},{"line_number":406,"context_line":""},{"line_number":407,"context_line":"\tassert(scan_size \u003e 0);"},{"line_number":408,"context_line":"\tscan_size--;"},{"line_number":409,"context_line":""},{"line_number":410,"context_line":"\tif (!((!ir_scan \u0026\u0026 (tap_get_state() \u003d\u003d TAP_DRSHIFT)) ||"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"9dda4627_3a226329","line":407,"in_reply_to":"acb0d9cb_48b56a4f","updated":"2022-11-12 10:03:46.000000000","message":"Done","commit_id":"529ac78bb4b042af8632136e89780067cf599ee9"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"8b6c4fb7ccf998ee62f9b777830f9c2b527f7c60","unresolved":true,"context_lines":[{"line_number":448,"context_line":"\t\t\tread \u003d 0;"},{"line_number":449,"context_line":"\t\t\tres \u003d jtag_libusb_bulk_read(usb_handle, dirtyjtag_ep_read, (char *)xfer_rx,"},{"line_number":450,"context_line":"\t\t\t\t\t\t\t\t\t\t(sent_bits \u003e 255) ? sent_bytes : 32, DIRTYJTAG_USB_TIMEOUT, \u0026read);"},{"line_number":451,"context_line":"\t\t\tassert(res \u003d\u003d ERROR_OK);"},{"line_number":452,"context_line":"\t\t\tassert(read \u003e\u003d sent_bytes);"},{"line_number":453,"context_line":"\t\t}"},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"\t\tif (type !\u003d SCAN_OUT) {"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"fc124e5d_7b6df733","line":452,"range":{"start_line":451,"start_character":4,"end_line":452,"end_character":7},"updated":"2022-11-11 21:48:45.000000000","message":"ditto","commit_id":"529ac78bb4b042af8632136e89780067cf599ee9"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"2f916b90d7344738fc02329743e7d200c6c25b80","unresolved":false,"context_lines":[{"line_number":448,"context_line":"\t\t\tread \u003d 0;"},{"line_number":449,"context_line":"\t\t\tres \u003d jtag_libusb_bulk_read(usb_handle, dirtyjtag_ep_read, (char *)xfer_rx,"},{"line_number":450,"context_line":"\t\t\t\t\t\t\t\t\t\t(sent_bits \u003e 255) ? sent_bytes : 32, DIRTYJTAG_USB_TIMEOUT, \u0026read);"},{"line_number":451,"context_line":"\t\t\tassert(res \u003d\u003d ERROR_OK);"},{"line_number":452,"context_line":"\t\t\tassert(read \u003e\u003d sent_bytes);"},{"line_number":453,"context_line":"\t\t}"},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"\t\tif (type !\u003d SCAN_OUT) {"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"1f3dc41b_3cacb047","line":452,"range":{"start_line":451,"start_character":4,"end_line":452,"end_character":7},"in_reply_to":"fc124e5d_7b6df733","updated":"2022-11-12 10:03:46.000000000","message":"Done","commit_id":"529ac78bb4b042af8632136e89780067cf599ee9"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"8b6c4fb7ccf998ee62f9b777830f9c2b527f7c60","unresolved":true,"context_lines":[{"line_number":494,"context_line":"\tretval \u003d ERROR_OK;"},{"line_number":495,"context_line":""},{"line_number":496,"context_line":"\twhile (cmd) {"},{"line_number":497,"context_line":"\t\tswitch (cmd-\u003etype) {"},{"line_number":498,"context_line":"\t\t\tcase JTAG_RESET:"},{"line_number":499,"context_line":"\t\t\t\tLOG_DEBUG_IO(\"reset trst: %i srst %i\", cmd-\u003ecmd.reset-\u003etrst,"},{"line_number":500,"context_line":"\t\t\t\t\t\t\t cmd-\u003ecmd.reset-\u003esrst);"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"631ed829_679a5da1","line":497,"updated":"2022-11-11 21:48:45.000000000","message":"\u0027switch\u0027 and \u0027case\u0027 should be aligned with the same indentation","commit_id":"529ac78bb4b042af8632136e89780067cf599ee9"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"2f916b90d7344738fc02329743e7d200c6c25b80","unresolved":false,"context_lines":[{"line_number":494,"context_line":"\tretval \u003d ERROR_OK;"},{"line_number":495,"context_line":""},{"line_number":496,"context_line":"\twhile (cmd) {"},{"line_number":497,"context_line":"\t\tswitch (cmd-\u003etype) {"},{"line_number":498,"context_line":"\t\t\tcase JTAG_RESET:"},{"line_number":499,"context_line":"\t\t\t\tLOG_DEBUG_IO(\"reset trst: %i srst %i\", cmd-\u003ecmd.reset-\u003etrst,"},{"line_number":500,"context_line":"\t\t\t\t\t\t\t cmd-\u003ecmd.reset-\u003esrst);"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"a64c13ae_e98b7a81","line":497,"in_reply_to":"631ed829_679a5da1","updated":"2022-11-12 10:03:46.000000000","message":"Done","commit_id":"529ac78bb4b042af8632136e89780067cf599ee9"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"8b6c4fb7ccf998ee62f9b777830f9c2b527f7c60","unresolved":true,"context_lines":[{"line_number":495,"context_line":""},{"line_number":496,"context_line":"\twhile (cmd) {"},{"line_number":497,"context_line":"\t\tswitch (cmd-\u003etype) {"},{"line_number":498,"context_line":"\t\t\tcase JTAG_RESET:"},{"line_number":499,"context_line":"\t\t\t\tLOG_DEBUG_IO(\"reset trst: %i srst %i\", cmd-\u003ecmd.reset-\u003etrst,"},{"line_number":500,"context_line":"\t\t\t\t\t\t\t cmd-\u003ecmd.reset-\u003esrst);"},{"line_number":501,"context_line":"\t\t\t\tif ((cmd-\u003ecmd.reset-\u003etrst \u003d\u003d 1) ||"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"ac817dfc_15553d8d","line":498,"updated":"2022-11-11 21:48:45.000000000","message":"The handling of JTAG_RESET is obsoleted. You already have below\n struct adapter_driver dirtyjtag_adapter_driver \u003d {\n   ...\n   .reset \u003d dirtyjtag_reset,\n\nso this case will never be executed. Please drop it","commit_id":"529ac78bb4b042af8632136e89780067cf599ee9"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"2f916b90d7344738fc02329743e7d200c6c25b80","unresolved":false,"context_lines":[{"line_number":495,"context_line":""},{"line_number":496,"context_line":"\twhile (cmd) {"},{"line_number":497,"context_line":"\t\tswitch (cmd-\u003etype) {"},{"line_number":498,"context_line":"\t\t\tcase JTAG_RESET:"},{"line_number":499,"context_line":"\t\t\t\tLOG_DEBUG_IO(\"reset trst: %i srst %i\", cmd-\u003ecmd.reset-\u003etrst,"},{"line_number":500,"context_line":"\t\t\t\t\t\t\t cmd-\u003ecmd.reset-\u003esrst);"},{"line_number":501,"context_line":"\t\t\t\tif ((cmd-\u003ecmd.reset-\u003etrst \u003d\u003d 1) ||"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"65449da5_dcc77ab1","line":498,"in_reply_to":"ac817dfc_15553d8d","updated":"2022-11-12 10:03:46.000000000","message":"Done","commit_id":"529ac78bb4b042af8632136e89780067cf599ee9"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"2f916b90d7344738fc02329743e7d200c6c25b80","unresolved":true,"context_lines":[{"line_number":434,"context_line":"\t\t\tmemset(\u0026xfer_tx[2], 0, sent_bytes);"},{"line_number":435,"context_line":"\t\t}"},{"line_number":436,"context_line":""},{"line_number":437,"context_line":"\t\tres \u003d jtag_libusb_bulk_write(usb_handle, dirtyjtag_ep_write, (char *)xfer_tx,"},{"line_number":438,"context_line":"\t\t\t\t\t\t\t\t\t sent_bytes + 2, DIRTYJTAG_USB_TIMEOUT, \u0026written);"},{"line_number":439,"context_line":""},{"line_number":440,"context_line":"\t\tif (!dirtyjtag_v_options-\u003eno_read || type !\u003d SCAN_OUT) {"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"1779dd20_2dfea8e7","line":437,"updated":"2022-11-12 10:03:46.000000000","message":"this returned value is not checked and scan-build will trigger it as \u0027dead assignement\u0027 error.\nPlease check it !\u003d ERROR_OK","commit_id":"5981da1185a3e35fb1f6d46411c9a58dee8f26cd"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"a64b38f65c98f2259c0da92eddd70eadbc2bd03c","unresolved":false,"context_lines":[{"line_number":434,"context_line":"\t\t\tmemset(\u0026xfer_tx[2], 0, sent_bytes);"},{"line_number":435,"context_line":"\t\t}"},{"line_number":436,"context_line":""},{"line_number":437,"context_line":"\t\tres \u003d jtag_libusb_bulk_write(usb_handle, dirtyjtag_ep_write, (char *)xfer_tx,"},{"line_number":438,"context_line":"\t\t\t\t\t\t\t\t\t sent_bytes + 2, DIRTYJTAG_USB_TIMEOUT, \u0026written);"},{"line_number":439,"context_line":""},{"line_number":440,"context_line":"\t\tif (!dirtyjtag_v_options-\u003eno_read || type !\u003d SCAN_OUT) {"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"8932152a_10efa978","line":437,"in_reply_to":"1779dd20_2dfea8e7","updated":"2022-11-13 13:33:09.000000000","message":"Done","commit_id":"5981da1185a3e35fb1f6d46411c9a58dee8f26cd"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"2f916b90d7344738fc02329743e7d200c6c25b80","unresolved":true,"context_lines":[{"line_number":442,"context_line":"\t\t\tres \u003d jtag_libusb_bulk_read(usb_handle, dirtyjtag_ep_read, (char *)xfer_rx,"},{"line_number":443,"context_line":"\t\t\t\t\t\t\t\t\t\t(sent_bits \u003e 255) ? sent_bytes : 32, DIRTYJTAG_USB_TIMEOUT, \u0026read);"},{"line_number":444,"context_line":"\t\t\tif (res !\u003d ERROR_OK)"},{"line_number":445,"context_line":"\t\t\t\treturn res;"},{"line_number":446,"context_line":"\t\t}"},{"line_number":447,"context_line":""},{"line_number":448,"context_line":"\t\tif (type !\u003d SCAN_OUT) {"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"c3dc74c0_7f705352","line":445,"updated":"2022-11-12 10:03:46.000000000","message":"missing check on (read \u003c send_bytes)","commit_id":"5981da1185a3e35fb1f6d46411c9a58dee8f26cd"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"a64b38f65c98f2259c0da92eddd70eadbc2bd03c","unresolved":false,"context_lines":[{"line_number":442,"context_line":"\t\t\tres \u003d jtag_libusb_bulk_read(usb_handle, dirtyjtag_ep_read, (char *)xfer_rx,"},{"line_number":443,"context_line":"\t\t\t\t\t\t\t\t\t\t(sent_bits \u003e 255) ? sent_bytes : 32, DIRTYJTAG_USB_TIMEOUT, \u0026read);"},{"line_number":444,"context_line":"\t\t\tif (res !\u003d ERROR_OK)"},{"line_number":445,"context_line":"\t\t\t\treturn res;"},{"line_number":446,"context_line":"\t\t}"},{"line_number":447,"context_line":""},{"line_number":448,"context_line":"\t\tif (type !\u003d SCAN_OUT) {"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"bd09bd98_85b78219","line":445,"in_reply_to":"c3dc74c0_7f705352","updated":"2022-11-13 13:33:09.000000000","message":"Done","commit_id":"5981da1185a3e35fb1f6d46411c9a58dee8f26cd"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"2f916b90d7344738fc02329743e7d200c6c25b80","unresolved":true,"context_lines":[{"line_number":553,"context_line":"\t\t\tbreak;"},{"line_number":554,"context_line":"\t\tdefault:"},{"line_number":555,"context_line":"\t\t\tLOG_ERROR(\"BUG: unknown JTAG command type encountered\");"},{"line_number":556,"context_line":"\t\t\texit(-1);"},{"line_number":557,"context_line":"\t\t}"},{"line_number":558,"context_line":"\t\tif (retval !\u003d ERROR_OK)"},{"line_number":559,"context_line":"\t\t\tbreak;"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"9de12b06_79941575","line":556,"updated":"2022-11-12 10:03:46.000000000","message":"still one exit()\nKeep printing the LOG_ERROR() but remove the exit()","commit_id":"5981da1185a3e35fb1f6d46411c9a58dee8f26cd"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"a64b38f65c98f2259c0da92eddd70eadbc2bd03c","unresolved":false,"context_lines":[{"line_number":553,"context_line":"\t\t\tbreak;"},{"line_number":554,"context_line":"\t\tdefault:"},{"line_number":555,"context_line":"\t\t\tLOG_ERROR(\"BUG: unknown JTAG command type encountered\");"},{"line_number":556,"context_line":"\t\t\texit(-1);"},{"line_number":557,"context_line":"\t\t}"},{"line_number":558,"context_line":"\t\tif (retval !\u003d ERROR_OK)"},{"line_number":559,"context_line":"\t\t\tbreak;"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"24730020_40c5dd1a","line":556,"in_reply_to":"9de12b06_79941575","updated":"2022-11-13 13:33:09.000000000","message":"Done","commit_id":"5981da1185a3e35fb1f6d46411c9a58dee8f26cd"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"a64b38f65c98f2259c0da92eddd70eadbc2bd03c","unresolved":true,"context_lines":[{"line_number":327,"context_line":"\tstate_count \u003d 0;"},{"line_number":328,"context_line":"\twhile (num_states) {"},{"line_number":329,"context_line":"\t\tif (tap_state_transition(tap_get_state(), false) \u003d\u003d"},{"line_number":330,"context_line":"\tcmd-\u003epath[state_count]) {"},{"line_number":331,"context_line":"\t\t\ttms \u003d 0;"},{"line_number":332,"context_line":"\t\t} else if (tap_state_transition(tap_get_state(), true) \u003d\u003d"},{"line_number":333,"context_line":"\t\t\t\t cmd-\u003epath[state_count]) {"}],"source_content_type":"text/x-csrc","patch_set":10,"id":"4847ddb0_5dff37f0","line":330,"updated":"2022-11-13 13:33:09.000000000","message":"this line is not properly indented. Please keep it together with previous one, as we allow 120 char per line","commit_id":"143c0f46807d4f0856810e6ed9ca02866b0e667c"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"cd93af7defb469e84e77d559f13ddd2dba96286b","unresolved":false,"context_lines":[{"line_number":327,"context_line":"\tstate_count \u003d 0;"},{"line_number":328,"context_line":"\twhile (num_states) {"},{"line_number":329,"context_line":"\t\tif (tap_state_transition(tap_get_state(), false) \u003d\u003d"},{"line_number":330,"context_line":"\tcmd-\u003epath[state_count]) {"},{"line_number":331,"context_line":"\t\t\ttms \u003d 0;"},{"line_number":332,"context_line":"\t\t} else if (tap_state_transition(tap_get_state(), true) \u003d\u003d"},{"line_number":333,"context_line":"\t\t\t\t cmd-\u003epath[state_count]) {"}],"source_content_type":"text/x-csrc","patch_set":10,"id":"3e7c0d7d_9cde8685","line":330,"in_reply_to":"4847ddb0_5dff37f0","updated":"2022-11-13 23:41:41.000000000","message":"Done","commit_id":"143c0f46807d4f0856810e6ed9ca02866b0e667c"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"a64b38f65c98f2259c0da92eddd70eadbc2bd03c","unresolved":true,"context_lines":[{"line_number":333,"context_line":"\t\t\t\t cmd-\u003epath[state_count]) {"},{"line_number":334,"context_line":"\t\t\ttms \u003d 1;"},{"line_number":335,"context_line":"\t\t} else {"},{"line_number":336,"context_line":"\t\t\tLOG_ERROR(\"BUG: %s -\u003e %s isn\u0027t a valid TAP transition\","},{"line_number":337,"context_line":"\t\ttap_state_name(tap_get_state()),"},{"line_number":338,"context_line":"\t\ttap_state_name(cmd-\u003epath[state_count]));"},{"line_number":339,"context_line":"\t\t\treturn ERROR_JTAG_STATE_INVALID;"},{"line_number":340,"context_line":"\t\t}"},{"line_number":341,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":10,"id":"8cf6c392_f06d5454","line":338,"range":{"start_line":336,"start_character":3,"end_line":338,"end_character":14},"updated":"2022-11-13 13:33:09.000000000","message":"here cannot be in a single line, so increase the indentation level of the last two line by adding at lease two TAB each","commit_id":"143c0f46807d4f0856810e6ed9ca02866b0e667c"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"cd93af7defb469e84e77d559f13ddd2dba96286b","unresolved":false,"context_lines":[{"line_number":333,"context_line":"\t\t\t\t cmd-\u003epath[state_count]) {"},{"line_number":334,"context_line":"\t\t\ttms \u003d 1;"},{"line_number":335,"context_line":"\t\t} else {"},{"line_number":336,"context_line":"\t\t\tLOG_ERROR(\"BUG: %s -\u003e %s isn\u0027t a valid TAP transition\","},{"line_number":337,"context_line":"\t\ttap_state_name(tap_get_state()),"},{"line_number":338,"context_line":"\t\ttap_state_name(cmd-\u003epath[state_count]));"},{"line_number":339,"context_line":"\t\t\treturn ERROR_JTAG_STATE_INVALID;"},{"line_number":340,"context_line":"\t\t}"},{"line_number":341,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":10,"id":"e972d449_be49dd15","line":338,"range":{"start_line":336,"start_character":3,"end_line":338,"end_character":14},"in_reply_to":"8cf6c392_f06d5454","updated":"2022-11-13 23:41:41.000000000","message":"Done","commit_id":"143c0f46807d4f0856810e6ed9ca02866b0e667c"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"a64b38f65c98f2259c0da92eddd70eadbc2bd03c","unresolved":true,"context_lines":[{"line_number":494,"context_line":""},{"line_number":495,"context_line":"static int syncbb_execute_queue(void)"},{"line_number":496,"context_line":"{"},{"line_number":497,"context_line":"\tstruct jtag_command *cmd \u003d"},{"line_number":498,"context_line":"\tjtag_command_queue; /* currently processed command */"},{"line_number":499,"context_line":"\tint scan_size;"},{"line_number":500,"context_line":"\tenum scan_type type;"},{"line_number":501,"context_line":"\tuint8_t *buffer;"}],"source_content_type":"text/x-csrc","patch_set":10,"id":"82ae8476_1f823067","line":498,"range":{"start_line":497,"start_character":1,"end_line":498,"end_character":3},"updated":"2022-11-13 13:33:09.000000000","message":"put these two lines together to solve indentation issue","commit_id":"143c0f46807d4f0856810e6ed9ca02866b0e667c"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"cd93af7defb469e84e77d559f13ddd2dba96286b","unresolved":false,"context_lines":[{"line_number":494,"context_line":""},{"line_number":495,"context_line":"static int syncbb_execute_queue(void)"},{"line_number":496,"context_line":"{"},{"line_number":497,"context_line":"\tstruct jtag_command *cmd \u003d"},{"line_number":498,"context_line":"\tjtag_command_queue; /* currently processed command */"},{"line_number":499,"context_line":"\tint scan_size;"},{"line_number":500,"context_line":"\tenum scan_type type;"},{"line_number":501,"context_line":"\tuint8_t *buffer;"}],"source_content_type":"text/x-csrc","patch_set":10,"id":"0801a3e3_a5c12d16","line":498,"range":{"start_line":497,"start_character":1,"end_line":498,"end_character":3},"in_reply_to":"82ae8476_1f823067","updated":"2022-11-13 23:41:41.000000000","message":"Done","commit_id":"143c0f46807d4f0856810e6ed9ca02866b0e667c"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"79c778d78ea6d404a3e56a22bb57186a79c89cfe","unresolved":true,"context_lines":[{"line_number":582,"context_line":""},{"line_number":583,"context_line":"\t.init \u003d dirtyjtag_init,"},{"line_number":584,"context_line":"\t.quit \u003d dirtyjtag_quit,"},{"line_number":585,"context_line":"\t.reset \u003d dirtyjtag_reset,"},{"line_number":586,"context_line":"\t.speed \u003d dirtyjtag_speed,"},{"line_number":587,"context_line":"\t.khz \u003d dirtyjtag_khz,"},{"line_number":588,"context_line":"\t.speed_div \u003d dirtyjtag_speed_div,"}],"source_content_type":"text/x-csrc","patch_set":16,"id":"ed852089_9de5e479","line":585,"updated":"2022-11-25 15:09:51.000000000","message":"please put back this struct adapter_driver::reset","commit_id":"6c1e69d9345a3850022eb8f9aa0de46992b83ae9"},{"author":{"_account_id":1002076,"name":"Patrick Dussud","display_name":"phdussud","email":"phdussud@hotmail.com","username":"phdussud"},"change_message_id":"10e302ddb0d0610a416f7ff059e62f8717843140","unresolved":false,"context_lines":[{"line_number":582,"context_line":""},{"line_number":583,"context_line":"\t.init \u003d dirtyjtag_init,"},{"line_number":584,"context_line":"\t.quit \u003d dirtyjtag_quit,"},{"line_number":585,"context_line":"\t.reset \u003d dirtyjtag_reset,"},{"line_number":586,"context_line":"\t.speed \u003d dirtyjtag_speed,"},{"line_number":587,"context_line":"\t.khz \u003d dirtyjtag_khz,"},{"line_number":588,"context_line":"\t.speed_div \u003d dirtyjtag_speed_div,"}],"source_content_type":"text/x-csrc","patch_set":16,"id":"df77b851_50dd3c3b","line":585,"in_reply_to":"ed852089_9de5e479","updated":"2022-11-25 17:29:47.000000000","message":"Done","commit_id":"6c1e69d9345a3850022eb8f9aa0de46992b83ae9"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"79c778d78ea6d404a3e56a22bb57186a79c89cfe","unresolved":true,"context_lines":[{"line_number":533,"context_line":"\t.out \u003d \u0026intf_bitq_out,"},{"line_number":534,"context_line":"\t.flush \u003d \u0026intf_bitq_flush,"},{"line_number":535,"context_line":"\t.sleep \u003d \u0026intf_bitq_sleep,"},{"line_number":536,"context_line":"\t.reset \u003d \u0026intf_bitq_reset,"},{"line_number":537,"context_line":"\t.in_rdy \u003d \u0026intf_bitq_in_rdy,"},{"line_number":538,"context_line":"\t.in \u003d \u0026intf_bitq_in,"},{"line_number":539,"context_line":"};"}],"source_content_type":"text/x-csrc","patch_set":18,"id":"5083d026_4c8ab271","line":536,"updated":"2022-11-25 15:09:51.000000000","message":"this is an old interface that is still not fully replaced.\nplease remove this struct bitq_interface::reset and left it not initialized\nIt will not be called when it\u0027s present struct adapter_driver::reset","commit_id":"3b0edb6353bff133944c79dab143f3f9f8c0626b"},{"author":{"_account_id":1002076,"name":"Patrick Dussud","display_name":"phdussud","email":"phdussud@hotmail.com","username":"phdussud"},"change_message_id":"10e302ddb0d0610a416f7ff059e62f8717843140","unresolved":false,"context_lines":[{"line_number":533,"context_line":"\t.out \u003d \u0026intf_bitq_out,"},{"line_number":534,"context_line":"\t.flush \u003d \u0026intf_bitq_flush,"},{"line_number":535,"context_line":"\t.sleep \u003d \u0026intf_bitq_sleep,"},{"line_number":536,"context_line":"\t.reset \u003d \u0026intf_bitq_reset,"},{"line_number":537,"context_line":"\t.in_rdy \u003d \u0026intf_bitq_in_rdy,"},{"line_number":538,"context_line":"\t.in \u003d \u0026intf_bitq_in,"},{"line_number":539,"context_line":"};"}],"source_content_type":"text/x-csrc","patch_set":18,"id":"8a782a28_4aa1df41","line":536,"in_reply_to":"5083d026_4c8ab271","updated":"2022-11-25 17:29:47.000000000","message":"Hi Antonio, \nI understand this. Note that bitq.c is a little misleading because it does handle the JTAG_RESET command. Ideally this case should be removed and a note should be added to the bitq.h interface definition, telling people not to implement the reset for the interface.","commit_id":"3b0edb6353bff133944c79dab143f3f9f8c0626b"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"74b17d9373b9e8c27eb150568bda6e499abbf43c","unresolved":true,"context_lines":[{"line_number":21,"context_line":"#include \"bitq.h\""},{"line_number":22,"context_line":"#include \"libusb_helper.h\""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"static int dirtyjtag_init_bitq(void);"},{"line_number":25,"context_line":"/**"},{"line_number":26,"context_line":" * CMD_INFO command"},{"line_number":27,"context_line":" *"}],"source_content_type":"text/x-csrc","patch_set":21,"id":"66f58091_7f9f1f68","line":24,"updated":"2023-01-08 11:08:35.000000000","message":"Is it possible to reorder the function and avoid forward declarations?","commit_id":"8eaa16989d8589f11067f248d29f5de9d938be73"},{"author":{"_account_id":1002076,"name":"Patrick Dussud","display_name":"phdussud","email":"phdussud@hotmail.com","username":"phdussud"},"change_message_id":"7c9c3a9e840733a20e6e1da50d11bb54ea418e11","unresolved":false,"context_lines":[{"line_number":21,"context_line":"#include \"bitq.h\""},{"line_number":22,"context_line":"#include \"libusb_helper.h\""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"static int dirtyjtag_init_bitq(void);"},{"line_number":25,"context_line":"/**"},{"line_number":26,"context_line":" * CMD_INFO command"},{"line_number":27,"context_line":" *"}],"source_content_type":"text/x-csrc","patch_set":21,"id":"370033d7_8999796b","line":24,"in_reply_to":"66f58091_7f9f1f68","updated":"2023-01-14 23:34:53.000000000","message":"Done","commit_id":"8eaa16989d8589f11067f248d29f5de9d938be73"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"74b17d9373b9e8c27eb150568bda6e499abbf43c","unresolved":true,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"static int dirtyjtag_init_bitq(void);"},{"line_number":25,"context_line":"/**"},{"line_number":26,"context_line":" * CMD_INFO command"},{"line_number":27,"context_line":" *"},{"line_number":28,"context_line":" * CMD_INFO returns a uint8_t[10] to the host software. This"},{"line_number":29,"context_line":" * could be used to check DirtyJTAG firmware version"}],"source_content_type":"text/x-csrc","patch_set":21,"id":"f4d77b22_60326f48","line":26,"updated":"2023-01-08 11:08:35.000000000","message":"here you are using doxygen syntax for the comment, which is cool.\nBut the output from doxygen looks not really correct.\nUse:\n /**\n  * Command codes for DirtyJTAG\n  *\n  * CMD_INFO returns bla bla\n  * bla bla\n  *\n  * CMD_FREQ sets bla bla\n  * bla\n  *\n  * CMD_XFER writes ...\n\nand use the same order as in the enum.\nPlus mention also CMD_STOP.","commit_id":"8eaa16989d8589f11067f248d29f5de9d938be73"},{"author":{"_account_id":1002076,"name":"Patrick Dussud","display_name":"phdussud","email":"phdussud@hotmail.com","username":"phdussud"},"change_message_id":"7c9c3a9e840733a20e6e1da50d11bb54ea418e11","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"static int dirtyjtag_init_bitq(void);"},{"line_number":25,"context_line":"/**"},{"line_number":26,"context_line":" * CMD_INFO command"},{"line_number":27,"context_line":" *"},{"line_number":28,"context_line":" * CMD_INFO returns a uint8_t[10] to the host software. This"},{"line_number":29,"context_line":" * could be used to check DirtyJTAG firmware version"}],"source_content_type":"text/x-csrc","patch_set":21,"id":"fd225947_4b595955","line":26,"in_reply_to":"f4d77b22_60326f48","updated":"2023-01-14 23:34:53.000000000","message":"Done","commit_id":"8eaa16989d8589f11067f248d29f5de9d938be73"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"74b17d9373b9e8c27eb150568bda6e499abbf43c","unresolved":true,"context_lines":[{"line_number":85,"context_line":"\tREADOUT \u003d 0x80"},{"line_number":86,"context_line":"};"},{"line_number":87,"context_line":"struct version_specific {"},{"line_number":88,"context_line":"\tuint8_t no_read;\t// command modifier for xfer no read"},{"line_number":89,"context_line":"\tuint16_t max_bits;\t// max bit count that can be transferred"},{"line_number":90,"context_line":"};"},{"line_number":91,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":21,"id":"3ee8ba5c_6036c247","line":88,"updated":"2023-01-08 11:08:35.000000000","message":"please convert \u0027//\u0027 comments as \u0027/* ... */\u0027","commit_id":"8eaa16989d8589f11067f248d29f5de9d938be73"},{"author":{"_account_id":1002076,"name":"Patrick Dussud","display_name":"phdussud","email":"phdussud@hotmail.com","username":"phdussud"},"change_message_id":"7c9c3a9e840733a20e6e1da50d11bb54ea418e11","unresolved":false,"context_lines":[{"line_number":85,"context_line":"\tREADOUT \u003d 0x80"},{"line_number":86,"context_line":"};"},{"line_number":87,"context_line":"struct version_specific {"},{"line_number":88,"context_line":"\tuint8_t no_read;\t// command modifier for xfer no read"},{"line_number":89,"context_line":"\tuint16_t max_bits;\t// max bit count that can be transferred"},{"line_number":90,"context_line":"};"},{"line_number":91,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":21,"id":"dfdea639_9084507f","line":88,"in_reply_to":"3ee8ba5c_6036c247","updated":"2023-01-14 23:34:53.000000000","message":"Done","commit_id":"8eaa16989d8589f11067f248d29f5de9d938be73"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"74b17d9373b9e8c27eb150568bda6e499abbf43c","unresolved":true,"context_lines":[{"line_number":255,"context_line":"\tOUTSTATE_XFER,"},{"line_number":256,"context_line":"};"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"typedef struct dirtyjtag_bitq_struct {"},{"line_number":259,"context_line":"\tuint32_t tdi_out_count;"},{"line_number":260,"context_line":"\tuint32_t max_tdi_count;"},{"line_number":261,"context_line":"\tuint32_t tdo_in_expected;"}],"source_content_type":"text/x-csrc","patch_set":21,"id":"18478ddd_1c001806","line":258,"updated":"2023-01-08 11:08:35.000000000","message":"no typedefs, please, and no type in the name of the data. The name should report what it is for, not the type. So the suffix _struct is not required.\nUse \u0027struct dirtyjtag_bitq_state\u0027 or similar.\n\nAlso, move these type and variable declaration on top of the file with the other variables","commit_id":"8eaa16989d8589f11067f248d29f5de9d938be73"},{"author":{"_account_id":1002076,"name":"Patrick Dussud","display_name":"phdussud","email":"phdussud@hotmail.com","username":"phdussud"},"change_message_id":"7c9c3a9e840733a20e6e1da50d11bb54ea418e11","unresolved":false,"context_lines":[{"line_number":255,"context_line":"\tOUTSTATE_XFER,"},{"line_number":256,"context_line":"};"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"typedef struct dirtyjtag_bitq_struct {"},{"line_number":259,"context_line":"\tuint32_t tdi_out_count;"},{"line_number":260,"context_line":"\tuint32_t max_tdi_count;"},{"line_number":261,"context_line":"\tuint32_t tdo_in_expected;"}],"source_content_type":"text/x-csrc","patch_set":21,"id":"ad65803b_14238465","line":258,"in_reply_to":"18478ddd_1c001806","updated":"2023-01-14 23:34:53.000000000","message":"Done","commit_id":"8eaa16989d8589f11067f248d29f5de9d938be73"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"74b17d9373b9e8c27eb150568bda6e499abbf43c","unresolved":true,"context_lines":[{"line_number":512,"context_line":" */"},{"line_number":513,"context_line":"static int dirtyjtag_reset(int trst, int srst)"},{"line_number":514,"context_line":"{"},{"line_number":515,"context_line":"\tuint8_t command[] \u003d {CMD_SETSIG, SIG_TRST | SIG_SRST,"},{"line_number":516,"context_line":"\t\t\t\t\t\t (trst ? 0 : SIG_TRST) | (srst ? 0 : SIG_SRST)};"},{"line_number":517,"context_line":""},{"line_number":518,"context_line":"\tLOG_DEBUG(\"(%d,%d)\", trst, srst);"}],"source_content_type":"text/x-csrc","patch_set":21,"id":"32b3ebbb_ae8166e4","line":515,"updated":"2023-01-08 11:08:35.000000000","message":"put them in separate lines, so the setup gets more clear:\n uint8_t command[] \u003d {\n   CMD_SETSIG,\n   SIG_TRST | SIG_SRST,\n   (trst ? 0 : SIG_TRST) | (srst ? 0 : SIG_SRST),\n };","commit_id":"8eaa16989d8589f11067f248d29f5de9d938be73"},{"author":{"_account_id":1002076,"name":"Patrick Dussud","display_name":"phdussud","email":"phdussud@hotmail.com","username":"phdussud"},"change_message_id":"7c9c3a9e840733a20e6e1da50d11bb54ea418e11","unresolved":false,"context_lines":[{"line_number":512,"context_line":" */"},{"line_number":513,"context_line":"static int dirtyjtag_reset(int trst, int srst)"},{"line_number":514,"context_line":"{"},{"line_number":515,"context_line":"\tuint8_t command[] \u003d {CMD_SETSIG, SIG_TRST | SIG_SRST,"},{"line_number":516,"context_line":"\t\t\t\t\t\t (trst ? 0 : SIG_TRST) | (srst ? 0 : SIG_SRST)};"},{"line_number":517,"context_line":""},{"line_number":518,"context_line":"\tLOG_DEBUG(\"(%d,%d)\", trst, srst);"}],"source_content_type":"text/x-csrc","patch_set":21,"id":"b43a3e3e_29e401ed","line":515,"in_reply_to":"32b3ebbb_ae8166e4","updated":"2023-01-14 23:34:53.000000000","message":"Done","commit_id":"8eaa16989d8589f11067f248d29f5de9d938be73"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"74b17d9373b9e8c27eb150568bda6e499abbf43c","unresolved":true,"context_lines":[{"line_number":526,"context_line":"}"},{"line_number":527,"context_line":""},{"line_number":528,"context_line":"static struct bitq_interface dirtyjtag_bitq_interface \u003d {"},{"line_number":529,"context_line":"\t.out \u003d \u0026intf_bitq_out,"},{"line_number":530,"context_line":"\t.flush \u003d \u0026intf_bitq_flush,"},{"line_number":531,"context_line":"\t.sleep \u003d \u0026intf_bitq_sleep,"},{"line_number":532,"context_line":"\t.reset \u003d NULL, /* obsolete entry point */"}],"source_content_type":"text/x-csrc","patch_set":21,"id":"5abfddb4_5dee2c81","line":529,"updated":"2023-01-08 11:08:35.000000000","message":"you can remove the \u0027\u0026\u0027 in front of the function names.","commit_id":"8eaa16989d8589f11067f248d29f5de9d938be73"},{"author":{"_account_id":1002076,"name":"Patrick Dussud","display_name":"phdussud","email":"phdussud@hotmail.com","username":"phdussud"},"change_message_id":"7c9c3a9e840733a20e6e1da50d11bb54ea418e11","unresolved":false,"context_lines":[{"line_number":526,"context_line":"}"},{"line_number":527,"context_line":""},{"line_number":528,"context_line":"static struct bitq_interface dirtyjtag_bitq_interface \u003d {"},{"line_number":529,"context_line":"\t.out \u003d \u0026intf_bitq_out,"},{"line_number":530,"context_line":"\t.flush \u003d \u0026intf_bitq_flush,"},{"line_number":531,"context_line":"\t.sleep \u003d \u0026intf_bitq_sleep,"},{"line_number":532,"context_line":"\t.reset \u003d NULL, /* obsolete entry point */"}],"source_content_type":"text/x-csrc","patch_set":21,"id":"cd2058ae_7e1bc5bc","line":529,"in_reply_to":"5abfddb4_5dee2c81","updated":"2023-01-14 23:34:53.000000000","message":"Done","commit_id":"8eaa16989d8589f11067f248d29f5de9d938be73"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"bc68753490e6940d0812e02c3268659deb91f1d2","unresolved":true,"context_lines":[{"line_number":22,"context_line":"#include \"libusb_helper.h\""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"/**"},{"line_number":25,"context_line":" *"},{"line_number":26,"context_line":" * CMD_STOP terminates the stream of commands contained in current the USB packet"},{"line_number":27,"context_line":" *"},{"line_number":28,"context_line":" * CMD_INFO returns a uint8_t[10] to the host software. This"}],"source_content_type":"text/x-csrc","patch_set":23,"id":"f20d5778_256509e4","line":25,"updated":"2023-01-18 22:23:23.000000000","message":"I\u0027m just copying from my notes. If you have a better way to describe the protocol, feel free to use it.\n\n * DirtyJTAG commands list:\n *\n * CMD_STOP\n * uint8_t request[] \u003d {0x00};\n * no response.\n * Required as last command in a USB packet to terminate the stream of commands\n * contained in the current USB packet.\n *\n * CMD_INFO\n * uint8_t request[] \u003d {0x01};\n * uint8_t response[10];\n * Returns a string (is it NUL terminated?) that indicates the firmware version:\n * - \"DJTAG1\\n\" for firmware version 1;\n * - \"DJTAG2\\n\" for firmware version 2.\n *\n * CMD_FREQ\n * uint8_t request[] \u003d {0x02, high, low};\n * no response.\n * Sets the clock frequency on the probe to (256 * high + low) kHz.\n * \n * CMD_XFER\n * uint8_t request[] \u003d {cmd, len, data[0], ..., data[n - 1]};\n * no response or uint8_t response[n];\n * Send data on TDI, optionally reads TDO, while keeping TMS zero and\n * sending pulsed on TCK.\n * Sequence: read TDO, set TDI, set TCK high, set TCK low.\n * - cmd \u0026 0x3f \u003d\u003d 0x03;\n * - if (cmd \u0026 0x80) then TDO is read and reported as response (depends on\n *   FW version?);\n * - num_of_bits \u003d len + ((cmd \u0026 0x40) ? 256 : 0);\n * - n \u003d DIV_ROUND_UP(num_of_bits, 8);\n * - data[i] bytes are shifted out LSB first\n *\n * CMD_SETSIG\n * Set the output TCK, TDI, TMS, SRST, TRST if the corresponding mask bit is 1.\n * uint8_t request[] \u003d {0x04, mask, value};\n * no response.\n * For both mask and value the relation is\n * - BIT(1) \u003d\u003e TCK;\n * - BIT(2) \u003d\u003e TDI;\n * - BIT(4) \u003d\u003e TMS;\n * - BIT(5) \u003d\u003e TRST;\n * - BIT(6) \u003d\u003e SRST.\n *\n * CMD_GETSIG\n * Get the current signal state of TDO\n * uint8_t request[] \u003d {0x05};\n * uint8_t response[1];\n * TDO value is in BIT(3) of response[0].\n * (can SRST be sensed too?)\n *\n * CMD_CLK\n * Sends clock pulses with specific TMS and TDI value and optionally reads TDO.\n * uint8_t request[] \u003d {cmd, value, n};\n * no response or uint8_t response[n];\n * - cmd \u0026 0x7f \u003d\u003d 0x06;\n * - if (cmd \u0026 0x80) then TDO is read and reported as response;\n * - value uses BIT(2) \u003d\u003e TDI and BIT(4) \u003d\u003e TMS;\n * - n is the number of TCK pulses;\n * - (how TDO values are reported? one per byte or one per bit?)\n *\n * max packet size?","commit_id":"1947efbf1d23e5974800987652164bf758de7c7e"},{"author":{"_account_id":1002076,"name":"Patrick Dussud","display_name":"phdussud","email":"phdussud@hotmail.com","username":"phdussud"},"change_message_id":"9da7900fb2aa8d62ee559504f702ea390cd78fdd","unresolved":true,"context_lines":[{"line_number":22,"context_line":"#include \"libusb_helper.h\""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"/**"},{"line_number":25,"context_line":" *"},{"line_number":26,"context_line":" * CMD_STOP terminates the stream of commands contained in current the USB packet"},{"line_number":27,"context_line":" *"},{"line_number":28,"context_line":" * CMD_INFO returns a uint8_t[10] to the host software. This"}],"source_content_type":"text/x-csrc","patch_set":23,"id":"86be4dc3_3e1bf879","line":25,"in_reply_to":"f20d5778_256509e4","updated":"2023-01-18 23:53:53.000000000","message":"* (can SRST be sensed too?) -\u003e No SRST is a output so its value should be known by the program driving it\n\n(how TDO values are reported? one per byte or one per bit?) -\u003e Only the last value of TDO is reported by the probe. \nmax packet size is 64 bytes. This correspond to the maximum payload of a USB bulk transfer.","commit_id":"1947efbf1d23e5974800987652164bf758de7c7e"}],"tcl/interface/dirtyjtag.cfg":[{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"8b6c4fb7ccf998ee62f9b777830f9c2b527f7c60","unresolved":true,"context_lines":[{"line_number":1,"context_line":"# SPDX-License-Identifier: GPL-2.0-or-later"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# DirtyJTAG USB adapter"},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#"},{"line_number":6,"context_line":"#"},{"line_number":7,"context_line":"adapter driver dirtyjtag"}],"source_content_type":"text/x-ttcn-cfg","patch_set":4,"id":"6724bbf9_9612d3fa","line":4,"updated":"2022-11-11 21:48:45.000000000","message":"please add here the web links for the DirtyJTAG firmware","commit_id":"529ac78bb4b042af8632136e89780067cf599ee9"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"2f916b90d7344738fc02329743e7d200c6c25b80","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# SPDX-License-Identifier: GPL-2.0-or-later"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# DirtyJTAG USB adapter"},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#"},{"line_number":6,"context_line":"#"},{"line_number":7,"context_line":"adapter driver dirtyjtag"}],"source_content_type":"text/x-ttcn-cfg","patch_set":4,"id":"06c3a5da_a5649fe0","line":4,"in_reply_to":"6724bbf9_9612d3fa","updated":"2022-11-12 10:03:46.000000000","message":"Done","commit_id":"529ac78bb4b042af8632136e89780067cf599ee9"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"2f916b90d7344738fc02329743e7d200c6c25b80","unresolved":true,"context_lines":[{"line_number":6,"context_line":"#"},{"line_number":7,"context_line":"#"},{"line_number":8,"context_line":"adapter driver dirtyjtag"},{"line_number":9,"context_line":"adapter speed 1000"}],"source_content_type":"text/x-ttcn-cfg","patch_set":5,"id":"c0c85a23_28347e2d","line":9,"updated":"2022-11-12 10:03:46.000000000","message":"the last line ends without \u0027newline\u0027\nPlease add it, but without adding an additional empty line","commit_id":"5981da1185a3e35fb1f6d46411c9a58dee8f26cd"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"a64b38f65c98f2259c0da92eddd70eadbc2bd03c","unresolved":false,"context_lines":[{"line_number":6,"context_line":"#"},{"line_number":7,"context_line":"#"},{"line_number":8,"context_line":"adapter driver dirtyjtag"},{"line_number":9,"context_line":"adapter speed 1000"}],"source_content_type":"text/x-ttcn-cfg","patch_set":5,"id":"42bb66b6_fda8bfd5","line":9,"in_reply_to":"c0c85a23_28347e2d","updated":"2022-11-13 13:33:09.000000000","message":"Done","commit_id":"5981da1185a3e35fb1f6d46411c9a58dee8f26cd"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"74b17d9373b9e8c27eb150568bda6e499abbf43c","unresolved":true,"context_lines":[{"line_number":6,"context_line":"#"},{"line_number":7,"context_line":"#"},{"line_number":8,"context_line":"adapter driver dirtyjtag"},{"line_number":9,"context_line":"adapter speed 1000"}],"source_content_type":"text/x-ttcn-cfg","patch_set":21,"id":"5e4e1d7e_c907f55e","line":9,"updated":"2023-01-08 11:08:35.000000000","message":"adapter speed is usually in target or board file, even if we still have 6 of them in interface file.\nCan this line be dropped?","commit_id":"8eaa16989d8589f11067f248d29f5de9d938be73"},{"author":{"_account_id":1002076,"name":"Patrick Dussud","display_name":"phdussud","email":"phdussud@hotmail.com","username":"phdussud"},"change_message_id":"7c9c3a9e840733a20e6e1da50d11bb54ea418e11","unresolved":false,"context_lines":[{"line_number":6,"context_line":"#"},{"line_number":7,"context_line":"#"},{"line_number":8,"context_line":"adapter driver dirtyjtag"},{"line_number":9,"context_line":"adapter speed 1000"}],"source_content_type":"text/x-ttcn-cfg","patch_set":21,"id":"099083ca_2827df29","line":9,"in_reply_to":"5e4e1d7e_c907f55e","updated":"2023-01-14 23:34:53.000000000","message":"Done","commit_id":"8eaa16989d8589f11067f248d29f5de9d938be73"}]}
