diff options
author | Andrzej Kaczmarek <andrzej.kaczmarek@codecoup.pl> | 2018-02-20 15:52:49 +0100 |
---|---|---|
committer | Szymon Janc <szymon.janc@codecoup.pl> | 2019-10-14 12:12:32 +0200 |
commit | 4f5a1df1c4ddfbfea9fd46b43ca4ad3f67fd3858 (patch) | |
tree | e6ee4fec32d6eb19231a94aec08ec7d4ca925e4e /monitor/main.c | |
parent | 7ce36e236c1bdb1941242b00e1d5c7812749a2de (diff) | |
download | bluez-4f5a1df1c4ddfbfea9fd46b43ca4ad3f67fd3858.tar.gz |
monitor: Add support for reading over J-Link RTT
This patch adds support for reading data over J-Link RTT. It can be
used as replacement for TTY when reading from embedded devices since
it's much faster and does block a UART. Data format is the same as
for TTY. At the moment monitor over RTT is only supported by Apache
Mynewt project.
Reading data is done by polling RTT every 1 msec since there is no
blocking API to read something from RTT buffer.
To enable reading from RTT, J-Link configuration needs to be passed via
command line (all parameters except <device> can be skipped to use
default value):
-J <device>,<serialno=0>,<interface=swd>,<speed=1000>
-J nrf52,683649029
In some cases J-Link cannot locate RTT buffer in RAM. In such case
RAM area and buffer name should be provided via command line:
-R <address=0x0>,<area=0x1000>,<buffer=monitor>
-R 0x20000000,0x10000
Diffstat (limited to 'monitor/main.c')
-rw-r--r-- | monitor/main.c | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/monitor/main.c b/monitor/main.c index acd44a098..479df859c 100644 --- a/monitor/main.c +++ b/monitor/main.c @@ -75,6 +75,10 @@ static void usage(void) "\t-A, --a2dp Dump A2DP stream traffic\n" "\t-E, --ellisys [ip] Send Ellisys HCI Injection\n" "\t-P, --no-pager Disable pager usage\n" + "\t-J --jlink <device>,[<serialno>],[<interface>],[<speed>]\n" + "\t Read data from RTT\n" + "\t-R --rtt [<address>],[<area>],[<name>]\n" + "\t RTT control block parameters\n" "\t-h, --help Show help options\n"); } @@ -94,6 +98,8 @@ static const struct option main_options[] = { { "a2dp", no_argument, NULL, 'A' }, { "ellisys", required_argument, NULL, 'E' }, { "no-pager", no_argument, NULL, 'P' }, + { "jlink", required_argument, NULL, 'J' }, + { "rtt", required_argument, NULL, 'R' }, { "todo", no_argument, NULL, '#' }, { "version", no_argument, NULL, 'v' }, { "help", no_argument, NULL, 'h' }, @@ -112,6 +118,8 @@ int main(int argc, char *argv[]) unsigned int tty_speed = B115200; unsigned short ellisys_port = 0; const char *str; + char *jlink = NULL; + char *rtt = NULL; int exit_status; mainloop_init(); @@ -122,7 +130,7 @@ int main(int argc, char *argv[]) int opt; struct sockaddr_un addr; - opt = getopt_long(argc, argv, "r:w:a:s:p:i:d:B:V:tTSAEPvh", + opt = getopt_long(argc, argv, "r:w:a:s:p:i:d:B:V:tTSAE:PJ:R:vh", main_options, NULL); if (opt < 0) break; @@ -194,6 +202,12 @@ int main(int argc, char *argv[]) case 'P': use_pager = false; break; + case 'J': + jlink = optarg; + break; + case 'R': + rtt = optarg; + break; case '#': packet_todo(); lmp_todo(); @@ -246,12 +260,15 @@ int main(int argc, char *argv[]) if (ellisys_server) ellisys_enable(ellisys_server, ellisys_port); - if (!tty && control_tracing() < 0) + if (!tty && !jlink && control_tracing() < 0) return EXIT_FAILURE; if (tty && control_tty(tty, tty_speed) < 0) return EXIT_FAILURE; + if (jlink && control_rtt(jlink, rtt) < 0) + return EXIT_FAILURE; + exit_status = mainloop_run_with_signal(signal_callback, NULL); keys_cleanup(); |