summaryrefslogtreecommitdiff
path: root/monitor/main.c
diff options
context:
space:
mode:
authorAndrzej Kaczmarek <andrzej.kaczmarek@codecoup.pl>2018-02-20 15:52:49 +0100
committerSzymon Janc <szymon.janc@codecoup.pl>2019-10-14 12:12:32 +0200
commit4f5a1df1c4ddfbfea9fd46b43ca4ad3f67fd3858 (patch)
treee6ee4fec32d6eb19231a94aec08ec7d4ca925e4e /monitor/main.c
parent7ce36e236c1bdb1941242b00e1d5c7812749a2de (diff)
downloadbluez-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.c21
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();