/** @remote_bitbangpage OpenOCD Developer's Guide The remote_bitbang JTAG+SWD driver is used to drive JTAG and/or SWD from a remote process. The remote_bitbang driver communicates via TCP or UNIX sockets with some remote process using an ASCII encoding of the bitbang interface. The remote process presumably then drives the JTAG/SWD however it pleases. The remote process should act as a server, listening for connections from the openocd remote_bitbang driver. The remote bitbang driver is useful for debugging software running on processors which are being simulated. There also is an implementation of the server-side protocol for the Glasgow Debug Tool (https://github.com/glasgowEmbedded/Glasgow) through the jtag-openocd applet. The bitbang interface consists of the following functions. blink on Blink a light somewhere. The argument on is either 1 or 0. read Sample the value of tdo. write tck tms tdi Set the value of tck, tms, and tdi. reset trst srst Set the value of trst, srst. swdio_drive Set the output enable of the bidirectional swdio (tms) pin swdio_read Sample the value of swdio (tms). swd_write Set the value of swclk (tck) and swdio (tms). (optional) sleep Instructs the remote host to sleep/idle for some period of time before executing the next request An additional function, quit, is added to the remote_bitbang interface to indicate there will be no more requests and the connection with the remote driver should be closed. The eight mandatory functions are encoded in ASCII by assigning a single character to each possible request. The assignments are: B - Blink on b - Blink off R - Read request Q - Quit request 0 - Write 0 0 0 1 - Write 0 0 1 2 - Write 0 1 0 3 - Write 0 1 1 4 - Write 1 0 0 5 - Write 1 0 1 6 - Write 1 1 0 7 - Write 1 1 1 r - Reset 0 0 s - Reset 0 1 t - Reset 1 0 u - Reset 1 1 O - SWDIO drive 1 o - SWDIO drive 0 c - SWDIO read request d - SWD write 0 0 e - SWD write 0 1 f - SWD write 1 0 g - SWD write 1 1 The read responses are encoded in ASCII as either digit 0 or 1. If the use_remote_sleep option is set to 'yes', two additional requests may be sent: Z - Sleep for 1 millisecond z - Sleep for 1 microsecond NOTE: Previously these were specified as 'D' and 'd', which conflicts with the "SWD write 0 0" command defined above. Adapters that implement Dd for remote sleep must be updated to work with Zz. */