From 1a3f169e8976b0ce7cefa7c9eb4ef23f06c3c9cd Mon Sep 17 00:00:00 2001 From: Werner Almesberger Date: Sun, 5 Jun 2011 21:08:48 -0300 Subject: [PATCH] libatrf: add option to send a pulse with atrf_slp_tr - include/atrf.h (atrf_slp_tr), lib/atrf.c (atrf_slp_tr): added pulse argument - atrf-proxy/PROTOCOL, atrf-proxy/atrf-proxy.c (cmd_two, cmd_more): added second argument to SLP_TR command - atrf-xtal/atben.c (atben_sample), lib/cwtest.c (cw_test_end): updated for API change - lib/driver.h (struct atrf_driver): added "pulse" argument to slp_tr - lib/atben.c (atben_slp_tr), lib/atnet.c (atnet_slp_tr): added support for pulse mode --- tools/atrf-proxy/PROTOCOL | 2 +- tools/atrf-proxy/atrf-proxy.c | 23 ++++++++++++++++------- tools/atrf-xtal/atben.c | 3 +-- tools/include/atrf.h | 2 +- tools/lib/atben.c | 8 +++++++- tools/lib/atnet.c | 4 ++-- tools/lib/atrf.c | 4 ++-- tools/lib/cwtest.c | 4 ++-- tools/lib/driver.h | 2 +- 9 files changed, 33 insertions(+), 19 deletions(-) diff --git a/tools/atrf-proxy/PROTOCOL b/tools/atrf-proxy/PROTOCOL index b1cf163..f5a4c18 100644 --- a/tools/atrf-proxy/PROTOCOL +++ b/tools/atrf-proxy/PROTOCOL @@ -24,7 +24,7 @@ TEST +[comment] -message -SLP_TR 0|1 +SLP_TR 0|1 0|1 +[comment] -message diff --git a/tools/atrf-proxy/atrf-proxy.c b/tools/atrf-proxy/atrf-proxy.c index 2d2e171..4ba5ea0 100644 --- a/tools/atrf-proxy/atrf-proxy.c +++ b/tools/atrf-proxy/atrf-proxy.c @@ -116,6 +116,20 @@ static int cmd_two(struct atrf_dsc *dsc, struct netio *netio, const char *cmd) return netio_printf(netio, "-I/O error\n"); return netio_printf(netio, "+\n"); } + if (!strcasecmp(cmd, "slp_tr")) { + int val; + + if (n > 1) + return netio_printf(netio, "-bad argument\n"); + val = get_num(netio, 1, &ret); + if (val < 0) + return ret; + if (val > 1) + return netio_printf(netio, "-bad argument\n"); + if (atrf_slp_tr(dsc, n, val) < 0) + return netio_printf(netio, "-I/O error\n"); + return netio_printf(netio, "+\n"); + } abort(); } @@ -130,18 +144,13 @@ static int cmd_more(struct atrf_dsc *dsc, struct netio *netio, const char *cmd) return cmd_two(dsc, netio, cmd); if (!strcasecmp(cmd, "write")) return cmd_two(dsc, netio, cmd); + if (!strcasecmp(cmd, "slp_tr")) + return cmd_two(dsc, netio, cmd); n = get_num(netio, 1, &ret); if (n < 0) return ret; - if (!strcasecmp(cmd, "slp_tr")) { - if (n > 1) - return netio_printf(netio, "-bad argument\n"); - if (atrf_slp_tr(dsc, n) < 0) - return netio_printf(netio, "-I/O error\n"); - return netio_printf(netio, "+\n"); - } if (!strcasecmp(cmd, "clkm")) { if (n > 16) return netio_printf(netio, "-bad argument\n"); diff --git a/tools/atrf-xtal/atben.c b/tools/atrf-xtal/atben.c index 9445872..2f7a4d0 100644 --- a/tools/atrf-xtal/atben.c +++ b/tools/atrf-xtal/atben.c @@ -178,8 +178,7 @@ unsigned atben_sample(struct atrf_dsc *dsc) * high overhead, though, so we optimize it below. */ - atrf_slp_tr(dsc, 1); - atrf_slp_tr(dsc, 0); + atrf_slp_tr(dsc, 1, 1); while (i) { if (atrf_interrupt(dsc)) break; diff --git a/tools/include/atrf.h b/tools/include/atrf.h index e9ef2e6..d5e4e11 100644 --- a/tools/include/atrf.h +++ b/tools/include/atrf.h @@ -43,7 +43,7 @@ void atrf_reset_rf(struct atrf_dsc *dsc); enum atrf_chip_id atrf_identify(struct atrf_dsc *dsc); int atrf_test_mode(struct atrf_dsc *dsc); -int atrf_slp_tr(struct atrf_dsc *dsc, int on); +int atrf_slp_tr(struct atrf_dsc *dsc, int on, int pulse); int atrf_set_clkm(struct atrf_dsc *dsc, int mhz); void atrf_reg_write(struct atrf_dsc *dsc, uint8_t reg, uint8_t value); diff --git a/tools/lib/atben.c b/tools/lib/atben.c index 896a320..f11bb74 100644 --- a/tools/lib/atben.c +++ b/tools/lib/atben.c @@ -355,7 +355,7 @@ static uint8_t atben_sram_read(void *handle, uint8_t addr) /* ----- SLP_TR ------------------------------------------------------------ */ -static void atben_slp_tr(void *handle, int on) +static void atben_slp_tr(void *handle, int on, int pulse) { struct atben_dsc *dsc = handle; @@ -363,6 +363,12 @@ static void atben_slp_tr(void *handle, int on) PDDATS = SLP_TR; else PDDATC = SLP_TR; + if (!pulse) + return; + if (on) + PDDATC = SLP_TR; + else + PDDATS = SLP_TR; } diff --git a/tools/lib/atnet.c b/tools/lib/atnet.c index c69c776..d51814f 100644 --- a/tools/lib/atnet.c +++ b/tools/lib/atnet.c @@ -266,13 +266,13 @@ static void atnet_test_mode(void *handle) } -static void atnet_slp_tr(void *handle, int on) +static void atnet_slp_tr(void *handle, int on, int pulse) { struct atnet_dsc *dsc = handle; if (dsc->error) return; - if (dialog(dsc, "SLP_TR %d", on) < 0) + if (dialog(dsc, "SLP_TR %d %d", on, pulse) < 0) dsc->error = 1; } diff --git a/tools/lib/atrf.c b/tools/lib/atrf.c index 306ab53..fafe63f 100644 --- a/tools/lib/atrf.c +++ b/tools/lib/atrf.c @@ -226,11 +226,11 @@ int atrf_test_mode(struct atrf_dsc *dsc) } -int atrf_slp_tr(struct atrf_dsc *dsc, int on) +int atrf_slp_tr(struct atrf_dsc *dsc, int on, int pulse) { if (!dsc->driver->slp_tr) return 0; - dsc->driver->slp_tr(dsc->handle, on); + dsc->driver->slp_tr(dsc->handle, on, pulse); return 1; } diff --git a/tools/lib/cwtest.c b/tools/lib/cwtest.c index 8aa78b3..411938a 100644 --- a/tools/lib/cwtest.c +++ b/tools/lib/cwtest.c @@ -148,9 +148,9 @@ void cw_test_end(struct atrf_dsc *dsc) break; case artf_at86rf231: usleep(2); /* table 7-1: tTR12(typ) = 1 us */ - atrf_slp_tr(dsc, 1); + atrf_slp_tr(dsc, 1, 0); usleep(10); /* table 7-1: tTR3(typ) doesn't really apply */ - atrf_slp_tr(dsc, 0); + atrf_slp_tr(dsc, 0, 0); usleep(500); /* table 7-1: tTR2(typ) = 380 */ break; default: diff --git a/tools/lib/driver.h b/tools/lib/driver.h index 55e8fa2..31b766c 100644 --- a/tools/lib/driver.h +++ b/tools/lib/driver.h @@ -27,7 +27,7 @@ struct atrf_driver { void (*reset)(void *dsc); void (*reset_rf)(void *dsc); void (*test_mode)(void *dsc); - void (*slp_tr)(void *dsc, int on); + void (*slp_tr)(void *dsc, int on, int pulse); int (*set_clkm)(void *dsc, int mhz); void (*reg_write)(void *dsc, uint8_t reg, uint8_t value); uint8_t (*reg_read)(void *dsc, uint8_t reg);