// SPDX-License-Identifier: Apache-2.0 // Copyright (c) 2012-2024 Scott Penrose and WII5 Buoy contributors // // This file is part of WII5 Buoy firmware. // See LICENSE for full terms. /** * @file WII5Strings.cpp * @brief String-formatting helpers: strDriver, strStatus, strError, etc. */ /* WII5Strings - Parsing and Generating larger text strings */ #include #include // TODO This is hard coded to console /* Parse Console commands TODO: * Lower case - but only as compared * NOW = lower case only * * Move literals ("hellow") etc into #DEFINE or similar * Consider shorter strings - e.g allow "he" instead of hello */ // TODO 3 inputs - not using Console !!! // TODO Returns command (could have consumed 1..3 entries) // TODO Returns params (could have converted strings to numbers, but numbers returned) // - Consisiting of the rest of the params consumed // TODO how? WII5_COMMANDS WII5Strings::parseCommand(char* in1, char* in2, char* in3) { // 1 - One level entries if (strcmp_P(in1,(PGM_P) F("hello")) == 0) { return WII5COMMAND_HELLO; } else if (strcmp_P(in1,(PGM_P) F("hello!")) == 0) { return WII5COMMAND_HELLOACK; } else if (strcmp_P(in1,(PGM_P) F("dump")) == 0) { return WII5COMMAND_DUMP; } else if (strcmp_P(in1,(PGM_P) F("status")) == 0) { return WII5COMMAND_STATUS; } else if (strcmp_P(in1,(PGM_P) F("waitx")) == 0) { return WII5COMMAND_WAITX; } else if (strcmp_P(in1,(PGM_P) F("waity")) == 0) { return WII5COMMAND_WAITY; } else if (strcmp_P(in1,(PGM_P) F("waitz")) == 0) { return WII5COMMAND_WAITZ; } else if (strcmp_P(in1,(PGM_P) F("waitq")) == 0) { return WII5COMMAND_WAITQ; } else if (strcmp_P(in1,(PGM_P) F("waits")) == 0) { return WII5COMMAND_WAITS; } else if (strcmp_P(in1,(PGM_P) F("help")) == 0) { return WII5COMMAND_HELP; } else if (strcmp_P(in1,(PGM_P) F("reset")) == 0) { return WII5COMMAND_RESET; } else if (strcmp_P(in1,(PGM_P) F("echo")) == 0) { return WII5COMMAND_ECHO; } else if (strcmp_P(in1,(PGM_P) F("people")) == 0) { return WII5COMMAND_PEOPLE; } else if (strcmp_P(in1,(PGM_P) F("set")) == 0) { return WII5COMMAND_SET; } else if (strcmp_P(in1,(PGM_P) F("send")) == 0) { return WII5COMMAND_SEND; } // GPS else if (strcmp_P(in1,(PGM_P) F("gps")) == 0) { if (strcmp_P(in2,(PGM_P) F("dump")) == 0) return WII5COMMAND_GPS_DUMP; else if (strcmp_P(in2,(PGM_P) F("passthrough")) == 0) return WII5COMMAND_GPS_PASSTHROUGH; else if (strcmp_P(in2,(PGM_P) F("debug")) == 0) return WII5COMMAND_GPS_DEBUG; else if (strcmp_P(in2,(PGM_P) F("start")) == 0) return WII5COMMAND_GPS_START; else if (strcmp_P(in2,(PGM_P) F("stop")) == 0) return WII5COMMAND_GPS_STOP; else if (strcmp_P(in2,(PGM_P) F("time")) == 0) return WII5COMMAND_GPS_TIME; else if (strcmp_P(in2,(PGM_P) F("pos")) == 0) return WII5COMMAND_GPS_POS; else if (strcmp_P(in2,(PGM_P) F("accurate")) == 0) return WII5COMMAND_GPS_ACCURATE; } // SPARTON else if (strcmp_P(in1,(PGM_P) F("sparton")) == 0) { if (strcmp_P(in2,(PGM_P) F("mode")) == 0) return WII5COMMAND_SPARTON_MODE; else if (strcmp_P(in2,(PGM_P) F("dump")) == 0) return WII5COMMAND_SPARTON_DUMP; else if (strcmp_P(in2,(PGM_P) F("passthrough")) == 0) return WII5COMMAND_SPARTON_PASSTHROUGH; else if (strcmp_P(in2,(PGM_P) F("debug")) == 0) return WII5COMMAND_SPARTON_DEBUG; else if (strcmp_P(in2,(PGM_P) F("info")) == 0) return WII5COMMAND_SPARTON_INFO; } // MATHS else if (strcmp_P(in1,(PGM_P) F("maths")) == 0) { if (strcmp_P(in2,(PGM_P) F("start")) == 0) return WII5COMMAND_MATHS_START; else if (strcmp_P(in2,(PGM_P) F("stop")) == 0) return WII5COMMAND_MATHS_STOP; else if (strcmp_P(in2,(PGM_P) F("beep")) == 0) return WII5COMMAND_MATHS_BEEP; else if (strcmp_P(in2,(PGM_P) F("restart")) == 0) return WII5COMMAND_MATHS_RESTART; else if (strcmp_P(in2,(PGM_P) F("flip")) == 0) return WII5COMMAND_MATHS_FLIP; else if (strcmp_P(in2,(PGM_P) F("hold")) == 0) return WII5COMMAND_MATHS_HOLD; else if (strcmp_P(in2,(PGM_P) F("until")) == 0) return WII5COMMAND_MATHS_UNTIL; else if (strcmp_P(in2,(PGM_P) F("info")) == 0) return WII5COMMAND_MATHS_INFO; else if (strcmp_P(in2,(PGM_P) F("halt")) == 0) return WII5COMMAND_MATHS_HALT; else if (strcmp_P(in2,(PGM_P) F("do")) == 0) return WII5COMMAND_MATHS_DO; else if (strcmp_P(in2,(PGM_P) F("make")) == 0) return WII5COMMAND_MATHS_MAKE; else if (strcmp_P(in2,(PGM_P) F("script")) == 0) return WII5COMMAND_MATHS_SCRIPT; else if (strcmp_P(in2,(PGM_P) F("booted")) == 0) return WII5COMMAND_MATHS_BOOTED; else if (strcmp_P(in2,(PGM_P) F("return")) == 0) return WII5COMMAND_MATHS_RETURN; } // LOG // @WII5,log,debug|deafult|fatal else if (strcmp_P(in1,(PGM_P) F("log")) == 0) { if (strcmp_P(in2,(PGM_P) F("debug")) == 0) return WII5COMMAND_LOG_DEBUG; else if (strcmp_P(in2,(PGM_P) F("default")) == 0) return WII5COMMAND_LOG_DEFAULT; else if (strcmp_P(in2,(PGM_P) F("error")) == 0) return WII5COMMAND_LOG_ERROR; else if (strcmp_P(in2,(PGM_P) F("fatal")) == 0) return WII5COMMAND_LOG_FATAL; else if (strcmp_P(in2,(PGM_P) F("test")) == 0) return WII5COMMAND_LOG_TEST; } // SETTINGS // @WII5,setting,deviceid,10045 else if (strcmp_P(in1,(PGM_P) F("setting")) == 0) { if (strcmp_P(in2,(PGM_P) F("list")) == 0) return WII5COMMAND_SETTING_LIST; else if (strcmp_P(in2,(PGM_P) F("deviceid")) == 0) return WII5COMMAND_SETTING_DEVICEID; else if (strcmp_P(in2,(PGM_P) F("defaults")) == 0) return WII5COMMAND_SETTING_DEFAULTS; else if (strcmp_P(in2,(PGM_P) F("gpstimeout")) == 0) return WII5COMMAND_SETTING_GPSTIMEOUT; else if (strcmp_P(in2,(PGM_P) F("mode")) == 0) return WII5COMMAND_SETTING_MODE; else if (strcmp_P(in2,(PGM_P) F("time")) == 0) return WII5COMMAND_SETTING_TIME; else if (strcmp_P(in2,(PGM_P) F("disablelowbattery")) == 0) return WII5COMMAND_SETTING_DISABLELOWBATTERY; // FLAGS - all,uint32_t or X,0|1 else if (strcmp_P(in2,(PGM_P) F("flags")) == 0) return WII5COMMAND_SETTING_FLAGS; // OPTIONS - pass in {PERIOD} and {BINARYTYPE} - 0=ignore else if (strcmp_P(in2,(PGM_P) F("captureoptions")) == 0) return WII5COMMAND_SETTING_CAPTUREOPTIONS; else if (strcmp_P(in2,(PGM_P) F("positionoptions")) == 0) return WII5COMMAND_SETTING_POSITIONOPTIONS; else if (strcmp_P(in2,(PGM_P) F("sleepoptions")) == 0) return WII5COMMAND_SETTING_SLEEPOPTIONS; else if (strcmp_P(in2,(PGM_P) F("batteryoptions")) == 0) return WII5COMMAND_SETTING_BATTERYOPTIONS; } // NETWORK else if (strcmp_P(in1,(PGM_P) F("network")) == 0) { if (strcmp_P(in2,(PGM_P) F("echo")) == 0) return WII5COMMAND_NETWORK_ECHO; else if (strcmp_P(in2,(PGM_P) F("echoack")) == 0) return WII5COMMAND_NETWORK_ECHOACK; else if (strcmp_P(in2,(PGM_P) F("fakeecho")) == 0) return WII5COMMAND_NETWORK_FAKEECHO; else if (strcmp_P(in2,(PGM_P) F("fakeechoack")) == 0) return WII5COMMAND_NETWORK_FAKEECHOACK; } // STORAGE // Storage else if (strcmp_P(in1,(PGM_P) F("storage")) == 0) { if (strcmp_P(in2,(PGM_P) F("format")) == 0) return WII5COMMAND_STORAGE_FORMAT; else if (strcmp_P(in2,(PGM_P) F("testfile")) == 0) return WII5COMMAND_STORAGE_TESTFILE; else if (strcmp_P(in2,(PGM_P) F("setstatus")) == 0) return WII5COMMAND_STORAGE_SETSTATUS; else if (strcmp_P(in2,(PGM_P) F("off")) == 0) return WII5COMMAND_STORAGE_OFF; else if (strcmp_P(in2,(PGM_P) F("sd1")) == 0) return WII5COMMAND_STORAGE_SD1; else if (strcmp_P(in2,(PGM_P) F("sd2")) == 0) return WII5COMMAND_STORAGE_SD2; else if (strcmp_P(in2,(PGM_P) F("list")) == 0) return WII5COMMAND_STORAGE_LIST; else if (strcmp_P(in2,(PGM_P) F("view")) == 0) return WII5COMMAND_STORAGE_VIEW; else if (strcmp_P(in2,(PGM_P) F("metadata")) == 0) return WII5COMMAND_STORAGE_METADATA; else if (strcmp_P(in2,(PGM_P) F("results")) == 0) return WII5COMMAND_STORAGE_RESULTS; else if (strcmp_P(in2,(PGM_P) F("raw")) == 0) return WII5COMMAND_STORAGE_RAW; else if (strcmp_P(in2,(PGM_P) F("debug")) == 0) return WII5COMMAND_STORAGE_DEBUG; else if (strcmp_P(in2,(PGM_P) F("status")) == 0) return WII5COMMAND_STORAGE_STATUS; } // Battery else if (strcmp_P(in1,(PGM_P) F("battery")) == 0) { if (strcmp_P(in2,(PGM_P) F("start")) == 0) return WII5COMMAND_BATTERY_START; } // Weather else if (strcmp_P(in1,(PGM_P) F("weather")) == 0) { if (strcmp_P(in2,(PGM_P) F("read")) == 0) return WII5COMMAND_WEATHER_READ; else if (strcmp_P(in2,(PGM_P) F("test")) == 0) return WII5COMMAND_WEATHER_TEST; } // CAPTURE else if (strcmp_P(in1,(PGM_P) F("capture")) == 0) { if (strcmp_P(in2,(PGM_P) F("start")) == 0) return WII5COMMAND_CAPTURE_START; else if (strcmp_P(in2,(PGM_P) F("stop")) == 0) return WII5COMMAND_CAPTURE_STOP; } // POSITION else if (strcmp_P(in1,(PGM_P) F("position")) == 0) { if (strcmp_P(in2,(PGM_P) F("start")) == 0) return WII5COMMAND_POSITION_START; else if (strcmp_P(in2,(PGM_P) F("stop")) == 0) return WII5COMMAND_POSITION_STOP; else if (strcmp_P(in2,(PGM_P) F("passthrough")) == 0) return WII5COMMAND_POSITION_PASSTHROUGH; } // Mode else if (strcmp_P(in1,(PGM_P) F("mode")) == 0) { if (strcmp_P(in2,(PGM_P) F("position")) == 0) return WII5COMMAND_MODE_POSITION; else if (strcmp_P(in2,(PGM_P) F("manualtest")) == 0) return WII5COMMAND_MODE_MANUALTEST; else if (strcmp_P(in2,(PGM_P) F("selftest")) == 0) return WII5COMMAND_MODE_SELFTEST; else if (strcmp_P(in2,(PGM_P) F("capture")) == 0) return WII5COMMAND_MODE_CAPTURE; else if (strcmp_P(in2,(PGM_P) F("sleep")) == 0) return WII5COMMAND_MODE_SLEEP; else if (strcmp_P(in2,(PGM_P) F("manualtest")) == 0) return WII5COMMAND_MODE_MANUALTEST; else if (strcmp_P(in2,(PGM_P) F("default")) == 0) return WII5COMMAND_MODE_DEFAULT; } // Iridium else if (strcmp_P(in1,(PGM_P) F("iridium")) == 0) { if (strcmp_P(in2,(PGM_P) F("send")) == 0) return WII5COMMAND_IRIDIUM_SEND; } // Communication else if (strcmp_P(in1,(PGM_P) F("communications")) == 0) { if (strcmp_P(in2,(PGM_P) F("disabled")) == 0) return WII5COMMAND_COMMUNICATIONS_DISABLED; else if (strcmp_P(in2,(PGM_P) F("test")) == 0) return WII5COMMAND_COMMUNICATIONS_TEST; else if (strcmp_P(in2,(PGM_P) F("signal")) == 0) return WII5COMMAND_COMMUNICATIONS_SIGNAL; else if (strcmp_P(in2,(PGM_P) F("start")) == 0) return WII5COMMAND_COMMUNICATIONS_START; else if (strcmp_P(in2,(PGM_P) F("stop")) == 0) return WII5COMMAND_COMMUNICATIONS_STOP; } // Bindata else if (strcmp_P(in1,(PGM_P) F("bindata")) == 0) { if (strcmp_P(in2,(PGM_P) F("list")) == 0) return WII5COMMAND_BINDATA_LIST; else if (strcmp_P(in2,(PGM_P) F("split")) == 0) return WII5COMMAND_BINDATA_SPLIT; } return WII5COMMAND_NONE; } WII5_MODES WII5Strings::parseMode(char *in) { if (strcmp_P(in,(PGM_P) F("boot")) == 0) return WII5MODE_BOOT; else if (strcmp_P(in,(PGM_P) F("start")) == 0) return WII5MODE_START; else if (strcmp_P(in,(PGM_P) F("demo")) == 0) return WII5MODE_DEMO; else if (strcmp_P(in,(PGM_P) F("lowbattery")) == 0) return WII5MODE_LOWBATTERY; else if (strcmp_P(in,(PGM_P) F("position")) == 0) return WII5MODE_POSITION; else if (strcmp_P(in,(PGM_P) F("capture")) == 0) return WII5MODE_CAPTURE; else if (strcmp_P(in,(PGM_P) F("sleep")) == 0) return WII5MODE_SLEEP; else if (strcmp_P(in,(PGM_P) F("manualtest")) == 0) return WII5MODE_MANUALTEST; else if (strcmp_P(in,(PGM_P) F("selftest")) == 0) return WII5MODE_SELFTEST; return WII5MODE_NONE; } WII5_SWITCH WII5Strings::parseSwitch(char *in) { if ( (strcmp_P(in,(PGM_P) F("on")) == 0) || (strcmp_P(in,(PGM_P) F("yes")) == 0) || (strcmp_P(in,(PGM_P) F("true")) == 0) ) { return WII5SWITCH_ON; } else if ( (strcmp_P(in,(PGM_P) F("off")) == 0) || (strcmp_P(in,(PGM_P) F("no")) == 0) || (strcmp_P(in,(PGM_P) F("false")) == 0) ) { return WII5SWITCH_OFF; } else if ( (strcmp_P(in,(PGM_P) F("toggle")) == 0) ) { return WII5SWITCH_TOGGLE; } return WII5SWITCH_NONE; } // TODO Deprecate? WII5GPS_MODES WII5Strings::parseGPSMode(char *in) { if ( (strcmp_P(in,(PGM_P) F("off")) == 0) ) return WII5GPS_OFF; else if ( (strcmp_P(in,(PGM_P) F("on")) == 0) ) return WII5GPS_ON; else if ( (strcmp_P(in,(PGM_P) F("time")) == 0) ) return WII5GPS_TIME; else if ( (strcmp_P(in,(PGM_P) F("pos")) == 0) ) return WII5GPS_POS; else if ( (strcmp_P(in,(PGM_P) F("accurate")) == 0) ) return WII5GPS_ACCURATE; else if ( (strcmp_P(in,(PGM_P) F("repeat")) == 0) ) return WII5GPS_REPEAT; return WII5GPS_UNKNOWN; } WII5_DEVICES WII5Strings::parseDevice(char *in) { if (strcmp_P(in,(PGM_P) F("wavebuoy")) == 0) return WII5DEVICE_WAVEBUOY; else if (strcmp_P(in,(PGM_P) F("maths")) == 0) return WII5DEVICE_MATHS; else if (strcmp_P(in,(PGM_P) F("controller")) == 0) return WII5DEVICE_CONTROLLER; else if (strcmp_P(in,(PGM_P) F("cli")) == 0) return WII5DEVICE_CLI; else if (strcmp_P(in,(PGM_P) F("server")) == 0) return WII5DEVICE_SERVER; return WII5DEVICE_UNKNOWN; } WII5_DRIVERS WII5Strings::parseDriver(char *in) { // TODO return WII5DRIVER_GPS; } WII5_PORTS WII5Strings::parsePort(char *in) { return WII5PORT_CONSOLE; } void WII5Strings::setBufferUnknown() { strcpy_P(wii5BufferString ,(PGM_P) F("unknown")); } char* WII5Strings::strCommand(WII5_COMMANDS c) { /* switch(d) { case WII5DEVICE_WAVEBUOY: strcpy_P(wii5BufferString ,(PGM_P) F("wavebuoy")); break; case WII5DEVICE_MATHS: strcpy_P(wii5BufferString ,(PGM_P) F("maths")); break; case WII5DEVICE_CONTROLLER: strcpy_P(wii5BufferString ,(PGM_P) F("controller")); break; case WII5DEVICE_CLI: strcpy_P(wii5BufferString ,(PGM_P) F("cli")); break; case WII5DEVICE_SERVER: strcpy_P(wii5BufferString ,(PGM_P) F("server")); break; default: setBufferUnknown(); break; }; */ setBufferUnknown(); return wii5BufferString; } char* WII5Strings::strDevice(WII5_DEVICES d) { switch(d) { case WII5DEVICE_WAVEBUOY: strcpy_P(wii5BufferString ,(PGM_P) F("wavebuoy")); break; case WII5DEVICE_MATHS: strcpy_P(wii5BufferString ,(PGM_P) F("maths")); break; case WII5DEVICE_CONTROLLER: strcpy_P(wii5BufferString ,(PGM_P) F("controller")); break; case WII5DEVICE_CLI: strcpy_P(wii5BufferString ,(PGM_P) F("cli")); break; case WII5DEVICE_SERVER: strcpy_P(wii5BufferString ,(PGM_P) F("server")); break; default: setBufferUnknown(); break; }; return wii5BufferString; } char* WII5Strings::strPort(WII5_PORTS p) { setBufferUnknown(); return wii5BufferString; } char* WII5Strings::strStatus(WII5_STATUS s) { switch(s) { case WII5STATUS_OFF: strcpy_P(wii5BufferString ,(PGM_P) F("off")); break; case WII5STATUS_ON: strcpy_P(wii5BufferString ,(PGM_P) F("on")); break; case WII5STATUS_ON_VALID: strcpy_P(wii5BufferString ,(PGM_P) F("valid")); break; case WII5STATUS_BUSY: strcpy_P(wii5BufferString ,(PGM_P) F("busy")); break; case WII5STATUS_WAITING: strcpy_P(wii5BufferString ,(PGM_P) F("waiting")); break; case WII5STATUS_ERROR: strcpy_P(wii5BufferString ,(PGM_P) F("error")); break; default: setBufferUnknown(); break; } return wii5BufferString; } char* WII5Strings::strError(WII5_ERRORS e) { switch(e) { case WII5ERROR_RETRY: strcpy_P(wii5BufferString ,(PGM_P) F("RETRY")); break; case WII5ERROR_INIT: strcpy_P(wii5BufferString ,(PGM_P) F("INIT")); break; case WII5ERROR_MEMORY: strcpy_P(wii5BufferString ,(PGM_P) F("MEMORY")); break; case WII5ERROR_TIMEOUT: strcpy_P(wii5BufferString ,(PGM_P) F("TIMEOUT")); break; case WII5ERROR_FATAL: strcpy_P(wii5BufferString ,(PGM_P) F("FATAL")); break; default: setBufferUnknown(); break; } return wii5BufferString; } char* WII5Strings::strSwitch(WII5_SWITCH s) { strcpy_P(wii5BufferString ,(PGM_P) F("UnknownSwitch")); return wii5BufferString; } // TODO instead of strDriver - and getting // the wii5BufferString set. Return the PROGMEM string // and then use a helper function toBuffer or similar to change. // As PROGMEM returns have use. char* WII5Strings::strDriver(WII5_DRIVERS d) { switch(d) { case WII5DRIVER_GPS: strcpy_P(wii5BufferString ,(PGM_P) F("GPS")); break; case WII5DRIVER_COMMS: strcpy_P(wii5BufferString ,(PGM_P) F("Comms")); break; case WII5DRIVER_COMMS_IRIDIUM: strcpy_P(wii5BufferString ,(PGM_P) F("CommsIridium")); break; case WII5DRIVER_MATHS: strcpy_P(wii5BufferString ,(PGM_P) F("Maths")); break; case WII5DRIVER_POWER: strcpy_P(wii5BufferString ,(PGM_P) F("Power")); break; case WII5DRIVER_MPU9250: strcpy_P(wii5BufferString ,(PGM_P) F("MPU9250")); break; case WII5DRIVER_SPARTON: strcpy_P(wii5BufferString ,(PGM_P) F("Sparton")); break; case WII5DRIVER_STORAGE: strcpy_P(wii5BufferString ,(PGM_P) F("Storage")); break; case WII5DRIVER_WEATHER_18B20: strcpy_P(wii5BufferString ,(PGM_P) F("Weather_18B20")); break; case WII5DRIVER_BATTERY: strcpy_P(wii5BufferString ,(PGM_P) F("Battery")); break; default: setBufferUnknown(); break; } return wii5BufferString; } // TODO DEPRECATE char* WII5Strings::strGPSMode(WII5GPS_MODES g) { switch(g) { case WII5GPS_OFF: strcpy_P(wii5BufferString ,(PGM_P) F("Off")); break; case WII5GPS_ON: strcpy_P(wii5BufferString ,(PGM_P) F("On")); break; case WII5GPS_TIME: strcpy_P(wii5BufferString ,(PGM_P) F("Time")); break; case WII5GPS_POS: strcpy_P(wii5BufferString ,(PGM_P) F("Pos")); break; case WII5GPS_ACCURATE: strcpy_P(wii5BufferString ,(PGM_P) F("Accurate")); break; case WII5GPS_REPEAT: strcpy_P(wii5BufferString ,(PGM_P) F("Repeat")); break; default: setBufferUnknown(); break; } return wii5BufferString; } char* WII5Strings::strMode(WII5_MODES g) { switch(g) { case WII5MODE_BOOT: strcpy_P(wii5BufferString, (PGM_P) F("boot")); break; case WII5MODE_START: strcpy_P(wii5BufferString, (PGM_P) F("start")); break; case WII5MODE_DEMO: strcpy_P(wii5BufferString, (PGM_P) F("demo")); break; case WII5MODE_SLEEP: strcpy_P(wii5BufferString, (PGM_P) F("sleep")); break; case WII5MODE_LOWBATTERY: strcpy_P(wii5BufferString, (PGM_P) F("lowbattery")); break; case WII5MODE_POSITION: strcpy_P(wii5BufferString, (PGM_P) F("position")); break; case WII5MODE_CAPTURE: strcpy_P(wii5BufferString, (PGM_P) F("capture")); break; case WII5MODE_MANUALTEST: strcpy_P(wii5BufferString, (PGM_P) F("manualtest")); break; case WII5MODE_SELFTEST: strcpy_P(wii5BufferString, (PGM_P) F("selftest")); break; default: setBufferUnknown(); break; } return wii5BufferString; } char* WII5Strings::strPinMode(uint8_t p) { if (p == INPUT) strcpy_P(wii5BufferString, (PGM_P) F("INPUT ")); else if (p == INPUT_PULLUP) strcpy_P(wii5BufferString, (PGM_P) F("INPUT_PULLUP")); else if (p == OUTPUT) strcpy_P(wii5BufferString, (PGM_P) F("OUTPUT ")); else strcpy_P(wii5BufferString ,(PGM_P) F("Unknown ")); return wii5BufferString; } char* WII5Strings::strState(uint8_t p) { if (p == HIGH) strcpy_P(wii5BufferString, (PGM_P) F("HIGH")); else if (p == LOW) strcpy_P(wii5BufferString, (PGM_P) F("low ")); else strcpy_P(wii5BufferString ,(PGM_P) F("????")); return wii5BufferString; } char* WII5Strings::strPinArduinoName(uint8_t p) { // Analopg Pin Number strcpy_P(wii5BufferString ,(PGM_P) F(" ")); if ((p >= A0) && (p < (A0 + NUM_ANALOG_INPUTS))) { uint8_t a = p - A0; if (a < 10) { wii5BufferString[0] = 'A'; wii5BufferString[1] = '0'; wii5BufferString[2] = '0' + a; } else { wii5BufferString[0] = 'A'; wii5BufferString[1] = '1'; wii5BufferString[2] = '0' + (a - 10); } return wii5BufferString; } switch(p) { // TODO Needs config - not hard coded case 0: strcpy_P(wii5BufferString ,(PGM_P) F("RX0 ")); break; case 1: strcpy_P(wii5BufferString ,(PGM_P) F("TX0 ")); break; case 14: strcpy_P(wii5BufferString ,(PGM_P) F("TX3 ")); break; case 15: strcpy_P(wii5BufferString ,(PGM_P) F("RX3 ")); break; /* case 16: strcpy_P(wii5BufferString ,(PGM_P) F("TX2 ")); break; case 17: strcpy_P(wii5BufferString ,(PGM_P) F("RX2 ")); break; */ case 18: strcpy_P(wii5BufferString ,(PGM_P) F("TX1 ")); break; case 19: strcpy_P(wii5BufferString ,(PGM_P) F("RX1 ")); break; case SS: strcpy_P(wii5BufferString ,(PGM_P) F("SS ")); break; case MOSI: strcpy_P(wii5BufferString ,(PGM_P) F("MOSI ")); break; case MISO: strcpy_P(wii5BufferString ,(PGM_P) F("MISO ")); break; case SCK: strcpy_P(wii5BufferString ,(PGM_P) F("SCK ")); break; case SDA: strcpy_P(wii5BufferString ,(PGM_P) F("SDA ")); break; case SCL: strcpy_P(wii5BufferString ,(PGM_P) F("SCL ")); break; } return wii5BufferString; } char* WII5Strings::strPinWII5Name(uint8_t p) { strcpy_P(wii5BufferString ,(PGM_P) F(" ")); switch(p) { #if LED_1>0 case LED_1: strcpy_P(wii5BufferString ,(PGM_P) F("LED1 ")); break; #endif #if LED_2>0 case LED_2: strcpy_P(wii5BufferString ,(PGM_P) F("LED2/Buzz ")); break; #endif #if LED_3>0 case LED_3: strcpy_P(wii5BufferString ,(PGM_P) F("LED3 ")); break; #endif #if LED_4>0 case LED_4: strcpy_P(wii5BufferString ,(PGM_P) F("LED4 ")); break; #endif #if BUTTON_1>0 case BUTTON_1: strcpy_P(wii5BufferString ,(PGM_P) F("BTN1 ")); break; #endif #if BUTTON_2>0 case BUTTON_2: strcpy_P(wii5BufferString ,(PGM_P) F("BTN2 ")); break; #endif #if BUTTON_3>0 case BUTTON_3: strcpy_P(wii5BufferString ,(PGM_P) F("BTN3 ")); break; #endif #if BUTTON_4>0 case BUTTON_4: strcpy_P(wii5BufferString ,(PGM_P) F("BTN4 ")); break; #endif #ifdef POWER_MATHS_PIN case POWER_MATHS_PIN: strcpy_P(wii5BufferString, (PGM_P) F("Pwr Maths ")); break; #endif case POWER_RADIO_PIN: strcpy_P(wii5BufferString, (PGM_P) F("Pwr Radio ")); break; case POWER_COMMS_PIN: strcpy_P(wii5BufferString, (PGM_P) F("Pwr Comms ")); break; case POWER_GPS_PIN: strcpy_P(wii5BufferString, (PGM_P) F("Pwr GPS ")); break; #ifdef POWER_STROBE1_PIN case POWER_STROBE1_PIN: strcpy_P(wii5BufferString, (PGM_P) F("Pwr Strob1")); break; #endif #ifdef POWER_STROBE1_PIN case POWER_STROBE2_PIN: strcpy_P(wii5BufferString, (PGM_P) F("Pwr Strob2")); break; #endif #ifdef POWER_IMU_MPU9250_PIN case POWER_IMU_MPU9250_PIN: strcpy_P(wii5BufferString, (PGM_P) F("Pwr 9250 ")); break; #endif #ifdef POWER_IMU_SERIAL_PIN case POWER_IMU_SERIAL_PIN: strcpy_P(wii5BufferString, (PGM_P) F("Pwr Spartn")); break; #endif case WEATHER_18B20_DATA: strcpy_P(wii5BufferString, (PGM_P) F("Data 18B20")); break; case POWER_WEATHER_18B20_PIN: strcpy_P(wii5BufferString, (PGM_P) F("Pwr 18B20 ")); break; case POWER_WEATHER_PIN: strcpy_P(wii5BufferString, (PGM_P) F("Pwr Weathr")); break; case BATTERY_1_VOLTS_PIN: strcpy_P(wii5BufferString, (PGM_P) F("Bat1 Meas ")); break; #if POWER_SUBBOARD_1_PIN>0 case POWER_SUBBOARD_1_PIN: strcpy_P(wii5BufferString, (PGM_P) F("Pwr Sub1 ")); break; #endif #if POWER_SUBBOARD_1_PIN>0 case POWER_SUBBOARD_2_PIN: strcpy_P(wii5BufferString, (PGM_P) F("Pwr Sub2 ")); break; #endif #if POWER_STORAGE_1_PIN>0 case POWER_STORAGE_1_PIN: strcpy_P(wii5BufferString, (PGM_P) F("Pwr SD 1 ")); break; #endif #if POWER_STORAGE_2_PIN>0 case POWER_STORAGE_2_PIN: strcpy_P(wii5BufferString, (PGM_P) F("Pwr SD 2 ")); break; #endif #ifdef STORAGE_SD1_MATHS_PIN case STORAGE_SD1_MATHS_PIN: strcpy_P(wii5BufferString, (PGM_P) F("SEL SD 1 ")); break; #endif #ifdef STORAGE_SD2_MATHS_PIN 57 case STORAGE_SD2_MATHS_PIN: strcpy_P(wii5BufferString, (PGM_P) F("SEL SD 2 ")); break; #endif #ifdef SHARED_5VOLT_PIN case SHARED_5VOLT_PIN: strcpy_P(wii5BufferString, (PGM_P) F("Shrd 5Volt")); break; #endif } return wii5BufferString; } char* WII5Strings::strSelfTestDevice(WII5SELFTEST_DEVICES in) { switch(in) { case WII5STD_BOARD: strcpy_P(wii5BufferString, (PGM_P) F("Board")); break; case WII5STD_GPS: strcpy_P(wii5BufferString, (PGM_P) F("GPS")); break; case WII5STD_EEPROM: strcpy_P(wii5BufferString, (PGM_P) F("EEPROM")); break; case WII5STD_SD1: strcpy_P(wii5BufferString, (PGM_P) F("SD1")); break; case WII5STD_SD2: strcpy_P(wii5BufferString, (PGM_P) F("SD2")); break; case WII5STD_IRIDIUM: strcpy_P(wii5BufferString, (PGM_P) F("Iridium")); break; case WII5STD_BATTERY: strcpy_P(wii5BufferString, (PGM_P) F("Battery")); break; case WII5STD_MATHS: strcpy_P(wii5BufferString, (PGM_P) F("Maths")); break; case WII5STD_RTC: strcpy_P(wii5BufferString, (PGM_P) F("RTC")); break; case WII5STD_SPARTON: strcpy_P(wii5BufferString, (PGM_P) F("Sparton")); break; case WII5STD_18B20: strcpy_P(wii5BufferString, (PGM_P) F("18B20")); break; case WII5STD_BUTTON: strcpy_P(wii5BufferString, (PGM_P) F("Button")); break; case WII5STD_LED: strcpy_P(wii5BufferString, (PGM_P) F("LED")); break; case WII5STD_BUZZER: strcpy_P(wii5BufferString, (PGM_P) F("Buzzer")); break; case WII5STD_5VOLT: strcpy_P(wii5BufferString, (PGM_P) F("5Volts")); break; // TODO LED, Button, Buzzer, TEmperature sensor default: setBufferUnknown(); break; } return wii5BufferString; }; char* WII5Strings::strSelfTestStatus(WII5SELFTEST_STATUS in) { switch(in) { case WII5STS_NONE: strcpy_P(wii5BufferString, (PGM_P) F("NONE")); break; // , // Never run case WII5STS_NC: strcpy_P(wii5BufferString, (PGM_P) F("NC")); break; // , // Not connected, not enabled, or not applicable case WII5STS_SUCCESS: strcpy_P(wii5BufferString, (PGM_P) F("Success")); break; // , // SUCCCESS - literally nothing to report case WII5STS_HUMAN: strcpy_P(wii5BufferString, (PGM_P) F("Human")); break; // , // HUMAN - we assume success, but need a human to confirm case WII5STS_SLOW: strcpy_P(wii5BufferString, (PGM_P) F("Slow")); break; // , // SLOW - SUCCESS in all ways, but slower than expected. Good for SD, Maths boot, GPS lock etc case WII5STS_POWER: strcpy_P(wii5BufferString, (PGM_P) F("Power")); break; // , // Works, but power management may have failed (e.g. serial data still coming in when power off) case WII5STS_TIMEOUT: strcpy_P(wii5BufferString, (PGM_P) F("Timeout")); break; // , // Literally timed out. No failure we can actually understand. case WII5STS_OUTOFRANGE: strcpy_P(wii5BufferString, (PGM_P) F("OutOfRange")); break; // , // Out of range - voltage, or GPS or something out of range case WII5STS_UNKNOWN: strcpy_P(wii5BufferString, (PGM_P) F("Unknown")); break; // , // Some sort of bad, unknown error default: setBufferUnknown(); break; } return wii5BufferString; }; char* WII5Strings::strSelfTestStatusLong(WII5SELFTEST_STATUS in) { switch(in) { case WII5STS_NONE: strcpy_P(wii5BufferString, (PGM_P) F("Never been run")); break; // , // Never run case WII5STS_NC: strcpy_P(wii5BufferString, (PGM_P) F("Not connected or enabled")); break; // , // Not connected, not enabled, or not applicable case WII5STS_SUCCESS: strcpy_P(wii5BufferString, (PGM_P) F("Nothing wrong. Fantastic!")); break; // , // SUCCCESS - literally nothing to report case WII5STS_HUMAN: strcpy_P(wii5BufferString, (PGM_P) F("Human needed to see results - e.g. did the LED or buzzer go off")); break; // , // HUMAN - we assume success, but need a human to confirm case WII5STS_SLOW: strcpy_P(wii5BufferString, (PGM_P) F("Success but slow - e.g. long time to load SD or slow gps lock")); break; // , // SLOW - SUCCESS in all ways, but slower than expected. Good for SD, Maths boot, GPS lock etc case WII5STS_POWER: strcpy_P(wii5BufferString, (PGM_P) F("Power management issue. E.g. serial data still coming in after power pin off")); break; // , // Works, but power management may have failed (e.g. serial data still coming in when power off) case WII5STS_TIMEOUT: strcpy_P(wii5BufferString, (PGM_P) F("Timeout no idea why...")); break; // , // Literally timed out. No failure we can actually understand. case WII5STS_OUTOFRANGE: strcpy_P(wii5BufferString, (PGM_P) F("Out of range, e.g. volts or temperature")); break; // , // Out of range - voltage, or GPS or something out of range case WII5STS_UNKNOWN: strcpy_P(wii5BufferString, (PGM_P) F("Unknown error")); break; // , // Bad, unknown error default: setBufferUnknown(); break; } return wii5BufferString; }; WII5Strings wii5Strings;