From 8b2ee08d55e39a2a63f627a3fe95c6c1198bb5f8 Mon Sep 17 00:00:00 2001 From: Harald Pichler Date: Wed, 13 Sep 2017 13:38:46 +0200 Subject: [PATCH] add shell macconfig --- apps/shell/shell-merkur.c | 31 +++++++++++++++++++ core/lib/settings.h | 2 +- platform/osd-merkur-256/contiki-main.c | 5 +++ platform/osd-merkur-256/params.c | 42 +++++++++++++++++++++++++- platform/osd-merkur-256/params.h | 7 +++++ 5 files changed, 85 insertions(+), 2 deletions(-) diff --git a/apps/shell/shell-merkur.c b/apps/shell/shell-merkur.c index 28fadff43..7c7c1b07b 100644 --- a/apps/shell/shell-merkur.c +++ b/apps/shell/shell-merkur.c @@ -67,6 +67,11 @@ SHELL_COMMAND(ccathresholds_command, "ccathresholds", "ccathresholds : change mac layer 0 -> do nothing; 1 -> Radio allways on", + &shell_macconf_process); PROCESS(shell_saverfparam_process, "saverfparam"); SHELL_COMMAND(saverfparam_command, "saverfparam", @@ -148,6 +153,29 @@ PROCESS_THREAD(shell_ccathresholds_process, ev, data) PROCESS_END(); } /*---------------------------------------------------------------------------*/ +PROCESS_THREAD(shell_macconf_process, ev, data) +{ + radio_value_t value; + char buf[20]; + const char *newptr; + PROCESS_BEGIN(); + + value = shell_strtolong(data, &newptr); + + /* If no transmission power was given on the command line, we print + out the current macconf. */ + if(newptr == data) { + value = params_get_macconf(); + } else { + params_set_macconf(value); + } + + snprintf(buf, sizeof(buf), "%3d", value); + shell_output_str(&txpower_command, "macconf: ", buf); + + PROCESS_END(); +} +/*---------------------------------------------------------------------------*/ PROCESS_THREAD(shell_panid_process, ev, data) { radio_value_t value; @@ -185,6 +213,8 @@ PROCESS_THREAD(shell_saverfparam_process, ev, data) /* Save panid */ params_save_panid(); + /* Save macconf */ + params_save_macconf(); shell_output_str(&rfchannel_command, "saverfparam done ", 0); @@ -200,6 +230,7 @@ shell_merkur_init(void) shell_register_command(&rfchannel_command); shell_register_command(&ccathresholds_command); shell_register_command(&panid_command); + shell_register_command(&macconf_command); shell_register_command(&saverfparam_command); } diff --git a/core/lib/settings.h b/core/lib/settings.h index bef6d0461..6423bd139 100644 --- a/core/lib/settings.h +++ b/core/lib/settings.h @@ -130,7 +130,7 @@ typedef uint16_t settings_length_t; #define SETTINGS_KEY_RDC_INDEX TCC('R','D') /*!< RDC index, uint8_t */ #define SETTINGS_KEY_CHANNEL_MASK TCC('C','M') /*!< Channel mask, uint16_t */ - +#define SETTINGS_KEY_MAC_CONF TCC('M','C') /*!< MAC Layer Config, uint8_t */ /*****************************************************************************/ // MARK: - Constants diff --git a/platform/osd-merkur-256/contiki-main.c b/platform/osd-merkur-256/contiki-main.c index 3ea828753..fb855201a 100644 --- a/platform/osd-merkur-256/contiki-main.c +++ b/platform/osd-merkur-256/contiki-main.c @@ -303,6 +303,11 @@ uint8_t i; NETSTACK_MAC.init(); NETSTACK_NETWORK.init(); + if(params_get_macconf() == 1){ + NETSTACK_MAC.off(1); + PRINTA("Switch Reciver always on\n"); + } + #if ANNOUNCE_BOOT PRINTA("%s %s, channel %u , check rate %u Hz tx power %u\n",NETSTACK_MAC.name, NETSTACK_RDC.name, rf230_get_channel(), CLOCK_SECOND / (NETSTACK_RDC.channel_check_interval() == 0 ? 1:NETSTACK_RDC.channel_check_interval()), diff --git a/platform/osd-merkur-256/params.c b/platform/osd-merkur-256/params.c index 9bb462234..726a6ff7d 100644 --- a/platform/osd-merkur-256/params.c +++ b/platform/osd-merkur-256/params.c @@ -31,7 +31,7 @@ */ #define PRINTF(FORMAT,args...) printf_P(PSTR(FORMAT),##args) -#define DEBUG 0 +#define DEBUG 1 #if DEBUG #define PRINTD(FORMAT,args...) printf_P(PSTR(FORMAT),##args) #else @@ -292,6 +292,32 @@ params_get_ccathresholds(void) { return x; } +uint8_t +params_get_macconf(void) { + uint8_t x; + size_t size = 1; + if (settings_get(SETTINGS_KEY_MAC_CONF, 0,(unsigned char*)&x, &size) == SETTINGS_STATUS_OK) { + PRINTD("<-Get macconf of %d (0 -> do nothing)\n",x); + } else { + x=PARAMS_MACCONF; + if (settings_add_uint8(SETTINGS_KEY_MAC_CONF,x)==SETTINGS_STATUS_OK) { + PRINTD("->Set EEPROM macconf of %d (0 -> do nothing)\n",x); + } + } + return x; +} + +settings_status_t +params_set_macconf(radio_value_t value){ + settings_status_t rx=SETTINGS_STATUS_OK; + PRINTD("%d\n", value); + if(settings_set_uint8(SETTINGS_KEY_MAC_CONF, value) != SETTINGS_STATUS_OK) { + PRINTD("settings-mac-conf: `save` failed: \n"); + rx = SETTINGS_STATUS_FAILURE; + } + return rx; +} + settings_status_t params_save_panid(void) { radio_value_t value; @@ -344,6 +370,20 @@ params_save_txpower(void) { return rx; } +settings_status_t +params_save_macconf(void) { + radio_value_t value; + settings_status_t rx=SETTINGS_STATUS_OK; + + value = params_get_macconf(); + PRINTD("%d\n", value); + if(settings_set_uint8(SETTINGS_KEY_MAC_CONF, value) != SETTINGS_STATUS_OK) { + PRINTD("settings-mac-conf: `save` failed: \n"); + rx = SETTINGS_STATUS_FAILURE; + } + return rx; +} + radio_result_t get_param(radio_param_t param, radio_value_t *value) { diff --git a/platform/osd-merkur-256/params.h b/platform/osd-merkur-256/params.h index 926ee1fce..7b6303a52 100644 --- a/platform/osd-merkur-256/params.h +++ b/platform/osd-merkur-256/params.h @@ -81,6 +81,9 @@ extern uint8_t eemem_domain_name[30]; #else #define PARAMS_TXPOWER 0 #endif +#ifdef NETSTACK_CONF_RDC +#define PARAMS_MACCONF 0 +#endif #ifdef EUI64_ADDRESS #define PARAMS_EUI64ADDR EUI64_ADDRESS #else @@ -106,6 +109,7 @@ uint8_t params_get_eui64(uint8_t *eui64); #define params_get_panid(...) PARAMS_PANID #define params_get_panaddr(...) PARAMS_PANADDR #define params_get_txpower(...) PARAMS_TXPOWER +#define params_get_macconf(...) PARAMS_MACCONF #else /* Parameters stored in eeprom */ uint16_t params_get_nodeid(void); @@ -113,11 +117,14 @@ uint8_t params_get_channel(void); uint16_t params_get_panid(void); uint16_t params_get_panaddr(void); uint8_t params_get_txpower(void); +uint8_t params_get_macconf(void); +settings_status_t params_set_macconf(radio_value_t value); settings_status_t params_save_nodeid(void); settings_status_t params_save_channel(void); settings_status_t params_save_panid(void); settings_status_t params_save_panaddr(void); settings_status_t params_save_txpower(void); +settings_status_t params_save_macconf(void); radio_result_t get_param(radio_param_t param, radio_value_t *value); radio_result_t set_param(radio_param_t param, radio_value_t value); #endif