NVProperty generic key value store using the MCU flash area.

Dependents:   Turtle_RadioShuttle

Committer:
Helmut Tschemernjak
Date:
Mon Apr 22 12:29:12 2019 +0200
Revision:
16:24a9d3ecee7b
Parent:
12:5539cdc8be4b
Added NTP to the editor

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Helmut Tschemernjak 7:5c36e5c18b65 1 /*
Helmut Tschemernjak 7:5c36e5c18b65 2 * This is an unpublished work copyright
Helmut Tschemernjak 7:5c36e5c18b65 3 * (c) 2019 Helmut Tschemernjak
Helmut Tschemernjak 7:5c36e5c18b65 4 * 30826 Garbsen (Hannover) Germany
Helmut Tschemernjak 7:5c36e5c18b65 5 *
Helmut Tschemernjak 7:5c36e5c18b65 6 *
Helmut Tschemernjak 7:5c36e5c18b65 7 * Use is granted to registered RadioShuttle licensees only.
Helmut Tschemernjak 7:5c36e5c18b65 8 * Licensees must own a valid serial number and product code.
Helmut Tschemernjak 7:5c36e5c18b65 9 * Details see: www.radioshuttle.de
Helmut Tschemernjak 7:5c36e5c18b65 10 */
Helmut Tschemernjak 7:5c36e5c18b65 11
Helmut Tschemernjak 7:5c36e5c18b65 12
Helmut Tschemernjak 7:5c36e5c18b65 13 #include <mbed.h>
Helmut Tschemernjak 12:5539cdc8be4b 14 #include "PinMap.h"
Helmut Tschemernjak 7:5c36e5c18b65 15 #include "main.h"
Helmut Tschemernjak 7:5c36e5c18b65 16 #include "arch.h"
Helmut Tschemernjak 7:5c36e5c18b65 17
Helmut Tschemernjak 7:5c36e5c18b65 18 #ifdef FEATURE_NVPROPERTYEDITOR
Helmut Tschemernjak 7:5c36e5c18b65 19 #include <NVPropertyProviderInterface.h>
Helmut Tschemernjak 7:5c36e5c18b65 20 #include "NVProperty.h"
Helmut Tschemernjak 7:5c36e5c18b65 21
Helmut Tschemernjak 7:5c36e5c18b65 22 static const char *getNiceName(int id, int val);
Helmut Tschemernjak 7:5c36e5c18b65 23
Helmut Tschemernjak 7:5c36e5c18b65 24 /*
Helmut Tschemernjak 7:5c36e5c18b65 25 * add custom user defined properties here
Helmut Tschemernjak 7:5c36e5c18b65 26 */
Helmut Tschemernjak 7:5c36e5c18b65 27 class UserProperty : public NVProperty {
Helmut Tschemernjak 7:5c36e5c18b65 28 public:
Helmut Tschemernjak 7:5c36e5c18b65 29 enum Properties {
Helmut Tschemernjak 7:5c36e5c18b65 30 MY_DEVNAME = PRIVATE_RANGE_START,
Helmut Tschemernjak 7:5c36e5c18b65 31 MY_CITY,
Helmut Tschemernjak 7:5c36e5c18b65 32 MY_APP_PASSWORD,
Helmut Tschemernjak 7:5c36e5c18b65 33 };
Helmut Tschemernjak 7:5c36e5c18b65 34 };
Helmut Tschemernjak 7:5c36e5c18b65 35
Helmut Tschemernjak 7:5c36e5c18b65 36 // #define ARRAYLEN(arr) (sizeof(arr) / sizeof(0[arr]))
Helmut Tschemernjak 7:5c36e5c18b65 37
Helmut Tschemernjak 7:5c36e5c18b65 38 struct propArray {
Helmut Tschemernjak 7:5c36e5c18b65 39 int id;
Helmut Tschemernjak 7:5c36e5c18b65 40 NVProperty::NVPType type;
Helmut Tschemernjak 7:5c36e5c18b65 41 const char *name;
Helmut Tschemernjak 7:5c36e5c18b65 42 int valueInt;
Helmut Tschemernjak 7:5c36e5c18b65 43 const char *valueStr;
Helmut Tschemernjak 7:5c36e5c18b65 44 } propArray[] = {
Helmut Tschemernjak 7:5c36e5c18b65 45 { NVProperty::RTC_AGING_CAL, NVProperty::T_32BIT, "RTC_AGING_CAL", 0, NULL },
Helmut Tschemernjak 7:5c36e5c18b65 46 { NVProperty::ADC_VREF, NVProperty::T_32BIT, "ADC_VREF", 0, NULL },
Helmut Tschemernjak 7:5c36e5c18b65 47 { NVProperty::HARDWARE_REV, NVProperty::T_32BIT, "HARDWARE_REV", 0, NULL },
Helmut Tschemernjak 7:5c36e5c18b65 48
Helmut Tschemernjak 7:5c36e5c18b65 49 { NVProperty::LORA_DEVICE_ID, NVProperty::T_32BIT, "LORA_DEVICE_ID", 0, NULL },
Helmut Tschemernjak 7:5c36e5c18b65 50 { NVProperty::LORA_CODE_ID, NVProperty::T_32BIT, "LORA_CODE_ID", 0, NULL },
Helmut Tschemernjak 7:5c36e5c18b65 51 { NVProperty::LORA_REMOTE_ID, NVProperty::T_32BIT, "LORA_REMOTE_ID", 0, NULL },
Helmut Tschemernjak 7:5c36e5c18b65 52 { NVProperty::LORA_REMOTE_ID_ALT, NVProperty::T_32BIT, "LORA_REMOTE_ID_ALT", 0, NULL },
Helmut Tschemernjak 7:5c36e5c18b65 53 { NVProperty::LORA_RADIO_TYPE, NVProperty::T_32BIT, "LORA_RADIO_TYPE", 0, NULL },
Helmut Tschemernjak 7:5c36e5c18b65 54 { NVProperty::LORA_FREQUENCY, NVProperty::T_32BIT, "LORA_FREQUENCY", 0, NULL },
Helmut Tschemernjak 7:5c36e5c18b65 55 { NVProperty::LORA_BANDWIDTH, NVProperty::T_32BIT, "LORA_BANDWIDTH", 0, NULL },
Helmut Tschemernjak 7:5c36e5c18b65 56 { NVProperty::LORA_SPREADING_FACTOR, NVProperty::T_32BIT, "LORA_SPREADING_FACTOR", 0, NULL },
Helmut Tschemernjak 7:5c36e5c18b65 57 { NVProperty::LORA_TXPOWER, NVProperty::T_32BIT, "LORA_TXPOWER", 0, NULL },
Helmut Tschemernjak 7:5c36e5c18b65 58 { NVProperty::LORA_FREQUENCY_OFFSET, NVProperty::T_32BIT, "LORA_FREQUENCY_OFFSET", 0, NULL },
Helmut Tschemernjak 7:5c36e5c18b65 59 { NVProperty::LORA_APP_PWD, NVProperty::T_STR, "LORA_APP_PWD", 0, NULL },
Helmut Tschemernjak 7:5c36e5c18b65 60 { NVProperty::LORA_APP_PWD_ALT, NVProperty::T_STR, "LORA_APP_PWD_ALT", 0, NULL },
Helmut Tschemernjak 7:5c36e5c18b65 61
Helmut Tschemernjak 7:5c36e5c18b65 62 { NVProperty::LOC_LONGITUDE, NVProperty::T_STR, "LOC_LONGITUDE", 0, NULL },
Helmut Tschemernjak 7:5c36e5c18b65 63 { NVProperty::LOC_LATITUDE, NVProperty::T_STR, "LOC_LATITUDE", 0, NULL },
Helmut Tschemernjak 7:5c36e5c18b65 64 { NVProperty::LOC_NAME, NVProperty::T_STR, "LOC_NAME", 0, NULL },
Helmut Tschemernjak 7:5c36e5c18b65 65 { NVProperty::HOSTNAME, NVProperty::T_STR, "HOSTNAME", 0, NULL },
Helmut Tschemernjak 7:5c36e5c18b65 66
Helmut Tschemernjak 7:5c36e5c18b65 67 { NVProperty::WIFI_SSID, NVProperty::T_STR, "WIFI_SSID", 0, NULL },
Helmut Tschemernjak 7:5c36e5c18b65 68 { NVProperty::WIFI_PASSWORD, NVProperty::T_STR, "WIFI_PASSWORD", 0, NULL },
Helmut Tschemernjak 7:5c36e5c18b65 69 { NVProperty::WIFI_SSID_ALT, NVProperty::T_STR, "WIFI_SSID_ALT", 0, NULL },
Helmut Tschemernjak 7:5c36e5c18b65 70 { NVProperty::WIFI_PASSWORD_ALT, NVProperty::T_STR, "WIFI_PASSWORD_ALT", 0, NULL },
Helmut Tschemernjak 7:5c36e5c18b65 71 { NVProperty::USE_DHCP, NVProperty::T_32BIT, "USE_DHCP", 0, NULL },
Helmut Tschemernjak 7:5c36e5c18b65 72 { NVProperty::MAC_ADDR, NVProperty::T_STR, "MAC_ADDR", 0, NULL },
Helmut Tschemernjak 7:5c36e5c18b65 73 { NVProperty::NET_IP_ADDR, NVProperty::T_STR, "NET_IP_ADDR", 0, NULL },
Helmut Tschemernjak 7:5c36e5c18b65 74 { NVProperty::NET_IP_ROUTER, NVProperty::T_STR, "NET_IP_ROUTER", 0, NULL },
Helmut Tschemernjak 7:5c36e5c18b65 75 { NVProperty::NET_IP_DNS_SERVER, NVProperty::T_STR, "NET_IP_DNS_SERVER", 0, NULL },
Helmut Tschemernjak 16:24a9d3ecee7b 76 { NVProperty::NET_IP_DNS_SERVER_ALT, NVProperty::T_STR, "NET_IP_DNS_SERVer_ALT", 0, NULL },
Helmut Tschemernjak 7:5c36e5c18b65 77
Helmut Tschemernjak 16:24a9d3ecee7b 78 { NVProperty::NET_NTP_SERVER, NVProperty::T_STR, "NET_NTP_SERVER", 0, NULL },
Helmut Tschemernjak 16:24a9d3ecee7b 79 { NVProperty::NET_NTP_SERVER_ALT,NVProperty::T_STR, "NET_NTP_SERVER_ALT", 0, NULL },
Helmut Tschemernjak 16:24a9d3ecee7b 80 { NVProperty::NET_NTP_GMTOFFSET, NVProperty::T_32BIT, "NET_NTP_GMTOFFSET", 0, NULL },
Helmut Tschemernjak 16:24a9d3ecee7b 81 { NVProperty::NET_NTP_DAYLIGHTOFFSET, NVProperty::T_32BIT, "NET_NTP_DAYLIGHTOFFSET", 0, NULL },
Helmut Tschemernjak 16:24a9d3ecee7b 82
Helmut Tschemernjak 7:5c36e5c18b65 83 { NVProperty::MQTT_SERVER, NVProperty::T_STR, "MQTT_SERVER", 0, NULL },
Helmut Tschemernjak 7:5c36e5c18b65 84 { NVProperty::MQTT_SERVER_ALT, NVProperty::T_STR, "MQTT_SERVER_ALT", 0, NULL },
Helmut Tschemernjak 7:5c36e5c18b65 85 { NVProperty::MQTT_TOPIC_INFO, NVProperty::T_STR, "MQTT_TOPIC_INFO", 0, NULL },
Helmut Tschemernjak 7:5c36e5c18b65 86 { NVProperty::MQTT_TOPIC_ALARM, NVProperty::T_STR, "MQTT_TOPIC_ALARM", 0, NULL },
Helmut Tschemernjak 7:5c36e5c18b65 87 { NVProperty::MQTT_TOPIC_CONTROL, NVProperty::T_STR, "MQTT_TOPIC_CONTROL", 0, NULL },
Helmut Tschemernjak 7:5c36e5c18b65 88 { NVProperty::MQTT_TOPIC_4, NVProperty::T_STR, "MQTT_TOPIC_4", 0, NULL },
Helmut Tschemernjak 7:5c36e5c18b65 89 { NVProperty::MQTT_TOPIC_5, NVProperty::T_STR, "MQTT_TOPIC_5", 0, NULL },
Helmut Tschemernjak 7:5c36e5c18b65 90
Helmut Tschemernjak 7:5c36e5c18b65 91 { NVProperty::ALARM_STATUS, NVProperty::T_32BIT, "ALARM_STATUS", 0, NULL },
Helmut Tschemernjak 7:5c36e5c18b65 92
Helmut Tschemernjak 7:5c36e5c18b65 93 /*
Helmut Tschemernjak 7:5c36e5c18b65 94 * A user defined property
Helmut Tschemernjak 7:5c36e5c18b65 95 */
Helmut Tschemernjak 7:5c36e5c18b65 96 { UserProperty::MY_CITY, NVProperty::T_STR, "MY_CITY", 0, NULL },
Helmut Tschemernjak 7:5c36e5c18b65 97 };
Helmut Tschemernjak 7:5c36e5c18b65 98
Helmut Tschemernjak 7:5c36e5c18b65 99 void NVPropertyEditor(void)
Helmut Tschemernjak 7:5c36e5c18b65 100 {
Helmut Tschemernjak 7:5c36e5c18b65 101 NVProperty p;
Helmut Tschemernjak 7:5c36e5c18b65 102
Helmut Tschemernjak 7:5c36e5c18b65 103 rprintf("\nWelcome to the Property Editor which allows reading/writing/erasing non volatile settings\r\n\r\n");
Helmut Tschemernjak 10:7999d15fd227 104 const char *help = "Properties cmds are:\r\n l (list properties), s (set e.g. s20=value), d (delete e.g. d20), q (quit)\r\n";
Helmut Tschemernjak 10:7999d15fd227 105 rprintf(help);
Helmut Tschemernjak 7:5c36e5c18b65 106
Helmut Tschemernjak 7:5c36e5c18b65 107 while(true) {
Helmut Tschemernjak 7:5c36e5c18b65 108 char buf[80];
Helmut Tschemernjak 7:5c36e5c18b65 109
Helmut Tschemernjak 7:5c36e5c18b65 110 memset(buf, 0, sizeof(buf));
Helmut Tschemernjak 7:5c36e5c18b65 111
Helmut Tschemernjak 7:5c36e5c18b65 112 rprintf("$ ");
Helmut Tschemernjak 7:5c36e5c18b65 113 const char *cmd = ConsoleReadline(buf, (int)sizeof(buf), true);
Helmut Tschemernjak 7:5c36e5c18b65 114 if (!cmd)
Helmut Tschemernjak 7:5c36e5c18b65 115 continue;
Helmut Tschemernjak 7:5c36e5c18b65 116
Helmut Tschemernjak 7:5c36e5c18b65 117 switch(*cmd) {
Helmut Tschemernjak 7:5c36e5c18b65 118 case 'l': {
Helmut Tschemernjak 7:5c36e5c18b65 119 int cnt = ARRAYLEN(propArray);
Helmut Tschemernjak 7:5c36e5c18b65 120 rprintf("List of Properties:\r\n");
Helmut Tschemernjak 7:5c36e5c18b65 121 for (int i = 0; i < cnt; i++) {
Helmut Tschemernjak 7:5c36e5c18b65 122 char tbuf[128];
Helmut Tschemernjak 7:5c36e5c18b65 123 const char *value = "(not set)";
Helmut Tschemernjak 7:5c36e5c18b65 124 memset(tbuf, 0, sizeof(tbuf));
Helmut Tschemernjak 7:5c36e5c18b65 125 if (propArray[i].type <= NVProperty::T_32BIT) {
Helmut Tschemernjak 7:5c36e5c18b65 126 int val = p.GetProperty(propArray[i].id, NVProperty::NVP_ENOENT);
Helmut Tschemernjak 7:5c36e5c18b65 127 if (val != NVProperty::NVP_ENOENT) {
Helmut Tschemernjak 7:5c36e5c18b65 128 value = tbuf;
Helmut Tschemernjak 7:5c36e5c18b65 129 snprintf(tbuf, sizeof(tbuf), "%d (0x%x) %s", val, val, getNiceName(propArray[i].id, val));
Helmut Tschemernjak 7:5c36e5c18b65 130 }
Helmut Tschemernjak 7:5c36e5c18b65 131 } else if (propArray[i].type == NVProperty::T_STR) {
Helmut Tschemernjak 7:5c36e5c18b65 132 const char *s = p.GetProperty(propArray[i].id, (const char *)NULL);
Helmut Tschemernjak 7:5c36e5c18b65 133 if (s)
Helmut Tschemernjak 7:5c36e5c18b65 134 value = s;
Helmut Tschemernjak 7:5c36e5c18b65 135 }
Helmut Tschemernjak 7:5c36e5c18b65 136 rprintf("%24s: %d=%s\r\n", propArray[i].name, propArray[i].id, value);
Helmut Tschemernjak 7:5c36e5c18b65 137 wait_ms(2); // to flush buffers
Helmut Tschemernjak 7:5c36e5c18b65 138 }
Helmut Tschemernjak 7:5c36e5c18b65 139 rprintf("\r\n");
Helmut Tschemernjak 7:5c36e5c18b65 140 }
Helmut Tschemernjak 7:5c36e5c18b65 141 break;
Helmut Tschemernjak 7:5c36e5c18b65 142 case 'd': {
Helmut Tschemernjak 7:5c36e5c18b65 143 int id = strtol(++cmd, NULL, 0);
Helmut Tschemernjak 7:5c36e5c18b65 144
Helmut Tschemernjak 7:5c36e5c18b65 145 if (id < 1) {
Helmut Tschemernjak 7:5c36e5c18b65 146 dprintf("invalid parameter");
Helmut Tschemernjak 7:5c36e5c18b65 147 break;
Helmut Tschemernjak 7:5c36e5c18b65 148 }
Helmut Tschemernjak 7:5c36e5c18b65 149 int cnt = ARRAYLEN(propArray);
Helmut Tschemernjak 7:5c36e5c18b65 150 int slot = -1;
Helmut Tschemernjak 7:5c36e5c18b65 151 for (int i = 0; i < cnt; i++) {
Helmut Tschemernjak 7:5c36e5c18b65 152 if (propArray[i].id == id) {
Helmut Tschemernjak 7:5c36e5c18b65 153 slot = i;
Helmut Tschemernjak 7:5c36e5c18b65 154 break;
Helmut Tschemernjak 7:5c36e5c18b65 155 }
Helmut Tschemernjak 7:5c36e5c18b65 156 }
Helmut Tschemernjak 7:5c36e5c18b65 157 if (slot == -1)
Helmut Tschemernjak 7:5c36e5c18b65 158 dprintf("Property: %d not found in table", id);
Helmut Tschemernjak 7:5c36e5c18b65 159 else {
Helmut Tschemernjak 7:5c36e5c18b65 160 dprintf("Deleted Property: %d %s", id, propArray[slot].name);
Helmut Tschemernjak 7:5c36e5c18b65 161 p.OpenPropertyStore(true); // enable for write
Helmut Tschemernjak 7:5c36e5c18b65 162 p.EraseProperty(id);
Helmut Tschemernjak 7:5c36e5c18b65 163 }
Helmut Tschemernjak 7:5c36e5c18b65 164 }
Helmut Tschemernjak 7:5c36e5c18b65 165 break;
Helmut Tschemernjak 7:5c36e5c18b65 166 case 's': {
Helmut Tschemernjak 9:ac6c43b29434 167 char *v = (char *)strchr(++cmd, '=');
Helmut Tschemernjak 7:5c36e5c18b65 168 if (!v)
Helmut Tschemernjak 7:5c36e5c18b65 169 continue;
Helmut Tschemernjak 7:5c36e5c18b65 170 *v++ = 0;
Helmut Tschemernjak 7:5c36e5c18b65 171
Helmut Tschemernjak 7:5c36e5c18b65 172 int id = strtol(cmd, NULL, 0);
Helmut Tschemernjak 7:5c36e5c18b65 173 if (id < 1) {
Helmut Tschemernjak 7:5c36e5c18b65 174 dprintf("invalid parameter");
Helmut Tschemernjak 7:5c36e5c18b65 175 break;
Helmut Tschemernjak 7:5c36e5c18b65 176 }
Helmut Tschemernjak 7:5c36e5c18b65 177
Helmut Tschemernjak 7:5c36e5c18b65 178 int cnt = ARRAYLEN(propArray);
Helmut Tschemernjak 7:5c36e5c18b65 179 int slot = -1;
Helmut Tschemernjak 7:5c36e5c18b65 180 for (int i = 0; i < cnt; i++) {
Helmut Tschemernjak 7:5c36e5c18b65 181 if (propArray[i].id == id) {
Helmut Tschemernjak 7:5c36e5c18b65 182 slot = i;
Helmut Tschemernjak 7:5c36e5c18b65 183 break;
Helmut Tschemernjak 7:5c36e5c18b65 184 }
Helmut Tschemernjak 7:5c36e5c18b65 185 }
Helmut Tschemernjak 7:5c36e5c18b65 186 if (slot == -1)
Helmut Tschemernjak 7:5c36e5c18b65 187 dprintf("Property: %d not found in table", id);
Helmut Tschemernjak 7:5c36e5c18b65 188 else {
Helmut Tschemernjak 7:5c36e5c18b65 189 dprintf("Set Property: %s: %d=%s", propArray[slot].name, id, v);
Helmut Tschemernjak 7:5c36e5c18b65 190 p.OpenPropertyStore(true); // enable for write
Helmut Tschemernjak 7:5c36e5c18b65 191 if (propArray[slot].type == NVProperty::T_STR) {
Helmut Tschemernjak 7:5c36e5c18b65 192 p.SetProperty(id, p.T_STR, v, p.S_FLASH);
Helmut Tschemernjak 7:5c36e5c18b65 193 } else if (propArray[slot].type <= NVProperty::T_32BIT) {
Helmut Tschemernjak 7:5c36e5c18b65 194 p.SetProperty(id, p.T_32BIT, (int)strtoll(v, NULL, 0), p.S_FLASH);
Helmut Tschemernjak 7:5c36e5c18b65 195 }
Helmut Tschemernjak 7:5c36e5c18b65 196 }
Helmut Tschemernjak 7:5c36e5c18b65 197 }
Helmut Tschemernjak 7:5c36e5c18b65 198 break;
Helmut Tschemernjak 10:7999d15fd227 199 case 'i':
Helmut Tschemernjak 10:7999d15fd227 200 dump("Flash-Area", (void *)0x803c000, 2048);
Helmut Tschemernjak 10:7999d15fd227 201 break;
Helmut Tschemernjak 10:7999d15fd227 202 case 'r':
Helmut Tschemernjak 10:7999d15fd227 203 dprintf("ReorgProperties");
Helmut Tschemernjak 10:7999d15fd227 204 p.ReorgProperties();
Helmut Tschemernjak 10:7999d15fd227 205 break;
Helmut Tschemernjak 7:5c36e5c18b65 206 case 'q':
Helmut Tschemernjak 7:5c36e5c18b65 207 return;
Helmut Tschemernjak 7:5c36e5c18b65 208 default:
Helmut Tschemernjak 10:7999d15fd227 209 rprintf(help);
Helmut Tschemernjak 7:5c36e5c18b65 210 break;
Helmut Tschemernjak 7:5c36e5c18b65 211 }
Helmut Tschemernjak 7:5c36e5c18b65 212 }
Helmut Tschemernjak 7:5c36e5c18b65 213 }
Helmut Tschemernjak 7:5c36e5c18b65 214
Helmut Tschemernjak 7:5c36e5c18b65 215
Helmut Tschemernjak 7:5c36e5c18b65 216 static const char *getNiceName(int id, int val)
Helmut Tschemernjak 7:5c36e5c18b65 217 {
Helmut Tschemernjak 7:5c36e5c18b65 218 const char *name = "";
Helmut Tschemernjak 7:5c36e5c18b65 219
Helmut Tschemernjak 7:5c36e5c18b65 220 switch(id) {
Helmut Tschemernjak 7:5c36e5c18b65 221 case NVProperty::LORA_RADIO_TYPE:
Helmut Tschemernjak 7:5c36e5c18b65 222 if (val == 1)
Helmut Tschemernjak 7:5c36e5c18b65 223 return "RS_Node_Offline";
Helmut Tschemernjak 7:5c36e5c18b65 224 else if (val == 2)
Helmut Tschemernjak 7:5c36e5c18b65 225 return "RS_Node_Checking";
Helmut Tschemernjak 7:5c36e5c18b65 226 else if (val == 3)
Helmut Tschemernjak 7:5c36e5c18b65 227 return "RS_Node_Online";
Helmut Tschemernjak 7:5c36e5c18b65 228 else if (val == 4)
Helmut Tschemernjak 7:5c36e5c18b65 229 return "RS_Station_Basic";
Helmut Tschemernjak 7:5c36e5c18b65 230 else if (val == 5)
Helmut Tschemernjak 7:5c36e5c18b65 231 return "RS_Station_Server";
Helmut Tschemernjak 7:5c36e5c18b65 232 break;
Helmut Tschemernjak 7:5c36e5c18b65 233 default:
Helmut Tschemernjak 7:5c36e5c18b65 234 break;
Helmut Tschemernjak 7:5c36e5c18b65 235 }
Helmut Tschemernjak 7:5c36e5c18b65 236 return name;
Helmut Tschemernjak 7:5c36e5c18b65 237 }
Helmut Tschemernjak 7:5c36e5c18b65 238 #endif