From f2e2cfd11cfc2c5cc9d731ee7b5a89de006a4db2 Mon Sep 17 00:00:00 2001 From: Hauke Petersen Date: Tue, 24 Mar 2015 22:13:02 +0100 Subject: [PATCH] shell/sc_netif: added means to control TX power --- sys/shell/commands/sc_netif.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/sys/shell/commands/sc_netif.c b/sys/shell/commands/sc_netif.c index 0ebbe94ef2f5..bd45f44792ec 100644 --- a/sys/shell/commands/sc_netif.c +++ b/sys/shell/commands/sc_netif.c @@ -75,6 +75,7 @@ static void _set_usage(char *cmd_name) " * \"nid\" - sets the network identifier (or the PAN ID)\n" " * \"pan\" - alias for \"nid\"\n" " * \"pan_id\" - alias for \"nid\"\n" + " * \"power\" - TX power in dBm\n" " * \"src_len\" - sets the source address length in byte\n"); } @@ -137,6 +138,10 @@ static void _print_netconf(ng_netconf_opt_t opt) printf("network identifier"); break; + case NETCONF_OPT_TX_POWER: + printf("TX power [in dBm]"); + break; + default: /* we don't serve these options here */ break; @@ -147,6 +152,7 @@ void _netif_list(kernel_pid_t dev) { uint8_t hwaddr[MAX_ADDR_LEN]; uint16_t u16; + int16_t i16; int res; printf("Iface %2d ", dev); @@ -171,6 +177,12 @@ void _netif_list(kernel_pid_t dev) printf(" NID: 0x%" PRIx16 " ", u16); } + res = ng_netapi_get(dev, NETCONF_OPT_TX_POWER, 0, &i16, sizeof(i16)); + + if (res >= 0) { + printf(" TX-Power: %" PRIi16 "dBm ", i16); + } + printf("\n "); res = ng_netapi_get(dev, NETCONF_OPT_ADDRESS_LONG, 0, hwaddr, sizeof(hwaddr)); @@ -240,6 +252,23 @@ static void _netif_set_u16(kernel_pid_t dev, ng_netconf_opt_t opt, } } +static void _netif_set_i16(kernel_pid_t dev, ng_netconf_opt_t opt, + char *i16_str) +{ + int16_t val = (int16_t)atoi(i16_str); + + if (ng_netapi_set(dev, opt, 0, (int16_t *)&val, sizeof(int16_t)) < 0) { + printf("error: unable to set "); + _print_netconf(opt); + puts(""); + return; + } + + printf("success: set "); + _print_netconf(opt); + printf(" on interface %" PRIkernel_pid " to %i\n", dev, val); +} + static void _netif_set_addr(kernel_pid_t dev, ng_netconf_opt_t opt, char *addr_str) { @@ -282,6 +311,9 @@ static void _netif_set(char *cmd_name, kernel_pid_t dev, char *key, char *value) (strcmp("pan_id", key) == 0)) { _netif_set_u16(dev, NETCONF_OPT_NID, value); } + else if (strcmp("power", key) == 0) { + _netif_set_i16(dev, NETCONF_OPT_TX_POWER, value); + } else if (strcmp("src_len", key) == 0) { _netif_set_u16(dev, NETCONF_OPT_SRC_LEN, value); }