Internal_Datalogger but with USB support removed (for MAX40108 Demo board), proof of concept that MAX32625 can be used successfully with VDDB(USB) left unpowered, as long as the USB library is not used.

Dependencies:   max32625pico CmdLine

Committer:
whismanoid
Date:
Wed Nov 10 01:40:29 2021 -0800
Revision:
52:bb09c0f452ec
Parent:
51:a41d3fd5e441
Child:
53:fdb510e3eb37
%A cl0n= cl0v= ch0n= ch0v= -- unambiguous low and high cal points alternative to cal0n= cal0v= cal0n= cal0v= #354
%F save=0x72 (even) save incremental: append only changed values #353

Who changed what in which revision?

UserRevisionLine numberNew contents of line
whismanoid 0:cb44e2e9ec4c 1 // /*******************************************************************************
whismanoid 28:a9a3a9db592b 2 // * Copyright (C) 2021 Maxim Integrated Products, Inc., All Rights Reserved.
whismanoid 0:cb44e2e9ec4c 3 // *
whismanoid 0:cb44e2e9ec4c 4 // * Permission is hereby granted, free of charge, to any person obtaining a
whismanoid 0:cb44e2e9ec4c 5 // * copy of this software and associated documentation files (the "Software"),
whismanoid 0:cb44e2e9ec4c 6 // * to deal in the Software without restriction, including without limitation
whismanoid 0:cb44e2e9ec4c 7 // * the rights to use, copy, modify, merge, publish, distribute, sublicense,
whismanoid 0:cb44e2e9ec4c 8 // * and/or sell copies of the Software, and to permit persons to whom the
whismanoid 0:cb44e2e9ec4c 9 // * Software is furnished to do so, subject to the following conditions:
whismanoid 0:cb44e2e9ec4c 10 // *
whismanoid 0:cb44e2e9ec4c 11 // * The above copyright notice and this permission notice shall be included
whismanoid 0:cb44e2e9ec4c 12 // * in all copies or substantial portions of the Software.
whismanoid 0:cb44e2e9ec4c 13 // *
whismanoid 0:cb44e2e9ec4c 14 // * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
whismanoid 0:cb44e2e9ec4c 15 // * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
whismanoid 0:cb44e2e9ec4c 16 // * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
whismanoid 0:cb44e2e9ec4c 17 // * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
whismanoid 0:cb44e2e9ec4c 18 // * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
whismanoid 0:cb44e2e9ec4c 19 // * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
whismanoid 0:cb44e2e9ec4c 20 // * OTHER DEALINGS IN THE SOFTWARE.
whismanoid 0:cb44e2e9ec4c 21 // *
whismanoid 0:cb44e2e9ec4c 22 // * Except as contained in this notice, the name of Maxim Integrated
whismanoid 0:cb44e2e9ec4c 23 // * Products, Inc. shall not be used except as stated in the Maxim Integrated
whismanoid 0:cb44e2e9ec4c 24 // * Products, Inc. Branding Policy.
whismanoid 0:cb44e2e9ec4c 25 // *
whismanoid 0:cb44e2e9ec4c 26 // * The mere transfer of this software does not imply any licenses
whismanoid 0:cb44e2e9ec4c 27 // * of trade secrets, proprietary technology, copyrights, patents,
whismanoid 0:cb44e2e9ec4c 28 // * trademarks, maskwork rights, or any other form of intellectual
whismanoid 0:cb44e2e9ec4c 29 // * property whatsoever. Maxim Integrated Products, Inc. retains all
whismanoid 0:cb44e2e9ec4c 30 // * ownership rights.
whismanoid 0:cb44e2e9ec4c 31 // *******************************************************************************
whismanoid 0:cb44e2e9ec4c 32 // */
whismanoid 0:cb44e2e9ec4c 33 // *******************************************************************************
whismanoid 0:cb44e2e9ec4c 34 // COM port settings are 9600 baud 8N1
whismanoid 0:cb44e2e9ec4c 35 // *******************************************************************************
whismanoid 19:5ff09c8e9daf 36 // Support custom target MAX40108DEMOP2U9 based on MAX32625PICO but MAX32625_NO_BOOT
whismanoid 19:5ff09c8e9daf 37 // file custom_targets.json:
whismanoid 19:5ff09c8e9daf 38 // {
whismanoid 19:5ff09c8e9daf 39 // "MAX40108DEMOP2U9": {
whismanoid 19:5ff09c8e9daf 40 // "inherits": ["MAX32625_BASE"],
whismanoid 19:5ff09c8e9daf 41 // "macros_remove": [],
whismanoid 19:5ff09c8e9daf 42 // "macros_add": ["MAX32625_NO_BOOT"]
whismanoid 19:5ff09c8e9daf 43 // }
whismanoid 19:5ff09c8e9daf 44 // }
whismanoid 19:5ff09c8e9daf 45 // files copied from mbed-os\targets\TARGET_Maxim\TARGET_MAX32625\TARGET_MAX32625PICO
whismanoid 19:5ff09c8e9daf 46 // file TARGET_MAX40108DEMOP2U9\PeripheralNames.h -- copied from TARGET_MAX32625PICO
whismanoid 19:5ff09c8e9daf 47 // file TARGET_MAX40108DEMOP2U9\PinNames.h -- copied from TARGET_MAX32625PICO
whismanoid 19:5ff09c8e9daf 48 // files copied from mbed-os\targets\TARGET_Maxim\TARGET_MAX32625\device\___\TARGET_MAX32625_NO_BOOT
whismanoid 19:5ff09c8e9daf 49 // file TARGET_MAX40108DEMOP2U9\device\TOOLCHAIN_ARM_STD\MAX32625.sct
whismanoid 19:5ff09c8e9daf 50 // file TARGET_MAX40108DEMOP2U9\device\TOOLCHAIN_GCC_ARM\max32625.ld
whismanoid 19:5ff09c8e9daf 51 // file TARGET_MAX40108DEMOP2U9\device\TOOLCHAIN_IAR\MAX32625.icf
whismanoid 19:5ff09c8e9daf 52 // file mbed_app.json:
whismanoid 19:5ff09c8e9daf 53 // {
whismanoid 19:5ff09c8e9daf 54 // "config": {
whismanoid 19:5ff09c8e9daf 55 // },
whismanoid 19:5ff09c8e9daf 56 // "macros": [
whismanoid 19:5ff09c8e9daf 57 // "MAX40108_DEMO=9"
whismanoid 19:5ff09c8e9daf 58 // ],
whismanoid 19:5ff09c8e9daf 59 // "target_overrides": {
whismanoid 19:5ff09c8e9daf 60 // }
whismanoid 19:5ff09c8e9daf 61 // }
whismanoid 19:5ff09c8e9daf 62 // *******************************************************************************
whismanoid 19:5ff09c8e9daf 63 // Validating project global defines from mbed_app.json "macros": []
whismanoid 19:5ff09c8e9daf 64 #ifndef MAX40108_DEMO
whismanoid 19:5ff09c8e9daf 65 #warning "MAX40108_DEMO not defined, missing mbed_app.json"
whismanoid 19:5ff09c8e9daf 66 #else // #ifndef MAX40108_DEMO
whismanoid 19:5ff09c8e9daf 67 #warning "Note: MAX40108_DEMO is defined, which is expected"
whismanoid 19:5ff09c8e9daf 68 #if (MAX40108_DEMO)==(9)
whismanoid 19:5ff09c8e9daf 69 #warning "Note: MAX40108_DEMO is defined with the expected value of 9"
whismanoid 19:5ff09c8e9daf 70 #elif (MAX40108_DEMO)==(5)
whismanoid 19:5ff09c8e9daf 71 #warning "Note: MAX40108_DEMO is defined with the wrong value 5"
whismanoid 19:5ff09c8e9daf 72 #else
whismanoid 19:5ff09c8e9daf 73 #warning "Note: MAX40108_DEMO is defined, but with an unsupported value"
whismanoid 19:5ff09c8e9daf 74 #endif
whismanoid 19:5ff09c8e9daf 75 #endif // #ifndef MAX40108_DEMO
whismanoid 19:5ff09c8e9daf 76 // *******************************************************************************
whismanoid 14:d4092094dbfe 77 #ifndef MAX40108_DEMO
whismanoid 17:9397ea3ea7e9 78 // #define MAX40108_DEMO 5 for U5, or #define MAX40108_DEMO 9 for U9 in banner
whismanoid 17:9397ea3ea7e9 79 #define MAX40108_DEMO 9
whismanoid 15:37c83ec50ea0 80 #define HAS_DAPLINK_SERIAL 1
whismanoid 14:d4092094dbfe 81 #endif // MAX40108_DEMO
whismanoid 42:89607d5d4e6d 82
whismanoid 42:89607d5d4e6d 83 // data unique to certain boards based on serial number
whismanoid 42:89607d5d4e6d 84 #include "Board_Calibration_Data.h"
whismanoid 42:89607d5d4e6d 85
whismanoid 36:e7aac874b8be 86 #ifdef BOARD_SERIAL_NUMBER
whismanoid 47:f1a56afb4aca 87 uint32_t g_board_serial_number = 0xFFFFFFFF; // BOARD_SERIAL_NUMBER;
whismanoid 36:e7aac874b8be 88 // data unique to certain boards based on serial number
whismanoid 36:e7aac874b8be 89 # if (BOARD_SERIAL_NUMBER) == 0
whismanoid 36:e7aac874b8be 90 #warning "(BOARD_SERIAL_NUMBER) == 0"
whismanoid 36:e7aac874b8be 91 //
whismanoid 36:e7aac874b8be 92 # elif (BOARD_SERIAL_NUMBER) == 1
whismanoid 36:e7aac874b8be 93 #warning "(BOARD_SERIAL_NUMBER) == 1"
whismanoid 36:e7aac874b8be 94 //
whismanoid 36:e7aac874b8be 95 # elif (BOARD_SERIAL_NUMBER) == 2
whismanoid 36:e7aac874b8be 96 #warning "(BOARD_SERIAL_NUMBER) == 2"
whismanoid 36:e7aac874b8be 97 //
whismanoid 36:e7aac874b8be 98 # elif (BOARD_SERIAL_NUMBER) == 3
whismanoid 36:e7aac874b8be 99 #warning "(BOARD_SERIAL_NUMBER) == 3"
whismanoid 36:e7aac874b8be 100 //
whismanoid 36:e7aac874b8be 101 # elif (BOARD_SERIAL_NUMBER) == 4
whismanoid 36:e7aac874b8be 102 #warning "(BOARD_SERIAL_NUMBER) == 4"
whismanoid 36:e7aac874b8be 103 //
whismanoid 36:e7aac874b8be 104 # elif (BOARD_SERIAL_NUMBER) == 5
whismanoid 36:e7aac874b8be 105 #warning "(BOARD_SERIAL_NUMBER) == 5"
whismanoid 36:e7aac874b8be 106 //
whismanoid 36:e7aac874b8be 107 # elif (BOARD_SERIAL_NUMBER) == 6
whismanoid 36:e7aac874b8be 108 #warning "(BOARD_SERIAL_NUMBER) == 6"
whismanoid 36:e7aac874b8be 109 //
whismanoid 36:e7aac874b8be 110 # else
whismanoid 36:e7aac874b8be 111 #warning "BOARD_SERIAL_NUMBER defined but not recognized"
whismanoid 36:e7aac874b8be 112 # endif
whismanoid 36:e7aac874b8be 113 #else // BOARD_SERIAL_NUMBER data unique to certain boards based on serial number
whismanoid 36:e7aac874b8be 114 #warning "BOARD_SERIAL_NUMBER not defined; using default values"
whismanoid 47:f1a56afb4aca 115 uint32_t g_board_serial_number = 0xFFFFFFFF;
whismanoid 36:e7aac874b8be 116 //
whismanoid 36:e7aac874b8be 117 #endif // BOARD_SERIAL_NUMBER data unique to certain boards based on serial number
whismanoid 0:cb44e2e9ec4c 118 //---------- CODE GENERATOR: DataLogHelloCppCodeList
whismanoid 0:cb44e2e9ec4c 119 // CODE GENERATOR: example code includes
whismanoid 0:cb44e2e9ec4c 120
whismanoid 0:cb44e2e9ec4c 121 // example code includes
whismanoid 0:cb44e2e9ec4c 122 // standard include for target platform -- Platform_Include_Boilerplate
whismanoid 0:cb44e2e9ec4c 123 #include "mbed.h"
whismanoid 0:cb44e2e9ec4c 124 // Platforms:
whismanoid 0:cb44e2e9ec4c 125 // - MAX32625MBED
whismanoid 0:cb44e2e9ec4c 126 // - supports mbed-os-5.11, requires USBDevice library
whismanoid 0:cb44e2e9ec4c 127 // - add https://developer.mbed.org/teams/MaximIntegrated/code/USBDevice/
whismanoid 0:cb44e2e9ec4c 128 // - remove max32630fthr library (if present)
whismanoid 0:cb44e2e9ec4c 129 // - remove MAX32620FTHR library (if present)
whismanoid 0:cb44e2e9ec4c 130 // - MAX32600MBED
whismanoid 7:949ec8581f5e 131 // - Please note the last supported version is Mbed OS 6.3.
whismanoid 0:cb44e2e9ec4c 132 // - remove max32630fthr library (if present)
whismanoid 0:cb44e2e9ec4c 133 // - remove MAX32620FTHR library (if present)
whismanoid 0:cb44e2e9ec4c 134 // - Windows 10 note: Don't connect HDK until you are ready to load new firmware into the board.
whismanoid 0:cb44e2e9ec4c 135 // - NUCLEO_F446RE
whismanoid 0:cb44e2e9ec4c 136 // - remove USBDevice library
whismanoid 0:cb44e2e9ec4c 137 // - remove max32630fthr library (if present)
whismanoid 0:cb44e2e9ec4c 138 // - remove MAX32620FTHR library (if present)
whismanoid 0:cb44e2e9ec4c 139 // - NUCLEO_F401RE
whismanoid 0:cb44e2e9ec4c 140 // - remove USBDevice library
whismanoid 0:cb44e2e9ec4c 141 // - remove max32630fthr library (if present)
whismanoid 0:cb44e2e9ec4c 142 // - remove MAX32620FTHR library (if present)
whismanoid 0:cb44e2e9ec4c 143 // - MAX32630FTHR
whismanoid 0:cb44e2e9ec4c 144 // - #include "max32630fthr.h"
whismanoid 7:949ec8581f5e 145 // - add http://developer.mbed.org/teams/MaximIntegrated/code/max32630fthr/
whismanoid 0:cb44e2e9ec4c 146 // - remove MAX32620FTHR library (if present)
whismanoid 0:cb44e2e9ec4c 147 // - MAX32620FTHR
whismanoid 0:cb44e2e9ec4c 148 // - #include "MAX32620FTHR.h"
whismanoid 0:cb44e2e9ec4c 149 // - remove max32630fthr library (if present)
whismanoid 0:cb44e2e9ec4c 150 // - add https://os.mbed.com/teams/MaximIntegrated/code/MAX32620FTHR/
whismanoid 0:cb44e2e9ec4c 151 // - not tested yet
whismanoid 0:cb44e2e9ec4c 152 // - MAX32625PICO
whismanoid 0:cb44e2e9ec4c 153 // - #include "max32625pico.h"
whismanoid 0:cb44e2e9ec4c 154 // - add https://os.mbed.com/users/switches/code/max32625pico/
whismanoid 0:cb44e2e9ec4c 155 // - remove max32630fthr library (if present)
whismanoid 0:cb44e2e9ec4c 156 // - remove MAX32620FTHR library (if present)
whismanoid 0:cb44e2e9ec4c 157 // - not tested yet
whismanoid 0:cb44e2e9ec4c 158 // - see https://os.mbed.com/users/switches/code/max32625pico/
whismanoid 0:cb44e2e9ec4c 159 // - see https://os.mbed.com/users/switches/code/PICO_board_demo/
whismanoid 0:cb44e2e9ec4c 160 // - see https://os.mbed.com/users/switches/code/PICO_USB_I2C_SPI/
whismanoid 0:cb44e2e9ec4c 161 // - see https://os.mbed.com/users/switches/code/SerialInterface/
whismanoid 0:cb44e2e9ec4c 162 // - Note: To load the MAX32625PICO firmware, hold the button while
whismanoid 0:cb44e2e9ec4c 163 // connecting the USB cable, then copy firmware bin file
whismanoid 0:cb44e2e9ec4c 164 // to the MAINTENANCE drive.
whismanoid 0:cb44e2e9ec4c 165 // - see https://os.mbed.com/platforms/MAX32625PICO/
whismanoid 0:cb44e2e9ec4c 166 // - see https://os.mbed.com/teams/MaximIntegrated/wiki/MAX32625PICO-Firmware-Updates
whismanoid 41:13a6a097502c 167 // - update from mbed-os-5.11.5 to mbed-os-5.15 to support deep sleep
whismanoid 41:13a6a097502c 168 // - cd mbed-os ; mbed update mbed-os-5.15.7 ; cd .. ; mbed remove USBDevice ; mbed sync
whismanoid 41:13a6a097502c 169 // - (Internal_DataLogger_NoUSB_MAX32625PICO does not use USBDevice library anyway)
whismanoid 0:cb44e2e9ec4c 170 //
whismanoid 0:cb44e2e9ec4c 171 // end Platform_Include_Boilerplate
whismanoid 0:cb44e2e9ec4c 172
whismanoid 0:cb44e2e9ec4c 173 //--------------------------------------------------
whismanoid 46:469d0061df5d 174 // MAX32625 flash peek/poke support (MAX40108 demo) #312
whismanoid 46:469d0061df5d 175 #ifndef HAS_FLASH_PEEK
whismanoid 46:469d0061df5d 176 #define HAS_FLASH_PEEK 1
whismanoid 46:469d0061df5d 177 // #undef HAS_FLASH_PEEK
whismanoid 46:469d0061df5d 178 #endif
whismanoid 46:469d0061df5d 179 #ifndef HAS_FLASH_POKE
whismanoid 46:469d0061df5d 180 #define HAS_FLASH_POKE 0
whismanoid 46:469d0061df5d 181 // #undef HAS_FLASH_POKE
whismanoid 46:469d0061df5d 182 #endif
whismanoid 46:469d0061df5d 183 //--------------------------------------------------
whismanoid 46:469d0061df5d 184 // mbed interface to on-chip Flash
whismanoid 46:469d0061df5d 185 //--------------------------------------------------
whismanoid 46:469d0061df5d 186 #if defined(HAS_FLASH_PEEK) || defined(HAS_FLASH_POKE)
whismanoid 46:469d0061df5d 187 #if HAS_FLASH_PEEK
whismanoid 46:469d0061df5d 188 #warning "info: using HAS_FLASH_PEEK supporting %F peek=addr len=..."
whismanoid 46:469d0061df5d 189 #endif
whismanoid 46:469d0061df5d 190 #if HAS_FLASH_POKE
whismanoid 46:469d0061df5d 191 #warning "info: using HAS_FLASH_POKE supporting %F poke=addr data... "
whismanoid 46:469d0061df5d 192 #endif
whismanoid 46:469d0061df5d 193 #if HAS_FLASH_LOAD_SAVE
whismanoid 46:469d0061df5d 194 #warning "info: using HAS_FLASH_LOAD_SAVE supporting %F save... and %F load... "
whismanoid 46:469d0061df5d 195 #endif
whismanoid 46:469d0061df5d 196 // Maxim MAX32625 flash interface flc.h not .\mbed-os\drivers\FlashIAP.h
whismanoid 46:469d0061df5d 197 // .\mbed-os\targets\TARGET_Maxim\TARGET_MAX32625\mxc\flc.h
whismanoid 46:469d0061df5d 198 // .\mbed-os\targets\TARGET_Maxim\TARGET_MAX32625\mxc\flc.c
whismanoid 46:469d0061df5d 199 // int FLC_Init(void);
whismanoid 46:469d0061df5d 200 // int FLC_PageErase(uint32_t address, uint8_t erase_code, uint8_t unlock_key);
whismanoid 46:469d0061df5d 201 // int FLC_Write(uint32_t address, const void *data, uint32_t length, uint8_t unlock_key);
whismanoid 46:469d0061df5d 202 // example see CommunicationHandler Interpreter.cpp
whismanoid 46:469d0061df5d 203 // https://os.mbed.com/users/MuratAslan/code/CommunicationHandler/
whismanoid 46:469d0061df5d 204 #include "flc.h"
whismanoid 46:469d0061df5d 205 //
whismanoid 46:469d0061df5d 206 // Other targets like STM use FlashIAP interface
whismanoid 46:469d0061df5d 207 // #if !DEVICE_FLASH
whismanoid 46:469d0061df5d 208 // #error [NOT_SUPPORTED] Flash API not supported for this target
whismanoid 46:469d0061df5d 209 // #else
whismanoid 46:469d0061df5d 210 // #warning "DEVICE_FLASH is defined, so FlashIAP Flash API is // supported for this target"
whismanoid 46:469d0061df5d 211 // #endif
whismanoid 46:469d0061df5d 212 // .\mbed-os\drivers\FlashIAP.h
whismanoid 46:469d0061df5d 213 // #warning "using FlashIAP.h"
whismanoid 46:469d0061df5d 214 // #include <FlashIAP.h>
whismanoid 46:469d0061df5d 215 // mbed interface to on-chip Flash
whismanoid 46:469d0061df5d 216 // FlashIAP flash;
whismanoid 46:469d0061df5d 217 // error: 'FlashIAP' does not name a type
whismanoid 46:469d0061df5d 218 //--------------------------------------------------
whismanoid 51:a41d3fd5e441 219 // MAX40108 calibration values assign absolute address
whismanoid 51:a41d3fd5e441 220 // Note this data is little-endian, least significant byte first
whismanoid 47:f1a56afb4aca 221 const char flash_page_configuration_back_up[8192] __attribute__((aligned(8192))) = {
whismanoid 47:f1a56afb4aca 222 // 0x04000053, 0xffffffff, 0xffffffff, 0xffffffff, // g_board_serial_number is blank 0xFFFFFFFF
whismanoid 51:a41d3fd5e441 223 // 3, ___2, ___1, ___0, ___7, ___6, ___5, ___4, ___b, ___a, ___9, ___8, ___f, ___e, ___d, ___c,
whismanoid 50:f42de27fc652 224 0x53, 0x00, 0x00, 0x04, 0xe9, 0xf1, 0xd3, 0x7d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // 0x04000053 g_board_serial_number is blank 0xFFFFFFFF
whismanoid 50:f42de27fc652 225 0x53, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x40, 0xa6, 0x0a, 0xec, 0x3f, 0xff, 0xff, 0xff, 0xff, // 0x08001053 calibration_05_V[0]
whismanoid 50:f42de27fc652 226 0x53, 0x11, 0x00, 0x08, 0x00, 0x00, 0x00, 0x40, 0xa6, 0x0a, 0xec, 0x3f, 0xff, 0xff, 0xff, 0xff, // 0x08001153 calibration_05_V[1]
whismanoid 50:f42de27fc652 227 0x53, 0x12, 0x00, 0x08, 0x00, 0x00, 0x00, 0x40, 0xa6, 0x0a, 0xec, 0x3f, 0xff, 0xff, 0xff, 0xff, // 0x08001253 calibration_05_V[2]
whismanoid 50:f42de27fc652 228 0x53, 0x13, 0x00, 0x08, 0x00, 0x00, 0x00, 0x40, 0xa6, 0x0a, 0xec, 0x3f, 0xff, 0xff, 0xff, 0xff, // 0x08001353 calibration_05_V[3]
whismanoid 50:f42de27fc652 229 0x53, 0x14, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0xf7, 0x75, 0xf1, 0x3f, 0xff, 0xff, 0xff, 0xff, // 0x08001453 calibration_05_V[4]
whismanoid 50:f42de27fc652 230 0x53, 0x15, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0xf7, 0x75, 0xf1, 0x3f, 0xff, 0xff, 0xff, 0xff, // 0x08001553 calibration_05_V[5]
whismanoid 50:f42de27fc652 231 0x53, 0x20, 0x00, 0x08, 0x00, 0x00, 0x00, 0x58, 0x3a, 0x69, 0xe7, 0x3f, 0xff, 0xff, 0xff, 0xff, // 0x08002053 calibration_05_normValue_0_1[0]
whismanoid 50:f42de27fc652 232 0x53, 0x21, 0x00, 0x08, 0x00, 0x00, 0x00, 0x58, 0x3a, 0x69, 0xe7, 0x3f, 0xff, 0xff, 0xff, 0xff, // 0x08002153 calibration_05_normValue_0_1[1]
whismanoid 50:f42de27fc652 233 0x53, 0x22, 0x00, 0x08, 0x00, 0x00, 0x00, 0x58, 0x3a, 0x69, 0xe7, 0x3f, 0xff, 0xff, 0xff, 0xff, // 0x08002253 calibration_05_normValue_0_1[2]
whismanoid 50:f42de27fc652 234 0x53, 0x23, 0x00, 0x08, 0x00, 0x00, 0x00, 0x58, 0x3a, 0x69, 0xe7, 0x3f, 0xff, 0xff, 0xff, 0xff, // 0x08002353 calibration_05_normValue_0_1[3]
whismanoid 50:f42de27fc652 235 0x53, 0x24, 0x00, 0x08, 0x00, 0x00, 0x00, 0xb0, 0xa3, 0x8e, 0xc7, 0x3f, 0xff, 0xff, 0xff, 0xff, // 0x08002453 calibration_05_normValue_0_1[4]
whismanoid 50:f42de27fc652 236 0x53, 0x25, 0x00, 0x08, 0x00, 0x00, 0x00, 0xb0, 0xa3, 0x8e, 0xc7, 0x3f, 0xff, 0xff, 0xff, 0xff, // 0x08002553 calibration_05_normValue_0_1[5]
whismanoid 50:f42de27fc652 237 0x53, 0x30, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0xf7, 0x75, 0xf1, 0x3f, 0xff, 0xff, 0xff, 0xff, // 0x08003053 calibration_95_V[0]
whismanoid 50:f42de27fc652 238 0x53, 0x31, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0xf7, 0x75, 0xf1, 0x3f, 0xff, 0xff, 0xff, 0xff, // 0x08003153 calibration_95_V[1]
whismanoid 50:f42de27fc652 239 0x53, 0x32, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0xf7, 0x75, 0xf1, 0x3f, 0xff, 0xff, 0xff, 0xff, // 0x08003253 calibration_95_V[2]
whismanoid 50:f42de27fc652 240 0x53, 0x33, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0xf7, 0x75, 0xf1, 0x3f, 0xff, 0xff, 0xff, 0xff, // 0x08003353 calibration_95_V[3]
whismanoid 50:f42de27fc652 241 0x53, 0x34, 0x00, 0x08, 0x00, 0x00, 0x00, 0x40, 0x33, 0x33, 0xfa, 0x3f, 0xff, 0xff, 0xff, 0xff, // 0x08003453 calibration_95_V[4]
whismanoid 50:f42de27fc652 242 0x53, 0x35, 0x00, 0x08, 0x00, 0x00, 0x00, 0x40, 0x33, 0x33, 0xfa, 0x3f, 0xff, 0xff, 0xff, 0xff, // 0x08003553 calibration_95_V[5]
whismanoid 50:f42de27fc652 243 0x53, 0x40, 0x00, 0x08, 0x00, 0x00, 0xe0, 0xbb, 0xc8, 0x22, 0xed, 0x3f, 0xff, 0xff, 0xff, 0xff, // 0x08004053 calibration_95_normValue_0_1[0]
whismanoid 50:f42de27fc652 244 0x53, 0x41, 0x00, 0x08, 0x00, 0x00, 0xe0, 0xbb, 0xc8, 0x22, 0xed, 0x3f, 0xff, 0xff, 0xff, 0xff, // 0x08004153 calibration_95_normValue_0_1[1]
whismanoid 50:f42de27fc652 245 0x53, 0x42, 0x00, 0x08, 0x00, 0x00, 0xe0, 0xbb, 0xc8, 0x22, 0xed, 0x3f, 0xff, 0xff, 0xff, 0xff, // 0x08004253 calibration_95_normValue_0_1[2]
whismanoid 50:f42de27fc652 246 0x53, 0x43, 0x00, 0x08, 0x00, 0x00, 0xe0, 0xbb, 0xc8, 0x22, 0xed, 0x3f, 0xff, 0xff, 0xff, 0xff, // 0x08004353 calibration_95_normValue_0_1[3]
whismanoid 50:f42de27fc652 247 0x53, 0x44, 0x00, 0x08, 0x00, 0x00, 0x00, 0x98, 0x44, 0x92, 0xd1, 0x3f, 0xff, 0xff, 0xff, 0xff, // 0x08004453 calibration_95_normValue_0_1[4]
whismanoid 50:f42de27fc652 248 0x53, 0x45, 0x00, 0x08, 0x00, 0x00, 0x00, 0x98, 0x44, 0x92, 0xd1, 0x3f, 0xff, 0xff, 0xff, 0xff, // 0x08004553 calibration_95_normValue_0_1[5]
whismanoid 51:a41d3fd5e441 249 // WIP #312 initial values in flash_page_configuration_back_up[]
whismanoid 47:f1a56afb4aca 250 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // 0xffffffff blank space to permit saving more data
whismanoid 52:bb09c0f452ec 251 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // FLA19 0x000261a0
whismanoid 52:bb09c0f452ec 252 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // FLA19 0x000261b0
whismanoid 52:bb09c0f452ec 253 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // FLA19 0x000261c0
whismanoid 52:bb09c0f452ec 254 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // FLA19 0x000261d0
whismanoid 52:bb09c0f452ec 255 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // FLA19 0x000261e0
whismanoid 52:bb09c0f452ec 256 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // FLA19 0x000261f0
whismanoid 52:bb09c0f452ec 257 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // FLA19 0x00026200
whismanoid 52:bb09c0f452ec 258 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 259 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 260 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 261 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 262 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 263 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 264 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 265 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 266 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 267 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 268 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 269 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 270 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 271 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 272 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 273 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // FLA19 0x00026300
whismanoid 52:bb09c0f452ec 274 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 275 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 276 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 277 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 278 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 279 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 280 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 281 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 282 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 283 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 284 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 285 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 286 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 287 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 288 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 289 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // FLA19 0x00026400
whismanoid 52:bb09c0f452ec 290 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 291 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 292 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 293 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 294 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 295 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 296 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 297 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 298 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 299 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 300 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 301 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 302 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 303 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 304 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 305 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // FLA19 0x00026500
whismanoid 52:bb09c0f452ec 306 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 307 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 308 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 309 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 310 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 311 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 312 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 313 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 314 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 315 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 316 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 317 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 318 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 319 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 320 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 321 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // FLA19 0x00026600
whismanoid 52:bb09c0f452ec 322 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 323 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 324 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 325 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 326 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 327 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 328 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 329 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 330 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 331 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 332 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 333 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 334 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 335 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 336 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 337 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // FLA19 0x00026700
whismanoid 52:bb09c0f452ec 338 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 339 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 340 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 341 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 342 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 343 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 344 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 345 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 346 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 347 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 348 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 349 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 350 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 351 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 352 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 353 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // FLA19 0x00026800
whismanoid 52:bb09c0f452ec 354 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 355 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 356 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 357 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 358 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 359 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 360 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 361 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 362 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 363 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 364 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 365 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 366 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 367 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 368 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 369 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // FLA19 0x00026900
whismanoid 52:bb09c0f452ec 370 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 371 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 372 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 373 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 374 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 375 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 376 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 377 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 378 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 379 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 380 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 381 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 382 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 383 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 384 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // FLA19 0x000269f0
whismanoid 52:bb09c0f452ec 385 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // FLA19 0x00026a00
whismanoid 52:bb09c0f452ec 386 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 387 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 388 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 389 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 390 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 391 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 392 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 393 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 394 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 395 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 396 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 397 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 398 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 399 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 400 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // FLA19 0x00026af0
whismanoid 52:bb09c0f452ec 401 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // FLA19 0x00026b00
whismanoid 52:bb09c0f452ec 402 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 403 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 404 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 405 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 406 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 407 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 408 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 409 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 410 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 411 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 412 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 413 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 414 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 415 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 416 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // FLA19 0x00026bf0
whismanoid 52:bb09c0f452ec 417 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // FLA19 0x00026c00
whismanoid 52:bb09c0f452ec 418 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 419 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 420 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 421 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 422 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 423 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 424 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 425 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 426 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 427 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 428 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 429 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 430 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 431 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 432 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // FLA19 0x00026cf0
whismanoid 52:bb09c0f452ec 433 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // FLA19 0x00026d00
whismanoid 52:bb09c0f452ec 434 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 435 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 436 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 437 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 438 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 439 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 440 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 441 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 442 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 443 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 444 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 445 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 446 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 447 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 448 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // FLA19 0x00026df0
whismanoid 52:bb09c0f452ec 449 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // FLA19 0x00026e00
whismanoid 52:bb09c0f452ec 450 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 451 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 452 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 453 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 454 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 455 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 456 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 457 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 458 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 459 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 460 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 461 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 462 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 463 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 464 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // FLA19 0x00026ef0
whismanoid 52:bb09c0f452ec 465 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // FLA19 0x00026f00
whismanoid 52:bb09c0f452ec 466 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 467 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 468 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 469 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 470 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 471 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 472 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 473 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 474 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 475 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 476 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 477 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 478 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 479 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 480 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // FLA19 0x00026ff0
whismanoid 52:bb09c0f452ec 481 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // FLA19 0x00027000
whismanoid 52:bb09c0f452ec 482 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 483 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 484 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 485 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 486 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 487 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 488 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 489 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 490 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 491 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 492 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 493 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 494 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 495 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 496 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // FLA19 0x000270f0
whismanoid 52:bb09c0f452ec 497 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // FLA19 0x00027100
whismanoid 52:bb09c0f452ec 498 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 499 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 500 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 501 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 502 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 503 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 504 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 505 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 506 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 507 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 508 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 509 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 510 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 511 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 512 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // FLA19 0x000271f0
whismanoid 52:bb09c0f452ec 513 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // FLA19 0x00027200
whismanoid 52:bb09c0f452ec 514 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 515 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 516 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 517 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 518 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 519 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 520 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 521 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 522 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 523 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 524 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 525 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 526 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 527 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 528 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // FLA19 0x000272f0
whismanoid 52:bb09c0f452ec 529 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // FLA19 0x00027300
whismanoid 52:bb09c0f452ec 530 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 531 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 532 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 533 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 534 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 535 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 536 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 537 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 538 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 539 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 540 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 541 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 542 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 543 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 544 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // FLA19 0x000273f0
whismanoid 52:bb09c0f452ec 545 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // FLA19 0x00027400
whismanoid 52:bb09c0f452ec 546 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 547 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 548 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 549 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 550 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 551 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 552 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 553 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 554 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 555 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 556 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 557 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 558 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 559 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 560 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // FLA19 0x000274f0
whismanoid 52:bb09c0f452ec 561 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // FLA19 0x00027500
whismanoid 52:bb09c0f452ec 562 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 563 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 564 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 565 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 566 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 567 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 568 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 569 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 570 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 571 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 572 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 573 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 574 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 575 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 576 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // FLA19 0x000275f0
whismanoid 52:bb09c0f452ec 577 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // FLA19 0x00027600
whismanoid 52:bb09c0f452ec 578 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 579 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 580 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 581 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 582 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 583 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 584 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 585 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 586 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 587 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 588 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 589 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 590 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 591 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 592 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // FLA19 0x000276f0
whismanoid 52:bb09c0f452ec 593 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // FLA19 0x00027700
whismanoid 52:bb09c0f452ec 594 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 595 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 596 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 597 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 598 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 599 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 600 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 601 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 602 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 603 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 604 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 605 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 606 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 607 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 608 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // FLA19 0x000277f0
whismanoid 52:bb09c0f452ec 609 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // FLA19 0x00027800
whismanoid 52:bb09c0f452ec 610 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 611 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 612 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 613 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 614 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 615 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 616 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 617 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 618 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 619 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 620 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 621 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 622 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 623 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 624 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // FLA19 0x000278f0
whismanoid 52:bb09c0f452ec 625 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // FLA19 0x00027900
whismanoid 52:bb09c0f452ec 626 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 627 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 628 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 629 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 630 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 631 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 632 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 633 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 634 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 635 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 636 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 637 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 638 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 639 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 640 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // FLA19 0x000279f0
whismanoid 52:bb09c0f452ec 641 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // FLA19 0x00027a00
whismanoid 52:bb09c0f452ec 642 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 643 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 644 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 645 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 646 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 647 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 648 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 649 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 650 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 651 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 652 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 653 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 654 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 655 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 656 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // FLA19 0x00027af0
whismanoid 52:bb09c0f452ec 657 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // FLA19 0x00027b00
whismanoid 52:bb09c0f452ec 658 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 659 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 660 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 661 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 662 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 663 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 664 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 665 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 666 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 667 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 668 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 669 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 670 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 671 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 672 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // FLA19 0x00027bf0
whismanoid 52:bb09c0f452ec 673 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // FLA19 0x00027c00
whismanoid 52:bb09c0f452ec 674 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 675 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 676 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 677 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 678 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 679 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 680 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 681 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 682 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 683 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 684 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 685 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 686 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 687 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 688 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // FLA19 0x00027cf0
whismanoid 52:bb09c0f452ec 689 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // FLA19 0x00027d00
whismanoid 52:bb09c0f452ec 690 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 691 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 692 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 693 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 694 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 695 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 696 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 697 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 698 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 699 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 700 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 701 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 702 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 703 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 704 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // FLA19 0x00027df0
whismanoid 52:bb09c0f452ec 705 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // FLA19 0x00027e00
whismanoid 52:bb09c0f452ec 706 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 707 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 708 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 709 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 710 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 711 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 712 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 713 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 714 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 715 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 716 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 717 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 718 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 719 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 720 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // FLA19 0x00027ef0
whismanoid 52:bb09c0f452ec 721 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // FLA19 0x00027f00
whismanoid 52:bb09c0f452ec 722 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 723 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 724 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 725 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 726 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 727 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 728 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 729 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 730 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 731 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 732 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 733 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 734 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 735 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
whismanoid 52:bb09c0f452ec 736 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff // FLA19 0x00027ff0
whismanoid 47:f1a56afb4aca 737 };
whismanoid 46:469d0061df5d 738 // WIP #312 map values in flash_page_configuration_back_up[]
whismanoid 46:469d0061df5d 739 // such as board serial number, %A calibration values,
whismanoid 46:469d0061df5d 740 // business logic, button handlers, etc.
whismanoid 46:469d0061df5d 741 // Use some pattern that stands out in the hex file dump
whismanoid 46:469d0061df5d 742 // as well as in the flash dump... note the hex file is LE/LSbyte first,
whismanoid 46:469d0061df5d 743 // while the flash memory is BE/MSbyte first.
whismanoid 46:469d0061df5d 744 //
whismanoid 46:469d0061df5d 745 // I don't have control of where this ends up because "at" attribute
whismanoid 46:469d0061df5d 746 // is not supported, but at least flash_page_configuration_back_up
whismanoid 46:469d0061df5d 747 // is page-aligned and its address is printed in the help.
whismanoid 46:469d0061df5d 748 // Also use a pattern that should stand out in the hex dump.
whismanoid 46:469d0061df5d 749 // Note that in the .bin file, "32107654" is 33 32 31 30 37 36 35 34,
whismanoid 46:469d0061df5d 750 // but in the flash memory it will be 0x30313233 0x34353637
whismanoid 46:469d0061df5d 751 // Use free hex editor to find text in .bin file,
whismanoid 46:469d0061df5d 752 // then add base address 0x00010000 to get peek address.
whismanoid 46:469d0061df5d 753 // char* TestString1 = "UUUUUUUUUUUUUUUUUUUU""32107654BA98FEDC"" MAX32625 Calibration ....####@@@@""UUUUUUUUUUUUUUUUUUUU";
whismanoid 46:469d0061df5d 754 // > %F peek=0x000241f0 len=20
whismanoid 46:469d0061df5d 755 // FLASH 0x000241f0: 0x544c4f56 0x00454741 0x55555555 0x55555555
whismanoid 46:469d0061df5d 756 // FLASH 0x00024200: 0x55555555 0x55555555 0x55555555 0x30313233
whismanoid 46:469d0061df5d 757 // FLASH 0x00024210: 0x34353637 0x38394142 0x43444546 0x58414d20
whismanoid 46:469d0061df5d 758 // FLASH 0x00024220: 0x32363233 0x61432035 0x7262696c 0x6f697461
whismanoid 46:469d0061df5d 759 // FLASH 0x00024230: 0x2020206e 0x2e2e2e2e 0x23232323 0x40404040
whismanoid 46:469d0061df5d 760 // FLASH 0x00024240: 0x55555555 0x55555555 0x55555555 0x55555555
whismanoid 46:469d0061df5d 761 // FLASH 0x00024250: 0x55555555 0x00000000 0x00000000 0x00000000
whismanoid 46:469d0061df5d 762 // FLASH 0x00024260: 0x00013b1b 0x000140d1 0x00013d9f 0x00013e2d
whismanoid 46:469d0061df5d 763 //
whismanoid 46:469d0061df5d 764 // Why did it end up at that address? Here's the linker map report:
whismanoid 46:469d0061df5d 765 // .\BUILD\MAX32625PICO\GCC_ARM\Internal_DataLogger.map
whismanoid 46:469d0061df5d 766 // .text.startup._GLOBAL__sub_I_TestString1
whismanoid 46:469d0061df5d 767 // 0x0001374c 0x33c BUILD/MAX32625PICO/GCC_ARM/DataLogger_Internal.o
whismanoid 46:469d0061df5d 768 // .rodata._GLOBAL__sub_I_TestString1.str1.1
whismanoid 46:469d0061df5d 769 // 0x00022d64 0x12 BUILD/MAX32625PICO/GCC_ARM/DataLogger_Internal.o
whismanoid 46:469d0061df5d 770 // 0x19 (size before relaxing)
whismanoid 46:469d0061df5d 771 //
whismanoid 46:469d0061df5d 772 // For calibration purposes this could still be usable,
whismanoid 46:469d0061df5d 773 // as long as the firmware knows where its calibration constants live.
whismanoid 46:469d0061df5d 774 //
whismanoid 46:469d0061df5d 775 #if defined ( __GNUC__ )
whismanoid 46:469d0061df5d 776 __attribute__ ((section(".calibration_teststring")))
whismanoid 46:469d0061df5d 777 #endif
whismanoid 46:469d0061df5d 778 char* TestString1 = "UUUU" "UUUU" "UUUU" "UUUU"
whismanoid 46:469d0061df5d 779 "\xFF\xFF\xFF\xFF" "\xFF\xFF\xFF\xFF" "\xFF\xFF\xFF\xFF" "\xFF\xFF\xFF\xFF"
whismanoid 46:469d0061df5d 780 "\x11\x22\x33\x44" "\xFF\xFF\xFF\xFF" "\xFF\xFF\xFF\xFF" "\xFF\xFF\xFF\xFF"
whismanoid 46:469d0061df5d 781 "UUUUUUUUUUUUUUUUUUUU""32107654BA98FEDC"" MAX32625 Calibration ....####@@@@""UUUUUUUUUUUUUUUUUUUU";
whismanoid 46:469d0061df5d 782 //
whismanoid 46:469d0061df5d 783 // Limit the ranges where memory write operation will be allowed
whismanoid 46:469d0061df5d 784 // MAX32625 flash peek/poke support (MAX40108 demo) #312
whismanoid 46:469d0061df5d 785 // FLASH (rx) : ORIGIN = 0x00010000, LENGTH = 0x00070000
whismanoid 46:469d0061df5d 786 // RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00028000
whismanoid 46:469d0061df5d 787 typedef struct {
whismanoid 46:469d0061df5d 788 uint32_t addr_min; // lowest address of range
whismanoid 46:469d0061df5d 789 uint32_t addr_max; // highest address of range
whismanoid 46:469d0061df5d 790 char name[6]; // 5-character name, pad with spaces, null-terminated
whismanoid 46:469d0061df5d 791 char can_flash_write_read; // 8=end of list, 4=flashPoke, 2=ramPoke, 1=read
whismanoid 46:469d0061df5d 792 } poke_access_t;
whismanoid 51:a41d3fd5e441 793 const char poke_access_readOnly = 1;
whismanoid 51:a41d3fd5e441 794 const char poke_access_rw_RAM = 3;
whismanoid 51:a41d3fd5e441 795 const char poke_access_rw_FLASH = 5;
whismanoid 51:a41d3fd5e441 796 const char poke_access_EndOfList = 8;
whismanoid 46:469d0061df5d 797 poke_access_t poke_access_list[] = {
whismanoid 46:469d0061df5d 798 { 0x12345678, 0x12345678, "undef", 0 }, // first record: catch undefined ranges
whismanoid 46:469d0061df5d 799 // { 0x00000000, 0x0000FFFF, " BOOT", 1 }, // boot area is flash page 0-7, but don't allow flashPoke
whismanoid 51:a41d3fd5e441 800 { 0x00000000, 0x00001FFF, "BOOT0", poke_access_readOnly }, // flash page 0
whismanoid 51:a41d3fd5e441 801 { 0x00002000, 0x00003FFF, "BOOT1", poke_access_readOnly }, // flash page 1
whismanoid 51:a41d3fd5e441 802 { 0x00004000, 0x00005FFF, "BOOT2", poke_access_readOnly }, // flash page 2
whismanoid 51:a41d3fd5e441 803 { 0x00006000, 0x00007FFF, "BOOT3", poke_access_readOnly }, // flash page 3
whismanoid 51:a41d3fd5e441 804 { 0x00008000, 0x00009FFF, "BOOT4", poke_access_readOnly }, // flash page 4
whismanoid 51:a41d3fd5e441 805 { 0x0000A000, 0x0000BFFF, "BOOT5", poke_access_readOnly }, // flash page 5
whismanoid 51:a41d3fd5e441 806 { 0x0000C000, 0x0000DFFF, "BOOT6", poke_access_readOnly }, // flash page 6
whismanoid 51:a41d3fd5e441 807 { 0x0000E000, 0x0000FFFF, "BOOT7", poke_access_readOnly }, // flash page 7
whismanoid 46:469d0061df5d 808 //
whismanoid 51:a41d3fd5e441 809 //{ 0x00010000, 0x0007FFFF, "FLASH", poke_access_rw_FLASH }, // flash pages 8-62
whismanoid 46:469d0061df5d 810 // Future: separate FLASH pages, allow flashPoke only on the calibration page
whismanoid 51:a41d3fd5e441 811 { 0x00010000, 0x00011FFF, "FLA08", poke_access_rw_FLASH }, // flash page 8
whismanoid 51:a41d3fd5e441 812 { 0x00012000, 0x00013FFF, "FLA09", poke_access_rw_FLASH }, // flash page 9
whismanoid 51:a41d3fd5e441 813 { 0x00014000, 0x00015FFF, "FLA10", poke_access_rw_FLASH }, // flash page 10
whismanoid 51:a41d3fd5e441 814 { 0x00016000, 0x00017FFF, "FLA11", poke_access_rw_FLASH }, // flash page 11
whismanoid 51:a41d3fd5e441 815 { 0x00018000, 0x00019FFF, "FLA12", poke_access_rw_FLASH }, // flash page 12
whismanoid 51:a41d3fd5e441 816 { 0x0001A000, 0x0001BFFF, "FLA13", poke_access_rw_FLASH }, // flash page 13
whismanoid 51:a41d3fd5e441 817 { 0x0001C000, 0x0001DFFF, "FLA14", poke_access_rw_FLASH }, // flash page 14
whismanoid 51:a41d3fd5e441 818 { 0x0001E000, 0x0001FFFF, "FLA15", poke_access_rw_FLASH }, // flash page 15
whismanoid 46:469d0061df5d 819 //
whismanoid 51:a41d3fd5e441 820 { 0x00020000, 0x00021FFF, "FLA16", poke_access_rw_FLASH }, // flash page 16
whismanoid 51:a41d3fd5e441 821 { 0x00022000, 0x00023FFF, "FLA17", poke_access_rw_FLASH }, // flash page 17
whismanoid 51:a41d3fd5e441 822 { 0x00024000, 0x00025FFF, "FLA18", poke_access_rw_FLASH }, // flash page 18
whismanoid 51:a41d3fd5e441 823 { 0x00026000, 0x00027FFF, "FLA19", poke_access_rw_FLASH }, // flash page 19
whismanoid 51:a41d3fd5e441 824 { 0x00028000, 0x00029FFF, "FLA20", poke_access_rw_FLASH }, // flash page 20
whismanoid 51:a41d3fd5e441 825 { 0x0002A000, 0x0002BFFF, "FLA21", poke_access_rw_FLASH }, // flash page 21
whismanoid 51:a41d3fd5e441 826 { 0x0002C000, 0x0002DFFF, "FLA22", poke_access_rw_FLASH }, // flash page 22
whismanoid 51:a41d3fd5e441 827 { 0x0002E000, 0x0002FFFF, "FLA23", poke_access_rw_FLASH }, // flash page 23
whismanoid 46:469d0061df5d 828 //
whismanoid 51:a41d3fd5e441 829 { 0x00030000, 0x00031FFF, "FLA24", poke_access_rw_FLASH }, // flash page 24
whismanoid 51:a41d3fd5e441 830 { 0x00032000, 0x00033FFF, "FLA25", poke_access_rw_FLASH }, // flash page 25
whismanoid 51:a41d3fd5e441 831 { 0x00034000, 0x00035FFF, "FLA26", poke_access_rw_FLASH }, // flash page 26
whismanoid 51:a41d3fd5e441 832 { 0x00036000, 0x00037FFF, "FLA27", poke_access_rw_FLASH }, // flash page 27
whismanoid 51:a41d3fd5e441 833 { 0x00038000, 0x00039FFF, "FLA28", poke_access_rw_FLASH }, // flash page 28
whismanoid 51:a41d3fd5e441 834 { 0x0003A000, 0x0003BFFF, "FLA29", poke_access_rw_FLASH }, // flash page 29
whismanoid 51:a41d3fd5e441 835 { 0x0003C000, 0x0003DFFF, "FLA30", poke_access_rw_FLASH }, // flash page 30
whismanoid 51:a41d3fd5e441 836 { 0x0003E000, 0x0003FFFF, "FLA31", poke_access_rw_FLASH }, // flash page 31
whismanoid 46:469d0061df5d 837 //
whismanoid 51:a41d3fd5e441 838 { 0x00040000, 0x00041FFF, "FLA32", poke_access_rw_FLASH }, // flash page 32
whismanoid 51:a41d3fd5e441 839 { 0x00042000, 0x00043FFF, "FLA33", poke_access_rw_FLASH }, // flash page 33
whismanoid 51:a41d3fd5e441 840 { 0x00044000, 0x00045FFF, "FLA34", poke_access_rw_FLASH }, // flash page 34
whismanoid 51:a41d3fd5e441 841 { 0x00046000, 0x00047FFF, "FLA35", poke_access_rw_FLASH }, // flash page 35
whismanoid 51:a41d3fd5e441 842 { 0x00048000, 0x00049FFF, "FLA36", poke_access_rw_FLASH }, // flash page 36
whismanoid 51:a41d3fd5e441 843 { 0x0004A000, 0x0004BFFF, "FLA37", poke_access_rw_FLASH }, // flash page 37
whismanoid 51:a41d3fd5e441 844 { 0x0004C000, 0x0004DFFF, "FLA38", poke_access_rw_FLASH }, // flash page 38
whismanoid 51:a41d3fd5e441 845 { 0x0004E000, 0x0004FFFF, "FLA39", poke_access_rw_FLASH }, // flash page 39
whismanoid 46:469d0061df5d 846 //
whismanoid 51:a41d3fd5e441 847 { 0x00050000, 0x00051FFF, "FLA40", poke_access_rw_FLASH }, // flash page 40
whismanoid 51:a41d3fd5e441 848 { 0x00052000, 0x00053FFF, "FLA41", poke_access_rw_FLASH }, // flash page 41
whismanoid 51:a41d3fd5e441 849 { 0x00054000, 0x00055FFF, "FLA42", poke_access_rw_FLASH }, // flash page 42
whismanoid 51:a41d3fd5e441 850 { 0x00056000, 0x00057FFF, "FLA43", poke_access_rw_FLASH }, // flash page 43
whismanoid 51:a41d3fd5e441 851 { 0x00058000, 0x00059FFF, "FLA44", poke_access_rw_FLASH }, // flash page 44
whismanoid 51:a41d3fd5e441 852 { 0x0005A000, 0x0005BFFF, "FLA45", poke_access_rw_FLASH }, // flash page 45
whismanoid 51:a41d3fd5e441 853 { 0x0005C000, 0x0005DFFF, "FLA46", poke_access_rw_FLASH }, // flash page 46
whismanoid 51:a41d3fd5e441 854 { 0x0005E000, 0x0005FFFF, "FLA47", poke_access_rw_FLASH }, // flash page 47
whismanoid 46:469d0061df5d 855 //
whismanoid 51:a41d3fd5e441 856 { 0x00060000, 0x00061FFF, "FLA48", poke_access_rw_FLASH }, // flash page 48
whismanoid 51:a41d3fd5e441 857 { 0x00062000, 0x00063FFF, "FLA49", poke_access_rw_FLASH }, // flash page 49
whismanoid 51:a41d3fd5e441 858 { 0x00064000, 0x00065FFF, "FLA50", poke_access_rw_FLASH }, // flash page 50
whismanoid 51:a41d3fd5e441 859 { 0x00066000, 0x00067FFF, "FLA51", poke_access_rw_FLASH }, // flash page 51
whismanoid 51:a41d3fd5e441 860 { 0x00068000, 0x00069FFF, "FLA52", poke_access_rw_FLASH }, // flash page 52
whismanoid 51:a41d3fd5e441 861 { 0x0006A000, 0x0006BFFF, "FLA53", poke_access_rw_FLASH }, // flash page 53
whismanoid 51:a41d3fd5e441 862 { 0x0006C000, 0x0006DFFF, "FLA54", poke_access_rw_FLASH }, // flash page 54
whismanoid 51:a41d3fd5e441 863 { 0x0006E000, 0x0006FFFF, "FLA55", poke_access_rw_FLASH }, // flash page 55
whismanoid 46:469d0061df5d 864 //
whismanoid 51:a41d3fd5e441 865 { 0x00070000, 0x00071FFF, "FLA56", poke_access_rw_FLASH }, // flash page 56
whismanoid 51:a41d3fd5e441 866 { 0x00072000, 0x00073FFF, "FLA57", poke_access_rw_FLASH }, // flash page 57
whismanoid 51:a41d3fd5e441 867 { 0x00074000, 0x00075FFF, "FLA58", poke_access_rw_FLASH }, // flash page 58
whismanoid 51:a41d3fd5e441 868 { 0x00076000, 0x00077FFF, "FLA59", poke_access_rw_FLASH }, // flash page 59
whismanoid 51:a41d3fd5e441 869 { 0x00078000, 0x00079FFF, "FLA60", poke_access_rw_FLASH }, // flash page 60
whismanoid 51:a41d3fd5e441 870 { 0x0007A000, 0x0007BFFF, "FLA61", poke_access_rw_FLASH }, // flash page 61
whismanoid 51:a41d3fd5e441 871 { 0x0007C000, 0x0007DFFF, "FLA62", poke_access_rw_FLASH }, // flash page 62
whismanoid 51:a41d3fd5e441 872 { 0x0007E000, 0x0007FFFF, "FLA63", poke_access_rw_FLASH }, // flash page 63
whismanoid 46:469d0061df5d 873 //
whismanoid 51:a41d3fd5e441 874 { 0x20000000, 0x20027FFF, " RAM", poke_access_rw_RAM }, // ramPoke + read
whismanoid 46:469d0061df5d 875 { 0x20028000, 0x2002FFFF, "skip ", 0 }, // don't read from this range
whismanoid 51:a41d3fd5e441 876 { 0x40000000, 0x400003FF, " SYS", poke_access_readOnly }, // read only
whismanoid 51:a41d3fd5e441 877 { 0x40000400, 0x400007FF, " CLK", poke_access_readOnly },
whismanoid 51:a41d3fd5e441 878 { 0x40000800, 0x400009FF, " PWR", poke_access_readOnly },
whismanoid 51:a41d3fd5e441 879 { 0x40000A00, 0x40000BFF, " RTC", poke_access_readOnly },
whismanoid 51:a41d3fd5e441 880 { 0x40000C00, 0x40001FFF, "IOMAN", poke_access_readOnly },
whismanoid 51:a41d3fd5e441 881 { 0x40002000, 0x40002FFF, " FLC", poke_access_readOnly },
whismanoid 51:a41d3fd5e441 882 { 0x40003000, 0x40003FFF, " ICC", poke_access_readOnly },
whismanoid 51:a41d3fd5e441 883 { 0x40004000, 0x40004FFF, " SPIX", poke_access_readOnly },
whismanoid 51:a41d3fd5e441 884 { 0x40005000, 0x40005FFF, " PMU", poke_access_readOnly },
whismanoid 51:a41d3fd5e441 885 { 0x40006000, 0x40006FFF, " CRC", poke_access_readOnly },
whismanoid 51:a41d3fd5e441 886 { 0x40007000, 0x40007FFF, " TPU", poke_access_readOnly },
whismanoid 51:a41d3fd5e441 887 { 0x40008000, 0x40008FFF, " WDT0", poke_access_readOnly },
whismanoid 51:a41d3fd5e441 888 { 0x40009000, 0x40009FFF, " WDT1", poke_access_readOnly },
whismanoid 51:a41d3fd5e441 889 { 0x4000A000, 0x4000AFFF, " GPIO", poke_access_readOnly },
whismanoid 51:a41d3fd5e441 890 { 0x4000B000, 0x4000FFFF, " TMR", poke_access_readOnly },
whismanoid 51:a41d3fd5e441 891 { 0x40011000, 0x4000FFFF, " PT", poke_access_readOnly },
whismanoid 51:a41d3fd5e441 892 { 0x40012000, 0x4000FFFF, " UART", poke_access_readOnly },
whismanoid 51:a41d3fd5e441 893 { 0x40016000, 0x4000FFFF, " I2CM", poke_access_readOnly },
whismanoid 51:a41d3fd5e441 894 { 0x40019000, 0x4000FFFF, " I2CS", poke_access_readOnly },
whismanoid 51:a41d3fd5e441 895 { 0x4001A000, 0x4000FFFF, " SPIM", poke_access_readOnly },
whismanoid 51:a41d3fd5e441 896 { 0x4001E000, 0x4000FFFF, " OWM", poke_access_readOnly },
whismanoid 51:a41d3fd5e441 897 { 0x4001F000, 0x4000FFFF, " ADC", poke_access_readOnly },
whismanoid 51:a41d3fd5e441 898 { 0x40020000, 0x40000FFF, " SPIS", poke_access_readOnly },
whismanoid 51:a41d3fd5e441 899 { 0x40100000, 0x40100FFF, " USB", poke_access_readOnly },
whismanoid 51:a41d3fd5e441 900 { 0x40101000, 0x40101FFF, " CRC", poke_access_readOnly },
whismanoid 51:a41d3fd5e441 901 { 0x40102000, 0x40102FFF, " TPU", poke_access_readOnly },
whismanoid 51:a41d3fd5e441 902 { 0x40103000, 0x40103FFF, "UART0", poke_access_readOnly },
whismanoid 51:a41d3fd5e441 903 { 0x40104000, 0x40104FFF, "UART1", poke_access_readOnly },
whismanoid 51:a41d3fd5e441 904 { 0x40105000, 0x40105FFF, "UART2", poke_access_readOnly },
whismanoid 51:a41d3fd5e441 905 //{ 0x40106000, 0x40106FFF, "_____", poke_access_readOnly }, // reserved
whismanoid 51:a41d3fd5e441 906 { 0x40107000, 0x40107FFF, "I2CM0", poke_access_readOnly }, // I2CM0 FIFOs
whismanoid 51:a41d3fd5e441 907 { 0x40108000, 0x40108FFF, "I2CM1", poke_access_readOnly }, // I2CM1 FIFOs
whismanoid 51:a41d3fd5e441 908 //{ 0x40109000, 0x40109FFF, "_____", poke_access_readOnly }, // reserved
whismanoid 51:a41d3fd5e441 909 { 0x4010A000, 0x4010AFFF, "SPIM0", poke_access_readOnly }, // SPIM0 FIFOs
whismanoid 51:a41d3fd5e441 910 { 0x4010B000, 0x4010BFFF, "SPIM1", poke_access_readOnly }, // SPIM1 FIFOs
whismanoid 51:a41d3fd5e441 911 { 0x4010C000, 0x4010CFFF, "SPIM2", poke_access_readOnly }, // SPIM2 FIFOs
whismanoid 51:a41d3fd5e441 912 //{ 0x4010D000, 0x4010DFFF, "_____", poke_access_readOnly }, // reserved
whismanoid 51:a41d3fd5e441 913 { 0x4010E000, 0x4010EFFF, " SPIS", poke_access_readOnly }, // SPIS FIFOs
whismanoid 51:a41d3fd5e441 914 //{ 0x4010F000, 0x4010FFFF, "_____", poke_access_readOnly }, // reserved
whismanoid 46:469d0061df5d 915 //
whismanoid 51:a41d3fd5e441 916 { 0x00000000, 0xFFFFFFFF, "last?", poke_access_EndOfList }, // end of list can_flash_write_read=8, catch-all
whismanoid 46:469d0061df5d 917 };
whismanoid 46:469d0061df5d 918 int search_poke_access_list(uint32_t addr)
whismanoid 46:469d0061df5d 919 {
whismanoid 46:469d0061df5d 920 // scan poke_access_list[] for peek_addr
whismanoid 46:469d0061df5d 921 for (int i = 0; poke_access_list[i].can_flash_write_read != 8; i++)
whismanoid 46:469d0061df5d 922 {
whismanoid 46:469d0061df5d 923 if ((addr >= poke_access_list[i].addr_min) && (addr <= poke_access_list[i].addr_max))
whismanoid 46:469d0061df5d 924 {
whismanoid 46:469d0061df5d 925 return i;
whismanoid 46:469d0061df5d 926 }
whismanoid 46:469d0061df5d 927 }
whismanoid 46:469d0061df5d 928 return 0;
whismanoid 46:469d0061df5d 929 }
whismanoid 46:469d0061df5d 930 #endif // defined(HAS_FLASH_PEEK) || defined(HAS_FLASH_POKE)
whismanoid 46:469d0061df5d 931
whismanoid 46:469d0061df5d 932 //--------------------------------------------------
whismanoid 3:9055e17e181a 933 // Option to use SPI connected ADC
whismanoid 3:9055e17e181a 934 #ifndef SPI_ADC_DeviceName
whismanoid 9:45f98573eb6d 935 #define SPI_ADC_DeviceName MAX11410
whismanoid 3:9055e17e181a 936 #undef SPI_ADC_DeviceName
whismanoid 3:9055e17e181a 937 #endif
whismanoid 3:9055e17e181a 938 #if defined(SPI_ADC_DeviceName) // SPI connected ADC
whismanoid 3:9055e17e181a 939 #include "MAX11410.h"
whismanoid 3:9055e17e181a 940 #endif // defined(SPI_ADC_DeviceName) // SPI connected ADC
whismanoid 0:cb44e2e9ec4c 941
whismanoid 0:cb44e2e9ec4c 942 #if defined(TARGET)
whismanoid 0:cb44e2e9ec4c 943 // TARGET_NAME macros from targets/TARGET_Maxim/TARGET_MAX32625/device/mxc_device.h
whismanoid 0:cb44e2e9ec4c 944 // Create a string definition for the TARGET
whismanoid 0:cb44e2e9ec4c 945 #define STRING_ARG(arg) #arg
whismanoid 0:cb44e2e9ec4c 946 #define STRING_NAME(name) STRING_ARG(name)
whismanoid 0:cb44e2e9ec4c 947 #define TARGET_NAME STRING_NAME(TARGET)
whismanoid 0:cb44e2e9ec4c 948 #elif defined(TARGET_MAX32600)
whismanoid 0:cb44e2e9ec4c 949 #define TARGET_NAME "MAX32600"
whismanoid 0:cb44e2e9ec4c 950 #elif defined(TARGET_LPC1768)
whismanoid 0:cb44e2e9ec4c 951 #define TARGET_NAME "LPC1768"
whismanoid 0:cb44e2e9ec4c 952 #elif defined(TARGET_NUCLEO_F446RE)
whismanoid 0:cb44e2e9ec4c 953 #define TARGET_NAME "NUCLEO_F446RE"
whismanoid 0:cb44e2e9ec4c 954 #elif defined(TARGET_NUCLEO_F401RE)
whismanoid 0:cb44e2e9ec4c 955 #define TARGET_NAME "NUCLEO_F401RE"
whismanoid 0:cb44e2e9ec4c 956 #else
whismanoid 0:cb44e2e9ec4c 957 #error TARGET NOT DEFINED
whismanoid 0:cb44e2e9ec4c 958 #endif
whismanoid 0:cb44e2e9ec4c 959 #if defined(TARGET_MAX32630)
whismanoid 0:cb44e2e9ec4c 960 //--------------------------------------------------
whismanoid 0:cb44e2e9ec4c 961 // TARGET=MAX32630FTHR ARM Cortex-M4F 96MHz 2048kB Flash 512kB SRAM
whismanoid 0:cb44e2e9ec4c 962 // +-------------[microUSB]-------------+
whismanoid 0:cb44e2e9ec4c 963 // | J1 MAX32630FTHR J2 |
whismanoid 0:cb44e2e9ec4c 964 // ______ | [ ] RST GND [ ] |
whismanoid 0:cb44e2e9ec4c 965 // ______ | [ ] 3V3 BAT+[ ] |
whismanoid 0:cb44e2e9ec4c 966 // ______ | [ ] 1V8 reset SW1 |
whismanoid 0:cb44e2e9ec4c 967 // ______ | [ ] GND J4 J3 |
whismanoid 0:cb44e2e9ec4c 968 // analogIn0/4 | [a] AIN_0 1.2Vfs (bat) SYS [ ] | switched BAT+
whismanoid 0:cb44e2e9ec4c 969 // analogIn1/5 | [a] AIN_1 1.2Vfs PWR [ ] | external pwr btn
whismanoid 0:cb44e2e9ec4c 970 // analogIn2 | [a] AIN_2 1.2Vfs +5V VBUS [ ] | USB +5V power
whismanoid 0:cb44e2e9ec4c 971 // analogIn3 | [a] AIN_3 1.2Vfs 1-WIRE P4_0 [d] | D0 dig9
whismanoid 0:cb44e2e9ec4c 972 // (I2C2.SDA) | [d] P5_7 SDA2 SRN P5_6 [d] | D1 dig8
whismanoid 0:cb44e2e9ec4c 973 // (I2C2.SCL) | [d] P6_0 SCL2 SDIO3 P5_5 [d] | D2 dig7
whismanoid 0:cb44e2e9ec4c 974 // D13/SCLK | [s] P5_0 SCLK SDIO2 P5_4 [d] | D3 dig6
whismanoid 0:cb44e2e9ec4c 975 // D11/MOSI | [s] P5_1 MOSI SSEL P5_3 [d] | D4 dig5
whismanoid 0:cb44e2e9ec4c 976 // D12/MISO | [s] P5_2 MISO RTS P3_3 [d] | D5 dig4
whismanoid 0:cb44e2e9ec4c 977 // D10/CS | [s] P3_0 RX CTS P3_2 [d] | D6 dig3
whismanoid 0:cb44e2e9ec4c 978 // D9 dig0 | [d] P3_1 TX SCL P3_5 [d] | D7 dig2
whismanoid 0:cb44e2e9ec4c 979 // ______ | [ ] GND SDA P3_4 [d] | D8 dig1
whismanoid 0:cb44e2e9ec4c 980 // | |
whismanoid 0:cb44e2e9ec4c 981 // | XIP Flash MAX14690N |
whismanoid 0:cb44e2e9ec4c 982 // | XIP_SCLK P1_0 SDA2 P5_7 |
whismanoid 0:cb44e2e9ec4c 983 // | XIP_MOSI P1_1 SCL2 P6_0 |
whismanoid 0:cb44e2e9ec4c 984 // | XIP_MISO P1_2 PMIC_INIT P3_7 |
whismanoid 0:cb44e2e9ec4c 985 // | XIP_SSEL P1_3 MPC P2_7 |
whismanoid 0:cb44e2e9ec4c 986 // | XIP_DIO2 P1_4 MON AIN_0 |
whismanoid 0:cb44e2e9ec4c 987 // | XIP_DIO3 P1_5 |
whismanoid 0:cb44e2e9ec4c 988 // | |
whismanoid 0:cb44e2e9ec4c 989 // | PAN1326B MicroSD LED |
whismanoid 0:cb44e2e9ec4c 990 // | BT_RX P0_0 SD_SCLK P0_4 r P2_4 |
whismanoid 0:cb44e2e9ec4c 991 // | BT_TX P0_1 SD_MOSI P0_5 g P2_5 |
whismanoid 0:cb44e2e9ec4c 992 // | BT_CTS P0_2 SD_MISO P0_6 b P2_6 |
whismanoid 0:cb44e2e9ec4c 993 // | BT_RTS P0_3 SD_SSEL P0_7 |
whismanoid 0:cb44e2e9ec4c 994 // | BT_RST P1_6 DETECT P2_2 |
whismanoid 0:cb44e2e9ec4c 995 // | BT_CLK P1_7 SW2 P2_3 |
whismanoid 0:cb44e2e9ec4c 996 // +------------------------------------+
whismanoid 0:cb44e2e9ec4c 997 // MAX32630FTHR board has MAX14690 PMIC on I2C bus (P5_7 SDA, P6_0 SCL) at slave address 0101_000r 0x50 (or 0x28 for 7 MSbit address).
whismanoid 0:cb44e2e9ec4c 998 // MAX32630FTHR board has BMI160 accelerometer on I2C bus (P5_7 SDA, P6_0 SCL) at slave address 1101_000r 0xD0 (or 0x68 for 7 MSbit address).
whismanoid 0:cb44e2e9ec4c 999 // AIN_0 = AIN0 pin fullscale is 1.2V
whismanoid 0:cb44e2e9ec4c 1000 // AIN_1 = AIN1 pin fullscale is 1.2V
whismanoid 0:cb44e2e9ec4c 1001 // AIN_2 = AIN2 pin fullscale is 1.2V
whismanoid 0:cb44e2e9ec4c 1002 // AIN_3 = AIN3 pin fullscale is 1.2V
whismanoid 0:cb44e2e9ec4c 1003 // AIN_4 = AIN0 / 5.0 fullscale is 6.0V
whismanoid 0:cb44e2e9ec4c 1004 // AIN_5 = AIN1 / 5.0 fullscale is 6.0V
whismanoid 0:cb44e2e9ec4c 1005 // AIN_6 = VDDB / 4.0 fullscale is 4.8V
whismanoid 0:cb44e2e9ec4c 1006 // AIN_7 = VDD18 fullscale is 1.2V
whismanoid 0:cb44e2e9ec4c 1007 // AIN_8 = VDD12 fullscale is 1.2V
whismanoid 0:cb44e2e9ec4c 1008 // AIN_9 = VRTC / 2.0 fullscale is 2.4V
whismanoid 0:cb44e2e9ec4c 1009 // AIN_10 = x undefined?
whismanoid 0:cb44e2e9ec4c 1010 // AIN_11 = VDDIO / 4.0 fullscale is 4.8V
whismanoid 0:cb44e2e9ec4c 1011 // AIN_12 = VDDIOH / 4.0 fullscale is 4.8V
whismanoid 0:cb44e2e9ec4c 1012 //
whismanoid 0:cb44e2e9ec4c 1013 #include "max32630fthr.h"
whismanoid 0:cb44e2e9ec4c 1014 MAX32630FTHR pegasus(MAX32630FTHR::VIO_3V3);
whismanoid 0:cb44e2e9ec4c 1015 #define analogIn4_IS_HIGH_RANGE_OF_analogIn0 1
whismanoid 0:cb44e2e9ec4c 1016 // MAX32630FTHR board supports only internal VREF = 1.200V at bypass capacitor C15
whismanoid 0:cb44e2e9ec4c 1017 const float ADC_FULL_SCALE_VOLTAGE = 1.200;
whismanoid 0:cb44e2e9ec4c 1018 // Arduino connector
whismanoid 0:cb44e2e9ec4c 1019 #ifndef A0
whismanoid 0:cb44e2e9ec4c 1020 #define A0 AIN_0
whismanoid 0:cb44e2e9ec4c 1021 #endif
whismanoid 0:cb44e2e9ec4c 1022 #ifndef A1
whismanoid 0:cb44e2e9ec4c 1023 #define A1 AIN_1
whismanoid 0:cb44e2e9ec4c 1024 #endif
whismanoid 0:cb44e2e9ec4c 1025 #ifndef A2
whismanoid 0:cb44e2e9ec4c 1026 #define A2 AIN_2
whismanoid 0:cb44e2e9ec4c 1027 #endif
whismanoid 0:cb44e2e9ec4c 1028 #ifndef A3
whismanoid 0:cb44e2e9ec4c 1029 #define A3 AIN_3
whismanoid 0:cb44e2e9ec4c 1030 #endif
whismanoid 0:cb44e2e9ec4c 1031 #ifndef D0
whismanoid 0:cb44e2e9ec4c 1032 #define D0 P4_0
whismanoid 0:cb44e2e9ec4c 1033 #endif
whismanoid 0:cb44e2e9ec4c 1034 #ifndef D1
whismanoid 0:cb44e2e9ec4c 1035 #define D1 P5_6
whismanoid 0:cb44e2e9ec4c 1036 #endif
whismanoid 0:cb44e2e9ec4c 1037 #ifndef D2
whismanoid 0:cb44e2e9ec4c 1038 #define D2 P5_5
whismanoid 0:cb44e2e9ec4c 1039 #endif
whismanoid 0:cb44e2e9ec4c 1040 #ifndef D3
whismanoid 0:cb44e2e9ec4c 1041 #define D3 P5_4
whismanoid 0:cb44e2e9ec4c 1042 #endif
whismanoid 0:cb44e2e9ec4c 1043 #ifndef D4
whismanoid 0:cb44e2e9ec4c 1044 #define D4 P5_3
whismanoid 0:cb44e2e9ec4c 1045 #endif
whismanoid 0:cb44e2e9ec4c 1046 #ifndef D5
whismanoid 0:cb44e2e9ec4c 1047 #define D5 P3_3
whismanoid 0:cb44e2e9ec4c 1048 #endif
whismanoid 0:cb44e2e9ec4c 1049 #ifndef D6
whismanoid 0:cb44e2e9ec4c 1050 #define D6 P3_2
whismanoid 0:cb44e2e9ec4c 1051 #endif
whismanoid 0:cb44e2e9ec4c 1052 #ifndef D7
whismanoid 0:cb44e2e9ec4c 1053 #define D7 P3_5
whismanoid 0:cb44e2e9ec4c 1054 #endif
whismanoid 0:cb44e2e9ec4c 1055 #ifndef D8
whismanoid 0:cb44e2e9ec4c 1056 #define D8 P3_4
whismanoid 0:cb44e2e9ec4c 1057 #endif
whismanoid 0:cb44e2e9ec4c 1058 #ifndef D9
whismanoid 0:cb44e2e9ec4c 1059 #define D9 P3_1
whismanoid 0:cb44e2e9ec4c 1060 #endif
whismanoid 0:cb44e2e9ec4c 1061 #ifndef D10
whismanoid 0:cb44e2e9ec4c 1062 #define D10 P3_0
whismanoid 0:cb44e2e9ec4c 1063 #endif
whismanoid 0:cb44e2e9ec4c 1064 #ifndef D11
whismanoid 0:cb44e2e9ec4c 1065 #define D11 P5_1
whismanoid 0:cb44e2e9ec4c 1066 #endif
whismanoid 0:cb44e2e9ec4c 1067 #ifndef D12
whismanoid 0:cb44e2e9ec4c 1068 #define D12 P5_2
whismanoid 0:cb44e2e9ec4c 1069 #endif
whismanoid 0:cb44e2e9ec4c 1070 #ifndef D13
whismanoid 0:cb44e2e9ec4c 1071 #define D13 P5_0
whismanoid 0:cb44e2e9ec4c 1072 #endif
whismanoid 0:cb44e2e9ec4c 1073 //--------------------------------------------------
whismanoid 0:cb44e2e9ec4c 1074 #elif defined(TARGET_MAX32625MBED)
whismanoid 0:cb44e2e9ec4c 1075 //--------------------------------------------------
whismanoid 0:cb44e2e9ec4c 1076 // TARGET=MAX32625MBED ARM Cortex-M4F 96MHz 512kB Flash 160kB SRAM
whismanoid 0:cb44e2e9ec4c 1077 // +-------------------------------------+
whismanoid 0:cb44e2e9ec4c 1078 // | MAX32625MBED Arduino UNO header |
whismanoid 0:cb44e2e9ec4c 1079 // | |
whismanoid 0:cb44e2e9ec4c 1080 // | A5/SCL[ ] | P1_7 dig15
whismanoid 0:cb44e2e9ec4c 1081 // | A4/SDA[ ] | P1_6 dig14
whismanoid 0:cb44e2e9ec4c 1082 // | AREF=N/C[ ] |
whismanoid 0:cb44e2e9ec4c 1083 // | GND[ ] |
whismanoid 0:cb44e2e9ec4c 1084 // | [ ]N/C SCK/13[ ] | P1_0 dig13
whismanoid 0:cb44e2e9ec4c 1085 // | [ ]IOREF=3V3 MISO/12[ ] | P1_2 dig12
whismanoid 0:cb44e2e9ec4c 1086 // | [ ]RST MOSI/11[ ]~| P1_1 dig11
whismanoid 0:cb44e2e9ec4c 1087 // | [ ]3V3 CS/10[ ]~| P1_3 dig10
whismanoid 0:cb44e2e9ec4c 1088 // | [ ]5V0 9[ ]~| P1_5 dig9
whismanoid 0:cb44e2e9ec4c 1089 // | [ ]GND 8[ ] | P1_4 dig8
whismanoid 0:cb44e2e9ec4c 1090 // | [ ]GND |
whismanoid 0:cb44e2e9ec4c 1091 // | [ ]Vin 7[ ] | P0_7 dig7
whismanoid 0:cb44e2e9ec4c 1092 // | 6[ ]~| P0_6 dig6
whismanoid 0:cb44e2e9ec4c 1093 // AIN_0 | [ ]A0 5[ ]~| P0_5 dig5
whismanoid 0:cb44e2e9ec4c 1094 // AIN_1 | [ ]A1 4[ ] | P0_4 dig4
whismanoid 0:cb44e2e9ec4c 1095 // AIN_2 | [ ]A2 INT1/3[ ]~| P0_3 dig3
whismanoid 0:cb44e2e9ec4c 1096 // AIN_3 | [ ]A3 INT0/2[ ] | P0_2 dig2
whismanoid 0:cb44e2e9ec4c 1097 // dig16 P3_4 | [ ]A4/SDA RST SCK MISO TX>1[ ] | P0_1 dig1
whismanoid 0:cb44e2e9ec4c 1098 // dig17 P3_5 | [ ]A5/SCL [ ] [ ] [ ] RX<0[ ] | P0_0 dig0
whismanoid 0:cb44e2e9ec4c 1099 // | [ ] [ ] [ ] |
whismanoid 0:cb44e2e9ec4c 1100 // | UNO_R3 GND MOSI 5V ____________/
whismanoid 0:cb44e2e9ec4c 1101 // \_______________________/
whismanoid 0:cb44e2e9ec4c 1102 //
whismanoid 0:cb44e2e9ec4c 1103 // +------------------------+
whismanoid 0:cb44e2e9ec4c 1104 // | |
whismanoid 0:cb44e2e9ec4c 1105 // | MicroSD LED |
whismanoid 0:cb44e2e9ec4c 1106 // | SD_SCLK P2_4 r P3_0 |
whismanoid 0:cb44e2e9ec4c 1107 // | SD_MOSI P2_5 g P3_1 |
whismanoid 0:cb44e2e9ec4c 1108 // | SD_MISO P2_6 b P3_2 |
whismanoid 0:cb44e2e9ec4c 1109 // | SD_SSEL P2_7 y P3_3 |
whismanoid 0:cb44e2e9ec4c 1110 // | |
whismanoid 0:cb44e2e9ec4c 1111 // | DAPLINK BUTTONS |
whismanoid 0:cb44e2e9ec4c 1112 // | TX P2_1 SW3 P2_3 |
whismanoid 0:cb44e2e9ec4c 1113 // | RX P2_0 SW2 P2_2 |
whismanoid 0:cb44e2e9ec4c 1114 // +------------------------+
whismanoid 0:cb44e2e9ec4c 1115 //
whismanoid 0:cb44e2e9ec4c 1116 // AIN_0 = AIN0 pin fullscale is 1.2V
whismanoid 0:cb44e2e9ec4c 1117 // AIN_1 = AIN1 pin fullscale is 1.2V
whismanoid 0:cb44e2e9ec4c 1118 // AIN_2 = AIN2 pin fullscale is 1.2V
whismanoid 0:cb44e2e9ec4c 1119 // AIN_3 = AIN3 pin fullscale is 1.2V
whismanoid 0:cb44e2e9ec4c 1120 // AIN_4 = AIN0 / 5.0 fullscale is 6.0V
whismanoid 0:cb44e2e9ec4c 1121 // AIN_5 = AIN1 / 5.0 fullscale is 6.0V
whismanoid 0:cb44e2e9ec4c 1122 // AIN_6 = VDDB / 4.0 fullscale is 4.8V
whismanoid 0:cb44e2e9ec4c 1123 // AIN_7 = VDD18 fullscale is 1.2V
whismanoid 0:cb44e2e9ec4c 1124 // AIN_8 = VDD12 fullscale is 1.2V
whismanoid 0:cb44e2e9ec4c 1125 // AIN_9 = VRTC / 2.0 fullscale is 2.4V
whismanoid 0:cb44e2e9ec4c 1126 // AIN_10 = x undefined?
whismanoid 0:cb44e2e9ec4c 1127 // AIN_11 = VDDIO / 4.0 fullscale is 4.8V
whismanoid 0:cb44e2e9ec4c 1128 // AIN_12 = VDDIOH / 4.0 fullscale is 4.8V
whismanoid 0:cb44e2e9ec4c 1129 //
whismanoid 0:cb44e2e9ec4c 1130 //#include "max32625mbed.h" // ?
whismanoid 0:cb44e2e9ec4c 1131 //MAX32625MBED mbed(MAX32625MBED::VIO_3V3); // ?
whismanoid 0:cb44e2e9ec4c 1132 #define analogIn4_IS_HIGH_RANGE_OF_analogIn0 1
whismanoid 0:cb44e2e9ec4c 1133 // MAX32630FTHR board supports only internal VREF = 1.200V at bypass capacitor C15
whismanoid 0:cb44e2e9ec4c 1134 const float ADC_FULL_SCALE_VOLTAGE = 1.200; // TODO: ADC_FULL_SCALE_VOLTAGE Pico?
whismanoid 0:cb44e2e9ec4c 1135 // Arduino connector
whismanoid 0:cb44e2e9ec4c 1136 #ifndef A0
whismanoid 0:cb44e2e9ec4c 1137 #define A0 AIN_0
whismanoid 0:cb44e2e9ec4c 1138 #endif
whismanoid 0:cb44e2e9ec4c 1139 #ifndef A1
whismanoid 0:cb44e2e9ec4c 1140 #define A1 AIN_1
whismanoid 0:cb44e2e9ec4c 1141 #endif
whismanoid 0:cb44e2e9ec4c 1142 #ifndef A2
whismanoid 0:cb44e2e9ec4c 1143 #define A2 AIN_2
whismanoid 0:cb44e2e9ec4c 1144 #endif
whismanoid 0:cb44e2e9ec4c 1145 #ifndef A3
whismanoid 0:cb44e2e9ec4c 1146 #define A3 AIN_3
whismanoid 0:cb44e2e9ec4c 1147 #endif
whismanoid 0:cb44e2e9ec4c 1148 #ifndef D0
whismanoid 0:cb44e2e9ec4c 1149 #define D0 P0_0
whismanoid 0:cb44e2e9ec4c 1150 #endif
whismanoid 0:cb44e2e9ec4c 1151 #ifndef D1
whismanoid 0:cb44e2e9ec4c 1152 #define D1 P0_1
whismanoid 0:cb44e2e9ec4c 1153 #endif
whismanoid 0:cb44e2e9ec4c 1154 #ifndef D2
whismanoid 0:cb44e2e9ec4c 1155 #define D2 P0_2
whismanoid 0:cb44e2e9ec4c 1156 #endif
whismanoid 0:cb44e2e9ec4c 1157 #ifndef D3
whismanoid 0:cb44e2e9ec4c 1158 #define D3 P0_3
whismanoid 0:cb44e2e9ec4c 1159 #endif
whismanoid 0:cb44e2e9ec4c 1160 #ifndef D4
whismanoid 0:cb44e2e9ec4c 1161 #define D4 P0_4
whismanoid 0:cb44e2e9ec4c 1162 #endif
whismanoid 0:cb44e2e9ec4c 1163 #ifndef D5
whismanoid 0:cb44e2e9ec4c 1164 #define D5 P0_5
whismanoid 0:cb44e2e9ec4c 1165 #endif
whismanoid 0:cb44e2e9ec4c 1166 #ifndef D6
whismanoid 0:cb44e2e9ec4c 1167 #define D6 P0_6
whismanoid 0:cb44e2e9ec4c 1168 #endif
whismanoid 0:cb44e2e9ec4c 1169 #ifndef D7
whismanoid 0:cb44e2e9ec4c 1170 #define D7 P0_7
whismanoid 0:cb44e2e9ec4c 1171 #endif
whismanoid 0:cb44e2e9ec4c 1172 #ifndef D8
whismanoid 0:cb44e2e9ec4c 1173 #define D8 P1_4
whismanoid 0:cb44e2e9ec4c 1174 #endif
whismanoid 0:cb44e2e9ec4c 1175 #ifndef D9
whismanoid 0:cb44e2e9ec4c 1176 #define D9 P1_5
whismanoid 0:cb44e2e9ec4c 1177 #endif
whismanoid 0:cb44e2e9ec4c 1178 #ifndef D10
whismanoid 0:cb44e2e9ec4c 1179 #define D10 P1_3
whismanoid 0:cb44e2e9ec4c 1180 #endif
whismanoid 0:cb44e2e9ec4c 1181 #ifndef D11
whismanoid 0:cb44e2e9ec4c 1182 #define D11 P1_1
whismanoid 0:cb44e2e9ec4c 1183 #endif
whismanoid 0:cb44e2e9ec4c 1184 #ifndef D12
whismanoid 0:cb44e2e9ec4c 1185 #define D12 P1_2
whismanoid 0:cb44e2e9ec4c 1186 #endif
whismanoid 0:cb44e2e9ec4c 1187 #ifndef D13
whismanoid 0:cb44e2e9ec4c 1188 #define D13 P1_0
whismanoid 0:cb44e2e9ec4c 1189 #endif
whismanoid 0:cb44e2e9ec4c 1190 //--------------------------------------------------
whismanoid 0:cb44e2e9ec4c 1191 #elif defined(TARGET_MAX32600)
whismanoid 0:cb44e2e9ec4c 1192 // target MAX32600
whismanoid 0:cb44e2e9ec4c 1193 //
whismanoid 0:cb44e2e9ec4c 1194 #define analogIn4_IS_HIGH_RANGE_OF_analogIn0 0
whismanoid 0:cb44e2e9ec4c 1195 const float ADC_FULL_SCALE_VOLTAGE = 1.500;
whismanoid 0:cb44e2e9ec4c 1196 //
whismanoid 0:cb44e2e9ec4c 1197 //--------------------------------------------------
whismanoid 0:cb44e2e9ec4c 1198 #elif defined(TARGET_MAX32620FTHR)
whismanoid 0:cb44e2e9ec4c 1199 #warning "TARGET_MAX32620FTHR not previously tested; need to define pins..."
whismanoid 0:cb44e2e9ec4c 1200 #include "MAX32620FTHR.h"
whismanoid 0:cb44e2e9ec4c 1201 // Initialize I/O voltages on MAX32620FTHR board
whismanoid 0:cb44e2e9ec4c 1202 MAX32620FTHR fthr(MAX32620FTHR::VIO_3V3);
whismanoid 0:cb44e2e9ec4c 1203 //#define USE_LEDS 0 ?
whismanoid 0:cb44e2e9ec4c 1204 #define analogIn4_IS_HIGH_RANGE_OF_analogIn0 1
whismanoid 0:cb44e2e9ec4c 1205 #warning "TARGET_MAX32620FTHR not previously tested; need to verify ADC_FULL_SCALE_VOLTAGE..."
whismanoid 0:cb44e2e9ec4c 1206 const float ADC_FULL_SCALE_VOLTAGE = 1.200;
whismanoid 0:cb44e2e9ec4c 1207 //
whismanoid 0:cb44e2e9ec4c 1208 //--------------------------------------------------
whismanoid 19:5ff09c8e9daf 1209 #elif defined(TARGET_MAX32625PICO) || defined(TARGET_MAX40108DEMOP2U9)
whismanoid 15:37c83ec50ea0 1210 // #warning "TARGET_MAX32625PICO not previously tested; need to define pins..."
whismanoid 0:cb44e2e9ec4c 1211 #include "max32625pico.h"
whismanoid 0:cb44e2e9ec4c 1212 // configure MAX32625PICO VDDIOH mode, and I/O voltages for DIP pins and SWD pins
whismanoid 0:cb44e2e9ec4c 1213 MAX32625PICO pico(
whismanoid 13:184a08909405 1214 // Select source of higher-voltage logic high supply VDDIOH
whismanoid 0:cb44e2e9ec4c 1215 // vddioh_mode_t iohMode
whismanoid 0:cb44e2e9ec4c 1216 //~ MAX32625PICO::IOH_OFF, // No connections to VDDIOH
whismanoid 0:cb44e2e9ec4c 1217 //~ MAX32625PICO::IOH_DIP_IN, // VDDIOH input from DIP pin 1 (AIN0)
whismanoid 0:cb44e2e9ec4c 1218 //~ MAX32625PICO::IOH_SWD_IN, // VDDIOH input from SWD pin 1
whismanoid 0:cb44e2e9ec4c 1219 MAX32625PICO::IOH_3V3, // VDDIOH = 3.3V from local supply
whismanoid 0:cb44e2e9ec4c 1220 //~ MAX32625PICO::IOH_DIP_OUT, // VDDIOH = 3.3V output to DIP pin 1
whismanoid 0:cb44e2e9ec4c 1221 //~ MAX32625PICO::IOH_SWD_OUT, // VDDIOH = 3.3V output to SWD pin 1
whismanoid 0:cb44e2e9ec4c 1222 //
whismanoid 13:184a08909405 1223 // Digital I/O pin logic high voltage 1.8V or 3.3V
whismanoid 0:cb44e2e9ec4c 1224 // vio_t dipVio = MAX32625PICO::VIO_1V8 or MAX32625PICO::VIO_IOH
whismanoid 13:184a08909405 1225 MAX32625PICO::VIO_1V8, // 1.8V IO (local)
whismanoid 13:184a08909405 1226 //~ MAX32625PICO::VIO_IOH, // Use VDDIOH (from DIP pin 1, or SWD pin1, or local 3.3V)
whismanoid 0:cb44e2e9ec4c 1227 //
whismanoid 13:184a08909405 1228 // Software Debug logic high voltage (normally use VIO_IOH)
whismanoid 0:cb44e2e9ec4c 1229 // vio_t swdVio
whismanoid 0:cb44e2e9ec4c 1230 //~ MAX32625PICO::VIO_1V8 // 1.8V IO (local)
whismanoid 0:cb44e2e9ec4c 1231 MAX32625PICO::VIO_IOH // Use VDDIOH (from DIP pin 1, or SWD pin1, or local 3.3V)
whismanoid 0:cb44e2e9ec4c 1232 );
whismanoid 0:cb44e2e9ec4c 1233 //#define USE_LEDS 0 ?
whismanoid 0:cb44e2e9ec4c 1234 #define analogIn4_IS_HIGH_RANGE_OF_analogIn0 1
whismanoid 15:37c83ec50ea0 1235 // #warning "TARGET_MAX32625PICO not previously tested; need to verify ADC_FULL_SCALE_VOLTAGE..."
whismanoid 0:cb44e2e9ec4c 1236 const float ADC_FULL_SCALE_VOLTAGE = 1.200;
whismanoid 0:cb44e2e9ec4c 1237 //
whismanoid 0:cb44e2e9ec4c 1238 //--------------------------------------------------
whismanoid 0:cb44e2e9ec4c 1239 #elif defined(TARGET_NUCLEO_F446RE) || defined(TARGET_NUCLEO_F401RE)
whismanoid 0:cb44e2e9ec4c 1240 // TODO1: target NUCLEO_F446RE
whismanoid 0:cb44e2e9ec4c 1241 //
whismanoid 0:cb44e2e9ec4c 1242 // USER_BUTTON PC13
whismanoid 0:cb44e2e9ec4c 1243 // LED1 is shared with SPI_SCK on NUCLEO_F446RE PA_5, so don't use LED1.
whismanoid 0:cb44e2e9ec4c 1244 #define USE_LEDS 0
whismanoid 0:cb44e2e9ec4c 1245 // SPI spi(SPI_MOSI, SPI_MISO, SPI_SCK);
whismanoid 0:cb44e2e9ec4c 1246 // Serial serial(SERIAL_TX, SERIAL_RX);
whismanoid 0:cb44e2e9ec4c 1247 #define analogIn4_IS_HIGH_RANGE_OF_analogIn0 0
whismanoid 0:cb44e2e9ec4c 1248 const float ADC_FULL_SCALE_VOLTAGE = 3.300; // TODO: ADC_FULL_SCALE_VOLTAGE Pico?
whismanoid 0:cb44e2e9ec4c 1249 //
whismanoid 0:cb44e2e9ec4c 1250 //--------------------------------------------------
whismanoid 0:cb44e2e9ec4c 1251 #elif defined(TARGET_LPC1768)
whismanoid 0:cb44e2e9ec4c 1252 //--------------------------------------------------
whismanoid 0:cb44e2e9ec4c 1253 // TARGET=LPC1768 ARM Cortex-M3 100 MHz 512kB flash 64kB SRAM
whismanoid 0:cb44e2e9ec4c 1254 // +-------------[microUSB]-------------+
whismanoid 0:cb44e2e9ec4c 1255 // ______ | [ ] GND +3.3V VOUT [ ] | ______
whismanoid 0:cb44e2e9ec4c 1256 // ______ | [ ] 4.5V<VIN<9.0V +5.0V VU [ ] | ______
whismanoid 0:cb44e2e9ec4c 1257 // ______ | [ ] VB USB.IF- [ ] | ______
whismanoid 0:cb44e2e9ec4c 1258 // ______ | [ ] nR USB.IF+ [ ] | ______
whismanoid 0:cb44e2e9ec4c 1259 // digitalInOut0 | [ ] p5 MOSI ETHERNET.RD- [ ] | ______
whismanoid 0:cb44e2e9ec4c 1260 // digitalInOut1 | [ ] p6 MISO ETHERNET.RD+ [ ] | ______
whismanoid 0:cb44e2e9ec4c 1261 // digitalInOut2 | [ ] p7 SCLK ETHERNET.TD- [ ] | ______
whismanoid 0:cb44e2e9ec4c 1262 // digitalInOut3 | [ ] p8 ETHERNET.TD+ [ ] | ______
whismanoid 0:cb44e2e9ec4c 1263 // digitalInOut4 | [ ] p9 TX SDA USB.D- [ ] | ______
whismanoid 0:cb44e2e9ec4c 1264 // digitalInOut5 | [ ] p10 RX SCL USB.D+ [ ] | ______
whismanoid 0:cb44e2e9ec4c 1265 // digitalInOut6 | [ ] p11 MOSI CAN-RD p30 [ ] | digitalInOut13
whismanoid 0:cb44e2e9ec4c 1266 // digitalInOut7 | [ ] p12 MISO CAN-TD p29 [ ] | digitalInOut12
whismanoid 0:cb44e2e9ec4c 1267 // digitalInOut8 | [ ] p13 TX SCLK SDA TX p28 [ ] | digitalInOut11
whismanoid 0:cb44e2e9ec4c 1268 // digitalInOut9 | [ ] p14 RX SCL RX p27 [ ] | digitalInOut10
whismanoid 0:cb44e2e9ec4c 1269 // analogIn0 | [ ] p15 AIN0 3.3Vfs PWM1 p26 [ ] | pwmDriver1
whismanoid 0:cb44e2e9ec4c 1270 // analogIn1 | [ ] p16 AIN1 3.3Vfs PWM2 p25 [ ] | pwmDriver2
whismanoid 0:cb44e2e9ec4c 1271 // analogIn2 | [ ] p17 AIN2 3.3Vfs PWM3 p24 [ ] | pwmDriver3
whismanoid 0:cb44e2e9ec4c 1272 // analogIn3 | [ ] p18 AIN3 AOUT PWM4 p23 [ ] | pwmDriver4
whismanoid 0:cb44e2e9ec4c 1273 // analogIn4 | [ ] p19 AIN4 3.3Vfs PWM5 p22 [ ] | pwmDriver5
whismanoid 0:cb44e2e9ec4c 1274 // analogIn5 | [ ] p20 AIN5 3.3Vfs PWM6 p21 [ ] | pwmDriver6
whismanoid 0:cb44e2e9ec4c 1275 // +------------------------------------+
whismanoid 0:cb44e2e9ec4c 1276 // AIN6 = P0.3 = TGT_SBL_RXD?
whismanoid 0:cb44e2e9ec4c 1277 // AIN7 = P0.2 = TGT_SBL_TXD?
whismanoid 0:cb44e2e9ec4c 1278 //
whismanoid 0:cb44e2e9ec4c 1279 //--------------------------------------------------
whismanoid 0:cb44e2e9ec4c 1280 // LPC1768 board uses VREF = 3.300V +A3,3V thru L1 to bypass capacitor C14
whismanoid 0:cb44e2e9ec4c 1281 #define analogIn4_IS_HIGH_RANGE_OF_analogIn0 0
whismanoid 0:cb44e2e9ec4c 1282 const float ADC_FULL_SCALE_VOLTAGE = 3.300;
whismanoid 0:cb44e2e9ec4c 1283 #else // not defined(TARGET_LPC1768 etc.)
whismanoid 0:cb44e2e9ec4c 1284 //--------------------------------------------------
whismanoid 0:cb44e2e9ec4c 1285 // unknown target
whismanoid 0:cb44e2e9ec4c 1286 //--------------------------------------------------
whismanoid 0:cb44e2e9ec4c 1287 #endif // target definition
whismanoid 0:cb44e2e9ec4c 1288
whismanoid 0:cb44e2e9ec4c 1289
whismanoid 0:cb44e2e9ec4c 1290
whismanoid 0:cb44e2e9ec4c 1291
whismanoid 18:1235c17b451e 1292 // support LEDs as digital pins 91 92 93; WIP button as digital pin 90
whismanoid 18:1235c17b451e 1293 // move definiton of USE_LEDS earlier than find_digitalInOutPin()
whismanoid 18:1235c17b451e 1294 //--------------------------------------------------
whismanoid 18:1235c17b451e 1295 // Option to use LEDs to show status
whismanoid 18:1235c17b451e 1296 #ifndef USE_LEDS
whismanoid 18:1235c17b451e 1297 #define USE_LEDS 1
whismanoid 18:1235c17b451e 1298 #endif
whismanoid 18:1235c17b451e 1299 #if USE_LEDS
whismanoid 18:1235c17b451e 1300 #if defined(TARGET_MAX32630)
whismanoid 18:1235c17b451e 1301 # define LED_ON 0
whismanoid 18:1235c17b451e 1302 # define LED_OFF 1
whismanoid 18:1235c17b451e 1303 //--------------------------------------------------
whismanoid 18:1235c17b451e 1304 #elif defined(TARGET_MAX32625MBED)
whismanoid 18:1235c17b451e 1305 # define LED_ON 0
whismanoid 18:1235c17b451e 1306 # define LED_OFF 1
whismanoid 19:5ff09c8e9daf 1307 #elif defined(TARGET_MAX32625PICO) || defined(TARGET_MAX40108DEMOP2U9)
whismanoid 18:1235c17b451e 1308 # define LED_ON 0
whismanoid 18:1235c17b451e 1309 # define LED_OFF 1
whismanoid 18:1235c17b451e 1310 //--------------------------------------------------
whismanoid 18:1235c17b451e 1311 // TODO1: TARGET=MAX32625MBED ARM Cortex-M4F 96MHz 512kB Flash 160kB SRAM
whismanoid 18:1235c17b451e 1312 #elif defined(TARGET_LPC1768)
whismanoid 18:1235c17b451e 1313 # define LED_ON 1
whismanoid 18:1235c17b451e 1314 # define LED_OFF 0
whismanoid 18:1235c17b451e 1315 #else // not defined(TARGET_LPC1768 etc.)
whismanoid 18:1235c17b451e 1316 // USE_LEDS with some platform other than MAX32630, MAX32625MBED, LPC1768
whismanoid 18:1235c17b451e 1317 // bugfix for MAX32600MBED LED blink pattern: check if LED_ON/LED_OFF already defined
whismanoid 18:1235c17b451e 1318 # ifndef LED_ON
whismanoid 18:1235c17b451e 1319 # define LED_ON 0
whismanoid 18:1235c17b451e 1320 # endif
whismanoid 18:1235c17b451e 1321 # ifndef LED_OFF
whismanoid 18:1235c17b451e 1322 # define LED_OFF 1
whismanoid 18:1235c17b451e 1323 # endif
whismanoid 18:1235c17b451e 1324 //# define LED_ON 1
whismanoid 18:1235c17b451e 1325 //# define LED_OFF 0
whismanoid 18:1235c17b451e 1326 #endif // target definition
whismanoid 18:1235c17b451e 1327 // support LEDs as digital pins 91 92 93; WIP button as digital pin 90
whismanoid 18:1235c17b451e 1328 // support find_digitalInOutPin(91) return DigitalInOut of led1_RFailLED
whismanoid 18:1235c17b451e 1329 // support find_digitalInOutPin(92) return DigitalInOut of led2_GPassLED
whismanoid 18:1235c17b451e 1330 // support find_digitalInOutPin(93) return DigitalInOut of led3_BBusyLED
whismanoid 18:1235c17b451e 1331 // change led1/2/3/4 from DigitalOut to DigitalInOut
whismanoid 18:1235c17b451e 1332 DigitalInOut led1(LED1, PIN_INPUT, PullUp, LED_OFF); // MAX32630FTHR: LED1 = LED_RED
whismanoid 18:1235c17b451e 1333 DigitalInOut led2(LED2, PIN_INPUT, PullUp, LED_OFF); // MAX32630FTHR: LED2 = LED_GREEN
whismanoid 18:1235c17b451e 1334 DigitalInOut led3(LED3, PIN_INPUT, PullUp, LED_OFF); // MAX32630FTHR: LED3 = LED_BLUE
whismanoid 18:1235c17b451e 1335 DigitalInOut led4(LED4, PIN_INPUT, PullUp, LED_OFF);
whismanoid 18:1235c17b451e 1336 #else // USE_LEDS=0
whismanoid 18:1235c17b451e 1337 // issue #41 support Nucleo_F446RE
whismanoid 18:1235c17b451e 1338 // there are no LED indicators on the board, LED1 interferes with SPI;
whismanoid 18:1235c17b451e 1339 // but we still need placeholders led1 led2 led3 led4.
whismanoid 18:1235c17b451e 1340 // Declare DigitalInOut led1 led2 led3 led4 targeting safe pins.
whismanoid 18:1235c17b451e 1341 // PinName NC means NOT_CONNECTED; DigitalOut::is_connected() returns false
whismanoid 18:1235c17b451e 1342 # define LED_ON 0
whismanoid 18:1235c17b451e 1343 # define LED_OFF 1
whismanoid 18:1235c17b451e 1344 // change led1/2/3/4 from DigitalOut to DigitalInOut
whismanoid 18:1235c17b451e 1345 DigitalInOut led1(NC, PIN_INPUT, PullUp, LED_OFF);
whismanoid 18:1235c17b451e 1346 DigitalInOut led2(NC, PIN_INPUT, PullUp, LED_OFF);
whismanoid 18:1235c17b451e 1347 DigitalInOut led3(NC, PIN_INPUT, PullUp, LED_OFF);
whismanoid 18:1235c17b451e 1348 DigitalInOut led4(NC, PIN_INPUT, PullUp, LED_OFF);
whismanoid 18:1235c17b451e 1349 #endif // USE_LEDS
whismanoid 18:1235c17b451e 1350 #define led1_RFailLED led1
whismanoid 18:1235c17b451e 1351 #define led2_GPassLED led2
whismanoid 18:1235c17b451e 1352 #define led3_BBusyLED led3
whismanoid 18:1235c17b451e 1353
whismanoid 21:ac062a97a71d 1354 //--------------------------------------------------
whismanoid 21:ac062a97a71d 1355 // use BUTTON1 trigger some action
whismanoid 46:469d0061df5d 1356 // support for commands %B1! .. %B9!
whismanoid 21:ac062a97a71d 1357 #if defined(TARGET_MAX32630)
whismanoid 21:ac062a97a71d 1358 #define HAS_BUTTON1_DEMO_INTERRUPT 1
whismanoid 21:ac062a97a71d 1359 #define HAS_BUTTON2_DEMO 0
whismanoid 21:ac062a97a71d 1360 #define HAS_BUTTON2_DEMO_INTERRUPT 0
whismanoid 21:ac062a97a71d 1361 #elif defined(TARGET_MAX32625PICO) || defined(TARGET_MAX40108DEMOP2U9)
whismanoid 25:8a61cb34191d 1362 // #warning "TARGET_MAX32625PICO not previously tested; need to define buttons..."
whismanoid 21:ac062a97a71d 1363 #define HAS_BUTTON1_DEMO_INTERRUPT 1
whismanoid 24:032f3683cb2a 1364 #if MAX40108_DEMO
whismanoid 25:8a61cb34191d 1365 #if HAS_I2C
whismanoid 25:8a61cb34191d 1366 // MAX40108DEMOP2U9 HAS_I2C: J91.1=1V8 J91.2=P1_6(SDA) J91.3=P1_7(SCL) J91.4=GND
whismanoid 25:8a61cb34191d 1367 // MAX40108DEMOP2U9 HAS_I2C: move button2/button3 to inaccessible pins P3_6 and P3_7 if we need J91 for I2C
whismanoid 24:032f3683cb2a 1368 #define BUTTON2 P3_7
whismanoid 25:8a61cb34191d 1369 #else // HAS_I2C
whismanoid 25:8a61cb34191d 1370 // MAX40108DEMOP2U9 no HAS_I2C: option using J91 for button2 and button3 instead of I2C
whismanoid 25:8a61cb34191d 1371 // MAX40108DEMOP2U9 no HAS_I2C: header J91.1=1V8 J91.2=P1_6(button3/'%B3!') J91.3=P1_7(button2/'%B2!') J91.4=GND
whismanoid 25:8a61cb34191d 1372 // MAX40108DEMOP2U9 no HAS_I2C: avoid conflict between digital pins D16 D17 and button2/button3
whismanoid 25:8a61cb34191d 1373 #define BUTTON2 P1_7
whismanoid 25:8a61cb34191d 1374 #endif // HAS_I2C
whismanoid 24:032f3683cb2a 1375 #define HAS_BUTTON2_DEMO 0
whismanoid 24:032f3683cb2a 1376 #define HAS_BUTTON2_DEMO_INTERRUPT 1
whismanoid 25:8a61cb34191d 1377 #if HAS_I2C
whismanoid 25:8a61cb34191d 1378 // MAX40108DEMOP2U9 HAS_I2C: J91.1=1V8 J91.2=P1_6(SDA) J91.3=P1_7(SCL) J91.4=GND
whismanoid 25:8a61cb34191d 1379 // MAX40108DEMOP2U9 HAS_I2C: move button2/button3 to inaccessible pins P3_6 and P3_7 if we need J91 for I2C
whismanoid 24:032f3683cb2a 1380 #define BUTTON3 P3_6
whismanoid 25:8a61cb34191d 1381 #else // HAS_I2C
whismanoid 25:8a61cb34191d 1382 // MAX40108DEMOP2U9 no HAS_I2C: option using J91 for button2 and button3 instead of I2C
whismanoid 25:8a61cb34191d 1383 // MAX40108DEMOP2U9 no HAS_I2C: header J91.1=1V8 J91.2=P1_6(button3/'%B3!') J91.3=P1_7(button2/'%B2!') J91.4=GND
whismanoid 25:8a61cb34191d 1384 // MAX40108DEMOP2U9 no HAS_I2C: avoid conflict between digital pins D16 D17 and button2/button3
whismanoid 25:8a61cb34191d 1385 #define BUTTON3 P1_6
whismanoid 25:8a61cb34191d 1386 #endif // HAS_I2C
whismanoid 24:032f3683cb2a 1387 #define HAS_BUTTON3_DEMO 0
whismanoid 24:032f3683cb2a 1388 #define HAS_BUTTON3_DEMO_INTERRUPT 1
whismanoid 29:6a9edb6e973b 1389 // additional buttons are assigned to unused/unaccessible pins to avoid conflicts
whismanoid 29:6a9edb6e973b 1390 // activate using %B4! or action_button pin=4
whismanoid 29:6a9edb6e973b 1391 #define BUTTON4 P1_5
whismanoid 29:6a9edb6e973b 1392 #define HAS_BUTTON4_DEMO_INTERRUPT 1
whismanoid 29:6a9edb6e973b 1393 #define BUTTON5 P1_4
whismanoid 29:6a9edb6e973b 1394 #define HAS_BUTTON5_DEMO_INTERRUPT 1
whismanoid 29:6a9edb6e973b 1395 #define BUTTON6 P1_3
whismanoid 29:6a9edb6e973b 1396 #define HAS_BUTTON6_DEMO_INTERRUPT 1
whismanoid 29:6a9edb6e973b 1397 #define BUTTON7 P1_2
whismanoid 29:6a9edb6e973b 1398 #define HAS_BUTTON7_DEMO_INTERRUPT 1
whismanoid 29:6a9edb6e973b 1399 #define BUTTON8 P1_1
whismanoid 29:6a9edb6e973b 1400 #define HAS_BUTTON8_DEMO_INTERRUPT 1
whismanoid 29:6a9edb6e973b 1401 #define BUTTON9 P1_0
whismanoid 29:6a9edb6e973b 1402 #define HAS_BUTTON9_DEMO_INTERRUPT 1
whismanoid 24:032f3683cb2a 1403 #else // MAX40108_DEMO
whismanoid 21:ac062a97a71d 1404 #define HAS_BUTTON2_DEMO 0
whismanoid 21:ac062a97a71d 1405 #define HAS_BUTTON2_DEMO_INTERRUPT 0
whismanoid 29:6a9edb6e973b 1406 #endif // MAX40108_DEMO ---------------------------------
whismanoid 21:ac062a97a71d 1407 #elif defined(TARGET_MAX32625)
whismanoid 21:ac062a97a71d 1408 #define HAS_BUTTON1_DEMO_INTERRUPT 1
whismanoid 21:ac062a97a71d 1409 #define HAS_BUTTON2_DEMO_INTERRUPT 1
whismanoid 21:ac062a97a71d 1410 #elif defined(TARGET_MAX32620FTHR)
whismanoid 21:ac062a97a71d 1411 #warning "TARGET_MAX32620FTHR not previously tested; need to define buttons..."
whismanoid 21:ac062a97a71d 1412 #define BUTTON1 SW1
whismanoid 21:ac062a97a71d 1413 #define HAS_BUTTON1_DEMO_INTERRUPT 1
whismanoid 21:ac062a97a71d 1414 #define HAS_BUTTON2_DEMO 0
whismanoid 21:ac062a97a71d 1415 #define HAS_BUTTON2_DEMO_INTERRUPT 0
whismanoid 21:ac062a97a71d 1416 #elif defined(TARGET_NUCLEO_F446RE)
whismanoid 21:ac062a97a71d 1417 #define HAS_BUTTON1_DEMO_INTERRUPT 0
whismanoid 21:ac062a97a71d 1418 #define HAS_BUTTON2_DEMO_INTERRUPT 0
whismanoid 21:ac062a97a71d 1419 #elif defined(TARGET_NUCLEO_F401RE)
whismanoid 21:ac062a97a71d 1420 #define HAS_BUTTON1_DEMO_INTERRUPT 0
whismanoid 21:ac062a97a71d 1421 #define HAS_BUTTON2_DEMO_INTERRUPT 0
whismanoid 21:ac062a97a71d 1422 #else
whismanoid 21:ac062a97a71d 1423 #warning "target not previously tested; need to define buttons..."
whismanoid 21:ac062a97a71d 1424 #endif
whismanoid 21:ac062a97a71d 1425 //
whismanoid 21:ac062a97a71d 1426 #ifndef HAS_BUTTON1_DEMO
whismanoid 21:ac062a97a71d 1427 #define HAS_BUTTON1_DEMO 0
whismanoid 21:ac062a97a71d 1428 #endif
whismanoid 21:ac062a97a71d 1429 #ifndef HAS_BUTTON2_DEMO
whismanoid 21:ac062a97a71d 1430 #define HAS_BUTTON2_DEMO 0
whismanoid 21:ac062a97a71d 1431 #endif
whismanoid 24:032f3683cb2a 1432 #ifndef HAS_BUTTON3_DEMO
whismanoid 24:032f3683cb2a 1433 #define HAS_BUTTON3_DEMO 0
whismanoid 24:032f3683cb2a 1434 #endif
whismanoid 21:ac062a97a71d 1435 //
whismanoid 21:ac062a97a71d 1436 // avoid runtime error on button1 press [mbed-os-5.11]
whismanoid 21:ac062a97a71d 1437 // instead of using InterruptIn, use DigitalIn and poll in main while(1)
whismanoid 21:ac062a97a71d 1438 #ifndef HAS_BUTTON1_DEMO_INTERRUPT_POLLING
whismanoid 21:ac062a97a71d 1439 #define HAS_BUTTON1_DEMO_INTERRUPT_POLLING 1
whismanoid 21:ac062a97a71d 1440 #endif
whismanoid 21:ac062a97a71d 1441 //
whismanoid 21:ac062a97a71d 1442 #ifndef HAS_BUTTON1_DEMO_INTERRUPT
whismanoid 21:ac062a97a71d 1443 #define HAS_BUTTON1_DEMO_INTERRUPT 1
whismanoid 21:ac062a97a71d 1444 #endif
whismanoid 21:ac062a97a71d 1445 #ifndef HAS_BUTTON2_DEMO_INTERRUPT
whismanoid 21:ac062a97a71d 1446 #define HAS_BUTTON2_DEMO_INTERRUPT 1
whismanoid 21:ac062a97a71d 1447 #endif
whismanoid 21:ac062a97a71d 1448 //
whismanoid 21:ac062a97a71d 1449 #if HAS_BUTTON1_DEMO_INTERRUPT
whismanoid 21:ac062a97a71d 1450 # if HAS_BUTTON1_DEMO_INTERRUPT_POLLING
whismanoid 21:ac062a97a71d 1451 // avoid runtime error on button1 press [mbed-os-5.11]
whismanoid 21:ac062a97a71d 1452 // instead of using InterruptIn, use DigitalIn and poll in main while(1)
whismanoid 21:ac062a97a71d 1453 DigitalIn button1(BUTTON1);
whismanoid 21:ac062a97a71d 1454 # else
whismanoid 21:ac062a97a71d 1455 InterruptIn button1(BUTTON1);
whismanoid 21:ac062a97a71d 1456 # endif
whismanoid 21:ac062a97a71d 1457 #elif HAS_BUTTON1_DEMO
whismanoid 21:ac062a97a71d 1458 DigitalIn button1(BUTTON1);
whismanoid 21:ac062a97a71d 1459 #endif
whismanoid 21:ac062a97a71d 1460 #if HAS_BUTTON2_DEMO_INTERRUPT
whismanoid 21:ac062a97a71d 1461 # if HAS_BUTTON1_DEMO_INTERRUPT_POLLING
whismanoid 21:ac062a97a71d 1462 // avoid runtime error on button1 press [mbed-os-5.11]
whismanoid 21:ac062a97a71d 1463 // instead of using InterruptIn, use DigitalIn and poll in main while(1)
whismanoid 21:ac062a97a71d 1464 DigitalIn button2(BUTTON2);
whismanoid 21:ac062a97a71d 1465 # else
whismanoid 21:ac062a97a71d 1466 InterruptIn button2(BUTTON2);
whismanoid 21:ac062a97a71d 1467 # endif
whismanoid 21:ac062a97a71d 1468 #elif HAS_BUTTON2_DEMO
whismanoid 21:ac062a97a71d 1469 DigitalIn button2(BUTTON2);
whismanoid 21:ac062a97a71d 1470 #endif
whismanoid 24:032f3683cb2a 1471 #if HAS_BUTTON3_DEMO_INTERRUPT
whismanoid 24:032f3683cb2a 1472 # if HAS_BUTTON1_DEMO_INTERRUPT_POLLING
whismanoid 24:032f3683cb2a 1473 // avoid runtime error on button1 press [mbed-os-5.11]
whismanoid 24:032f3683cb2a 1474 // instead of using InterruptIn, use DigitalIn and poll in main while(1)
whismanoid 24:032f3683cb2a 1475 DigitalIn button3(BUTTON3);
whismanoid 24:032f3683cb2a 1476 # else
whismanoid 24:032f3683cb2a 1477 InterruptIn button3(BUTTON3);
whismanoid 24:032f3683cb2a 1478 # endif
whismanoid 24:032f3683cb2a 1479 #elif HAS_BUTTON3_DEMO
whismanoid 24:032f3683cb2a 1480 DigitalIn button3(BUTTON3);
whismanoid 24:032f3683cb2a 1481 #endif
whismanoid 21:ac062a97a71d 1482
whismanoid 0:cb44e2e9ec4c 1483 // uncrustify-0.66.1 *INDENT-OFF*
whismanoid 0:cb44e2e9ec4c 1484 //--------------------------------------------------
whismanoid 0:cb44e2e9ec4c 1485 // Declare the DigitalInOut GPIO pins
whismanoid 0:cb44e2e9ec4c 1486 // Optional digitalInOut support. If there is only one it should be digitalInOut1.
whismanoid 0:cb44e2e9ec4c 1487 // D) Digital High/Low/Input Pin
whismanoid 0:cb44e2e9ec4c 1488 #if defined(TARGET_MAX32630)
whismanoid 0:cb44e2e9ec4c 1489 // +-------------[microUSB]-------------+
whismanoid 0:cb44e2e9ec4c 1490 // | J1 MAX32630FTHR J2 |
whismanoid 0:cb44e2e9ec4c 1491 // | [ ] RST GND [ ] |
whismanoid 0:cb44e2e9ec4c 1492 // | [ ] 3V3 BAT+[ ] |
whismanoid 0:cb44e2e9ec4c 1493 // | [ ] 1V8 reset SW1 |
whismanoid 0:cb44e2e9ec4c 1494 // | [ ] GND J4 J3 |
whismanoid 0:cb44e2e9ec4c 1495 // | [ ] AIN_0 1.2Vfs (bat) SYS [ ] |
whismanoid 0:cb44e2e9ec4c 1496 // | [ ] AIN_1 1.2Vfs PWR [ ] |
whismanoid 0:cb44e2e9ec4c 1497 // | [ ] AIN_2 1.2Vfs +5V VBUS [ ] |
whismanoid 0:cb44e2e9ec4c 1498 // | [ ] AIN_3 1.2Vfs 1-WIRE P4_0 [ ] | dig9
whismanoid 0:cb44e2e9ec4c 1499 // dig10 | [x] P5_7 SDA2 SRN P5_6 [ ] | dig8
whismanoid 0:cb44e2e9ec4c 1500 // dig11 | [x] P6_0 SCL2 SDIO3 P5_5 [ ] | dig7
whismanoid 0:cb44e2e9ec4c 1501 // dig12 | [x] P5_0 SCLK SDIO2 P5_4 [ ] | dig6
whismanoid 0:cb44e2e9ec4c 1502 // dig13 | [x] P5_1 MOSI SSEL P5_3 [x] | dig5
whismanoid 0:cb44e2e9ec4c 1503 // dig14 | [ ] P5_2 MISO RTS P3_3 [ ] | dig4
whismanoid 0:cb44e2e9ec4c 1504 // dig15 | [ ] P3_0 RX CTS P3_2 [ ] | dig3
whismanoid 0:cb44e2e9ec4c 1505 // dig0 | [ ] P3_1 TX SCL P3_5 [x] | dig2
whismanoid 0:cb44e2e9ec4c 1506 // | [ ] GND SDA P3_4 [x] | dig1
whismanoid 0:cb44e2e9ec4c 1507 // +------------------------------------+
whismanoid 0:cb44e2e9ec4c 1508 #define HAS_digitalInOut0 1 // P3_1 TARGET_MAX32630 J1.15
whismanoid 0:cb44e2e9ec4c 1509 #define HAS_digitalInOut1 1 // P3_4 TARGET_MAX32630 J3.12
whismanoid 0:cb44e2e9ec4c 1510 #define HAS_digitalInOut2 1 // P3_5 TARGET_MAX32630 J3.11
whismanoid 0:cb44e2e9ec4c 1511 #define HAS_digitalInOut3 1 // P3_2 TARGET_MAX32630 J3.10
whismanoid 0:cb44e2e9ec4c 1512 #define HAS_digitalInOut4 1 // P3_3 TARGET_MAX32630 J3.9
whismanoid 0:cb44e2e9ec4c 1513 #define HAS_digitalInOut5 1 // P5_3 TARGET_MAX32630 J3.8
whismanoid 0:cb44e2e9ec4c 1514 #define HAS_digitalInOut6 1 // P5_4 TARGET_MAX32630 J3.7
whismanoid 0:cb44e2e9ec4c 1515 #define HAS_digitalInOut7 1 // P5_5 TARGET_MAX32630 J3.6
whismanoid 0:cb44e2e9ec4c 1516 #define HAS_digitalInOut8 1 // P5_6 TARGET_MAX32630 J3.5
whismanoid 0:cb44e2e9ec4c 1517 #define HAS_digitalInOut9 1 // P4_0 TARGET_MAX32630 J3.4
whismanoid 0:cb44e2e9ec4c 1518 #if HAS_I2C
whismanoid 0:cb44e2e9ec4c 1519 // avoid resource conflict between P5_7, P6_0 I2C and DigitalInOut
whismanoid 0:cb44e2e9ec4c 1520 #define HAS_digitalInOut10 0 // P5_7 TARGET_MAX32630 J1.9
whismanoid 0:cb44e2e9ec4c 1521 #define HAS_digitalInOut11 0 // P6_0 TARGET_MAX32630 J1.10
whismanoid 0:cb44e2e9ec4c 1522 #else // HAS_I2C
whismanoid 0:cb44e2e9ec4c 1523 #define HAS_digitalInOut10 1 // P5_7 TARGET_MAX32630 J1.9
whismanoid 0:cb44e2e9ec4c 1524 #define HAS_digitalInOut11 1 // P6_0 TARGET_MAX32630 J1.10
whismanoid 0:cb44e2e9ec4c 1525 #endif // HAS_I2C
whismanoid 0:cb44e2e9ec4c 1526 #if HAS_SPI
whismanoid 0:cb44e2e9ec4c 1527 // avoid resource conflict between P5_0, P5_1, P5_2 SPI and DigitalInOut
whismanoid 0:cb44e2e9ec4c 1528 #define HAS_digitalInOut12 0 // P5_0 TARGET_MAX32630 J1.11
whismanoid 0:cb44e2e9ec4c 1529 #define HAS_digitalInOut13 0 // P5_1 TARGET_MAX32630 J1.12
whismanoid 0:cb44e2e9ec4c 1530 #define HAS_digitalInOut14 0 // P5_2 TARGET_MAX32630 J1.13
whismanoid 0:cb44e2e9ec4c 1531 #define HAS_digitalInOut15 0 // P3_0 TARGET_MAX32630 J1.14
whismanoid 0:cb44e2e9ec4c 1532 #else // HAS_SPI
whismanoid 0:cb44e2e9ec4c 1533 #define HAS_digitalInOut12 1 // P5_0 TARGET_MAX32630 J1.11
whismanoid 0:cb44e2e9ec4c 1534 #define HAS_digitalInOut13 1 // P5_1 TARGET_MAX32630 J1.12
whismanoid 0:cb44e2e9ec4c 1535 #define HAS_digitalInOut14 1 // P5_2 TARGET_MAX32630 J1.13
whismanoid 0:cb44e2e9ec4c 1536 #define HAS_digitalInOut15 1 // P3_0 TARGET_MAX32630 J1.14
whismanoid 0:cb44e2e9ec4c 1537 #endif // HAS_SPI
whismanoid 0:cb44e2e9ec4c 1538 #if HAS_digitalInOut0
whismanoid 0:cb44e2e9ec4c 1539 DigitalInOut digitalInOut0(P3_1, PIN_INPUT, PullUp, 1); // P3_1 TARGET_MAX32630 J1.15
whismanoid 0:cb44e2e9ec4c 1540 #endif
whismanoid 0:cb44e2e9ec4c 1541 #if HAS_digitalInOut1
whismanoid 0:cb44e2e9ec4c 1542 DigitalInOut digitalInOut1(P3_4, PIN_INPUT, PullUp, 1); // P3_4 TARGET_MAX32630 J3.12
whismanoid 0:cb44e2e9ec4c 1543 #endif
whismanoid 0:cb44e2e9ec4c 1544 #if HAS_digitalInOut2
whismanoid 0:cb44e2e9ec4c 1545 DigitalInOut digitalInOut2(P3_5, PIN_INPUT, PullUp, 1); // P3_5 TARGET_MAX32630 J3.11
whismanoid 0:cb44e2e9ec4c 1546 #endif
whismanoid 0:cb44e2e9ec4c 1547 #if HAS_digitalInOut3
whismanoid 0:cb44e2e9ec4c 1548 DigitalInOut digitalInOut3(P3_2, PIN_INPUT, PullUp, 1); // P3_2 TARGET_MAX32630 J3.10
whismanoid 0:cb44e2e9ec4c 1549 #endif
whismanoid 0:cb44e2e9ec4c 1550 #if HAS_digitalInOut4
whismanoid 0:cb44e2e9ec4c 1551 DigitalInOut digitalInOut4(P3_3, PIN_INPUT, PullUp, 1); // P3_3 TARGET_MAX32630 J3.9
whismanoid 0:cb44e2e9ec4c 1552 #endif
whismanoid 0:cb44e2e9ec4c 1553 #if HAS_digitalInOut5
whismanoid 0:cb44e2e9ec4c 1554 DigitalInOut digitalInOut5(P5_3, PIN_INPUT, PullUp, 1); // P5_3 TARGET_MAX32630 J3.8
whismanoid 0:cb44e2e9ec4c 1555 #endif
whismanoid 0:cb44e2e9ec4c 1556 #if HAS_digitalInOut6
whismanoid 0:cb44e2e9ec4c 1557 DigitalInOut digitalInOut6(P5_4, PIN_INPUT, PullUp, 1); // P5_4 TARGET_MAX32630 J3.7
whismanoid 0:cb44e2e9ec4c 1558 #endif
whismanoid 0:cb44e2e9ec4c 1559 #if HAS_digitalInOut7
whismanoid 0:cb44e2e9ec4c 1560 DigitalInOut digitalInOut7(P5_5, PIN_INPUT, PullUp, 1); // P5_5 TARGET_MAX32630 J3.6
whismanoid 0:cb44e2e9ec4c 1561 #endif
whismanoid 0:cb44e2e9ec4c 1562 #if HAS_digitalInOut8
whismanoid 0:cb44e2e9ec4c 1563 DigitalInOut digitalInOut8(P5_6, PIN_INPUT, PullUp, 1); // P5_6 TARGET_MAX32630 J3.5
whismanoid 0:cb44e2e9ec4c 1564 #endif
whismanoid 0:cb44e2e9ec4c 1565 #if HAS_digitalInOut9
whismanoid 0:cb44e2e9ec4c 1566 DigitalInOut digitalInOut9(P4_0, PIN_INPUT, PullUp, 1); // P4_0 TARGET_MAX32630 J3.4
whismanoid 0:cb44e2e9ec4c 1567 #endif
whismanoid 0:cb44e2e9ec4c 1568 #if HAS_digitalInOut10
whismanoid 0:cb44e2e9ec4c 1569 DigitalInOut digitalInOut10(P5_7, PIN_INPUT, PullUp, 1); // P5_7 TARGET_MAX32630 J1.9
whismanoid 0:cb44e2e9ec4c 1570 #endif
whismanoid 0:cb44e2e9ec4c 1571 #if HAS_digitalInOut11
whismanoid 0:cb44e2e9ec4c 1572 DigitalInOut digitalInOut11(P6_0, PIN_INPUT, PullUp, 1); // P6_0 TARGET_MAX32630 J1.10
whismanoid 0:cb44e2e9ec4c 1573 #endif
whismanoid 0:cb44e2e9ec4c 1574 #if HAS_digitalInOut12
whismanoid 0:cb44e2e9ec4c 1575 DigitalInOut digitalInOut12(P5_0, PIN_INPUT, PullUp, 1); // P5_0 TARGET_MAX32630 J1.11
whismanoid 0:cb44e2e9ec4c 1576 #endif
whismanoid 0:cb44e2e9ec4c 1577 #if HAS_digitalInOut13
whismanoid 0:cb44e2e9ec4c 1578 DigitalInOut digitalInOut13(P5_1, PIN_INPUT, PullUp, 1); // P5_1 TARGET_MAX32630 J1.12
whismanoid 0:cb44e2e9ec4c 1579 #endif
whismanoid 0:cb44e2e9ec4c 1580 #if HAS_digitalInOut14
whismanoid 0:cb44e2e9ec4c 1581 DigitalInOut digitalInOut14(P5_2, PIN_INPUT, PullUp, 1); // P5_2 TARGET_MAX32630 J1.13
whismanoid 0:cb44e2e9ec4c 1582 #endif
whismanoid 0:cb44e2e9ec4c 1583 #if HAS_digitalInOut15
whismanoid 0:cb44e2e9ec4c 1584 DigitalInOut digitalInOut15(P3_0, PIN_INPUT, PullUp, 1); // P3_0 TARGET_MAX32630 J1.14
whismanoid 0:cb44e2e9ec4c 1585 #endif
whismanoid 0:cb44e2e9ec4c 1586 //--------------------------------------------------
whismanoid 0:cb44e2e9ec4c 1587 #elif defined(TARGET_MAX32625MBED)
whismanoid 0:cb44e2e9ec4c 1588 // TARGET=MAX32625MBED ARM Cortex-M4F 96MHz 512kB Flash 160kB SRAM
whismanoid 0:cb44e2e9ec4c 1589 // +-------------------------------------+
whismanoid 0:cb44e2e9ec4c 1590 // | MAX32625MBED Arduino UNO header |
whismanoid 0:cb44e2e9ec4c 1591 // | |
whismanoid 0:cb44e2e9ec4c 1592 // | A5/SCL[ ] | P1_7 dig15
whismanoid 0:cb44e2e9ec4c 1593 // | A4/SDA[ ] | P1_6 dig14
whismanoid 0:cb44e2e9ec4c 1594 // | AREF=N/C[ ] |
whismanoid 0:cb44e2e9ec4c 1595 // | GND[ ] |
whismanoid 0:cb44e2e9ec4c 1596 // | [ ]N/C SCK/13[ ] | P1_0 dig13
whismanoid 0:cb44e2e9ec4c 1597 // | [ ]IOREF=3V3 MISO/12[ ] | P1_2 dig12
whismanoid 0:cb44e2e9ec4c 1598 // | [ ]RST MOSI/11[ ]~| P1_1 dig11
whismanoid 0:cb44e2e9ec4c 1599 // | [ ]3V3 CS/10[ ]~| P1_3 dig10
whismanoid 0:cb44e2e9ec4c 1600 // | [ ]5V0 9[ ]~| P1_5 dig9
whismanoid 0:cb44e2e9ec4c 1601 // | [ ]GND 8[ ] | P1_4 dig8
whismanoid 0:cb44e2e9ec4c 1602 // | [ ]GND |
whismanoid 0:cb44e2e9ec4c 1603 // | [ ]Vin 7[ ] | P0_7 dig7
whismanoid 0:cb44e2e9ec4c 1604 // | 6[ ]~| P0_6 dig6
whismanoid 0:cb44e2e9ec4c 1605 // AIN_0 | [ ]A0 5[ ]~| P0_5 dig5
whismanoid 0:cb44e2e9ec4c 1606 // AIN_1 | [ ]A1 4[ ] | P0_4 dig4
whismanoid 0:cb44e2e9ec4c 1607 // AIN_2 | [ ]A2 INT1/3[ ]~| P0_3 dig3
whismanoid 0:cb44e2e9ec4c 1608 // AIN_3 | [ ]A3 INT0/2[ ] | P0_2 dig2
whismanoid 0:cb44e2e9ec4c 1609 // dig16 P3_4 | [ ]A4/SDA RST SCK MISO TX>1[ ] | P0_1 dig1
whismanoid 0:cb44e2e9ec4c 1610 // dig17 P3_5 | [ ]A5/SCL [ ] [ ] [ ] RX<0[ ] | P0_0 dig0
whismanoid 0:cb44e2e9ec4c 1611 // | [ ] [ ] [ ] |
whismanoid 0:cb44e2e9ec4c 1612 // | UNO_R3 GND MOSI 5V ____________/
whismanoid 0:cb44e2e9ec4c 1613 // \_______________________/
whismanoid 0:cb44e2e9ec4c 1614 //
whismanoid 0:cb44e2e9ec4c 1615 #define HAS_digitalInOut0 1 // P0_0 TARGET_MAX32625MBED D0
whismanoid 0:cb44e2e9ec4c 1616 #define HAS_digitalInOut1 1 // P0_1 TARGET_MAX32625MBED D1
whismanoid 0:cb44e2e9ec4c 1617 #if APPLICATION_MAX11131
whismanoid 0:cb44e2e9ec4c 1618 #define HAS_digitalInOut2 0 // P0_2 TARGET_MAX32625MBED D2 -- MAX11131 EOC DigitalIn
whismanoid 0:cb44e2e9ec4c 1619 #else
whismanoid 0:cb44e2e9ec4c 1620 #define HAS_digitalInOut2 1 // P0_2 TARGET_MAX32625MBED D2
whismanoid 0:cb44e2e9ec4c 1621 #endif
whismanoid 0:cb44e2e9ec4c 1622 #define HAS_digitalInOut3 1 // P0_3 TARGET_MAX32625MBED D3
whismanoid 0:cb44e2e9ec4c 1623 #define HAS_digitalInOut4 1 // P0_4 TARGET_MAX32625MBED D4
whismanoid 0:cb44e2e9ec4c 1624 #define HAS_digitalInOut5 1 // P0_5 TARGET_MAX32625MBED D5
whismanoid 0:cb44e2e9ec4c 1625 #define HAS_digitalInOut6 1 // P0_6 TARGET_MAX32625MBED D6
whismanoid 0:cb44e2e9ec4c 1626 #define HAS_digitalInOut7 1 // P0_7 TARGET_MAX32625MBED D7
whismanoid 0:cb44e2e9ec4c 1627 #define HAS_digitalInOut8 1 // P1_4 TARGET_MAX32625MBED D8
whismanoid 0:cb44e2e9ec4c 1628 #if APPLICATION_MAX11131
whismanoid 0:cb44e2e9ec4c 1629 #define HAS_digitalInOut9 0 // P1_5 TARGET_MAX32625MBED D9 -- MAX11131 CNVST DigitalOut
whismanoid 0:cb44e2e9ec4c 1630 #else
whismanoid 0:cb44e2e9ec4c 1631 #define HAS_digitalInOut9 1 // P1_5 TARGET_MAX32625MBED D9
whismanoid 0:cb44e2e9ec4c 1632 #endif
whismanoid 0:cb44e2e9ec4c 1633 #if HAS_SPI
whismanoid 0:cb44e2e9ec4c 1634 // avoid resource conflict between P5_0, P5_1, P5_2 SPI and DigitalInOut
whismanoid 0:cb44e2e9ec4c 1635 #define HAS_digitalInOut10 0 // P1_3 TARGET_MAX32635MBED CS/10
whismanoid 0:cb44e2e9ec4c 1636 #define HAS_digitalInOut11 0 // P1_1 TARGET_MAX32635MBED MOSI/11
whismanoid 0:cb44e2e9ec4c 1637 #define HAS_digitalInOut12 0 // P1_2 TARGET_MAX32635MBED MISO/12
whismanoid 0:cb44e2e9ec4c 1638 #define HAS_digitalInOut13 0 // P1_0 TARGET_MAX32635MBED SCK/13
whismanoid 0:cb44e2e9ec4c 1639 #else // HAS_SPI
whismanoid 0:cb44e2e9ec4c 1640 #define HAS_digitalInOut10 1 // P1_3 TARGET_MAX32635MBED CS/10
whismanoid 0:cb44e2e9ec4c 1641 #define HAS_digitalInOut11 1 // P1_1 TARGET_MAX32635MBED MOSI/11
whismanoid 0:cb44e2e9ec4c 1642 #define HAS_digitalInOut12 1 // P1_2 TARGET_MAX32635MBED MISO/12
whismanoid 0:cb44e2e9ec4c 1643 #define HAS_digitalInOut13 1 // P1_0 TARGET_MAX32635MBED SCK/13
whismanoid 0:cb44e2e9ec4c 1644 #endif // HAS_SPI
whismanoid 0:cb44e2e9ec4c 1645 #if HAS_I2C
whismanoid 0:cb44e2e9ec4c 1646 // avoid resource conflict between P5_7, P6_0 I2C and DigitalInOut
whismanoid 0:cb44e2e9ec4c 1647 #define HAS_digitalInOut14 0 // P1_6 TARGET_MAX32635MBED A4/SDA (10pin digital connector)
whismanoid 0:cb44e2e9ec4c 1648 #define HAS_digitalInOut15 0 // P1_7 TARGET_MAX32635MBED A5/SCL (10pin digital connector)
whismanoid 0:cb44e2e9ec4c 1649 #define HAS_digitalInOut16 0 // P3_4 TARGET_MAX32635MBED A4/SDA (6pin analog connector)
whismanoid 0:cb44e2e9ec4c 1650 #define HAS_digitalInOut17 0 // P3_5 TARGET_MAX32635MBED A5/SCL (6pin analog connector)
whismanoid 0:cb44e2e9ec4c 1651 #else // HAS_I2C
whismanoid 0:cb44e2e9ec4c 1652 #define HAS_digitalInOut14 1 // P1_6 TARGET_MAX32635MBED A4/SDA (10pin digital connector)
whismanoid 0:cb44e2e9ec4c 1653 #define HAS_digitalInOut15 1 // P1_7 TARGET_MAX32635MBED A5/SCL (10pin digital connector)
whismanoid 0:cb44e2e9ec4c 1654 #define HAS_digitalInOut16 1 // P3_4 TARGET_MAX32635MBED A4/SDA (6pin analog connector)
whismanoid 0:cb44e2e9ec4c 1655 #define HAS_digitalInOut17 1 // P3_5 TARGET_MAX32635MBED A5/SCL (6pin analog connector)
whismanoid 0:cb44e2e9ec4c 1656 #endif // HAS_I2C
whismanoid 0:cb44e2e9ec4c 1657 #if HAS_digitalInOut0
whismanoid 0:cb44e2e9ec4c 1658 DigitalInOut digitalInOut0(P0_0, PIN_INPUT, PullUp, 1); // P0_0 TARGET_MAX32625MBED D0
whismanoid 0:cb44e2e9ec4c 1659 #endif
whismanoid 0:cb44e2e9ec4c 1660 #if HAS_digitalInOut1
whismanoid 0:cb44e2e9ec4c 1661 DigitalInOut digitalInOut1(P0_1, PIN_INPUT, PullUp, 1); // P0_1 TARGET_MAX32625MBED D1
whismanoid 0:cb44e2e9ec4c 1662 #endif
whismanoid 0:cb44e2e9ec4c 1663 #if HAS_digitalInOut2
whismanoid 0:cb44e2e9ec4c 1664 DigitalInOut digitalInOut2(P0_2, PIN_INPUT, PullUp, 1); // P0_2 TARGET_MAX32625MBED D2
whismanoid 0:cb44e2e9ec4c 1665 #endif
whismanoid 0:cb44e2e9ec4c 1666 #if HAS_digitalInOut3
whismanoid 0:cb44e2e9ec4c 1667 DigitalInOut digitalInOut3(P0_3, PIN_INPUT, PullUp, 1); // P0_3 TARGET_MAX32625MBED D3
whismanoid 0:cb44e2e9ec4c 1668 #endif
whismanoid 0:cb44e2e9ec4c 1669 #if HAS_digitalInOut4
whismanoid 0:cb44e2e9ec4c 1670 DigitalInOut digitalInOut4(P0_4, PIN_INPUT, PullUp, 1); // P0_4 TARGET_MAX32625MBED D4
whismanoid 0:cb44e2e9ec4c 1671 #endif
whismanoid 0:cb44e2e9ec4c 1672 #if HAS_digitalInOut5
whismanoid 0:cb44e2e9ec4c 1673 DigitalInOut digitalInOut5(P0_5, PIN_INPUT, PullUp, 1); // P0_5 TARGET_MAX32625MBED D5
whismanoid 0:cb44e2e9ec4c 1674 #endif
whismanoid 0:cb44e2e9ec4c 1675 #if HAS_digitalInOut6
whismanoid 0:cb44e2e9ec4c 1676 DigitalInOut digitalInOut6(P0_6, PIN_INPUT, PullUp, 1); // P0_6 TARGET_MAX32625MBED D6
whismanoid 0:cb44e2e9ec4c 1677 #endif
whismanoid 0:cb44e2e9ec4c 1678 #if HAS_digitalInOut7
whismanoid 0:cb44e2e9ec4c 1679 DigitalInOut digitalInOut7(P0_7, PIN_INPUT, PullUp, 1); // P0_7 TARGET_MAX32625MBED D7
whismanoid 0:cb44e2e9ec4c 1680 #endif
whismanoid 0:cb44e2e9ec4c 1681 #if HAS_digitalInOut8
whismanoid 0:cb44e2e9ec4c 1682 DigitalInOut digitalInOut8(P1_4, PIN_INPUT, PullUp, 1); // P1_4 TARGET_MAX32625MBED D8
whismanoid 0:cb44e2e9ec4c 1683 #endif
whismanoid 0:cb44e2e9ec4c 1684 #if HAS_digitalInOut9
whismanoid 0:cb44e2e9ec4c 1685 DigitalInOut digitalInOut9(P1_5, PIN_INPUT, PullUp, 1); // P1_5 TARGET_MAX32625MBED D9
whismanoid 0:cb44e2e9ec4c 1686 #endif
whismanoid 0:cb44e2e9ec4c 1687 #if HAS_digitalInOut10
whismanoid 0:cb44e2e9ec4c 1688 DigitalInOut digitalInOut10(P1_3, PIN_INPUT, PullUp, 1); // P1_3 TARGET_MAX32635MBED CS/10
whismanoid 0:cb44e2e9ec4c 1689 #endif
whismanoid 0:cb44e2e9ec4c 1690 #if HAS_digitalInOut11
whismanoid 0:cb44e2e9ec4c 1691 DigitalInOut digitalInOut11(P1_1, PIN_INPUT, PullUp, 1); // P1_1 TARGET_MAX32635MBED MOSI/11
whismanoid 0:cb44e2e9ec4c 1692 #endif
whismanoid 0:cb44e2e9ec4c 1693 #if HAS_digitalInOut12
whismanoid 0:cb44e2e9ec4c 1694 DigitalInOut digitalInOut12(P1_2, PIN_INPUT, PullUp, 1); // P1_2 TARGET_MAX32635MBED MISO/12
whismanoid 0:cb44e2e9ec4c 1695 #endif
whismanoid 0:cb44e2e9ec4c 1696 #if HAS_digitalInOut13
whismanoid 0:cb44e2e9ec4c 1697 DigitalInOut digitalInOut13(P1_0, PIN_INPUT, PullUp, 1); // P1_0 TARGET_MAX32635MBED SCK/13
whismanoid 0:cb44e2e9ec4c 1698 #endif
whismanoid 0:cb44e2e9ec4c 1699 #if HAS_digitalInOut14
whismanoid 0:cb44e2e9ec4c 1700 // Ensure that the unused I2C pins do not interfere with analog inputs A4 and A5
whismanoid 0:cb44e2e9ec4c 1701 // DigitalInOut mode can be one of PullUp, PullDown, PullNone, OpenDrain
whismanoid 0:cb44e2e9ec4c 1702 DigitalInOut digitalInOut14(P1_6, PIN_INPUT, OpenDrain, 1); // P1_6 TARGET_MAX32635MBED A4/SDA (10pin digital connector)
whismanoid 0:cb44e2e9ec4c 1703 #endif
whismanoid 0:cb44e2e9ec4c 1704 #if HAS_digitalInOut15
whismanoid 0:cb44e2e9ec4c 1705 // Ensure that the unused I2C pins do not interfere with analog inputs A4 and A5
whismanoid 0:cb44e2e9ec4c 1706 DigitalInOut digitalInOut15(P1_7, PIN_INPUT, OpenDrain, 1); // P1_7 TARGET_MAX32635MBED A5/SCL (10pin digital connector)
whismanoid 0:cb44e2e9ec4c 1707 #endif
whismanoid 0:cb44e2e9ec4c 1708 #if HAS_digitalInOut16
whismanoid 0:cb44e2e9ec4c 1709 // Ensure that the unused I2C pins do not interfere with analog inputs A4 and A5
whismanoid 0:cb44e2e9ec4c 1710 // DigitalInOut mode can be one of PullUp, PullDown, PullNone, OpenDrain
whismanoid 0:cb44e2e9ec4c 1711 // PullUp-->3.4V, PullDown-->1.7V, PullNone-->3.5V, OpenDrain-->0.00V
whismanoid 0:cb44e2e9ec4c 1712 DigitalInOut digitalInOut16(P3_4, PIN_INPUT, OpenDrain, 0); // P3_4 TARGET_MAX32635MBED A4/SDA (6pin analog connector)
whismanoid 0:cb44e2e9ec4c 1713 #endif
whismanoid 0:cb44e2e9ec4c 1714 #if HAS_digitalInOut17
whismanoid 0:cb44e2e9ec4c 1715 // Ensure that the unused I2C pins do not interfere with analog inputs A4 and A5
whismanoid 0:cb44e2e9ec4c 1716 DigitalInOut digitalInOut17(P3_5, PIN_INPUT, OpenDrain, 0); // P3_5 TARGET_MAX32635MBED A5/SCL (6pin analog connector)
whismanoid 0:cb44e2e9ec4c 1717 #endif
whismanoid 0:cb44e2e9ec4c 1718 //--------------------------------------------------
whismanoid 19:5ff09c8e9daf 1719 #elif defined(TARGET_MAX32625PICO) || defined(TARGET_MAX40108DEMOP2U9)
whismanoid 15:37c83ec50ea0 1720 // TARGET=MAX32625PICO ARM Cortex-M4F 96MHz 512kB Flash 160kB SRAM
whismanoid 15:37c83ec50ea0 1721 // +-------------[microUSB]-------------+
whismanoid 15:37c83ec50ea0 1722 // | [27]D+ D-[26] |
whismanoid 15:37c83ec50ea0 1723 // | |
whismanoid 15:37c83ec50ea0 1724 // | [BUTTON P2_7] |
whismanoid 15:37c83ec50ea0 1725 // | P2_4 LED_R P2_5 LED_G P2_6 LED_B |
whismanoid 15:37c83ec50ea0 1726 // | |
whismanoid 15:37c83ec50ea0 1727 // 1V8 | [11] 1.8V MAX32625PICO GND [10] | GND
whismanoid 15:37c83ec50ea0 1728 // 3V3 | [12] 3.3V +5V [09] | 5V0
whismanoid 15:37c83ec50ea0 1729 // SPI CS D7 | [13] P0_7 CS s-ssel P4_7 [08] | D15
whismanoid 15:37c83ec50ea0 1730 // SPI MISO D6 | [14] P0_6 MISO s-miso P4_6 [07] | D14
whismanoid 15:37c83ec50ea0 1731 // SPI MOSI D5 | [15] P0_5 MOSI s-mosi P4_5 [06] | D13
whismanoid 15:37c83ec50ea0 1732 // SPI SCLK D4 | [16] P0_4 SCLK s-sclk P4_4 [05] | D12
whismanoid 15:37c83ec50ea0 1733 // D3 | [17] P0_3 RTS SCL P1_7 [04] | SCL/D17
whismanoid 15:37c83ec50ea0 1734 // D2 | [18] P0_2 CTS SDA P1_6 [03] | SDA/D16
whismanoid 15:37c83ec50ea0 1735 // TX/D1 | [19] P0_1 TX0 AIN_2 [02] | A2
whismanoid 15:37c83ec50ea0 1736 // RX/D0 | [20] P0_0 RX0 AIN_0 [01] | A0/A4
whismanoid 15:37c83ec50ea0 1737 // | |
whismanoid 15:37c83ec50ea0 1738 // | DAPLINK |
whismanoid 15:37c83ec50ea0 1739 // | J3 p3_3 p3_2 p3_0 p3_1 p3_7 |
whismanoid 15:37c83ec50ea0 1740 // | DAP [ ] [ ] [RX2][TX2][ ] |
whismanoid 15:37c83ec50ea0 1741 // | TOP [ ] [ ] [ ] [ ] [ ] |
whismanoid 15:37c83ec50ea0 1742 // | AIN1/A5 gnd gnd nc AIN3 |
whismanoid 15:37c83ec50ea0 1743 // | IOH 1-wire |
whismanoid 15:37c83ec50ea0 1744 // | |
whismanoid 15:37c83ec50ea0 1745 // |NO USE RST P2_0 P2_1 |
whismanoid 15:37c83ec50ea0 1746 // |BOTTOM [ ] [ ] [RX1][ ] [TX1] |
whismanoid 15:37c83ec50ea0 1747 // | RST SWC GND SWD 1V8 |
whismanoid 15:37c83ec50ea0 1748 // |BOTTOM [21] [22] [23] [24] [25] |
whismanoid 15:37c83ec50ea0 1749 // +------------------------------------+
whismanoid 15:37c83ec50ea0 1750 #if MAX40108_DEMO
whismanoid 15:37c83ec50ea0 1751 // MAX40108 demo p2: D0..D7 = P0_0..P0_7; D8..15 = P4_0..P4_7; D16/D17=I2C
whismanoid 15:37c83ec50ea0 1752 #endif
whismanoid 15:37c83ec50ea0 1753 // AIN_0 = AIN0 pin fullscale is 1.2V
whismanoid 15:37c83ec50ea0 1754 // AIN_1 = AIN1 pin fullscale is 1.2V
whismanoid 15:37c83ec50ea0 1755 // AIN_2 = AIN2 pin fullscale is 1.2V
whismanoid 15:37c83ec50ea0 1756 // AIN_3 = AIN3 pin fullscale is 1.2V
whismanoid 15:37c83ec50ea0 1757 // AIN_4 = AIN0 / 5.0 fullscale is 6.0V
whismanoid 15:37c83ec50ea0 1758 // AIN_5 = AIN1 / 5.0 fullscale is 6.0V
whismanoid 15:37c83ec50ea0 1759 // AIN_6 = VDDB / 4.0 fullscale is 4.8V
whismanoid 15:37c83ec50ea0 1760 // AIN_7 = VDD18 fullscale is 1.2V
whismanoid 15:37c83ec50ea0 1761 // AIN_8 = VDD12 fullscale is 1.2V
whismanoid 15:37c83ec50ea0 1762 // AIN_9 = VRTC / 2.0 fullscale is 2.4V
whismanoid 15:37c83ec50ea0 1763 // AIN_10 = x undefined?
whismanoid 15:37c83ec50ea0 1764 // AIN_11 = VDDIO / 4.0 fullscale is 4.8V
whismanoid 15:37c83ec50ea0 1765 // AIN_12 = VDDIOH / 4.0 fullscale is 4.8V
whismanoid 15:37c83ec50ea0 1766 //
whismanoid 15:37c83ec50ea0 1767 #if MAX40108_DEMO
whismanoid 15:37c83ec50ea0 1768 // avoid resource conflict D0,D1 alternate function as RX/TX
whismanoid 15:37c83ec50ea0 1769 #define HAS_digitalInOut0 0
whismanoid 15:37c83ec50ea0 1770 #define HAS_digitalInOut1 0
whismanoid 15:37c83ec50ea0 1771 #else
whismanoid 15:37c83ec50ea0 1772 #define HAS_digitalInOut0 1
whismanoid 19:5ff09c8e9daf 1773 #define HAS_digitalInOut1 1
whismanoid 19:5ff09c8e9daf 1774 // P0_1 TARGET_MAX32625PICO D1
whismanoid 15:37c83ec50ea0 1775 #endif
whismanoid 15:37c83ec50ea0 1776 #if APPLICATION_MAX11131
whismanoid 15:37c83ec50ea0 1777 // avoid resource conflict D2 alternate function as interrupt input
whismanoid 15:37c83ec50ea0 1778 #define HAS_digitalInOut2 0
whismanoid 15:37c83ec50ea0 1779 #else
whismanoid 15:37c83ec50ea0 1780 #define HAS_digitalInOut2 1
whismanoid 15:37c83ec50ea0 1781 #endif
whismanoid 15:37c83ec50ea0 1782 #define HAS_digitalInOut3 1
whismanoid 15:37c83ec50ea0 1783 #define HAS_digitalInOut4 1
whismanoid 15:37c83ec50ea0 1784 #define HAS_digitalInOut5 1
whismanoid 15:37c83ec50ea0 1785 #define HAS_digitalInOut6 1
whismanoid 15:37c83ec50ea0 1786 #define HAS_digitalInOut7 1
whismanoid 15:37c83ec50ea0 1787 //
whismanoid 15:37c83ec50ea0 1788 #define HAS_digitalInOut8 1
whismanoid 15:37c83ec50ea0 1789 #define HAS_digitalInOut9 1
whismanoid 15:37c83ec50ea0 1790 #define HAS_digitalInOut10 1
whismanoid 15:37c83ec50ea0 1791 #define HAS_digitalInOut11 1
whismanoid 15:37c83ec50ea0 1792 #define HAS_digitalInOut12 1
whismanoid 15:37c83ec50ea0 1793 #define HAS_digitalInOut13 1
whismanoid 15:37c83ec50ea0 1794 #define HAS_digitalInOut14 1
whismanoid 15:37c83ec50ea0 1795 #define HAS_digitalInOut15 1
whismanoid 15:37c83ec50ea0 1796 #if HAS_I2C
whismanoid 25:8a61cb34191d 1797 // MAX40108DEMOP2U9 HAS_I2C: J91.1=1V8 J91.2=P1_6(SDA) J91.3=P1_7(SCL) J91.4=GND
whismanoid 25:8a61cb34191d 1798 // MAX40108DEMOP2U9 HAS_I2C: move button2/button3 to inaccessible pins P3_6 and P3_7 if we need J91 for I2C
whismanoid 25:8a61cb34191d 1799 // #define BUTTON2 P3_7
whismanoid 25:8a61cb34191d 1800 // avoid resource conflict between I2C and DigitalInOut
whismanoid 25:8a61cb34191d 1801 #define HAS_digitalInOut16 0 // P1_6 TARGET_MAX40108DEMOP2U9 J91.2=P1_6(button3/'%B3!'/SDA)
whismanoid 25:8a61cb34191d 1802 #define HAS_digitalInOut17 0 // P1_7 TARGET_MAX40108DEMOP2U9 J91.3=P1_7(button2/'%B2!'/SCL)
whismanoid 15:37c83ec50ea0 1803 #else // HAS_I2C
whismanoid 25:8a61cb34191d 1804 // MAX40108DEMOP2U9 no HAS_I2C: option using J91 for button2 and button3 instead of I2C
whismanoid 25:8a61cb34191d 1805 // MAX40108DEMOP2U9 no HAS_I2C: header J91.1=1V8 J91.2=P1_6(button3/'%B3!') J91.3=P1_7(button2/'%B2!') J91.4=GND
whismanoid 25:8a61cb34191d 1806 // MAX40108DEMOP2U9 no HAS_I2C: avoid conflict between digital pins D16 D17 and button2/button3
whismanoid 25:8a61cb34191d 1807 // #define BUTTON2 P1_7
whismanoid 25:8a61cb34191d 1808 #if HAS_BUTTON3_DEMO_INTERRUPT
whismanoid 25:8a61cb34191d 1809 // MAX40108DEMOP2U9 avoid conflict between digital pins D16 D17 and button2/button3
whismanoid 25:8a61cb34191d 1810 #define HAS_digitalInOut16 0 // P1_6 TARGET_MAX40108DEMOP2U9 J91.2=P1_6(button3/'%B3!'/SDA)
whismanoid 25:8a61cb34191d 1811 #else // HAS_BUTTON3_DEMO_INTERRUPT
whismanoid 25:8a61cb34191d 1812 #define HAS_digitalInOut16 1 // P1_6 TARGET_MAX40108DEMOP2U9 J91.2=P1_6(button3/'%B3!'/SDA)
whismanoid 25:8a61cb34191d 1813 #endif // HAS_BUTTON3_DEMO_INTERRUPT
whismanoid 25:8a61cb34191d 1814 #if HAS_BUTTON2_DEMO_INTERRUPT
whismanoid 25:8a61cb34191d 1815 // MAX40108DEMOP2U9 avoid conflict between digital pins D16 D17 and button2/button3
whismanoid 25:8a61cb34191d 1816 #define HAS_digitalInOut17 0 // P1_7 TARGET_MAX40108DEMOP2U9 J91.3=P1_7(button2/'%B2!'/SCL)
whismanoid 25:8a61cb34191d 1817 #else // HAS_BUTTON2_DEMO_INTERRUPT
whismanoid 25:8a61cb34191d 1818 #define HAS_digitalInOut17 1 // P1_7 TARGET_MAX40108DEMOP2U9 J91.3=P1_7(button2/'%B2!'/SCL)
whismanoid 25:8a61cb34191d 1819 #endif // HAS_BUTTON2_DEMO_INTERRUPT
whismanoid 15:37c83ec50ea0 1820 #endif // HAS_I2C
whismanoid 15:37c83ec50ea0 1821 #if HAS_digitalInOut0
whismanoid 25:8a61cb34191d 1822 DigitalInOut digitalInOut0(P0_0, PIN_INPUT, PullUp, 1); // P0_0 TARGET_MAX32625PICO TARGET_MAX40108DEMOP2U9 D0
whismanoid 15:37c83ec50ea0 1823 #endif
whismanoid 15:37c83ec50ea0 1824 #if HAS_digitalInOut1
whismanoid 25:8a61cb34191d 1825 DigitalInOut digitalInOut1(P0_1, PIN_INPUT, PullUp, 1); // P0_1 TARGET_MAX32625PICO TARGET_MAX40108DEMOP2U9 D1
whismanoid 15:37c83ec50ea0 1826 #endif
whismanoid 15:37c83ec50ea0 1827 #if HAS_digitalInOut2
whismanoid 25:8a61cb34191d 1828 DigitalInOut digitalInOut2(P0_2, PIN_INPUT, PullUp, 1); // P0_2 TARGET_MAX32625PICO TARGET_MAX40108DEMOP2U9 D2
whismanoid 15:37c83ec50ea0 1829 #endif
whismanoid 15:37c83ec50ea0 1830 #if HAS_digitalInOut3
whismanoid 25:8a61cb34191d 1831 DigitalInOut digitalInOut3(P0_3, PIN_INPUT, PullUp, 1); // P0_3 TARGET_MAX32625PICO TARGET_MAX40108DEMOP2U9 D3
whismanoid 15:37c83ec50ea0 1832 #endif
whismanoid 15:37c83ec50ea0 1833 #if HAS_digitalInOut4
whismanoid 25:8a61cb34191d 1834 DigitalInOut digitalInOut4(P0_4, PIN_INPUT, PullUp, 1); // P0_4 TARGET_MAX32625PICO TARGET_MAX40108DEMOP2U9 D4
whismanoid 15:37c83ec50ea0 1835 #endif
whismanoid 15:37c83ec50ea0 1836 #if HAS_digitalInOut5
whismanoid 25:8a61cb34191d 1837 DigitalInOut digitalInOut5(P0_5, PIN_INPUT, PullUp, 1); // P0_5 TARGET_MAX32625PICO TARGET_MAX40108DEMOP2U9 D5
whismanoid 15:37c83ec50ea0 1838 #endif
whismanoid 15:37c83ec50ea0 1839 #if HAS_digitalInOut6
whismanoid 25:8a61cb34191d 1840 DigitalInOut digitalInOut6(P0_6, PIN_INPUT, PullUp, 1); // P0_6 TARGET_MAX32625PICO TARGET_MAX40108DEMOP2U9 D6
whismanoid 15:37c83ec50ea0 1841 #endif
whismanoid 15:37c83ec50ea0 1842 #if HAS_digitalInOut7
whismanoid 25:8a61cb34191d 1843 DigitalInOut digitalInOut7(P0_7, PIN_INPUT, PullUp, 1); // P0_7 TARGET_MAX32625PICO TARGET_MAX40108DEMOP2U9 D7
whismanoid 15:37c83ec50ea0 1844 #endif
whismanoid 15:37c83ec50ea0 1845 #if HAS_digitalInOut8
whismanoid 25:8a61cb34191d 1846 DigitalInOut digitalInOut8(P4_0, PIN_INPUT, PullUp, 1); // P4_0 TARGET_MAX40108DEMOP2U9 D8
whismanoid 15:37c83ec50ea0 1847 #endif
whismanoid 15:37c83ec50ea0 1848 #if HAS_digitalInOut9
whismanoid 25:8a61cb34191d 1849 DigitalInOut digitalInOut9(P4_1, PIN_INPUT, PullUp, 1); // P4_1 TARGET_MAX40108DEMOP2U9 D9
whismanoid 15:37c83ec50ea0 1850 #endif
whismanoid 15:37c83ec50ea0 1851 #if HAS_digitalInOut10
whismanoid 25:8a61cb34191d 1852 DigitalInOut digitalInOut10(P4_2, PIN_INPUT, PullUp, 1); // P4_2 TARGET_MAX40108DEMOP2U9 D10
whismanoid 15:37c83ec50ea0 1853 #endif
whismanoid 15:37c83ec50ea0 1854 #if HAS_digitalInOut11
whismanoid 25:8a61cb34191d 1855 DigitalInOut digitalInOut11(P4_3, PIN_INPUT, PullUp, 1); // P4_3 TARGET_MAX40108DEMOP2U9 D11
whismanoid 15:37c83ec50ea0 1856 #endif
whismanoid 15:37c83ec50ea0 1857 #if HAS_digitalInOut12
whismanoid 25:8a61cb34191d 1858 DigitalInOut digitalInOut12(P4_4, PIN_INPUT, PullUp, 1); // P4_4 TARGET_MAX32625PICO TARGET_MAX40108DEMOP2U9 D12
whismanoid 15:37c83ec50ea0 1859 #endif
whismanoid 15:37c83ec50ea0 1860 #if HAS_digitalInOut13
whismanoid 25:8a61cb34191d 1861 DigitalInOut digitalInOut13(P4_5, PIN_INPUT, PullUp, 1); // P4_5 TARGET_MAX32625PICO TARGET_MAX40108DEMOP2U9 D13
whismanoid 15:37c83ec50ea0 1862 #endif
whismanoid 15:37c83ec50ea0 1863 #if HAS_digitalInOut14
whismanoid 25:8a61cb34191d 1864 DigitalInOut digitalInOut14(P4_6, PIN_INPUT, PullUp, 1); // P4_6 TARGET_MAX32625PICO TARGET_MAX40108DEMOP2U9 D14
whismanoid 15:37c83ec50ea0 1865 #endif
whismanoid 15:37c83ec50ea0 1866 #if HAS_digitalInOut15
whismanoid 25:8a61cb34191d 1867 DigitalInOut digitalInOut15(P4_7, PIN_INPUT, PullUp, 1); // P4_7 TARGET_MAX32625PICO TARGET_MAX40108DEMOP2U9 D15
whismanoid 15:37c83ec50ea0 1868 #endif
whismanoid 15:37c83ec50ea0 1869 #if HAS_digitalInOut16
whismanoid 15:37c83ec50ea0 1870 // Ensure that the unused I2C pins do not interfere with analog inputs A4 and A5
whismanoid 15:37c83ec50ea0 1871 // DigitalInOut mode can be one of PullUp, PullDown, PullNone, OpenDrain
whismanoid 25:8a61cb34191d 1872 DigitalInOut digitalInOut16(P1_6, PIN_INPUT, OpenDrain, 1); // P1_6 TARGET_MAX40108DEMOP2U9 J91.2=P1_6(button3/'%B3!'/SDA)
whismanoid 15:37c83ec50ea0 1873 #endif
whismanoid 15:37c83ec50ea0 1874 #if HAS_digitalInOut17
whismanoid 15:37c83ec50ea0 1875 // Ensure that the unused I2C pins do not interfere with analog inputs A4 and A5
whismanoid 25:8a61cb34191d 1876 DigitalInOut digitalInOut17(P1_7, PIN_INPUT, OpenDrain, 1); // P1_7 TARGET_MAX40108DEMOP2U9 J91.3=P1_7(button2/'%B2!'/SCL)
whismanoid 15:37c83ec50ea0 1877 #endif
whismanoid 15:37c83ec50ea0 1878 //--------------------------------------------------
whismanoid 0:cb44e2e9ec4c 1879 #elif defined(TARGET_NUCLEO_F446RE) || defined(TARGET_NUCLEO_F401RE)
whismanoid 0:cb44e2e9ec4c 1880 #define HAS_digitalInOut0 0
whismanoid 0:cb44e2e9ec4c 1881 #define HAS_digitalInOut1 0
whismanoid 0:cb44e2e9ec4c 1882 #if APPLICATION_MAX11131
whismanoid 0:cb44e2e9ec4c 1883 // D2 -- MAX11131 EOC DigitalIn
whismanoid 0:cb44e2e9ec4c 1884 #define HAS_digitalInOut2 0
whismanoid 0:cb44e2e9ec4c 1885 #else
whismanoid 0:cb44e2e9ec4c 1886 #define HAS_digitalInOut2 1
whismanoid 0:cb44e2e9ec4c 1887 #endif
whismanoid 0:cb44e2e9ec4c 1888 #define HAS_digitalInOut3 1
whismanoid 0:cb44e2e9ec4c 1889 #define HAS_digitalInOut4 1
whismanoid 0:cb44e2e9ec4c 1890 #define HAS_digitalInOut5 1
whismanoid 0:cb44e2e9ec4c 1891 #define HAS_digitalInOut6 1
whismanoid 0:cb44e2e9ec4c 1892 #define HAS_digitalInOut7 1
whismanoid 0:cb44e2e9ec4c 1893 #if APPLICATION_MAX5715
whismanoid 0:cb44e2e9ec4c 1894 // D8 -- MAX5715 CLRb DigitalOut
whismanoid 0:cb44e2e9ec4c 1895 #define HAS_digitalInOut8 0
whismanoid 0:cb44e2e9ec4c 1896 #else
whismanoid 0:cb44e2e9ec4c 1897 #define HAS_digitalInOut8 1
whismanoid 0:cb44e2e9ec4c 1898 #endif
whismanoid 0:cb44e2e9ec4c 1899 #if APPLICATION_MAX5715
whismanoid 0:cb44e2e9ec4c 1900 // D9 -- MAX5715 LDACb DigitalOut
whismanoid 0:cb44e2e9ec4c 1901 #define HAS_digitalInOut9 0
whismanoid 0:cb44e2e9ec4c 1902 #elif APPLICATION_MAX11131
whismanoid 0:cb44e2e9ec4c 1903 // D9 -- MAX11131 CNVST DigitalOut
whismanoid 0:cb44e2e9ec4c 1904 #define HAS_digitalInOut9 0
whismanoid 0:cb44e2e9ec4c 1905 #else
whismanoid 0:cb44e2e9ec4c 1906 #define HAS_digitalInOut9 1
whismanoid 0:cb44e2e9ec4c 1907 #endif
whismanoid 0:cb44e2e9ec4c 1908 #if HAS_SPI
whismanoid 0:cb44e2e9ec4c 1909 // avoid resource conflict between P5_0, P5_1, P5_2 SPI and DigitalInOut
whismanoid 0:cb44e2e9ec4c 1910 // Arduino digital pin D10 SPI function is CS/10
whismanoid 0:cb44e2e9ec4c 1911 // Arduino digital pin D11 SPI function is MOSI/11
whismanoid 0:cb44e2e9ec4c 1912 // Arduino digital pin D12 SPI function is MISO/12
whismanoid 0:cb44e2e9ec4c 1913 // Arduino digital pin D13 SPI function is SCK/13
whismanoid 0:cb44e2e9ec4c 1914 #define HAS_digitalInOut10 0
whismanoid 0:cb44e2e9ec4c 1915 #define HAS_digitalInOut11 0
whismanoid 0:cb44e2e9ec4c 1916 #define HAS_digitalInOut12 0
whismanoid 0:cb44e2e9ec4c 1917 #define HAS_digitalInOut13 0
whismanoid 0:cb44e2e9ec4c 1918 #else // HAS_SPI
whismanoid 0:cb44e2e9ec4c 1919 #define HAS_digitalInOut10 1
whismanoid 0:cb44e2e9ec4c 1920 #define HAS_digitalInOut11 1
whismanoid 0:cb44e2e9ec4c 1921 #define HAS_digitalInOut12 1
whismanoid 0:cb44e2e9ec4c 1922 #define HAS_digitalInOut13 1
whismanoid 0:cb44e2e9ec4c 1923 #endif // HAS_SPI
whismanoid 0:cb44e2e9ec4c 1924 #if HAS_I2C
whismanoid 0:cb44e2e9ec4c 1925 // avoid resource conflict between P5_7, P6_0 I2C and DigitalInOut
whismanoid 0:cb44e2e9ec4c 1926 // Arduino digital pin D14 I2C function is A4/SDA (10pin digital connector)
whismanoid 0:cb44e2e9ec4c 1927 // Arduino digital pin D15 I2C function is A5/SCL (10pin digital connector)
whismanoid 0:cb44e2e9ec4c 1928 // Arduino digital pin D16 I2C function is A4/SDA (6pin analog connector)
whismanoid 0:cb44e2e9ec4c 1929 // Arduino digital pin D17 I2C function is A5/SCL (6pin analog connector)
whismanoid 0:cb44e2e9ec4c 1930 #define HAS_digitalInOut14 0
whismanoid 0:cb44e2e9ec4c 1931 #define HAS_digitalInOut15 0
whismanoid 0:cb44e2e9ec4c 1932 #define HAS_digitalInOut16 0
whismanoid 0:cb44e2e9ec4c 1933 #define HAS_digitalInOut17 0
whismanoid 0:cb44e2e9ec4c 1934 #else // HAS_I2C
whismanoid 0:cb44e2e9ec4c 1935 #define HAS_digitalInOut14 1
whismanoid 0:cb44e2e9ec4c 1936 #define HAS_digitalInOut15 1
whismanoid 0:cb44e2e9ec4c 1937 #define HAS_digitalInOut16 0
whismanoid 0:cb44e2e9ec4c 1938 #define HAS_digitalInOut17 0
whismanoid 0:cb44e2e9ec4c 1939 #endif // HAS_I2C
whismanoid 0:cb44e2e9ec4c 1940 #if HAS_digitalInOut0
whismanoid 0:cb44e2e9ec4c 1941 DigitalInOut digitalInOut0(D0, PIN_INPUT, PullUp, 1);
whismanoid 0:cb44e2e9ec4c 1942 #endif
whismanoid 0:cb44e2e9ec4c 1943 #if HAS_digitalInOut1
whismanoid 0:cb44e2e9ec4c 1944 DigitalInOut digitalInOut1(D1, PIN_INPUT, PullUp, 1);
whismanoid 0:cb44e2e9ec4c 1945 #endif
whismanoid 0:cb44e2e9ec4c 1946 #if HAS_digitalInOut2
whismanoid 0:cb44e2e9ec4c 1947 DigitalInOut digitalInOut2(D2, PIN_INPUT, PullUp, 1);
whismanoid 0:cb44e2e9ec4c 1948 #endif
whismanoid 0:cb44e2e9ec4c 1949 #if HAS_digitalInOut3
whismanoid 0:cb44e2e9ec4c 1950 DigitalInOut digitalInOut3(D3, PIN_INPUT, PullUp, 1);
whismanoid 0:cb44e2e9ec4c 1951 #endif
whismanoid 0:cb44e2e9ec4c 1952 #if HAS_digitalInOut4
whismanoid 0:cb44e2e9ec4c 1953 DigitalInOut digitalInOut4(D4, PIN_INPUT, PullUp, 1);
whismanoid 0:cb44e2e9ec4c 1954 #endif
whismanoid 0:cb44e2e9ec4c 1955 #if HAS_digitalInOut5
whismanoid 0:cb44e2e9ec4c 1956 DigitalInOut digitalInOut5(D5, PIN_INPUT, PullUp, 1);
whismanoid 0:cb44e2e9ec4c 1957 #endif
whismanoid 0:cb44e2e9ec4c 1958 #if HAS_digitalInOut6
whismanoid 0:cb44e2e9ec4c 1959 DigitalInOut digitalInOut6(D6, PIN_INPUT, PullUp, 1);
whismanoid 0:cb44e2e9ec4c 1960 #endif
whismanoid 0:cb44e2e9ec4c 1961 #if HAS_digitalInOut7
whismanoid 0:cb44e2e9ec4c 1962 DigitalInOut digitalInOut7(D7, PIN_INPUT, PullUp, 1);
whismanoid 0:cb44e2e9ec4c 1963 #endif
whismanoid 0:cb44e2e9ec4c 1964 #if HAS_digitalInOut8
whismanoid 0:cb44e2e9ec4c 1965 DigitalInOut digitalInOut8(D8, PIN_INPUT, PullUp, 1);
whismanoid 0:cb44e2e9ec4c 1966 #endif
whismanoid 0:cb44e2e9ec4c 1967 #if HAS_digitalInOut9
whismanoid 0:cb44e2e9ec4c 1968 DigitalInOut digitalInOut9(D9, PIN_INPUT, PullUp, 1);
whismanoid 0:cb44e2e9ec4c 1969 #endif
whismanoid 0:cb44e2e9ec4c 1970 #if HAS_digitalInOut10
whismanoid 0:cb44e2e9ec4c 1971 // Arduino digital pin D10 SPI function is CS/10
whismanoid 0:cb44e2e9ec4c 1972 DigitalInOut digitalInOut10(D10, PIN_INPUT, PullUp, 1);
whismanoid 0:cb44e2e9ec4c 1973 #endif
whismanoid 0:cb44e2e9ec4c 1974 #if HAS_digitalInOut11
whismanoid 0:cb44e2e9ec4c 1975 // Arduino digital pin D11 SPI function is MOSI/11
whismanoid 0:cb44e2e9ec4c 1976 DigitalInOut digitalInOut11(D11, PIN_INPUT, PullUp, 1);
whismanoid 0:cb44e2e9ec4c 1977 #endif
whismanoid 0:cb44e2e9ec4c 1978 #if HAS_digitalInOut12
whismanoid 0:cb44e2e9ec4c 1979 // Arduino digital pin D12 SPI function is MISO/12
whismanoid 0:cb44e2e9ec4c 1980 DigitalInOut digitalInOut12(D12, PIN_INPUT, PullUp, 1);
whismanoid 0:cb44e2e9ec4c 1981 #endif
whismanoid 0:cb44e2e9ec4c 1982 #if HAS_digitalInOut13
whismanoid 0:cb44e2e9ec4c 1983 // Arduino digital pin D13 SPI function is SCK/13
whismanoid 0:cb44e2e9ec4c 1984 DigitalInOut digitalInOut13(D13, PIN_INPUT, PullUp, 1);
whismanoid 0:cb44e2e9ec4c 1985 #endif
whismanoid 0:cb44e2e9ec4c 1986 #if HAS_digitalInOut14
whismanoid 0:cb44e2e9ec4c 1987 // Arduino digital pin D14 I2C function is A4/SDA (10pin digital connector)
whismanoid 0:cb44e2e9ec4c 1988 DigitalInOut digitalInOut14(D14, PIN_INPUT, PullUp, 1);
whismanoid 0:cb44e2e9ec4c 1989 #endif
whismanoid 0:cb44e2e9ec4c 1990 #if HAS_digitalInOut15
whismanoid 0:cb44e2e9ec4c 1991 // Arduino digital pin D15 I2C function is A5/SCL (10pin digital connector)
whismanoid 0:cb44e2e9ec4c 1992 DigitalInOut digitalInOut15(D15, PIN_INPUT, PullUp, 1);
whismanoid 0:cb44e2e9ec4c 1993 #endif
whismanoid 0:cb44e2e9ec4c 1994 #if HAS_digitalInOut16
whismanoid 0:cb44e2e9ec4c 1995 // Arduino digital pin D16 I2C function is A4/SDA (6pin analog connector)
whismanoid 0:cb44e2e9ec4c 1996 DigitalInOut digitalInOut16(D16, PIN_INPUT, PullUp, 1);
whismanoid 0:cb44e2e9ec4c 1997 #endif
whismanoid 0:cb44e2e9ec4c 1998 #if HAS_digitalInOut17
whismanoid 0:cb44e2e9ec4c 1999 // Arduino digital pin D17 I2C function is A5/SCL (6pin analog connector)
whismanoid 0:cb44e2e9ec4c 2000 DigitalInOut digitalInOut17(D17, PIN_INPUT, PullUp, 1);
whismanoid 0:cb44e2e9ec4c 2001 #endif
whismanoid 0:cb44e2e9ec4c 2002 //--------------------------------------------------
whismanoid 0:cb44e2e9ec4c 2003 #elif defined(TARGET_LPC1768)
whismanoid 0:cb44e2e9ec4c 2004 #define HAS_digitalInOut0 1
whismanoid 0:cb44e2e9ec4c 2005 #define HAS_digitalInOut1 1
whismanoid 0:cb44e2e9ec4c 2006 #define HAS_digitalInOut2 1
whismanoid 0:cb44e2e9ec4c 2007 #define HAS_digitalInOut3 1
whismanoid 0:cb44e2e9ec4c 2008 #define HAS_digitalInOut4 1
whismanoid 0:cb44e2e9ec4c 2009 #define HAS_digitalInOut5 1
whismanoid 0:cb44e2e9ec4c 2010 #define HAS_digitalInOut6 1
whismanoid 0:cb44e2e9ec4c 2011 #define HAS_digitalInOut7 1
whismanoid 0:cb44e2e9ec4c 2012 #define HAS_digitalInOut8 1
whismanoid 0:cb44e2e9ec4c 2013 #define HAS_digitalInOut9 1
whismanoid 0:cb44e2e9ec4c 2014 // #define HAS_digitalInOut10 1
whismanoid 0:cb44e2e9ec4c 2015 // #define HAS_digitalInOut11 1
whismanoid 0:cb44e2e9ec4c 2016 // #define HAS_digitalInOut12 1
whismanoid 0:cb44e2e9ec4c 2017 // #define HAS_digitalInOut13 1
whismanoid 0:cb44e2e9ec4c 2018 // #define HAS_digitalInOut14 1
whismanoid 0:cb44e2e9ec4c 2019 // #define HAS_digitalInOut15 1
whismanoid 0:cb44e2e9ec4c 2020 #if HAS_digitalInOut0
whismanoid 0:cb44e2e9ec4c 2021 DigitalInOut digitalInOut0(p5, PIN_INPUT, PullUp, 1); // TARGET_LPC1768 P0.9/I2STX_SDA/MOSI1/MAT2.3
whismanoid 0:cb44e2e9ec4c 2022 #endif
whismanoid 0:cb44e2e9ec4c 2023 #if HAS_digitalInOut1
whismanoid 0:cb44e2e9ec4c 2024 DigitalInOut digitalInOut1(p6, PIN_INPUT, PullUp, 1); // TARGET_LPC1768 P0.8/I2STX_WS/MISO1/MAT2.2
whismanoid 0:cb44e2e9ec4c 2025 #endif
whismanoid 0:cb44e2e9ec4c 2026 #if HAS_digitalInOut2
whismanoid 0:cb44e2e9ec4c 2027 DigitalInOut digitalInOut2(p7, PIN_INPUT, PullUp, 1); // TARGET_LPC1768 P0.7/I2STX_CLK/SCK1/MAT2.1
whismanoid 0:cb44e2e9ec4c 2028 #endif
whismanoid 0:cb44e2e9ec4c 2029 #if HAS_digitalInOut3
whismanoid 0:cb44e2e9ec4c 2030 DigitalInOut digitalInOut3(p8, PIN_INPUT, PullUp, 1); // TARGET_LPC1768 P0.6/I2SRX_SDA/SSEL1/MAT2.0
whismanoid 0:cb44e2e9ec4c 2031 #endif
whismanoid 0:cb44e2e9ec4c 2032 #if HAS_digitalInOut4
whismanoid 0:cb44e2e9ec4c 2033 DigitalInOut digitalInOut4(p9, PIN_INPUT, PullUp, 1); // TARGET_LPC1768 P0.0/CAN_RX1/TXD3/SDA1
whismanoid 0:cb44e2e9ec4c 2034 #endif
whismanoid 0:cb44e2e9ec4c 2035 #if HAS_digitalInOut5
whismanoid 0:cb44e2e9ec4c 2036 DigitalInOut digitalInOut5(p10, PIN_INPUT, PullUp, 1); // TARGET_LPC1768 P0.1/CAN_TX1/RXD3/SCL1
whismanoid 0:cb44e2e9ec4c 2037 #endif
whismanoid 0:cb44e2e9ec4c 2038 #if HAS_digitalInOut6
whismanoid 0:cb44e2e9ec4c 2039 DigitalInOut digitalInOut6(p11, PIN_INPUT, PullUp, 1); // TARGET_LPC1768 P0.18/DCD1/MOSI0/MOSI1
whismanoid 0:cb44e2e9ec4c 2040 #endif
whismanoid 0:cb44e2e9ec4c 2041 #if HAS_digitalInOut7
whismanoid 0:cb44e2e9ec4c 2042 DigitalInOut digitalInOut7(p12, PIN_INPUT, PullUp, 1); // TARGET_LPC1768 P0.17/CTS1/MISO0/MISO
whismanoid 0:cb44e2e9ec4c 2043 #endif
whismanoid 0:cb44e2e9ec4c 2044 #if HAS_digitalInOut8
whismanoid 0:cb44e2e9ec4c 2045 DigitalInOut digitalInOut8(p13, PIN_INPUT, PullUp, 1); // TARGET_LPC1768 P0.15/TXD1/SCK0/SCK
whismanoid 0:cb44e2e9ec4c 2046 #endif
whismanoid 0:cb44e2e9ec4c 2047 #if HAS_digitalInOut9
whismanoid 0:cb44e2e9ec4c 2048 DigitalInOut digitalInOut9(p14, PIN_INPUT, PullUp, 1); // TARGET_LPC1768 P0.16/RXD1/SSEL0/SSEL
whismanoid 0:cb44e2e9ec4c 2049 #endif
whismanoid 0:cb44e2e9ec4c 2050 //
whismanoid 0:cb44e2e9ec4c 2051 // these pins support analog input analogIn0 .. analogIn5
whismanoid 0:cb44e2e9ec4c 2052 //DigitalInOut digitalInOut_(p15, PIN_INPUT, PullUp, 1); // TARGET_LPC1768 P0.23/AD0.0/I2SRX_CLK/CAP3.0
whismanoid 0:cb44e2e9ec4c 2053 //DigitalInOut digitalInOut_(p16, PIN_INPUT, PullUp, 1); // TARGET_LPC1768 P0.24/AD0.1/I2SRX_WS/CAP3.1
whismanoid 0:cb44e2e9ec4c 2054 //DigitalInOut digitalInOut_(p17, PIN_INPUT, PullUp, 1); // TARGET_LPC1768 P0.25/AD0.2/I2SRX_SDA/TXD3
whismanoid 0:cb44e2e9ec4c 2055 //DigitalInOut digitalInOut_(p18, PIN_INPUT, PullUp, 1); // TARGET_LPC1768 P0.26/AD0.3/AOUT/RXD3
whismanoid 0:cb44e2e9ec4c 2056 //DigitalInOut digitalInOut_(p19, PIN_INPUT, PullUp, 1); // TARGET_LPC1768 P1.30/VBUS/AD0.4
whismanoid 0:cb44e2e9ec4c 2057 //DigitalInOut digitalInOut_(p20, PIN_INPUT, PullUp, 1); // TARGET_LPC1768 P1.31/SCK1/AD0.5
whismanoid 0:cb44e2e9ec4c 2058 //
whismanoid 0:cb44e2e9ec4c 2059 // these pins support PWM pwmDriver1 .. pwmDriver6
whismanoid 0:cb44e2e9ec4c 2060 //DigitalInOut digitalInOut_(p21, PIN_INPUT, PullUp, 1); // TARGET_LPC1768 P2.5/PWM1.6/DTR1/TRACEDATA0
whismanoid 0:cb44e2e9ec4c 2061 //DigitalInOut digitalInOut_(p22, PIN_INPUT, PullUp, 1); // TARGET_LPC1768 P2.4/PWM1.5/DSR1/TRACEDATA1
whismanoid 0:cb44e2e9ec4c 2062 //DigitalInOut digitalInOut_(p23, PIN_INPUT, PullUp, 1); // TARGET_LPC1768 P2.3/PWM1.4/DCD1/TRACEDATA2
whismanoid 0:cb44e2e9ec4c 2063 //DigitalInOut digitalInOut_(p24, PIN_INPUT, PullUp, 1); // TARGET_LPC1768 P2.2/PWM1.3/CTS1/TRACEDATA3
whismanoid 0:cb44e2e9ec4c 2064 //DigitalInOut digitalInOut_(p25, PIN_INPUT, PullUp, 1); // TARGET_LPC1768 P2.1/PWM1.2/RXD1
whismanoid 0:cb44e2e9ec4c 2065 //DigitalInOut digitalInOut_(p26, PIN_INPUT, PullUp, 1); // TARGET_LPC1768 P2.0/PWM1.1/TXD1/TRACECLK
whismanoid 0:cb44e2e9ec4c 2066 //
whismanoid 0:cb44e2e9ec4c 2067 // these could be additional digitalInOut pins
whismanoid 0:cb44e2e9ec4c 2068 #if HAS_digitalInOut10
whismanoid 0:cb44e2e9ec4c 2069 DigitalInOut digitalInOut10(p27, PIN_INPUT, PullUp, 1); // TARGET_LPC1768 P0.11/RXD2/SCL2/MAT3.1
whismanoid 0:cb44e2e9ec4c 2070 #endif
whismanoid 0:cb44e2e9ec4c 2071 #if HAS_digitalInOut11
whismanoid 0:cb44e2e9ec4c 2072 DigitalInOut digitalInOut11(p28, PIN_INPUT, PullUp, 1); // TARGET_LPC1768 P0.10/TXD2/SDA2/MAT3.0
whismanoid 0:cb44e2e9ec4c 2073 #endif
whismanoid 0:cb44e2e9ec4c 2074 #if HAS_digitalInOut12
whismanoid 0:cb44e2e9ec4c 2075 DigitalInOut digitalInOut12(p29, PIN_INPUT, PullUp, 1); // TARGET_LPC1768 P0.5/I2SRX_WS/CAN_TX2/CAP2.1
whismanoid 0:cb44e2e9ec4c 2076 #endif
whismanoid 0:cb44e2e9ec4c 2077 #if HAS_digitalInOut13
whismanoid 0:cb44e2e9ec4c 2078 DigitalInOut digitalInOut13(p30, PIN_INPUT, PullUp, 1); // TARGET_LPC1768 P0.4/I2SRX_CLK/CAN_RX2/CAP2.0
whismanoid 0:cb44e2e9ec4c 2079 #endif
whismanoid 0:cb44e2e9ec4c 2080 #if HAS_digitalInOut14
whismanoid 0:cb44e2e9ec4c 2081 DigitalInOut digitalInOut14(___, PIN_INPUT, PullUp, 1);
whismanoid 0:cb44e2e9ec4c 2082 #endif
whismanoid 0:cb44e2e9ec4c 2083 #if HAS_digitalInOut15
whismanoid 0:cb44e2e9ec4c 2084 DigitalInOut digitalInOut15(___, PIN_INPUT, PullUp, 1);
whismanoid 0:cb44e2e9ec4c 2085 #endif
whismanoid 0:cb44e2e9ec4c 2086 #else
whismanoid 0:cb44e2e9ec4c 2087 // unknown target
whismanoid 0:cb44e2e9ec4c 2088 #endif
whismanoid 0:cb44e2e9ec4c 2089 // uncrustify-0.66.1 *INDENT-ON*
whismanoid 0:cb44e2e9ec4c 2090 #if HAS_digitalInOut0 || HAS_digitalInOut1 \
whismanoid 0:cb44e2e9ec4c 2091 || HAS_digitalInOut2 || HAS_digitalInOut3 \
whismanoid 0:cb44e2e9ec4c 2092 || HAS_digitalInOut4 || HAS_digitalInOut5 \
whismanoid 0:cb44e2e9ec4c 2093 || HAS_digitalInOut6 || HAS_digitalInOut7 \
whismanoid 0:cb44e2e9ec4c 2094 || HAS_digitalInOut8 || HAS_digitalInOut9 \
whismanoid 0:cb44e2e9ec4c 2095 || HAS_digitalInOut10 || HAS_digitalInOut11 \
whismanoid 0:cb44e2e9ec4c 2096 || HAS_digitalInOut12 || HAS_digitalInOut13 \
whismanoid 0:cb44e2e9ec4c 2097 || HAS_digitalInOut14 || HAS_digitalInOut15 \
whismanoid 0:cb44e2e9ec4c 2098 || HAS_digitalInOut16 || HAS_digitalInOut17
whismanoid 0:cb44e2e9ec4c 2099 #define HAS_digitalInOuts 1
whismanoid 0:cb44e2e9ec4c 2100 #else
whismanoid 0:cb44e2e9ec4c 2101 #warning "Note: There are no digitalInOut resources defined"
whismanoid 0:cb44e2e9ec4c 2102 #endif
whismanoid 0:cb44e2e9ec4c 2103
whismanoid 0:cb44e2e9ec4c 2104 // uncrustify-0.66.1 *INDENT-OFF*
whismanoid 0:cb44e2e9ec4c 2105 //--------------------------------------------------
whismanoid 0:cb44e2e9ec4c 2106 // Declare the AnalogIn driver
whismanoid 0:cb44e2e9ec4c 2107 // Optional analogIn support. If there is only one it should be analogIn1.
whismanoid 0:cb44e2e9ec4c 2108 // A) analog input
whismanoid 0:cb44e2e9ec4c 2109 #if defined(TARGET_MAX32630)
whismanoid 0:cb44e2e9ec4c 2110 #define HAS_analogIn0 1
whismanoid 0:cb44e2e9ec4c 2111 #define HAS_analogIn1 1
whismanoid 0:cb44e2e9ec4c 2112 #define HAS_analogIn2 1
whismanoid 0:cb44e2e9ec4c 2113 #define HAS_analogIn3 1
whismanoid 0:cb44e2e9ec4c 2114 #define HAS_analogIn4 1
whismanoid 0:cb44e2e9ec4c 2115 #define HAS_analogIn5 1
whismanoid 0:cb44e2e9ec4c 2116 #define HAS_analogIn6 1
whismanoid 0:cb44e2e9ec4c 2117 #define HAS_analogIn7 1
whismanoid 0:cb44e2e9ec4c 2118 #define HAS_analogIn8 1
whismanoid 0:cb44e2e9ec4c 2119 #define HAS_analogIn9 1
whismanoid 0:cb44e2e9ec4c 2120 // #define HAS_analogIn10 0
whismanoid 0:cb44e2e9ec4c 2121 // #define HAS_analogIn11 0
whismanoid 0:cb44e2e9ec4c 2122 // #define HAS_analogIn12 0
whismanoid 0:cb44e2e9ec4c 2123 // #define HAS_analogIn13 0
whismanoid 0:cb44e2e9ec4c 2124 // #define HAS_analogIn14 0
whismanoid 0:cb44e2e9ec4c 2125 // #define HAS_analogIn15 0
whismanoid 0:cb44e2e9ec4c 2126 #if HAS_analogIn0
whismanoid 0:cb44e2e9ec4c 2127 AnalogIn analogIn0(AIN_0); // TARGET_MAX32630 J1.5 AIN_0 = AIN0 pin fullscale is 1.2V
whismanoid 0:cb44e2e9ec4c 2128 #endif
whismanoid 0:cb44e2e9ec4c 2129 #if HAS_analogIn1
whismanoid 0:cb44e2e9ec4c 2130 AnalogIn analogIn1(AIN_1); // TARGET_MAX32630 J1.6 AIN_1 = AIN1 pin fullscale is 1.2V
whismanoid 0:cb44e2e9ec4c 2131 #endif
whismanoid 0:cb44e2e9ec4c 2132 #if HAS_analogIn2
whismanoid 0:cb44e2e9ec4c 2133 AnalogIn analogIn2(AIN_2); // TARGET_MAX32630 J1.7 AIN_2 = AIN2 pin fullscale is 1.2V
whismanoid 0:cb44e2e9ec4c 2134 #endif
whismanoid 0:cb44e2e9ec4c 2135 #if HAS_analogIn3
whismanoid 0:cb44e2e9ec4c 2136 AnalogIn analogIn3(AIN_3); // TARGET_MAX32630 J1.8 AIN_3 = AIN3 pin fullscale is 1.2V
whismanoid 0:cb44e2e9ec4c 2137 #endif
whismanoid 0:cb44e2e9ec4c 2138 #if HAS_analogIn4
whismanoid 0:cb44e2e9ec4c 2139 AnalogIn analogIn4(AIN_4); // TARGET_MAX32630 J1.5 AIN_4 = AIN0 / 5.0 fullscale is 6.0V
whismanoid 0:cb44e2e9ec4c 2140 #endif
whismanoid 0:cb44e2e9ec4c 2141 #if HAS_analogIn5
whismanoid 0:cb44e2e9ec4c 2142 AnalogIn analogIn5(AIN_5); // TARGET_MAX32630 J1.6 AIN_5 = AIN1 / 5.0 fullscale is 6.0V
whismanoid 0:cb44e2e9ec4c 2143 #endif
whismanoid 0:cb44e2e9ec4c 2144 #if HAS_analogIn6
whismanoid 0:cb44e2e9ec4c 2145 AnalogIn analogIn6(AIN_6); // TARGET_MAX32630 AIN_6 = VDDB / 4.0 fullscale is 4.8V
whismanoid 0:cb44e2e9ec4c 2146 #endif
whismanoid 0:cb44e2e9ec4c 2147 #if HAS_analogIn7
whismanoid 0:cb44e2e9ec4c 2148 AnalogIn analogIn7(AIN_7); // TARGET_MAX32630 AIN_7 = VDD18 fullscale is 1.2V
whismanoid 0:cb44e2e9ec4c 2149 #endif
whismanoid 0:cb44e2e9ec4c 2150 #if HAS_analogIn8
whismanoid 0:cb44e2e9ec4c 2151 AnalogIn analogIn8(AIN_8); // TARGET_MAX32630 AIN_8 = VDD12 fullscale is 1.2V
whismanoid 0:cb44e2e9ec4c 2152 #endif
whismanoid 0:cb44e2e9ec4c 2153 #if HAS_analogIn9
whismanoid 0:cb44e2e9ec4c 2154 AnalogIn analogIn9(AIN_9); // TARGET_MAX32630 AIN_9 = VRTC / 2.0 fullscale is 2.4V
whismanoid 0:cb44e2e9ec4c 2155 #endif
whismanoid 0:cb44e2e9ec4c 2156 #if HAS_analogIn10
whismanoid 0:cb44e2e9ec4c 2157 AnalogIn analogIn10(____); // TARGET_MAX32630 AIN_10 = x undefined?
whismanoid 0:cb44e2e9ec4c 2158 #endif
whismanoid 0:cb44e2e9ec4c 2159 #if HAS_analogIn11
whismanoid 0:cb44e2e9ec4c 2160 AnalogIn analogIn11(____); // TARGET_MAX32630 AIN_11 = VDDIO / 4.0 fullscale is 4.8V
whismanoid 0:cb44e2e9ec4c 2161 #endif
whismanoid 0:cb44e2e9ec4c 2162 #if HAS_analogIn12
whismanoid 0:cb44e2e9ec4c 2163 AnalogIn analogIn12(____); // TARGET_MAX32630 AIN_12 = VDDIOH / 4.0 fullscale is 4.8V
whismanoid 0:cb44e2e9ec4c 2164 #endif
whismanoid 0:cb44e2e9ec4c 2165 #if HAS_analogIn13
whismanoid 0:cb44e2e9ec4c 2166 AnalogIn analogIn13(____);
whismanoid 0:cb44e2e9ec4c 2167 #endif
whismanoid 0:cb44e2e9ec4c 2168 #if HAS_analogIn14
whismanoid 0:cb44e2e9ec4c 2169 AnalogIn analogIn14(____);
whismanoid 0:cb44e2e9ec4c 2170 #endif
whismanoid 0:cb44e2e9ec4c 2171 #if HAS_analogIn15
whismanoid 0:cb44e2e9ec4c 2172 AnalogIn analogIn15(____);
whismanoid 0:cb44e2e9ec4c 2173 #endif
whismanoid 0:cb44e2e9ec4c 2174 //--------------------------------------------------
whismanoid 0:cb44e2e9ec4c 2175 #elif defined(TARGET_MAX32625MBED)
whismanoid 0:cb44e2e9ec4c 2176 #define HAS_analogIn0 1
whismanoid 0:cb44e2e9ec4c 2177 #define HAS_analogIn1 1
whismanoid 0:cb44e2e9ec4c 2178 #define HAS_analogIn2 1
whismanoid 0:cb44e2e9ec4c 2179 #define HAS_analogIn3 1
whismanoid 0:cb44e2e9ec4c 2180 #define HAS_analogIn4 1
whismanoid 0:cb44e2e9ec4c 2181 #define HAS_analogIn5 1
whismanoid 0:cb44e2e9ec4c 2182 #if HAS_analogIn0
whismanoid 0:cb44e2e9ec4c 2183 AnalogIn analogIn0(AIN_0); // TARGET_MAX32630 J1.5 AIN_0 = AIN0 pin fullscale is 1.2V
whismanoid 0:cb44e2e9ec4c 2184 #endif
whismanoid 0:cb44e2e9ec4c 2185 #if HAS_analogIn1
whismanoid 0:cb44e2e9ec4c 2186 AnalogIn analogIn1(AIN_1); // TARGET_MAX32630 J1.6 AIN_1 = AIN1 pin fullscale is 1.2V
whismanoid 0:cb44e2e9ec4c 2187 #endif
whismanoid 0:cb44e2e9ec4c 2188 #if HAS_analogIn2
whismanoid 0:cb44e2e9ec4c 2189 AnalogIn analogIn2(AIN_2); // TARGET_MAX32630 J1.7 AIN_2 = AIN2 pin fullscale is 1.2V
whismanoid 0:cb44e2e9ec4c 2190 #endif
whismanoid 0:cb44e2e9ec4c 2191 #if HAS_analogIn3
whismanoid 0:cb44e2e9ec4c 2192 AnalogIn analogIn3(AIN_3); // TARGET_MAX32630 J1.8 AIN_3 = AIN3 pin fullscale is 1.2V
whismanoid 0:cb44e2e9ec4c 2193 #endif
whismanoid 0:cb44e2e9ec4c 2194 #if HAS_analogIn4
whismanoid 0:cb44e2e9ec4c 2195 AnalogIn analogIn4(AIN_4); // TARGET_MAX32630 J1.5 AIN_4 = AIN0 / 5.0 fullscale is 6.0V
whismanoid 0:cb44e2e9ec4c 2196 #endif
whismanoid 0:cb44e2e9ec4c 2197 #if HAS_analogIn5
whismanoid 0:cb44e2e9ec4c 2198 AnalogIn analogIn5(AIN_5); // TARGET_MAX32630 J1.6 AIN_5 = AIN1 / 5.0 fullscale is 6.0V
whismanoid 0:cb44e2e9ec4c 2199 #endif
whismanoid 0:cb44e2e9ec4c 2200 //--------------------------------------------------
whismanoid 0:cb44e2e9ec4c 2201 #elif defined(TARGET_MAX32620FTHR)
whismanoid 0:cb44e2e9ec4c 2202 #warning "TARGET_MAX32620FTHR not previously tested; need to verify analogIn0..."
whismanoid 0:cb44e2e9ec4c 2203 #define HAS_analogIn0 1
whismanoid 0:cb44e2e9ec4c 2204 #define HAS_analogIn1 1
whismanoid 0:cb44e2e9ec4c 2205 #define HAS_analogIn2 1
whismanoid 0:cb44e2e9ec4c 2206 #define HAS_analogIn3 1
whismanoid 0:cb44e2e9ec4c 2207 #define HAS_analogIn4 1
whismanoid 0:cb44e2e9ec4c 2208 #define HAS_analogIn5 1
whismanoid 0:cb44e2e9ec4c 2209 #define HAS_analogIn6 1
whismanoid 0:cb44e2e9ec4c 2210 #define HAS_analogIn7 1
whismanoid 0:cb44e2e9ec4c 2211 #define HAS_analogIn8 1
whismanoid 0:cb44e2e9ec4c 2212 #define HAS_analogIn9 1
whismanoid 0:cb44e2e9ec4c 2213 // #define HAS_analogIn10 0
whismanoid 0:cb44e2e9ec4c 2214 // #define HAS_analogIn11 0
whismanoid 0:cb44e2e9ec4c 2215 // #define HAS_analogIn12 0
whismanoid 0:cb44e2e9ec4c 2216 // #define HAS_analogIn13 0
whismanoid 0:cb44e2e9ec4c 2217 // #define HAS_analogIn14 0
whismanoid 0:cb44e2e9ec4c 2218 // #define HAS_analogIn15 0
whismanoid 0:cb44e2e9ec4c 2219 #if HAS_analogIn0
whismanoid 0:cb44e2e9ec4c 2220 AnalogIn analogIn0(AIN_0); // TARGET_MAX32620FTHR J1.5 AIN_0 = AIN0 pin fullscale is 1.2V
whismanoid 0:cb44e2e9ec4c 2221 #endif
whismanoid 0:cb44e2e9ec4c 2222 #if HAS_analogIn1
whismanoid 0:cb44e2e9ec4c 2223 AnalogIn analogIn1(AIN_1); // TARGET_MAX32620FTHR J1.6 AIN_1 = AIN1 pin fullscale is 1.2V
whismanoid 0:cb44e2e9ec4c 2224 #endif
whismanoid 0:cb44e2e9ec4c 2225 #if HAS_analogIn2
whismanoid 0:cb44e2e9ec4c 2226 AnalogIn analogIn2(AIN_2); // TARGET_MAX32620FTHR J1.7 AIN_2 = AIN2 pin fullscale is 1.2V
whismanoid 0:cb44e2e9ec4c 2227 #endif
whismanoid 0:cb44e2e9ec4c 2228 #if HAS_analogIn3
whismanoid 0:cb44e2e9ec4c 2229 AnalogIn analogIn3(AIN_3); // TARGET_MAX32620FTHR J1.8 AIN_3 = AIN3 pin fullscale is 1.2V
whismanoid 0:cb44e2e9ec4c 2230 #endif
whismanoid 0:cb44e2e9ec4c 2231 #if HAS_analogIn4
whismanoid 0:cb44e2e9ec4c 2232 AnalogIn analogIn4(AIN_4); // TARGET_MAX32620FTHR J1.5 AIN_4 = AIN0 / 5.0 fullscale is 6.0V
whismanoid 0:cb44e2e9ec4c 2233 #endif
whismanoid 0:cb44e2e9ec4c 2234 #if HAS_analogIn5
whismanoid 0:cb44e2e9ec4c 2235 AnalogIn analogIn5(AIN_5); // TARGET_MAX32620FTHR J1.6 AIN_5 = AIN1 / 5.0 fullscale is 6.0V
whismanoid 0:cb44e2e9ec4c 2236 #endif
whismanoid 0:cb44e2e9ec4c 2237 #if HAS_analogIn6
whismanoid 0:cb44e2e9ec4c 2238 AnalogIn analogIn6(AIN_6); // TARGET_MAX32620FTHR AIN_6 = VDDB / 4.0 fullscale is 4.8V
whismanoid 0:cb44e2e9ec4c 2239 #endif
whismanoid 0:cb44e2e9ec4c 2240 #if HAS_analogIn7
whismanoid 0:cb44e2e9ec4c 2241 AnalogIn analogIn7(AIN_7); // TARGET_MAX32620FTHR AIN_7 = VDD18 fullscale is 1.2V
whismanoid 0:cb44e2e9ec4c 2242 #endif
whismanoid 0:cb44e2e9ec4c 2243 #if HAS_analogIn8
whismanoid 0:cb44e2e9ec4c 2244 AnalogIn analogIn8(AIN_8); // TARGET_MAX32620FTHR AIN_8 = VDD12 fullscale is 1.2V
whismanoid 0:cb44e2e9ec4c 2245 #endif
whismanoid 0:cb44e2e9ec4c 2246 #if HAS_analogIn9
whismanoid 0:cb44e2e9ec4c 2247 AnalogIn analogIn9(AIN_9); // TARGET_MAX32620FTHR AIN_9 = VRTC / 2.0 fullscale is 2.4V
whismanoid 0:cb44e2e9ec4c 2248 #endif
whismanoid 0:cb44e2e9ec4c 2249 #if HAS_analogIn10
whismanoid 0:cb44e2e9ec4c 2250 AnalogIn analogIn10(____); // TARGET_MAX32620FTHR AIN_10 = x undefined?
whismanoid 0:cb44e2e9ec4c 2251 #endif
whismanoid 0:cb44e2e9ec4c 2252 #if HAS_analogIn11
whismanoid 0:cb44e2e9ec4c 2253 AnalogIn analogIn11(____); // TARGET_MAX32620FTHR AIN_11 = VDDIO / 4.0 fullscale is 4.8V
whismanoid 0:cb44e2e9ec4c 2254 #endif
whismanoid 0:cb44e2e9ec4c 2255 #if HAS_analogIn12
whismanoid 0:cb44e2e9ec4c 2256 AnalogIn analogIn12(____); // TARGET_MAX32620FTHR AIN_12 = VDDIOH / 4.0 fullscale is 4.8V
whismanoid 0:cb44e2e9ec4c 2257 #endif
whismanoid 0:cb44e2e9ec4c 2258 #if HAS_analogIn13
whismanoid 0:cb44e2e9ec4c 2259 AnalogIn analogIn13(____);
whismanoid 0:cb44e2e9ec4c 2260 #endif
whismanoid 0:cb44e2e9ec4c 2261 #if HAS_analogIn14
whismanoid 0:cb44e2e9ec4c 2262 AnalogIn analogIn14(____);
whismanoid 0:cb44e2e9ec4c 2263 #endif
whismanoid 0:cb44e2e9ec4c 2264 #if HAS_analogIn15
whismanoid 0:cb44e2e9ec4c 2265 AnalogIn analogIn15(____);
whismanoid 0:cb44e2e9ec4c 2266 #endif
whismanoid 0:cb44e2e9ec4c 2267 //--------------------------------------------------
whismanoid 19:5ff09c8e9daf 2268 #elif defined(TARGET_MAX32625PICO) || defined(TARGET_MAX40108DEMOP2U9)
whismanoid 37:3f369235e5bc 2269 // #warning "TARGET_MAX32625PICO not previously tested; need to verify analogIn0..."
whismanoid 0:cb44e2e9ec4c 2270 #define HAS_analogIn0 1
whismanoid 0:cb44e2e9ec4c 2271 #define HAS_analogIn1 1
whismanoid 0:cb44e2e9ec4c 2272 #define HAS_analogIn2 1
whismanoid 0:cb44e2e9ec4c 2273 #define HAS_analogIn3 1
whismanoid 0:cb44e2e9ec4c 2274 #define HAS_analogIn4 1
whismanoid 0:cb44e2e9ec4c 2275 #define HAS_analogIn5 1
whismanoid 0:cb44e2e9ec4c 2276 #if HAS_analogIn0
whismanoid 0:cb44e2e9ec4c 2277 AnalogIn analogIn0(AIN_0); // TARGET_MAX32630 J1.5 AIN_0 = AIN0 pin fullscale is 1.2V
whismanoid 0:cb44e2e9ec4c 2278 #endif
whismanoid 0:cb44e2e9ec4c 2279 #if HAS_analogIn1
whismanoid 0:cb44e2e9ec4c 2280 AnalogIn analogIn1(AIN_1); // TARGET_MAX32630 J1.6 AIN_1 = AIN1 pin fullscale is 1.2V
whismanoid 0:cb44e2e9ec4c 2281 #endif
whismanoid 0:cb44e2e9ec4c 2282 #if HAS_analogIn2
whismanoid 0:cb44e2e9ec4c 2283 AnalogIn analogIn2(AIN_2); // TARGET_MAX32630 J1.7 AIN_2 = AIN2 pin fullscale is 1.2V
whismanoid 0:cb44e2e9ec4c 2284 #endif
whismanoid 0:cb44e2e9ec4c 2285 #if HAS_analogIn3
whismanoid 0:cb44e2e9ec4c 2286 AnalogIn analogIn3(AIN_3); // TARGET_MAX32630 J1.8 AIN_3 = AIN3 pin fullscale is 1.2V
whismanoid 0:cb44e2e9ec4c 2287 #endif
whismanoid 0:cb44e2e9ec4c 2288 #if HAS_analogIn4
whismanoid 0:cb44e2e9ec4c 2289 AnalogIn analogIn4(AIN_4); // TARGET_MAX32630 J1.5 AIN_4 = AIN0 / 5.0 fullscale is 6.0V
whismanoid 0:cb44e2e9ec4c 2290 #endif
whismanoid 0:cb44e2e9ec4c 2291 #if HAS_analogIn5
whismanoid 0:cb44e2e9ec4c 2292 AnalogIn analogIn5(AIN_5); // TARGET_MAX32630 J1.6 AIN_5 = AIN1 / 5.0 fullscale is 6.0V
whismanoid 0:cb44e2e9ec4c 2293 #endif
whismanoid 0:cb44e2e9ec4c 2294 //--------------------------------------------------
whismanoid 0:cb44e2e9ec4c 2295 #elif defined(TARGET_MAX32600)
whismanoid 0:cb44e2e9ec4c 2296 #define HAS_analogIn0 1
whismanoid 0:cb44e2e9ec4c 2297 #define HAS_analogIn1 1
whismanoid 0:cb44e2e9ec4c 2298 #define HAS_analogIn2 1
whismanoid 0:cb44e2e9ec4c 2299 #define HAS_analogIn3 1
whismanoid 0:cb44e2e9ec4c 2300 #define HAS_analogIn4 1
whismanoid 0:cb44e2e9ec4c 2301 #define HAS_analogIn5 1
whismanoid 0:cb44e2e9ec4c 2302 #if HAS_analogIn0
whismanoid 0:cb44e2e9ec4c 2303 AnalogIn analogIn0(A0);
whismanoid 0:cb44e2e9ec4c 2304 #endif
whismanoid 0:cb44e2e9ec4c 2305 #if HAS_analogIn1
whismanoid 0:cb44e2e9ec4c 2306 AnalogIn analogIn1(A1);
whismanoid 0:cb44e2e9ec4c 2307 #endif
whismanoid 0:cb44e2e9ec4c 2308 #if HAS_analogIn2
whismanoid 0:cb44e2e9ec4c 2309 AnalogIn analogIn2(A2);
whismanoid 0:cb44e2e9ec4c 2310 #endif
whismanoid 0:cb44e2e9ec4c 2311 #if HAS_analogIn3
whismanoid 0:cb44e2e9ec4c 2312 AnalogIn analogIn3(A3);
whismanoid 0:cb44e2e9ec4c 2313 #endif
whismanoid 0:cb44e2e9ec4c 2314 #if HAS_analogIn4
whismanoid 0:cb44e2e9ec4c 2315 AnalogIn analogIn4(A4);
whismanoid 0:cb44e2e9ec4c 2316 #endif
whismanoid 0:cb44e2e9ec4c 2317 #if HAS_analogIn5
whismanoid 0:cb44e2e9ec4c 2318 AnalogIn analogIn5(A5);
whismanoid 0:cb44e2e9ec4c 2319 #endif
whismanoid 0:cb44e2e9ec4c 2320 //--------------------------------------------------
whismanoid 0:cb44e2e9ec4c 2321 #elif defined(TARGET_NUCLEO_F446RE)
whismanoid 0:cb44e2e9ec4c 2322 #define HAS_analogIn0 1
whismanoid 0:cb44e2e9ec4c 2323 #define HAS_analogIn1 1
whismanoid 0:cb44e2e9ec4c 2324 #define HAS_analogIn2 1
whismanoid 0:cb44e2e9ec4c 2325 #define HAS_analogIn3 1
whismanoid 0:cb44e2e9ec4c 2326 #define HAS_analogIn4 1
whismanoid 0:cb44e2e9ec4c 2327 #define HAS_analogIn5 1
whismanoid 0:cb44e2e9ec4c 2328 #if HAS_analogIn0
whismanoid 0:cb44e2e9ec4c 2329 AnalogIn analogIn0(A0);
whismanoid 0:cb44e2e9ec4c 2330 #endif
whismanoid 0:cb44e2e9ec4c 2331 #if HAS_analogIn1
whismanoid 0:cb44e2e9ec4c 2332 AnalogIn analogIn1(A1);
whismanoid 0:cb44e2e9ec4c 2333 #endif
whismanoid 0:cb44e2e9ec4c 2334 #if HAS_analogIn2
whismanoid 0:cb44e2e9ec4c 2335 AnalogIn analogIn2(A2);
whismanoid 0:cb44e2e9ec4c 2336 #endif
whismanoid 0:cb44e2e9ec4c 2337 #if HAS_analogIn3
whismanoid 0:cb44e2e9ec4c 2338 AnalogIn analogIn3(A3);
whismanoid 0:cb44e2e9ec4c 2339 #endif
whismanoid 0:cb44e2e9ec4c 2340 #if HAS_analogIn4
whismanoid 0:cb44e2e9ec4c 2341 AnalogIn analogIn4(A4);
whismanoid 0:cb44e2e9ec4c 2342 #endif
whismanoid 0:cb44e2e9ec4c 2343 #if HAS_analogIn5
whismanoid 0:cb44e2e9ec4c 2344 AnalogIn analogIn5(A5);
whismanoid 0:cb44e2e9ec4c 2345 #endif
whismanoid 0:cb44e2e9ec4c 2346 //--------------------------------------------------
whismanoid 0:cb44e2e9ec4c 2347 #elif defined(TARGET_NUCLEO_F401RE)
whismanoid 0:cb44e2e9ec4c 2348 #define HAS_analogIn0 1
whismanoid 0:cb44e2e9ec4c 2349 #define HAS_analogIn1 1
whismanoid 0:cb44e2e9ec4c 2350 #define HAS_analogIn2 1
whismanoid 0:cb44e2e9ec4c 2351 #define HAS_analogIn3 1
whismanoid 0:cb44e2e9ec4c 2352 #define HAS_analogIn4 1
whismanoid 0:cb44e2e9ec4c 2353 #define HAS_analogIn5 1
whismanoid 0:cb44e2e9ec4c 2354 #if HAS_analogIn0
whismanoid 0:cb44e2e9ec4c 2355 AnalogIn analogIn0(A0);
whismanoid 0:cb44e2e9ec4c 2356 #endif
whismanoid 0:cb44e2e9ec4c 2357 #if HAS_analogIn1
whismanoid 0:cb44e2e9ec4c 2358 AnalogIn analogIn1(A1);
whismanoid 0:cb44e2e9ec4c 2359 #endif
whismanoid 0:cb44e2e9ec4c 2360 #if HAS_analogIn2
whismanoid 0:cb44e2e9ec4c 2361 AnalogIn analogIn2(A2);
whismanoid 0:cb44e2e9ec4c 2362 #endif
whismanoid 0:cb44e2e9ec4c 2363 #if HAS_analogIn3
whismanoid 0:cb44e2e9ec4c 2364 AnalogIn analogIn3(A3);
whismanoid 0:cb44e2e9ec4c 2365 #endif
whismanoid 0:cb44e2e9ec4c 2366 #if HAS_analogIn4
whismanoid 0:cb44e2e9ec4c 2367 AnalogIn analogIn4(A4);
whismanoid 0:cb44e2e9ec4c 2368 #endif
whismanoid 0:cb44e2e9ec4c 2369 #if HAS_analogIn5
whismanoid 0:cb44e2e9ec4c 2370 AnalogIn analogIn5(A5);
whismanoid 0:cb44e2e9ec4c 2371 #endif
whismanoid 0:cb44e2e9ec4c 2372 //--------------------------------------------------
whismanoid 0:cb44e2e9ec4c 2373 // TODO1: TARGET=MAX32625MBED ARM Cortex-M4F 96MHz 512kB Flash 160kB SRAM
whismanoid 0:cb44e2e9ec4c 2374 #elif defined(TARGET_LPC1768)
whismanoid 0:cb44e2e9ec4c 2375 #define HAS_analogIn0 1
whismanoid 0:cb44e2e9ec4c 2376 #define HAS_analogIn1 1
whismanoid 0:cb44e2e9ec4c 2377 #define HAS_analogIn2 1
whismanoid 0:cb44e2e9ec4c 2378 #define HAS_analogIn3 1
whismanoid 0:cb44e2e9ec4c 2379 #define HAS_analogIn4 1
whismanoid 0:cb44e2e9ec4c 2380 #define HAS_analogIn5 1
whismanoid 0:cb44e2e9ec4c 2381 // #define HAS_analogIn6 1
whismanoid 0:cb44e2e9ec4c 2382 // #define HAS_analogIn7 1
whismanoid 0:cb44e2e9ec4c 2383 // #define HAS_analogIn8 1
whismanoid 0:cb44e2e9ec4c 2384 // #define HAS_analogIn9 1
whismanoid 0:cb44e2e9ec4c 2385 // #define HAS_analogIn10 1
whismanoid 0:cb44e2e9ec4c 2386 // #define HAS_analogIn11 1
whismanoid 0:cb44e2e9ec4c 2387 // #define HAS_analogIn12 1
whismanoid 0:cb44e2e9ec4c 2388 // #define HAS_analogIn13 1
whismanoid 0:cb44e2e9ec4c 2389 // #define HAS_analogIn14 1
whismanoid 0:cb44e2e9ec4c 2390 // #define HAS_analogIn15 1
whismanoid 0:cb44e2e9ec4c 2391 #if HAS_analogIn0
whismanoid 0:cb44e2e9ec4c 2392 AnalogIn analogIn0(p15); // TARGET_LPC1768 P0.23/AD0.0/I2SRX_CLK/CAP3.0
whismanoid 0:cb44e2e9ec4c 2393 #endif
whismanoid 0:cb44e2e9ec4c 2394 #if HAS_analogIn1
whismanoid 0:cb44e2e9ec4c 2395 AnalogIn analogIn1(p16); // TARGET_LPC1768 P0.24/AD0.1/I2SRX_WS/CAP3.1
whismanoid 0:cb44e2e9ec4c 2396 #endif
whismanoid 0:cb44e2e9ec4c 2397 #if HAS_analogIn2
whismanoid 0:cb44e2e9ec4c 2398 AnalogIn analogIn2(p17); // TARGET_LPC1768 P0.25/AD0.2/I2SRX_SDA/TXD3
whismanoid 0:cb44e2e9ec4c 2399 #endif
whismanoid 0:cb44e2e9ec4c 2400 #if HAS_analogIn3
whismanoid 0:cb44e2e9ec4c 2401 AnalogIn analogIn3(p18); // TARGET_LPC1768 P0.26/AD0.3/AOUT/RXD3
whismanoid 0:cb44e2e9ec4c 2402 #endif
whismanoid 0:cb44e2e9ec4c 2403 #if HAS_analogIn4
whismanoid 0:cb44e2e9ec4c 2404 AnalogIn analogIn4(p19); // TARGET_LPC1768 P1.30/VBUS/AD0.4
whismanoid 0:cb44e2e9ec4c 2405 #endif
whismanoid 0:cb44e2e9ec4c 2406 #if HAS_analogIn5
whismanoid 0:cb44e2e9ec4c 2407 AnalogIn analogIn5(p20); // TARGET_LPC1768 P1.31/SCK1/AD0.5
whismanoid 0:cb44e2e9ec4c 2408 #endif
whismanoid 0:cb44e2e9ec4c 2409 #if HAS_analogIn6
whismanoid 0:cb44e2e9ec4c 2410 AnalogIn analogIn6(____);
whismanoid 0:cb44e2e9ec4c 2411 #endif
whismanoid 0:cb44e2e9ec4c 2412 #if HAS_analogIn7
whismanoid 0:cb44e2e9ec4c 2413 AnalogIn analogIn7(____);
whismanoid 0:cb44e2e9ec4c 2414 #endif
whismanoid 0:cb44e2e9ec4c 2415 #if HAS_analogIn8
whismanoid 0:cb44e2e9ec4c 2416 AnalogIn analogIn8(____);
whismanoid 0:cb44e2e9ec4c 2417 #endif
whismanoid 0:cb44e2e9ec4c 2418 #if HAS_analogIn9
whismanoid 0:cb44e2e9ec4c 2419 AnalogIn analogIn9(____);
whismanoid 0:cb44e2e9ec4c 2420 #endif
whismanoid 0:cb44e2e9ec4c 2421 #if HAS_analogIn10
whismanoid 0:cb44e2e9ec4c 2422 AnalogIn analogIn10(____);
whismanoid 0:cb44e2e9ec4c 2423 #endif
whismanoid 0:cb44e2e9ec4c 2424 #if HAS_analogIn11
whismanoid 0:cb44e2e9ec4c 2425 AnalogIn analogIn11(____);
whismanoid 0:cb44e2e9ec4c 2426 #endif
whismanoid 0:cb44e2e9ec4c 2427 #if HAS_analogIn12
whismanoid 0:cb44e2e9ec4c 2428 AnalogIn analogIn12(____);
whismanoid 0:cb44e2e9ec4c 2429 #endif
whismanoid 0:cb44e2e9ec4c 2430 #if HAS_analogIn13
whismanoid 0:cb44e2e9ec4c 2431 AnalogIn analogIn13(____);
whismanoid 0:cb44e2e9ec4c 2432 #endif
whismanoid 0:cb44e2e9ec4c 2433 #if HAS_analogIn14
whismanoid 0:cb44e2e9ec4c 2434 AnalogIn analogIn14(____);
whismanoid 0:cb44e2e9ec4c 2435 #endif
whismanoid 0:cb44e2e9ec4c 2436 #if HAS_analogIn15
whismanoid 0:cb44e2e9ec4c 2437 AnalogIn analogIn15(____);
whismanoid 0:cb44e2e9ec4c 2438 #endif
whismanoid 0:cb44e2e9ec4c 2439 #else
whismanoid 0:cb44e2e9ec4c 2440 // unknown target
whismanoid 0:cb44e2e9ec4c 2441 #endif
whismanoid 0:cb44e2e9ec4c 2442 // uncrustify-0.66.1 *INDENT-ON*
whismanoid 0:cb44e2e9ec4c 2443 #if HAS_analogIn0 || HAS_analogIn1 \
whismanoid 0:cb44e2e9ec4c 2444 || HAS_analogIn2 || HAS_analogIn3 \
whismanoid 0:cb44e2e9ec4c 2445 || HAS_analogIn4 || HAS_analogIn5 \
whismanoid 0:cb44e2e9ec4c 2446 || HAS_analogIn6 || HAS_analogIn7 \
whismanoid 0:cb44e2e9ec4c 2447 || HAS_analogIn8 || HAS_analogIn9 \
whismanoid 0:cb44e2e9ec4c 2448 || HAS_analogIn10 || HAS_analogIn11 \
whismanoid 0:cb44e2e9ec4c 2449 || HAS_analogIn12 || HAS_analogIn13 \
whismanoid 0:cb44e2e9ec4c 2450 || HAS_analogIn14 || HAS_analogIn15
whismanoid 0:cb44e2e9ec4c 2451 #define HAS_analogIns 1
whismanoid 0:cb44e2e9ec4c 2452 #else
whismanoid 0:cb44e2e9ec4c 2453 #warning "Note: There are no analogIn resources defined"
whismanoid 0:cb44e2e9ec4c 2454 #endif
whismanoid 0:cb44e2e9ec4c 2455
whismanoid 0:cb44e2e9ec4c 2456 // DigitalInOut pin resource: print the pin index names to serial
whismanoid 0:cb44e2e9ec4c 2457 #if HAS_digitalInOuts
whismanoid 0:cb44e2e9ec4c 2458 void list_digitalInOutPins(Stream& serialStream)
whismanoid 0:cb44e2e9ec4c 2459 {
whismanoid 0:cb44e2e9ec4c 2460 #if HAS_digitalInOut0
whismanoid 0:cb44e2e9ec4c 2461 serialStream.printf(" 0");
whismanoid 0:cb44e2e9ec4c 2462 #endif
whismanoid 0:cb44e2e9ec4c 2463 #if HAS_digitalInOut1
whismanoid 0:cb44e2e9ec4c 2464 serialStream.printf(" 1");
whismanoid 0:cb44e2e9ec4c 2465 #endif
whismanoid 0:cb44e2e9ec4c 2466 #if HAS_digitalInOut2
whismanoid 0:cb44e2e9ec4c 2467 serialStream.printf(" 2");
whismanoid 0:cb44e2e9ec4c 2468 #endif
whismanoid 0:cb44e2e9ec4c 2469 #if HAS_digitalInOut3
whismanoid 0:cb44e2e9ec4c 2470 serialStream.printf(" 3");
whismanoid 0:cb44e2e9ec4c 2471 #endif
whismanoid 0:cb44e2e9ec4c 2472 #if HAS_digitalInOut4
whismanoid 0:cb44e2e9ec4c 2473 serialStream.printf(" 4");
whismanoid 0:cb44e2e9ec4c 2474 #endif
whismanoid 0:cb44e2e9ec4c 2475 #if HAS_digitalInOut5
whismanoid 0:cb44e2e9ec4c 2476 serialStream.printf(" 5");
whismanoid 0:cb44e2e9ec4c 2477 #endif
whismanoid 0:cb44e2e9ec4c 2478 #if HAS_digitalInOut6
whismanoid 0:cb44e2e9ec4c 2479 serialStream.printf(" 6");
whismanoid 0:cb44e2e9ec4c 2480 #endif
whismanoid 0:cb44e2e9ec4c 2481 #if HAS_digitalInOut7
whismanoid 0:cb44e2e9ec4c 2482 serialStream.printf(" 7");
whismanoid 0:cb44e2e9ec4c 2483 #endif
whismanoid 0:cb44e2e9ec4c 2484 #if HAS_digitalInOut8
whismanoid 0:cb44e2e9ec4c 2485 serialStream.printf(" 8");
whismanoid 0:cb44e2e9ec4c 2486 #endif
whismanoid 0:cb44e2e9ec4c 2487 #if HAS_digitalInOut9
whismanoid 0:cb44e2e9ec4c 2488 serialStream.printf(" 9");
whismanoid 0:cb44e2e9ec4c 2489 #endif
whismanoid 0:cb44e2e9ec4c 2490 #if HAS_digitalInOut10
whismanoid 0:cb44e2e9ec4c 2491 serialStream.printf(" 10");
whismanoid 0:cb44e2e9ec4c 2492 #endif
whismanoid 0:cb44e2e9ec4c 2493 #if HAS_digitalInOut11
whismanoid 0:cb44e2e9ec4c 2494 serialStream.printf(" 11");
whismanoid 0:cb44e2e9ec4c 2495 #endif
whismanoid 0:cb44e2e9ec4c 2496 #if HAS_digitalInOut12
whismanoid 0:cb44e2e9ec4c 2497 serialStream.printf(" 12");
whismanoid 0:cb44e2e9ec4c 2498 #endif
whismanoid 0:cb44e2e9ec4c 2499 #if HAS_digitalInOut13
whismanoid 0:cb44e2e9ec4c 2500 serialStream.printf(" 13");
whismanoid 0:cb44e2e9ec4c 2501 #endif
whismanoid 0:cb44e2e9ec4c 2502 #if HAS_digitalInOut14
whismanoid 0:cb44e2e9ec4c 2503 serialStream.printf(" 14");
whismanoid 0:cb44e2e9ec4c 2504 #endif
whismanoid 0:cb44e2e9ec4c 2505 #if HAS_digitalInOut15
whismanoid 0:cb44e2e9ec4c 2506 serialStream.printf(" 15");
whismanoid 0:cb44e2e9ec4c 2507 #endif
whismanoid 0:cb44e2e9ec4c 2508 #if HAS_digitalInOut16
whismanoid 0:cb44e2e9ec4c 2509 serialStream.printf(" 16");
whismanoid 0:cb44e2e9ec4c 2510 #endif
whismanoid 0:cb44e2e9ec4c 2511 #if HAS_digitalInOut17
whismanoid 0:cb44e2e9ec4c 2512 serialStream.printf(" 17");
whismanoid 0:cb44e2e9ec4c 2513 #endif
whismanoid 18:1235c17b451e 2514 #if USE_LEDS
whismanoid 18:1235c17b451e 2515 // support LEDs as digital pins 91 92 93; WIP button as digital pin 90
whismanoid 18:1235c17b451e 2516 // support list_digitalInOutPins() listing buttons and leds as pin numbers 90/91/92/93
whismanoid 18:1235c17b451e 2517 // TODO: support find_digitalInOutPin(90) return DigitalInOut of switch SW1/BUTTON1
whismanoid 18:1235c17b451e 2518 //~ serialStream.printf(" 90");
whismanoid 18:1235c17b451e 2519 // support find_digitalInOutPin(91) return DigitalInOut of led1_RFailLED
whismanoid 18:1235c17b451e 2520 serialStream.printf(" 91");
whismanoid 18:1235c17b451e 2521 // support find_digitalInOutPin(92) return DigitalInOut of led2_GPassLED
whismanoid 18:1235c17b451e 2522 serialStream.printf(" 92");
whismanoid 18:1235c17b451e 2523 // support find_digitalInOutPin(93) return DigitalInOut of led3_BBusyLED
whismanoid 18:1235c17b451e 2524 serialStream.printf(" 93");
whismanoid 18:1235c17b451e 2525 #else // USE_LEDS
whismanoid 18:1235c17b451e 2526 #endif // USE_LEDS
whismanoid 0:cb44e2e9ec4c 2527 }
whismanoid 0:cb44e2e9ec4c 2528 #endif
whismanoid 0:cb44e2e9ec4c 2529
whismanoid 0:cb44e2e9ec4c 2530
whismanoid 0:cb44e2e9ec4c 2531 // DigitalInOut pin resource: search index
whismanoid 0:cb44e2e9ec4c 2532 #if HAS_digitalInOuts
whismanoid 0:cb44e2e9ec4c 2533 DigitalInOut& find_digitalInOutPin(int cPinIndex)
whismanoid 0:cb44e2e9ec4c 2534 {
whismanoid 0:cb44e2e9ec4c 2535 switch (cPinIndex)
whismanoid 0:cb44e2e9ec4c 2536 {
whismanoid 0:cb44e2e9ec4c 2537 default: // default to the first defined digitalInOut pin
whismanoid 0:cb44e2e9ec4c 2538 #if HAS_digitalInOut0
whismanoid 0:cb44e2e9ec4c 2539 case '0': case 0x00: return digitalInOut0;
whismanoid 0:cb44e2e9ec4c 2540 #endif
whismanoid 0:cb44e2e9ec4c 2541 #if HAS_digitalInOut1
whismanoid 0:cb44e2e9ec4c 2542 case '1': case 0x01: return digitalInOut1;
whismanoid 0:cb44e2e9ec4c 2543 #endif
whismanoid 0:cb44e2e9ec4c 2544 #if HAS_digitalInOut2
whismanoid 0:cb44e2e9ec4c 2545 case '2': case 0x02: return digitalInOut2;
whismanoid 0:cb44e2e9ec4c 2546 #endif
whismanoid 0:cb44e2e9ec4c 2547 #if HAS_digitalInOut3
whismanoid 0:cb44e2e9ec4c 2548 case '3': case 0x03: return digitalInOut3;
whismanoid 0:cb44e2e9ec4c 2549 #endif
whismanoid 0:cb44e2e9ec4c 2550 #if HAS_digitalInOut4
whismanoid 0:cb44e2e9ec4c 2551 case '4': case 0x04: return digitalInOut4;
whismanoid 0:cb44e2e9ec4c 2552 #endif
whismanoid 0:cb44e2e9ec4c 2553 #if HAS_digitalInOut5
whismanoid 0:cb44e2e9ec4c 2554 case '5': case 0x05: return digitalInOut5;
whismanoid 0:cb44e2e9ec4c 2555 #endif
whismanoid 0:cb44e2e9ec4c 2556 #if HAS_digitalInOut6
whismanoid 0:cb44e2e9ec4c 2557 case '6': case 0x06: return digitalInOut6;
whismanoid 0:cb44e2e9ec4c 2558 #endif
whismanoid 0:cb44e2e9ec4c 2559 #if HAS_digitalInOut7
whismanoid 0:cb44e2e9ec4c 2560 case '7': case 0x07: return digitalInOut7;
whismanoid 0:cb44e2e9ec4c 2561 #endif
whismanoid 0:cb44e2e9ec4c 2562 #if HAS_digitalInOut8
whismanoid 0:cb44e2e9ec4c 2563 case '8': case 0x08: return digitalInOut8;
whismanoid 0:cb44e2e9ec4c 2564 #endif
whismanoid 0:cb44e2e9ec4c 2565 #if HAS_digitalInOut9
whismanoid 0:cb44e2e9ec4c 2566 case '9': case 0x09: return digitalInOut9;
whismanoid 0:cb44e2e9ec4c 2567 #endif
whismanoid 0:cb44e2e9ec4c 2568 #if HAS_digitalInOut10
whismanoid 0:cb44e2e9ec4c 2569 case 'a': case 0x0a: return digitalInOut10;
whismanoid 0:cb44e2e9ec4c 2570 #endif
whismanoid 0:cb44e2e9ec4c 2571 #if HAS_digitalInOut11
whismanoid 0:cb44e2e9ec4c 2572 case 'b': case 0x0b: return digitalInOut11;
whismanoid 0:cb44e2e9ec4c 2573 #endif
whismanoid 0:cb44e2e9ec4c 2574 #if HAS_digitalInOut12
whismanoid 0:cb44e2e9ec4c 2575 case 'c': case 0x0c: return digitalInOut12;
whismanoid 0:cb44e2e9ec4c 2576 #endif
whismanoid 0:cb44e2e9ec4c 2577 #if HAS_digitalInOut13
whismanoid 0:cb44e2e9ec4c 2578 case 'd': case 0x0d: return digitalInOut13;
whismanoid 0:cb44e2e9ec4c 2579 #endif
whismanoid 0:cb44e2e9ec4c 2580 #if HAS_digitalInOut14
whismanoid 0:cb44e2e9ec4c 2581 case 'e': case 0x0e: return digitalInOut14;
whismanoid 0:cb44e2e9ec4c 2582 #endif
whismanoid 0:cb44e2e9ec4c 2583 #if HAS_digitalInOut15
whismanoid 0:cb44e2e9ec4c 2584 case 'f': case 0x0f: return digitalInOut15;
whismanoid 0:cb44e2e9ec4c 2585 #endif
whismanoid 0:cb44e2e9ec4c 2586 #if HAS_digitalInOut16
whismanoid 0:cb44e2e9ec4c 2587 case 'g': case 0x10: return digitalInOut16;
whismanoid 0:cb44e2e9ec4c 2588 #endif
whismanoid 0:cb44e2e9ec4c 2589 #if HAS_digitalInOut17
whismanoid 0:cb44e2e9ec4c 2590 case 'h': case 0x11: return digitalInOut17;
whismanoid 0:cb44e2e9ec4c 2591 #endif
whismanoid 18:1235c17b451e 2592 // support LEDs as digital pins 91 92 93; WIP button as digital pin 90
whismanoid 18:1235c17b451e 2593 // TODO: support find_digitalInOutPin(90) return DigitalInOut of switch SW1/BUTTON1
whismanoid 18:1235c17b451e 2594 //~ case 90: return button1;
whismanoid 18:1235c17b451e 2595 #if USE_LEDS
whismanoid 18:1235c17b451e 2596 // support find_digitalInOutPin(91) return DigitalInOut of led1_RFailLED
whismanoid 18:1235c17b451e 2597 case 91: return led1_RFailLED;
whismanoid 18:1235c17b451e 2598 // support find_digitalInOutPin(92) return DigitalInOut of led2_GPassLED
whismanoid 18:1235c17b451e 2599 case 92: return led2_GPassLED;
whismanoid 18:1235c17b451e 2600 // support find_digitalInOutPin(93) return DigitalInOut of led3_BBusyLED
whismanoid 18:1235c17b451e 2601 case 93: return led3_BBusyLED;
whismanoid 18:1235c17b451e 2602 #else // USE_LEDS
whismanoid 18:1235c17b451e 2603 #endif // USE_LEDS
whismanoid 0:cb44e2e9ec4c 2604 }
whismanoid 0:cb44e2e9ec4c 2605 }
whismanoid 0:cb44e2e9ec4c 2606 #endif
whismanoid 0:cb44e2e9ec4c 2607
whismanoid 0:cb44e2e9ec4c 2608
whismanoid 0:cb44e2e9ec4c 2609 // AnalogIn pin resource: search index
whismanoid 0:cb44e2e9ec4c 2610 #if HAS_analogIns
whismanoid 0:cb44e2e9ec4c 2611 AnalogIn& find_analogInPin(int cPinIndex)
whismanoid 0:cb44e2e9ec4c 2612 {
whismanoid 0:cb44e2e9ec4c 2613 switch (cPinIndex)
whismanoid 0:cb44e2e9ec4c 2614 {
whismanoid 0:cb44e2e9ec4c 2615 default: // default to the first defined analogIn pin
whismanoid 0:cb44e2e9ec4c 2616 #if HAS_analogIn0
whismanoid 0:cb44e2e9ec4c 2617 case '0': case 0x00: return analogIn0;
whismanoid 0:cb44e2e9ec4c 2618 #endif
whismanoid 0:cb44e2e9ec4c 2619 #if HAS_analogIn1
whismanoid 0:cb44e2e9ec4c 2620 case '1': case 0x01: return analogIn1;
whismanoid 0:cb44e2e9ec4c 2621 #endif
whismanoid 0:cb44e2e9ec4c 2622 #if HAS_analogIn2
whismanoid 0:cb44e2e9ec4c 2623 case '2': case 0x02: return analogIn2;
whismanoid 0:cb44e2e9ec4c 2624 #endif
whismanoid 0:cb44e2e9ec4c 2625 #if HAS_analogIn3
whismanoid 0:cb44e2e9ec4c 2626 case '3': case 0x03: return analogIn3;
whismanoid 0:cb44e2e9ec4c 2627 #endif
whismanoid 0:cb44e2e9ec4c 2628 #if HAS_analogIn4
whismanoid 0:cb44e2e9ec4c 2629 case '4': case 0x04: return analogIn4;
whismanoid 0:cb44e2e9ec4c 2630 #endif
whismanoid 0:cb44e2e9ec4c 2631 #if HAS_analogIn5
whismanoid 0:cb44e2e9ec4c 2632 case '5': case 0x05: return analogIn5;
whismanoid 0:cb44e2e9ec4c 2633 #endif
whismanoid 0:cb44e2e9ec4c 2634 #if HAS_analogIn6
whismanoid 0:cb44e2e9ec4c 2635 case '6': case 0x06: return analogIn6;
whismanoid 0:cb44e2e9ec4c 2636 #endif
whismanoid 0:cb44e2e9ec4c 2637 #if HAS_analogIn7
whismanoid 0:cb44e2e9ec4c 2638 case '7': case 0x07: return analogIn7;
whismanoid 0:cb44e2e9ec4c 2639 #endif
whismanoid 0:cb44e2e9ec4c 2640 #if HAS_analogIn8
whismanoid 0:cb44e2e9ec4c 2641 case '8': case 0x08: return analogIn8;
whismanoid 0:cb44e2e9ec4c 2642 #endif
whismanoid 0:cb44e2e9ec4c 2643 #if HAS_analogIn9
whismanoid 0:cb44e2e9ec4c 2644 case '9': case 0x09: return analogIn9;
whismanoid 0:cb44e2e9ec4c 2645 #endif
whismanoid 0:cb44e2e9ec4c 2646 #if HAS_analogIn10
whismanoid 0:cb44e2e9ec4c 2647 case 'a': case 0x0a: return analogIn10;
whismanoid 0:cb44e2e9ec4c 2648 #endif
whismanoid 0:cb44e2e9ec4c 2649 #if HAS_analogIn11
whismanoid 0:cb44e2e9ec4c 2650 case 'b': case 0x0b: return analogIn11;
whismanoid 0:cb44e2e9ec4c 2651 #endif
whismanoid 0:cb44e2e9ec4c 2652 #if HAS_analogIn12
whismanoid 0:cb44e2e9ec4c 2653 case 'c': case 0x0c: return analogIn12;
whismanoid 0:cb44e2e9ec4c 2654 #endif
whismanoid 0:cb44e2e9ec4c 2655 #if HAS_analogIn13
whismanoid 0:cb44e2e9ec4c 2656 case 'd': case 0x0d: return analogIn13;
whismanoid 0:cb44e2e9ec4c 2657 #endif
whismanoid 0:cb44e2e9ec4c 2658 #if HAS_analogIn14
whismanoid 0:cb44e2e9ec4c 2659 case 'e': case 0x0e: return analogIn14;
whismanoid 0:cb44e2e9ec4c 2660 #endif
whismanoid 0:cb44e2e9ec4c 2661 #if HAS_analogIn15
whismanoid 0:cb44e2e9ec4c 2662 case 'f': case 0x0f: return analogIn15;
whismanoid 0:cb44e2e9ec4c 2663 #endif
whismanoid 0:cb44e2e9ec4c 2664 }
whismanoid 0:cb44e2e9ec4c 2665 }
whismanoid 0:cb44e2e9ec4c 2666 #endif
whismanoid 0:cb44e2e9ec4c 2667
whismanoid 0:cb44e2e9ec4c 2668 #if HAS_analogIns
whismanoid 0:cb44e2e9ec4c 2669 const float analogInPin_fullScaleVoltage[] = {
whismanoid 0:cb44e2e9ec4c 2670 # if defined(TARGET_MAX32630)
whismanoid 0:cb44e2e9ec4c 2671 ADC_FULL_SCALE_VOLTAGE, // analogIn0
whismanoid 0:cb44e2e9ec4c 2672 ADC_FULL_SCALE_VOLTAGE, // analogIn1
whismanoid 0:cb44e2e9ec4c 2673 ADC_FULL_SCALE_VOLTAGE, // analogIn2
whismanoid 0:cb44e2e9ec4c 2674 ADC_FULL_SCALE_VOLTAGE, // analogIn3
whismanoid 0:cb44e2e9ec4c 2675 ADC_FULL_SCALE_VOLTAGE * 5.0f, // analogIn4 // AIN_4 = AIN0 / 5.0 fullscale is 6.0V
whismanoid 0:cb44e2e9ec4c 2676 ADC_FULL_SCALE_VOLTAGE * 5.0f, // analogIn4 // AIN_5 = AIN1 / 5.0 fullscale is 6.0V
whismanoid 0:cb44e2e9ec4c 2677 ADC_FULL_SCALE_VOLTAGE * 4.0f, // analogIn6 // AIN_6 = VDDB / 4.0 fullscale is 4.8V
whismanoid 0:cb44e2e9ec4c 2678 ADC_FULL_SCALE_VOLTAGE, // analogIn7 // AIN_7 = VDD18 fullscale is 1.2V
whismanoid 0:cb44e2e9ec4c 2679 ADC_FULL_SCALE_VOLTAGE, // analogIn8 // AIN_8 = VDD12 fullscale is 1.2V
whismanoid 0:cb44e2e9ec4c 2680 ADC_FULL_SCALE_VOLTAGE * 2.0f, // analogIn9 // AIN_9 = VRTC / 2.0 fullscale is 2.4V
whismanoid 0:cb44e2e9ec4c 2681 ADC_FULL_SCALE_VOLTAGE, // analogIn10 // AIN_10 = x undefined?
whismanoid 0:cb44e2e9ec4c 2682 ADC_FULL_SCALE_VOLTAGE * 4.0f, // analogIn11 // AIN_11 = VDDIO / 4.0 fullscale is 4.8V
whismanoid 0:cb44e2e9ec4c 2683 ADC_FULL_SCALE_VOLTAGE * 4.0f, // analogIn12 // AIN_12 = VDDIOH / 4.0 fullscale is 4.8V
whismanoid 0:cb44e2e9ec4c 2684 ADC_FULL_SCALE_VOLTAGE, // analogIn13
whismanoid 0:cb44e2e9ec4c 2685 ADC_FULL_SCALE_VOLTAGE, // analogIn14
whismanoid 0:cb44e2e9ec4c 2686 ADC_FULL_SCALE_VOLTAGE // analogIn15
whismanoid 0:cb44e2e9ec4c 2687 # elif defined(TARGET_MAX32620FTHR)
whismanoid 0:cb44e2e9ec4c 2688 #warning "TARGET_MAX32620FTHR not previously tested; need to verify analogIn0..."
whismanoid 0:cb44e2e9ec4c 2689 ADC_FULL_SCALE_VOLTAGE, // analogIn0
whismanoid 0:cb44e2e9ec4c 2690 ADC_FULL_SCALE_VOLTAGE, // analogIn1
whismanoid 0:cb44e2e9ec4c 2691 ADC_FULL_SCALE_VOLTAGE, // analogIn2
whismanoid 0:cb44e2e9ec4c 2692 ADC_FULL_SCALE_VOLTAGE, // analogIn3
whismanoid 0:cb44e2e9ec4c 2693 ADC_FULL_SCALE_VOLTAGE * 5.0f, // analogIn4 // AIN_4 = AIN0 / 5.0 fullscale is 6.0V
whismanoid 0:cb44e2e9ec4c 2694 ADC_FULL_SCALE_VOLTAGE * 5.0f, // analogIn4 // AIN_5 = AIN1 / 5.0 fullscale is 6.0V
whismanoid 0:cb44e2e9ec4c 2695 ADC_FULL_SCALE_VOLTAGE * 4.0f, // analogIn6 // AIN_6 = VDDB / 4.0 fullscale is 4.8V
whismanoid 0:cb44e2e9ec4c 2696 ADC_FULL_SCALE_VOLTAGE, // analogIn7 // AIN_7 = VDD18 fullscale is 1.2V
whismanoid 0:cb44e2e9ec4c 2697 ADC_FULL_SCALE_VOLTAGE, // analogIn8 // AIN_8 = VDD12 fullscale is 1.2V
whismanoid 0:cb44e2e9ec4c 2698 ADC_FULL_SCALE_VOLTAGE * 2.0f, // analogIn9 // AIN_9 = VRTC / 2.0 fullscale is 2.4V
whismanoid 0:cb44e2e9ec4c 2699 ADC_FULL_SCALE_VOLTAGE, // analogIn10 // AIN_10 = x undefined?
whismanoid 0:cb44e2e9ec4c 2700 ADC_FULL_SCALE_VOLTAGE * 4.0f, // analogIn11 // AIN_11 = VDDIO / 4.0 fullscale is 4.8V
whismanoid 0:cb44e2e9ec4c 2701 ADC_FULL_SCALE_VOLTAGE * 4.0f, // analogIn12 // AIN_12 = VDDIOH / 4.0 fullscale is 4.8V
whismanoid 0:cb44e2e9ec4c 2702 ADC_FULL_SCALE_VOLTAGE, // analogIn13
whismanoid 0:cb44e2e9ec4c 2703 ADC_FULL_SCALE_VOLTAGE, // analogIn14
whismanoid 0:cb44e2e9ec4c 2704 ADC_FULL_SCALE_VOLTAGE // analogIn15
whismanoid 19:5ff09c8e9daf 2705 #elif defined(TARGET_MAX32625MBED) || defined(TARGET_MAX32625PICO) || defined(TARGET_MAX40108DEMOP2U9)
whismanoid 0:cb44e2e9ec4c 2706 ADC_FULL_SCALE_VOLTAGE * 1.0f, // analogIn0 // fullscale is 1.2V
whismanoid 0:cb44e2e9ec4c 2707 ADC_FULL_SCALE_VOLTAGE * 1.0f, // analogIn1 // fullscale is 1.2V
whismanoid 0:cb44e2e9ec4c 2708 ADC_FULL_SCALE_VOLTAGE * 1.0f, // analogIn2 // fullscale is 1.2V
whismanoid 0:cb44e2e9ec4c 2709 ADC_FULL_SCALE_VOLTAGE * 1.0f, // analogIn3 // fullscale is 1.2V
whismanoid 0:cb44e2e9ec4c 2710 ADC_FULL_SCALE_VOLTAGE * 5.0f, // analogIn4 // AIN_4 = AIN0 / 5.0 fullscale is 6.0V
whismanoid 0:cb44e2e9ec4c 2711 ADC_FULL_SCALE_VOLTAGE * 5.0f, // analogIn4 // AIN_5 = AIN1 / 5.0 fullscale is 6.0V
whismanoid 0:cb44e2e9ec4c 2712 ADC_FULL_SCALE_VOLTAGE * 4.0f, // analogIn6 // AIN_6 = VDDB / 4.0 fullscale is 4.8V
whismanoid 0:cb44e2e9ec4c 2713 ADC_FULL_SCALE_VOLTAGE, // analogIn7 // AIN_7 = VDD18 fullscale is 1.2V
whismanoid 0:cb44e2e9ec4c 2714 ADC_FULL_SCALE_VOLTAGE, // analogIn8 // AIN_8 = VDD12 fullscale is 1.2V
whismanoid 0:cb44e2e9ec4c 2715 ADC_FULL_SCALE_VOLTAGE * 2.0f, // analogIn9 // AIN_9 = VRTC / 2.0 fullscale is 2.4V
whismanoid 0:cb44e2e9ec4c 2716 ADC_FULL_SCALE_VOLTAGE, // analogIn10 // AIN_10 = x undefined?
whismanoid 0:cb44e2e9ec4c 2717 ADC_FULL_SCALE_VOLTAGE * 4.0f, // analogIn11 // AIN_11 = VDDIO / 4.0 fullscale is 4.8V
whismanoid 0:cb44e2e9ec4c 2718 ADC_FULL_SCALE_VOLTAGE * 4.0f, // analogIn12 // AIN_12 = VDDIOH / 4.0 fullscale is 4.8V
whismanoid 0:cb44e2e9ec4c 2719 ADC_FULL_SCALE_VOLTAGE, // analogIn13
whismanoid 0:cb44e2e9ec4c 2720 ADC_FULL_SCALE_VOLTAGE, // analogIn14
whismanoid 0:cb44e2e9ec4c 2721 ADC_FULL_SCALE_VOLTAGE // analogIn15
whismanoid 0:cb44e2e9ec4c 2722 #elif defined(TARGET_NUCLEO_F446RE)
whismanoid 0:cb44e2e9ec4c 2723 ADC_FULL_SCALE_VOLTAGE, // analogIn0
whismanoid 0:cb44e2e9ec4c 2724 ADC_FULL_SCALE_VOLTAGE, // analogIn1
whismanoid 0:cb44e2e9ec4c 2725 ADC_FULL_SCALE_VOLTAGE, // analogIn2
whismanoid 0:cb44e2e9ec4c 2726 ADC_FULL_SCALE_VOLTAGE, // analogIn3
whismanoid 0:cb44e2e9ec4c 2727 ADC_FULL_SCALE_VOLTAGE, // analogIn4
whismanoid 0:cb44e2e9ec4c 2728 ADC_FULL_SCALE_VOLTAGE, // analogIn5
whismanoid 0:cb44e2e9ec4c 2729 ADC_FULL_SCALE_VOLTAGE, // analogIn6
whismanoid 0:cb44e2e9ec4c 2730 ADC_FULL_SCALE_VOLTAGE, // analogIn7
whismanoid 0:cb44e2e9ec4c 2731 ADC_FULL_SCALE_VOLTAGE, // analogIn8
whismanoid 0:cb44e2e9ec4c 2732 ADC_FULL_SCALE_VOLTAGE, // analogIn9
whismanoid 0:cb44e2e9ec4c 2733 ADC_FULL_SCALE_VOLTAGE, // analogIn10
whismanoid 0:cb44e2e9ec4c 2734 ADC_FULL_SCALE_VOLTAGE, // analogIn11
whismanoid 0:cb44e2e9ec4c 2735 ADC_FULL_SCALE_VOLTAGE, // analogIn12
whismanoid 0:cb44e2e9ec4c 2736 ADC_FULL_SCALE_VOLTAGE, // analogIn13
whismanoid 0:cb44e2e9ec4c 2737 ADC_FULL_SCALE_VOLTAGE, // analogIn14
whismanoid 0:cb44e2e9ec4c 2738 ADC_FULL_SCALE_VOLTAGE // analogIn15
whismanoid 0:cb44e2e9ec4c 2739 #elif defined(TARGET_NUCLEO_F401RE)
whismanoid 0:cb44e2e9ec4c 2740 ADC_FULL_SCALE_VOLTAGE, // analogIn0
whismanoid 0:cb44e2e9ec4c 2741 ADC_FULL_SCALE_VOLTAGE, // analogIn1
whismanoid 0:cb44e2e9ec4c 2742 ADC_FULL_SCALE_VOLTAGE, // analogIn2
whismanoid 0:cb44e2e9ec4c 2743 ADC_FULL_SCALE_VOLTAGE, // analogIn3
whismanoid 0:cb44e2e9ec4c 2744 ADC_FULL_SCALE_VOLTAGE, // analogIn4
whismanoid 0:cb44e2e9ec4c 2745 ADC_FULL_SCALE_VOLTAGE, // analogIn5
whismanoid 0:cb44e2e9ec4c 2746 ADC_FULL_SCALE_VOLTAGE, // analogIn6
whismanoid 0:cb44e2e9ec4c 2747 ADC_FULL_SCALE_VOLTAGE, // analogIn7
whismanoid 0:cb44e2e9ec4c 2748 ADC_FULL_SCALE_VOLTAGE, // analogIn8
whismanoid 0:cb44e2e9ec4c 2749 ADC_FULL_SCALE_VOLTAGE, // analogIn9
whismanoid 0:cb44e2e9ec4c 2750 ADC_FULL_SCALE_VOLTAGE, // analogIn10
whismanoid 0:cb44e2e9ec4c 2751 ADC_FULL_SCALE_VOLTAGE, // analogIn11
whismanoid 0:cb44e2e9ec4c 2752 ADC_FULL_SCALE_VOLTAGE, // analogIn12
whismanoid 0:cb44e2e9ec4c 2753 ADC_FULL_SCALE_VOLTAGE, // analogIn13
whismanoid 0:cb44e2e9ec4c 2754 ADC_FULL_SCALE_VOLTAGE, // analogIn14
whismanoid 0:cb44e2e9ec4c 2755 ADC_FULL_SCALE_VOLTAGE // analogIn15
whismanoid 0:cb44e2e9ec4c 2756 //#elif defined(TARGET_LPC1768)
whismanoid 0:cb44e2e9ec4c 2757 #else
whismanoid 0:cb44e2e9ec4c 2758 // unknown target
whismanoid 0:cb44e2e9ec4c 2759 ADC_FULL_SCALE_VOLTAGE, // analogIn0
whismanoid 0:cb44e2e9ec4c 2760 ADC_FULL_SCALE_VOLTAGE, // analogIn1
whismanoid 0:cb44e2e9ec4c 2761 ADC_FULL_SCALE_VOLTAGE, // analogIn2
whismanoid 0:cb44e2e9ec4c 2762 ADC_FULL_SCALE_VOLTAGE, // analogIn3
whismanoid 0:cb44e2e9ec4c 2763 ADC_FULL_SCALE_VOLTAGE, // analogIn4
whismanoid 0:cb44e2e9ec4c 2764 ADC_FULL_SCALE_VOLTAGE, // analogIn5
whismanoid 0:cb44e2e9ec4c 2765 ADC_FULL_SCALE_VOLTAGE, // analogIn6
whismanoid 0:cb44e2e9ec4c 2766 ADC_FULL_SCALE_VOLTAGE, // analogIn7
whismanoid 0:cb44e2e9ec4c 2767 ADC_FULL_SCALE_VOLTAGE, // analogIn8
whismanoid 0:cb44e2e9ec4c 2768 ADC_FULL_SCALE_VOLTAGE, // analogIn9
whismanoid 0:cb44e2e9ec4c 2769 ADC_FULL_SCALE_VOLTAGE, // analogIn10
whismanoid 0:cb44e2e9ec4c 2770 ADC_FULL_SCALE_VOLTAGE, // analogIn11
whismanoid 0:cb44e2e9ec4c 2771 ADC_FULL_SCALE_VOLTAGE, // analogIn12
whismanoid 0:cb44e2e9ec4c 2772 ADC_FULL_SCALE_VOLTAGE, // analogIn13
whismanoid 0:cb44e2e9ec4c 2773 ADC_FULL_SCALE_VOLTAGE, // analogIn14
whismanoid 0:cb44e2e9ec4c 2774 ADC_FULL_SCALE_VOLTAGE // analogIn15
whismanoid 0:cb44e2e9ec4c 2775 # endif
whismanoid 0:cb44e2e9ec4c 2776 };
whismanoid 0:cb44e2e9ec4c 2777 #endif
whismanoid 0:cb44e2e9ec4c 2778
whismanoid 0:cb44e2e9ec4c 2779
whismanoid 0:cb44e2e9ec4c 2780
whismanoid 0:cb44e2e9ec4c 2781
whismanoid 0:cb44e2e9ec4c 2782 //--------------------------------------------------
whismanoid 45:74bf1fe021e5 2783 // support CmdLine command menus (like on Serial_Tester)
whismanoid 4:d9b05924ad4c 2784 #ifndef USE_CMDLINE_MENUS
whismanoid 4:d9b05924ad4c 2785 #define USE_CMDLINE_MENUS 1
whismanoid 4:d9b05924ad4c 2786 //~ #undef USE_CMDLINE_MENUS
whismanoid 4:d9b05924ad4c 2787 #endif
whismanoid 4:d9b05924ad4c 2788 #if USE_CMDLINE_MENUS // support CmdLine command menus
whismanoid 4:d9b05924ad4c 2789 #include "CmdLine.h"
whismanoid 4:d9b05924ad4c 2790 #endif // USE_CMDLINE_MENUS support CmdLine command menus
whismanoid 4:d9b05924ad4c 2791 #if USE_CMDLINE_MENUS // support CmdLine command menus
whismanoid 4:d9b05924ad4c 2792 extern CmdLine cmdLine; // declared later
whismanoid 4:d9b05924ad4c 2793 #endif // USE_CMDLINE_MENUS support CmdLine command menus
whismanoid 4:d9b05924ad4c 2794
whismanoid 4:d9b05924ad4c 2795 //--------------------------------------------------
whismanoid 39:4d285e961435 2796 // support sleep modes in Datalogger_Trigger
whismanoid 39:4d285e961435 2797 #ifndef USE_DATALOGGER_SLEEP
whismanoid 39:4d285e961435 2798 #define USE_DATALOGGER_SLEEP 1
whismanoid 39:4d285e961435 2799 //~ #undef USE_DATALOGGER_SLEEP
whismanoid 39:4d285e961435 2800 #endif
whismanoid 39:4d285e961435 2801 #if USE_DATALOGGER_SLEEP // support sleep modes in Datalogger_Trigger
whismanoid 45:74bf1fe021e5 2802 // USE_DATALOGGER_SLEEP -- support sleep modes in Datalogger_Trigger
whismanoid 45:74bf1fe021e5 2803 // USE_DATALOGGER_SLEEP -- #include "lp.h" -- LP_EnterLP1()
whismanoid 42:89607d5d4e6d 2804 #include "lp.h"
whismanoid 43:4c4733760d4c 2805 #include "rtc.h"
whismanoid 39:4d285e961435 2806 #endif
whismanoid 39:4d285e961435 2807 #if USE_DATALOGGER_SLEEP // support sleep modes in Datalogger_Trigger
whismanoid 44:84402faa8eb9 2808 // wait until UART_Busy indicates no ongoing transactions (both ports)
whismanoid 44:84402faa8eb9 2809 #include "uart.h"
whismanoid 44:84402faa8eb9 2810 int Console_PrepForSleep(void)
whismanoid 44:84402faa8eb9 2811 {
whismanoid 44:84402faa8eb9 2812 //Serial UART0serial(UART0_TX,UART0_RX); // tx,rx UART0 MAX40108DEMOP2U9: P0_1,P0_0 (J90.1/J90.0 to console)
whismanoid 44:84402faa8eb9 2813 //Serial UART1serial(UART1_TX,UART1_RX); // tx,rx UART1 MAX40108DEMOP2U9: P2_1,P2_0 (DAPLINK)
whismanoid 44:84402faa8eb9 2814 //Serial UART2serial(UART2_TX,UART2_RX); // tx,rx UART2 MAX40108DEMOP2U9: P3_1,P3_0 (unavailable)
whismanoid 44:84402faa8eb9 2815 return (
whismanoid 44:84402faa8eb9 2816 (UART_PrepForSleep(MXC_UART_GET_UART(0)) == E_NO_ERROR)
whismanoid 44:84402faa8eb9 2817 && (UART_PrepForSleep(MXC_UART_GET_UART(1)) == E_NO_ERROR)
whismanoid 44:84402faa8eb9 2818 )
whismanoid 44:84402faa8eb9 2819 ? E_NO_ERROR
whismanoid 44:84402faa8eb9 2820 : E_BUSY;
whismanoid 44:84402faa8eb9 2821 }
whismanoid 44:84402faa8eb9 2822 #endif // USE_DATALOGGER_SLEEP // support sleep modes in Datalogger_Trigger
whismanoid 44:84402faa8eb9 2823 #if USE_DATALOGGER_SLEEP // support sleep modes in Datalogger_Trigger
whismanoid 39:4d285e961435 2824 typedef enum Datalogger_Sleep_enum_t {
whismanoid 39:4d285e961435 2825 datalogger_Sleep_LP0_Stop = 0,
whismanoid 39:4d285e961435 2826 datalogger_Sleep_LP1_DeepSleep = 1,
whismanoid 39:4d285e961435 2827 datalogger_Sleep_LP2_Sleep = 2,
whismanoid 39:4d285e961435 2828 datalogger_Sleep_LP3_Run = 3,
whismanoid 39:4d285e961435 2829 } Datalogger_Sleep_enum_t;
whismanoid 45:74bf1fe021e5 2830 // USE_DATALOGGER_SLEEP -- support sleep modes in Datalogger_Trigger
whismanoid 45:74bf1fe021e5 2831 Datalogger_Sleep_enum_t g_timer_sleepmode = datalogger_Sleep_LP1_DeepSleep;
whismanoid 39:4d285e961435 2832 #endif
whismanoid 39:4d285e961435 2833
whismanoid 39:4d285e961435 2834 //--------------------------------------------------
whismanoid 4:d9b05924ad4c 2835 // Datalog trigger types
whismanoid 4:d9b05924ad4c 2836 #ifndef USE_DATALOGGER_TRIGGER
whismanoid 4:d9b05924ad4c 2837 #define USE_DATALOGGER_TRIGGER 1
whismanoid 4:d9b05924ad4c 2838 //~ #undef USE_DATALOGGER_TRIGGER
whismanoid 4:d9b05924ad4c 2839 #endif
whismanoid 4:d9b05924ad4c 2840 #if USE_DATALOGGER_TRIGGER // support Datalog trigger
whismanoid 4:d9b05924ad4c 2841 typedef enum Datalogger_Trigger_enum_t {
whismanoid 4:d9b05924ad4c 2842 trigger_Halt = 0, //!< halt
whismanoid 4:d9b05924ad4c 2843 trigger_FreeRun = 1, //!< free run as fast as possible
whismanoid 4:d9b05924ad4c 2844 trigger_Timer = 2, //!< timer (configure interval)
whismanoid 4:d9b05924ad4c 2845 trigger_PlatformDigitalInput, //!< platform digital input (configure digital input pin reference)
whismanoid 4:d9b05924ad4c 2846 trigger_SPIDeviceRegRead, //!< SPI device register read (configure regaddr, mask value, match value)
whismanoid 4:d9b05924ad4c 2847 } Datalogger_Trigger_enum_t;
whismanoid 4:d9b05924ad4c 2848 Datalogger_Trigger_enum_t Datalogger_Trigger = trigger_FreeRun;
whismanoid 17:9397ea3ea7e9 2849 //
whismanoid 17:9397ea3ea7e9 2850 // configuration for trigger_Timer
whismanoid 17:9397ea3ea7e9 2851 int g_timer_interval_msec = 500; // trigger_Timer
whismanoid 17:9397ea3ea7e9 2852 int g_timer_interval_count = 10; // trigger_Timer
whismanoid 17:9397ea3ea7e9 2853 int g_timer_interval_counter = 0; // trigger_Timer
whismanoid 17:9397ea3ea7e9 2854 //
whismanoid 17:9397ea3ea7e9 2855 // TODO: configuration for trigger_PlatformDigitalInput
whismanoid 17:9397ea3ea7e9 2856 //
whismanoid 17:9397ea3ea7e9 2857 // TODO: configuration for trigger_SPIDeviceRegRead
whismanoid 17:9397ea3ea7e9 2858 //
whismanoid 4:d9b05924ad4c 2859 #endif // USE_DATALOGGER_TRIGGER support Datalog trigger
whismanoid 4:d9b05924ad4c 2860
whismanoid 4:d9b05924ad4c 2861 //--------------------------------------------------
whismanoid 17:9397ea3ea7e9 2862 // support trigger_SPIDeviceRegRead: Datalog when SPI read of address matches mask
whismanoid 17:9397ea3ea7e9 2863 #ifndef USE_DATALOGGER_SPIDeviceRegRead
whismanoid 17:9397ea3ea7e9 2864 #define USE_DATALOGGER_SPIDeviceRegRead 0
whismanoid 17:9397ea3ea7e9 2865 #endif // USE_DATALOGGER_SPIDeviceRegRead
whismanoid 17:9397ea3ea7e9 2866 #if USE_DATALOGGER_SPIDeviceRegRead
whismanoid 17:9397ea3ea7e9 2867 // TODO: uint16_t regAddr;
whismanoid 17:9397ea3ea7e9 2868 // TODO: uint16_t regDataMask;
whismanoid 17:9397ea3ea7e9 2869 // TODO: uint16_t regDataTest;
whismanoid 17:9397ea3ea7e9 2870 #endif // USE_DATALOGGER_SPIDeviceRegRead
whismanoid 17:9397ea3ea7e9 2871
whismanoid 17:9397ea3ea7e9 2872 //--------------------------------------------------
whismanoid 30:07197a430869 2873 // support Datalogger_PrintRow() print gstrRemarkText field from recent #remark
whismanoid 30:07197a430869 2874 #ifndef USE_DATALOGGER_REMARK_FIELD
whismanoid 30:07197a430869 2875 #define USE_DATALOGGER_REMARK_FIELD 1
whismanoid 30:07197a430869 2876 #endif // USE_DATALOGGER_REMARK_FIELD
whismanoid 30:07197a430869 2877 #if USE_DATALOGGER_REMARK_FIELD
whismanoid 30:07197a430869 2878 // Datalogger_PrintRow() print gstrRemarkText field from recent #remark
whismanoid 30:07197a430869 2879 const size_t gstrRemarkTextLASTINDEX = 40; // gstrRemarkText buffer size - 1
whismanoid 30:07197a430869 2880 char gstrRemarkText[gstrRemarkTextLASTINDEX+1] = "";
whismanoid 30:07197a430869 2881 char gstrRemarkHeader[] = "comment"; // comment or remark?
whismanoid 30:07197a430869 2882 #endif // USE_DATALOGGER_REMARK_FIELD
whismanoid 30:07197a430869 2883
whismanoid 30:07197a430869 2884 //--------------------------------------------------
whismanoid 17:9397ea3ea7e9 2885 // Datalogger_RunActionTable() supported actions
whismanoid 45:74bf1fe021e5 2886 // support command L@
whismanoid 45:74bf1fe021e5 2887 // configurable "business logic" for the data log
whismanoid 17:9397ea3ea7e9 2888 #ifndef USE_DATALOGGER_ActionTable
whismanoid 17:9397ea3ea7e9 2889 #define USE_DATALOGGER_ActionTable 1
whismanoid 17:9397ea3ea7e9 2890 //~ #undef USE_DATALOGGER_ActionTable
whismanoid 17:9397ea3ea7e9 2891 #endif
whismanoid 17:9397ea3ea7e9 2892 #if USE_DATALOGGER_ActionTable // Datalogger_RunActionTable() supported actions
whismanoid 17:9397ea3ea7e9 2893 //
whismanoid 17:9397ea3ea7e9 2894 // Datalogger_RunActionTable() supported actions
whismanoid 17:9397ea3ea7e9 2895 typedef enum action_type_enum_t {
whismanoid 17:9397ea3ea7e9 2896 action_noop = 0, // no operation
whismanoid 30:07197a430869 2897 action_digitalOutLow = 1, // pin = low if condition
whismanoid 30:07197a430869 2898 action_digitalOutHigh = 2, // pin = high if condition
whismanoid 30:07197a430869 2899 action_button = 3, // pin = button event index 1, 2, 3
whismanoid 30:07197a430869 2900 action_trigger_Halt = 4,
whismanoid 30:07197a430869 2901 action_trigger_FreeRun = 5,
whismanoid 30:07197a430869 2902 action_trigger_Timer = 6,
whismanoid 30:07197a430869 2903 action_trigger_PlatformDigitalInput = 7,
whismanoid 30:07197a430869 2904 action_trigger_SPIDeviceRegRead = 8,
whismanoid 17:9397ea3ea7e9 2905 } action_type_enum_t;
whismanoid 17:9397ea3ea7e9 2906 //
whismanoid 17:9397ea3ea7e9 2907 // Datalogger_RunActionTable() supported conditions
whismanoid 17:9397ea3ea7e9 2908 typedef enum action_condition_enum_t {
whismanoid 17:9397ea3ea7e9 2909 condition_always = 0, // ( true )
whismanoid 17:9397ea3ea7e9 2910 condition_if_An_gt_threshold, // (Platform_Voltage[channel] > threhsold)
whismanoid 17:9397ea3ea7e9 2911 condition_if_An_lt_threshold, // (Platform_Voltage[channel] < threhsold)
whismanoid 17:9397ea3ea7e9 2912 condition_if_An_eq_threshold, // (Platform_Voltage[channel] == threhsold)
whismanoid 17:9397ea3ea7e9 2913 condition_if_An_ge_threshold, // (Platform_Voltage[channel] >= threhsold)
whismanoid 17:9397ea3ea7e9 2914 condition_if_An_le_threshold, // (Platform_Voltage[channel] <= threhsold)
whismanoid 17:9397ea3ea7e9 2915 condition_if_An_ne_threshold, // (Platform_Voltage[channel] != threhsold)
whismanoid 17:9397ea3ea7e9 2916 condition_if_AINn_gt_threshold, // (SPI_AIN_Voltage[channel] > threhsold)
whismanoid 17:9397ea3ea7e9 2917 condition_if_AINn_lt_threshold, // (SPI_AIN_Voltage[channel] < threhsold)
whismanoid 17:9397ea3ea7e9 2918 condition_if_AINn_eq_threshold, // (SPI_AIN_Voltage[channel] == threhsold)
whismanoid 17:9397ea3ea7e9 2919 condition_if_AINn_ge_threshold, // (SPI_AIN_Voltage[channel] >= threhsold)
whismanoid 17:9397ea3ea7e9 2920 condition_if_AINn_le_threshold, // (SPI_AIN_Voltage[channel] <= threhsold)
whismanoid 17:9397ea3ea7e9 2921 condition_if_AINn_ne_threshold, // (SPI_AIN_Voltage[channel] != threhsold)
whismanoid 17:9397ea3ea7e9 2922 } condition_enum_t;
whismanoid 17:9397ea3ea7e9 2923 //
whismanoid 17:9397ea3ea7e9 2924 // Datalogger_RunActionTable() structure
whismanoid 17:9397ea3ea7e9 2925 typedef struct action_table_row_t {
whismanoid 17:9397ea3ea7e9 2926 action_type_enum_t action;
whismanoid 17:9397ea3ea7e9 2927 int digitalOutPin;
whismanoid 17:9397ea3ea7e9 2928 action_condition_enum_t condition;
whismanoid 17:9397ea3ea7e9 2929 int condition_channel;
whismanoid 17:9397ea3ea7e9 2930 double condition_threshold;
whismanoid 17:9397ea3ea7e9 2931 } action_table_row_t;
whismanoid 17:9397ea3ea7e9 2932 #if MAX40108_DEMO
whismanoid 39:4d285e961435 2933 # ifdef BOARD_SERIAL_NUMBER
whismanoid 39:4d285e961435 2934 // data unique to certain boards based on serial number
whismanoid 39:4d285e961435 2935 // channels A0/A4(CSA*100/3.34=mA), A1/A5(1V0), A2(WE), A3(CE)
whismanoid 39:4d285e961435 2936 # if (BOARD_SERIAL_NUMBER) == 1
whismanoid 39:4d285e961435 2937 #warning "(BOARD_SERIAL_NUMBER) == 1 -- logic uses A3(CE) instead of A2(WE)"
whismanoid 39:4d285e961435 2938 const int channel_WE = 3; // use channel_CE instead on proto board s/n 1 for diagnostics; easier to sweep values
whismanoid 39:4d285e961435 2939 # elif (BOARD_SERIAL_NUMBER) == 5
whismanoid 39:4d285e961435 2940 #warning "(BOARD_SERIAL_NUMBER) == 5 -- logic uses A3(CE) instead of A2(WE)"
whismanoid 39:4d285e961435 2941 const int channel_WE = 3; // use channel_CE instead on proto board s/n 1 for diagnostics; easier to sweep values
whismanoid 39:4d285e961435 2942 # else // BOARD_SERIAL_NUMBER data unique to certain boards based on serial number
whismanoid 17:9397ea3ea7e9 2943 const int channel_WE = 2;
whismanoid 39:4d285e961435 2944 # endif
whismanoid 39:4d285e961435 2945 # endif // BOARD_SERIAL_NUMBER data unique to certain boards based on serial number
whismanoid 17:9397ea3ea7e9 2946 const double threshold_WE_0V5 = 0.5;
whismanoid 17:9397ea3ea7e9 2947 const double threshold_WE_0V6 = 0.6;
whismanoid 17:9397ea3ea7e9 2948 const double threshold_WE_0V7 = 0.7;
whismanoid 18:1235c17b451e 2949 const int pin_LED_1 = 91; // support find_digitalInOutPin(91) return DigitalInOut of led1_RFailLED
whismanoid 18:1235c17b451e 2950 const int pin_LED_2 = 92; // support find_digitalInOutPin(92) return DigitalInOut of led2_GPassLED
whismanoid 18:1235c17b451e 2951 const int pin_LED_3 = 93; // support find_digitalInOutPin(93) return DigitalInOut of led3_BBusyLED
whismanoid 17:9397ea3ea7e9 2952 #endif
whismanoid 17:9397ea3ea7e9 2953 const int ACTION_TABLE_ROW_MAX = 20;
whismanoid 17:9397ea3ea7e9 2954 #if MAX40108_DEMO
whismanoid 17:9397ea3ea7e9 2955 bool Datalogger_action_table_enabled = true;
whismanoid 45:74bf1fe021e5 2956 int Datalogger_action_table_row_count = 10; // assert (Datalogger_action_table_row_count <= ACTION_TABLE_ROW_MAX)
whismanoid 17:9397ea3ea7e9 2957 #else // MAX40108_DEMO
whismanoid 17:9397ea3ea7e9 2958 int Datalogger_action_table_row_count = 0;
whismanoid 17:9397ea3ea7e9 2959 #endif // MAX40108_DEMO
whismanoid 45:74bf1fe021e5 2960 // configurable "business logic" for the data log
whismanoid 17:9397ea3ea7e9 2961 action_table_row_t Datalogger_action_table[ACTION_TABLE_ROW_MAX] = {
whismanoid 17:9397ea3ea7e9 2962 #if MAX40108_DEMO
whismanoid 45:74bf1fe021e5 2963 //
whismanoid 45:74bf1fe021e5 2964 // LED1 indicator on if (WE > 0.85V)
whismanoid 45:74bf1fe021e5 2965 // L@0 act=1 pin=91 if=1 ch=3 x=0.8500 -- digitalOutLow D91 if A3 > 0.85
whismanoid 45:74bf1fe021e5 2966 {action_digitalOutLow, pin_LED_1, condition_if_An_gt_threshold, channel_WE, 0.85},
whismanoid 45:74bf1fe021e5 2967 //
whismanoid 45:74bf1fe021e5 2968 // LED1 indicator off if (WE < 0.80V)
whismanoid 45:74bf1fe021e5 2969 // L@1 act=2 pin=91 if=2 ch=3 x=0.8000 -- digitalOutHigh D91 if A3 < 0.80
whismanoid 45:74bf1fe021e5 2970 {action_digitalOutHigh, pin_LED_1, condition_if_An_lt_threshold, channel_WE, 0.80},
whismanoid 45:74bf1fe021e5 2971 //
whismanoid 45:74bf1fe021e5 2972 // LED2 indicator on if (WE > 0.75V)
whismanoid 45:74bf1fe021e5 2973 // L@2 act=1 pin=92 if=1 ch=3 x=0.7500 -- digitalOutLow D92 if A3 > 0.75
whismanoid 45:74bf1fe021e5 2974 {action_digitalOutLow, pin_LED_2, condition_if_An_gt_threshold, channel_WE, 0.75},
whismanoid 17:9397ea3ea7e9 2975 //
whismanoid 45:74bf1fe021e5 2976 // LED2 indicator off if (WE < 0.70V)
whismanoid 45:74bf1fe021e5 2977 // L@3 act=2 pin=92 if=2 ch=3 x=0.7000 -- digitalOutHigh D92 if A3 < 0.70
whismanoid 45:74bf1fe021e5 2978 {action_digitalOutHigh, pin_LED_2, condition_if_An_lt_threshold, channel_WE, 0.70},
whismanoid 17:9397ea3ea7e9 2979 //
whismanoid 45:74bf1fe021e5 2980 // LED3 indicator on if (WE > 0.65V)
whismanoid 45:74bf1fe021e5 2981 // L@4 act=1 pin=93 if=1 ch=3 x=0.6500 -- digitalOutLow D93 if A3 > 0.65
whismanoid 45:74bf1fe021e5 2982 {action_digitalOutLow, pin_LED_3, condition_if_An_gt_threshold, channel_WE, 0.65},
whismanoid 45:74bf1fe021e5 2983 //
whismanoid 45:74bf1fe021e5 2984 // LED3 indicator off if (WE < 0.60V)
whismanoid 45:74bf1fe021e5 2985 // L@5 act=2 pin=93 if=2 ch=3 x=0.6000 -- digitalOutHigh D93 if A3 < 0.60
whismanoid 45:74bf1fe021e5 2986 {action_digitalOutHigh, pin_LED_3, condition_if_An_lt_threshold, channel_WE, 0.60},
whismanoid 45:74bf1fe021e5 2987 //
whismanoid 45:74bf1fe021e5 2988 // Free run if (WE > 0.70V)
whismanoid 45:74bf1fe021e5 2989 // L@6 act=5 if=1 ch=3 x=0.7000 -- LR if A3 > 0.70
whismanoid 17:9397ea3ea7e9 2990 {action_trigger_FreeRun, 0, condition_if_An_gt_threshold, channel_WE, threshold_WE_0V7},
whismanoid 17:9397ea3ea7e9 2991 //
whismanoid 45:74bf1fe021e5 2992 // Deep Sleep if (WE < 0.60V)
whismanoid 45:74bf1fe021e5 2993 // L@7 act=6 if=2 ch=3 x=0.6000 -- LT count=10 base=1000ms sleep=1 if A3 < 0.60
whismanoid 17:9397ea3ea7e9 2994 {action_trigger_Timer, 0, condition_if_An_lt_threshold, channel_WE, threshold_WE_0V6},
whismanoid 18:1235c17b451e 2995 //
whismanoid 45:74bf1fe021e5 2996 // Free run if (WE > 0.70V)
whismanoid 45:74bf1fe021e5 2997 // L@8 act=3 pin=4 if=1 ch=3 x=0.7000 -- button %B4! if A3 > 0.70
whismanoid 30:07197a430869 2998 {action_button, 4, condition_if_An_gt_threshold, channel_WE, threshold_WE_0V7},
whismanoid 29:6a9edb6e973b 2999 //
whismanoid 45:74bf1fe021e5 3000 // Deep Sleep if (WE < 0.60V)
whismanoid 45:74bf1fe021e5 3001 // L@9 act=3 pin=5 if=2 ch=3 x=0.6000 -- button %B5! if A3 < 0.60
whismanoid 30:07197a430869 3002 {action_button, 5, condition_if_An_lt_threshold, channel_WE, threshold_WE_0V6},
whismanoid 29:6a9edb6e973b 3003 //
whismanoid 17:9397ea3ea7e9 3004 #endif // MAX40108_DEMO
whismanoid 17:9397ea3ea7e9 3005 //
whismanoid 17:9397ea3ea7e9 3006 {action_noop, 0, condition_always, 0, 0},
whismanoid 17:9397ea3ea7e9 3007 };
whismanoid 17:9397ea3ea7e9 3008 #endif // USE_DATALOGGER_ActionTable Datalogger_RunActionTable() supported actions
whismanoid 17:9397ea3ea7e9 3009
whismanoid 17:9397ea3ea7e9 3010 //--------------------------------------------------
whismanoid 4:d9b05924ad4c 3011 // print column header banner for csv data columns
whismanoid 8:dffee7509bfb 3012 uint8_t Datalogger_Need_PrintHeader = true;
whismanoid 9:45f98573eb6d 3013 uint8_t need_reinit = true;
whismanoid 8:dffee7509bfb 3014 void Datalogger_PrintHeader(CmdLine& cmdLine);
whismanoid 5:aaf8b5f5fda1 3015 void Datalogger_AcquireRow();
whismanoid 17:9397ea3ea7e9 3016 #if USE_DATALOGGER_ActionTable // Datalogger_RunActionTable() supported actions
whismanoid 17:9397ea3ea7e9 3017 // TODO: Datalogger_RunActionTable() between Datalogger_AcquireRow() and Datalogger_PrintRow()
whismanoid 17:9397ea3ea7e9 3018 void Datalogger_RunActionTable();
whismanoid 17:9397ea3ea7e9 3019 #endif // USE_DATALOGGER_ActionTable Datalogger_RunActionTable() supported actions
whismanoid 8:dffee7509bfb 3020 void Datalogger_PrintRow(CmdLine& cmdLine);
whismanoid 4:d9b05924ad4c 3021
whismanoid 4:d9b05924ad4c 3022 //--------------------------------------------------
whismanoid 51:a41d3fd5e441 3023 // MAX32625 flash peek/poke support (MAX40108 demo) #312 - forward declarations for flash_page_configuration_back_up
whismanoid 51:a41d3fd5e441 3024 extern int Platform_AIN_Average_N; // forward declaration
whismanoid 51:a41d3fd5e441 3025 //
whismanoid 51:a41d3fd5e441 3026 extern const int COMMAND_TABLE_COL_MAX; // forward declaration
whismanoid 51:a41d3fd5e441 3027 extern char onButton1_command_table_00[];
whismanoid 51:a41d3fd5e441 3028 extern char onButton1_command_table_01[];
whismanoid 51:a41d3fd5e441 3029 extern char onButton1_command_table_02[];
whismanoid 51:a41d3fd5e441 3030 extern char onButton1_command_table_03[];
whismanoid 51:a41d3fd5e441 3031 extern char onButton1_command_table_04[];
whismanoid 51:a41d3fd5e441 3032 extern char onButton1_command_table_05[];
whismanoid 51:a41d3fd5e441 3033 extern char onButton1_command_table_06[];
whismanoid 51:a41d3fd5e441 3034 extern char onButton1_command_table_07[];
whismanoid 51:a41d3fd5e441 3035 extern char onButton1_command_table_08[];
whismanoid 51:a41d3fd5e441 3036 extern char onButton1_command_table_09[];
whismanoid 51:a41d3fd5e441 3037 //
whismanoid 51:a41d3fd5e441 3038 extern char onButton2_command_table_00[];
whismanoid 51:a41d3fd5e441 3039 extern char onButton2_command_table_01[];
whismanoid 51:a41d3fd5e441 3040 extern char onButton2_command_table_02[];
whismanoid 51:a41d3fd5e441 3041 extern char onButton2_command_table_03[];
whismanoid 51:a41d3fd5e441 3042 extern char onButton2_command_table_04[];
whismanoid 51:a41d3fd5e441 3043 extern char onButton2_command_table_05[];
whismanoid 51:a41d3fd5e441 3044 extern char onButton2_command_table_06[];
whismanoid 51:a41d3fd5e441 3045 extern char onButton2_command_table_07[];
whismanoid 51:a41d3fd5e441 3046 extern char onButton2_command_table_08[];
whismanoid 51:a41d3fd5e441 3047 extern char onButton2_command_table_09[];
whismanoid 51:a41d3fd5e441 3048 //
whismanoid 51:a41d3fd5e441 3049 extern char onButton3_command_table_00[];
whismanoid 51:a41d3fd5e441 3050 extern char onButton3_command_table_01[];
whismanoid 51:a41d3fd5e441 3051 extern char onButton3_command_table_02[];
whismanoid 51:a41d3fd5e441 3052 extern char onButton3_command_table_03[];
whismanoid 51:a41d3fd5e441 3053 extern char onButton3_command_table_04[];
whismanoid 51:a41d3fd5e441 3054 extern char onButton3_command_table_05[];
whismanoid 51:a41d3fd5e441 3055 extern char onButton3_command_table_06[];
whismanoid 51:a41d3fd5e441 3056 extern char onButton3_command_table_07[];
whismanoid 51:a41d3fd5e441 3057 extern char onButton3_command_table_08[];
whismanoid 51:a41d3fd5e441 3058 extern char onButton3_command_table_09[];
whismanoid 51:a41d3fd5e441 3059 //
whismanoid 51:a41d3fd5e441 3060 extern char onButton4_command_table_00[];
whismanoid 51:a41d3fd5e441 3061 extern char onButton4_command_table_01[];
whismanoid 51:a41d3fd5e441 3062 extern char onButton4_command_table_02[];
whismanoid 51:a41d3fd5e441 3063 extern char onButton4_command_table_03[];
whismanoid 51:a41d3fd5e441 3064 extern char onButton4_command_table_04[];
whismanoid 51:a41d3fd5e441 3065 extern char onButton4_command_table_05[];
whismanoid 51:a41d3fd5e441 3066 extern char onButton4_command_table_06[];
whismanoid 51:a41d3fd5e441 3067 extern char onButton4_command_table_07[];
whismanoid 51:a41d3fd5e441 3068 extern char onButton4_command_table_08[];
whismanoid 51:a41d3fd5e441 3069 extern char onButton4_command_table_09[];
whismanoid 51:a41d3fd5e441 3070 //
whismanoid 51:a41d3fd5e441 3071 extern char onButton5_command_table_00[];
whismanoid 51:a41d3fd5e441 3072 extern char onButton5_command_table_01[];
whismanoid 51:a41d3fd5e441 3073 extern char onButton5_command_table_02[];
whismanoid 51:a41d3fd5e441 3074 extern char onButton5_command_table_03[];
whismanoid 51:a41d3fd5e441 3075 extern char onButton5_command_table_04[];
whismanoid 51:a41d3fd5e441 3076 extern char onButton5_command_table_05[];
whismanoid 51:a41d3fd5e441 3077 extern char onButton5_command_table_06[];
whismanoid 51:a41d3fd5e441 3078 extern char onButton5_command_table_07[];
whismanoid 51:a41d3fd5e441 3079 extern char onButton5_command_table_08[];
whismanoid 51:a41d3fd5e441 3080 extern char onButton5_command_table_09[];
whismanoid 51:a41d3fd5e441 3081 //
whismanoid 51:a41d3fd5e441 3082 extern char onButton6_command_table_00[];
whismanoid 51:a41d3fd5e441 3083 extern char onButton6_command_table_01[];
whismanoid 51:a41d3fd5e441 3084 extern char onButton6_command_table_02[];
whismanoid 51:a41d3fd5e441 3085 extern char onButton6_command_table_03[];
whismanoid 51:a41d3fd5e441 3086 extern char onButton6_command_table_04[];
whismanoid 51:a41d3fd5e441 3087 extern char onButton6_command_table_05[];
whismanoid 51:a41d3fd5e441 3088 extern char onButton6_command_table_06[];
whismanoid 51:a41d3fd5e441 3089 extern char onButton6_command_table_07[];
whismanoid 51:a41d3fd5e441 3090 extern char onButton6_command_table_08[];
whismanoid 51:a41d3fd5e441 3091 extern char onButton6_command_table_09[];
whismanoid 51:a41d3fd5e441 3092 //
whismanoid 51:a41d3fd5e441 3093 extern char onButton7_command_table_00[];
whismanoid 51:a41d3fd5e441 3094 extern char onButton7_command_table_01[];
whismanoid 51:a41d3fd5e441 3095 extern char onButton7_command_table_02[];
whismanoid 51:a41d3fd5e441 3096 extern char onButton7_command_table_03[];
whismanoid 51:a41d3fd5e441 3097 extern char onButton7_command_table_04[];
whismanoid 51:a41d3fd5e441 3098 extern char onButton7_command_table_05[];
whismanoid 51:a41d3fd5e441 3099 extern char onButton7_command_table_06[];
whismanoid 51:a41d3fd5e441 3100 extern char onButton7_command_table_07[];
whismanoid 51:a41d3fd5e441 3101 extern char onButton7_command_table_08[];
whismanoid 51:a41d3fd5e441 3102 extern char onButton7_command_table_09[];
whismanoid 51:a41d3fd5e441 3103 //
whismanoid 51:a41d3fd5e441 3104 extern char onButton8_command_table_00[];
whismanoid 51:a41d3fd5e441 3105 extern char onButton8_command_table_01[];
whismanoid 51:a41d3fd5e441 3106 extern char onButton8_command_table_02[];
whismanoid 51:a41d3fd5e441 3107 extern char onButton8_command_table_03[];
whismanoid 51:a41d3fd5e441 3108 extern char onButton8_command_table_04[];
whismanoid 51:a41d3fd5e441 3109 extern char onButton8_command_table_05[];
whismanoid 51:a41d3fd5e441 3110 extern char onButton8_command_table_06[];
whismanoid 51:a41d3fd5e441 3111 extern char onButton8_command_table_07[];
whismanoid 51:a41d3fd5e441 3112 extern char onButton8_command_table_08[];
whismanoid 51:a41d3fd5e441 3113 extern char onButton8_command_table_09[];
whismanoid 51:a41d3fd5e441 3114 //
whismanoid 51:a41d3fd5e441 3115 extern char onButton9_command_table_00[];
whismanoid 51:a41d3fd5e441 3116 extern char onButton9_command_table_01[];
whismanoid 51:a41d3fd5e441 3117 extern char onButton9_command_table_02[];
whismanoid 51:a41d3fd5e441 3118 extern char onButton9_command_table_03[];
whismanoid 51:a41d3fd5e441 3119 extern char onButton9_command_table_04[];
whismanoid 51:a41d3fd5e441 3120 extern char onButton9_command_table_05[];
whismanoid 51:a41d3fd5e441 3121 extern char onButton9_command_table_06[];
whismanoid 51:a41d3fd5e441 3122 extern char onButton9_command_table_07[];
whismanoid 51:a41d3fd5e441 3123 extern char onButton9_command_table_08[];
whismanoid 51:a41d3fd5e441 3124 extern char onButton9_command_table_09[];
whismanoid 51:a41d3fd5e441 3125 //
whismanoid 46:469d0061df5d 3126 // MAX32625 flash peek/poke support (MAX40108 demo) #312
whismanoid 46:469d0061df5d 3127 #if HAS_FLASH_LOAD_SAVE
whismanoid 46:469d0061df5d 3128 // WIP #312 flash_page_configuration_back_up[] records map to variables
whismanoid 46:469d0061df5d 3129 typedef struct {
whismanoid 46:469d0061df5d 3130 uint32_t recordType; // unique record type for each variable, 0 end of list, -1 blank record
whismanoid 46:469d0061df5d 3131 void* addr;
whismanoid 51:a41d3fd5e441 3132 uint32_t length_bytes; // must be multiple of 4 bytes
whismanoid 46:469d0061df5d 3133 const char* name;
whismanoid 46:469d0061df5d 3134 } configuration_back_up_t;
whismanoid 51:a41d3fd5e441 3135 // WIP #312 unique recordType key values are defined by configuration_back_up_list[]
whismanoid 46:469d0061df5d 3136 configuration_back_up_t configuration_back_up_list[] = {
whismanoid 46:469d0061df5d 3137 { 0xFFFFFFFF, NULL, 0, "blank" }, // Ignore 0xFFFFFFFF blank records
whismanoid 47:f1a56afb4aca 3138 //
whismanoid 47:f1a56afb4aca 3139 #ifdef BOARD_SERIAL_NUMBER
whismanoid 47:f1a56afb4aca 3140 // WIP #312 flash load/save g_board_serial_number BOARD_SERIAL_NUMBER
whismanoid 47:f1a56afb4aca 3141 { 0x04000053, &g_board_serial_number, sizeof(g_board_serial_number ), "g_board_serial_number" },
whismanoid 47:f1a56afb4aca 3142 #endif // BOARD_SERIAL_NUMBER data unique to certain boards based on serial number
whismanoid 47:f1a56afb4aca 3143 // WIP #312 flash load/save board ID string message
whismanoid 47:f1a56afb4aca 3144 //
whismanoid 46:469d0061df5d 3145 { 0x08001053, &calibration_05_V[0], sizeof(calibration_05_V[0] ), "calibration_05_V[0]" },
whismanoid 46:469d0061df5d 3146 { 0x08001153, &calibration_05_V[1], sizeof(calibration_05_V[1] ), "calibration_05_V[1]" },
whismanoid 46:469d0061df5d 3147 { 0x08001253, &calibration_05_V[2], sizeof(calibration_05_V[2] ), "calibration_05_V[2]" },
whismanoid 46:469d0061df5d 3148 { 0x08001353, &calibration_05_V[3], sizeof(calibration_05_V[3] ), "calibration_05_V[3]" },
whismanoid 46:469d0061df5d 3149 { 0x08001453, &calibration_05_V[4], sizeof(calibration_05_V[4] ), "calibration_05_V[4]" },
whismanoid 46:469d0061df5d 3150 { 0x08001553, &calibration_05_V[5], sizeof(calibration_05_V[5] ), "calibration_05_V[5]" },
whismanoid 46:469d0061df5d 3151 { 0x08002053, &calibration_05_normValue_0_1[0], sizeof(calibration_05_normValue_0_1[0] ), "calibration_05_normValue_0_1[0]" },
whismanoid 46:469d0061df5d 3152 { 0x08002153, &calibration_05_normValue_0_1[1], sizeof(calibration_05_normValue_0_1[1] ), "calibration_05_normValue_0_1[1]" },
whismanoid 46:469d0061df5d 3153 { 0x08002253, &calibration_05_normValue_0_1[2], sizeof(calibration_05_normValue_0_1[2] ), "calibration_05_normValue_0_1[2]" },
whismanoid 46:469d0061df5d 3154 { 0x08002353, &calibration_05_normValue_0_1[3], sizeof(calibration_05_normValue_0_1[3] ), "calibration_05_normValue_0_1[3]" },
whismanoid 46:469d0061df5d 3155 { 0x08002453, &calibration_05_normValue_0_1[4], sizeof(calibration_05_normValue_0_1[4] ), "calibration_05_normValue_0_1[4]" },
whismanoid 46:469d0061df5d 3156 { 0x08002553, &calibration_05_normValue_0_1[5], sizeof(calibration_05_normValue_0_1[5] ), "calibration_05_normValue_0_1[5]" },
whismanoid 46:469d0061df5d 3157 { 0x08003053, &calibration_95_V[0], sizeof(calibration_95_V[0] ), "calibration_95_V[0]" },
whismanoid 46:469d0061df5d 3158 { 0x08003153, &calibration_95_V[1], sizeof(calibration_95_V[1] ), "calibration_95_V[1]" },
whismanoid 46:469d0061df5d 3159 { 0x08003253, &calibration_95_V[2], sizeof(calibration_95_V[2] ), "calibration_95_V[2]" },
whismanoid 46:469d0061df5d 3160 { 0x08003353, &calibration_95_V[3], sizeof(calibration_95_V[3] ), "calibration_95_V[3]" },
whismanoid 46:469d0061df5d 3161 { 0x08003453, &calibration_95_V[4], sizeof(calibration_95_V[4] ), "calibration_95_V[4]" },
whismanoid 46:469d0061df5d 3162 { 0x08003553, &calibration_95_V[5], sizeof(calibration_95_V[5] ), "calibration_95_V[5]" },
whismanoid 46:469d0061df5d 3163 { 0x08004053, &calibration_95_normValue_0_1[0], sizeof(calibration_95_normValue_0_1[0] ), "calibration_95_normValue_0_1[0]" },
whismanoid 46:469d0061df5d 3164 { 0x08004153, &calibration_95_normValue_0_1[1], sizeof(calibration_95_normValue_0_1[1] ), "calibration_95_normValue_0_1[1]" },
whismanoid 46:469d0061df5d 3165 { 0x08004253, &calibration_95_normValue_0_1[2], sizeof(calibration_95_normValue_0_1[2] ), "calibration_95_normValue_0_1[2]" },
whismanoid 46:469d0061df5d 3166 { 0x08004353, &calibration_95_normValue_0_1[3], sizeof(calibration_95_normValue_0_1[3] ), "calibration_95_normValue_0_1[3]" },
whismanoid 46:469d0061df5d 3167 { 0x08004453, &calibration_95_normValue_0_1[4], sizeof(calibration_95_normValue_0_1[4] ), "calibration_95_normValue_0_1[4]" },
whismanoid 46:469d0061df5d 3168 { 0x08004553, &calibration_95_normValue_0_1[5], sizeof(calibration_95_normValue_0_1[5] ), "calibration_95_normValue_0_1[5]" },
whismanoid 47:f1a56afb4aca 3169 //
whismanoid 51:a41d3fd5e441 3170 // forward declaration
whismanoid 51:a41d3fd5e441 3171 { 0x04000153, &Platform_AIN_Average_N, sizeof(Platform_AIN_Average_N ), "Platform_AIN_Average_N" },
whismanoid 51:a41d3fd5e441 3172 //
whismanoid 46:469d0061df5d 3173 // WIP #312 @L Datalogger_action_table_row_count
whismanoid 51:a41d3fd5e441 3174 { 0x04000253, &Datalogger_action_table_row_count, sizeof(Datalogger_action_table_row_count ), "Datalogger_action_table_row_count" },
whismanoid 51:a41d3fd5e441 3175 // WIP #312 @L Datalogger_action_table_enabled - only 1 byte, write will fail
whismanoid 51:a41d3fd5e441 3176 // { 0x01000353, &Datalogger_action_table_enabled, sizeof(Datalogger_action_table_enabled ), "Datalogger_action_table_enabled" },
whismanoid 46:469d0061df5d 3177 // WIP #312 @L Datalogger_action_table[0] __ bytes
whismanoid 51:a41d3fd5e441 3178 { 0x41005053, &Datalogger_action_table, sizeof(Datalogger_action_table ), "Datalogger_action_table" },
whismanoid 51:a41d3fd5e441 3179 //{ 0x08____53, &Datalogger_action_table[1], sizeof(Datalogger_action_table[1] ), "Datalogger_action_table[1]" },
whismanoid 47:f1a56afb4aca 3180 //
whismanoid 51:a41d3fd5e441 3181 // forward declaration
whismanoid 51:a41d3fd5e441 3182 // WIP #312 %B onButton1_command_table_00[0] __ bytes -- string
whismanoid 51:a41d3fd5e441 3183 { 0x42061053, &onButton1_command_table_00, COMMAND_TABLE_COL_MAX, "onButton1_command_table_00" },
whismanoid 51:a41d3fd5e441 3184 { 0x42061153, &onButton1_command_table_01, COMMAND_TABLE_COL_MAX, "onButton1_command_table_01" },
whismanoid 51:a41d3fd5e441 3185 { 0x42061253, &onButton1_command_table_02, COMMAND_TABLE_COL_MAX, "onButton1_command_table_02" },
whismanoid 51:a41d3fd5e441 3186 { 0x42061353, &onButton1_command_table_03, COMMAND_TABLE_COL_MAX, "onButton1_command_table_03" },
whismanoid 51:a41d3fd5e441 3187 { 0x42061453, &onButton1_command_table_04, COMMAND_TABLE_COL_MAX, "onButton1_command_table_04" },
whismanoid 51:a41d3fd5e441 3188 { 0x42061553, &onButton1_command_table_05, COMMAND_TABLE_COL_MAX, "onButton1_command_table_05" },
whismanoid 51:a41d3fd5e441 3189 { 0x42061653, &onButton1_command_table_06, COMMAND_TABLE_COL_MAX, "onButton1_command_table_06" },
whismanoid 51:a41d3fd5e441 3190 { 0x42061753, &onButton1_command_table_07, COMMAND_TABLE_COL_MAX, "onButton1_command_table_07" },
whismanoid 51:a41d3fd5e441 3191 { 0x42061853, &onButton1_command_table_08, COMMAND_TABLE_COL_MAX, "onButton1_command_table_08" },
whismanoid 51:a41d3fd5e441 3192 { 0x42061953, &onButton1_command_table_09, COMMAND_TABLE_COL_MAX, "onButton1_command_table_09" },
whismanoid 51:a41d3fd5e441 3193 // WIP #312 %B onButton2_command_table_00[0] __ bytes -- string
whismanoid 51:a41d3fd5e441 3194 { 0x42062053, &onButton2_command_table_00, COMMAND_TABLE_COL_MAX, "onButton2_command_table_00" },
whismanoid 51:a41d3fd5e441 3195 { 0x42062153, &onButton2_command_table_01, COMMAND_TABLE_COL_MAX, "onButton2_command_table_01" },
whismanoid 51:a41d3fd5e441 3196 { 0x42062253, &onButton2_command_table_02, COMMAND_TABLE_COL_MAX, "onButton2_command_table_02" },
whismanoid 51:a41d3fd5e441 3197 { 0x42062353, &onButton2_command_table_03, COMMAND_TABLE_COL_MAX, "onButton2_command_table_03" },
whismanoid 51:a41d3fd5e441 3198 { 0x42062453, &onButton2_command_table_04, COMMAND_TABLE_COL_MAX, "onButton2_command_table_04" },
whismanoid 51:a41d3fd5e441 3199 { 0x42062553, &onButton2_command_table_05, COMMAND_TABLE_COL_MAX, "onButton2_command_table_05" },
whismanoid 51:a41d3fd5e441 3200 { 0x42062653, &onButton2_command_table_06, COMMAND_TABLE_COL_MAX, "onButton2_command_table_06" },
whismanoid 51:a41d3fd5e441 3201 { 0x42062753, &onButton2_command_table_07, COMMAND_TABLE_COL_MAX, "onButton2_command_table_07" },
whismanoid 51:a41d3fd5e441 3202 { 0x42062853, &onButton2_command_table_08, COMMAND_TABLE_COL_MAX, "onButton2_command_table_08" },
whismanoid 51:a41d3fd5e441 3203 { 0x42062953, &onButton2_command_table_09, COMMAND_TABLE_COL_MAX, "onButton2_command_table_09" },
whismanoid 51:a41d3fd5e441 3204 // WIP #312 %B onButton3_command_table_00[0] __ bytes -- string
whismanoid 51:a41d3fd5e441 3205 { 0x42063053, &onButton3_command_table_00, COMMAND_TABLE_COL_MAX, "onButton3_command_table_00" },
whismanoid 51:a41d3fd5e441 3206 { 0x42063153, &onButton3_command_table_01, COMMAND_TABLE_COL_MAX, "onButton3_command_table_01" },
whismanoid 51:a41d3fd5e441 3207 { 0x42063253, &onButton3_command_table_02, COMMAND_TABLE_COL_MAX, "onButton3_command_table_02" },
whismanoid 51:a41d3fd5e441 3208 { 0x42063353, &onButton3_command_table_03, COMMAND_TABLE_COL_MAX, "onButton3_command_table_03" },
whismanoid 51:a41d3fd5e441 3209 { 0x42063453, &onButton3_command_table_04, COMMAND_TABLE_COL_MAX, "onButton3_command_table_04" },
whismanoid 51:a41d3fd5e441 3210 { 0x42063553, &onButton3_command_table_05, COMMAND_TABLE_COL_MAX, "onButton3_command_table_05" },
whismanoid 51:a41d3fd5e441 3211 { 0x42063653, &onButton3_command_table_06, COMMAND_TABLE_COL_MAX, "onButton3_command_table_06" },
whismanoid 51:a41d3fd5e441 3212 { 0x42063753, &onButton3_command_table_07, COMMAND_TABLE_COL_MAX, "onButton3_command_table_07" },
whismanoid 51:a41d3fd5e441 3213 { 0x42063853, &onButton3_command_table_08, COMMAND_TABLE_COL_MAX, "onButton3_command_table_08" },
whismanoid 51:a41d3fd5e441 3214 { 0x42063953, &onButton3_command_table_09, COMMAND_TABLE_COL_MAX, "onButton3_command_table_09" },
whismanoid 51:a41d3fd5e441 3215 // WIP #312 %B onButton4_command_table_00[0] __ bytes -- string
whismanoid 51:a41d3fd5e441 3216 { 0x42064053, &onButton4_command_table_00, COMMAND_TABLE_COL_MAX, "onButton4_command_table_00" },
whismanoid 51:a41d3fd5e441 3217 { 0x42064153, &onButton4_command_table_01, COMMAND_TABLE_COL_MAX, "onButton4_command_table_01" },
whismanoid 51:a41d3fd5e441 3218 { 0x42064253, &onButton4_command_table_02, COMMAND_TABLE_COL_MAX, "onButton4_command_table_02" },
whismanoid 51:a41d3fd5e441 3219 { 0x42064353, &onButton4_command_table_03, COMMAND_TABLE_COL_MAX, "onButton4_command_table_03" },
whismanoid 51:a41d3fd5e441 3220 { 0x42064453, &onButton4_command_table_04, COMMAND_TABLE_COL_MAX, "onButton4_command_table_04" },
whismanoid 51:a41d3fd5e441 3221 { 0x42064553, &onButton4_command_table_05, COMMAND_TABLE_COL_MAX, "onButton4_command_table_05" },
whismanoid 51:a41d3fd5e441 3222 { 0x42064653, &onButton4_command_table_06, COMMAND_TABLE_COL_MAX, "onButton4_command_table_06" },
whismanoid 51:a41d3fd5e441 3223 { 0x42064753, &onButton4_command_table_07, COMMAND_TABLE_COL_MAX, "onButton4_command_table_07" },
whismanoid 51:a41d3fd5e441 3224 { 0x42064853, &onButton4_command_table_08, COMMAND_TABLE_COL_MAX, "onButton4_command_table_08" },
whismanoid 51:a41d3fd5e441 3225 { 0x42064953, &onButton4_command_table_09, COMMAND_TABLE_COL_MAX, "onButton4_command_table_09" },
whismanoid 51:a41d3fd5e441 3226 // WIP #312 %B onButton5_command_table_00[0] __ bytes -- string
whismanoid 51:a41d3fd5e441 3227 { 0x42065053, &onButton5_command_table_00, COMMAND_TABLE_COL_MAX, "onButton5_command_table_00" },
whismanoid 51:a41d3fd5e441 3228 { 0x42065153, &onButton5_command_table_01, COMMAND_TABLE_COL_MAX, "onButton5_command_table_01" },
whismanoid 51:a41d3fd5e441 3229 { 0x42065253, &onButton5_command_table_02, COMMAND_TABLE_COL_MAX, "onButton5_command_table_02" },
whismanoid 51:a41d3fd5e441 3230 { 0x42065353, &onButton5_command_table_03, COMMAND_TABLE_COL_MAX, "onButton5_command_table_03" },
whismanoid 51:a41d3fd5e441 3231 { 0x42065453, &onButton5_command_table_04, COMMAND_TABLE_COL_MAX, "onButton5_command_table_04" },
whismanoid 51:a41d3fd5e441 3232 { 0x42065553, &onButton5_command_table_05, COMMAND_TABLE_COL_MAX, "onButton5_command_table_05" },
whismanoid 51:a41d3fd5e441 3233 { 0x42065653, &onButton5_command_table_06, COMMAND_TABLE_COL_MAX, "onButton5_command_table_06" },
whismanoid 51:a41d3fd5e441 3234 { 0x42065753, &onButton5_command_table_07, COMMAND_TABLE_COL_MAX, "onButton5_command_table_07" },
whismanoid 51:a41d3fd5e441 3235 { 0x42065853, &onButton5_command_table_08, COMMAND_TABLE_COL_MAX, "onButton5_command_table_08" },
whismanoid 51:a41d3fd5e441 3236 { 0x42065953, &onButton5_command_table_09, COMMAND_TABLE_COL_MAX, "onButton5_command_table_09" },
whismanoid 51:a41d3fd5e441 3237 // WIP #312 %B onButton6_command_table_00[0] __ bytes -- string
whismanoid 51:a41d3fd5e441 3238 { 0x42066053, &onButton6_command_table_00, COMMAND_TABLE_COL_MAX, "onButton6_command_table_00" },
whismanoid 51:a41d3fd5e441 3239 { 0x42066153, &onButton6_command_table_01, COMMAND_TABLE_COL_MAX, "onButton6_command_table_01" },
whismanoid 51:a41d3fd5e441 3240 { 0x42066253, &onButton6_command_table_02, COMMAND_TABLE_COL_MAX, "onButton6_command_table_02" },
whismanoid 51:a41d3fd5e441 3241 { 0x42066353, &onButton6_command_table_03, COMMAND_TABLE_COL_MAX, "onButton6_command_table_03" },
whismanoid 51:a41d3fd5e441 3242 { 0x42066453, &onButton6_command_table_04, COMMAND_TABLE_COL_MAX, "onButton6_command_table_04" },
whismanoid 51:a41d3fd5e441 3243 { 0x42066553, &onButton6_command_table_05, COMMAND_TABLE_COL_MAX, "onButton6_command_table_05" },
whismanoid 51:a41d3fd5e441 3244 { 0x42066653, &onButton6_command_table_06, COMMAND_TABLE_COL_MAX, "onButton6_command_table_06" },
whismanoid 51:a41d3fd5e441 3245 { 0x42066753, &onButton6_command_table_07, COMMAND_TABLE_COL_MAX, "onButton6_command_table_07" },
whismanoid 51:a41d3fd5e441 3246 { 0x42066853, &onButton6_command_table_08, COMMAND_TABLE_COL_MAX, "onButton6_command_table_08" },
whismanoid 51:a41d3fd5e441 3247 { 0x42066953, &onButton6_command_table_09, COMMAND_TABLE_COL_MAX, "onButton6_command_table_09" },
whismanoid 51:a41d3fd5e441 3248 // WIP #312 %B onButton7_command_table_00[0] __ bytes -- string
whismanoid 51:a41d3fd5e441 3249 { 0x42067053, &onButton7_command_table_00, COMMAND_TABLE_COL_MAX, "onButton7_command_table_00" },
whismanoid 51:a41d3fd5e441 3250 { 0x42067153, &onButton7_command_table_01, COMMAND_TABLE_COL_MAX, "onButton7_command_table_01" },
whismanoid 51:a41d3fd5e441 3251 { 0x42067253, &onButton7_command_table_02, COMMAND_TABLE_COL_MAX, "onButton7_command_table_02" },
whismanoid 51:a41d3fd5e441 3252 { 0x42067353, &onButton7_command_table_03, COMMAND_TABLE_COL_MAX, "onButton7_command_table_03" },
whismanoid 51:a41d3fd5e441 3253 { 0x42067453, &onButton7_command_table_04, COMMAND_TABLE_COL_MAX, "onButton7_command_table_04" },
whismanoid 51:a41d3fd5e441 3254 { 0x42067553, &onButton7_command_table_05, COMMAND_TABLE_COL_MAX, "onButton7_command_table_05" },
whismanoid 51:a41d3fd5e441 3255 { 0x42067653, &onButton7_command_table_06, COMMAND_TABLE_COL_MAX, "onButton7_command_table_06" },
whismanoid 51:a41d3fd5e441 3256 { 0x42067753, &onButton7_command_table_07, COMMAND_TABLE_COL_MAX, "onButton7_command_table_07" },
whismanoid 51:a41d3fd5e441 3257 { 0x42067853, &onButton7_command_table_08, COMMAND_TABLE_COL_MAX, "onButton7_command_table_08" },
whismanoid 51:a41d3fd5e441 3258 { 0x42067953, &onButton7_command_table_09, COMMAND_TABLE_COL_MAX, "onButton7_command_table_09" },
whismanoid 51:a41d3fd5e441 3259 // WIP #312 %B onButton8_command_table_00[0] __ bytes -- string
whismanoid 51:a41d3fd5e441 3260 { 0x42068053, &onButton8_command_table_00, COMMAND_TABLE_COL_MAX, "onButton8_command_table_00" },
whismanoid 51:a41d3fd5e441 3261 { 0x42068153, &onButton8_command_table_01, COMMAND_TABLE_COL_MAX, "onButton8_command_table_01" },
whismanoid 51:a41d3fd5e441 3262 { 0x42068253, &onButton8_command_table_02, COMMAND_TABLE_COL_MAX, "onButton8_command_table_02" },
whismanoid 51:a41d3fd5e441 3263 { 0x42068353, &onButton8_command_table_03, COMMAND_TABLE_COL_MAX, "onButton8_command_table_03" },
whismanoid 51:a41d3fd5e441 3264 { 0x42068453, &onButton8_command_table_04, COMMAND_TABLE_COL_MAX, "onButton8_command_table_04" },
whismanoid 51:a41d3fd5e441 3265 { 0x42068553, &onButton8_command_table_05, COMMAND_TABLE_COL_MAX, "onButton8_command_table_05" },
whismanoid 51:a41d3fd5e441 3266 { 0x42068653, &onButton8_command_table_06, COMMAND_TABLE_COL_MAX, "onButton8_command_table_06" },
whismanoid 51:a41d3fd5e441 3267 { 0x42068753, &onButton8_command_table_07, COMMAND_TABLE_COL_MAX, "onButton8_command_table_07" },
whismanoid 51:a41d3fd5e441 3268 { 0x42068853, &onButton8_command_table_08, COMMAND_TABLE_COL_MAX, "onButton8_command_table_08" },
whismanoid 51:a41d3fd5e441 3269 { 0x42068953, &onButton8_command_table_09, COMMAND_TABLE_COL_MAX, "onButton8_command_table_09" },
whismanoid 51:a41d3fd5e441 3270 // WIP #312 %B onButton9_command_table_00[0] __ bytes -- string
whismanoid 51:a41d3fd5e441 3271 { 0x42069053, &onButton9_command_table_00, COMMAND_TABLE_COL_MAX, "onButton9_command_table_00" },
whismanoid 51:a41d3fd5e441 3272 { 0x42069153, &onButton9_command_table_01, COMMAND_TABLE_COL_MAX, "onButton9_command_table_01" },
whismanoid 51:a41d3fd5e441 3273 { 0x42069253, &onButton9_command_table_02, COMMAND_TABLE_COL_MAX, "onButton9_command_table_02" },
whismanoid 51:a41d3fd5e441 3274 { 0x42069353, &onButton9_command_table_03, COMMAND_TABLE_COL_MAX, "onButton9_command_table_03" },
whismanoid 51:a41d3fd5e441 3275 { 0x42069453, &onButton9_command_table_04, COMMAND_TABLE_COL_MAX, "onButton9_command_table_04" },
whismanoid 51:a41d3fd5e441 3276 { 0x42069553, &onButton9_command_table_05, COMMAND_TABLE_COL_MAX, "onButton9_command_table_05" },
whismanoid 51:a41d3fd5e441 3277 { 0x42069653, &onButton9_command_table_06, COMMAND_TABLE_COL_MAX, "onButton9_command_table_06" },
whismanoid 51:a41d3fd5e441 3278 { 0x42069753, &onButton9_command_table_07, COMMAND_TABLE_COL_MAX, "onButton9_command_table_07" },
whismanoid 51:a41d3fd5e441 3279 { 0x42069853, &onButton9_command_table_08, COMMAND_TABLE_COL_MAX, "onButton9_command_table_08" },
whismanoid 51:a41d3fd5e441 3280 { 0x42069953, &onButton9_command_table_09, COMMAND_TABLE_COL_MAX, "onButton9_command_table_09" },
whismanoid 46:469d0061df5d 3281 // WIP #312 %B onButton9_command_table[0] __ bytes
whismanoid 47:f1a56afb4aca 3282 //
whismanoid 46:469d0061df5d 3283 { 0x00000000, NULL, 0, "wiped" }, // Ignore 0x00000000 wiped records; end of table
whismanoid 46:469d0061df5d 3284 };
whismanoid 48:18647e0516f2 3285 const uint32_t save_arg_01_pageErase = 0x00000001; // page erase and rewrite
whismanoid 48:18647e0516f2 3286 const uint32_t load_arg_01_brief = 0x00000001; // brief list loaded values
whismanoid 48:18647e0516f2 3287 const uint32_t save_arg_02_verbose = 0x00000002; // verbose diagnostic messages
whismanoid 48:18647e0516f2 3288 const uint32_t save_arg_04_reserved = 0x00000004; // reserved
whismanoid 48:18647e0516f2 3289 const uint32_t save_arg_08_reserved = 0x00000008; // reserved
whismanoid 48:18647e0516f2 3290 const uint32_t save_arg_10_calibration = 0x00000010; // save board ID and calibration
whismanoid 48:18647e0516f2 3291 const uint32_t save_arg_20_action_table = 0x00000020; // save Datalogger_action_table
whismanoid 48:18647e0516f2 3292 const uint32_t save_arg_40_command_table = 0x00000040; // save onButtonX_command_table
whismanoid 48:18647e0516f2 3293 const uint32_t save_arg_80_reserved = 0x00000080; // reserved
whismanoid 48:18647e0516f2 3294 const uint32_t save_arg_default = 0
whismanoid 48:18647e0516f2 3295 | save_arg_01_pageErase
whismanoid 48:18647e0516f2 3296 // | save_arg_02_verbose
whismanoid 48:18647e0516f2 3297 // | save_arg_04_reserved
whismanoid 48:18647e0516f2 3298 // | save_arg_08_reserved
whismanoid 48:18647e0516f2 3299 | save_arg_10_calibration
whismanoid 48:18647e0516f2 3300 | save_arg_20_action_table
whismanoid 48:18647e0516f2 3301 | save_arg_40_command_table
whismanoid 48:18647e0516f2 3302 // | save_arg_80_reserved
whismanoid 48:18647e0516f2 3303 ;
whismanoid 48:18647e0516f2 3304 const uint32_t load_arg_default = 0
whismanoid 48:18647e0516f2 3305 | load_arg_01_brief
whismanoid 48:18647e0516f2 3306 | save_arg_02_verbose
whismanoid 48:18647e0516f2 3307 // | save_arg_04_reserved
whismanoid 48:18647e0516f2 3308 // | save_arg_08_reserved
whismanoid 48:18647e0516f2 3309 | save_arg_10_calibration
whismanoid 48:18647e0516f2 3310 | save_arg_20_action_table
whismanoid 48:18647e0516f2 3311 | save_arg_40_command_table
whismanoid 48:18647e0516f2 3312 // | save_arg_80_reserved
whismanoid 48:18647e0516f2 3313 ;
whismanoid 48:18647e0516f2 3314 const uint32_t load_arg_startup = 0
whismanoid 48:18647e0516f2 3315 | load_arg_01_brief
whismanoid 48:18647e0516f2 3316 // | save_arg_02_verbose
whismanoid 48:18647e0516f2 3317 // | save_arg_04_reserved
whismanoid 48:18647e0516f2 3318 // | save_arg_08_reserved
whismanoid 48:18647e0516f2 3319 | save_arg_10_calibration
whismanoid 48:18647e0516f2 3320 | save_arg_20_action_table
whismanoid 48:18647e0516f2 3321 | save_arg_40_command_table
whismanoid 48:18647e0516f2 3322 // | save_arg_80_reserved
whismanoid 48:18647e0516f2 3323 ;
whismanoid 46:469d0061df5d 3324 // WIP #312 store values into flash_page_configuration_back_up[] from calibration_05_V[] etc. Default save everything.
whismanoid 48:18647e0516f2 3325 // @param[in] save_arg %F save=0x00000001 = page erase and rewrite, else append in next available blank space within page
whismanoid 48:18647e0516f2 3326 // @param[in] save_arg %F save=0x00000002 = verbose diagnostic messages
whismanoid 48:18647e0516f2 3327 // @param[in] save_arg %F save=0x00000004 = reserved
whismanoid 48:18647e0516f2 3328 // @param[in] save_arg %F save=0x00000008 = reserved
whismanoid 48:18647e0516f2 3329 // @param[in] save_arg %F save=0x00000010 = save board ID and calibration
whismanoid 48:18647e0516f2 3330 // @param[in] save_arg %F save=0x00000020 = save Datalogger_action_table
whismanoid 48:18647e0516f2 3331 // @param[in] save_arg %F save=0x00000040 = save onButtonX_command_table
whismanoid 48:18647e0516f2 3332 // @param[in] save_arg %F save=0x00000080 = reserved
whismanoid 46:469d0061df5d 3333 int Save_flash_page_configuration_back_up(CmdLine& cmdLine, uint32_t save_arg)
whismanoid 46:469d0061df5d 3334 {
whismanoid 48:18647e0516f2 3335 if ((save_arg & save_arg_02_verbose) != 0)
whismanoid 48:18647e0516f2 3336 {
whismanoid 48:18647e0516f2 3337 cmdLine.serial().printf("\r\nSave_flash_page_configuration_back_up(0x%8.8lx)...", save_arg);
whismanoid 48:18647e0516f2 3338 }
whismanoid 48:18647e0516f2 3339 if ((save_arg & save_arg_02_verbose) != 0)
whismanoid 48:18647e0516f2 3340 {
whismanoid 48:18647e0516f2 3341 // @param[in] save_arg %F save=0x00000002 = verbose diagnostic messages
whismanoid 52:bb09c0f452ec 3342 if ((save_arg & save_arg_01_pageErase) != 0) { cmdLine.serial().printf("\r\n 0x%lx: save_arg_01_pageErase", save_arg_01_pageErase); } else { cmdLine.serial().printf("\r\n ~0x%lx: no pageErase; append", save_arg_01_pageErase); }
whismanoid 49:359a6b9df7c1 3343 if ((save_arg & save_arg_02_verbose) != 0) { cmdLine.serial().printf("\r\n 0x%lx: save_arg_02_verbose", save_arg_02_verbose); }
whismanoid 49:359a6b9df7c1 3344 if ((save_arg & save_arg_04_reserved) != 0) { cmdLine.serial().printf("\r\n 0x%lx: save_arg_04_reserved", save_arg_04_reserved); }
whismanoid 49:359a6b9df7c1 3345 if ((save_arg & save_arg_08_reserved) != 0) { cmdLine.serial().printf("\r\n 0x%lx: save_arg_08_reserved", save_arg_08_reserved); }
whismanoid 49:359a6b9df7c1 3346 if ((save_arg & save_arg_10_calibration) != 0) { cmdLine.serial().printf("\r\n 0x%lx: save_arg_10_calibration", save_arg_10_calibration); }
whismanoid 49:359a6b9df7c1 3347 if ((save_arg & save_arg_20_action_table) != 0) { cmdLine.serial().printf("\r\n 0x%lx: save_arg_20_action_table", save_arg_20_action_table); }
whismanoid 49:359a6b9df7c1 3348 if ((save_arg & save_arg_40_command_table) != 0) { cmdLine.serial().printf("\r\n 0x%lx: save_arg_40_command_table", save_arg_40_command_table); }
whismanoid 49:359a6b9df7c1 3349 if ((save_arg & save_arg_80_reserved) != 0) { cmdLine.serial().printf("\r\n 0x%lx: save_arg_80_reserved", save_arg_80_reserved); }
whismanoid 48:18647e0516f2 3350 }
whismanoid 46:469d0061df5d 3351 // WIP #312 %F save=save_arg could filter which items to append to flash file
whismanoid 46:469d0061df5d 3352 // initialize flash memory interface
whismanoid 46:469d0061df5d 3353 // FlashIAP: FlashIAP flash; flash.init();
whismanoid 46:469d0061df5d 3354 // int FLC_Init(void);
whismanoid 46:469d0061df5d 3355 // returns E_NO_ERROR or E_BUSY or E_UNKNOWN
whismanoid 48:18647e0516f2 3356 if ((save_arg & save_arg_02_verbose) != 0)
whismanoid 48:18647e0516f2 3357 {
whismanoid 48:18647e0516f2 3358 cmdLine.serial().printf("FLC_Init ");
whismanoid 48:18647e0516f2 3359 }
whismanoid 46:469d0061df5d 3360 if (FLC_Init() != E_NO_ERROR)
whismanoid 46:469d0061df5d 3361 {
whismanoid 48:18647e0516f2 3362 if ((save_arg & save_arg_02_verbose) != 0)
whismanoid 48:18647e0516f2 3363 {
whismanoid 48:18647e0516f2 3364 cmdLine.serial().printf("FAIL ");
whismanoid 48:18647e0516f2 3365 }
whismanoid 46:469d0061df5d 3366 return 1; // can't perform the command
whismanoid 46:469d0061df5d 3367 }
whismanoid 48:18647e0516f2 3368 if ((save_arg & save_arg_02_verbose) != 0)
whismanoid 48:18647e0516f2 3369 {
whismanoid 48:18647e0516f2 3370 cmdLine.serial().printf("PASS ");
whismanoid 48:18647e0516f2 3371 }
whismanoid 46:469d0061df5d 3372 //
whismanoid 46:469d0061df5d 3373
whismanoid 52:bb09c0f452ec 3374 const uint32_t file_addr_start = (uint32_t)&flash_page_configuration_back_up[0];
whismanoid 52:bb09c0f452ec 3375 const uint32_t file_addr_end = file_addr_start + 8192 - 4; // last record at 0x00027ff0
whismanoid 52:bb09c0f452ec 3376 // uint32_t file_addr_end = file_addr_start + 256 - 4; // development: reduce listing size
whismanoid 52:bb09c0f452ec 3377 uint32_t file_addr = file_addr_start;
whismanoid 46:469d0061df5d 3378
whismanoid 46:469d0061df5d 3379 int poke_access_list_index = search_poke_access_list(file_addr);
whismanoid 48:18647e0516f2 3380 if ((save_arg & save_arg_02_verbose) != 0)
whismanoid 48:18647e0516f2 3381 {
whismanoid 48:18647e0516f2 3382 cmdLine.serial().printf("\r\npoke_access_list[%d] %5s 0x%8.8lx - 0x%8.8lx access %x ",
whismanoid 48:18647e0516f2 3383 poke_access_list_index,
whismanoid 48:18647e0516f2 3384 poke_access_list[poke_access_list_index].name,
whismanoid 48:18647e0516f2 3385 poke_access_list[poke_access_list_index].addr_min,
whismanoid 48:18647e0516f2 3386 poke_access_list[poke_access_list_index].addr_max,
whismanoid 48:18647e0516f2 3387 poke_access_list[poke_access_list_index].can_flash_write_read);
whismanoid 48:18647e0516f2 3388 cmdLine.serial().printf("\r\n%5s 0x%8.8lx: ", poke_access_list[poke_access_list_index].name, file_addr);
whismanoid 48:18647e0516f2 3389 }
whismanoid 46:469d0061df5d 3390
whismanoid 48:18647e0516f2 3391 if ((save_arg & save_arg_01_pageErase) != 0)
whismanoid 46:469d0061df5d 3392 {
whismanoid 48:18647e0516f2 3393 // @param[in] save_arg %F save=0x00000001 = page erase and rewrite, else append in next available blank space within page
whismanoid 46:469d0061df5d 3394 // erase flash file before saving configuration
whismanoid 46:469d0061df5d 3395 //
whismanoid 46:469d0061df5d 3396 cmdLine.serial().printf("\r\n%5s 0x%8.8lx: erase page ...",
whismanoid 46:469d0061df5d 3397 poke_access_list[poke_access_list_index].name, file_addr);
whismanoid 46:469d0061df5d 3398 // page erase using flash.erase(addr, flash.get_sector_size(addr));
whismanoid 46:469d0061df5d 3399 // int FLC_PageErase(uint32_t address, MXC_V_FLC_ERASE_CODE_PAGE_ERASE, MXC_V_FLC_FLSH_UNLOCK_KEY);
whismanoid 46:469d0061df5d 3400 // @param address Address of the page to be erased.
whismanoid 46:469d0061df5d 3401 // @param erase_code Flash erase code; defined as
whismanoid 46:469d0061df5d 3402 // #MXC_V_FLC_ERASE_CODE_PAGE_ERASE for page erase
whismanoid 46:469d0061df5d 3403 // @param unlock_key Unlock key, #MXC_V_FLC_FLSH_UNLOCK_KEY.
whismanoid 46:469d0061df5d 3404 // returns E_NO_ERROR or else
whismanoid 46:469d0061df5d 3405 if (FLC_PageErase(file_addr, MXC_V_FLC_ERASE_CODE_PAGE_ERASE,
whismanoid 46:469d0061df5d 3406 MXC_V_FLC_FLSH_UNLOCK_KEY) != E_NO_ERROR)
whismanoid 46:469d0061df5d 3407 {
whismanoid 46:469d0061df5d 3408 cmdLine.serial().printf("FAIL ");
whismanoid 46:469d0061df5d 3409 return 1; // can't perform the command
whismanoid 46:469d0061df5d 3410 }
whismanoid 46:469d0061df5d 3411 cmdLine.serial().printf("PASS ");
whismanoid 46:469d0061df5d 3412 }
whismanoid 48:18647e0516f2 3413 if ((save_arg & save_arg_02_verbose) != 0)
whismanoid 48:18647e0516f2 3414 {
whismanoid 48:18647e0516f2 3415 // @param[in] save_arg %F save=0x00000002 = verbose diagnostic messages
whismanoid 48:18647e0516f2 3416 }
whismanoid 48:18647e0516f2 3417 if ((save_arg & save_arg_04_reserved) != 0)
whismanoid 48:18647e0516f2 3418 {
whismanoid 48:18647e0516f2 3419 // @param[in] save_arg %F save=0x00000004 = reserved
whismanoid 48:18647e0516f2 3420 }
whismanoid 48:18647e0516f2 3421 if ((save_arg & save_arg_08_reserved) != 0)
whismanoid 48:18647e0516f2 3422 {
whismanoid 48:18647e0516f2 3423 // @param[in] save_arg %F save=0x00000008 = reserved
whismanoid 48:18647e0516f2 3424 }
whismanoid 48:18647e0516f2 3425 if ((save_arg & save_arg_10_calibration) != 0)
whismanoid 48:18647e0516f2 3426 {
whismanoid 48:18647e0516f2 3427 // @param[in] save_arg %F save=0x00000010 = save board ID and calibration
whismanoid 48:18647e0516f2 3428 }
whismanoid 48:18647e0516f2 3429 if ((save_arg & save_arg_20_action_table) != 0)
whismanoid 48:18647e0516f2 3430 {
whismanoid 48:18647e0516f2 3431 // @param[in] save_arg %F save=0x00000020 = save Datalogger_action_table
whismanoid 48:18647e0516f2 3432 }
whismanoid 48:18647e0516f2 3433 if ((save_arg & save_arg_40_command_table) != 0)
whismanoid 48:18647e0516f2 3434 {
whismanoid 48:18647e0516f2 3435 // @param[in] save_arg %F save=0x00000040 = save onButtonX_command_table
whismanoid 48:18647e0516f2 3436 }
whismanoid 48:18647e0516f2 3437 if ((save_arg & save_arg_80_reserved) != 0)
whismanoid 48:18647e0516f2 3438 {
whismanoid 48:18647e0516f2 3439 // @param[in] save_arg %F save=0x00000080 = reserved
whismanoid 48:18647e0516f2 3440 }
whismanoid 48:18647e0516f2 3441
whismanoid 48:18647e0516f2 3442 // address of next 16-byte-aligned record start address
whismanoid 48:18647e0516f2 3443 uint32_t file_addr_next = (file_addr + 16) &~ 0x0000000F;
whismanoid 46:469d0061df5d 3444
whismanoid 46:469d0061df5d 3445 // scan configuration_back_up_list[] for recordType
whismanoid 46:469d0061df5d 3446 for (int i = 0; configuration_back_up_list[i].recordType != 0x00000000; i++)
whismanoid 46:469d0061df5d 3447 {
whismanoid 48:18647e0516f2 3448 file_addr_next = (file_addr + 16) &~ 0x0000000F;
whismanoid 46:469d0061df5d 3449 if (configuration_back_up_list[i].recordType == 0xFFFFFFFF) continue;
whismanoid 46:469d0061df5d 3450 //
whismanoid 46:469d0061df5d 3451 // configuration_back_up_list[i].recordType
whismanoid 46:469d0061df5d 3452 // configuration_back_up_list[i].addr
whismanoid 46:469d0061df5d 3453 // configuration_back_up_list[i].length_bytes
whismanoid 46:469d0061df5d 3454 // configuration_back_up_list[i].name
whismanoid 46:469d0061df5d 3455 // WIP #312 %F save=save_arg could filter which items to append to flash file
whismanoid 46:469d0061df5d 3456 //
whismanoid 48:18647e0516f2 3457 if ((save_arg & save_arg_02_verbose) != 0)
whismanoid 48:18647e0516f2 3458 {
whismanoid 48:18647e0516f2 3459 cmdLine.serial().printf("\r\n save 0x%8.8lx %s address 0x%8.8lx length 0x%lx bytes",
whismanoid 48:18647e0516f2 3460 configuration_back_up_list[i].recordType,
whismanoid 48:18647e0516f2 3461 configuration_back_up_list[i].name,
whismanoid 48:18647e0516f2 3462 (uint32_t)configuration_back_up_list[i].addr,
whismanoid 48:18647e0516f2 3463 configuration_back_up_list[i].length_bytes);
whismanoid 48:18647e0516f2 3464 }
whismanoid 46:469d0061df5d 3465 //
whismanoid 52:bb09c0f452ec 3466 if ((save_arg & save_arg_10_calibration) != 0)
whismanoid 52:bb09c0f452ec 3467 {
whismanoid 52:bb09c0f452ec 3468 // WIP #312 -- save a subset of configuration_back_up_list[]
whismanoid 52:bb09c0f452ec 3469 // @param[in] save_arg %F save=0x00000010 = save board ID and calibration
whismanoid 52:bb09c0f452ec 3470 // if (configuration_back_up_list[i].recordType __not_match__ __something__) {
whismanoid 52:bb09c0f452ec 3471 // print " skip";
whismanoid 52:bb09c0f452ec 3472 // }
whismanoid 52:bb09c0f452ec 3473 }
whismanoid 52:bb09c0f452ec 3474 if ((save_arg & save_arg_20_action_table) != 0)
whismanoid 52:bb09c0f452ec 3475 {
whismanoid 52:bb09c0f452ec 3476 // WIP #312 -- save a subset of configuration_back_up_list[]
whismanoid 52:bb09c0f452ec 3477 // @param[in] save_arg %F save=0x00000020 = save Datalogger_action_table
whismanoid 52:bb09c0f452ec 3478 // if (configuration_back_up_list[i].recordType __not_match__ __something__) {
whismanoid 52:bb09c0f452ec 3479 // print " skip";
whismanoid 52:bb09c0f452ec 3480 // }
whismanoid 52:bb09c0f452ec 3481 }
whismanoid 52:bb09c0f452ec 3482 if ((save_arg & save_arg_40_command_table) != 0)
whismanoid 52:bb09c0f452ec 3483 {
whismanoid 52:bb09c0f452ec 3484 // WIP #312 -- save a subset of configuration_back_up_list[]
whismanoid 52:bb09c0f452ec 3485 // @param[in] save_arg %F save=0x00000040 = save onButtonX_command_table
whismanoid 52:bb09c0f452ec 3486 // if (configuration_back_up_list[i].recordType __not_match__ __something__) {
whismanoid 52:bb09c0f452ec 3487 // print " skip";
whismanoid 52:bb09c0f452ec 3488 // }
whismanoid 52:bb09c0f452ec 3489 }
whismanoid 52:bb09c0f452ec 3490 if ((save_arg & save_arg_80_reserved) != 0)
whismanoid 52:bb09c0f452ec 3491 {
whismanoid 52:bb09c0f452ec 3492 // WIP #312 -- save a subset of configuration_back_up_list[]
whismanoid 52:bb09c0f452ec 3493 // @param[in] save_arg %F save=0x00000080 = reserved
whismanoid 52:bb09c0f452ec 3494 // if (configuration_back_up_list[i].recordType __not_match__ __something__) {
whismanoid 52:bb09c0f452ec 3495 // print " skip";
whismanoid 52:bb09c0f452ec 3496 // }
whismanoid 52:bb09c0f452ec 3497 }
whismanoid 52:bb09c0f452ec 3498 //
whismanoid 52:bb09c0f452ec 3499 if ((save_arg & save_arg_01_pageErase) == 0)
whismanoid 52:bb09c0f452ec 3500 {
whismanoid 52:bb09c0f452ec 3501 // WIP %F save=(even) save incremental: append only changed values #353
whismanoid 52:bb09c0f452ec 3502 // If the record we're about to append (or have just appended)
whismanoid 52:bb09c0f452ec 3503 // matches the previous record of that type, then skip this record
whismanoid 52:bb09c0f452ec 3504 // and blank out 0xffffffff the duplicate.
whismanoid 52:bb09c0f452ec 3505 //
whismanoid 52:bb09c0f452ec 3506 // scan from file_addr_start, find latest record match configuration_back_up_list[i].recordType
whismanoid 52:bb09c0f452ec 3507 uint32_t file_addr_previous_record = file_addr_start;
whismanoid 52:bb09c0f452ec 3508 for (uint32_t file_addr_scan = file_addr_start;
whismanoid 52:bb09c0f452ec 3509 file_addr_scan < file_addr_end;
whismanoid 52:bb09c0f452ec 3510 file_addr_scan = (file_addr_scan + 16) &~ 0x0000000F)
whismanoid 52:bb09c0f452ec 3511 {
whismanoid 52:bb09c0f452ec 3512 if (*((uint32_t*)file_addr_scan) == configuration_back_up_list[i].recordType)
whismanoid 52:bb09c0f452ec 3513 {
whismanoid 52:bb09c0f452ec 3514 // previous record of this type is at file_addr_previous_record
whismanoid 52:bb09c0f452ec 3515 file_addr_previous_record = file_addr_scan;
whismanoid 52:bb09c0f452ec 3516 }
whismanoid 52:bb09c0f452ec 3517 }
whismanoid 52:bb09c0f452ec 3518 if (*((uint32_t*)file_addr_previous_record) == configuration_back_up_list[i].recordType)
whismanoid 52:bb09c0f452ec 3519 {
whismanoid 52:bb09c0f452ec 3520 // last record of this type is at file_addr_previous_record
whismanoid 52:bb09c0f452ec 3521 // does the stored value match the value we intend to store?
whismanoid 52:bb09c0f452ec 3522 //
whismanoid 52:bb09c0f452ec 3523 // WIP %F save=(even) save incremental: append only changed values #353
whismanoid 52:bb09c0f452ec 3524 // ((uint32_t*)file_addr_previous_record+1) is the previous 32-bit value
whismanoid 52:bb09c0f452ec 3525 if ((save_arg & save_arg_02_verbose) != 0)
whismanoid 52:bb09c0f452ec 3526 {
whismanoid 52:bb09c0f452ec 3527 // print " previous value 0x%8.8lx";
whismanoid 52:bb09c0f452ec 3528 cmdLine.serial().printf("\r\n save 0x%8.8lx %s address 0x%8.8lx length 0x%lx bytes",
whismanoid 52:bb09c0f452ec 3529 configuration_back_up_list[i].recordType,
whismanoid 52:bb09c0f452ec 3530 configuration_back_up_list[i].name,
whismanoid 52:bb09c0f452ec 3531 (uint32_t)configuration_back_up_list[i].addr,
whismanoid 52:bb09c0f452ec 3532 configuration_back_up_list[i].length_bytes);
whismanoid 52:bb09c0f452ec 3533 }
whismanoid 52:bb09c0f452ec 3534 // compare with the 32-bit value we intend to store
whismanoid 52:bb09c0f452ec 3535 int is_record_a_duplicate = true;
whismanoid 52:bb09c0f452ec 3536 for (int compareOffset = 0; compareOffset*4 < configuration_back_up_list[i].length_bytes; compareOffset++)
whismanoid 52:bb09c0f452ec 3537 {
whismanoid 52:bb09c0f452ec 3538 uint32_t saved_data_word = *((uint32_t*)file_addr_previous_record+1+compareOffset);
whismanoid 52:bb09c0f452ec 3539 uint32_t new_data_word = *((uint32_t*)configuration_back_up_list[i].addr+compareOffset);
whismanoid 52:bb09c0f452ec 3540 if ((save_arg & save_arg_02_verbose) != 0)
whismanoid 52:bb09c0f452ec 3541 {
whismanoid 52:bb09c0f452ec 3542 cmdLine.serial().printf("\r\n saved 0x%8.8lx vs new 0x%8.8lx",
whismanoid 52:bb09c0f452ec 3543 saved_data_word,
whismanoid 52:bb09c0f452ec 3544 new_data_word);
whismanoid 52:bb09c0f452ec 3545 }
whismanoid 52:bb09c0f452ec 3546 if (saved_data_word != new_data_word)
whismanoid 52:bb09c0f452ec 3547 {
whismanoid 52:bb09c0f452ec 3548 // new data is different
whismanoid 52:bb09c0f452ec 3549 is_record_a_duplicate = false;
whismanoid 52:bb09c0f452ec 3550 }
whismanoid 52:bb09c0f452ec 3551 }
whismanoid 52:bb09c0f452ec 3552 if (is_record_a_duplicate)
whismanoid 52:bb09c0f452ec 3553 {
whismanoid 52:bb09c0f452ec 3554 // print " skip duplicate";
whismanoid 52:bb09c0f452ec 3555 if ((save_arg & save_arg_02_verbose) != 0)
whismanoid 52:bb09c0f452ec 3556 {
whismanoid 52:bb09c0f452ec 3557 cmdLine.serial().printf("\r\n skip duplicate");
whismanoid 52:bb09c0f452ec 3558 }
whismanoid 52:bb09c0f452ec 3559 continue; // skip to the next item in configuration_back_up_list
whismanoid 52:bb09c0f452ec 3560 }
whismanoid 52:bb09c0f452ec 3561 else
whismanoid 52:bb09c0f452ec 3562 {
whismanoid 52:bb09c0f452ec 3563 if ((save_arg & save_arg_02_verbose) != 0)
whismanoid 52:bb09c0f452ec 3564 {
whismanoid 52:bb09c0f452ec 3565 cmdLine.serial().printf("\r\n append updated record");
whismanoid 52:bb09c0f452ec 3566 }
whismanoid 52:bb09c0f452ec 3567 }
whismanoid 52:bb09c0f452ec 3568 }
whismanoid 52:bb09c0f452ec 3569 }
whismanoid 52:bb09c0f452ec 3570 else
whismanoid 52:bb09c0f452ec 3571 {
whismanoid 52:bb09c0f452ec 3572 // page was erased so value should be saved
whismanoid 52:bb09c0f452ec 3573 }
whismanoid 52:bb09c0f452ec 3574 //
whismanoid 46:469d0061df5d 3575 // find next free space to store record in flash file
whismanoid 46:469d0061df5d 3576 cmdLine.serial().printf("\r\n%5s 0x%8.8lx: ", poke_access_list[poke_access_list_index].name, file_addr);
whismanoid 46:469d0061df5d 3577 cmdLine.serial().printf("0x%8.8lx ", *((uint32_t*)file_addr));
whismanoid 46:469d0061df5d 3578 while (*((uint32_t*)file_addr) != 0xFFFFFFFF)
whismanoid 46:469d0061df5d 3579 {
whismanoid 46:469d0061df5d 3580 if (file_addr >= file_addr_end)
whismanoid 46:469d0061df5d 3581 {
whismanoid 46:469d0061df5d 3582 return 1; // fail: no room to write file
whismanoid 46:469d0061df5d 3583 }
whismanoid 48:18647e0516f2 3584 file_addr_next = (file_addr + 16) &~ 0x0000000F;
whismanoid 48:18647e0516f2 3585 file_addr = file_addr_next;
whismanoid 46:469d0061df5d 3586 cmdLine.serial().printf("\r\n%5s 0x%8.8lx: 0x%8.8lx ",
whismanoid 46:469d0061df5d 3587 poke_access_list[poke_access_list_index].name,
whismanoid 46:469d0061df5d 3588 file_addr,
whismanoid 46:469d0061df5d 3589 *((uint32_t*)file_addr)
whismanoid 46:469d0061df5d 3590 );
whismanoid 46:469d0061df5d 3591 }
whismanoid 48:18647e0516f2 3592 file_addr_next = (file_addr + configuration_back_up_list[i].length_bytes + 16) &~ 0x0000000F;
whismanoid 46:469d0061df5d 3593 //
whismanoid 46:469d0061df5d 3594 // copy data from RAM into flash file
whismanoid 46:469d0061df5d 3595 // not_memcpy(file_addr + 4, configuration_back_up_list[i].addr, configuration_back_up_list[i].length_bytes);
whismanoid 46:469d0061df5d 3596 // pageBuf[0..3] = configuration_back_up_list[i].recordType;
whismanoid 46:469d0061df5d 3597 // pageBuf[4...] = configuration_back_up_list[i].addr, configuration_back_up_list[i].length_bytes
whismanoid 46:469d0061df5d 3598 // WIP #312: FLC_Write(...) in Save_flash_page_configuration_back_up
whismanoid 48:18647e0516f2 3599 if ((save_arg & save_arg_02_verbose) != 0)
whismanoid 48:18647e0516f2 3600 {
whismanoid 48:18647e0516f2 3601 cmdLine.serial().printf("\r\n%5s 0x%8.8lx: write page buffer ...",
whismanoid 48:18647e0516f2 3602 poke_access_list[poke_access_list_index].name, file_addr);
whismanoid 48:18647e0516f2 3603 }
whismanoid 46:469d0061df5d 3604 // page write using flash.program(page_buffer, addr, page_size);
whismanoid 46:469d0061df5d 3605 // int FLC_Write(uint32_t address, const void *data, uint32_t length, MXC_V_FLC_FLSH_UNLOCK_KEY);
whismanoid 46:469d0061df5d 3606 // @param address Start address for desired write. @note This address
whismanoid 46:469d0061df5d 3607 // must be 32-bit word aligned
whismanoid 46:469d0061df5d 3608 // @param data A pointer to the buffer containing the data to write.
whismanoid 46:469d0061df5d 3609 // @param length Size of the data to write in bytes. @note The length
whismanoid 46:469d0061df5d 3610 // must be in 32-bit multiples.
whismanoid 46:469d0061df5d 3611 // @param unlock_key Unlock key, #MXC_V_FLC_FLSH_UNLOCK_KEY.
whismanoid 46:469d0061df5d 3612 // returns E_NO_ERROR or else
whismanoid 46:469d0061df5d 3613 if (FLC_Write(file_addr,
whismanoid 46:469d0061df5d 3614 (uint32_t*)(&configuration_back_up_list[i].recordType),
whismanoid 46:469d0061df5d 3615 sizeof(uint32_t),
whismanoid 46:469d0061df5d 3616 MXC_V_FLC_FLSH_UNLOCK_KEY) != E_NO_ERROR)
whismanoid 46:469d0061df5d 3617 {
whismanoid 48:18647e0516f2 3618 if ((save_arg & save_arg_02_verbose) != 0)
whismanoid 48:18647e0516f2 3619 {
whismanoid 48:18647e0516f2 3620 cmdLine.serial().printf("FAIL ");
whismanoid 48:18647e0516f2 3621 }
whismanoid 46:469d0061df5d 3622 break; // can't perform the command
whismanoid 46:469d0061df5d 3623 }
whismanoid 48:18647e0516f2 3624 if ((save_arg & save_arg_02_verbose) != 0)
whismanoid 48:18647e0516f2 3625 {
whismanoid 48:18647e0516f2 3626 cmdLine.serial().printf("PASS ");
whismanoid 48:18647e0516f2 3627 }
whismanoid 46:469d0061df5d 3628 if (FLC_Write(file_addr + 4,
whismanoid 46:469d0061df5d 3629 (uint32_t*)(configuration_back_up_list[i].addr),
whismanoid 46:469d0061df5d 3630 configuration_back_up_list[i].length_bytes,
whismanoid 46:469d0061df5d 3631 MXC_V_FLC_FLSH_UNLOCK_KEY) != E_NO_ERROR)
whismanoid 46:469d0061df5d 3632 {
whismanoid 48:18647e0516f2 3633 if ((save_arg & save_arg_02_verbose) != 0)
whismanoid 48:18647e0516f2 3634 {
whismanoid 48:18647e0516f2 3635 cmdLine.serial().printf("FAIL ");
whismanoid 48:18647e0516f2 3636 }
whismanoid 46:469d0061df5d 3637 break; // can't perform the command
whismanoid 46:469d0061df5d 3638 }
whismanoid 48:18647e0516f2 3639 if ((save_arg & save_arg_02_verbose) != 0)
whismanoid 48:18647e0516f2 3640 {
whismanoid 48:18647e0516f2 3641 cmdLine.serial().printf("PASS ");
whismanoid 48:18647e0516f2 3642 }
whismanoid 46:469d0061df5d 3643 // advance to next 16-byte-aligned record start address
whismanoid 48:18647e0516f2 3644 file_addr = file_addr_next;
whismanoid 46:469d0061df5d 3645 } // end for each configuration_back_up_list[...]
whismanoid 46:469d0061df5d 3646 return 0;
whismanoid 46:469d0061df5d 3647 } // end Save_flash_page_configuration_back_up
whismanoid 46:469d0061df5d 3648 // WIP #312 load values from flash_page_configuration_back_up[] into calibration_05_V[] etc. Default load everything.
whismanoid 46:469d0061df5d 3649 int Load_flash_page_configuration_back_up(CmdLine& cmdLine, uint32_t load_arg)
whismanoid 46:469d0061df5d 3650 {
whismanoid 48:18647e0516f2 3651 if ((load_arg & save_arg_02_verbose) != 0)
whismanoid 48:18647e0516f2 3652 {
whismanoid 48:18647e0516f2 3653 cmdLine.serial().printf("\r\nLoad_flash_page_configuration_back_up(0x%8.8lx)...", load_arg);
whismanoid 48:18647e0516f2 3654 }
whismanoid 48:18647e0516f2 3655 if ((load_arg & save_arg_02_verbose) != 0)
whismanoid 48:18647e0516f2 3656 {
whismanoid 48:18647e0516f2 3657 // @param[in] save_arg %F save=0x00000002 = verbose diagnostic messages
whismanoid 49:359a6b9df7c1 3658 if ((load_arg & load_arg_01_brief) != 0) { cmdLine.serial().printf("\r\n 0x%lx: load_arg_01_brief", load_arg_01_brief); }
whismanoid 49:359a6b9df7c1 3659 if ((load_arg & save_arg_02_verbose) != 0) { cmdLine.serial().printf("\r\n 0x%lx: save_arg_02_verbose", save_arg_02_verbose); }
whismanoid 49:359a6b9df7c1 3660 if ((load_arg & save_arg_04_reserved) != 0) { cmdLine.serial().printf("\r\n 0x%lx: save_arg_04_reserved", save_arg_04_reserved); }
whismanoid 49:359a6b9df7c1 3661 if ((load_arg & save_arg_08_reserved) != 0) { cmdLine.serial().printf("\r\n 0x%lx: save_arg_08_reserved", save_arg_08_reserved); }
whismanoid 49:359a6b9df7c1 3662 if ((load_arg & save_arg_10_calibration) != 0) { cmdLine.serial().printf("\r\n 0x%lx: save_arg_10_calibration", save_arg_10_calibration); }
whismanoid 49:359a6b9df7c1 3663 if ((load_arg & save_arg_20_action_table) != 0) { cmdLine.serial().printf("\r\n 0x%lx: save_arg_20_action_table", save_arg_20_action_table); }
whismanoid 49:359a6b9df7c1 3664 if ((load_arg & save_arg_40_command_table) != 0) { cmdLine.serial().printf("\r\n 0x%lx: save_arg_40_command_table", save_arg_40_command_table); }
whismanoid 49:359a6b9df7c1 3665 if ((load_arg & save_arg_80_reserved) != 0) { cmdLine.serial().printf("\r\n 0x%lx: save_arg_80_reserved", save_arg_80_reserved); }
whismanoid 48:18647e0516f2 3666 }
whismanoid 46:469d0061df5d 3667 // WIP #312 %F load=load_arg could filter which items to accept from flash file
whismanoid 46:469d0061df5d 3668
whismanoid 46:469d0061df5d 3669 uint32_t file_addr = (uint32_t)&flash_page_configuration_back_up[0];
whismanoid 52:bb09c0f452ec 3670 uint32_t file_addr_end = file_addr + 8192 - 4; // last record at 0x00027ff0
whismanoid 46:469d0061df5d 3671 // uint32_t file_addr_end = file_addr + 256 - 4; // development: reduce listing size -- last record at 0x000260f0
whismanoid 52:bb09c0f452ec 3672 // uint32_t file_addr_end = file_addr + 512 - 4; // development: reduce listing size -- last record at 0x000261f0
whismanoid 46:469d0061df5d 3673
whismanoid 46:469d0061df5d 3674 // diagnostic print
whismanoid 46:469d0061df5d 3675 int poke_access_list_index = search_poke_access_list(file_addr);
whismanoid 48:18647e0516f2 3676 if ((load_arg & save_arg_02_verbose) != 0)
whismanoid 48:18647e0516f2 3677 {
whismanoid 48:18647e0516f2 3678 cmdLine.serial().printf("\r\npoke_access_list[%d] %5s 0x%8.8lx - 0x%8.8lx access %x ",
whismanoid 48:18647e0516f2 3679 poke_access_list_index,
whismanoid 48:18647e0516f2 3680 poke_access_list[poke_access_list_index].name,
whismanoid 48:18647e0516f2 3681 poke_access_list[poke_access_list_index].addr_min,
whismanoid 48:18647e0516f2 3682 poke_access_list[poke_access_list_index].addr_max,
whismanoid 48:18647e0516f2 3683 poke_access_list[poke_access_list_index].can_flash_write_read);
whismanoid 48:18647e0516f2 3684 cmdLine.serial().printf("\r\n%5s 0x%8.8lx: ", poke_access_list[poke_access_list_index].name, file_addr);
whismanoid 48:18647e0516f2 3685 }
whismanoid 46:469d0061df5d 3686
whismanoid 46:469d0061df5d 3687 // Scan backup configuration file
whismanoid 46:469d0061df5d 3688 while (file_addr < file_addr_end)
whismanoid 46:469d0061df5d 3689 {
whismanoid 48:18647e0516f2 3690 if ((load_arg & save_arg_02_verbose) != 0)
whismanoid 48:18647e0516f2 3691 {
whismanoid 48:18647e0516f2 3692 // diagnostic print
whismanoid 48:18647e0516f2 3693 cmdLine.serial().printf("\r\n%5s 0x%8.8lx: 0x%8.8lx ",
whismanoid 48:18647e0516f2 3694 poke_access_list[poke_access_list_index].name,
whismanoid 48:18647e0516f2 3695 file_addr,
whismanoid 48:18647e0516f2 3696 *((uint32_t*)file_addr));
whismanoid 48:18647e0516f2 3697 }
whismanoid 46:469d0061df5d 3698
whismanoid 46:469d0061df5d 3699 // address of next 16-byte-aligned record start address
whismanoid 46:469d0061df5d 3700 uint32_t file_addr_next = (file_addr + 16) &~ 0x0000000F;
whismanoid 46:469d0061df5d 3701
whismanoid 46:469d0061df5d 3702 // scan configuration_back_up_list[] to decode recordType
whismanoid 46:469d0061df5d 3703 for (int i = 0; configuration_back_up_list[i].recordType != 0x00000000; i++)
whismanoid 46:469d0061df5d 3704 {
whismanoid 46:469d0061df5d 3705 // configuration_back_up_list[i].recordType
whismanoid 46:469d0061df5d 3706 // configuration_back_up_list[i].addr
whismanoid 46:469d0061df5d 3707 // configuration_back_up_list[i].length_bytes
whismanoid 46:469d0061df5d 3708 // configuration_back_up_list[i].name
whismanoid 46:469d0061df5d 3709 //
whismanoid 46:469d0061df5d 3710 uint32_t file_addr_recordType = file_addr;
whismanoid 52:bb09c0f452ec 3711 // uint32_t file_addr_recordData = file_addr + 1;
whismanoid 46:469d0061df5d 3712 // uint32_t file_addr_recordNext = (file_addr + configuration_back_up_list[i].length_bytes) & ______;
whismanoid 46:469d0061df5d 3713 if (configuration_back_up_list[i].recordType == *((uint32_t*)file_addr_recordType))
whismanoid 46:469d0061df5d 3714 {
whismanoid 46:469d0061df5d 3715 if ((configuration_back_up_list[i].addr == 0) ||
whismanoid 46:469d0061df5d 3716 (configuration_back_up_list[i].length_bytes==0))
whismanoid 46:469d0061df5d 3717 {
whismanoid 46:469d0061df5d 3718 break; // Ignore blank record, stop searching
whismanoid 46:469d0061df5d 3719 }
whismanoid 46:469d0061df5d 3720 // found a matching recordHeader
whismanoid 48:18647e0516f2 3721 if ((load_arg & load_arg_01_brief) != 0)
whismanoid 46:469d0061df5d 3722 {
whismanoid 48:18647e0516f2 3723 // diagnostic print
whismanoid 48:18647e0516f2 3724 cmdLine.serial().printf("\r\n%5s 0x%8.8lx: 0x%8.8lx load %s",
whismanoid 46:469d0061df5d 3725 poke_access_list[poke_access_list_index].name,
whismanoid 48:18647e0516f2 3726 file_addr,
whismanoid 48:18647e0516f2 3727 *((uint32_t*)file_addr),
whismanoid 48:18647e0516f2 3728 configuration_back_up_list[i].name
whismanoid 46:469d0061df5d 3729 );
whismanoid 46:469d0061df5d 3730 }
whismanoid 48:18647e0516f2 3731 if ((load_arg & save_arg_02_verbose) != 0)
whismanoid 48:18647e0516f2 3732 {
whismanoid 48:18647e0516f2 3733
whismanoid 48:18647e0516f2 3734 for (int j = 0; j <= configuration_back_up_list[i].length_bytes; j += 4)
whismanoid 48:18647e0516f2 3735 {
whismanoid 48:18647e0516f2 3736 cmdLine.serial().printf("\r\n%5s 0x%8.8lx: 0x%8.8lx",
whismanoid 48:18647e0516f2 3737 poke_access_list[poke_access_list_index].name,
whismanoid 48:18647e0516f2 3738 (file_addr + 4 + j),
whismanoid 48:18647e0516f2 3739 *((uint32_t*)(file_addr + 4 + j))
whismanoid 48:18647e0516f2 3740 );
whismanoid 48:18647e0516f2 3741 }
whismanoid 48:18647e0516f2 3742 }
whismanoid 46:469d0061df5d 3743 // cmdLine.serial().printf("\r\n load %s 0x%8.8lx length 0x%lx address 0x%8.8lx",
whismanoid 46:469d0061df5d 3744 // configuration_back_up_list[i].name,
whismanoid 46:469d0061df5d 3745 // configuration_back_up_list[i].recordType,
whismanoid 46:469d0061df5d 3746 // configuration_back_up_list[i].length_bytes,
whismanoid 46:469d0061df5d 3747 // (uint32_t)configuration_back_up_list[i].addr,
whismanoid 46:469d0061df5d 3748 // );
whismanoid 46:469d0061df5d 3749 // cmdLine.serial().printf("\r\n load %s 0x%8.8lx length 0x%lx address 0x%8.8lx",
whismanoid 46:469d0061df5d 3750 // configuration_back_up_list[i].name,
whismanoid 46:469d0061df5d 3751 // configuration_back_up_list[i].recordType,
whismanoid 46:469d0061df5d 3752 // configuration_back_up_list[i].length_bytes,
whismanoid 46:469d0061df5d 3753 // (uint32_t)configuration_back_up_list[i].addr,
whismanoid 46:469d0061df5d 3754 // );
whismanoid 46:469d0061df5d 3755 //
whismanoid 46:469d0061df5d 3756 // WIP #312: copy data from flash file into RAM in Load_flash_page_configuration_back_up
whismanoid 46:469d0061df5d 3757 memcpy(configuration_back_up_list[i].addr,
whismanoid 46:469d0061df5d 3758 (const void *)(file_addr + 4),
whismanoid 46:469d0061df5d 3759 configuration_back_up_list[i].length_bytes);
whismanoid 46:469d0061df5d 3760 //
whismanoid 46:469d0061df5d 3761 // advance to next 16-byte-aligned record start address
whismanoid 46:469d0061df5d 3762 file_addr_next = (file_addr + configuration_back_up_list[i].length_bytes + 16) &~ 0x0000000F;
whismanoid 46:469d0061df5d 3763 break; // stop searching
whismanoid 46:469d0061df5d 3764 } // end if match recordType
whismanoid 46:469d0061df5d 3765 } // end for each configuration_back_up_list[...]
whismanoid 46:469d0061df5d 3766 // advance to next 16-byte-aligned record start address
whismanoid 46:469d0061df5d 3767 file_addr = file_addr_next;
whismanoid 46:469d0061df5d 3768 } // end while (file_addr < file_addr_end)
whismanoid 46:469d0061df5d 3769 return 0;
whismanoid 46:469d0061df5d 3770 } // end Load_flash_page_configuration_back_up
whismanoid 46:469d0061df5d 3771 #endif // HAS_FLASH_LOAD_SAVE
whismanoid 46:469d0061df5d 3772
whismanoid 46:469d0061df5d 3773 //--------------------------------------------------
whismanoid 0:cb44e2e9ec4c 3774 // Option to validate SPI link by reading PART_ID register
whismanoid 0:cb44e2e9ec4c 3775 #ifndef VERIFY_PART_ID_IN_LOOP
whismanoid 3:9055e17e181a 3776 #if defined(SPI_ADC_DeviceName) // SPI connected ADC
whismanoid 3:9055e17e181a 3777 #define VERIFY_PART_ID_IN_LOOP 1
whismanoid 3:9055e17e181a 3778 #else
whismanoid 0:cb44e2e9ec4c 3779 #define VERIFY_PART_ID_IN_LOOP 0
whismanoid 3:9055e17e181a 3780 #endif // defined(SPI_ADC_DeviceName) // SPI connected ADC
whismanoid 0:cb44e2e9ec4c 3781 #endif
whismanoid 0:cb44e2e9ec4c 3782
whismanoid 3:9055e17e181a 3783 //--------------------------------------------------
whismanoid 3:9055e17e181a 3784 #define NUM_DUT_ANALOG_IN_CHANNELS 10
whismanoid 3:9055e17e181a 3785
whismanoid 3:9055e17e181a 3786 #if defined(SPI_ADC_DeviceName) // SPI connected ADC
whismanoid 3:9055e17e181a 3787 // MAX11410 individual channels 1=LSB, 2=Volt, 0=Disabled
whismanoid 3:9055e17e181a 3788 typedef enum SPI_AIN_Enable_t {
whismanoid 10:04022a61b527 3789 SPI_AIN_Disable = 0,
whismanoid 10:04022a61b527 3790 SPI_AIN_Enable_LSB = 1,
whismanoid 10:04022a61b527 3791 SPI_AIN_Enable_Volt = 2,
whismanoid 3:9055e17e181a 3792 } SPI_AIN_Enable_t;
whismanoid 3:9055e17e181a 3793 uint8_t SPI_AIN_Enable_ch[NUM_DUT_ANALOG_IN_CHANNELS] = {
whismanoid 10:04022a61b527 3794 SPI_AIN_Enable_LSB, // AIN0 1=LSB
whismanoid 10:04022a61b527 3795 SPI_AIN_Enable_LSB, // AIN1 1=LSB
whismanoid 10:04022a61b527 3796 SPI_AIN_Enable_LSB, // AIN2 1=LSB
whismanoid 10:04022a61b527 3797 SPI_AIN_Enable_LSB, // AIN3 1=LSB
whismanoid 10:04022a61b527 3798 SPI_AIN_Enable_LSB, // AIN4 1=LSB
whismanoid 10:04022a61b527 3799 SPI_AIN_Enable_LSB, // AIN5 1=LSB
whismanoid 10:04022a61b527 3800 SPI_AIN_Enable_LSB, // AIN6 1=LSB
whismanoid 10:04022a61b527 3801 SPI_AIN_Enable_LSB, // AIN7 1=LSB
whismanoid 10:04022a61b527 3802 SPI_AIN_Enable_LSB, // AIN8 1=LSB
whismanoid 10:04022a61b527 3803 SPI_AIN_Enable_LSB, // AIN9 1=LSB
whismanoid 3:9055e17e181a 3804 };
whismanoid 3:9055e17e181a 3805 //
whismanoid 10:04022a61b527 3806 double SPI_AIN_Voltage[NUM_DUT_ANALOG_IN_CHANNELS];
whismanoid 13:184a08909405 3807 // Optional custom per-channel header suffix
whismanoid 45:74bf1fe021e5 3808 // This could be used to identify external hardware attached to each input
whismanoid 13:184a08909405 3809 #ifndef HAS_SPI_AIN_customChannelHeader
whismanoid 13:184a08909405 3810 #define HAS_SPI_AIN_customChannelHeader 0
whismanoid 13:184a08909405 3811 #endif
whismanoid 13:184a08909405 3812 #if HAS_SPI_AIN_customChannelHeader // Optional custom per-channel header suffix
whismanoid 13:184a08909405 3813 const char* const SPI_AIN_customChannelHeader_ch[NUM_DUT_ANALOG_IN_CHANNELS] = {
whismanoid 13:184a08909405 3814 "", // MAX40108: AIN0_1V0_current_ 0.591202*100/3.34 = 17.70065868263473mA
whismanoid 13:184a08909405 3815 "", // MAX40108: AIN1_1V0_voltage
whismanoid 13:184a08909405 3816 "WE", // MAX40108: AIN2_WE
whismanoid 13:184a08909405 3817 "CE", // MAX40108: AIN3_CE
whismanoid 13:184a08909405 3818 "*100/3.34=mA", // MAX40108: AIN4_*100/3.34=mA
whismanoid 13:184a08909405 3819 "CELL_VOLTAGE", // MAX40108: AIN5_CELL_VOLTAGE
whismanoid 13:184a08909405 3820 };
whismanoid 13:184a08909405 3821 #endif // HAS_SPI_AIN_customChannelHeader
whismanoid 3:9055e17e181a 3822 #endif // defined(SPI_ADC_DeviceName) // SPI connected ADC
whismanoid 0:cb44e2e9ec4c 3823 // ---------- Measure_Voltage_custom_props in Measure_Voltage @pre and in class properties ----------
whismanoid 3:9055e17e181a 3824 #if defined(SPI_ADC_DeviceName) // SPI connected ADC
whismanoid 4:d9b05924ad4c 3825 // MAX11410 specific per-channel config register v_filter
whismanoid 3:9055e17e181a 3826 uint8_t SPI_AIN_Cfg_v_filter_ch[NUM_DUT_ANALOG_IN_CHANNELS] = {
whismanoid 3:9055e17e181a 3827 0x34, // AIN0 @ v_filter=0x34
whismanoid 3:9055e17e181a 3828 0x34, // AIN1 @ v_filter=0x34
whismanoid 3:9055e17e181a 3829 0x34, // AIN2 @ v_filter=0x34
whismanoid 3:9055e17e181a 3830 0x34, // AIN3 @ v_filter=0x34
whismanoid 3:9055e17e181a 3831 0x34, // AIN4 @ v_filter=0x34
whismanoid 3:9055e17e181a 3832 0x34, // AIN5 @ v_filter=0x34
whismanoid 3:9055e17e181a 3833 0x34, // AIN6 @ v_filter=0x34
whismanoid 3:9055e17e181a 3834 0x34, // AIN7 @ v_filter=0x34
whismanoid 3:9055e17e181a 3835 0x34, // AIN8 @ v_filter=0x34
whismanoid 3:9055e17e181a 3836 0x34, // AIN9 @ v_filter=0x34
whismanoid 3:9055e17e181a 3837 };
whismanoid 3:9055e17e181a 3838 //
whismanoid 4:d9b05924ad4c 3839 // MAX11410 specific per-channel config register v_ctrl
whismanoid 3:9055e17e181a 3840 uint8_t SPI_AIN_Cfg_v_ctrl_ch[NUM_DUT_ANALOG_IN_CHANNELS] = {
whismanoid 3:9055e17e181a 3841 0x42, // AIN0 @ v_ctrl=0x42
whismanoid 3:9055e17e181a 3842 0x42, // AIN1 @ v_ctrl=0x42
whismanoid 3:9055e17e181a 3843 0x42, // AIN2 @ v_ctrl=0x42
whismanoid 3:9055e17e181a 3844 0x42, // AIN3 @ v_ctrl=0x42
whismanoid 3:9055e17e181a 3845 0x42, // AIN4 @ v_ctrl=0x42
whismanoid 3:9055e17e181a 3846 0x42, // AIN5 @ v_ctrl=0x42
whismanoid 3:9055e17e181a 3847 0x42, // AIN6 @ v_ctrl=0x42
whismanoid 3:9055e17e181a 3848 0x42, // AIN7 @ v_ctrl=0x42
whismanoid 3:9055e17e181a 3849 0x42, // AIN8 @ v_ctrl=0x42
whismanoid 3:9055e17e181a 3850 0x42, // AIN9 @ v_ctrl=0x42
whismanoid 3:9055e17e181a 3851 };
whismanoid 3:9055e17e181a 3852 //
whismanoid 4:d9b05924ad4c 3853 // MAX11410 specific per-channel config register v_pga
whismanoid 3:9055e17e181a 3854 uint8_t SPI_AIN_Cfg_v_pga_ch[NUM_DUT_ANALOG_IN_CHANNELS] = {
whismanoid 3:9055e17e181a 3855 0x00, // AIN0 @ v_pga=0x00
whismanoid 3:9055e17e181a 3856 0x00, // AIN1 @ v_pga=0x00
whismanoid 3:9055e17e181a 3857 0x00, // AIN2 @ v_pga=0x00
whismanoid 3:9055e17e181a 3858 0x00, // AIN3 @ v_pga=0x00
whismanoid 3:9055e17e181a 3859 0x00, // AIN4 @ v_pga=0x00
whismanoid 3:9055e17e181a 3860 0x00, // AIN5 @ v_pga=0x00
whismanoid 3:9055e17e181a 3861 0x00, // AIN6 @ v_pga=0x00
whismanoid 3:9055e17e181a 3862 0x00, // AIN7 @ v_pga=0x00
whismanoid 3:9055e17e181a 3863 0x00, // AIN8 @ v_pga=0x00
whismanoid 3:9055e17e181a 3864 0x00, // AIN9 @ v_pga=0x00
whismanoid 3:9055e17e181a 3865 };
whismanoid 3:9055e17e181a 3866 //
whismanoid 3:9055e17e181a 3867 #endif // defined(SPI_ADC_DeviceName) // SPI connected ADC
whismanoid 0:cb44e2e9ec4c 3868 // ---------- Measure_Voltage_custom_props ----------
whismanoid 0:cb44e2e9ec4c 3869 // ---------- CUSTOMIZED from MAX11410_Hello after g_MAX11410_device.Init() ----------
whismanoid 0:cb44e2e9ec4c 3870 // filter register configuration in Measure_Voltage and Read_All_Voltages CONV_TYPE_01_Continuous
whismanoid 0:cb44e2e9ec4c 3871 //~ const uint8_t custom_v_filter = 0x34; // @ v_filter=0x34 --*LINEF_11_SINC4 RATE_0100 | 60SPS
whismanoid 0:cb44e2e9ec4c 3872 //~ const uint8_t custom_v_filter = 0x00; // @ v_filter=0x00 -- LINEF_00_50Hz_60Hz_FIR RATE_0000 | 1.1SPS
whismanoid 0:cb44e2e9ec4c 3873 //~ const uint8_t custom_v_filter = 0x01; // @ v_filter=0x01 -- LINEF_00_50Hz_60Hz_FIR RATE_0001 | 2.1SPS
whismanoid 0:cb44e2e9ec4c 3874 //~ const uint8_t custom_v_filter = 0x02; // @ v_filter=0x02 -- LINEF_00_50Hz_60Hz_FIR RATE_0010 | 4.2SPS
whismanoid 0:cb44e2e9ec4c 3875 //~ const uint8_t custom_v_filter = 0x03; // @ v_filter=0x03 -- LINEF_00_50Hz_60Hz_FIR RATE_0011 | 8.4SPS
whismanoid 0:cb44e2e9ec4c 3876 //~ const uint8_t custom_v_filter = 0x04; // @ v_filter=0x04 -- LINEF_00_50Hz_60Hz_FIR RATE_0100 | 16.8SPS
whismanoid 0:cb44e2e9ec4c 3877 //~ const uint8_t custom_v_filter = 0x10; // @ v_filter=0x10 -- LINEF_01_50Hz_FIR RATE_0000 | 1.3SPS
whismanoid 0:cb44e2e9ec4c 3878 //~ const uint8_t custom_v_filter = 0x11; // @ v_filter=0x11 -- LINEF_01_50Hz_FIR RATE_0001 | 2.7SPS
whismanoid 0:cb44e2e9ec4c 3879 //~ const uint8_t custom_v_filter = 0x12; // @ v_filter=0x12 -- LINEF_01_50Hz_FIR RATE_0010 | 5.3SPS
whismanoid 0:cb44e2e9ec4c 3880 //~ const uint8_t custom_v_filter = 0x13; // @ v_filter=0x13 -- LINEF_01_50Hz_FIR RATE_0011 | 10.7SPS
whismanoid 0:cb44e2e9ec4c 3881 //~ const uint8_t custom_v_filter = 0x14; // @ v_filter=0x14 -- LINEF_01_50Hz_FIR RATE_0100 | 21.3SPS
whismanoid 0:cb44e2e9ec4c 3882 //~ const uint8_t custom_v_filter = 0x15; // @ v_filter=0x15 -- LINEF_01_50Hz_FIR RATE_0101 | 40.0SPS
whismanoid 0:cb44e2e9ec4c 3883 //~ const uint8_t custom_v_filter = 0x20; // @ v_filter=0x20 -- LINEF_10_60Hz_FIR RATE_0000 | 1.3SPS
whismanoid 0:cb44e2e9ec4c 3884 //~ const uint8_t custom_v_filter = 0x21; // @ v_filter=0x21 -- LINEF_10_60Hz_FIR RATE_0001 | 2.7SPS
whismanoid 0:cb44e2e9ec4c 3885 //~ const uint8_t custom_v_filter = 0x22; // @ v_filter=0x22 -- LINEF_10_60Hz_FIR RATE_0010 | 5.3SPS
whismanoid 0:cb44e2e9ec4c 3886 //~ const uint8_t custom_v_filter = 0x23; // @ v_filter=0x23 -- LINEF_10_60Hz_FIR RATE_0011 | 10.7SPS
whismanoid 0:cb44e2e9ec4c 3887 //~ const uint8_t custom_v_filter = 0x24; // @ v_filter=0x24 -- LINEF_10_60Hz_FIR RATE_0100 | 21.3SPS
whismanoid 0:cb44e2e9ec4c 3888 //~ const uint8_t custom_v_filter = 0x25; // @ v_filter=0x25 -- LINEF_10_60Hz_FIR RATE_0101 | 40.0SPS
whismanoid 0:cb44e2e9ec4c 3889 //~ const uint8_t custom_v_filter = 0x30; // @ v_filter=0x30 -- LINEF_11_SINC4 RATE_0000 | 4SPS
whismanoid 0:cb44e2e9ec4c 3890 //~ const uint8_t custom_v_filter = 0x31; // @ v_filter=0x31 -- LINEF_11_SINC4 RATE_0001 | 10SPS
whismanoid 0:cb44e2e9ec4c 3891 //~ const uint8_t custom_v_filter = 0x32; // @ v_filter=0x32 -- LINEF_11_SINC4 RATE_0010 | 20SPS
whismanoid 0:cb44e2e9ec4c 3892 //~ const uint8_t custom_v_filter = 0x33; // @ v_filter=0x33 -- LINEF_11_SINC4 RATE_0011 | 40SPS
whismanoid 0:cb44e2e9ec4c 3893 //~ const uint8_t custom_v_filter = 0x34; // @ v_filter=0x34 --*LINEF_11_SINC4 RATE_0100 | 60SPS
whismanoid 0:cb44e2e9ec4c 3894 //~ const uint8_t custom_v_filter = 0x35; // @ v_filter=0x35 -- LINEF_11_SINC4 RATE_0101 | 120SPS
whismanoid 0:cb44e2e9ec4c 3895 //~ const uint8_t custom_v_filter = 0x36; // @ v_filter=0x36 -- LINEF_11_SINC4 RATE_0110 | 240SPS
whismanoid 0:cb44e2e9ec4c 3896 //~ const uint8_t custom_v_filter = 0x37; // @ v_filter=0x37 -- LINEF_11_SINC4 RATE_0111 | 480SPS
whismanoid 0:cb44e2e9ec4c 3897 //~ const uint8_t custom_v_filter = 0x38; // @ v_filter=0x38 -- LINEF_11_SINC4 RATE_1000 | 960SPS
whismanoid 0:cb44e2e9ec4c 3898 //~ const uint8_t custom_v_filter = 0x39; // @ v_filter=0x39 -- LINEF_11_SINC4 RATE_1001 | 1920SPS
whismanoid 0:cb44e2e9ec4c 3899 // ---------- CUSTOMIZED from MAX11410_Hello ----------
whismanoid 0:cb44e2e9ec4c 3900 //
whismanoid 0:cb44e2e9ec4c 3901 // ---------- CUSTOMIZED from MAX11410_Hello after g_MAX11410_device.Init() ----------
whismanoid 0:cb44e2e9ec4c 3902 // pga register configuration in Measure_Voltage and Read_All_Voltages
whismanoid 0:cb44e2e9ec4c 3903 //~ const uint8_t custom_v_pga = 0x00; // @ v_pga=0x00 -- 0x00 SIG_PATH_00_BUFFERED
whismanoid 0:cb44e2e9ec4c 3904 //~ const uint8_t custom_v_pga = 0x00; // @ v_pga=0x00 -- 0x00 SIG_PATH_00_BUFFERED
whismanoid 0:cb44e2e9ec4c 3905 //~ const uint8_t custom_v_pga = 0x10; // @ v_pga=0x10 -- 0x10 SIG_PATH_01_BYPASS
whismanoid 0:cb44e2e9ec4c 3906 //~ const uint8_t custom_v_pga = 0x20; // @ v_pga=0x20 -- 0x20 SIG_PATH_10_PGA GAIN_000_1
whismanoid 0:cb44e2e9ec4c 3907 //~ const uint8_t custom_v_pga = 0x21; // @ v_pga=0x21 --*0x21 SIG_PATH_10_PGA GAIN_001_2
whismanoid 0:cb44e2e9ec4c 3908 //~ const uint8_t custom_v_pga = 0x22; // @ v_pga=0x22 -- 0x22 SIG_PATH_10_PGA GAIN_010_4
whismanoid 0:cb44e2e9ec4c 3909 //~ const uint8_t custom_v_pga = 0x23; // @ v_pga=0x23 -- 0x23 SIG_PATH_10_PGA GAIN_011_8
whismanoid 0:cb44e2e9ec4c 3910 //~ const uint8_t custom_v_pga = 0x24; // @ v_pga=0x24 -- 0x24 SIG_PATH_10_PGA GAIN_100_16
whismanoid 0:cb44e2e9ec4c 3911 //~ const uint8_t custom_v_pga = 0x25; // @ v_pga=0x25 -- 0x25 SIG_PATH_10_PGA GAIN_101_32
whismanoid 0:cb44e2e9ec4c 3912 //~ const uint8_t custom_v_pga = 0x26; // @ v_pga=0x26 -- 0x26 SIG_PATH_10_PGA GAIN_110_64
whismanoid 0:cb44e2e9ec4c 3913 //~ const uint8_t custom_v_pga = 0x27; // @ v_pga=0x27 -- 0x27 SIG_PATH_10_PGA GAIN_111_128
whismanoid 0:cb44e2e9ec4c 3914 // ---------- CUSTOMIZED from MAX11410_Hello ----------
whismanoid 0:cb44e2e9ec4c 3915 //
whismanoid 0:cb44e2e9ec4c 3916 // ---------- CUSTOMIZED from MAX11410_Hello after g_MAX11410_device.Init() ----------
whismanoid 0:cb44e2e9ec4c 3917 // ctrl register configuration in Measure_Voltage and Read_All_Voltages
whismanoid 3:9055e17e181a 3918 //~ const uint8_t custom_v_ctrl = 0x42; // @ v_ctrl=0x42 -- 0x40 unipolar, 0x02 REF_SEL_010_REF2P_REF2N
whismanoid 0:cb44e2e9ec4c 3919 //~ const uint8_t custom_v_ctrl = 0x40; // @ v_ctrl=0x40 -- 0x40 unipolar, 0x00 REF_SEL_000_AIN0_AIN1
whismanoid 0:cb44e2e9ec4c 3920 //~ const uint8_t custom_v_ctrl = 0x44; // @ v_ctrl=0x44 -- 0x40 unipolar, 0x04 REF_SEL_100_AIN0_AGND
whismanoid 0:cb44e2e9ec4c 3921 //~ const uint8_t custom_v_ctrl = 0x58; // @ v_ctrl=0x58 -- 0x40 unipolar, 0x00 REF_SEL_000_AIN0_AIN1, 0x18 refbuf
whismanoid 0:cb44e2e9ec4c 3922 //
whismanoid 0:cb44e2e9ec4c 3923 //~ const uint8_t custom_v_ctrl = 0x41; // @ v_ctrl=0x41 -- 0x40 unipolar, 0x01 REF_SEL_001_REF1P_REF1N
whismanoid 0:cb44e2e9ec4c 3924 //~ const uint8_t custom_v_ctrl = 0x45; // @ v_ctrl=0x45 -- 0x40 unipolar, 0x05 REF_SEL_101_REF1P_AGND
whismanoid 0:cb44e2e9ec4c 3925 //~ const uint8_t custom_v_ctrl = 0x59; // @ v_ctrl=0x59 -- 0x40 unipolar, 0x01 REF_SEL_001_REF1P_REF1N, 0x18 refbuf
whismanoid 0:cb44e2e9ec4c 3926 //
whismanoid 0:cb44e2e9ec4c 3927 //~ const uint8_t custom_v_ctrl = 0x42; // @ v_ctrl=0x42 -- 0x40 unipolar, 0x02 REF_SEL_010_REF2P_REF2N
whismanoid 0:cb44e2e9ec4c 3928 //~ const uint8_t custom_v_ctrl = 0x46; // @ v_ctrl=0x46 -- 0x40 unipolar, 0x06 REF_SEL_110_REF2P_AGND
whismanoid 0:cb44e2e9ec4c 3929 //~ const uint8_t custom_v_ctrl = 0x22; // @ v_ctrl=0x22 -- 0x20 bipolar offset binary, 0x02 REF_SEL_010_REF2P_REF2N
whismanoid 0:cb44e2e9ec4c 3930 //~ const uint8_t custom_v_ctrl = 0x02; // @ v_ctrl=0x02 -- 0x00 bipolar 2's complement, 0x02 REF_SEL_010_REF2P_REF2N
whismanoid 0:cb44e2e9ec4c 3931 //
whismanoid 0:cb44e2e9ec4c 3932 //~ const uint8_t custom_v_ctrl = 0x44; // @ v_ctrl=0x44 -- 0x40 unipolar, 0x04 REF_SEL_100_AIN0_AGND
whismanoid 0:cb44e2e9ec4c 3933 //~ const uint8_t custom_v_ctrl = 0x47; // @ v_ctrl=0x47 -- 0x40 unipolar, 0x07 REF_SEL_111_AVDD_AGND
whismanoid 0:cb44e2e9ec4c 3934 //~ const uint8_t custom_v_ctrl = 0x27; // @ v_ctrl=0x27 -- 0x20 bipolar offset binary, 0x07 REF_SEL_111_AVDD_AGND
whismanoid 0:cb44e2e9ec4c 3935 //~ const uint8_t custom_v_ctrl = 0x07; // @ v_ctrl=0x07 -- 0x00 bipolar 2's complement, 0x07 REF_SEL_111_AVDD_AGND
whismanoid 0:cb44e2e9ec4c 3936 // ---------- CUSTOMIZED from MAX11410_Hello ----------
whismanoid 0:cb44e2e9ec4c 3937
whismanoid 3:9055e17e181a 3938 #if defined(SPI_ADC_DeviceName) // SPI connected ADC
whismanoid 0:cb44e2e9ec4c 3939 // example code declare SPI interface (GPIO controlled CS)
whismanoid 0:cb44e2e9ec4c 3940 #if defined(TARGET_MAX32625MBED)
whismanoid 0:cb44e2e9ec4c 3941 SPI spi(SPI1_MOSI, SPI1_MISO, SPI1_SCK); // mosi, miso, sclk spi1 TARGET_MAX32625MBED: P1_1 P1_2 P1_0 Arduino 10-pin header D11 D12 D13
whismanoid 0:cb44e2e9ec4c 3942 DigitalOut spi_cs(SPI1_SS); // TARGET_MAX32625MBED: P1_3 Arduino 10-pin header D10
whismanoid 19:5ff09c8e9daf 3943 #elif defined(TARGET_MAX32625PICO) || defined(TARGET_MAX40108DEMOP2U9)
whismanoid 0:cb44e2e9ec4c 3944 #warning "TARGET_MAX32625PICO not previously tested; need to define pins..."
whismanoid 0:cb44e2e9ec4c 3945 SPI spi(SPI0_MOSI, SPI0_MISO, SPI0_SCK); // mosi, miso, sclk spi1 TARGET_MAX32625PICO: pin P0_5 P0_6 P0_4
whismanoid 0:cb44e2e9ec4c 3946 DigitalOut spi_cs(SPI0_SS); // TARGET_MAX32625PICO: pin P0_7
whismanoid 0:cb44e2e9ec4c 3947 #elif defined(TARGET_MAX32600MBED)
whismanoid 0:cb44e2e9ec4c 3948 SPI spi(SPI2_MOSI, SPI2_MISO, SPI2_SCK); // mosi, miso, sclk spi1 TARGET_MAX32600MBED: Arduino 10-pin header D11 D12 D13
whismanoid 0:cb44e2e9ec4c 3949 DigitalOut spi_cs(SPI2_SS); // Generic: Arduino 10-pin header D10
whismanoid 0:cb44e2e9ec4c 3950 #elif defined(TARGET_NUCLEO_F446RE) || defined(TARGET_NUCLEO_F401RE)
whismanoid 0:cb44e2e9ec4c 3951 // TODO1: avoid resource conflict between P5_0, P5_1, P5_2 SPI and DigitalInOut
whismanoid 0:cb44e2e9ec4c 3952 // void spi_init(spi_t *obj, PinName mosi, PinName miso, PinName sclk, PinName ssel)
whismanoid 0:cb44e2e9ec4c 3953 //
whismanoid 0:cb44e2e9ec4c 3954 // TODO1: NUCLEO_F446RE SPI not working; CS and MOSI data looks OK but no SCLK clock pulses.
whismanoid 0:cb44e2e9ec4c 3955 SPI spi(SPI_MOSI, SPI_MISO, SPI_SCK); // mosi, miso, sclk spi1 TARGET_NUCLEO_F446RE: Arduino 10-pin header D11 D12 D13
whismanoid 0:cb44e2e9ec4c 3956 DigitalOut spi_cs(SPI_CS); // TARGET_NUCLEO_F446RE: PB_6 Arduino 10-pin header D10
whismanoid 0:cb44e2e9ec4c 3957 //
whismanoid 0:cb44e2e9ec4c 3958 #else
whismanoid 3:9055e17e181a 3959 SPI spi(D11, D12, D13); // mosi, miso, sclk spi1 TARGET_MAX32600MBED: Arduino 10-pin header D11 D12 D13
whismanoid 3:9055e17e181a 3960 DigitalOut spi_cs(D10); // Generic: Arduino 10-pin header D10
whismanoid 0:cb44e2e9ec4c 3961 #endif
whismanoid 0:cb44e2e9ec4c 3962
whismanoid 0:cb44e2e9ec4c 3963 // example code declare GPIO interface pins
whismanoid 0:cb44e2e9ec4c 3964 // example code declare device instance
whismanoid 3:9055e17e181a 3965 MAX11410 g_MAX11410_device(spi, spi_cs, MAX11410::MAX11410_IC);
whismanoid 3:9055e17e181a 3966 #endif // defined(SPI_ADC_DeviceName) // SPI connected ADC
whismanoid 0:cb44e2e9ec4c 3967
whismanoid 1:747f1602abfc 3968 //--------------------------------------------------
whismanoid 3:9055e17e181a 3969 // Option to Datalog Arduino platform analog inputs
whismanoid 3:9055e17e181a 3970 #ifndef LOG_PLATFORM_AIN
whismanoid 3:9055e17e181a 3971 #define LOG_PLATFORM_AIN 6
whismanoid 3:9055e17e181a 3972 //~ #undef LOG_PLATFORM_AIN
whismanoid 3:9055e17e181a 3973 #endif
whismanoid 3:9055e17e181a 3974 #if defined(LOG_PLATFORM_AIN) // Datalog Arduino platform analog inputs
whismanoid 1:747f1602abfc 3975 //#ifndef NUM_PLATFORM_ANALOG_IN_CHANNELS
whismanoid 1:747f1602abfc 3976 //#define NUM_PLATFORM_ANALOG_IN_CHANNELS 6
whismanoid 1:747f1602abfc 3977 //#endif
whismanoid 1:747f1602abfc 3978 const int NUM_PLATFORM_ANALOG_IN_CHANNELS = 6;
whismanoid 1:747f1602abfc 3979 const double adc_full_scale_voltage[NUM_PLATFORM_ANALOG_IN_CHANNELS] = {
whismanoid 10:04022a61b527 3980 analogInPin_fullScaleVoltage[0], // 1.2,
whismanoid 10:04022a61b527 3981 analogInPin_fullScaleVoltage[1], // 1.2,
whismanoid 10:04022a61b527 3982 analogInPin_fullScaleVoltage[2], // 1.2,
whismanoid 10:04022a61b527 3983 analogInPin_fullScaleVoltage[3], // 1.2,
whismanoid 10:04022a61b527 3984 analogInPin_fullScaleVoltage[4], // 6.0
whismanoid 10:04022a61b527 3985 analogInPin_fullScaleVoltage[5], // 6.0
whismanoid 0:cb44e2e9ec4c 3986 };
whismanoid 9:45f98573eb6d 3987 // Platform ADC individual channels 1=LSB, 2=Volt, 0=Disabled
whismanoid 9:45f98573eb6d 3988 typedef enum Platform_AIN_Enable_t {
whismanoid 9:45f98573eb6d 3989 Platform_AIN_Disable = 0,
whismanoid 9:45f98573eb6d 3990 Platform_AIN_Enable_LSB = 1,
whismanoid 9:45f98573eb6d 3991 Platform_AIN_Enable_Volt = 2,
whismanoid 9:45f98573eb6d 3992 } Platform_AIN_Enable_t;
whismanoid 13:184a08909405 3993 uint8_t Platform_Enable_ch[NUM_PLATFORM_ANALOG_IN_CHANNELS] = {
whismanoid 9:45f98573eb6d 3994 Platform_AIN_Enable_Volt, // AIN0 2=Volt
whismanoid 9:45f98573eb6d 3995 Platform_AIN_Enable_Volt, // AIN1 2=Volt
whismanoid 9:45f98573eb6d 3996 Platform_AIN_Enable_Volt, // AIN2 2=Volt
whismanoid 9:45f98573eb6d 3997 Platform_AIN_Enable_Volt, // AIN3 2=Volt
whismanoid 9:45f98573eb6d 3998 Platform_AIN_Enable_Volt, // AIN4 2=Volt
whismanoid 9:45f98573eb6d 3999 Platform_AIN_Enable_Volt, // AIN5 2=Volt
whismanoid 9:45f98573eb6d 4000 };
whismanoid 37:3f369235e5bc 4001 // Option to report average value of Arduino platform analog inputs
whismanoid 37:3f369235e5bc 4002 #ifndef USE_Platform_AIN_Average
whismanoid 37:3f369235e5bc 4003 #define USE_Platform_AIN_Average 1
whismanoid 37:3f369235e5bc 4004 //~ #undef USE_Platform_AIN_Average
whismanoid 37:3f369235e5bc 4005 #endif
whismanoid 37:3f369235e5bc 4006 #if USE_Platform_AIN_Average
whismanoid 37:3f369235e5bc 4007 #endif // USE_Platform_AIN_Average
whismanoid 37:3f369235e5bc 4008 #if USE_Platform_AIN_Average
whismanoid 37:3f369235e5bc 4009 int Platform_AIN_Average_N = 16;
whismanoid 37:3f369235e5bc 4010 #endif // USE_Platform_AIN_Average
whismanoid 34:a1993a1ee904 4011 // Option to apply calibration to Arduino platform analog inputs
whismanoid 34:a1993a1ee904 4012 #ifndef HAS_Platform_AIN_Calibration
whismanoid 34:a1993a1ee904 4013 #define HAS_Platform_AIN_Calibration 1
whismanoid 34:a1993a1ee904 4014 //~ #undef HAS_Platform_AIN_Calibration
whismanoid 34:a1993a1ee904 4015 #endif
whismanoid 34:a1993a1ee904 4016 #if HAS_Platform_AIN_Calibration
whismanoid 34:a1993a1ee904 4017 double CalibratedNormValue(int channel_0_5, double raw_normValue_0_1);
whismanoid 34:a1993a1ee904 4018 // Calibration is between two points for each channel, defined by
whismanoid 34:a1993a1ee904 4019 // a normalized value between 0% and 100%, and the corresponding voltage.
whismanoid 34:a1993a1ee904 4020 // nominal 5% fullscale point; normValue_0_1 < 0.5
whismanoid 34:a1993a1ee904 4021 // calibration_05_normValue_0_1, calibration_05_V should be around 5% or 25%
whismanoid 42:89607d5d4e6d 4022 extern double calibration_05_normValue_0_1 [NUM_PLATFORM_ANALOG_IN_CHANNELS];
whismanoid 42:89607d5d4e6d 4023 extern double calibration_05_V [NUM_PLATFORM_ANALOG_IN_CHANNELS];
whismanoid 34:a1993a1ee904 4024 // nominal 95% fullscale point; normValue_0_1 > 0.5
whismanoid 34:a1993a1ee904 4025 // calibration_95_normValue_0_1, calibration_95_V should be around 95% or 75%
whismanoid 42:89607d5d4e6d 4026 extern double calibration_95_normValue_0_1 [NUM_PLATFORM_ANALOG_IN_CHANNELS];
whismanoid 42:89607d5d4e6d 4027 extern double calibration_95_V [NUM_PLATFORM_ANALOG_IN_CHANNELS];
whismanoid 34:a1993a1ee904 4028 #endif // HAS_Platform_AIN_Calibration
whismanoid 34:a1993a1ee904 4029 #if HAS_Platform_AIN_Calibration
whismanoid 34:a1993a1ee904 4030 double CalibratedNormValue(int channel_0_5, double raw_normValue_0_1)
whismanoid 34:a1993a1ee904 4031 {
whismanoid 34:a1993a1ee904 4032 // TODO: return corrected normValue_0_1 using two-point linear calibration
whismanoid 34:a1993a1ee904 4033 // point 1: calibration_05_normValue_0_1[ch], calibration_05_V[ch]
whismanoid 34:a1993a1ee904 4034 // point 2: calibration_95_normValue_0_1[ch], calibration_95_V[ch]
whismanoid 34:a1993a1ee904 4035 // validate that there is enough span to get sensible results
whismanoid 34:a1993a1ee904 4036 //
whismanoid 34:a1993a1ee904 4037 int ch = channel_0_5;
whismanoid 34:a1993a1ee904 4038 // cmdLine.serial().printf(" %%A cal%dn=%1.9f cal%dv=%1.9fV cal%dn=%1.9f cal%dv=%1.9fV\r\n",
whismanoid 34:a1993a1ee904 4039 // ch, calibration_05_normValue_0_1[ch],
whismanoid 34:a1993a1ee904 4040 // ch, calibration_05_V[ch],
whismanoid 34:a1993a1ee904 4041 // ch, calibration_95_normValue_0_1[ch],
whismanoid 34:a1993a1ee904 4042 // ch, calibration_95_V[ch]
whismanoid 34:a1993a1ee904 4043 // );
whismanoid 34:a1993a1ee904 4044 // cmdLine.serial().printf("\r\n adc_full_scale_voltage[%d] = %1.6fV",
whismanoid 34:a1993a1ee904 4045 // ch,
whismanoid 34:a1993a1ee904 4046 // adc_full_scale_voltage[ch]
whismanoid 34:a1993a1ee904 4047 // );
whismanoid 34:a1993a1ee904 4048 // raw normValue nominal 5% and 95% points
whismanoid 34:a1993a1ee904 4049 double raw_05_normValue = calibration_05_normValue_0_1[ch];
whismanoid 34:a1993a1ee904 4050 double raw_95_normValue = calibration_95_normValue_0_1[ch];
whismanoid 34:a1993a1ee904 4051 // calibrated normValue nominal 5% and 95% points
whismanoid 34:a1993a1ee904 4052 // divide V/adc_full_scale_voltage[0] to get normValue_0_1
whismanoid 34:a1993a1ee904 4053 double cal_05_normValue = calibration_05_V[ch] / adc_full_scale_voltage[ch];
whismanoid 34:a1993a1ee904 4054 double cal_95_normValue = calibration_95_V[ch] / adc_full_scale_voltage[ch];
whismanoid 34:a1993a1ee904 4055 // cmdLine.serial().printf("\r\n CalibratedNormValue(%d, %1.6f) cal_05_normValue = %1.6f",
whismanoid 34:a1993a1ee904 4056 // ch,
whismanoid 34:a1993a1ee904 4057 // raw_normValue_0_1,
whismanoid 34:a1993a1ee904 4058 // cal_05_normValue
whismanoid 34:a1993a1ee904 4059 // );
whismanoid 34:a1993a1ee904 4060 // cmdLine.serial().printf("\r\n CalibratedNormValue(%d, %1.6f) cal_95_normValue = %1.6f",
whismanoid 34:a1993a1ee904 4061 // ch,
whismanoid 34:a1993a1ee904 4062 // raw_normValue_0_1,
whismanoid 34:a1993a1ee904 4063 // cal_95_normValue
whismanoid 34:a1993a1ee904 4064 // );
whismanoid 34:a1993a1ee904 4065 //
whismanoid 34:a1993a1ee904 4066 double span_raw = raw_95_normValue - raw_05_normValue;
whismanoid 34:a1993a1ee904 4067 double span_cal = cal_95_normValue - cal_05_normValue;
whismanoid 34:a1993a1ee904 4068 // cmdLine.serial().printf("\r\n CalibratedNormValue(%d, %1.6f) span_raw = %1.6f",
whismanoid 34:a1993a1ee904 4069 // ch,
whismanoid 34:a1993a1ee904 4070 // raw_normValue_0_1,
whismanoid 34:a1993a1ee904 4071 // span_raw
whismanoid 34:a1993a1ee904 4072 // );
whismanoid 34:a1993a1ee904 4073 // cmdLine.serial().printf("\r\n CalibratedNormValue(%d, %1.6f) span_cal = %1.6f",
whismanoid 34:a1993a1ee904 4074 // ch,
whismanoid 34:a1993a1ee904 4075 // raw_normValue_0_1,
whismanoid 34:a1993a1ee904 4076 // span_cal
whismanoid 34:a1993a1ee904 4077 // );
whismanoid 34:a1993a1ee904 4078 // if calibration is not valid, return unmodified normValue_0_1 and print a warning
whismanoid 34:a1993a1ee904 4079 if (span_raw < 0.001) {
whismanoid 34:a1993a1ee904 4080 cmdLine.serial().printf("\r\n! CalibratedNormValue(%d, %1.6f) ERRRRRR span_raw = %1.6f",
whismanoid 34:a1993a1ee904 4081 ch,
whismanoid 34:a1993a1ee904 4082 raw_normValue_0_1,
whismanoid 34:a1993a1ee904 4083 span_raw
whismanoid 34:a1993a1ee904 4084 );
whismanoid 34:a1993a1ee904 4085 return raw_normValue_0_1;
whismanoid 34:a1993a1ee904 4086 }
whismanoid 34:a1993a1ee904 4087 if (span_cal < 0.001) {
whismanoid 34:a1993a1ee904 4088 cmdLine.serial().printf("\r\n! CalibratedNormValue(%d, %1.6f) ERRRRRR span_cal = %1.6f",
whismanoid 34:a1993a1ee904 4089 ch,
whismanoid 34:a1993a1ee904 4090 raw_normValue_0_1,
whismanoid 34:a1993a1ee904 4091 span_cal
whismanoid 34:a1993a1ee904 4092 );
whismanoid 34:a1993a1ee904 4093 return raw_normValue_0_1;
whismanoid 34:a1993a1ee904 4094 }
whismanoid 34:a1993a1ee904 4095 double slope_correction = span_cal / span_raw;
whismanoid 34:a1993a1ee904 4096 double corrected_normValue_0_1 = cal_05_normValue + ((raw_normValue_0_1 - raw_05_normValue) * slope_correction);
whismanoid 34:a1993a1ee904 4097 // cmdLine.serial().printf("\r\n CalibratedNormValue(%d, %1.6f) slope_correction = %1.6f",
whismanoid 34:a1993a1ee904 4098 // ch,
whismanoid 34:a1993a1ee904 4099 // raw_normValue_0_1,
whismanoid 34:a1993a1ee904 4100 // slope_correction
whismanoid 34:a1993a1ee904 4101 // );
whismanoid 34:a1993a1ee904 4102 // cmdLine.serial().printf("\r\n CalibratedNormValue(%d, %1.6f) corrected_normValue_0_1 = %1.6f\r\n",
whismanoid 34:a1993a1ee904 4103 // ch,
whismanoid 34:a1993a1ee904 4104 // raw_normValue_0_1,
whismanoid 34:a1993a1ee904 4105 // corrected_normValue_0_1
whismanoid 34:a1993a1ee904 4106 // );
whismanoid 34:a1993a1ee904 4107 return corrected_normValue_0_1;
whismanoid 34:a1993a1ee904 4108 }
whismanoid 34:a1993a1ee904 4109 #endif // HAS_Platform_AIN_Calibration
whismanoid 34:a1993a1ee904 4110 // Option to customize channel names in datalog header line
whismanoid 45:74bf1fe021e5 4111 // This could be used to identify external hardware attached to each input
whismanoid 13:184a08909405 4112 #ifndef HAS_Platform_AIN_customChannelHeader
whismanoid 13:184a08909405 4113 #define HAS_Platform_AIN_customChannelHeader 1
whismanoid 13:184a08909405 4114 #endif
whismanoid 13:184a08909405 4115 #if HAS_Platform_AIN_customChannelHeader // Optional custom per-channel header suffix
whismanoid 13:184a08909405 4116 const char* const Platform_AIN_customChannelHeader_ch[NUM_PLATFORM_ANALOG_IN_CHANNELS] = {
whismanoid 13:184a08909405 4117 "=AIN4", // MAX40108: AIN0_1V0_current_ 0.591202*100/3.34 = 17.70065868263473mA
whismanoid 13:184a08909405 4118 "=AIN5", // MAX40108: AIN1_1V0_voltage
whismanoid 13:184a08909405 4119 "WE", // MAX40108: AIN2_WE
whismanoid 13:184a08909405 4120 "CE", // MAX40108: AIN3_CE
whismanoid 13:184a08909405 4121 "*100/3.34=mA", // MAX40108: AIN4_*100/3.34=mA
whismanoid 13:184a08909405 4122 "CELL_VOLTAGE", // MAX40108: AIN5_CELL_VOLTAGE
whismanoid 13:184a08909405 4123 };
whismanoid 13:184a08909405 4124 #endif // HAS_Platform_AIN_customChannelHeader
whismanoid 1:747f1602abfc 4125 //--------------------------------------------------
whismanoid 1:747f1602abfc 4126 // Option to log platform analog inputs as raw LSB code
whismanoid 1:747f1602abfc 4127 #ifndef LOG_PLATFORM_ANALOG_IN_LSB
whismanoid 1:747f1602abfc 4128 #define LOG_PLATFORM_ANALOG_IN_LSB 0
whismanoid 1:747f1602abfc 4129 #endif
whismanoid 1:747f1602abfc 4130 #if LOG_PLATFORM_ANALOG_IN_LSB
whismanoid 1:747f1602abfc 4131 int Platform_LSB[NUM_PLATFORM_ANALOG_IN_CHANNELS];
whismanoid 1:747f1602abfc 4132 #endif
whismanoid 1:747f1602abfc 4133
whismanoid 1:747f1602abfc 4134 //--------------------------------------------------
whismanoid 1:747f1602abfc 4135 // Option to use platform analog inputs as Voltage
whismanoid 1:747f1602abfc 4136 #ifndef LOG_PLATFORM_ANALOG_IN_VOLTS
whismanoid 1:747f1602abfc 4137 #define LOG_PLATFORM_ANALOG_IN_VOLTS 1
whismanoid 1:747f1602abfc 4138 #endif
whismanoid 1:747f1602abfc 4139 #if LOG_PLATFORM_ANALOG_IN_VOLTS
whismanoid 1:747f1602abfc 4140 double Platform_Voltage[NUM_PLATFORM_ANALOG_IN_CHANNELS];
whismanoid 1:747f1602abfc 4141 #endif
whismanoid 3:9055e17e181a 4142 #endif // defined(LOG_PLATFORM_AIN)
whismanoid 0:cb44e2e9ec4c 4143
whismanoid 10:04022a61b527 4144 //--------------------------------------------------
whismanoid 10:04022a61b527 4145 // Option to use Command forwarding to Auxiliary serial port
whismanoid 10:04022a61b527 4146 // Command forwarding to Auxiliary serial port TX/RX
whismanoid 10:04022a61b527 4147 // Command forwarding to AUX serial TX/RX cmdLine_AUXserial
whismanoid 10:04022a61b527 4148 // Command forwarding to DAPLINK serial TX/RX cmdLine_DAPLINKserial
whismanoid 10:04022a61b527 4149 // prefer cmdLine_AUXserial if available, else cmdLine_DAPLINKserial; else we don't have this feature
whismanoid 10:04022a61b527 4150 #ifndef USE_AUX_SERIAL_CMD_FORWARDING
whismanoid 10:04022a61b527 4151 #define USE_AUX_SERIAL_CMD_FORWARDING 1
whismanoid 10:04022a61b527 4152 #endif // USE_AUX_SERIAL_CMD_FORWARDING
whismanoid 10:04022a61b527 4153 #if USE_AUX_SERIAL_CMD_FORWARDING
whismanoid 10:04022a61b527 4154 // Command forwarding to Auxiliary serial port TX/RX #257 -- global parameters
whismanoid 49:359a6b9df7c1 4155 const size_t RX_STRING_BUF_SIZE = 5000;
whismanoid 10:04022a61b527 4156 int g_auxSerialCom_baud = 9600; //!< baud rate Auxiliary serial port
whismanoid 10:04022a61b527 4157 // transmit command string by AUX TX
whismanoid 10:04022a61b527 4158 #if 0
whismanoid 10:04022a61b527 4159 int g_auxSerialCom_tx_wait_echo = 0; //!< TX wait for each character echo?
whismanoid 10:04022a61b527 4160 int g_auxSerialCom_tx_char_delay_ms = 0; //!< TX delay after each char?
whismanoid 10:04022a61b527 4161 int g_auxSerialCom_tx_line_delay_ms = 0; //!< TX delay after each CR/LF?
whismanoid 10:04022a61b527 4162 #endif
whismanoid 10:04022a61b527 4163 // capture received string from AUX RX
whismanoid 10:04022a61b527 4164 Timer g_auxSerialCom_Timer;
whismanoid 10:04022a61b527 4165 int g_auxSerialCom_Timer_begin_message_ms = 0; //!< start of message
whismanoid 10:04022a61b527 4166 int g_auxSerialCom_Timer_begin_rx_idle_ms = 0; //!< recent RX character timestamp
whismanoid 10:04022a61b527 4167 int g_auxSerialCom_message_ms = 10000; //!< maximum RX message total response time
whismanoid 10:04022a61b527 4168 int g_auxSerialCom_rx_idle_ms = 500; //!< maximum RX message idle time between characters
whismanoid 10:04022a61b527 4169 int g_auxSerialCom_rx_max_count = RX_STRING_BUF_SIZE-1; //!< maximum RX message total length
whismanoid 10:04022a61b527 4170 const int aux_serial_cmd_forwarding_rx_eot_not_used = 'x';
whismanoid 10:04022a61b527 4171 int g_auxSerialCom_rx_eot = aux_serial_cmd_forwarding_rx_eot_not_used; //!< capture RX until match end of text char
whismanoid 10:04022a61b527 4172 //~ int g_auxSerialCom_rx_eot = 0; //!< capture RX until match end of text string?
whismanoid 10:04022a61b527 4173 #endif // USE_AUX_SERIAL_CMD_FORWARDING
whismanoid 10:04022a61b527 4174 #if USE_AUX_SERIAL_CMD_FORWARDING
whismanoid 10:04022a61b527 4175 // TODO WIP Command forwarding to Auxiliary serial port TX/RX #257
whismanoid 10:04022a61b527 4176 // prefer cmdLine_AUXserial if available, else cmdLine_DAPLINKserial; else we don't have this feature
whismanoid 10:04022a61b527 4177 # if HAS_AUX_SERIAL
whismanoid 10:04022a61b527 4178 // TODO WIP Command forwarding to AUX serial TX/RX cmdLine_AUXserial #257
whismanoid 10:04022a61b527 4179 # elif HAS_DAPLINK_SERIAL
whismanoid 10:04022a61b527 4180 // TODO WIP Command forwarding to DAPLINK serial TX/RX cmdLine_DAPLINKserial #257
whismanoid 10:04022a61b527 4181 # else // neither HAS_AUX_SERIAL HAS_DAPLINK_SERIAL
whismanoid 10:04022a61b527 4182 #warning "USE_AUX_SERIAL_CMD_FORWARDING should not be enabled without HAS_AUX_SERIAL or HAS_DAPLINK_SERIAL"
whismanoid 10:04022a61b527 4183 # endif // HAS_AUX_SERIAL HAS_DAPLINK_SERIAL
whismanoid 10:04022a61b527 4184 # if HAS_AUX_SERIAL
whismanoid 10:04022a61b527 4185 // TODO WIP Command forwarding to AUX serial TX/RX cmdLine_AUXserial #257
whismanoid 10:04022a61b527 4186 # endif // HAS_AUX_SERIAL
whismanoid 10:04022a61b527 4187 # if HAS_DAPLINK_SERIAL
whismanoid 10:04022a61b527 4188 // TODO WIP Command forwarding to DAPLINK serial TX/RX cmdLine_DAPLINKserial #257
whismanoid 10:04022a61b527 4189 # endif // HAS_DAPLINK_SERIAL
whismanoid 10:04022a61b527 4190 #endif // USE_AUX_SERIAL_CMD_FORWARDING
whismanoid 10:04022a61b527 4191
whismanoid 8:dffee7509bfb 4192 // CODE GENERATOR: example code for ADC: serial port declaration
whismanoid 8:dffee7509bfb 4193 //--------------------------------------------------
whismanoid 8:dffee7509bfb 4194 // Declare the Serial driver
whismanoid 8:dffee7509bfb 4195 // default baud rate settings are 9600 8N1
whismanoid 8:dffee7509bfb 4196 // install device driver from http://developer.mbed.org/media/downloads/drivers/mbedWinSerial_16466.exe
whismanoid 8:dffee7509bfb 4197 // see docs https://docs.mbed.com/docs/mbed-os-handbook/en/5.5/getting_started/what_need/
whismanoid 8:dffee7509bfb 4198 //--------------------------------------------------
whismanoid 8:dffee7509bfb 4199 #if defined(TARGET_MAX32630)
whismanoid 8:dffee7509bfb 4200 //Serial UART0serial(UART0_TX,UART0_RX); // tx,rx UART0 MAX32630FTHR: P0_1,P0_0 (Bluetooth PAN1326B)
whismanoid 8:dffee7509bfb 4201 //Serial UART1serial(UART1_TX,UART1_RX); // tx,rx UART1 MAX32630FTHR: P2_1,P2_0 (DAPLINK)
whismanoid 8:dffee7509bfb 4202 //Serial UART2serial(UART2_TX,UART2_RX); // tx,rx UART2 MAX32630FTHR: P3_1,P3_0 (J1.15,J1.14)
whismanoid 8:dffee7509bfb 4203 //Serial UART3serial(UART3_TX,UART3_RX); // tx,rx UART3 MAX32630FTHR: P5_4,P5_3 (J3.7,J3.8)
whismanoid 8:dffee7509bfb 4204 //
whismanoid 8:dffee7509bfb 4205 // TX/RX auxiliary UART port cmdLine_AUXserial AUXserial
whismanoid 8:dffee7509bfb 4206 Serial AUXserial(UART2_TX,UART2_RX); // tx,rx UART2 MAX32630FTHR: P3_1,P3_0 (J1.15,J1.14)
whismanoid 8:dffee7509bfb 4207 //Serial J3AUXserial(UART3_TX,UART3_RX); // tx,rx UART3 MAX32630FTHR: P5_4,P5_3 (J3.7,J3.8)
whismanoid 8:dffee7509bfb 4208 //Serial BTAUXserial(UART0_TX,UART0_RX); // tx,rx UART0 MAX32630FTHR: P0_1,P0_0 (Bluetooth PAN1326B)
whismanoid 8:dffee7509bfb 4209 #define HAS_AUX_SERIAL 1
whismanoid 8:dffee7509bfb 4210 //
whismanoid 8:dffee7509bfb 4211 // Hardware serial port over DAPLink
whismanoid 8:dffee7509bfb 4212 // The default baud rate for the DapLink UART is 9600
whismanoid 8:dffee7509bfb 4213 Serial DAPLINKserial(P2_1,P2_0); // tx,rx UART1 MAX32630FTHR: P2_1,P2_0 (DAPLINK)
whismanoid 8:dffee7509bfb 4214 #define HAS_DAPLINK_SERIAL 1
whismanoid 8:dffee7509bfb 4215 //
whismanoid 8:dffee7509bfb 4216 // Virtual serial port over USB
whismanoid 8:dffee7509bfb 4217 #include "USBSerial.h"
whismanoid 8:dffee7509bfb 4218 // The baud rate does not affect the virtual USBSerial UART.
whismanoid 8:dffee7509bfb 4219 USBSerial serial;
whismanoid 8:dffee7509bfb 4220 //--------------------------------------------------
whismanoid 8:dffee7509bfb 4221 #elif defined(TARGET_MAX32625MBED)
whismanoid 8:dffee7509bfb 4222 //Serial UART0serial(UART0_TX,UART0_RX); // tx,rx UART0 MAX32625MBED: P0_1,P0_0 (Arduino D1,D0)
whismanoid 8:dffee7509bfb 4223 //Serial UART1serial(UART1_TX,UART1_RX); // tx,rx UART1 MAX32625MBED: P2_1,P2_0 (DAPLINK)
whismanoid 8:dffee7509bfb 4224 //Serial UART2serial(UART2_TX,UART2_RX); // tx,rx UART2 MAX32625MBED: P3_1,P3_0 (J15-LEDgreen,LEDred)
whismanoid 8:dffee7509bfb 4225 //
whismanoid 8:dffee7509bfb 4226 // Hardware serial port over DAPLink
whismanoid 8:dffee7509bfb 4227 // The default baud rate for the DapLink UART is 9600
whismanoid 8:dffee7509bfb 4228 Serial DAPLINKserial(P2_1,P2_0); // tx,rx UART1 MAX32625MBED: P2_1,P2_0 (DAPLINK)
whismanoid 8:dffee7509bfb 4229 #define HAS_DAPLINK_SERIAL 1
whismanoid 8:dffee7509bfb 4230 //
whismanoid 8:dffee7509bfb 4231 // Virtual serial port over USB
whismanoid 8:dffee7509bfb 4232 #include "USBSerial.h"
whismanoid 8:dffee7509bfb 4233 // The baud rate does not affect the virtual USBSerial UART.
whismanoid 8:dffee7509bfb 4234 USBSerial serial;
whismanoid 8:dffee7509bfb 4235 //--------------------------------------------------
whismanoid 22:d6dc8a85f435 4236 #elif defined(TARGET_MAX32625PICO)
whismanoid 8:dffee7509bfb 4237 //Serial UART0serial(UART0_TX,UART0_RX); // tx,rx UART0 MAX32625PICO: P0_1,P0_0 (pin 19/20)
whismanoid 8:dffee7509bfb 4238 //Serial UART1serial(UART1_TX,UART1_RX); // tx,rx UART1 MAX32625PICO: P2_1,P2_0 (underside?)
whismanoid 8:dffee7509bfb 4239 //Serial UART2serial(UART2_TX,UART2_RX); // tx,rx UART2 MAX32625PICO: P3_1,P3_0 (DAPLINK)
whismanoid 8:dffee7509bfb 4240 //
whismanoid 8:dffee7509bfb 4241 // TX/RX auxiliary UART port cmdLine_AUXserial AUXserial
whismanoid 8:dffee7509bfb 4242 Serial AUXserial(UART0_TX,UART0_RX); // tx,rx UART0 MAX32625PICO: P0_1,P0_0 (pin 19/20)
whismanoid 8:dffee7509bfb 4243 #define HAS_AUX_SERIAL 1
whismanoid 8:dffee7509bfb 4244 //
whismanoid 8:dffee7509bfb 4245 // Hardware serial port over DAPLink
whismanoid 8:dffee7509bfb 4246 Serial DAPLINKserial(UART2_TX,UART2_RX); // tx,rx UART2 MAX32625PICO: P3_1,P3_0 (DAPLINK)
whismanoid 8:dffee7509bfb 4247 #define HAS_DAPLINK_SERIAL 1
whismanoid 8:dffee7509bfb 4248 //
whismanoid 8:dffee7509bfb 4249 // Virtual serial port over USB
whismanoid 8:dffee7509bfb 4250 #include "USBSerial.h"
whismanoid 8:dffee7509bfb 4251 // The baud rate does not affect the virtual USBSerial UART.
whismanoid 8:dffee7509bfb 4252 USBSerial serial;
whismanoid 22:d6dc8a85f435 4253 //--------------------------------------------------
whismanoid 22:d6dc8a85f435 4254 #elif defined(TARGET_MAX40108DEMOP2U9)
whismanoid 22:d6dc8a85f435 4255 //Serial UART0serial(UART0_TX,UART0_RX); // tx,rx UART0 MAX40108DEMOP2U9: P0_1,P0_0 (J90.1/J90.0 to console)
whismanoid 22:d6dc8a85f435 4256 //Serial UART1serial(UART1_TX,UART1_RX); // tx,rx UART1 MAX40108DEMOP2U9: P2_1,P2_0 (DAPLINK)
whismanoid 22:d6dc8a85f435 4257 //Serial UART2serial(UART2_TX,UART2_RX); // tx,rx UART2 MAX40108DEMOP2U9: P3_1,P3_0 (unavailable)
whismanoid 22:d6dc8a85f435 4258 //
whismanoid 22:d6dc8a85f435 4259 // TX/RX auxiliary UART port cmdLine_AUXserial AUXserial is used as main serial port in MAX40108 Demo board
whismanoid 22:d6dc8a85f435 4260 Serial serial(UART0_TX,UART0_RX); // tx,rx UART0 MAX40108DEMOP2U9: P0_1,P0_0 (J90.1/J90.0 to console)
whismanoid 22:d6dc8a85f435 4261 // #define HAS_AUX_SERIAL 1
whismanoid 22:d6dc8a85f435 4262 //
whismanoid 22:d6dc8a85f435 4263 // Hardware serial port over DAPLink
whismanoid 22:d6dc8a85f435 4264 // connection to external MAX32625PICO(DAPLINK) needed TX/RX swap in firmware.
whismanoid 22:d6dc8a85f435 4265 // MAX32625PICO(DAPLINK) drives DAPLINK.8, listens on DAPLINK.6.
whismanoid 22:d6dc8a85f435 4266 // See AN6350 MAX32625 Users Guide 7.5.2.3.1 TX and RX Pin Mapping for UART 1 -- Mapping Option B
whismanoid 39:4d285e961435 4267 #ifdef BOARD_SERIAL_NUMBER
whismanoid 39:4d285e961435 4268 // data unique to certain boards based on serial number
whismanoid 39:4d285e961435 4269 # if (BOARD_SERIAL_NUMBER) == 0
whismanoid 39:4d285e961435 4270 #warning "(BOARD_SERIAL_NUMBER) == 0"
whismanoid 39:4d285e961435 4271 // s/n 0 is not really a MAX40108 board, it's actually a MAX32625PICO used for early development. So no swap.
whismanoid 39:4d285e961435 4272 Serial DAPLINKserial(UART1_TX,UART1_RX); // tx,rx UART1 MAX40108DEMOP2U9: P2_1,P2_0 (DAPLINK) Mapping Option A (normal)
whismanoid 39:4d285e961435 4273 //Serial DAPLINKserial(UART1_RX,UART1_TX); // tx,rx UART1 MAX40108DEMOP2U9: P2_1,P2_0 (DAPLINK) Mapping Option B (TX/RX-swap)
whismanoid 39:4d285e961435 4274 #define HAS_DAPLINK_SERIAL 1
whismanoid 39:4d285e961435 4275 //
whismanoid 39:4d285e961435 4276 // # elif (BOARD_SERIAL_NUMBER) == 1
whismanoid 39:4d285e961435 4277 // #warning "(BOARD_SERIAL_NUMBER) == 1"
whismanoid 39:4d285e961435 4278 // //
whismanoid 39:4d285e961435 4279 // # elif (BOARD_SERIAL_NUMBER) == 2
whismanoid 39:4d285e961435 4280 // #warning "(BOARD_SERIAL_NUMBER) == 2"
whismanoid 39:4d285e961435 4281 // //
whismanoid 39:4d285e961435 4282 // # elif (BOARD_SERIAL_NUMBER) == 3
whismanoid 39:4d285e961435 4283 // #warning "(BOARD_SERIAL_NUMBER) == 3"
whismanoid 39:4d285e961435 4284 // //
whismanoid 39:4d285e961435 4285 // # elif (BOARD_SERIAL_NUMBER) == 4
whismanoid 39:4d285e961435 4286 // #warning "(BOARD_SERIAL_NUMBER) == 4"
whismanoid 39:4d285e961435 4287 // //
whismanoid 39:4d285e961435 4288 // # elif (BOARD_SERIAL_NUMBER) == 5
whismanoid 39:4d285e961435 4289 // #warning "(BOARD_SERIAL_NUMBER) == 5"
whismanoid 39:4d285e961435 4290 // //
whismanoid 39:4d285e961435 4291 // # elif (BOARD_SERIAL_NUMBER) == 6
whismanoid 39:4d285e961435 4292 // #warning "(BOARD_SERIAL_NUMBER) == 6"
whismanoid 39:4d285e961435 4293 // //
whismanoid 39:4d285e961435 4294 # else
whismanoid 39:4d285e961435 4295 // #warning "BOARD_SERIAL_NUMBER defined but not recognized"
whismanoid 22:d6dc8a85f435 4296 //Serial DAPLINKserial(UART1_TX,UART1_RX); // tx,rx UART1 MAX40108DEMOP2U9: P2_1,P2_0 (DAPLINK) Mapping Option A (normal)
whismanoid 22:d6dc8a85f435 4297 Serial DAPLINKserial(UART1_RX,UART1_TX); // tx,rx UART1 MAX40108DEMOP2U9: P2_1,P2_0 (DAPLINK) Mapping Option B (TX/RX-swap)
whismanoid 22:d6dc8a85f435 4298 #define HAS_DAPLINK_SERIAL 1
whismanoid 39:4d285e961435 4299 # endif
whismanoid 39:4d285e961435 4300 #else // BOARD_SERIAL_NUMBER data unique to certain boards based on serial number
whismanoid 39:4d285e961435 4301 #warning "BOARD_SERIAL_NUMBER not defined; using default values"
whismanoid 39:4d285e961435 4302 //Serial DAPLINKserial(UART1_TX,UART1_RX); // tx,rx UART1 MAX40108DEMOP2U9: P2_1,P2_0 (DAPLINK) Mapping Option A (normal)
whismanoid 39:4d285e961435 4303 Serial DAPLINKserial(UART1_RX,UART1_TX); // tx,rx UART1 MAX40108DEMOP2U9: P2_1,P2_0 (DAPLINK) Mapping Option B (TX/RX-swap)
whismanoid 39:4d285e961435 4304 #define HAS_DAPLINK_SERIAL 1
whismanoid 39:4d285e961435 4305 //
whismanoid 39:4d285e961435 4306 #endif // BOARD_SERIAL_NUMBER data unique to certain boards based on serial number
whismanoid 22:d6dc8a85f435 4307 //
whismanoid 22:d6dc8a85f435 4308 // Serial AUXserial(UART1_TX,UART1_RX); // tx,rx UART2 MAX40108DEMOP2U9: P3_1,P3_0 (unavailable)
whismanoid 22:d6dc8a85f435 4309 // #define HAS_AUX_SERIAL 1
whismanoid 22:d6dc8a85f435 4310 //
whismanoid 22:d6dc8a85f435 4311 // Virtual serial port over USB
whismanoid 22:d6dc8a85f435 4312 // #include "USBSerial.h"
whismanoid 22:d6dc8a85f435 4313 // The baud rate does not affect the virtual USBSerial UART.
whismanoid 22:d6dc8a85f435 4314 //USBSerial serial;
whismanoid 8:dffee7509bfb 4315 //--------------------------------------------------
whismanoid 8:dffee7509bfb 4316 #elif defined(TARGET_MAX32620FTHR)
whismanoid 8:dffee7509bfb 4317 #warning "TARGET_MAX32620FTHR not previously tested; need to define serial pins..."
whismanoid 8:dffee7509bfb 4318 //Serial UART0serial(UART0_TX,UART0_RX); // tx,rx UART0 MAX32620FTHR: P0_1,P0_0 (PMOD0.2,PMOD0.3)
whismanoid 8:dffee7509bfb 4319 //Serial UART1serial(UART1_TX,UART1_RX); // tx,rx UART1 MAX32620FTHR: P2_1,P2_0 (DAPLINK)
whismanoid 8:dffee7509bfb 4320 //Serial UART2serial(UART2_TX,UART2_RX); // tx,rx UART2 MAX32620FTHR: P3_1,P3_0 (J1.15,J1.14)
whismanoid 8:dffee7509bfb 4321 //Serial UART3serial(UART3_TX,UART3_RX); // tx,rx UART3 MAX32620FTHR: P5_4,P5_3 (J2.7,J2.8)
whismanoid 8:dffee7509bfb 4322 //
whismanoid 8:dffee7509bfb 4323 // TX/RX auxiliary UART port cmdLine_AUXserial AUXserial
whismanoid 8:dffee7509bfb 4324 Serial serial(UART2_TX,UART2_RX); // tx,rx UART2 MAX32620FTHR: P3_1,P3_0 (J1.15,J1.14)
whismanoid 8:dffee7509bfb 4325 //Serial AUXserial(UART2_TX,UART2_RX); // tx,rx UART2 MAX32620FTHR: P3_1,P3_0 (J1.15,J1.14)
whismanoid 8:dffee7509bfb 4326 Serial AUXserial(UART3_TX,UART3_RX); // tx,rx UART3 MAX32620FTHR: P5_4,P5_3 (J2.7,J2.8)
whismanoid 8:dffee7509bfb 4327 //Serial PMOD0AUXserial(UART0_TX,UART0_RX); // tx,rx UART0 MAX32620FTHR: P0_1,P0_0 (PMOD0.2,PMOD0.3)
whismanoid 8:dffee7509bfb 4328 #define HAS_AUX_SERIAL 1
whismanoid 8:dffee7509bfb 4329 //
whismanoid 8:dffee7509bfb 4330 // Hardware serial port over DAPLink
whismanoid 8:dffee7509bfb 4331 // The default baud rate for the DapLink UART is 9600
whismanoid 8:dffee7509bfb 4332 Serial DAPLINKserial(USBTX, USBRX); // tx,rx MAX32620FTHR: P2_1,P2_0
whismanoid 8:dffee7509bfb 4333 //Serial DAPLINKserial(STDIO_UART_TX, STDIO_UART_RX); // tx, rx
whismanoid 8:dffee7509bfb 4334 #define HAS_DAPLINK_SERIAL 1
whismanoid 8:dffee7509bfb 4335 //
whismanoid 8:dffee7509bfb 4336 // Virtual serial port over USB
whismanoid 8:dffee7509bfb 4337 // #include "USBSerial.h"
whismanoid 8:dffee7509bfb 4338 // The baud rate does not affect the virtual USBSerial UART.
whismanoid 8:dffee7509bfb 4339 //USBSerial serial; // MAX32620FTHR: USBSerial crash??
whismanoid 8:dffee7509bfb 4340 #warning "TARGET_MAX32620FTHR not previously tested; USBSerial crash?"
whismanoid 8:dffee7509bfb 4341 //--------------------------------------------------
whismanoid 8:dffee7509bfb 4342 #elif defined(TARGET_MAX32600)
whismanoid 8:dffee7509bfb 4343 //Serial UART0serial(UART0_TX,UART0_RX); // tx,rx UART0 MAX32600MBED: P1_1,P1_0 (Arduino D1,D0)(DAPLINK)
whismanoid 8:dffee7509bfb 4344 //Serial UART1serial(UART1_TX,UART1_RX); // tx,rx UART2 MAX32625MBED: P1_3,P1_2 (Arduino D3,D2)
whismanoid 8:dffee7509bfb 4345 //Serial UART2serial(UART2_TX,UART2_RX); // tx,rx UART1 MAX32625MBED: P7_3,P7_2 ( ?? )
whismanoid 8:dffee7509bfb 4346 //
whismanoid 8:dffee7509bfb 4347 // Hardware serial port over DAPLink
whismanoid 8:dffee7509bfb 4348 // The default baud rate for the DapLink UART is 9600
whismanoid 8:dffee7509bfb 4349 Serial DAPLINKserial(P1_1,P1_0); // tx,rx UART0 MAX32600MBED: P1_1,P1_0 (Arduino D1,D0)(DAPLINK)
whismanoid 8:dffee7509bfb 4350 #define HAS_DAPLINK_SERIAL 1
whismanoid 8:dffee7509bfb 4351 //
whismanoid 8:dffee7509bfb 4352 // Virtual serial port over USB
whismanoid 8:dffee7509bfb 4353 #include "USBSerial.h"
whismanoid 8:dffee7509bfb 4354 // The baud rate does not affect the virtual USBSerial UART.
whismanoid 8:dffee7509bfb 4355 USBSerial serial;
whismanoid 8:dffee7509bfb 4356 //--------------------------------------------------
whismanoid 8:dffee7509bfb 4357 #elif defined(TARGET_NUCLEO_F446RE) || defined(TARGET_NUCLEO_F401RE)
whismanoid 8:dffee7509bfb 4358 Serial serial(SERIAL_TX, SERIAL_RX); // tx, rx
whismanoid 8:dffee7509bfb 4359 //--------------------------------------------------
whismanoid 8:dffee7509bfb 4360 #else
whismanoid 8:dffee7509bfb 4361 #if defined(SERIAL_TX)
whismanoid 8:dffee7509bfb 4362 #warning "target not previously tested; guess serial pins are SERIAL_TX, SERIAL_RX..."
whismanoid 8:dffee7509bfb 4363 Serial serial(SERIAL_TX, SERIAL_RX); // tx, rx
whismanoid 8:dffee7509bfb 4364 #elif defined(USBTX)
whismanoid 8:dffee7509bfb 4365 #warning "target not previously tested; guess serial pins are USBTX, USBRX..."
whismanoid 8:dffee7509bfb 4366 Serial serial(USBTX, USBRX); // tx, rx
whismanoid 8:dffee7509bfb 4367 #elif defined(UART_TX)
whismanoid 8:dffee7509bfb 4368 #warning "target not previously tested; guess serial pins are UART_TX, UART_RX..."
whismanoid 8:dffee7509bfb 4369 Serial serial(UART_TX, UART_RX); // tx, rx
whismanoid 8:dffee7509bfb 4370 #else
whismanoid 8:dffee7509bfb 4371 #warning "target not previously tested; need to define serial pins..."
whismanoid 8:dffee7509bfb 4372 #endif
whismanoid 8:dffee7509bfb 4373 #endif
whismanoid 8:dffee7509bfb 4374 //
whismanoid 8:dffee7509bfb 4375 #include "CmdLine.h"
whismanoid 8:dffee7509bfb 4376
whismanoid 8:dffee7509bfb 4377 # if HAS_AUX_SERIAL
whismanoid 8:dffee7509bfb 4378 // TX/RX auxiliary UART port cmdLine_AUXserial AUXserial
whismanoid 8:dffee7509bfb 4379 CmdLine cmdLine_AUXserial(AUXserial, "AUXserial");
whismanoid 10:04022a61b527 4380 uint8_t Datalogger_enable_AUXserial = {
whismanoid 10:04022a61b527 4381 #if USE_AUX_SERIAL_CMD_FORWARDING
whismanoid 10:04022a61b527 4382 // Command forwarding to Auxiliary serial port;
whismanoid 10:04022a61b527 4383 // don't accept commands from Auxiliary serial port
whismanoid 10:04022a61b527 4384 false
whismanoid 10:04022a61b527 4385 #else // USE_AUX_SERIAL_CMD_FORWARDING
whismanoid 10:04022a61b527 4386 true
whismanoid 10:04022a61b527 4387 #endif // USE_AUX_SERIAL_CMD_FORWARDING
whismanoid 10:04022a61b527 4388 };
whismanoid 8:dffee7509bfb 4389 # endif // HAS_AUX_SERIAL
whismanoid 8:dffee7509bfb 4390 # if HAS_DAPLINK_SERIAL
whismanoid 8:dffee7509bfb 4391 CmdLine cmdLine_DAPLINKserial(DAPLINKserial, "DAPLINK");
whismanoid 8:dffee7509bfb 4392 uint8_t Datalogger_enable_DAPLINKserial = true;
whismanoid 8:dffee7509bfb 4393 # endif // HAS_DAPLINK_SERIAL
whismanoid 8:dffee7509bfb 4394 CmdLine cmdLine(serial, "serial");
whismanoid 8:dffee7509bfb 4395 uint8_t Datalogger_enable_serial = true;
whismanoid 8:dffee7509bfb 4396 // CODE GENERATOR: example code for ADC: serial port declaration (end)
whismanoid 8:dffee7509bfb 4397
whismanoid 21:ac062a97a71d 4398
whismanoid 21:ac062a97a71d 4399 //--------------------------------------------------
whismanoid 23:c6c652bef4b9 4400 // command_table: list of commands to perform on button press
whismanoid 45:74bf1fe021e5 4401 // support for commands %B1! .. %B9!
whismanoid 23:c6c652bef4b9 4402 #ifndef USE_DATALOGGER_CommandTable
whismanoid 23:c6c652bef4b9 4403 #define USE_DATALOGGER_CommandTable 1
whismanoid 23:c6c652bef4b9 4404 //~ #undef USE_DATALOGGER_CommandTable
whismanoid 23:c6c652bef4b9 4405 #endif
whismanoid 23:c6c652bef4b9 4406 #if USE_DATALOGGER_CommandTable // Run_command_table(onButton1_command_table)
whismanoid 23:c6c652bef4b9 4407 const int COMMAND_TABLE_ROW_MAX = 10;
whismanoid 23:c6c652bef4b9 4408 const int COMMAND_TABLE_COL_MAX = 40;
whismanoid 23:c6c652bef4b9 4409 #endif // USE_DATALOGGER_CommandTable
whismanoid 23:c6c652bef4b9 4410 //
whismanoid 23:c6c652bef4b9 4411 #if USE_DATALOGGER_CommandTable // Run_command_table(onButton1_command_table)
whismanoid 23:c6c652bef4b9 4412 #if HAS_BUTTON1_DEMO_INTERRUPT
whismanoid 23:c6c652bef4b9 4413 // command_table: list of commands to perform on button press
whismanoid 45:74bf1fe021e5 4414 // onButton1_command_table[] supports command %B1! -- run, %B1@ -- edit
whismanoid 45:74bf1fe021e5 4415 // MAX40108p2 hardware pin P2_7 button SW1 active low
whismanoid 45:74bf1fe021e5 4416 //........................................................12345678901234567890
whismanoid 45:74bf1fe021e5 4417 char onButton1_command_table_00[COMMAND_TABLE_COL_MAX] = "# SW1 event";
whismanoid 45:74bf1fe021e5 4418 char onButton1_command_table_01[COMMAND_TABLE_COL_MAX] = ">>SW1=LP1 deep sleep 10 sec";
whismanoid 45:74bf1fe021e5 4419 char onButton1_command_table_02[COMMAND_TABLE_COL_MAX] = "%H91"; // LED off
whismanoid 45:74bf1fe021e5 4420 char onButton1_command_table_03[COMMAND_TABLE_COL_MAX] = "%H92"; // LED off
whismanoid 45:74bf1fe021e5 4421 char onButton1_command_table_04[COMMAND_TABLE_COL_MAX] = "%H93"; // LED off
whismanoid 45:74bf1fe021e5 4422 char onButton1_command_table_05[COMMAND_TABLE_COL_MAX] = "%H9"; // diagnostic pulse D9
whismanoid 45:74bf1fe021e5 4423 char onButton1_command_table_06[COMMAND_TABLE_COL_MAX] = "LT count=10 base=1000 sleep=1";
whismanoid 45:74bf1fe021e5 4424 char onButton1_command_table_07[COMMAND_TABLE_COL_MAX] = "";
whismanoid 23:c6c652bef4b9 4425 char onButton1_command_table_08[COMMAND_TABLE_COL_MAX] = "";
whismanoid 23:c6c652bef4b9 4426 char onButton1_command_table_09[COMMAND_TABLE_COL_MAX] = "";
whismanoid 23:c6c652bef4b9 4427 static char* onButton1_command_table[COMMAND_TABLE_ROW_MAX] = {
whismanoid 23:c6c652bef4b9 4428 onButton1_command_table_00,
whismanoid 23:c6c652bef4b9 4429 onButton1_command_table_01,
whismanoid 23:c6c652bef4b9 4430 onButton1_command_table_02,
whismanoid 23:c6c652bef4b9 4431 onButton1_command_table_03,
whismanoid 23:c6c652bef4b9 4432 onButton1_command_table_04,
whismanoid 23:c6c652bef4b9 4433 onButton1_command_table_05,
whismanoid 23:c6c652bef4b9 4434 onButton1_command_table_06,
whismanoid 23:c6c652bef4b9 4435 onButton1_command_table_07,
whismanoid 23:c6c652bef4b9 4436 onButton1_command_table_08,
whismanoid 23:c6c652bef4b9 4437 onButton1_command_table_09,
whismanoid 23:c6c652bef4b9 4438 };
whismanoid 23:c6c652bef4b9 4439 #endif // HAS_BUTTON1_DEMO_INTERRUPT
whismanoid 23:c6c652bef4b9 4440 #if HAS_BUTTON2_DEMO_INTERRUPT
whismanoid 23:c6c652bef4b9 4441 // command_table: list of commands to perform on button press
whismanoid 45:74bf1fe021e5 4442 // onButton2_command_table[] supports command %B2! -- run, %B2@ -- edit
whismanoid 45:74bf1fe021e5 4443 // MAX40108p2 hardware pin P1_7 connector J91.3 active low
whismanoid 45:74bf1fe021e5 4444 //........................................................12345678901234567890
whismanoid 45:74bf1fe021e5 4445 char onButton2_command_table_00[COMMAND_TABLE_COL_MAX] = "# J91.3=Halt"; // remark
whismanoid 45:74bf1fe021e5 4446 char onButton2_command_table_01[COMMAND_TABLE_COL_MAX] = "%L91"; // LED on
whismanoid 45:74bf1fe021e5 4447 char onButton2_command_table_02[COMMAND_TABLE_COL_MAX] = "L"; // halts data logging
whismanoid 45:74bf1fe021e5 4448 char onButton2_command_table_03[COMMAND_TABLE_COL_MAX] = "%H92"; // LED off
whismanoid 45:74bf1fe021e5 4449 char onButton2_command_table_04[COMMAND_TABLE_COL_MAX] = "%L93"; // LED on
whismanoid 45:74bf1fe021e5 4450 char onButton2_command_table_05[COMMAND_TABLE_COL_MAX] = ">>J91.2=Halt"; // to DAPLINK comms
whismanoid 23:c6c652bef4b9 4451 char onButton2_command_table_06[COMMAND_TABLE_COL_MAX] = "";
whismanoid 23:c6c652bef4b9 4452 char onButton2_command_table_07[COMMAND_TABLE_COL_MAX] = "";
whismanoid 23:c6c652bef4b9 4453 char onButton2_command_table_08[COMMAND_TABLE_COL_MAX] = "";
whismanoid 23:c6c652bef4b9 4454 char onButton2_command_table_09[COMMAND_TABLE_COL_MAX] = "";
whismanoid 23:c6c652bef4b9 4455 static char* onButton2_command_table[COMMAND_TABLE_ROW_MAX] = {
whismanoid 23:c6c652bef4b9 4456 onButton2_command_table_00,
whismanoid 23:c6c652bef4b9 4457 onButton2_command_table_01,
whismanoid 23:c6c652bef4b9 4458 onButton2_command_table_02,
whismanoid 23:c6c652bef4b9 4459 onButton2_command_table_03,
whismanoid 23:c6c652bef4b9 4460 onButton2_command_table_04,
whismanoid 23:c6c652bef4b9 4461 onButton2_command_table_05,
whismanoid 23:c6c652bef4b9 4462 onButton2_command_table_06,
whismanoid 23:c6c652bef4b9 4463 onButton2_command_table_07,
whismanoid 23:c6c652bef4b9 4464 onButton2_command_table_08,
whismanoid 23:c6c652bef4b9 4465 onButton2_command_table_09,
whismanoid 23:c6c652bef4b9 4466 };
whismanoid 23:c6c652bef4b9 4467 #endif // HAS_BUTTON2_DEMO_INTERRUPT
whismanoid 24:032f3683cb2a 4468 #if HAS_BUTTON3_DEMO_INTERRUPT
whismanoid 24:032f3683cb2a 4469 // command_table: list of commands to perform on button press
whismanoid 45:74bf1fe021e5 4470 // onButton3_command_table[] supports command %B3! -- run, %B3@ -- edit
whismanoid 45:74bf1fe021e5 4471 // MAX40108p2 hardware pin P1_6 connector J91.2 active low
whismanoid 45:74bf1fe021e5 4472 //........................................................12345678901234567890
whismanoid 45:74bf1fe021e5 4473 char onButton3_command_table_00[COMMAND_TABLE_COL_MAX] = "# J91.2 event";
whismanoid 45:74bf1fe021e5 4474 char onButton3_command_table_01[COMMAND_TABLE_COL_MAX] = ">>J91.2 event";
whismanoid 45:74bf1fe021e5 4475 char onButton3_command_table_02[COMMAND_TABLE_COL_MAX] = "%L91";
whismanoid 45:74bf1fe021e5 4476 char onButton3_command_table_03[COMMAND_TABLE_COL_MAX] = "%H92";
whismanoid 45:74bf1fe021e5 4477 char onButton3_command_table_04[COMMAND_TABLE_COL_MAX] = "%L93";
whismanoid 45:74bf1fe021e5 4478 char onButton3_command_table_05[COMMAND_TABLE_COL_MAX] = "%H91";
whismanoid 45:74bf1fe021e5 4479 char onButton3_command_table_06[COMMAND_TABLE_COL_MAX] = "%L92";
whismanoid 45:74bf1fe021e5 4480 char onButton3_command_table_07[COMMAND_TABLE_COL_MAX] = "%H93";
whismanoid 45:74bf1fe021e5 4481 char onButton3_command_table_08[COMMAND_TABLE_COL_MAX] = ">>LR -- run full speed";
whismanoid 45:74bf1fe021e5 4482 char onButton3_command_table_09[COMMAND_TABLE_COL_MAX] = "LR";
whismanoid 24:032f3683cb2a 4483 static char* onButton3_command_table[COMMAND_TABLE_ROW_MAX] = {
whismanoid 24:032f3683cb2a 4484 onButton3_command_table_00,
whismanoid 24:032f3683cb2a 4485 onButton3_command_table_01,
whismanoid 24:032f3683cb2a 4486 onButton3_command_table_02,
whismanoid 24:032f3683cb2a 4487 onButton3_command_table_03,
whismanoid 24:032f3683cb2a 4488 onButton3_command_table_04,
whismanoid 24:032f3683cb2a 4489 onButton3_command_table_05,
whismanoid 24:032f3683cb2a 4490 onButton3_command_table_06,
whismanoid 24:032f3683cb2a 4491 onButton3_command_table_07,
whismanoid 24:032f3683cb2a 4492 onButton3_command_table_08,
whismanoid 24:032f3683cb2a 4493 onButton3_command_table_09,
whismanoid 24:032f3683cb2a 4494 };
whismanoid 24:032f3683cb2a 4495 #endif // HAS_BUTTON3_DEMO_INTERRUPT
whismanoid 29:6a9edb6e973b 4496 #if HAS_BUTTON4_DEMO_INTERRUPT
whismanoid 29:6a9edb6e973b 4497 // command_table: list of commands to perform on button press
whismanoid 45:74bf1fe021e5 4498 // onButton4_command_table[] supports command %B4! -- run, %B4@ -- edit
whismanoid 45:74bf1fe021e5 4499 // no hardware pin available, but useful for containing "# remark" labels for action table
whismanoid 45:74bf1fe021e5 4500 //........................................................12345678901234567890
whismanoid 29:6a9edb6e973b 4501 char onButton4_command_table_00[COMMAND_TABLE_COL_MAX] = "# Button4 event";
whismanoid 30:07197a430869 4502 char onButton4_command_table_01[COMMAND_TABLE_COL_MAX] = "# WE>0.7:active";
whismanoid 29:6a9edb6e973b 4503 char onButton4_command_table_02[COMMAND_TABLE_COL_MAX] = "";
whismanoid 29:6a9edb6e973b 4504 char onButton4_command_table_03[COMMAND_TABLE_COL_MAX] = "";
whismanoid 29:6a9edb6e973b 4505 char onButton4_command_table_04[COMMAND_TABLE_COL_MAX] = "";
whismanoid 29:6a9edb6e973b 4506 char onButton4_command_table_05[COMMAND_TABLE_COL_MAX] = "";
whismanoid 29:6a9edb6e973b 4507 char onButton4_command_table_06[COMMAND_TABLE_COL_MAX] = "";
whismanoid 29:6a9edb6e973b 4508 char onButton4_command_table_07[COMMAND_TABLE_COL_MAX] = "";
whismanoid 29:6a9edb6e973b 4509 char onButton4_command_table_08[COMMAND_TABLE_COL_MAX] = "";
whismanoid 29:6a9edb6e973b 4510 char onButton4_command_table_09[COMMAND_TABLE_COL_MAX] = "";
whismanoid 29:6a9edb6e973b 4511 static char* onButton4_command_table[COMMAND_TABLE_ROW_MAX] = {
whismanoid 29:6a9edb6e973b 4512 onButton4_command_table_00,
whismanoid 29:6a9edb6e973b 4513 onButton4_command_table_01,
whismanoid 29:6a9edb6e973b 4514 onButton4_command_table_02,
whismanoid 29:6a9edb6e973b 4515 onButton4_command_table_03,
whismanoid 29:6a9edb6e973b 4516 onButton4_command_table_04,
whismanoid 29:6a9edb6e973b 4517 onButton4_command_table_05,
whismanoid 29:6a9edb6e973b 4518 onButton4_command_table_06,
whismanoid 29:6a9edb6e973b 4519 onButton4_command_table_07,
whismanoid 29:6a9edb6e973b 4520 onButton4_command_table_08,
whismanoid 29:6a9edb6e973b 4521 onButton4_command_table_09,
whismanoid 29:6a9edb6e973b 4522 };
whismanoid 29:6a9edb6e973b 4523 #endif // HAS_BUTTON4_DEMO_INTERRUPT
whismanoid 29:6a9edb6e973b 4524 #if HAS_BUTTON5_DEMO_INTERRUPT
whismanoid 29:6a9edb6e973b 4525 // command_table: list of commands to perform on button press
whismanoid 45:74bf1fe021e5 4526 // onButton5_command_table[] supports command %B5! -- run, %B5@ -- edit
whismanoid 45:74bf1fe021e5 4527 // no hardware pin available, but useful for containing "# remark" labels for action table
whismanoid 45:74bf1fe021e5 4528 //........................................................12345678901234567890
whismanoid 29:6a9edb6e973b 4529 char onButton5_command_table_00[COMMAND_TABLE_COL_MAX] = "# Button5 event";
whismanoid 30:07197a430869 4530 char onButton5_command_table_01[COMMAND_TABLE_COL_MAX] = "# WE<0.6:sleep";
whismanoid 29:6a9edb6e973b 4531 char onButton5_command_table_02[COMMAND_TABLE_COL_MAX] = "";
whismanoid 29:6a9edb6e973b 4532 char onButton5_command_table_03[COMMAND_TABLE_COL_MAX] = "";
whismanoid 29:6a9edb6e973b 4533 char onButton5_command_table_04[COMMAND_TABLE_COL_MAX] = "";
whismanoid 29:6a9edb6e973b 4534 char onButton5_command_table_05[COMMAND_TABLE_COL_MAX] = "";
whismanoid 29:6a9edb6e973b 4535 char onButton5_command_table_06[COMMAND_TABLE_COL_MAX] = "";
whismanoid 29:6a9edb6e973b 4536 char onButton5_command_table_07[COMMAND_TABLE_COL_MAX] = "";
whismanoid 29:6a9edb6e973b 4537 char onButton5_command_table_08[COMMAND_TABLE_COL_MAX] = "";
whismanoid 29:6a9edb6e973b 4538 char onButton5_command_table_09[COMMAND_TABLE_COL_MAX] = "";
whismanoid 29:6a9edb6e973b 4539 static char* onButton5_command_table[COMMAND_TABLE_ROW_MAX] = {
whismanoid 29:6a9edb6e973b 4540 onButton5_command_table_00,
whismanoid 29:6a9edb6e973b 4541 onButton5_command_table_01,
whismanoid 29:6a9edb6e973b 4542 onButton5_command_table_02,
whismanoid 29:6a9edb6e973b 4543 onButton5_command_table_03,
whismanoid 29:6a9edb6e973b 4544 onButton5_command_table_04,
whismanoid 29:6a9edb6e973b 4545 onButton5_command_table_05,
whismanoid 29:6a9edb6e973b 4546 onButton5_command_table_06,
whismanoid 29:6a9edb6e973b 4547 onButton5_command_table_07,
whismanoid 29:6a9edb6e973b 4548 onButton5_command_table_08,
whismanoid 29:6a9edb6e973b 4549 onButton5_command_table_09,
whismanoid 29:6a9edb6e973b 4550 };
whismanoid 29:6a9edb6e973b 4551 #endif // HAS_BUTTON5_DEMO_INTERRUPT
whismanoid 29:6a9edb6e973b 4552 #if HAS_BUTTON6_DEMO_INTERRUPT
whismanoid 29:6a9edb6e973b 4553 // command_table: list of commands to perform on button press
whismanoid 45:74bf1fe021e5 4554 // onButton6_command_table[] supports command %B6! -- run, %B6@ -- edit
whismanoid 45:74bf1fe021e5 4555 // no hardware pin available, but useful for containing "# remark" labels for action table
whismanoid 45:74bf1fe021e5 4556 //........................................................12345678901234567890
whismanoid 29:6a9edb6e973b 4557 char onButton6_command_table_00[COMMAND_TABLE_COL_MAX] = "# Button6 event";
whismanoid 29:6a9edb6e973b 4558 char onButton6_command_table_01[COMMAND_TABLE_COL_MAX] = "";
whismanoid 29:6a9edb6e973b 4559 char onButton6_command_table_02[COMMAND_TABLE_COL_MAX] = "";
whismanoid 29:6a9edb6e973b 4560 char onButton6_command_table_03[COMMAND_TABLE_COL_MAX] = "";
whismanoid 29:6a9edb6e973b 4561 char onButton6_command_table_04[COMMAND_TABLE_COL_MAX] = "";
whismanoid 29:6a9edb6e973b 4562 char onButton6_command_table_05[COMMAND_TABLE_COL_MAX] = "";
whismanoid 29:6a9edb6e973b 4563 char onButton6_command_table_06[COMMAND_TABLE_COL_MAX] = "";
whismanoid 29:6a9edb6e973b 4564 char onButton6_command_table_07[COMMAND_TABLE_COL_MAX] = "";
whismanoid 29:6a9edb6e973b 4565 char onButton6_command_table_08[COMMAND_TABLE_COL_MAX] = "";
whismanoid 29:6a9edb6e973b 4566 char onButton6_command_table_09[COMMAND_TABLE_COL_MAX] = "";
whismanoid 29:6a9edb6e973b 4567 static char* onButton6_command_table[COMMAND_TABLE_ROW_MAX] = {
whismanoid 29:6a9edb6e973b 4568 onButton6_command_table_00,
whismanoid 29:6a9edb6e973b 4569 onButton6_command_table_01,
whismanoid 29:6a9edb6e973b 4570 onButton6_command_table_02,
whismanoid 29:6a9edb6e973b 4571 onButton6_command_table_03,
whismanoid 29:6a9edb6e973b 4572 onButton6_command_table_04,
whismanoid 29:6a9edb6e973b 4573 onButton6_command_table_05,
whismanoid 29:6a9edb6e973b 4574 onButton6_command_table_06,
whismanoid 29:6a9edb6e973b 4575 onButton6_command_table_07,
whismanoid 29:6a9edb6e973b 4576 onButton6_command_table_08,
whismanoid 29:6a9edb6e973b 4577 onButton6_command_table_09,
whismanoid 29:6a9edb6e973b 4578 };
whismanoid 29:6a9edb6e973b 4579 #endif // HAS_BUTTON6_DEMO_INTERRUPT
whismanoid 29:6a9edb6e973b 4580 #if HAS_BUTTON7_DEMO_INTERRUPT
whismanoid 29:6a9edb6e973b 4581 // command_table: list of commands to perform on button press
whismanoid 45:74bf1fe021e5 4582 // onButton7_command_table[] supports command %B7! -- run, %B7@ -- edit
whismanoid 45:74bf1fe021e5 4583 // no hardware pin available, but useful for containing "# remark" labels for action table
whismanoid 45:74bf1fe021e5 4584 //........................................................12345678901234567890
whismanoid 29:6a9edb6e973b 4585 char onButton7_command_table_00[COMMAND_TABLE_COL_MAX] = "# Button7 event";
whismanoid 29:6a9edb6e973b 4586 char onButton7_command_table_01[COMMAND_TABLE_COL_MAX] = "";
whismanoid 29:6a9edb6e973b 4587 char onButton7_command_table_02[COMMAND_TABLE_COL_MAX] = "";
whismanoid 29:6a9edb6e973b 4588 char onButton7_command_table_03[COMMAND_TABLE_COL_MAX] = "";
whismanoid 29:6a9edb6e973b 4589 char onButton7_command_table_04[COMMAND_TABLE_COL_MAX] = "";
whismanoid 29:6a9edb6e973b 4590 char onButton7_command_table_05[COMMAND_TABLE_COL_MAX] = "";
whismanoid 29:6a9edb6e973b 4591 char onButton7_command_table_06[COMMAND_TABLE_COL_MAX] = "";
whismanoid 29:6a9edb6e973b 4592 char onButton7_command_table_07[COMMAND_TABLE_COL_MAX] = "";
whismanoid 29:6a9edb6e973b 4593 char onButton7_command_table_08[COMMAND_TABLE_COL_MAX] = "";
whismanoid 29:6a9edb6e973b 4594 char onButton7_command_table_09[COMMAND_TABLE_COL_MAX] = "";
whismanoid 29:6a9edb6e973b 4595 static char* onButton7_command_table[COMMAND_TABLE_ROW_MAX] = {
whismanoid 29:6a9edb6e973b 4596 onButton7_command_table_00,
whismanoid 29:6a9edb6e973b 4597 onButton7_command_table_01,
whismanoid 29:6a9edb6e973b 4598 onButton7_command_table_02,
whismanoid 29:6a9edb6e973b 4599 onButton7_command_table_03,
whismanoid 29:6a9edb6e973b 4600 onButton7_command_table_04,
whismanoid 29:6a9edb6e973b 4601 onButton7_command_table_05,
whismanoid 29:6a9edb6e973b 4602 onButton7_command_table_06,
whismanoid 29:6a9edb6e973b 4603 onButton7_command_table_07,
whismanoid 29:6a9edb6e973b 4604 onButton7_command_table_08,
whismanoid 29:6a9edb6e973b 4605 onButton7_command_table_09,
whismanoid 29:6a9edb6e973b 4606 };
whismanoid 29:6a9edb6e973b 4607 #endif // HAS_BUTTON7_DEMO_INTERRUPT
whismanoid 29:6a9edb6e973b 4608 #if HAS_BUTTON8_DEMO_INTERRUPT
whismanoid 29:6a9edb6e973b 4609 // command_table: list of commands to perform on button press
whismanoid 45:74bf1fe021e5 4610 // onButton8_command_table[] supports command %B8! -- run, %B8@ -- edit
whismanoid 45:74bf1fe021e5 4611 // no hardware pin available, but useful for containing "# remark" labels for action table
whismanoid 45:74bf1fe021e5 4612 //........................................................12345678901234567890
whismanoid 29:6a9edb6e973b 4613 char onButton8_command_table_00[COMMAND_TABLE_COL_MAX] = "# Button8 event";
whismanoid 29:6a9edb6e973b 4614 char onButton8_command_table_01[COMMAND_TABLE_COL_MAX] = "";
whismanoid 29:6a9edb6e973b 4615 char onButton8_command_table_02[COMMAND_TABLE_COL_MAX] = "";
whismanoid 29:6a9edb6e973b 4616 char onButton8_command_table_03[COMMAND_TABLE_COL_MAX] = "";
whismanoid 29:6a9edb6e973b 4617 char onButton8_command_table_04[COMMAND_TABLE_COL_MAX] = "";
whismanoid 29:6a9edb6e973b 4618 char onButton8_command_table_05[COMMAND_TABLE_COL_MAX] = "";
whismanoid 29:6a9edb6e973b 4619 char onButton8_command_table_06[COMMAND_TABLE_COL_MAX] = "";
whismanoid 29:6a9edb6e973b 4620 char onButton8_command_table_07[COMMAND_TABLE_COL_MAX] = "";
whismanoid 29:6a9edb6e973b 4621 char onButton8_command_table_08[COMMAND_TABLE_COL_MAX] = "";
whismanoid 29:6a9edb6e973b 4622 char onButton8_command_table_09[COMMAND_TABLE_COL_MAX] = "";
whismanoid 29:6a9edb6e973b 4623 static char* onButton8_command_table[COMMAND_TABLE_ROW_MAX] = {
whismanoid 29:6a9edb6e973b 4624 onButton8_command_table_00,
whismanoid 29:6a9edb6e973b 4625 onButton8_command_table_01,
whismanoid 29:6a9edb6e973b 4626 onButton8_command_table_02,
whismanoid 29:6a9edb6e973b 4627 onButton8_command_table_03,
whismanoid 29:6a9edb6e973b 4628 onButton8_command_table_04,
whismanoid 29:6a9edb6e973b 4629 onButton8_command_table_05,
whismanoid 29:6a9edb6e973b 4630 onButton8_command_table_06,
whismanoid 29:6a9edb6e973b 4631 onButton8_command_table_07,
whismanoid 29:6a9edb6e973b 4632 onButton8_command_table_08,
whismanoid 29:6a9edb6e973b 4633 onButton8_command_table_09,
whismanoid 29:6a9edb6e973b 4634 };
whismanoid 29:6a9edb6e973b 4635 #endif // HAS_BUTTON8_DEMO_INTERRUPT
whismanoid 29:6a9edb6e973b 4636 #if HAS_BUTTON9_DEMO_INTERRUPT
whismanoid 29:6a9edb6e973b 4637 // command_table: list of commands to perform on button press
whismanoid 45:74bf1fe021e5 4638 // onButton9_command_table[] supports command %B9! -- run, %B9@ -- edit
whismanoid 45:74bf1fe021e5 4639 // no hardware pin available, but useful for containing "# remark" labels for action table
whismanoid 45:74bf1fe021e5 4640 //........................................................12345678901234567890
whismanoid 29:6a9edb6e973b 4641 char onButton9_command_table_00[COMMAND_TABLE_COL_MAX] = "# Button9 event";
whismanoid 29:6a9edb6e973b 4642 char onButton9_command_table_01[COMMAND_TABLE_COL_MAX] = "";
whismanoid 29:6a9edb6e973b 4643 char onButton9_command_table_02[COMMAND_TABLE_COL_MAX] = "";
whismanoid 29:6a9edb6e973b 4644 char onButton9_command_table_03[COMMAND_TABLE_COL_MAX] = "";
whismanoid 29:6a9edb6e973b 4645 char onButton9_command_table_04[COMMAND_TABLE_COL_MAX] = "";
whismanoid 29:6a9edb6e973b 4646 char onButton9_command_table_05[COMMAND_TABLE_COL_MAX] = "";
whismanoid 29:6a9edb6e973b 4647 char onButton9_command_table_06[COMMAND_TABLE_COL_MAX] = "";
whismanoid 29:6a9edb6e973b 4648 char onButton9_command_table_07[COMMAND_TABLE_COL_MAX] = "";
whismanoid 29:6a9edb6e973b 4649 char onButton9_command_table_08[COMMAND_TABLE_COL_MAX] = "";
whismanoid 29:6a9edb6e973b 4650 char onButton9_command_table_09[COMMAND_TABLE_COL_MAX] = "";
whismanoid 29:6a9edb6e973b 4651 static char* onButton9_command_table[COMMAND_TABLE_ROW_MAX] = {
whismanoid 29:6a9edb6e973b 4652 onButton9_command_table_00,
whismanoid 29:6a9edb6e973b 4653 onButton9_command_table_01,
whismanoid 29:6a9edb6e973b 4654 onButton9_command_table_02,
whismanoid 29:6a9edb6e973b 4655 onButton9_command_table_03,
whismanoid 29:6a9edb6e973b 4656 onButton9_command_table_04,
whismanoid 29:6a9edb6e973b 4657 onButton9_command_table_05,
whismanoid 29:6a9edb6e973b 4658 onButton9_command_table_06,
whismanoid 29:6a9edb6e973b 4659 onButton9_command_table_07,
whismanoid 29:6a9edb6e973b 4660 onButton9_command_table_08,
whismanoid 29:6a9edb6e973b 4661 onButton9_command_table_09,
whismanoid 29:6a9edb6e973b 4662 };
whismanoid 29:6a9edb6e973b 4663 #endif // HAS_BUTTON9_DEMO_INTERRUPT
whismanoid 23:c6c652bef4b9 4664 #endif // USE_DATALOGGER_CommandTable
whismanoid 23:c6c652bef4b9 4665 //--------------------------------------------------
whismanoid 23:c6c652bef4b9 4666 #if USE_DATALOGGER_CommandTable
whismanoid 31:47eee7e0cc2d 4667 // TODO: avoid excess console noise when a Button event happens during datalogging -- quiet inside Run_command_table()
whismanoid 31:47eee7e0cc2d 4668 bool g_Run_command_table_running = false;
whismanoid 23:c6c652bef4b9 4669 void Run_command_table(char* command_table[])
whismanoid 23:c6c652bef4b9 4670 {
whismanoid 23:c6c652bef4b9 4671 // command_table: perform list of commands
whismanoid 31:47eee7e0cc2d 4672 // TODO: avoid excess console noise when a Button event happens during datalogging -- quiet inside Run_command_table()
whismanoid 31:47eee7e0cc2d 4673 if (g_Run_command_table_running) {
whismanoid 31:47eee7e0cc2d 4674 // TODO: button event chaining is not supported at this time
whismanoid 31:47eee7e0cc2d 4675 } // if (g_Run_command_table_running)
whismanoid 31:47eee7e0cc2d 4676 // TODO: avoid excess console noise when a Button event happens during datalogging -- quiet inside Run_command_table()
whismanoid 31:47eee7e0cc2d 4677 g_Run_command_table_running = true;
whismanoid 23:c6c652bef4b9 4678 for (int lineIndex = 0; lineIndex < COMMAND_TABLE_ROW_MAX; lineIndex++) {
whismanoid 23:c6c652bef4b9 4679 if (command_table[lineIndex] == NULL) { break; }
whismanoid 23:c6c652bef4b9 4680 if (command_table[lineIndex][0] == '\0') { break; }
whismanoid 23:c6c652bef4b9 4681 cmdLine.clear();
whismanoid 31:47eee7e0cc2d 4682 cmdLine.quiet = g_Run_command_table_running;
whismanoid 23:c6c652bef4b9 4683 //~ char* strIndex = command_table[lineIndex];
whismanoid 23:c6c652bef4b9 4684 for (char* strIndex = command_table[lineIndex]; *strIndex != '\0'; strIndex++)
whismanoid 23:c6c652bef4b9 4685 {
whismanoid 23:c6c652bef4b9 4686 cmdLine.append(*strIndex);
whismanoid 23:c6c652bef4b9 4687 }
whismanoid 23:c6c652bef4b9 4688 cmdLine.append('\r'); // append \r invokes onEOLcommandParser to handle command
whismanoid 23:c6c652bef4b9 4689 }
whismanoid 31:47eee7e0cc2d 4690 // TODO: avoid excess console noise when a Button event happens during datalogging -- quiet inside Run_command_table()
whismanoid 31:47eee7e0cc2d 4691 g_Run_command_table_running = false;
whismanoid 31:47eee7e0cc2d 4692 cmdLine.quiet = g_Run_command_table_running;
whismanoid 23:c6c652bef4b9 4693 }
whismanoid 23:c6c652bef4b9 4694 #endif // USE_DATALOGGER_CommandTable
whismanoid 23:c6c652bef4b9 4695 //--------------------------------------------------
whismanoid 21:ac062a97a71d 4696 // When user presses button BUTTON1, perform actions
whismanoid 21:ac062a97a71d 4697 #if HAS_BUTTON1_DEMO_INTERRUPT
whismanoid 21:ac062a97a71d 4698 void onButton1FallingEdge(void)
whismanoid 21:ac062a97a71d 4699 {
whismanoid 21:ac062a97a71d 4700 //~ void SelfTest(CmdLine & cmdLine);
whismanoid 21:ac062a97a71d 4701 //~ SelfTest(cmdLine_serial);
whismanoid 22:d6dc8a85f435 4702 //
whismanoid 23:c6c652bef4b9 4703 #if USE_DATALOGGER_CommandTable // Run_command_table(onButton1_command_table)
whismanoid 22:d6dc8a85f435 4704 // command_table: list of commands to perform on button press
whismanoid 22:d6dc8a85f435 4705 // command_table: perform list of commands
whismanoid 23:c6c652bef4b9 4706 Run_command_table(onButton1_command_table);
whismanoid 23:c6c652bef4b9 4707 #endif // USE_DATALOGGER_CommandTable
whismanoid 21:ac062a97a71d 4708 }
whismanoid 21:ac062a97a71d 4709 #endif // HAS_BUTTON1_DEMO_INTERRUPT
whismanoid 21:ac062a97a71d 4710
whismanoid 21:ac062a97a71d 4711 //--------------------------------------------------
whismanoid 21:ac062a97a71d 4712 // When user presses button BUTTON2, perform actions
whismanoid 21:ac062a97a71d 4713 #if HAS_BUTTON2_DEMO_INTERRUPT
whismanoid 21:ac062a97a71d 4714 void onButton2FallingEdge(void)
whismanoid 21:ac062a97a71d 4715 {
whismanoid 21:ac062a97a71d 4716 // TBD demo configuration
whismanoid 21:ac062a97a71d 4717 // TODO diagnostic LED
whismanoid 21:ac062a97a71d 4718 // led1 = LED_OFF; led2 = LED_OFF; led3 = LED_ON; // diagnostic rbg led BLUE
whismanoid 22:d6dc8a85f435 4719 //
whismanoid 23:c6c652bef4b9 4720 #if USE_DATALOGGER_CommandTable // Run_command_table(onButton1_command_table)
whismanoid 22:d6dc8a85f435 4721 // command_table: list of commands to perform on button press
whismanoid 22:d6dc8a85f435 4722 // command_table: perform list of commands
whismanoid 23:c6c652bef4b9 4723 Run_command_table(onButton2_command_table);
whismanoid 23:c6c652bef4b9 4724 #endif // USE_DATALOGGER_CommandTable
whismanoid 21:ac062a97a71d 4725 }
whismanoid 21:ac062a97a71d 4726 #endif // HAS_BUTTON2_DEMO_INTERRUPT
whismanoid 21:ac062a97a71d 4727
whismanoid 24:032f3683cb2a 4728 //--------------------------------------------------
whismanoid 29:6a9edb6e973b 4729 // When user presses button BUTTON3, perform actions
whismanoid 24:032f3683cb2a 4730 #if HAS_BUTTON3_DEMO_INTERRUPT
whismanoid 24:032f3683cb2a 4731 void onButton3FallingEdge(void)
whismanoid 24:032f3683cb2a 4732 {
whismanoid 24:032f3683cb2a 4733 #if USE_DATALOGGER_CommandTable // Run_command_table(onButton1_command_table)
whismanoid 24:032f3683cb2a 4734 // command_table: list of commands to perform on button press
whismanoid 24:032f3683cb2a 4735 // command_table: perform list of commands
whismanoid 24:032f3683cb2a 4736 Run_command_table(onButton3_command_table);
whismanoid 24:032f3683cb2a 4737 #endif // USE_DATALOGGER_CommandTable
whismanoid 24:032f3683cb2a 4738 }
whismanoid 24:032f3683cb2a 4739 #endif // HAS_BUTTON3_DEMO_INTERRUPT
whismanoid 29:6a9edb6e973b 4740 #if HAS_BUTTON4_DEMO_INTERRUPT
whismanoid 29:6a9edb6e973b 4741 void onButton4FallingEdge(void)
whismanoid 29:6a9edb6e973b 4742 {
whismanoid 29:6a9edb6e973b 4743 #if USE_DATALOGGER_CommandTable
whismanoid 29:6a9edb6e973b 4744 Run_command_table(onButton4_command_table);
whismanoid 29:6a9edb6e973b 4745 #endif // USE_DATALOGGER_CommandTable
whismanoid 29:6a9edb6e973b 4746 }
whismanoid 29:6a9edb6e973b 4747 #endif // HAS_BUTTON4_DEMO_INTERRUPT
whismanoid 29:6a9edb6e973b 4748 #if HAS_BUTTON5_DEMO_INTERRUPT
whismanoid 29:6a9edb6e973b 4749 void onButton5FallingEdge(void)
whismanoid 29:6a9edb6e973b 4750 {
whismanoid 29:6a9edb6e973b 4751 #if USE_DATALOGGER_CommandTable
whismanoid 29:6a9edb6e973b 4752 Run_command_table(onButton5_command_table);
whismanoid 29:6a9edb6e973b 4753 #endif // USE_DATALOGGER_CommandTable
whismanoid 29:6a9edb6e973b 4754 }
whismanoid 29:6a9edb6e973b 4755 #endif // HAS_BUTTON5_DEMO_INTERRUPT
whismanoid 29:6a9edb6e973b 4756 #if HAS_BUTTON6_DEMO_INTERRUPT
whismanoid 29:6a9edb6e973b 4757 void onButton6FallingEdge(void)
whismanoid 29:6a9edb6e973b 4758 {
whismanoid 29:6a9edb6e973b 4759 #if USE_DATALOGGER_CommandTable
whismanoid 29:6a9edb6e973b 4760 Run_command_table(onButton6_command_table);
whismanoid 29:6a9edb6e973b 4761 #endif // USE_DATALOGGER_CommandTable
whismanoid 29:6a9edb6e973b 4762 }
whismanoid 29:6a9edb6e973b 4763 #endif // HAS_BUTTON6_DEMO_INTERRUPT
whismanoid 29:6a9edb6e973b 4764 #if HAS_BUTTON7_DEMO_INTERRUPT
whismanoid 29:6a9edb6e973b 4765 void onButton7FallingEdge(void)
whismanoid 29:6a9edb6e973b 4766 {
whismanoid 29:6a9edb6e973b 4767 #if USE_DATALOGGER_CommandTable
whismanoid 29:6a9edb6e973b 4768 Run_command_table(onButton7_command_table);
whismanoid 29:6a9edb6e973b 4769 #endif // USE_DATALOGGER_CommandTable
whismanoid 29:6a9edb6e973b 4770 }
whismanoid 29:6a9edb6e973b 4771 #endif // HAS_BUTTON7_DEMO_INTERRUPT
whismanoid 29:6a9edb6e973b 4772 #if HAS_BUTTON8_DEMO_INTERRUPT
whismanoid 29:6a9edb6e973b 4773 void onButton8FallingEdge(void)
whismanoid 29:6a9edb6e973b 4774 {
whismanoid 29:6a9edb6e973b 4775 #if USE_DATALOGGER_CommandTable
whismanoid 29:6a9edb6e973b 4776 Run_command_table(onButton8_command_table);
whismanoid 29:6a9edb6e973b 4777 #endif // USE_DATALOGGER_CommandTable
whismanoid 29:6a9edb6e973b 4778 }
whismanoid 29:6a9edb6e973b 4779 #endif // HAS_BUTTON8_DEMO_INTERRUPT
whismanoid 29:6a9edb6e973b 4780 #if HAS_BUTTON9_DEMO_INTERRUPT
whismanoid 29:6a9edb6e973b 4781 void onButton9FallingEdge(void)
whismanoid 29:6a9edb6e973b 4782 {
whismanoid 29:6a9edb6e973b 4783 #if USE_DATALOGGER_CommandTable
whismanoid 29:6a9edb6e973b 4784 Run_command_table(onButton9_command_table);
whismanoid 29:6a9edb6e973b 4785 #endif // USE_DATALOGGER_CommandTable
whismanoid 29:6a9edb6e973b 4786 }
whismanoid 29:6a9edb6e973b 4787 #endif // HAS_BUTTON9_DEMO_INTERRUPT
whismanoid 24:032f3683cb2a 4788
whismanoid 4:d9b05924ad4c 4789 #if USE_CMDLINE_MENUS // support CmdLine command menus
whismanoid 4:d9b05924ad4c 4790 //--------------------------------------------------
whismanoid 4:d9b05924ad4c 4791 inline void print_command_prompt()
whismanoid 4:d9b05924ad4c 4792 {
whismanoid 4:d9b05924ad4c 4793 //~ Serial.println(F(">"));
whismanoid 4:d9b05924ad4c 4794 cmdLine.serial().printf("\r\n> ");
whismanoid 4:d9b05924ad4c 4795 }
whismanoid 4:d9b05924ad4c 4796 #endif // USE_CMDLINE_MENUS support CmdLine command menus
whismanoid 4:d9b05924ad4c 4797
whismanoid 4:d9b05924ad4c 4798 #if USE_CMDLINE_MENUS // support CmdLine command menus
whismanoid 4:d9b05924ad4c 4799 //--------------------------------------------------
whismanoid 4:d9b05924ad4c 4800 void main_menu_status(CmdLine & cmdLine)
whismanoid 4:d9b05924ad4c 4801 {
whismanoid 4:d9b05924ad4c 4802 cmdLine.serial().printf("\r\nMain menu");
whismanoid 4:d9b05924ad4c 4803 #if APPLICATION_MAX5715 // main_menu_status banner
whismanoid 4:d9b05924ad4c 4804 cmdLine.serial().printf(" MAX5715 12-bit 4-ch SPI VOUT DAC");
whismanoid 4:d9b05924ad4c 4805 #elif APPLICATION_MAX11131 // main_menu_status banner
whismanoid 4:d9b05924ad4c 4806 cmdLine.serial().printf(" MAX11131 12-bit 3MSps 16-ch ADC");
whismanoid 4:d9b05924ad4c 4807 #elif APPLICATION_MAX5171 // main_menu_status banner
whismanoid 4:d9b05924ad4c 4808 cmdLine.serial().printf(" MAX5171 14-bit Force/Sense VOUT DAC");
whismanoid 4:d9b05924ad4c 4809 #elif APPLICATION_MAX11410 // main_menu_status banner
whismanoid 4:d9b05924ad4c 4810 cmdLine.serial().printf(" MAX11410 24-bit 1.9ksps Delta-Sigma ADC");
whismanoid 4:d9b05924ad4c 4811 #elif APPLICATION_MAX12345 // main_menu_status banner
whismanoid 4:d9b05924ad4c 4812 cmdLine.serial().printf(" MAX12345");
whismanoid 16:819c5aaf5271 4813 #elif MAX40108_DEMO // main_menu_status banner
whismanoid 17:9397ea3ea7e9 4814 cmdLine.serial().printf(" MAX40108_U%d", MAX40108_DEMO);
whismanoid 36:e7aac874b8be 4815 #ifdef BOARD_SERIAL_NUMBER
whismanoid 36:e7aac874b8be 4816 // data unique to certain boards based on serial number
whismanoid 49:359a6b9df7c1 4817 cmdLine.serial().printf(" [s/n %ld]", g_board_serial_number);
whismanoid 36:e7aac874b8be 4818 #else // BOARD_SERIAL_NUMBER data unique to certain boards based on serial number
whismanoid 36:e7aac874b8be 4819 #warning "BOARD_SERIAL_NUMBER not defined; using default values"
whismanoid 36:e7aac874b8be 4820 //
whismanoid 36:e7aac874b8be 4821 #endif // BOARD_SERIAL_NUMBER data unique to certain boards based on serial number
whismanoid 37:3f369235e5bc 4822 #ifdef FW_REV
whismanoid 37:3f369235e5bc 4823 cmdLine.serial().printf(" [FW_REV %d]", FW_REV);
whismanoid 37:3f369235e5bc 4824 #endif // FW_REV
whismanoid 4:d9b05924ad4c 4825 #else
whismanoid 4:d9b05924ad4c 4826 //cmdLine.serial().printf(" ");
whismanoid 4:d9b05924ad4c 4827 #endif
whismanoid 4:d9b05924ad4c 4828 //cmdLine.serial().printf(" %s", TARGET_NAME);
whismanoid 4:d9b05924ad4c 4829 if (cmdLine.nameStr())
whismanoid 4:d9b05924ad4c 4830 {
whismanoid 4:d9b05924ad4c 4831 cmdLine.serial().printf(" [%s]", cmdLine.nameStr());
whismanoid 4:d9b05924ad4c 4832 }
whismanoid 4:d9b05924ad4c 4833 #if HAS_BUTTON1_DEMO_INTERRUPT
whismanoid 29:6a9edb6e973b 4834 cmdLine.serial().printf(" [Button1");
whismanoid 4:d9b05924ad4c 4835 #if HAS_BUTTON2_DEMO_INTERRUPT
whismanoid 29:6a9edb6e973b 4836 cmdLine.serial().printf("2");
whismanoid 24:032f3683cb2a 4837 #endif
whismanoid 24:032f3683cb2a 4838 #if HAS_BUTTON3_DEMO_INTERRUPT
whismanoid 29:6a9edb6e973b 4839 cmdLine.serial().printf("3");
whismanoid 29:6a9edb6e973b 4840 #endif
whismanoid 29:6a9edb6e973b 4841 #if HAS_BUTTON4_DEMO_INTERRUPT
whismanoid 29:6a9edb6e973b 4842 cmdLine.serial().printf("4");
whismanoid 29:6a9edb6e973b 4843 #endif
whismanoid 29:6a9edb6e973b 4844 #if HAS_BUTTON5_DEMO_INTERRUPT
whismanoid 29:6a9edb6e973b 4845 cmdLine.serial().printf("5");
whismanoid 29:6a9edb6e973b 4846 #endif
whismanoid 29:6a9edb6e973b 4847 #if HAS_BUTTON6_DEMO_INTERRUPT
whismanoid 29:6a9edb6e973b 4848 cmdLine.serial().printf("6");
whismanoid 29:6a9edb6e973b 4849 #endif
whismanoid 29:6a9edb6e973b 4850 #if HAS_BUTTON7_DEMO_INTERRUPT
whismanoid 29:6a9edb6e973b 4851 cmdLine.serial().printf("7");
whismanoid 29:6a9edb6e973b 4852 #endif
whismanoid 29:6a9edb6e973b 4853 #if HAS_BUTTON8_DEMO_INTERRUPT
whismanoid 29:6a9edb6e973b 4854 cmdLine.serial().printf("8");
whismanoid 29:6a9edb6e973b 4855 #endif
whismanoid 29:6a9edb6e973b 4856 #if HAS_BUTTON9_DEMO_INTERRUPT
whismanoid 29:6a9edb6e973b 4857 cmdLine.serial().printf("9");
whismanoid 29:6a9edb6e973b 4858 #endif
whismanoid 29:6a9edb6e973b 4859 cmdLine.serial().printf("]");
whismanoid 29:6a9edb6e973b 4860 #endif // HAS_BUTTON1_DEMO_INTERRUPT
whismanoid 4:d9b05924ad4c 4861 #if HAS_BUTTON1_DEMO
whismanoid 4:d9b05924ad4c 4862 // print BUTTON1 status
whismanoid 4:d9b05924ad4c 4863 cmdLine.serial().printf("\r\n BUTTON1 = %d", button1.read());
whismanoid 4:d9b05924ad4c 4864 #endif
whismanoid 4:d9b05924ad4c 4865 #if HAS_BUTTON2_DEMO
whismanoid 24:032f3683cb2a 4866 // print BUTTON2 status
whismanoid 4:d9b05924ad4c 4867 cmdLine.serial().printf("\r\n BUTTON2 = %d", button2.read());
whismanoid 4:d9b05924ad4c 4868 #endif
whismanoid 24:032f3683cb2a 4869 #if HAS_BUTTON3_DEMO
whismanoid 24:032f3683cb2a 4870 // print BUTTON3 status
whismanoid 24:032f3683cb2a 4871 cmdLine.serial().printf("\r\n BUTTON3 = %d", button3.read());
whismanoid 24:032f3683cb2a 4872 #endif
whismanoid 4:d9b05924ad4c 4873 cmdLine.serial().printf("\r\n ? -- help");
whismanoid 4:d9b05924ad4c 4874 }
whismanoid 4:d9b05924ad4c 4875 #endif // USE_CMDLINE_MENUS support CmdLine command menus
whismanoid 4:d9b05924ad4c 4876
whismanoid 28:a9a3a9db592b 4877 //--------------------------------------------------
whismanoid 28:a9a3a9db592b 4878 #ifndef USE_DATALOGGER_TRIGGER_HELP_BRIEF
whismanoid 28:a9a3a9db592b 4879 #define USE_DATALOGGER_TRIGGER_HELP_BRIEF 1
whismanoid 28:a9a3a9db592b 4880 //~ #undef USE_DATALOGGER_TRIGGER_HELP_BRIEF
whismanoid 28:a9a3a9db592b 4881 #endif // USE_DATALOGGER_TRIGGER_HELP_BRIEF
whismanoid 28:a9a3a9db592b 4882
whismanoid 4:d9b05924ad4c 4883 #if USE_CMDLINE_MENUS // support CmdLine command menus
whismanoid 4:d9b05924ad4c 4884 //--------------------------------------------------
whismanoid 4:d9b05924ad4c 4885 void main_menu_help(CmdLine & cmdLine)
whismanoid 4:d9b05924ad4c 4886 {
whismanoid 4:d9b05924ad4c 4887 // ? -- help
whismanoid 4:d9b05924ad4c 4888 //~ cmdLine.serial().printf("\r\nMenu:");
whismanoid 10:04022a61b527 4889 //
whismanoid 4:d9b05924ad4c 4890 cmdLine.serial().printf("\r\n # -- lines beginning with # are comments");
whismanoid 10:04022a61b527 4891 #if defined(SPI_ADC_DeviceName) // SPI connected ADC
whismanoid 10:04022a61b527 4892 cmdLine.serial().printf("\r\n ! -- Init");
whismanoid 10:04022a61b527 4893 #endif // defined(SPI_ADC_DeviceName) // SPI connected ADC
whismanoid 4:d9b05924ad4c 4894 #if USE_SELFTEST
whismanoid 4:d9b05924ad4c 4895 cmdLine.serial().printf("\r\n . -- SelfTest");
whismanoid 4:d9b05924ad4c 4896 #endif // USE_SELFTEST
whismanoid 9:45f98573eb6d 4897 #if USE_STAR_REG_READWRITE // * command read/write reg *reg? *reg=value
whismanoid 9:45f98573eb6d 4898 // CODE GENERATOR: help menu if has_register_write_command: *regname? -- read register; *regname=regvalue -- write register
whismanoid 9:45f98573eb6d 4899 cmdLine.serial().printf("\r\n * -- read core registers\r\n *regname? -- read register\r\n *regname=regvalue -- write register");
whismanoid 9:45f98573eb6d 4900 // cmdLine.serial().printf("\r\n 01 23 45 67 89 ab cd ef -- write and read raw hex codes");
whismanoid 10:04022a61b527 4901 #endif // USE_STAR_REG_READWRITE
whismanoid 10:04022a61b527 4902 //
whismanoid 10:04022a61b527 4903 #if USE_AUX_SERIAL_CMD_FORWARDING
whismanoid 10:04022a61b527 4904 // Command forwarding to Auxiliary serial port TX/RX #257 -- main_menu_help
whismanoid 10:04022a61b527 4905 //~ cmdLine.serial().printf("\r\n > -- auxiliary UART port");
whismanoid 10:04022a61b527 4906 // prefer cmdLine_AUXserial if available, else cmdLine_DAPLINKserial; else we don't have this feature
whismanoid 10:04022a61b527 4907 # if HAS_AUX_SERIAL
whismanoid 10:04022a61b527 4908 // Command forwarding to AUX serial TX/RX cmdLine_AUXserial #257
whismanoid 10:04022a61b527 4909 if (cmdLine_AUXserial.nameStr())
whismanoid 10:04022a61b527 4910 {
whismanoid 10:04022a61b527 4911 cmdLine.serial().printf("\r\n > -- auxiliary UART port [%s]", cmdLine_AUXserial.nameStr());
whismanoid 10:04022a61b527 4912 }
whismanoid 10:04022a61b527 4913 # elif HAS_DAPLINK_SERIAL
whismanoid 10:04022a61b527 4914 // Command forwarding to DAPLINK serial TX/RX cmdLine_DAPLINKserial #257
whismanoid 10:04022a61b527 4915 if (cmdLine_DAPLINKserial.nameStr())
whismanoid 10:04022a61b527 4916 {
whismanoid 10:04022a61b527 4917 cmdLine.serial().printf("\r\n > -- auxiliary UART port [%s]", cmdLine_DAPLINKserial.nameStr());
whismanoid 10:04022a61b527 4918 }
whismanoid 10:04022a61b527 4919 # endif // HAS_AUX_SERIAL HAS_DAPLINK_SERIAL
whismanoid 10:04022a61b527 4920 # if HAS_AUX_SERIAL || HAS_DAPLINK_SERIAL
whismanoid 10:04022a61b527 4921 // WIP Command forwarding to AUX serial TX/RX cmdLine_AUXserial #257
whismanoid 10:04022a61b527 4922 cmdLine.serial().printf("\r\n >xyzzy -- Forward command/data 'xyzzy' to aux TX/RX");
whismanoid 10:04022a61b527 4923 cmdLine.serial().printf("\r\n >>xyzzy -- Forward 'xyzzy' to aux TX/RX, no key=value parsing");
whismanoid 10:04022a61b527 4924 cmdLine.serial().printf("\r\n >>>xyzzy -- Forward '>xyzzy' to aux TX/RX, no key=value parsing");
whismanoid 10:04022a61b527 4925 #if 0
whismanoid 10:04022a61b527 4926 cmdLine.serial().printf("\r\n >tx_wait_echo=%d -- configure TX wait for each character echo", g_auxSerialCom_tx_wait_echo);
whismanoid 10:04022a61b527 4927 cmdLine.serial().printf("\r\n >tx_char_delay_ms=%d -- configure TX delay after each char", g_auxSerialCom_tx_char_delay_ms);
whismanoid 10:04022a61b527 4928 cmdLine.serial().printf("\r\n >tx_line_delay_ms=%d -- configure TX delay after each CR/LF", g_auxSerialCom_tx_line_delay_ms);
whismanoid 10:04022a61b527 4929 #endif
whismanoid 20:78ef670955d4 4930 #if 1 // HAS_AUX_SERIAL_HELP_BRIEF
whismanoid 20:78ef670955d4 4931 cmdLine.serial().printf("\r\n >baud=%d message_ms=%d rx_idle_ms=%d rx_max_count=%d rx_eot=%d",
whismanoid 20:78ef670955d4 4932 g_auxSerialCom_baud,
whismanoid 20:78ef670955d4 4933 g_auxSerialCom_message_ms,
whismanoid 20:78ef670955d4 4934 g_auxSerialCom_rx_idle_ms,
whismanoid 20:78ef670955d4 4935 g_auxSerialCom_rx_max_count,
whismanoid 20:78ef670955d4 4936 g_auxSerialCom_rx_eot);
whismanoid 20:78ef670955d4 4937 #else // HAS_AUX_SERIAL_HELP_BRIEF
whismanoid 20:78ef670955d4 4938 cmdLine.serial().printf("\r\n >baud=%d -- configure aux TX/RX port", g_auxSerialCom_baud);
whismanoid 10:04022a61b527 4939 cmdLine.serial().printf("\r\n >message_ms=%d -- maximum RX message total response time", g_auxSerialCom_message_ms);
whismanoid 10:04022a61b527 4940 cmdLine.serial().printf("\r\n >rx_idle_ms=%d -- maximum RX message idle time between characters", g_auxSerialCom_rx_idle_ms);
whismanoid 10:04022a61b527 4941 cmdLine.serial().printf("\r\n >rx_max_count=%d -- maximum RX message total length", g_auxSerialCom_rx_max_count);
whismanoid 10:04022a61b527 4942 cmdLine.serial().printf("\r\n >rx_eot=%d -- capture RX until match end of text char (unless %d)", g_auxSerialCom_rx_eot, aux_serial_cmd_forwarding_rx_eot_not_used);
whismanoid 20:78ef670955d4 4943 #endif // HAS_AUX_SERIAL_HELP_BRIEF
whismanoid 10:04022a61b527 4944 # endif // HAS_AUX_SERIAL
whismanoid 10:04022a61b527 4945 #endif // USE_AUX_SERIAL_CMD_FORWARDING
whismanoid 10:04022a61b527 4946 //
whismanoid 4:d9b05924ad4c 4947 #if USE_DATALOGGER_TRIGGER // support Datalog trigger
whismanoid 28:a9a3a9db592b 4948 #if USE_DATALOGGER_TRIGGER_HELP_BRIEF
whismanoid 28:a9a3a9db592b 4949 // Datalog trigger menu
whismanoid 28:a9a3a9db592b 4950 // brief toplevel heading for datalog help L
whismanoid 28:a9a3a9db592b 4951 // L -- detailed help for datalog commands
whismanoid 28:a9a3a9db592b 4952 cmdLine.serial().printf("\r\n L -- halt the datalogger; show more commands");
whismanoid 28:a9a3a9db592b 4953 // set Datalogger_Trigger to trigger_Halt or trigger_FreeRun
whismanoid 28:a9a3a9db592b 4954 // Datalogger_Trigger = trigger_Halt // halt the datalogger; continue accepting commands
whismanoid 28:a9a3a9db592b 4955 // cmdLine.serial().print(F("\r\n L -- halt the datalogger; continue accepting commands"));
whismanoid 28:a9a3a9db592b 4956 //
whismanoid 28:a9a3a9db592b 4957 // Datalogger_Trigger = trigger_FreeRun // free run as fast as possible "always-on mode"
whismanoid 28:a9a3a9db592b 4958 cmdLine.serial().printf("\r\n LR -- Datalog free run as fast as possible");
whismanoid 28:a9a3a9db592b 4959 //
whismanoid 39:4d285e961435 4960 #if USE_DATALOGGER_SLEEP // support sleep modes in Datalogger_Trigger
whismanoid 45:74bf1fe021e5 4961 // USE_DATALOGGER_SLEEP -- support sleep modes in Datalogger_Trigger
whismanoid 39:4d285e961435 4962 cmdLine.serial().printf("\r\n LT count=%d base=%dms sleep=%d -- Datalog timer",
whismanoid 39:4d285e961435 4963 g_timer_interval_count,
whismanoid 39:4d285e961435 4964 g_timer_interval_msec,
whismanoid 39:4d285e961435 4965 (int)g_timer_sleepmode
whismanoid 39:4d285e961435 4966 ); // trigger_Timer
whismanoid 39:4d285e961435 4967 #else // USE_DATALOGGER_SLEEP
whismanoid 28:a9a3a9db592b 4968 cmdLine.serial().printf("\r\n LT count=%d base=%dms -- Datalog timer", g_timer_interval_count, g_timer_interval_msec); // trigger_Timer
whismanoid 39:4d285e961435 4969 #endif // USE_DATALOGGER_SLEEP
whismanoid 28:a9a3a9db592b 4970 #if USE_DATALOGGER_ActionTable // Datalogger_RunActionTable() supported actions
whismanoid 28:a9a3a9db592b 4971 //~ cmdLine.serial().printf("\r\n L@ -- configures Datalogger_action_table; show more commands");
whismanoid 28:a9a3a9db592b 4972 #endif // USE_DATALOGGER_ActionTable Datalogger_RunActionTable() supported actions
whismanoid 28:a9a3a9db592b 4973 #else // USE_DATALOGGER_TRIGGER_HELP_BRIEF -----------------------------------------------
whismanoid 4:d9b05924ad4c 4974 // TODO Datalog trigger menu
whismanoid 4:d9b05924ad4c 4975 // set Datalogger_Trigger to trigger_Halt or trigger_FreeRun
whismanoid 4:d9b05924ad4c 4976 // Datalogger_Trigger = trigger_Halt // halt the datalogger; continue accepting commands
whismanoid 9:45f98573eb6d 4977 // cmdLine.serial().print(F("\r\n L -- halt the datalogger; continue accepting commands"));
whismanoid 9:45f98573eb6d 4978 //
whismanoid 17:9397ea3ea7e9 4979 // Datalogger_Trigger = trigger_FreeRun // free run as fast as possible "always-on mode"
whismanoid 4:d9b05924ad4c 4980 cmdLine.serial().printf("\r\n LR -- Datalog free run as fast as possible");
whismanoid 9:45f98573eb6d 4981 //
whismanoid 17:9397ea3ea7e9 4982 // Datalogger_Trigger = trigger_Timer // timer (configure interval) "intermittent-sleep-mode"
whismanoid 17:9397ea3ea7e9 4983 //~ cmdLine.serial().printf("\r\n LT -- Datalog timer"); // trigger_Timer
whismanoid 17:9397ea3ea7e9 4984 cmdLine.serial().printf("\r\n LT count=%d base=%dms -- Datalog timer", g_timer_interval_count, g_timer_interval_msec); // trigger_Timer
whismanoid 9:45f98573eb6d 4985 //
whismanoid 9:45f98573eb6d 4986 // TODO: Datalogger_Trigger = trigger_PlatformDigitalInput // platform digital input (configure digital input pin reference)
whismanoid 17:9397ea3ea7e9 4987 //~ cmdLine.serial().printf("\r\n LI -- Datalog _______"); // trigger_PlatformDigitalInput
whismanoid 17:9397ea3ea7e9 4988 // TODO: cmdLine.serial().printf("\r\n LIH3 -- Datalog when input high D3"); // trigger_PlatformDigitalInput
whismanoid 17:9397ea3ea7e9 4989 // TODO: cmdLine.serial().printf("\r\n LIL6 -- Datalog when input low D6"); // trigger_PlatformDigitalInput
whismanoid 9:45f98573eb6d 4990 //
whismanoid 17:9397ea3ea7e9 4991 #if USE_DATALOGGER_SPIDeviceRegRead
whismanoid 9:45f98573eb6d 4992 // TODO: Datalogger_Trigger = trigger_SPIDeviceRegRead // SPI device register read (configure regaddr, mask value, match value)
whismanoid 17:9397ea3ea7e9 4993 //~ cmdLine.serial().printf("\r\n L$ -- Datalog _______"); // trigger_SPIDeviceRegRead
whismanoid 27:b4ac095b83b3 4994 cmdLine.serial().printf("\r\n L$ count=10 base=500ms addr=xxx data=xxx mask=xxx -- Datalog when SPI read of address matches mask"); // trigger_SPIDeviceRegRead
whismanoid 17:9397ea3ea7e9 4995 #endif // USE_DATALOGGER_SPIDeviceRegRead
whismanoid 17:9397ea3ea7e9 4996 //
whismanoid 17:9397ea3ea7e9 4997 #if USE_DATALOGGER_ActionTable // Datalogger_RunActionTable() supported actions
whismanoid 28:a9a3a9db592b 4998 cmdLine.serial().printf("\r\n L@ -- configures Datalogger_action_table; show more commands");
whismanoid 17:9397ea3ea7e9 4999 #endif // USE_DATALOGGER_ActionTable Datalogger_RunActionTable() supported actions
whismanoid 9:45f98573eb6d 5000 //
whismanoid 9:45f98573eb6d 5001 #if defined(SPI_ADC_DeviceName) // SPI connected ADC
whismanoid 9:45f98573eb6d 5002 // LS<channel ID><verb>: Configure SPI_AIN channels
whismanoid 9:45f98573eb6d 5003 // channel ID: 0,1,2,... or - for all channels
whismanoid 9:45f98573eb6d 5004 // verb: D for disable, V for Voltage, L for LSB
whismanoid 9:45f98573eb6d 5005 cmdLine.serial().printf("\r\n LS-D -- Datalog SPI ADC channel '-'(all) Disable");
whismanoid 9:45f98573eb6d 5006 cmdLine.serial().printf("\r\n LS-V -- Datalog SPI ADC channel '-'(all) Volt");
whismanoid 9:45f98573eb6d 5007 cmdLine.serial().printf("\r\n LS-L -- Datalog SPI ADC channel '-'(all) LSB");
whismanoid 9:45f98573eb6d 5008 cmdLine.serial().printf("\r\n LS2D -- Datalog SPI ADC channel channel 2 Disable");
whismanoid 9:45f98573eb6d 5009 cmdLine.serial().printf("\r\n LS3V -- Datalog SPI ADC channel channel 3 Volt");
whismanoid 9:45f98573eb6d 5010 cmdLine.serial().printf("\r\n LS4L -- Datalog SPI ADC channel channel 4 LSB");
whismanoid 9:45f98573eb6d 5011 //
whismanoid 9:45f98573eb6d 5012 // MAX11410 verb for configuring SPI_AIN_Cfg_v_filter_ch[channel_index]
whismanoid 9:45f98573eb6d 5013 // cmdLine.serial().print(F("\r\n LS-CF34 -- Datalog SPI ADC channel channel 5 v_filter 0x34"));
whismanoid 9:45f98573eb6d 5014 cmdLine.serial().printf("\r\n LS-CF34 -- Datalog SPI ADC channel '-'(all) v_filter 0x34");
whismanoid 9:45f98573eb6d 5015 //
whismanoid 9:45f98573eb6d 5016 // MAX11410 verb for configuring SPI_AIN_Cfg_v_ctrl_ch[channel_index]
whismanoid 9:45f98573eb6d 5017 // cmdLine.serial().print(F("\r\n LS-CC42 -- Datalog SPI ADC channel '-'(all) v_ctrl 0x42"));
whismanoid 9:45f98573eb6d 5018 cmdLine.serial().printf("\r\n LS-CC42 -- Datalog SPI ADC channel '-'(all) v_ctrl 0x42");
whismanoid 9:45f98573eb6d 5019 //
whismanoid 9:45f98573eb6d 5020 // MAX11410 verb for configuring SPI_AIN_Cfg_v_ctrl_ch[channel_index]
whismanoid 9:45f98573eb6d 5021 // cmdLine.serial().print(F("\r\n LS5___ -- Datalog SPI ADC channel channel 5 v_ctrl"));
whismanoid 9:45f98573eb6d 5022 // MAX11410 verb for configuring SPI_AIN_Cfg_v_ctrl_ch[channel_index]
whismanoid 9:45f98573eb6d 5023 cmdLine.serial().printf("\r\n LS5CU -- Datalog SPI ADC channel channel 5 v_ctrl Unipolar");
whismanoid 9:45f98573eb6d 5024 // ((SPI_AIN_Cfg_v_ctrl_ch[channel_index] & 0x40) == 0) ? "BIPOLAR" : "Unipolar"
whismanoid 9:45f98573eb6d 5025 cmdLine.serial().printf("\r\n LS5CB -- Datalog SPI ADC channel channel 5 v_ctrl Bipolar");
whismanoid 9:45f98573eb6d 5026 // ((SPI_AIN_Cfg_v_ctrl_ch[channel_index] & 0x40) == 0) ? "BIPOLAR" : "Unipolar"
whismanoid 9:45f98573eb6d 5027 //
whismanoid 9:45f98573eb6d 5028 // MAX11410 verb for configuring SPI_AIN_Cfg_v_pga_ch[channel_index]
whismanoid 9:45f98573eb6d 5029 // cmdLine.serial().print(F("\r\n LS5CP00 -- Datalog SPI ADC channel channel 5 v_pga 0x00"));
whismanoid 9:45f98573eb6d 5030 cmdLine.serial().printf("\r\n LS-CP00 -- Datalog SPI ADC channel '-'(all) v_pga 0x00");
whismanoid 9:45f98573eb6d 5031 //
whismanoid 9:45f98573eb6d 5032 #endif // defined(SPI_ADC_DeviceName) // SPI connected ADC
whismanoid 9:45f98573eb6d 5033 //
whismanoid 9:45f98573eb6d 5034 #if defined(LOG_PLATFORM_AIN) // Datalog Arduino platform analog inputs
whismanoid 9:45f98573eb6d 5035 // LA<channel ID><verb>: Configure Platform_AIN channels
whismanoid 9:45f98573eb6d 5036 // channel ID: 0,1,2,... or - for all channels
whismanoid 9:45f98573eb6d 5037 // verb: D for disable, V for Voltage, L for LSB
whismanoid 9:45f98573eb6d 5038 cmdLine.serial().printf("\r\n LA-D -- Datalog Platform-AIN all-channel Disable");
whismanoid 9:45f98573eb6d 5039 #if LOG_PLATFORM_ANALOG_IN_VOLTS
whismanoid 9:45f98573eb6d 5040 cmdLine.serial().printf("\r\n LA-V -- Datalog Platform-AIN all-channel Volt");
whismanoid 9:45f98573eb6d 5041 #endif // LOG_PLATFORM_ANALOG_IN_VOLTS
whismanoid 9:45f98573eb6d 5042 #if LOG_PLATFORM_ANALOG_IN_LSB
whismanoid 9:45f98573eb6d 5043 cmdLine.serial().printf("\r\n LA-L -- Datalog Platform-AIN all-channel LSB");
whismanoid 9:45f98573eb6d 5044 #endif // LOG_PLATFORM_ANALOG_IN_LSB
whismanoid 9:45f98573eb6d 5045 cmdLine.serial().printf("\r\n LA2D -- Datalog Platform-AIN channel 2 Disable");
whismanoid 9:45f98573eb6d 5046 #if LOG_PLATFORM_ANALOG_IN_VOLTS
whismanoid 9:45f98573eb6d 5047 cmdLine.serial().printf("\r\n LA3V -- Datalog Platform-AIN channel 3 Volt");
whismanoid 9:45f98573eb6d 5048 #endif // LOG_PLATFORM_ANALOG_IN_VOLTS
whismanoid 9:45f98573eb6d 5049 #if LOG_PLATFORM_ANALOG_IN_LSB
whismanoid 9:45f98573eb6d 5050 cmdLine.serial().printf("\r\n LA4L -- Datalog Platform-AIN channel 4 LSB");
whismanoid 9:45f98573eb6d 5051 #endif // LOG_PLATFORM_ANALOG_IN_LSB
whismanoid 9:45f98573eb6d 5052 #endif // defined(LOG_PLATFORM_AIN)
whismanoid 28:a9a3a9db592b 5053 #endif // USE_DATALOGGER_TRIGGER_HELP_BRIEF -----------------------------------------------
whismanoid 4:d9b05924ad4c 5054 #endif // USE_DATALOGGER_TRIGGER support Datalog trigger
whismanoid 28:a9a3a9db592b 5055 #if USE_DATALOGGER_TRIGGER_HELP_BRIEF
whismanoid 28:a9a3a9db592b 5056 #else // USE_DATALOGGER_TRIGGER_HELP_BRIEF -----------------------------------------------
whismanoid 8:dffee7509bfb 5057 # if HAS_AUX_SERIAL
whismanoid 9:45f98573eb6d 5058 cmdLine.serial().printf("\r\n L>A -- Datalogger_enable_AUXserial %s", (Datalogger_enable_AUXserial?"disable":"enable"));
whismanoid 8:dffee7509bfb 5059 # endif // HAS_AUX_SERIAL
whismanoid 8:dffee7509bfb 5060 # if HAS_DAPLINK_SERIAL
whismanoid 9:45f98573eb6d 5061 cmdLine.serial().printf("\r\n L>D -- Datalogger_enable_DAPLINKserial %s", (Datalogger_enable_DAPLINKserial?"disable":"enable"));
whismanoid 8:dffee7509bfb 5062 # endif // HAS_DAPLINK_SERIAL
whismanoid 9:45f98573eb6d 5063 cmdLine.serial().printf("\r\n L>S -- Datalogger_enable_serial %s", (Datalogger_enable_serial?"disable":"enable"));
whismanoid 28:a9a3a9db592b 5064 #endif // USE_DATALOGGER_TRIGGER_HELP_BRIEF -----------------------------------------------
whismanoid 8:dffee7509bfb 5065 //
whismanoid 4:d9b05924ad4c 5066 //cmdLine.serial().print(F("\r\n ! -- Initial Configuration"));
whismanoid 4:d9b05924ad4c 5067 //
whismanoid 4:d9b05924ad4c 5068 // % standardize diagnostic commands
whismanoid 4:d9b05924ad4c 5069 // %Hpin -- digital output high
whismanoid 4:d9b05924ad4c 5070 // %Lpin -- digital output low
whismanoid 4:d9b05924ad4c 5071 // %?pin -- digital input
whismanoid 4:d9b05924ad4c 5072 // %A %Apin -- analog input
whismanoid 4:d9b05924ad4c 5073 // %Ppin df=xx -- pwm output
whismanoid 4:d9b05924ad4c 5074 // %Wpin -- measure high pulsewidth input in usec
whismanoid 4:d9b05924ad4c 5075 // %wpin -- measure low pulsewidth input in usec
whismanoid 4:d9b05924ad4c 5076 // %I... -- I2C diagnostics
whismanoid 4:d9b05924ad4c 5077 // %IP -- I2C probe
whismanoid 4:d9b05924ad4c 5078 // %IC scl=100khz ADDR=? -- I2C configure
whismanoid 4:d9b05924ad4c 5079 // %IW ADDR=? cmd=? data,data,data -- write
whismanoid 4:d9b05924ad4c 5080 // %IR ADDR=? RD=? -- read
whismanoid 4:d9b05924ad4c 5081 // %I^ cmd=? -- i2c_smbus_read_word_data
whismanoid 4:d9b05924ad4c 5082 // %S... -- SPI diagnostics
whismanoid 4:d9b05924ad4c 5083 // %SC sclk=1Mhz -- SPI configure
whismanoid 4:d9b05924ad4c 5084 // %SW -- write (write and read)
whismanoid 4:d9b05924ad4c 5085 // %SR -- read (alias for %SW because SPI always write and read)
whismanoid 4:d9b05924ad4c 5086 // A-Z,a-z,0-9 reserved for application use
whismanoid 4:d9b05924ad4c 5087 //
whismanoid 23:c6c652bef4b9 5088 //--------------------------------------------------
whismanoid 23:c6c652bef4b9 5089 #if USE_DATALOGGER_CommandTable
whismanoid 23:c6c652bef4b9 5090 // command_table: list of commands to perform on button press
whismanoid 23:c6c652bef4b9 5091 // TODO: %B1 submenu for Button1
whismanoid 23:c6c652bef4b9 5092 // TODO: future: %B2 submenu for Button2
whismanoid 23:c6c652bef4b9 5093 // TODO: future: %B3 submenu for Button3
whismanoid 23:c6c652bef4b9 5094 // TODO: %B1@ view command table, similar to L@ for action table
whismanoid 23:c6c652bef4b9 5095 // TODO: %B1@+ command add new row (if there is room to add) (ignore one space before command)
whismanoid 23:c6c652bef4b9 5096 // TODO: %B1@-nnn delete row number nnn (if list is not empty)
whismanoid 23:c6c652bef4b9 5097 // TODO: %B1@-~~~ clear entire command table
whismanoid 23:c6c652bef4b9 5098 // TODO: %B1@nnn command replace row number nnn (ignore one space before command)
whismanoid 23:c6c652bef4b9 5099 // TODO: %B1@! disable button response but keep command table contents
whismanoid 23:c6c652bef4b9 5100 // TODO: %B1@@ enable button response
whismanoid 23:c6c652bef4b9 5101 // TODO: %B1! trigger onButton1FallingEdge() immediately (for test development)
whismanoid 45:74bf1fe021e5 5102 // cmdLine.serial().printf("\r\n %%B1! trigger Button1 event; %%B1@ -- view/edit command table");
whismanoid 45:74bf1fe021e5 5103 cmdLine.serial().printf("\r\n %%B1! trigger Button1 event;");
whismanoid 45:74bf1fe021e5 5104 // print maximum index for %B1 submenu
whismanoid 45:74bf1fe021e5 5105 #if HAS_BUTTON9_DEMO_INTERRUPT
whismanoid 45:74bf1fe021e5 5106 cmdLine.serial().printf(" %%B9@ -- view/edit command table");
whismanoid 45:74bf1fe021e5 5107 #elif HAS_BUTTON8_DEMO_INTERRUPT
whismanoid 45:74bf1fe021e5 5108 cmdLine.serial().printf(" %%B8@ -- view/edit command table");
whismanoid 45:74bf1fe021e5 5109 #elif HAS_BUTTON7_DEMO_INTERRUPT
whismanoid 45:74bf1fe021e5 5110 cmdLine.serial().printf(" %%B7@ -- view/edit command table");
whismanoid 45:74bf1fe021e5 5111 #elif HAS_BUTTON6_DEMO_INTERRUPT
whismanoid 45:74bf1fe021e5 5112 cmdLine.serial().printf(" %%B6@ -- view/edit command table");
whismanoid 45:74bf1fe021e5 5113 #elif HAS_BUTTON5_DEMO_INTERRUPT
whismanoid 45:74bf1fe021e5 5114 cmdLine.serial().printf(" %%B5@ -- view/edit command table");
whismanoid 45:74bf1fe021e5 5115 #elif HAS_BUTTON4_DEMO_INTERRUPT
whismanoid 45:74bf1fe021e5 5116 cmdLine.serial().printf(" %%B4@ -- view/edit command table");
whismanoid 45:74bf1fe021e5 5117 #elif HAS_BUTTON3_DEMO_INTERRUPT
whismanoid 45:74bf1fe021e5 5118 cmdLine.serial().printf(" %%B3@ -- view/edit command table");
whismanoid 45:74bf1fe021e5 5119 #elif HAS_BUTTON2_DEMO_INTERRUPT
whismanoid 45:74bf1fe021e5 5120 cmdLine.serial().printf(" %%B2@ -- view/edit command table");
whismanoid 45:74bf1fe021e5 5121 #elif HAS_BUTTON1_DEMO_INTERRUPT
whismanoid 45:74bf1fe021e5 5122 cmdLine.serial().printf(" %%B1@ -- view/edit command table");
whismanoid 45:74bf1fe021e5 5123 #endif // HAS_BUTTON9_DEMO_INTERRUPT
whismanoid 45:74bf1fe021e5 5124
whismanoid 45:74bf1fe021e5 5125
whismanoid 23:c6c652bef4b9 5126 #endif // USE_DATALOGGER_CommandTable
whismanoid 23:c6c652bef4b9 5127 //--------------------------------------------------
whismanoid 4:d9b05924ad4c 5128 #if HAS_digitalInOuts
whismanoid 4:d9b05924ad4c 5129 // %Hpin -- digital output high
whismanoid 4:d9b05924ad4c 5130 // %Lpin -- digital output low
whismanoid 4:d9b05924ad4c 5131 // %?pin -- digital input
whismanoid 4:d9b05924ad4c 5132 cmdLine.serial().printf("\r\n %%Hn {pin:");
whismanoid 4:d9b05924ad4c 5133 list_digitalInOutPins(cmdLine.serial());
whismanoid 4:d9b05924ad4c 5134 cmdLine.serial().printf("} -- High Output");
whismanoid 4:d9b05924ad4c 5135 cmdLine.serial().printf("\r\n %%Ln {pin:");
whismanoid 4:d9b05924ad4c 5136 list_digitalInOutPins(cmdLine.serial());
whismanoid 4:d9b05924ad4c 5137 cmdLine.serial().printf("} -- Low Output");
whismanoid 4:d9b05924ad4c 5138 cmdLine.serial().printf("\r\n %%?n {pin:");
whismanoid 4:d9b05924ad4c 5139 list_digitalInOutPins(cmdLine.serial());
whismanoid 4:d9b05924ad4c 5140 cmdLine.serial().printf("} -- Input");
whismanoid 4:d9b05924ad4c 5141 #endif
whismanoid 4:d9b05924ad4c 5142
whismanoid 4:d9b05924ad4c 5143 #if HAS_analogIns
whismanoid 4:d9b05924ad4c 5144 // Menu A) analogRead A0..7
whismanoid 4:d9b05924ad4c 5145 // %A %Apin -- analog input
whismanoid 4:d9b05924ad4c 5146 // analogRead(pinIndex) // analog input pins A0, A1, A2, A3, A4, A5; float voltage = analogRead(A0) * (5.0 / 1023.0)
whismanoid 37:3f369235e5bc 5147 cmdLine.serial().printf("\r\n %%A -- analogRead");
whismanoid 37:3f369235e5bc 5148 #if USE_Platform_AIN_Average
whismanoid 37:3f369235e5bc 5149 // %A avg=%d -- help string display Platform_AIN_Average_N
whismanoid 37:3f369235e5bc 5150 cmdLine.serial().printf("; %%A avg=%d -- average", Platform_AIN_Average_N);
whismanoid 37:3f369235e5bc 5151 #endif // USE_Platform_AIN_Average
whismanoid 34:a1993a1ee904 5152 #if HAS_Platform_AIN_Calibration
whismanoid 34:a1993a1ee904 5153 // %A cal? view/export raw calibration values for all channels
whismanoid 37:3f369235e5bc 5154 cmdLine.serial().printf("; %%A cal? -- calibration");
whismanoid 34:a1993a1ee904 5155 #endif // HAS_Platform_AIN_Calibration
whismanoid 4:d9b05924ad4c 5156 #endif
whismanoid 4:d9b05924ad4c 5157
whismanoid 4:d9b05924ad4c 5158 #if HAS_SPI2_MAX541
whismanoid 4:d9b05924ad4c 5159 // TODO1: MAX541 max541(spi2_max541, spi2_max541_cs);
whismanoid 4:d9b05924ad4c 5160 cmdLine.serial().printf("\r\n %%D -- DAC output MAX541 (SPI2)");
whismanoid 4:d9b05924ad4c 5161 #endif
whismanoid 4:d9b05924ad4c 5162
whismanoid 46:469d0061df5d 5163 //--------------------------------------------------
whismanoid 46:469d0061df5d 5164 #if defined(HAS_FLASH_PEEK) || defined(HAS_FLASH_POKE)
whismanoid 46:469d0061df5d 5165 // MAX32625 flash peek/poke support (MAX40108 demo) #312
whismanoid 46:469d0061df5d 5166 // cmdLine.serial().printf("\r\n %%F -- flash support");
whismanoid 46:469d0061df5d 5167 # if HAS_FLASH_PEEK
whismanoid 46:469d0061df5d 5168 // flash peek memory %F peek=0x0007ff00 len=0x0100 -- hex dump
whismanoid 46:469d0061df5d 5169 cmdLine.serial().printf("\r\n %%F peek=0x%8.8lx len=0x2000 -- hex dump", (uint32_t)&flash_page_configuration_back_up[0]);
whismanoid 46:469d0061df5d 5170 # endif // HAS_FLASH_PEEK
whismanoid 46:469d0061df5d 5171 # if HAS_FLASH_POKE
whismanoid 46:469d0061df5d 5172 // flash poke memory %F poke=0x0007ff00 0xab 0xcd 0xef 0x27 0x18 0x28 -- erase/write flash page
whismanoid 48:18647e0516f2 5173 cmdLine.serial().printf("\r\n %%F poke=0x%8.8lx 12 34 56 78 -- erase/write flash page", (uint32_t)&flash_page_configuration_back_up[0]);
whismanoid 46:469d0061df5d 5174 # endif // HAS_FLASH_POKE
whismanoid 46:469d0061df5d 5175 # if HAS_FLASH_LOAD_SAVE
whismanoid 48:18647e0516f2 5176 // cmdLine.serial().printf("\r\n %%F save=0xFF -- erase config; %%F save=0 -- save all config");
whismanoid 48:18647e0516f2 5177 // const uint32_t save_arg_01_pageErase = 0x00000001; // page erase and rewrite
whismanoid 48:18647e0516f2 5178 // const uint32_t save_arg_02_verbose = 0x00000002; // verbose diagnostic messages
whismanoid 48:18647e0516f2 5179 // const uint32_t save_arg_04_reserved = 0x00000004; // reserved
whismanoid 48:18647e0516f2 5180 // const uint32_t save_arg_08_reserved = 0x00000008; // reserved
whismanoid 48:18647e0516f2 5181 // const uint32_t save_arg_10_calibration = 0x00000010; // save board ID and calibration
whismanoid 48:18647e0516f2 5182 // const uint32_t save_arg_20_action_table = 0x00000020; // save Datalogger_action_table
whismanoid 48:18647e0516f2 5183 // const uint32_t save_arg_40_command_table = 0x00000040; // save onButtonX_command_table
whismanoid 48:18647e0516f2 5184 // const uint32_t save_arg_80_reserved = 0x00000080; // reserved
whismanoid 49:359a6b9df7c1 5185 cmdLine.serial().printf("\r\n %%F load=0x%lx ; %%F save=0x%lx -- calibration",
whismanoid 48:18647e0516f2 5186 (load_arg_default | save_arg_02_verbose), (save_arg_default | save_arg_02_verbose));
whismanoid 48:18647e0516f2 5187 //~ cmdLine.serial().printf("\r\n %%F save=0x11 -- erase; config; %%F save=0 -- save all config");
whismanoid 48:18647e0516f2 5188 //~ cmdLine.serial().printf("\r\n %%F load -- load all config");
whismanoid 46:469d0061df5d 5189 # endif // HAS_FLASH_LOAD_SAVE
whismanoid 46:469d0061df5d 5190 #endif
whismanoid 46:469d0061df5d 5191
whismanoid 4:d9b05924ad4c 5192 #if HAS_I2C // SUPPORT_I2C
whismanoid 4:d9b05924ad4c 5193 // TODO: support I2C HAS_I2C // SUPPORT_I2C
whismanoid 4:d9b05924ad4c 5194 // VERIFY: I2C utility commands SUPPORT_I2C
whismanoid 4:d9b05924ad4c 5195 // VERIFY: report g_I2C_SCL_Hz = (F_CPU / ((TWBR * 2) + 16)) from last Wire_Sr.setClock(I2C_SCL_Hz);
whismanoid 4:d9b05924ad4c 5196 // %I... -- I2C diagnostics
whismanoid 4:d9b05924ad4c 5197 // %IP -- I2C probe
whismanoid 4:d9b05924ad4c 5198 // %IC scl=100khz ADDR=? -- I2C configure
whismanoid 4:d9b05924ad4c 5199 // %IW byte byte ... byte RD=? ADDR=0x -- write
whismanoid 4:d9b05924ad4c 5200 // %IR ADDR=? RD=? -- read
whismanoid 4:d9b05924ad4c 5201 // %I^ cmd=? -- i2c_smbus_read_word_data
whismanoid 4:d9b05924ad4c 5202 //g_I2C_SCL_Hz = (F_CPU / ((TWBR * 2) + 16)); // 'F_CPU' 'TWBR' not declared in this scope
whismanoid 4:d9b05924ad4c 5203 cmdLine.serial().printf("\r\n %%IC ADDR=0x%2.2x=(0x%2.2x>>1) SCL=%d=%1.3fkHz -- I2C config",
whismanoid 4:d9b05924ad4c 5204 g_I2C_deviceAddress7, (g_I2C_deviceAddress7 << 1), g_I2C_SCL_Hz,
whismanoid 4:d9b05924ad4c 5205 (g_I2C_SCL_Hz / 1000.));
whismanoid 4:d9b05924ad4c 5206 cmdLine.serial().printf("\r\n %%IW byte byte ... byte RD=? ADDR=0x%2.2x -- I2C write/read",
whismanoid 4:d9b05924ad4c 5207 g_I2C_deviceAddress7);
whismanoid 4:d9b05924ad4c 5208 //
whismanoid 4:d9b05924ad4c 5209 #if SUPPORT_I2C
whismanoid 4:d9b05924ad4c 5210 // Menu ^ cmd=?) i2c_smbus_read_word_data
whismanoid 4:d9b05924ad4c 5211 cmdLine.serial().printf("\r\n %%I^ cmd=? -- i2c_smbus_read_word_data");
whismanoid 4:d9b05924ad4c 5212 // test low-level I2C i2c_smbus_read_word_data
whismanoid 4:d9b05924ad4c 5213 #endif // SUPPORT_I2C
whismanoid 4:d9b05924ad4c 5214 //cmdLine.serial().printf(" H) Hunt for attached I2C devices");
whismanoid 4:d9b05924ad4c 5215 cmdLine.serial().printf("\r\n %%IP -- I2C Probe for attached devices");
whismanoid 4:d9b05924ad4c 5216 // cmdLine.serial().printf(" s) search i2c address");
whismanoid 4:d9b05924ad4c 5217 #endif // SUPPORT_I2C
whismanoid 4:d9b05924ad4c 5218
whismanoid 4:d9b05924ad4c 5219 #if HAS_SPI // SUPPORT_SPI
whismanoid 4:d9b05924ad4c 5220 // TODO: support SPI HAS_SPI // SUPPORT_SPI
whismanoid 4:d9b05924ad4c 5221 // SPI test command S (mosiData)+
whismanoid 4:d9b05924ad4c 5222 // %S... -- SPI diagnostics
whismanoid 4:d9b05924ad4c 5223 // %SC sclk=1Mhz -- SPI configure
whismanoid 4:d9b05924ad4c 5224 // %SW -- write (write and read)
whismanoid 4:d9b05924ad4c 5225 // %SR -- read (alias for %SW because SPI always write and read)
whismanoid 4:d9b05924ad4c 5226 // spi.format(8,0); // int bits_must_be_8, int mode=0_3 CPOL=0,CPHA=0 rising edge (initial default)
whismanoid 4:d9b05924ad4c 5227 // spi.format(8,1); // int bits_must_be_8, int mode=0_3 CPOL=0,CPHA=1 falling edge (initial default)
whismanoid 4:d9b05924ad4c 5228 // spi.format(8,2); // int bits_must_be_8, int mode=0_3 CPOL=1,CPHA=0 falling edge (initial default)
whismanoid 4:d9b05924ad4c 5229 // spi.format(8,3); // int bits_must_be_8, int mode=0_3 CPOL=1,CPHA=1 rising edge (initial default)
whismanoid 4:d9b05924ad4c 5230 // spi.frequency(1000000); // int SCLK_Hz=1000000 = 1MHz (initial default)
whismanoid 4:d9b05924ad4c 5231 // mode | POL PHA
whismanoid 4:d9b05924ad4c 5232 // -----+--------
whismanoid 4:d9b05924ad4c 5233 // 0 | 0 0
whismanoid 4:d9b05924ad4c 5234 // 1 | 0 1
whismanoid 4:d9b05924ad4c 5235 // 2 | 1 0
whismanoid 4:d9b05924ad4c 5236 // 3 | 1 1
whismanoid 4:d9b05924ad4c 5237 //cmdLine.serial().printf(" S) SPI mosi,mosi,...mosi hex bytes SCLK=1000000 CPOL=0 CPHA=0");
whismanoid 4:d9b05924ad4c 5238 // fixed: mbed-os-5.11: [Warning] format '%d' expects argument of type 'int', but argument 3 has type 'uint32_t {aka long unsigned int}' [-Wformat=]
whismanoid 4:d9b05924ad4c 5239 cmdLine.serial().printf("\r\n %%SC SCLK=%ld=%1.3fMHz CPOL=%d CPHA=%d -- SPI config",
whismanoid 4:d9b05924ad4c 5240 g_SPI_SCLK_Hz, (g_SPI_SCLK_Hz / 1000000.),
whismanoid 4:d9b05924ad4c 5241 ((g_SPI_dataMode & SPI_MODE2) ? 1 : 0),
whismanoid 4:d9b05924ad4c 5242 ((g_SPI_dataMode & SPI_MODE1) ? 1 : 0));
whismanoid 4:d9b05924ad4c 5243 cmdLine.serial().printf("\r\n %%SD -- SPI diagnostic messages ");
whismanoid 4:d9b05924ad4c 5244 if (g_MAX11410_device.onSPIprint) {
whismanoid 4:d9b05924ad4c 5245 cmdLine.serial().printf("hide");
whismanoid 4:d9b05924ad4c 5246 }
whismanoid 4:d9b05924ad4c 5247 else {
whismanoid 4:d9b05924ad4c 5248 cmdLine.serial().printf("show");
whismanoid 4:d9b05924ad4c 5249 }
whismanoid 4:d9b05924ad4c 5250 cmdLine.serial().printf("\r\n %%SW mosi,mosi,...mosi -- SPI write hex bytes");
whismanoid 4:d9b05924ad4c 5251 // VERIFY: parse new SPI settings parse_strCommandArgs() SCLK=1000000 CPOL=0 CPHA=0
whismanoid 4:d9b05924ad4c 5252 #endif // SUPPORT_SPI
whismanoid 4:d9b05924ad4c 5253 //
whismanoid 4:d9b05924ad4c 5254 // Application-specific commands (help text) here
whismanoid 4:d9b05924ad4c 5255 //
whismanoid 4:d9b05924ad4c 5256 #if APPLICATION_ArduinoPinsMonitor
whismanoid 4:d9b05924ad4c 5257 cmdLine.serial().printf("\r\n A-Z,a-z,0-9 -- reserved for application use"); // ArduinoPinsMonitor
whismanoid 4:d9b05924ad4c 5258 #endif // APPLICATION_ArduinoPinsMonitor
whismanoid 4:d9b05924ad4c 5259 //
whismanoid 4:d9b05924ad4c 5260
whismanoid 4:d9b05924ad4c 5261 //~ extern void MAX11410_menu_help(CmdLine & cmdLine); // defined in Test_Menu_MAX11410.cpp\n
whismanoid 4:d9b05924ad4c 5262 //~ MAX11410_menu_help(cmdLine);
whismanoid 4:d9b05924ad4c 5263 }
whismanoid 4:d9b05924ad4c 5264 #endif // USE_CMDLINE_MENUS support CmdLine command menus
whismanoid 4:d9b05924ad4c 5265
whismanoid 4:d9b05924ad4c 5266 #if USE_CMDLINE_MENUS // support CmdLine command menus
whismanoid 15:37c83ec50ea0 5267
whismanoid 15:37c83ec50ea0 5268 //--------------------------------------------------
whismanoid 15:37c83ec50ea0 5269 void pinsMonitor_submenu_onEOLcommandParser(CmdLine& cmdLine)
whismanoid 15:37c83ec50ea0 5270 {
whismanoid 15:37c83ec50ea0 5271 // % diagnostic commands submenu
whismanoid 15:37c83ec50ea0 5272 // %Hpin -- digital output high
whismanoid 15:37c83ec50ea0 5273 // %Lpin -- digital output low
whismanoid 15:37c83ec50ea0 5274 // %?pin -- digital input
whismanoid 15:37c83ec50ea0 5275 // %A %Apin -- analog input
whismanoid 15:37c83ec50ea0 5276 // %Ppin df=xx -- pwm output
whismanoid 15:37c83ec50ea0 5277 // %Wpin -- measure high pulsewidth input in usec
whismanoid 15:37c83ec50ea0 5278 // %wpin -- measure low pulsewidth input in usec
whismanoid 15:37c83ec50ea0 5279 // %I... -- I2C diagnostics
whismanoid 15:37c83ec50ea0 5280 // %IP -- I2C probe
whismanoid 15:37c83ec50ea0 5281 // %IC scl=100khz ADDR=? -- I2C configure
whismanoid 15:37c83ec50ea0 5282 // %IW byte byte ... byte RD=? ADDR=0x -- write
whismanoid 15:37c83ec50ea0 5283 // %IR ADDR=? RD=? -- read
whismanoid 15:37c83ec50ea0 5284 // %I^ cmd=? -- i2c_smbus_read_word_data
whismanoid 15:37c83ec50ea0 5285 // %S... -- SPI diagnostics
whismanoid 15:37c83ec50ea0 5286 // %SC sclk=1Mhz -- SPI configure
whismanoid 15:37c83ec50ea0 5287 // %SW -- write (write and read)
whismanoid 15:37c83ec50ea0 5288 // %SR -- read (alias for %SW because SPI always write and read)
whismanoid 15:37c83ec50ea0 5289 // A-Z,a-z,0-9 reserved for application use
whismanoid 15:37c83ec50ea0 5290 //
whismanoid 15:37c83ec50ea0 5291 char strPinIndex[3];
whismanoid 15:37c83ec50ea0 5292 strPinIndex[0] = cmdLine[2];
whismanoid 15:37c83ec50ea0 5293 strPinIndex[1] = cmdLine[3];
whismanoid 15:37c83ec50ea0 5294 strPinIndex[2] = '\0';
whismanoid 15:37c83ec50ea0 5295 int pinIndex = strtoul(strPinIndex, NULL, 10); // strtol(str, NULL, 10): get decimal value
whismanoid 15:37c83ec50ea0 5296 //cmdLine.serial().printf(" pinIndex=%d ", pinIndex);
whismanoid 15:37c83ec50ea0 5297 //
whismanoid 15:37c83ec50ea0 5298 // get next character
whismanoid 15:37c83ec50ea0 5299 switch (cmdLine[1])
whismanoid 15:37c83ec50ea0 5300 {
whismanoid 23:c6c652bef4b9 5301 //--------------------------------------------------
whismanoid 46:469d0061df5d 5302 #if defined(HAS_FLASH_PEEK) || defined(HAS_FLASH_POKE)
whismanoid 46:469d0061df5d 5303 // MAX32625 flash peek/poke support (MAX40108 demo) #312
whismanoid 46:469d0061df5d 5304 case 'F': case 'f':
whismanoid 46:469d0061df5d 5305 {
whismanoid 46:469d0061df5d 5306 # if HAS_FLASH_PEEK
whismanoid 46:469d0061df5d 5307 // Limit the ranges where memory write operation will be allowed
whismanoid 46:469d0061df5d 5308 // FLASH (rx) : ORIGIN = 0x00010000, LENGTH = 0x00070000
whismanoid 46:469d0061df5d 5309 //~ const uint32_t poke_flash_min = 0x00010000;
whismanoid 46:469d0061df5d 5310 //~ const uint32_t poke_flash_max = 0x0007FFFF;
whismanoid 46:469d0061df5d 5311 // RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00028000
whismanoid 46:469d0061df5d 5312 //~ const uint32_t poke_ram_min = 0x20000000;
whismanoid 46:469d0061df5d 5313 //~ const uint32_t poke_ram_max = 0x20027FFF;
whismanoid 46:469d0061df5d 5314 //
whismanoid 46:469d0061df5d 5315 // flash peek memory %F peek=0x0007ff00 len=0x0100 -- hex dump
whismanoid 46:469d0061df5d 5316 // get "len" keyword, default 1
whismanoid 46:469d0061df5d 5317 uint32_t peek_len = 1;
whismanoid 46:469d0061df5d 5318 if (cmdLine.parse_uint32_hex("len", peek_len))
whismanoid 46:469d0061df5d 5319 {
whismanoid 46:469d0061df5d 5320 }
whismanoid 46:469d0061df5d 5321 // get "peek" keyword, do peek operation if keyword is present
whismanoid 46:469d0061df5d 5322 uint32_t peek_addr = 0x00010000;
whismanoid 46:469d0061df5d 5323 if (cmdLine.parse_uint32_hex("peek", peek_addr))
whismanoid 46:469d0061df5d 5324 {
whismanoid 46:469d0061df5d 5325 // #312 hex dump memory from peek_addr length peek_len
whismanoid 46:469d0061df5d 5326 peek_addr = peek_addr &~ 0x00000003; // 32-bit word align
whismanoid 46:469d0061df5d 5327 //
whismanoid 46:469d0061df5d 5328 // scan poke_access_list[] for peek_addr
whismanoid 46:469d0061df5d 5329 int poke_access_list_index = search_poke_access_list(peek_addr);
whismanoid 46:469d0061df5d 5330 // post: poke_access_list[poke_access_list_index].addr_min is lowest address of range
whismanoid 46:469d0061df5d 5331 // post: poke_access_list[poke_access_list_index].addr_max is highest address of range
whismanoid 46:469d0061df5d 5332 // post: poke_access_list[poke_access_list_index].name
whismanoid 46:469d0061df5d 5333 // post: poke_access_list[poke_access_list_index].can_flash_write_read 8=end of list, 4=flashPoke, 2=ramPoke, 1=read
whismanoid 46:469d0061df5d 5334 cmdLine.serial().printf("\r\npoke_access_list[%d] %5s 0x%8.8lx - 0x%8.8lx access %x ",
whismanoid 46:469d0061df5d 5335 poke_access_list_index,
whismanoid 46:469d0061df5d 5336 poke_access_list[poke_access_list_index].name,
whismanoid 46:469d0061df5d 5337 poke_access_list[poke_access_list_index].addr_min,
whismanoid 46:469d0061df5d 5338 poke_access_list[poke_access_list_index].addr_max,
whismanoid 46:469d0061df5d 5339 poke_access_list[poke_access_list_index].can_flash_write_read);
whismanoid 46:469d0061df5d 5340 if (poke_access_list[poke_access_list_index].can_flash_write_read & 0x04)
whismanoid 46:469d0061df5d 5341 {
whismanoid 46:469d0061df5d 5342 cmdLine.serial().printf("flashPoke ");
whismanoid 46:469d0061df5d 5343 }
whismanoid 46:469d0061df5d 5344 if (poke_access_list[poke_access_list_index].can_flash_write_read & 0x02)
whismanoid 46:469d0061df5d 5345 {
whismanoid 46:469d0061df5d 5346 cmdLine.serial().printf("ramPoke ");
whismanoid 46:469d0061df5d 5347 }
whismanoid 46:469d0061df5d 5348 if (poke_access_list[poke_access_list_index].can_flash_write_read & 0x01)
whismanoid 46:469d0061df5d 5349 {
whismanoid 46:469d0061df5d 5350 cmdLine.serial().printf("read ");
whismanoid 46:469d0061df5d 5351 }
whismanoid 46:469d0061df5d 5352 //
whismanoid 46:469d0061df5d 5353 //~ cmdLine.serial().printf("\r\n0x%8.8lx: ", peek_addr);
whismanoid 46:469d0061df5d 5354 if ((peek_addr & 0x0F) != 0)
whismanoid 46:469d0061df5d 5355 {
whismanoid 46:469d0061df5d 5356 cmdLine.serial().printf("\r\n%5s 0x%8.8lx: ", poke_access_list[poke_access_list_index].name, peek_addr);
whismanoid 46:469d0061df5d 5357 }
whismanoid 46:469d0061df5d 5358 while (peek_len > 0)
whismanoid 46:469d0061df5d 5359 {
whismanoid 46:469d0061df5d 5360 if ((peek_addr & 0x0F) == 0)
whismanoid 46:469d0061df5d 5361 {
whismanoid 46:469d0061df5d 5362 poke_access_list_index = search_poke_access_list(peek_addr);
whismanoid 46:469d0061df5d 5363 cmdLine.serial().printf("\r\n%5s 0x%8.8lx: ", poke_access_list[poke_access_list_index].name, peek_addr);
whismanoid 46:469d0061df5d 5364 }
whismanoid 46:469d0061df5d 5365 if (poke_access_list[poke_access_list_index].can_flash_write_read & 1)
whismanoid 46:469d0061df5d 5366 {
whismanoid 46:469d0061df5d 5367 // read memory by using peek_addr as a uint32_t pointer
whismanoid 46:469d0061df5d 5368 cmdLine.serial().printf("0x%8.8lx ", *((uint32_t*)peek_addr));
whismanoid 46:469d0061df5d 5369 }
whismanoid 46:469d0061df5d 5370 else
whismanoid 46:469d0061df5d 5371 {
whismanoid 46:469d0061df5d 5372 // read operation is forbidden in this address range
whismanoid 46:469d0061df5d 5373 cmdLine.serial().printf("__________ ");
whismanoid 46:469d0061df5d 5374 }
whismanoid 46:469d0061df5d 5375 peek_addr += 4;
whismanoid 46:469d0061df5d 5376 peek_len--;
whismanoid 46:469d0061df5d 5377 }
whismanoid 46:469d0061df5d 5378 }
whismanoid 46:469d0061df5d 5379 # endif // HAS_FLASH_PEEK
whismanoid 46:469d0061df5d 5380 # if HAS_FLASH_POKE
whismanoid 46:469d0061df5d 5381 // flash poke memory %F poke=0x0007ff00 0xab 0xcd 0xef 0x27 0x18 0x28 -- erase/write flash page
whismanoid 46:469d0061df5d 5382 // get "poke" keyword, do poke operation if keyword is present
whismanoid 46:469d0061df5d 5383 uint32_t poke_addr = 0x20000000;
whismanoid 46:469d0061df5d 5384 if (cmdLine.parse_uint32_hex("poke", poke_addr))
whismanoid 46:469d0061df5d 5385 {
whismanoid 46:469d0061df5d 5386 size_t byteCount = 0;
whismanoid 46:469d0061df5d 5387 uint8_t pokeDataBuf[16];
whismanoid 46:469d0061df5d 5388 // get list of bytes after processing keywords
whismanoid 46:469d0061df5d 5389 // bool parse_byteCount_byteList_hex(size_t& byteCount, char *mosiDataBuf, size_t mosiDataBufSize);
whismanoid 46:469d0061df5d 5390 if (cmdLine.parse_byteCount_byteList_hex(byteCount, ((char *)pokeDataBuf), sizeof(pokeDataBuf)))
whismanoid 46:469d0061df5d 5391 {
whismanoid 46:469d0061df5d 5392 // #312 write memory at poke_addr
whismanoid 46:469d0061df5d 5393 poke_addr = poke_addr &~ 0x00000003; // 32-bit word align
whismanoid 46:469d0061df5d 5394 //
whismanoid 46:469d0061df5d 5395 // scan poke_access_list[] for poke_addr
whismanoid 46:469d0061df5d 5396 int poke_access_list_index = search_poke_access_list(poke_addr);
whismanoid 46:469d0061df5d 5397 // post: poke_access_list[poke_access_list_index].addr_min is lowest address of range
whismanoid 46:469d0061df5d 5398 // post: poke_access_list[poke_access_list_index].addr_max is highest address of range
whismanoid 46:469d0061df5d 5399 // post: poke_access_list[poke_access_list_index].name
whismanoid 46:469d0061df5d 5400 // post: poke_access_list[poke_access_list_index].can_flash_write_read 8=end of list, 4=flashPoke, 2=ramPoke, 1=read
whismanoid 46:469d0061df5d 5401 cmdLine.serial().printf("\r\npoke_access_list[%d] %5s 0x%8.8lx - 0x%8.8lx access %x ",
whismanoid 46:469d0061df5d 5402 poke_access_list_index,
whismanoid 46:469d0061df5d 5403 poke_access_list[poke_access_list_index].name,
whismanoid 46:469d0061df5d 5404 poke_access_list[poke_access_list_index].addr_min,
whismanoid 46:469d0061df5d 5405 poke_access_list[poke_access_list_index].addr_max,
whismanoid 46:469d0061df5d 5406 poke_access_list[poke_access_list_index].can_flash_write_read);
whismanoid 46:469d0061df5d 5407 if (poke_access_list[poke_access_list_index].can_flash_write_read & 0x04)
whismanoid 46:469d0061df5d 5408 {
whismanoid 46:469d0061df5d 5409 cmdLine.serial().printf("flashPoke ");
whismanoid 46:469d0061df5d 5410 }
whismanoid 46:469d0061df5d 5411 if (poke_access_list[poke_access_list_index].can_flash_write_read & 0x02)
whismanoid 46:469d0061df5d 5412 {
whismanoid 46:469d0061df5d 5413 cmdLine.serial().printf("ramPoke ");
whismanoid 46:469d0061df5d 5414 }
whismanoid 46:469d0061df5d 5415 if (poke_access_list[poke_access_list_index].can_flash_write_read & 0x01)
whismanoid 46:469d0061df5d 5416 {
whismanoid 46:469d0061df5d 5417 cmdLine.serial().printf("read ");
whismanoid 46:469d0061df5d 5418 }
whismanoid 46:469d0061df5d 5419 //
whismanoid 46:469d0061df5d 5420 if (poke_access_list[poke_access_list_index].can_flash_write_read & 0x0004)
whismanoid 46:469d0061df5d 5421 {
whismanoid 46:469d0061df5d 5422 //------------------------------
whismanoid 46:469d0061df5d 5423 // mbed interface to on-chip Flash
whismanoid 46:469d0061df5d 5424 // FlashIAP flash;
whismanoid 46:469d0061df5d 5425 // Maxim MAX32625 flash interface flc.h not .\mbed-os\drivers\FlashIAP.h
whismanoid 46:469d0061df5d 5426 // .\mbed-os\targets\TARGET_Maxim\TARGET_MAX32625\mxc\flc.h
whismanoid 46:469d0061df5d 5427 // .\mbed-os\targets\TARGET_Maxim\TARGET_MAX32625\mxc\flc.c
whismanoid 46:469d0061df5d 5428 //
whismanoid 46:469d0061df5d 5429 // MAX32625IWY+ Flash 512Kbyte in 64 pages of 8Kbyte per page
whismanoid 46:469d0061df5d 5430 static uint8_t pageBuf[8192];
whismanoid 46:469d0061df5d 5431 uint32_t pageBuf_addr = poke_addr &~ 0x1FFF; // 32-bit word align, 8Kbyte page boundary
whismanoid 46:469d0061df5d 5432 //
whismanoid 46:469d0061df5d 5433 // poke_addr is in FLASH address range, there's more steps
whismanoid 46:469d0061df5d 5434 cmdLine.serial().printf("\r\n%5s 0x%8.8lx: flashPoke ...",
whismanoid 46:469d0061df5d 5435 poke_access_list[poke_access_list_index].name, poke_addr);
whismanoid 46:469d0061df5d 5436 // initialize flash memory interface
whismanoid 46:469d0061df5d 5437 // FlashIAP: FlashIAP flash; flash.init();
whismanoid 46:469d0061df5d 5438 // int FLC_Init(void);
whismanoid 46:469d0061df5d 5439 // returns E_NO_ERROR or E_BUSY or E_UNKNOWN
whismanoid 46:469d0061df5d 5440 cmdLine.serial().printf("FLC_Init ");
whismanoid 46:469d0061df5d 5441 if (FLC_Init() != E_NO_ERROR)
whismanoid 46:469d0061df5d 5442 {
whismanoid 46:469d0061df5d 5443 cmdLine.serial().printf("FAIL ");
whismanoid 46:469d0061df5d 5444 break; // can't perform the command
whismanoid 46:469d0061df5d 5445 }
whismanoid 46:469d0061df5d 5446 cmdLine.serial().printf("PASS ");
whismanoid 46:469d0061df5d 5447 //
whismanoid 46:469d0061df5d 5448 cmdLine.serial().printf("\r\n%5s 0x%8.8lx: start of 8KByte page containing 0x%8.8lx...",
whismanoid 46:469d0061df5d 5449 poke_access_list[poke_access_list_index].name, pageBuf_addr, poke_addr);
whismanoid 46:469d0061df5d 5450 //
whismanoid 46:469d0061df5d 5451 // page read, update buffer from command line bytes, page erase, page write
whismanoid 46:469d0061df5d 5452 cmdLine.serial().printf("\r\nPgBuf 0x%8.8lx: copy page buffer, len=0x%x words = 0x%x bytes...",
whismanoid 46:469d0061df5d 5453 pageBuf_addr, sizeof(pageBuf)/4, sizeof(pageBuf));
whismanoid 46:469d0061df5d 5454 // memcpy(uint32_t *out, uint32_t *in, unsigned int count)
whismanoid 46:469d0061df5d 5455 memcpy(&pageBuf[0], (uint32_t*)pageBuf_addr, sizeof(pageBuf));
whismanoid 46:469d0061df5d 5456 //
whismanoid 46:469d0061df5d 5457 cmdLine.serial().printf("\r\nPgBuf 0x%8.8lx: udpate page buffer ...", poke_addr);
whismanoid 46:469d0061df5d 5458 // update buffer from command line bytes using my cmdline lib
whismanoid 46:469d0061df5d 5459 // ignore pokeDataBuf[0], its 0x0F because this is command F. :(
whismanoid 46:469d0061df5d 5460 for (size_t byteIndex = 1; byteIndex < byteCount; byteIndex += 4)
whismanoid 46:469d0061df5d 5461 {
whismanoid 46:469d0061df5d 5462 // How to handle big-endian vs little-endian?
whismanoid 46:469d0061df5d 5463 pageBuf[(poke_addr - pageBuf_addr + byteIndex-1) + 0] = pokeDataBuf[byteIndex + 3];
whismanoid 46:469d0061df5d 5464 pageBuf[(poke_addr - pageBuf_addr + byteIndex-1) + 1] = pokeDataBuf[byteIndex + 2];
whismanoid 46:469d0061df5d 5465 pageBuf[(poke_addr - pageBuf_addr + byteIndex-1) + 2] = pokeDataBuf[byteIndex + 1];
whismanoid 46:469d0061df5d 5466 pageBuf[(poke_addr - pageBuf_addr + byteIndex-1) + 3] = pokeDataBuf[byteIndex + 0];
whismanoid 46:469d0061df5d 5467 // seems 0x12 0x34 0x56 0x78 becomes 0x78563412
whismanoid 46:469d0061df5d 5468 uint32_t wordbuf = 0
whismanoid 46:469d0061df5d 5469 | ((uint32_t)pokeDataBuf[byteIndex + 0] << 24)
whismanoid 46:469d0061df5d 5470 | ((uint32_t)pokeDataBuf[byteIndex + 1] << 16)
whismanoid 46:469d0061df5d 5471 | ((uint32_t)pokeDataBuf[byteIndex + 2] << 8)
whismanoid 46:469d0061df5d 5472 | ((uint32_t)pokeDataBuf[byteIndex + 3] << 0)
whismanoid 46:469d0061df5d 5473 ;
whismanoid 46:469d0061df5d 5474 cmdLine.serial().printf("\r\nPgBuf[0x%8.8lx] = FLASH 0x%8.8lx: ",
whismanoid 46:469d0061df5d 5475 (poke_addr - pageBuf_addr + byteIndex-1), (poke_addr + byteIndex-1));
whismanoid 46:469d0061df5d 5476 cmdLine.serial().printf("0x%8.8lx ", wordbuf);
whismanoid 46:469d0061df5d 5477 // poke_addr += 4;
whismanoid 46:469d0061df5d 5478 }
whismanoid 46:469d0061df5d 5479 //
whismanoid 46:469d0061df5d 5480 cmdLine.serial().printf("\r\n%5s 0x%8.8lx: erase page ...",
whismanoid 46:469d0061df5d 5481 poke_access_list[poke_access_list_index].name, pageBuf_addr);
whismanoid 46:469d0061df5d 5482 // page erase using flash.erase(addr, flash.get_sector_size(addr));
whismanoid 46:469d0061df5d 5483 // int FLC_PageErase(uint32_t address, MXC_V_FLC_ERASE_CODE_PAGE_ERASE, MXC_V_FLC_FLSH_UNLOCK_KEY);
whismanoid 46:469d0061df5d 5484 // @param address Address of the page to be erased.
whismanoid 46:469d0061df5d 5485 // @param erase_code Flash erase code; defined as
whismanoid 46:469d0061df5d 5486 // #MXC_V_FLC_ERASE_CODE_PAGE_ERASE for page erase
whismanoid 46:469d0061df5d 5487 // @param unlock_key Unlock key, #MXC_V_FLC_FLSH_UNLOCK_KEY.
whismanoid 46:469d0061df5d 5488 // returns E_NO_ERROR or else
whismanoid 46:469d0061df5d 5489 if (FLC_PageErase(pageBuf_addr, MXC_V_FLC_ERASE_CODE_PAGE_ERASE,
whismanoid 46:469d0061df5d 5490 MXC_V_FLC_FLSH_UNLOCK_KEY) != E_NO_ERROR)
whismanoid 46:469d0061df5d 5491 {
whismanoid 46:469d0061df5d 5492 cmdLine.serial().printf("FAIL ");
whismanoid 46:469d0061df5d 5493 break; // can't perform the command
whismanoid 46:469d0061df5d 5494 }
whismanoid 46:469d0061df5d 5495 cmdLine.serial().printf("PASS ");
whismanoid 46:469d0061df5d 5496 //
whismanoid 46:469d0061df5d 5497 cmdLine.serial().printf("\r\n%5s 0x%8.8lx: write page buffer ...",
whismanoid 46:469d0061df5d 5498 poke_access_list[poke_access_list_index].name, pageBuf_addr);
whismanoid 46:469d0061df5d 5499 // page write using flash.program(page_buffer, addr, page_size);
whismanoid 46:469d0061df5d 5500 // int FLC_Write(uint32_t address, const void *data, uint32_t length, MXC_V_FLC_FLSH_UNLOCK_KEY);
whismanoid 46:469d0061df5d 5501 // @param address Start address for desired write. @note This address
whismanoid 46:469d0061df5d 5502 // must be 32-bit word aligned
whismanoid 46:469d0061df5d 5503 // @param data A pointer to the buffer containing the data to write.
whismanoid 46:469d0061df5d 5504 // @param length Size of the data to write in bytes. @note The length
whismanoid 46:469d0061df5d 5505 // must be in 32-bit multiples.
whismanoid 46:469d0061df5d 5506 // @param unlock_key Unlock key, #MXC_V_FLC_FLSH_UNLOCK_KEY.
whismanoid 46:469d0061df5d 5507 // returns E_NO_ERROR or else
whismanoid 46:469d0061df5d 5508 if (FLC_Write(pageBuf_addr, (uint32_t*)&pageBuf[0], sizeof(pageBuf),
whismanoid 46:469d0061df5d 5509 MXC_V_FLC_FLSH_UNLOCK_KEY) != E_NO_ERROR)
whismanoid 46:469d0061df5d 5510 {
whismanoid 46:469d0061df5d 5511 cmdLine.serial().printf("FAIL ");
whismanoid 46:469d0061df5d 5512 break; // can't perform the command
whismanoid 46:469d0061df5d 5513 }
whismanoid 46:469d0061df5d 5514 cmdLine.serial().printf("PASS ");
whismanoid 46:469d0061df5d 5515 //
whismanoid 46:469d0061df5d 5516 // FlashIAP: close flash memory interface flash.deinit();
whismanoid 46:469d0061df5d 5517 //
whismanoid 46:469d0061df5d 5518 // verify buffer matches flash page, or fail
whismanoid 46:469d0061df5d 5519 // for verification, perform %F peek=(poke_addr) len=(from byteCount)
whismanoid 46:469d0061df5d 5520 // hex dump memory from peek_addr length peek_len
whismanoid 46:469d0061df5d 5521 cmdLine.serial().printf("\r\n%5s 0x%8.8lx: verify page buffer ...",
whismanoid 46:469d0061df5d 5522 poke_access_list[poke_access_list_index].name, pageBuf_addr);
whismanoid 46:469d0061df5d 5523 int verify_failed = 0;
whismanoid 46:469d0061df5d 5524 peek_addr = poke_addr;
whismanoid 46:469d0061df5d 5525 peek_len = (byteCount - 1)/4;
whismanoid 46:469d0061df5d 5526 //~ cmdLine.serial().printf("\r\n0x%8.8lx: ", peek_addr);
whismanoid 46:469d0061df5d 5527 if ((peek_addr & 0x0F) != 0)
whismanoid 46:469d0061df5d 5528 {
whismanoid 46:469d0061df5d 5529 cmdLine.serial().printf("\r\n%5s 0x%8.8lx: ", poke_access_list[poke_access_list_index].name, peek_addr);
whismanoid 46:469d0061df5d 5530 }
whismanoid 46:469d0061df5d 5531 while (peek_len > 0)
whismanoid 46:469d0061df5d 5532 {
whismanoid 46:469d0061df5d 5533 if ((peek_addr & 0x0F) == 0)
whismanoid 46:469d0061df5d 5534 {
whismanoid 46:469d0061df5d 5535 cmdLine.serial().printf("\r\n%5s 0x%8.8lx: ", poke_access_list[poke_access_list_index].name, peek_addr);
whismanoid 46:469d0061df5d 5536 }
whismanoid 46:469d0061df5d 5537 // read memory by using peek_addr as a uint32_t pointer
whismanoid 46:469d0061df5d 5538 // cmdLine.serial().printf("0x%8.8lx ", *((uint32_t*)peek_addr));
whismanoid 46:469d0061df5d 5539 // #312 %F peek verify, report fail if mismatch page buffer
whismanoid 46:469d0061df5d 5540 uint32_t expect_data = 0
whismanoid 46:469d0061df5d 5541 | ((uint32_t)pageBuf[peek_addr - pageBuf_addr + 3] << 24)
whismanoid 46:469d0061df5d 5542 | ((uint32_t)pageBuf[peek_addr - pageBuf_addr + 2] << 16)
whismanoid 46:469d0061df5d 5543 | ((uint32_t)pageBuf[peek_addr - pageBuf_addr + 1] << 8)
whismanoid 46:469d0061df5d 5544 | ((uint32_t)pageBuf[peek_addr - pageBuf_addr + 0] << 0)
whismanoid 46:469d0061df5d 5545 ;
whismanoid 46:469d0061df5d 5546 uint32_t actual_data = *((uint32_t*)peek_addr);
whismanoid 46:469d0061df5d 5547 if (actual_data == expect_data)
whismanoid 46:469d0061df5d 5548 {
whismanoid 46:469d0061df5d 5549 // this word matches
whismanoid 46:469d0061df5d 5550 cmdLine.serial().printf("=0x%8.8lx ", actual_data);
whismanoid 46:469d0061df5d 5551 }
whismanoid 46:469d0061df5d 5552 else
whismanoid 46:469d0061df5d 5553 {
whismanoid 46:469d0061df5d 5554 // mismatch, verification failed
whismanoid 46:469d0061df5d 5555 cmdLine.serial().printf("#0x%8.8lx(expected 0x%8.8lx)\r\n%5s 0x%8.8lx: ",
whismanoid 46:469d0061df5d 5556 actual_data, expect_data,
whismanoid 46:469d0061df5d 5557 poke_access_list[poke_access_list_index].name, peek_addr);
whismanoid 46:469d0061df5d 5558 verify_failed++;
whismanoid 46:469d0061df5d 5559 }
whismanoid 46:469d0061df5d 5560 //
whismanoid 46:469d0061df5d 5561 peek_addr += 4;
whismanoid 46:469d0061df5d 5562 peek_len--;
whismanoid 46:469d0061df5d 5563 }
whismanoid 46:469d0061df5d 5564 cmdLine.serial().printf("\r\n%5s 0x%8.8lx: verify page buffer ",
whismanoid 46:469d0061df5d 5565 poke_access_list[poke_access_list_index].name, pageBuf_addr);
whismanoid 46:469d0061df5d 5566 if (verify_failed)
whismanoid 46:469d0061df5d 5567 {
whismanoid 46:469d0061df5d 5568 cmdLine.serial().printf("FAIL ");
whismanoid 46:469d0061df5d 5569 break; // can't perform the command
whismanoid 46:469d0061df5d 5570 }
whismanoid 46:469d0061df5d 5571 cmdLine.serial().printf("PASS ");
whismanoid 46:469d0061df5d 5572 //
whismanoid 46:469d0061df5d 5573 } // end of flashPoke operation
whismanoid 46:469d0061df5d 5574 else if (poke_access_list[poke_access_list_index].can_flash_write_read & 0x0002)
whismanoid 46:469d0061df5d 5575 {
whismanoid 46:469d0061df5d 5576 // poke_addr is in RAM address range, write directly
whismanoid 46:469d0061df5d 5577 cmdLine.serial().printf("\r\n%5s 0x%8.8lx: ramPoke ", poke_access_list[poke_access_list_index].name, poke_addr);
whismanoid 46:469d0061df5d 5578 // ignore pokeDataBuf[0], its 0x0F because this is command F. :(
whismanoid 46:469d0061df5d 5579 for (size_t byteIndex = 1; byteIndex < byteCount; byteIndex += 4)
whismanoid 46:469d0061df5d 5580 {
whismanoid 46:469d0061df5d 5581 // How to handle big-endian vs little-endian?
whismanoid 46:469d0061df5d 5582 // seems 0x12 0x34 0x56 0x78 becomes 0x78563412
whismanoid 46:469d0061df5d 5583 poke_addr += 4;
whismanoid 46:469d0061df5d 5584 uint32_t wordbuf = 0
whismanoid 46:469d0061df5d 5585 | ((uint32_t)pokeDataBuf[byteIndex + 0] << 24)
whismanoid 46:469d0061df5d 5586 | ((uint32_t)pokeDataBuf[byteIndex + 1] << 16)
whismanoid 46:469d0061df5d 5587 | ((uint32_t)pokeDataBuf[byteIndex + 2] << 8)
whismanoid 46:469d0061df5d 5588 | ((uint32_t)pokeDataBuf[byteIndex + 3] << 0)
whismanoid 46:469d0061df5d 5589 ;
whismanoid 46:469d0061df5d 5590 cmdLine.serial().printf("0x%8.8lx ", wordbuf);
whismanoid 46:469d0061df5d 5591 //
whismanoid 46:469d0061df5d 5592 // write RAM by using poke_addr as a uint32_t pointer
whismanoid 46:469d0061df5d 5593 *((uint32_t*)poke_addr) = wordbuf;
whismanoid 46:469d0061df5d 5594 //
whismanoid 46:469d0061df5d 5595 // verify?
whismanoid 46:469d0061df5d 5596 if (*((uint32_t*)poke_addr) == wordbuf)
whismanoid 46:469d0061df5d 5597 {
whismanoid 46:469d0061df5d 5598 cmdLine.serial().printf("PASS ");
whismanoid 46:469d0061df5d 5599 }
whismanoid 46:469d0061df5d 5600 else
whismanoid 46:469d0061df5d 5601 {
whismanoid 46:469d0061df5d 5602 cmdLine.serial().printf("FAIL ");
whismanoid 46:469d0061df5d 5603 }
whismanoid 46:469d0061df5d 5604 }
whismanoid 46:469d0061df5d 5605 } // end of ramPoke operation
whismanoid 46:469d0061df5d 5606 else
whismanoid 46:469d0061df5d 5607 {
whismanoid 46:469d0061df5d 5608 cmdLine.serial().printf("\r\n%5s 0x%8.8lx: no write here ", poke_access_list[poke_access_list_index].name, poke_addr);
whismanoid 46:469d0061df5d 5609 }
whismanoid 46:469d0061df5d 5610 }
whismanoid 46:469d0061df5d 5611 }
whismanoid 46:469d0061df5d 5612 # endif // HAS_FLASH_POKE
whismanoid 46:469d0061df5d 5613 # if HAS_FLASH_LOAD_SAVE
whismanoid 48:18647e0516f2 5614 uint32_t save_arg = save_arg_default;
whismanoid 46:469d0061df5d 5615 if (cmdLine.parse_uint32_hex("save", save_arg))
whismanoid 46:469d0061df5d 5616 {
whismanoid 46:469d0061df5d 5617 Save_flash_page_configuration_back_up(cmdLine, save_arg);
whismanoid 46:469d0061df5d 5618 }
whismanoid 48:18647e0516f2 5619 uint32_t load_arg = load_arg_default;
whismanoid 46:469d0061df5d 5620 if (cmdLine.parse_uint32_hex("load", load_arg))
whismanoid 46:469d0061df5d 5621 {
whismanoid 46:469d0061df5d 5622 Load_flash_page_configuration_back_up(cmdLine, load_arg);
whismanoid 46:469d0061df5d 5623 }
whismanoid 46:469d0061df5d 5624 # endif // HAS_FLASH_LOAD_SAVE
whismanoid 46:469d0061df5d 5625 }
whismanoid 46:469d0061df5d 5626 break;
whismanoid 46:469d0061df5d 5627 #endif // defined(HAS_FLASH_PEEK) || defined(HAS_FLASH_POKE)
whismanoid 46:469d0061df5d 5628 //--------------------------------------------------
whismanoid 23:c6c652bef4b9 5629 #if USE_DATALOGGER_CommandTable // Run_command_table(onButton1_command_table)
whismanoid 23:c6c652bef4b9 5630 // command_table: list of commands to perform on button press
whismanoid 23:c6c652bef4b9 5631 case 'B': case 'b':
whismanoid 23:c6c652bef4b9 5632 {
whismanoid 24:032f3683cb2a 5633 int command_table_button_index = 1;
whismanoid 23:c6c652bef4b9 5634 // %B1 submenu for Button1
whismanoid 23:c6c652bef4b9 5635 // future: %B2 submenu for Button2
whismanoid 23:c6c652bef4b9 5636 // future: %B3 submenu for Button3
whismanoid 23:c6c652bef4b9 5637 #if HAS_BUTTON1_DEMO_INTERRUPT
whismanoid 23:c6c652bef4b9 5638 // cmdLine[2] == '1' selects onButton1_command_table
whismanoid 23:c6c652bef4b9 5639 char** command_table = onButton1_command_table;
whismanoid 23:c6c652bef4b9 5640 #endif
whismanoid 24:032f3683cb2a 5641 switch(cmdLine[2])
whismanoid 24:032f3683cb2a 5642 {
whismanoid 24:032f3683cb2a 5643 default:
whismanoid 24:032f3683cb2a 5644 case '1': case 'A': case 'a': case '!':
whismanoid 24:032f3683cb2a 5645 #if HAS_BUTTON1_DEMO_INTERRUPT
whismanoid 24:032f3683cb2a 5646 command_table_button_index = 1;
whismanoid 24:032f3683cb2a 5647 command_table = onButton1_command_table;
whismanoid 24:032f3683cb2a 5648 #endif
whismanoid 24:032f3683cb2a 5649 break;
whismanoid 24:032f3683cb2a 5650 case '2': case 'B': case 'b': case '@':
whismanoid 23:c6c652bef4b9 5651 #if HAS_BUTTON2_DEMO_INTERRUPT
whismanoid 24:032f3683cb2a 5652 command_table_button_index = 2;
whismanoid 24:032f3683cb2a 5653 command_table = onButton2_command_table;
whismanoid 24:032f3683cb2a 5654 #endif
whismanoid 24:032f3683cb2a 5655 break;
whismanoid 24:032f3683cb2a 5656 case '3': case 'C': case 'c': case '#':
whismanoid 23:c6c652bef4b9 5657 #if HAS_BUTTON3_DEMO_INTERRUPT
whismanoid 24:032f3683cb2a 5658 command_table_button_index = 3;
whismanoid 24:032f3683cb2a 5659 command_table = onButton3_command_table;
whismanoid 24:032f3683cb2a 5660 #endif
whismanoid 24:032f3683cb2a 5661 break;
whismanoid 29:6a9edb6e973b 5662 case '4':
whismanoid 29:6a9edb6e973b 5663 #if HAS_BUTTON4_DEMO_INTERRUPT
whismanoid 29:6a9edb6e973b 5664 command_table_button_index = 4;
whismanoid 29:6a9edb6e973b 5665 command_table = onButton4_command_table;
whismanoid 29:6a9edb6e973b 5666 #endif
whismanoid 29:6a9edb6e973b 5667 break;
whismanoid 29:6a9edb6e973b 5668 case '5':
whismanoid 29:6a9edb6e973b 5669 #if HAS_BUTTON5_DEMO_INTERRUPT
whismanoid 29:6a9edb6e973b 5670 command_table_button_index = 5;
whismanoid 29:6a9edb6e973b 5671 command_table = onButton5_command_table;
whismanoid 29:6a9edb6e973b 5672 #endif
whismanoid 29:6a9edb6e973b 5673 break;
whismanoid 29:6a9edb6e973b 5674 case '6':
whismanoid 29:6a9edb6e973b 5675 #if HAS_BUTTON6_DEMO_INTERRUPT
whismanoid 29:6a9edb6e973b 5676 command_table_button_index = 6;
whismanoid 29:6a9edb6e973b 5677 command_table = onButton6_command_table;
whismanoid 29:6a9edb6e973b 5678 #endif
whismanoid 29:6a9edb6e973b 5679 break;
whismanoid 29:6a9edb6e973b 5680 case '7':
whismanoid 29:6a9edb6e973b 5681 #if HAS_BUTTON7_DEMO_INTERRUPT
whismanoid 29:6a9edb6e973b 5682 command_table_button_index = 7;
whismanoid 29:6a9edb6e973b 5683 command_table = onButton7_command_table;
whismanoid 29:6a9edb6e973b 5684 #endif
whismanoid 29:6a9edb6e973b 5685 break;
whismanoid 29:6a9edb6e973b 5686 case '8':
whismanoid 29:6a9edb6e973b 5687 #if HAS_BUTTON8_DEMO_INTERRUPT
whismanoid 29:6a9edb6e973b 5688 command_table_button_index = 8;
whismanoid 29:6a9edb6e973b 5689 command_table = onButton8_command_table;
whismanoid 29:6a9edb6e973b 5690 #endif
whismanoid 29:6a9edb6e973b 5691 break;
whismanoid 29:6a9edb6e973b 5692 case '9':
whismanoid 29:6a9edb6e973b 5693 #if HAS_BUTTON9_DEMO_INTERRUPT
whismanoid 29:6a9edb6e973b 5694 command_table_button_index = 9;
whismanoid 29:6a9edb6e973b 5695 command_table = onButton9_command_table;
whismanoid 29:6a9edb6e973b 5696 #endif
whismanoid 29:6a9edb6e973b 5697 break;
whismanoid 24:032f3683cb2a 5698 }
whismanoid 24:032f3683cb2a 5699 //
whismanoid 23:c6c652bef4b9 5700 switch(cmdLine[3])
whismanoid 23:c6c652bef4b9 5701 {
whismanoid 23:c6c652bef4b9 5702 case '@':
whismanoid 23:c6c652bef4b9 5703 {
whismanoid 23:c6c652bef4b9 5704 // %B1@ view/edit command table, similar to L@ for action table
whismanoid 23:c6c652bef4b9 5705 int editRowIndex = 0;
whismanoid 23:c6c652bef4b9 5706 int command_table_row_count = 0;
whismanoid 23:c6c652bef4b9 5707 for (int lineIndex = 0; lineIndex < COMMAND_TABLE_ROW_MAX; lineIndex++) {
whismanoid 23:c6c652bef4b9 5708 if (command_table[lineIndex] == NULL) { break; }
whismanoid 23:c6c652bef4b9 5709 if (command_table[lineIndex][0] == '\0') { break; }
whismanoid 24:032f3683cb2a 5710 command_table_row_count = lineIndex+1;
whismanoid 24:032f3683cb2a 5711 }
whismanoid 24:032f3683cb2a 5712 //
whismanoid 24:032f3683cb2a 5713 // ignore extra spaces before the command
whismanoid 24:032f3683cb2a 5714 // find argIndex such that cmdLine[argIndex] is the start of the second word
whismanoid 24:032f3683cb2a 5715 int argIndex;
whismanoid 24:032f3683cb2a 5716 for (argIndex = 5; cmdLine[argIndex] != '\0'; argIndex++)
whismanoid 24:032f3683cb2a 5717 {
whismanoid 24:032f3683cb2a 5718 if (cmdLine[argIndex] == ' ') break;
whismanoid 24:032f3683cb2a 5719 }
whismanoid 24:032f3683cb2a 5720 for (; cmdLine[argIndex] != '\0'; argIndex++)
whismanoid 24:032f3683cb2a 5721 {
whismanoid 24:032f3683cb2a 5722 if (cmdLine[argIndex] != ' ') break;
whismanoid 23:c6c652bef4b9 5723 }
whismanoid 23:c6c652bef4b9 5724 //
whismanoid 23:c6c652bef4b9 5725 // Edit the contents of command_table
whismanoid 23:c6c652bef4b9 5726 switch (cmdLine[4]) // %B1@... -- Edit the contents of command_table
whismanoid 23:c6c652bef4b9 5727 {
whismanoid 23:c6c652bef4b9 5728 case '0': case '1': case '2': case '3': case '4':
whismanoid 23:c6c652bef4b9 5729 case '5': case '6': case '7': case '8': case '9':
whismanoid 24:032f3683cb2a 5730 // %B1@nnn command replace row number nnn
whismanoid 23:c6c652bef4b9 5731 // edit row data
whismanoid 33:70a28cfe9e01 5732 // get row number to edit from cmdLine[4]
whismanoid 33:70a28cfe9e01 5733 editRowIndex = atoi(cmdLine.str()+4);
whismanoid 23:c6c652bef4b9 5734 if (command_table_row_count > 0) {
whismanoid 23:c6c652bef4b9 5735 // if Datalogger_action_table_row_count == 0 then the table is empty
whismanoid 24:032f3683cb2a 5736 if ((editRowIndex >= 0) && (editRowIndex < command_table_row_count)) {
whismanoid 28:a9a3a9db592b 5737 // avoid replacing with null because that would truncate the table
whismanoid 28:a9a3a9db592b 5738 if (*(cmdLine.str()+argIndex)=='\0') {
whismanoid 28:a9a3a9db592b 5739 cmdLine.serial().printf("\r\n cannot replace row %d with nothing",
whismanoid 28:a9a3a9db592b 5740 editRowIndex);
whismanoid 28:a9a3a9db592b 5741 }
whismanoid 28:a9a3a9db592b 5742 else
whismanoid 28:a9a3a9db592b 5743 {
whismanoid 28:a9a3a9db592b 5744 // update row
whismanoid 28:a9a3a9db592b 5745 cmdLine.serial().printf("\r\n replace row %d with \"%s\"",
whismanoid 28:a9a3a9db592b 5746 editRowIndex, cmdLine.str()+argIndex);
whismanoid 28:a9a3a9db592b 5747 strncpy(command_table[editRowIndex], cmdLine.str()+argIndex, COMMAND_TABLE_COL_MAX-1);
whismanoid 28:a9a3a9db592b 5748 command_table[editRowIndex][COMMAND_TABLE_COL_MAX-1]='\0'; // null character at end of line
whismanoid 28:a9a3a9db592b 5749 }
whismanoid 24:032f3683cb2a 5750 }
whismanoid 33:70a28cfe9e01 5751 } // end if (command_table_row_count > 0)
whismanoid 33:70a28cfe9e01 5752 if ((editRowIndex == command_table_row_count) && (command_table_row_count < COMMAND_TABLE_ROW_MAX)) {
whismanoid 33:70a28cfe9e01 5753 // %B1@nnn command add new row (even though this looks like a replace command) if and only if nnn==next new unassigned line number
whismanoid 33:70a28cfe9e01 5754 //
whismanoid 33:70a28cfe9e01 5755 command_table_row_count++;
whismanoid 33:70a28cfe9e01 5756 cmdLine.serial().printf("\r\n add next row %d containing \"%s\"",
whismanoid 33:70a28cfe9e01 5757 editRowIndex, cmdLine.str()+argIndex);
whismanoid 33:70a28cfe9e01 5758 strncpy(command_table[editRowIndex], cmdLine.str()+argIndex, COMMAND_TABLE_COL_MAX-1);
whismanoid 33:70a28cfe9e01 5759 command_table[editRowIndex][COMMAND_TABLE_COL_MAX-1]='\0'; // null character at end of line
whismanoid 33:70a28cfe9e01 5760 command_table[command_table_row_count][0]='\0'; // empty string marks end of command_table
whismanoid 33:70a28cfe9e01 5761 //
whismanoid 23:c6c652bef4b9 5762 }
whismanoid 33:70a28cfe9e01 5763 //
whismanoid 23:c6c652bef4b9 5764 break;
whismanoid 23:c6c652bef4b9 5765 case '+':
whismanoid 24:032f3683cb2a 5766 // %B1@+ command add new row (if there is room to add)
whismanoid 23:c6c652bef4b9 5767 // add a new row at end of table
whismanoid 23:c6c652bef4b9 5768 if (command_table_row_count < COMMAND_TABLE_ROW_MAX) {
whismanoid 23:c6c652bef4b9 5769 // if command_table_row_count => COMMAND_TABLE_ROW_MAX then the table is full
whismanoid 23:c6c652bef4b9 5770 editRowIndex = command_table_row_count;
whismanoid 28:a9a3a9db592b 5771 // avoid replacing with null because that would truncate the table
whismanoid 28:a9a3a9db592b 5772 if (*(cmdLine.str()+argIndex)=='\0') {
whismanoid 28:a9a3a9db592b 5773 cmdLine.serial().printf("\r\n cannot add new row %d containing nothing",
whismanoid 28:a9a3a9db592b 5774 editRowIndex);
whismanoid 28:a9a3a9db592b 5775 }
whismanoid 28:a9a3a9db592b 5776 else
whismanoid 28:a9a3a9db592b 5777 {
whismanoid 28:a9a3a9db592b 5778 command_table_row_count++;
whismanoid 28:a9a3a9db592b 5779 cmdLine.serial().printf("\r\n add new row %d containing \"%s\"",
whismanoid 28:a9a3a9db592b 5780 editRowIndex, cmdLine.str()+argIndex);
whismanoid 28:a9a3a9db592b 5781 strncpy(command_table[editRowIndex], cmdLine.str()+argIndex, COMMAND_TABLE_COL_MAX-1);
whismanoid 28:a9a3a9db592b 5782 command_table[editRowIndex][COMMAND_TABLE_COL_MAX-1]='\0'; // null character at end of line
whismanoid 28:a9a3a9db592b 5783 command_table[command_table_row_count][0]='\0'; // empty string marks end of command_table
whismanoid 28:a9a3a9db592b 5784 }
whismanoid 23:c6c652bef4b9 5785 }
whismanoid 23:c6c652bef4b9 5786 break;
whismanoid 23:c6c652bef4b9 5787 case '-':
whismanoid 24:032f3683cb2a 5788 // %B1@-nnn delete row number nnn (if list is not empty)
whismanoid 23:c6c652bef4b9 5789 // delete row from table
whismanoid 23:c6c652bef4b9 5790 if (command_table_row_count > 0) {
whismanoid 23:c6c652bef4b9 5791 // if command_table_row_count == 0 then the table is empty
whismanoid 23:c6c652bef4b9 5792 if ((cmdLine[5] == '~') && (cmdLine[6] == '~') && (cmdLine[7] == '~')) {
whismanoid 23:c6c652bef4b9 5793 // %B1@-~~~ clear entire command table
whismanoid 24:032f3683cb2a 5794 cmdLine.serial().printf("\r\n clear entire command table");
whismanoid 23:c6c652bef4b9 5795 command_table_row_count = 0;
whismanoid 28:a9a3a9db592b 5796 command_table[command_table_row_count][0]='\0'; // empty string marks end of command_table
whismanoid 23:c6c652bef4b9 5797 break;
whismanoid 23:c6c652bef4b9 5798 }
whismanoid 24:032f3683cb2a 5799 else
whismanoid 23:c6c652bef4b9 5800 {
whismanoid 24:032f3683cb2a 5801 // %B1@-nnn delete row number nnn (if list is not empty)
whismanoid 24:032f3683cb2a 5802 editRowIndex = atoi(cmdLine.str()+5);
whismanoid 24:032f3683cb2a 5803 if ((editRowIndex >= 0) && (editRowIndex < command_table_row_count)) {
whismanoid 24:032f3683cb2a 5804 cmdLine.serial().printf("\r\n delete row %d", editRowIndex);
whismanoid 24:032f3683cb2a 5805 // delete row editRowIndex from Datalogger_action_table
whismanoid 24:032f3683cb2a 5806 for (int i = editRowIndex; i < (command_table_row_count-1); i++)
whismanoid 24:032f3683cb2a 5807 {
whismanoid 24:032f3683cb2a 5808 // copy row i+1 into row i
whismanoid 24:032f3683cb2a 5809 cmdLine.serial().printf("\r\n copy row %d into row %d: \"%s\"",
whismanoid 24:032f3683cb2a 5810 i+1, i, command_table[i+1]);
whismanoid 24:032f3683cb2a 5811 strncpy(command_table[i], command_table[i+1], COMMAND_TABLE_COL_MAX-1);
whismanoid 28:a9a3a9db592b 5812 command_table[i][COMMAND_TABLE_COL_MAX-1]='\0'; // null character at end of line
whismanoid 24:032f3683cb2a 5813 }
whismanoid 24:032f3683cb2a 5814 command_table_row_count--;
whismanoid 28:a9a3a9db592b 5815 command_table[command_table_row_count][0]='\0'; // empty string marks end of command_table
whismanoid 24:032f3683cb2a 5816 }
whismanoid 23:c6c652bef4b9 5817 }
whismanoid 23:c6c652bef4b9 5818 }
whismanoid 23:c6c652bef4b9 5819 break;
whismanoid 30:07197a430869 5820 case '.': // something other than ! because %B1! means trigger event
whismanoid 30:07197a430869 5821 // pause the button event
whismanoid 30:07197a430869 5822 // TODO: %B1@. disable button response but keep command table contents
whismanoid 23:c6c652bef4b9 5823 //~ Datalogger_action_table_enabled = false;
whismanoid 23:c6c652bef4b9 5824 break;
whismanoid 23:c6c652bef4b9 5825 case '@':
whismanoid 30:07197a430869 5826 // enable the button event
whismanoid 23:c6c652bef4b9 5827 // TODO: %B1@@ enable button response
whismanoid 23:c6c652bef4b9 5828 //~ Datalogger_action_table_enabled = true;
whismanoid 23:c6c652bef4b9 5829 break;
whismanoid 23:c6c652bef4b9 5830 }
whismanoid 23:c6c652bef4b9 5831 //
whismanoid 23:c6c652bef4b9 5832 // Print the contents of command_table
whismanoid 23:c6c652bef4b9 5833 for (int lineIndex = 0; lineIndex < COMMAND_TABLE_ROW_MAX; lineIndex++) {
whismanoid 23:c6c652bef4b9 5834 if (command_table[lineIndex] == NULL) { break; }
whismanoid 23:c6c652bef4b9 5835 if (command_table[lineIndex][0] == '\0') { break; }
whismanoid 24:032f3683cb2a 5836 command_table_row_count = lineIndex+1;
whismanoid 24:032f3683cb2a 5837 cmdLine.serial().printf("\r\n %%B%1d@%d %s",
whismanoid 24:032f3683cb2a 5838 command_table_button_index,
whismanoid 24:032f3683cb2a 5839 lineIndex,
whismanoid 24:032f3683cb2a 5840 command_table[lineIndex]);
whismanoid 23:c6c652bef4b9 5841 }
whismanoid 30:07197a430869 5842 //~ cmdLine.serial().printf("\r\n command_table_row_count = %d/%d",
whismanoid 30:07197a430869 5843 //~ command_table_row_count, COMMAND_TABLE_ROW_MAX);
whismanoid 30:07197a430869 5844 cmdLine.serial().printf("\r\n\r\nEdit Button%d event (used %d/%d, %d free):",
whismanoid 30:07197a430869 5845 command_table_button_index,
whismanoid 30:07197a430869 5846 command_table_row_count,
whismanoid 30:07197a430869 5847 COMMAND_TABLE_ROW_MAX,
whismanoid 30:07197a430869 5848 (COMMAND_TABLE_ROW_MAX - command_table_row_count)
whismanoid 30:07197a430869 5849 );
whismanoid 23:c6c652bef4b9 5850 if (command_table_row_count < COMMAND_TABLE_ROW_MAX) {
whismanoid 23:c6c652bef4b9 5851 // if command_table_row_count => COMMAND_TABLE_ROW_MAX then the table is full
whismanoid 24:032f3683cb2a 5852 cmdLine.serial().printf("\r\n %%B%1d@+ command -- add new row %d at end of table",
whismanoid 24:032f3683cb2a 5853 command_table_button_index,
whismanoid 24:032f3683cb2a 5854 command_table_row_count);
whismanoid 23:c6c652bef4b9 5855 }
whismanoid 23:c6c652bef4b9 5856 if (command_table_row_count > 0) {
whismanoid 23:c6c652bef4b9 5857 // if command_table_row_count == 0 then the table is empty
whismanoid 24:032f3683cb2a 5858 cmdLine.serial().printf("\r\n %%B%1d@%d command -- replace row %d",
whismanoid 24:032f3683cb2a 5859 command_table_button_index,
whismanoid 23:c6c652bef4b9 5860 command_table_row_count-1,
whismanoid 23:c6c652bef4b9 5861 command_table_row_count-1);
whismanoid 24:032f3683cb2a 5862 cmdLine.serial().printf("\r\n %%B%1d@-%d -- delete row %d",
whismanoid 24:032f3683cb2a 5863 command_table_button_index,
whismanoid 24:032f3683cb2a 5864 command_table_row_count-1,
whismanoid 24:032f3683cb2a 5865 command_table_row_count-1);
whismanoid 24:032f3683cb2a 5866 cmdLine.serial().printf("\r\n %%B%1d@-~~~ -- delete all rows",
whismanoid 24:032f3683cb2a 5867 command_table_button_index);
whismanoid 30:07197a430869 5868 //~ cmdLine.serial().printf("\r\n %%B%1d@. -- pause entire command table",
whismanoid 30:07197a430869 5869 //~ command_table_button_index);
whismanoid 30:07197a430869 5870 //~ cmdLine.serial().printf("\r\n %%B%1d@@ -- enable command table",
whismanoid 30:07197a430869 5871 //~ command_table_button_index);
whismanoid 30:07197a430869 5872 cmdLine.serial().printf("\r\n %%B%1d! -- trigger Button%d event",
whismanoid 30:07197a430869 5873 command_table_button_index,
whismanoid 24:032f3683cb2a 5874 command_table_button_index);
whismanoid 23:c6c652bef4b9 5875 }
whismanoid 23:c6c652bef4b9 5876 //
whismanoid 23:c6c652bef4b9 5877 } // case '@' -- %B1@ view/edit command table
whismanoid 23:c6c652bef4b9 5878 break;
whismanoid 23:c6c652bef4b9 5879 case '!':
whismanoid 23:c6c652bef4b9 5880 // TODO: %B1! trigger onButton1FallingEdge() immediately (for test development)
whismanoid 23:c6c652bef4b9 5881 Run_command_table(command_table);
whismanoid 23:c6c652bef4b9 5882 break;
whismanoid 23:c6c652bef4b9 5883 }
whismanoid 23:c6c652bef4b9 5884 }
whismanoid 23:c6c652bef4b9 5885 break;
whismanoid 23:c6c652bef4b9 5886 #endif // USE_DATALOGGER_CommandTable
whismanoid 23:c6c652bef4b9 5887 //--------------------------------------------------
whismanoid 15:37c83ec50ea0 5888 #if HAS_digitalInOuts
whismanoid 15:37c83ec50ea0 5889 case 'H': case 'h':
whismanoid 15:37c83ec50ea0 5890 {
whismanoid 15:37c83ec50ea0 5891 // %Hpin -- digital output high
whismanoid 15:37c83ec50ea0 5892 #if ARDUINO_STYLE
whismanoid 15:37c83ec50ea0 5893 pinMode(pinIndex, OUTPUT); // digital pins 0, 1, 2, .. 13, analog input pins A0, A1, .. A5
whismanoid 15:37c83ec50ea0 5894 digitalWrite(pinIndex, HIGH); // digital pins 0, 1, 2, .. 13, analog input pins A0, A1, .. A5
whismanoid 15:37c83ec50ea0 5895 #else
whismanoid 15:37c83ec50ea0 5896 DigitalInOut& digitalInOutPin = find_digitalInOutPin(pinIndex);
whismanoid 15:37c83ec50ea0 5897 digitalInOutPin.output();
whismanoid 15:37c83ec50ea0 5898 digitalInOutPin.write(1);
whismanoid 15:37c83ec50ea0 5899 #endif
whismanoid 15:37c83ec50ea0 5900 cmdLine.serial().printf(" digitalInOutPin %d Output High ", pinIndex);
whismanoid 15:37c83ec50ea0 5901 }
whismanoid 15:37c83ec50ea0 5902 break;
whismanoid 15:37c83ec50ea0 5903 case 'L': case 'l':
whismanoid 15:37c83ec50ea0 5904 {
whismanoid 15:37c83ec50ea0 5905 // %Lpin -- digital output low
whismanoid 15:37c83ec50ea0 5906 #if ARDUINO_STYLE
whismanoid 15:37c83ec50ea0 5907 pinMode(pinIndex, OUTPUT); // digital pins 0, 1, 2, .. 13, analog input pins A0, A1, .. A5
whismanoid 15:37c83ec50ea0 5908 digitalWrite(pinIndex, LOW); // digital pins 0, 1, 2, .. 13, analog input pins A0, A1, .. A5
whismanoid 15:37c83ec50ea0 5909 #else
whismanoid 15:37c83ec50ea0 5910 DigitalInOut& digitalInOutPin = find_digitalInOutPin(pinIndex);
whismanoid 15:37c83ec50ea0 5911 digitalInOutPin.output();
whismanoid 15:37c83ec50ea0 5912 digitalInOutPin.write(0);
whismanoid 15:37c83ec50ea0 5913 #endif
whismanoid 15:37c83ec50ea0 5914 cmdLine.serial().printf(" digitalInOutPin %d Output Low ", pinIndex);
whismanoid 15:37c83ec50ea0 5915 }
whismanoid 15:37c83ec50ea0 5916 break;
whismanoid 15:37c83ec50ea0 5917 case '?':
whismanoid 15:37c83ec50ea0 5918 {
whismanoid 15:37c83ec50ea0 5919 // %?pin -- digital input
whismanoid 15:37c83ec50ea0 5920 #if ARDUINO_STYLE
whismanoid 15:37c83ec50ea0 5921 pinMode(pinIndex, INPUT); // digital pins 0, 1, 2, .. 13, analog input pins A0, A1, .. A5
whismanoid 15:37c83ec50ea0 5922 #else
whismanoid 15:37c83ec50ea0 5923 DigitalInOut& digitalInOutPin = find_digitalInOutPin(pinIndex);
whismanoid 15:37c83ec50ea0 5924 digitalInOutPin.input();
whismanoid 15:37c83ec50ea0 5925 #endif
whismanoid 15:37c83ec50ea0 5926 serial.printf(" digitalInOutPin %d Input ", pinIndex);
whismanoid 15:37c83ec50ea0 5927 #if ARDUINO_STYLE
whismanoid 15:37c83ec50ea0 5928 int value = digitalRead(pinIndex);
whismanoid 15:37c83ec50ea0 5929 #else
whismanoid 15:37c83ec50ea0 5930 int value = digitalInOutPin.read();
whismanoid 15:37c83ec50ea0 5931 #endif
whismanoid 15:37c83ec50ea0 5932 cmdLine.serial().printf("%d ", value);
whismanoid 15:37c83ec50ea0 5933 }
whismanoid 15:37c83ec50ea0 5934 break;
whismanoid 15:37c83ec50ea0 5935 #endif
whismanoid 15:37c83ec50ea0 5936 //
whismanoid 15:37c83ec50ea0 5937 #if HAS_analogIns
whismanoid 15:37c83ec50ea0 5938 case 'A': case 'a':
whismanoid 15:37c83ec50ea0 5939 {
whismanoid 15:37c83ec50ea0 5940 // %A %Apin -- analog input
whismanoid 37:3f369235e5bc 5941 #if USE_Platform_AIN_Average
whismanoid 37:3f369235e5bc 5942 // %A avg= -- set Platform_AIN_Average_N
whismanoid 37:3f369235e5bc 5943 if (cmdLine.parse_int_dec("avg", Platform_AIN_Average_N))
whismanoid 37:3f369235e5bc 5944 {
whismanoid 37:3f369235e5bc 5945 // Platform_AIN_Average_N was updated
whismanoid 37:3f369235e5bc 5946 }
whismanoid 37:3f369235e5bc 5947 #endif // USE_Platform_AIN_Average
whismanoid 34:a1993a1ee904 5948 #if HAS_Platform_AIN_Calibration
whismanoid 34:a1993a1ee904 5949 // %A cal? view/export raw calibration values for all channels
whismanoid 34:a1993a1ee904 5950 // double calibration_05_normValue_0_1 [NUM_PLATFORM_ANALOG_IN_CHANNELS] = {0.0, ... }
whismanoid 34:a1993a1ee904 5951 // double calibration_05_V [NUM_PLATFORM_ANALOG_IN_CHANNELS] = {0.0, ... }
whismanoid 34:a1993a1ee904 5952 // double calibration_95_normValue_0_1 [NUM_PLATFORM_ANALOG_IN_CHANNELS] = {0.0, ... }
whismanoid 34:a1993a1ee904 5953 // double calibration_95_V [NUM_PLATFORM_ANALOG_IN_CHANNELS] = {0.0, ... }
whismanoid 34:a1993a1ee904 5954 {
whismanoid 34:a1993a1ee904 5955 char valueBuf[16];
whismanoid 34:a1993a1ee904 5956 // bool parse_and_remove_key(const char *key, char *valueBuf, int valueBufLen);
whismanoid 34:a1993a1ee904 5957 if (cmdLine.parse_and_remove_key("cal?", valueBuf, sizeof(valueBuf)))
whismanoid 34:a1993a1ee904 5958 {
whismanoid 34:a1993a1ee904 5959 for (int ch = 0; ch < NUM_PLATFORM_ANALOG_IN_CHANNELS; ch++)
whismanoid 34:a1993a1ee904 5960 {
whismanoid 52:bb09c0f452ec 5961 // %A cl0n= cl0v= ch0n= ch0v= -- unambiguous low and high cal points alternative to cal0n= cal0v= cal0n= cal0v= #354
whismanoid 52:bb09c0f452ec 5962 //cmdLine.serial().printf(" %%A cal%dn=%1.9f cal%dv=%1.9fV cal%dn=%1.9f cal%dv=%1.9fV\r\n",
whismanoid 52:bb09c0f452ec 5963 cmdLine.serial().printf(" %%A cl%dn=%1.9f cl%dv=%1.9fV ch%dn=%1.9f ch%dv=%1.9fV\r\n",
whismanoid 34:a1993a1ee904 5964 ch, calibration_05_normValue_0_1[ch],
whismanoid 34:a1993a1ee904 5965 ch, calibration_05_V[ch],
whismanoid 34:a1993a1ee904 5966 ch, calibration_95_normValue_0_1[ch],
whismanoid 34:a1993a1ee904 5967 ch, calibration_95_V[ch]
whismanoid 34:a1993a1ee904 5968 );
whismanoid 34:a1993a1ee904 5969 }
whismanoid 34:a1993a1ee904 5970 //
whismanoid 34:a1993a1ee904 5971 // print extended help for %A
whismanoid 34:a1993a1ee904 5972 // %A cal0n=0.02 cal0v=0.123 cal0n=0.938 cal0v=1.132 edit/import raw calibration values for any/all channels
whismanoid 34:a1993a1ee904 5973 //~ cmdLine.serial().printf("\r\n %%A cal0n=0.02 cal0v=0.123 cal0n=0.938 cal0v=1.132 -- update calibration");
whismanoid 34:a1993a1ee904 5974 // %A cal0test=0.5 test calibration functions by calculating the calibrated voltage of specified normValue_0_1
whismanoid 34:a1993a1ee904 5975 cmdLine.serial().printf(" %%A cal0test=0.5 -- calculate voltage at 50%% of full scale");
whismanoid 49:359a6b9df7c1 5976 // #350 MAX40108 %A vl#cal / vh#cal / v#copy=
whismanoid 49:359a6b9df7c1 5977 // cmdLine.serial().printf("\r\n %%A v0cal=1.000V -- calibrate channel against a known input voltage");
whismanoid 49:359a6b9df7c1 5978 cmdLine.serial().printf("\r\n %%A v0cal=1.000V | vl5cal=0.800V | vh5cal=1.600V -- calibrate input voltage");
whismanoid 49:359a6b9df7c1 5979 cmdLine.serial().printf("\r\n %%A v4copy=5 -- copy calibration from other channel");
whismanoid 34:a1993a1ee904 5980 // %A calreset -- reset all calibration data
whismanoid 34:a1993a1ee904 5981 cmdLine.serial().printf("\r\n %%A calreset -- reset all calibration data");
whismanoid 37:3f369235e5bc 5982 #if USE_Platform_AIN_Average
whismanoid 37:3f369235e5bc 5983 // %A avg=%d -- help string display Platform_AIN_Average_N
whismanoid 37:3f369235e5bc 5984 cmdLine.serial().printf("\r\n %%A avg=%d -- average", Platform_AIN_Average_N);
whismanoid 37:3f369235e5bc 5985 #endif // USE_Platform_AIN_Average
whismanoid 48:18647e0516f2 5986 #ifdef BOARD_SERIAL_NUMBER
whismanoid 48:18647e0516f2 5987 // %A sn= set g_board_serial_number ; use with %F save during calibration #312
whismanoid 49:359a6b9df7c1 5988 cmdLine.serial().printf("\r\n %%A sn=%ld -- serial number", g_board_serial_number);
whismanoid 48:18647e0516f2 5989 #endif // BOARD_SERIAL_NUMBER
whismanoid 34:a1993a1ee904 5990 cmdLine.serial().printf("\r\n\r\n");
whismanoid 34:a1993a1ee904 5991 //
whismanoid 34:a1993a1ee904 5992 } // end if (cmdLine.parse_and_remove_key("cal?", valueBuf, sizeof(valueBuf)))
whismanoid 34:a1993a1ee904 5993 }
whismanoid 34:a1993a1ee904 5994 #endif // HAS_Platform_AIN_Calibration
whismanoid 48:18647e0516f2 5995 #ifdef BOARD_SERIAL_NUMBER
whismanoid 48:18647e0516f2 5996 {
whismanoid 48:18647e0516f2 5997 // %A sn= set g_board_serial_number ; use with %F save during calibration #312
whismanoid 48:18647e0516f2 5998 if (cmdLine.parse_uint32_dec("sn", g_board_serial_number))
whismanoid 48:18647e0516f2 5999 {
whismanoid 48:18647e0516f2 6000 }
whismanoid 48:18647e0516f2 6001 }
whismanoid 48:18647e0516f2 6002 #endif // BOARD_SERIAL_NUMBER
whismanoid 34:a1993a1ee904 6003 #if HAS_Platform_AIN_Calibration
whismanoid 34:a1993a1ee904 6004 {
whismanoid 34:a1993a1ee904 6005 // %A calreset -- reset all calibration data
whismanoid 34:a1993a1ee904 6006 char valueBuf[16];
whismanoid 34:a1993a1ee904 6007 // bool parse_and_remove_key(const char *key, char *valueBuf, int valueBufLen);
whismanoid 34:a1993a1ee904 6008 if (cmdLine.parse_and_remove_key("calreset", valueBuf, sizeof(valueBuf)))
whismanoid 34:a1993a1ee904 6009 {
whismanoid 34:a1993a1ee904 6010 // nominal 5% fullscale point; normValue_0_1 < 0.5
whismanoid 34:a1993a1ee904 6011 calibration_05_normValue_0_1[0] = 0.25; calibration_05_V[0] = 0.3;
whismanoid 34:a1993a1ee904 6012 calibration_05_normValue_0_1[1] = 0.25; calibration_05_V[1] = 0.3;
whismanoid 34:a1993a1ee904 6013 calibration_05_normValue_0_1[2] = 0.25; calibration_05_V[2] = 0.3;
whismanoid 34:a1993a1ee904 6014 calibration_05_normValue_0_1[3] = 0.25; calibration_05_V[3] = 0.3;
whismanoid 34:a1993a1ee904 6015 calibration_05_normValue_0_1[4] = 0.25; calibration_05_V[4] = 1.5;
whismanoid 34:a1993a1ee904 6016 calibration_05_normValue_0_1[5] = 0.25; calibration_05_V[5] = 1.5;
whismanoid 34:a1993a1ee904 6017 //
whismanoid 34:a1993a1ee904 6018 // nominal 95% fullscale point; normValue_0_1 > 0.5
whismanoid 34:a1993a1ee904 6019 calibration_95_normValue_0_1[0] = 0.75; calibration_95_V[0] = 0.9;
whismanoid 34:a1993a1ee904 6020 calibration_95_normValue_0_1[1] = 0.75; calibration_95_V[1] = 0.9;
whismanoid 34:a1993a1ee904 6021 calibration_95_normValue_0_1[2] = 0.75; calibration_95_V[2] = 0.9;
whismanoid 34:a1993a1ee904 6022 calibration_95_normValue_0_1[3] = 0.75; calibration_95_V[3] = 0.9;
whismanoid 34:a1993a1ee904 6023 calibration_95_normValue_0_1[4] = 0.75; calibration_95_V[4] = 4.5;
whismanoid 34:a1993a1ee904 6024 calibration_95_normValue_0_1[5] = 0.75; calibration_95_V[5] = 4.5;
whismanoid 34:a1993a1ee904 6025 //
whismanoid 34:a1993a1ee904 6026 }
whismanoid 34:a1993a1ee904 6027 }
whismanoid 34:a1993a1ee904 6028 #endif // HAS_Platform_AIN_Calibration
whismanoid 34:a1993a1ee904 6029 #if HAS_Platform_AIN_Calibration
whismanoid 34:a1993a1ee904 6030 // %A cal0n=0.02 cal0v=0.123 cal0n=0.938 cal0v=1.132 edit/import raw calibration values for any/all channels
whismanoid 35:c9549b5c01de 6031 // %A cal4n=0.135874882 cal4v=0.800000012V cal4n=0.286168128 cal4v=1.700000048V
whismanoid 34:a1993a1ee904 6032 // double calibration_05_normValue_0_1 [NUM_PLATFORM_ANALOG_IN_CHANNELS] = {0.0, ... }
whismanoid 34:a1993a1ee904 6033 // double calibration_05_V [NUM_PLATFORM_ANALOG_IN_CHANNELS] = {0.0, ... }
whismanoid 34:a1993a1ee904 6034 // double calibration_95_normValue_0_1 [NUM_PLATFORM_ANALOG_IN_CHANNELS] = {0.0, ... }
whismanoid 34:a1993a1ee904 6035 // double calibration_95_V [NUM_PLATFORM_ANALOG_IN_CHANNELS] = {0.0, ... }
whismanoid 34:a1993a1ee904 6036 {
whismanoid 34:a1993a1ee904 6037 double normValue_0_1, V;
whismanoid 34:a1993a1ee904 6038 for (int ch = 0; ch < NUM_PLATFORM_ANALOG_IN_CHANNELS; ch++)
whismanoid 34:a1993a1ee904 6039 {
whismanoid 52:bb09c0f452ec 6040 // %A cl0n= cl0v= ch0n= ch0v= -- unambiguous low and high cal points alternative to cal0n= cal0v= cal0n= cal0v= #354
whismanoid 52:bb09c0f452ec 6041 static char key_call0n[8] = "call0n_";
whismanoid 52:bb09c0f452ec 6042 sprintf(key_call0n, "cl%1dn", ch);
whismanoid 52:bb09c0f452ec 6043 static char key_call0v[8] = "call0v_";
whismanoid 52:bb09c0f452ec 6044 sprintf(key_call0v, "cl%1dv", ch);
whismanoid 52:bb09c0f452ec 6045 static char key_calh0n[8] = "calh0n_";
whismanoid 52:bb09c0f452ec 6046 sprintf(key_calh0n, "ch%1dn", ch);
whismanoid 52:bb09c0f452ec 6047 static char key_calh0v[8] = "calh0v_";
whismanoid 52:bb09c0f452ec 6048 sprintf(key_calh0v, "ch%1dv", ch);
whismanoid 52:bb09c0f452ec 6049 if (cmdLine.parse_double(key_call0n, normValue_0_1))
whismanoid 52:bb09c0f452ec 6050 {
whismanoid 52:bb09c0f452ec 6051 if (cmdLine.parse_double(key_call0v, V))
whismanoid 52:bb09c0f452ec 6052 {
whismanoid 52:bb09c0f452ec 6053 // store first calibration point in the 5% slot
whismanoid 52:bb09c0f452ec 6054 calibration_05_normValue_0_1[ch] = normValue_0_1;
whismanoid 52:bb09c0f452ec 6055 calibration_05_V[ch] = V;
whismanoid 52:bb09c0f452ec 6056 }
whismanoid 52:bb09c0f452ec 6057 }
whismanoid 52:bb09c0f452ec 6058 if (cmdLine.parse_double(key_calh0n, normValue_0_1))
whismanoid 52:bb09c0f452ec 6059 {
whismanoid 52:bb09c0f452ec 6060 if (cmdLine.parse_double(key_calh0v, V))
whismanoid 52:bb09c0f452ec 6061 {
whismanoid 52:bb09c0f452ec 6062 calibration_95_normValue_0_1[ch] = normValue_0_1;
whismanoid 52:bb09c0f452ec 6063 calibration_95_V[ch] = V;
whismanoid 52:bb09c0f452ec 6064 }
whismanoid 52:bb09c0f452ec 6065 }
whismanoid 52:bb09c0f452ec 6066 // auto select low or high cal points: cal0n= cal0v= cal0n= cal0v=
whismanoid 34:a1993a1ee904 6067 static char key_can0n[8] = "cal0n__";
whismanoid 34:a1993a1ee904 6068 sprintf(key_can0n, "cal%1dn", ch);
whismanoid 34:a1993a1ee904 6069 static char key_cal0v[8] = "cal0v__";
whismanoid 34:a1993a1ee904 6070 sprintf(key_cal0v, "cal%1dv", ch);
whismanoid 35:c9549b5c01de 6071 // first point could be the 5% point or the 95% point
whismanoid 35:c9549b5c01de 6072 double norm_threshold = (calibration_05_normValue_0_1[ch] + calibration_95_normValue_0_1[ch]) / 2.0;
whismanoid 35:c9549b5c01de 6073 bool updated_05 = false;
whismanoid 35:c9549b5c01de 6074 //~ bool updated_95 = false;
whismanoid 35:c9549b5c01de 6075 if (cmdLine.parse_double(key_can0n, normValue_0_1)) {
whismanoid 34:a1993a1ee904 6076 if (cmdLine.parse_double(key_cal0v, V))
whismanoid 34:a1993a1ee904 6077 {
whismanoid 35:c9549b5c01de 6078 if (normValue_0_1 < norm_threshold) {
whismanoid 35:c9549b5c01de 6079 // store first calibration point in the 5% slot
whismanoid 35:c9549b5c01de 6080 calibration_05_normValue_0_1[ch] = normValue_0_1;
whismanoid 34:a1993a1ee904 6081 calibration_05_V[ch] = V;
whismanoid 35:c9549b5c01de 6082 updated_05 = true;
whismanoid 34:a1993a1ee904 6083 }
whismanoid 34:a1993a1ee904 6084 else {
whismanoid 35:c9549b5c01de 6085 // store first calibration point in the 95% slot
whismanoid 35:c9549b5c01de 6086 calibration_95_normValue_0_1[ch] = normValue_0_1;
whismanoid 34:a1993a1ee904 6087 calibration_95_V[ch] = V;
whismanoid 35:c9549b5c01de 6088 //~ updated_95 = true;
whismanoid 34:a1993a1ee904 6089 }
whismanoid 34:a1993a1ee904 6090 }
whismanoid 35:c9549b5c01de 6091 }
whismanoid 35:c9549b5c01de 6092 // handle the optional second calibration point
whismanoid 35:c9549b5c01de 6093 if (cmdLine.parse_double(key_can0n, normValue_0_1))
whismanoid 35:c9549b5c01de 6094 {
whismanoid 35:c9549b5c01de 6095 if (cmdLine.parse_double(key_cal0v, V))
whismanoid 35:c9549b5c01de 6096 {
whismanoid 35:c9549b5c01de 6097 if (updated_05) {
whismanoid 35:c9549b5c01de 6098 // we already stored the first point here
whismanoid 35:c9549b5c01de 6099 // calibration_05_normValue_0_1[ch] = normValue_0_1;
whismanoid 35:c9549b5c01de 6100 // calibration_05_V[ch] = V;
whismanoid 35:c9549b5c01de 6101 // store the second point in the other slot
whismanoid 35:c9549b5c01de 6102 calibration_95_normValue_0_1[ch] = normValue_0_1;
whismanoid 35:c9549b5c01de 6103 calibration_95_V[ch] = V;
whismanoid 35:c9549b5c01de 6104 }
whismanoid 35:c9549b5c01de 6105 else {
whismanoid 35:c9549b5c01de 6106 // we already stored the first point here
whismanoid 35:c9549b5c01de 6107 // calibration_95_normValue_0_1[ch] = normValue_0_1;
whismanoid 35:c9549b5c01de 6108 // calibration_95_V[ch] = V;
whismanoid 35:c9549b5c01de 6109 // store the second point in the other slot
whismanoid 35:c9549b5c01de 6110 calibration_05_normValue_0_1[ch] = normValue_0_1;
whismanoid 35:c9549b5c01de 6111 calibration_05_V[ch] = V;
whismanoid 35:c9549b5c01de 6112 }
whismanoid 35:c9549b5c01de 6113 }
whismanoid 35:c9549b5c01de 6114 }
whismanoid 38:fda80a0020d1 6115 // make sure calibration_05_normValue_0_1[ch] < calibration_95_normValue_0_1[ch]
whismanoid 38:fda80a0020d1 6116 if (calibration_05_normValue_0_1[ch] > calibration_95_normValue_0_1[ch])
whismanoid 38:fda80a0020d1 6117 {
whismanoid 38:fda80a0020d1 6118 // swap to make sure calibration_05_normValue_0_1[ch] < calibration_95_normValue_0_1[ch]
whismanoid 38:fda80a0020d1 6119 double n05 = calibration_95_normValue_0_1[ch];
whismanoid 38:fda80a0020d1 6120 double V05 = calibration_95_V[ch];
whismanoid 38:fda80a0020d1 6121 double n95 = calibration_05_normValue_0_1[ch];
whismanoid 38:fda80a0020d1 6122 double V95 = calibration_05_V[ch];
whismanoid 38:fda80a0020d1 6123 calibration_05_normValue_0_1[ch] = n05;
whismanoid 38:fda80a0020d1 6124 calibration_05_V[ch] = V05;
whismanoid 38:fda80a0020d1 6125 calibration_95_normValue_0_1[ch] = n95;
whismanoid 38:fda80a0020d1 6126 calibration_95_V[ch] = V95;
whismanoid 38:fda80a0020d1 6127 }
whismanoid 34:a1993a1ee904 6128 } // end for (int ch = 0; ch < NUM_PLATFORM_ANALOG_IN_CHANNELS; ch++)
whismanoid 34:a1993a1ee904 6129 }
whismanoid 34:a1993a1ee904 6130 #endif // HAS_Platform_AIN_Calibration
whismanoid 34:a1993a1ee904 6131 #if HAS_Platform_AIN_Calibration
whismanoid 34:a1993a1ee904 6132 // %A cal0test=0.5 test calibration functions by calculating the calibrated voltage of specified normValue_0_1
whismanoid 34:a1993a1ee904 6133 // double CalibratedNormValue(int channel_0_5, double raw_normValue_0_1);
whismanoid 34:a1993a1ee904 6134 for (int ch = 0; ch < NUM_PLATFORM_ANALOG_IN_CHANNELS; ch++)
whismanoid 34:a1993a1ee904 6135 {
whismanoid 34:a1993a1ee904 6136 static char key_cal0test[12] = "cal0test__";
whismanoid 34:a1993a1ee904 6137 sprintf(key_cal0test, "cal%1dtest", ch);
whismanoid 34:a1993a1ee904 6138 double normValue_0_1, Vtest;
whismanoid 34:a1993a1ee904 6139 if (cmdLine.parse_double(key_cal0test, Vtest))
whismanoid 34:a1993a1ee904 6140 {
whismanoid 34:a1993a1ee904 6141 // divide Vtest/adc_full_scale_voltage[0] to get normValue_0_1
whismanoid 34:a1993a1ee904 6142 normValue_0_1 = Vtest/adc_full_scale_voltage[ch];
whismanoid 34:a1993a1ee904 6143 //
whismanoid 34:a1993a1ee904 6144 cmdLine.serial().printf(" CalibratedNormValue(%d, %1.6f) = %1.6f = %1.6fV\r\n",
whismanoid 34:a1993a1ee904 6145 ch,
whismanoid 34:a1993a1ee904 6146 normValue_0_1,
whismanoid 34:a1993a1ee904 6147 CalibratedNormValue(ch, normValue_0_1),
whismanoid 34:a1993a1ee904 6148 (CalibratedNormValue(ch, normValue_0_1) * adc_full_scale_voltage[ch])
whismanoid 34:a1993a1ee904 6149 );
whismanoid 34:a1993a1ee904 6150 //
whismanoid 34:a1993a1ee904 6151 // sweep CalibratedNormValue argument
whismanoid 34:a1993a1ee904 6152 double normValue_0_1_start = -0.05;
whismanoid 34:a1993a1ee904 6153 double normValue_0_1_step = 0.05;
whismanoid 34:a1993a1ee904 6154 double normValue_0_1_end = 1.07;
whismanoid 34:a1993a1ee904 6155 for (normValue_0_1 = normValue_0_1_start;
whismanoid 34:a1993a1ee904 6156 normValue_0_1 <= normValue_0_1_end;
whismanoid 34:a1993a1ee904 6157 normValue_0_1 = normValue_0_1 + normValue_0_1_step)
whismanoid 34:a1993a1ee904 6158 {
whismanoid 34:a1993a1ee904 6159 cmdLine.serial().printf(" CalibratedNormValue(%d, %1.6f) = %1.6f = %1.6fV\r\n",
whismanoid 34:a1993a1ee904 6160 ch,
whismanoid 34:a1993a1ee904 6161 normValue_0_1,
whismanoid 34:a1993a1ee904 6162 CalibratedNormValue(ch, normValue_0_1),
whismanoid 34:a1993a1ee904 6163 (CalibratedNormValue(ch, normValue_0_1) * adc_full_scale_voltage[ch])
whismanoid 34:a1993a1ee904 6164 );
whismanoid 34:a1993a1ee904 6165 }
whismanoid 34:a1993a1ee904 6166 }
whismanoid 34:a1993a1ee904 6167 } // end for (int ch = 0; ch < NUM_PLATFORM_ANALOG_IN_CHANNELS; ch++)
whismanoid 34:a1993a1ee904 6168 #endif // HAS_Platform_AIN_Calibration
whismanoid 34:a1993a1ee904 6169 #if HAS_Platform_AIN_Calibration
whismanoid 34:a1993a1ee904 6170 // %A v0cal=1.000V -- calibrate channel against a known input voltage
whismanoid 34:a1993a1ee904 6171 // double calibration_05_normValue_0_1 [NUM_PLATFORM_ANALOG_IN_CHANNELS] = {0.0, ... }
whismanoid 34:a1993a1ee904 6172 // double calibration_05_V [NUM_PLATFORM_ANALOG_IN_CHANNELS] = {0.0, ... }
whismanoid 34:a1993a1ee904 6173 // double calibration_95_normValue_0_1 [NUM_PLATFORM_ANALOG_IN_CHANNELS] = {0.0, ... }
whismanoid 34:a1993a1ee904 6174 // double calibration_95_V [NUM_PLATFORM_ANALOG_IN_CHANNELS] = {0.0, ... }
whismanoid 34:a1993a1ee904 6175 for (int ch = 0; ch < NUM_PLATFORM_ANALOG_IN_CHANNELS; ch++)
whismanoid 34:a1993a1ee904 6176 {
whismanoid 49:359a6b9df7c1 6177 // #350 MAX40108 %A vl#cal / vh#cal / v#copy=
whismanoid 49:359a6b9df7c1 6178 static char key_v0cal[10] = "v0cal__"; // v#cal=Vtest
whismanoid 49:359a6b9df7c1 6179 sprintf(key_v0cal, "v%1dcal", ch); // v#cal=Vtest
whismanoid 49:359a6b9df7c1 6180 static char key_vl0cal[10] = "vl0cal__"; // vl#cal=Vtest
whismanoid 49:359a6b9df7c1 6181 sprintf(key_vl0cal, "vl%1dcal", ch); // vl#cal=Vtest
whismanoid 49:359a6b9df7c1 6182 static char key_vh0cal[10] = "vh0cal__"; // vh#cal=Vtest
whismanoid 49:359a6b9df7c1 6183 sprintf(key_vh0cal, "vh%1dcal", ch); // vh#cal=Vtest
whismanoid 49:359a6b9df7c1 6184 static char key_v0copy[10] = "v0copy__"; // v#copy=srcChannel
whismanoid 49:359a6b9df7c1 6185 sprintf(key_v0copy, "v%1dcopy", ch); // v#copy=srcChannel
whismanoid 34:a1993a1ee904 6186 double Vtest;
whismanoid 49:359a6b9df7c1 6187 int srcChannel = 0;
whismanoid 49:359a6b9df7c1 6188 char calibration_command = '\0';
whismanoid 34:a1993a1ee904 6189 if (cmdLine.parse_double(key_v0cal, Vtest))
whismanoid 34:a1993a1ee904 6190 {
whismanoid 49:359a6b9df7c1 6191 // v#cal=Vtest: update calibration_05 or calibration_95
whismanoid 49:359a6b9df7c1 6192 calibration_command = 'V';
whismanoid 49:359a6b9df7c1 6193 }
whismanoid 49:359a6b9df7c1 6194 else if (cmdLine.parse_double(key_vl0cal, Vtest))
whismanoid 49:359a6b9df7c1 6195 {
whismanoid 49:359a6b9df7c1 6196 // vl#cal=Vtest: update calibration_05
whismanoid 49:359a6b9df7c1 6197 calibration_command = 'L';
whismanoid 49:359a6b9df7c1 6198 }
whismanoid 49:359a6b9df7c1 6199 else if (cmdLine.parse_double(key_vh0cal, Vtest))
whismanoid 49:359a6b9df7c1 6200 {
whismanoid 49:359a6b9df7c1 6201 // vh#cal=Vtest: update calibration_95
whismanoid 49:359a6b9df7c1 6202 calibration_command = 'H';
whismanoid 49:359a6b9df7c1 6203 }
whismanoid 49:359a6b9df7c1 6204 else if (cmdLine.parse_int_dec(key_v0copy, srcChannel))
whismanoid 49:359a6b9df7c1 6205 {
whismanoid 49:359a6b9df7c1 6206 // v#copy=srcChannel
whismanoid 49:359a6b9df7c1 6207 // update calibration_05 and calibration_95 from other channel
whismanoid 49:359a6b9df7c1 6208 calibration_command = '\0';
whismanoid 49:359a6b9df7c1 6209 calibration_05_normValue_0_1[ch] = calibration_05_normValue_0_1[srcChannel];
whismanoid 49:359a6b9df7c1 6210 calibration_05_V[ch] = calibration_05_V[srcChannel];
whismanoid 49:359a6b9df7c1 6211 calibration_95_normValue_0_1[ch] = calibration_95_normValue_0_1[srcChannel];
whismanoid 49:359a6b9df7c1 6212 calibration_95_V[ch] = calibration_95_V[srcChannel];
whismanoid 49:359a6b9df7c1 6213 // print updated calibration values
whismanoid 49:359a6b9df7c1 6214 cmdLine.serial().printf("\r\n");
whismanoid 52:bb09c0f452ec 6215 // %A cl0n= cl0v= ch0n= ch0v= -- unambiguous low and high cal points alternative to cal0n= cal0v= cal0n= cal0v= #354
whismanoid 52:bb09c0f452ec 6216 //cmdLine.serial().printf(" %%A cal%dn=%1.9f cal%dv=%1.9fV cal%dn=%1.9f cal%dv=%1.9fV\r\n",
whismanoid 52:bb09c0f452ec 6217 cmdLine.serial().printf(" %%A cl%dn=%1.9f cl%dv=%1.9fV ch%dn=%1.9f ch%dv=%1.9fV\r\n",
whismanoid 49:359a6b9df7c1 6218 ch, calibration_05_normValue_0_1[ch],
whismanoid 49:359a6b9df7c1 6219 ch, calibration_05_V[ch],
whismanoid 49:359a6b9df7c1 6220 ch, calibration_95_normValue_0_1[ch],
whismanoid 49:359a6b9df7c1 6221 ch, calibration_95_V[ch]
whismanoid 49:359a6b9df7c1 6222 );
whismanoid 49:359a6b9df7c1 6223 }
whismanoid 49:359a6b9df7c1 6224 if (calibration_command != '\0')
whismanoid 49:359a6b9df7c1 6225 {
whismanoid 34:a1993a1ee904 6226 // divide Vtest/adc_full_scale_voltage[0] to get normValue_0_1
whismanoid 34:a1993a1ee904 6227 double Vtest_normValue_0_1 = Vtest/adc_full_scale_voltage[ch];
whismanoid 34:a1993a1ee904 6228 //
whismanoid 34:a1993a1ee904 6229 // %A v0cal=1.000 calibrate one channel by measuring against a known input voltage
whismanoid 34:a1993a1ee904 6230 //
whismanoid 34:a1993a1ee904 6231 cmdLine.serial().printf("\r\n Measuring against input voltage of %1.6fV...", Vtest);
whismanoid 37:3f369235e5bc 6232 #if USE_Platform_AIN_Average
whismanoid 37:3f369235e5bc 6233 const int numberOfMeasurements = 16 * Platform_AIN_Average_N;
whismanoid 37:3f369235e5bc 6234 #else // USE_Platform_AIN_Average
whismanoid 34:a1993a1ee904 6235 const int numberOfMeasurements = 16;
whismanoid 37:3f369235e5bc 6236 #endif // USE_Platform_AIN_Average
whismanoid 34:a1993a1ee904 6237 double Sx_measure_normValue_0_1 = 0; // sum of values
whismanoid 34:a1993a1ee904 6238 double Sxx_measure_normValue_0_1 = 0; // sum of the squares of the values
whismanoid 34:a1993a1ee904 6239 for (int count = 0; count < numberOfMeasurements; count++)
whismanoid 34:a1993a1ee904 6240 {
whismanoid 34:a1993a1ee904 6241 double measure_normValue_0_1;
whismanoid 34:a1993a1ee904 6242 switch(ch)
whismanoid 34:a1993a1ee904 6243 {
whismanoid 34:a1993a1ee904 6244 case 0: measure_normValue_0_1 = analogIn0.read(); break;
whismanoid 34:a1993a1ee904 6245 case 1: measure_normValue_0_1 = analogIn1.read(); break;
whismanoid 34:a1993a1ee904 6246 case 2: measure_normValue_0_1 = analogIn2.read(); break;
whismanoid 34:a1993a1ee904 6247 case 3: measure_normValue_0_1 = analogIn3.read(); break;
whismanoid 34:a1993a1ee904 6248 case 4: measure_normValue_0_1 = analogIn4.read(); break;
whismanoid 34:a1993a1ee904 6249 case 5: measure_normValue_0_1 = analogIn5.read(); break;
whismanoid 34:a1993a1ee904 6250 }
whismanoid 34:a1993a1ee904 6251 Sx_measure_normValue_0_1 = Sx_measure_normValue_0_1 + measure_normValue_0_1;
whismanoid 34:a1993a1ee904 6252 Sxx_measure_normValue_0_1 = Sxx_measure_normValue_0_1 + (measure_normValue_0_1 * measure_normValue_0_1);
whismanoid 38:fda80a0020d1 6253 if ((count < 3) || (count >= numberOfMeasurements - 3)) {
whismanoid 38:fda80a0020d1 6254 cmdLine.serial().printf("\r\n raw: %7.6f%% = %1.6fV",
whismanoid 38:fda80a0020d1 6255 measure_normValue_0_1 * 100.0,
whismanoid 38:fda80a0020d1 6256 (measure_normValue_0_1 * adc_full_scale_voltage[ch])
whismanoid 38:fda80a0020d1 6257 );
whismanoid 38:fda80a0020d1 6258 }
whismanoid 34:a1993a1ee904 6259 }
whismanoid 34:a1993a1ee904 6260 cmdLine.serial().printf("\r\n numberOfMeasurements = %d", numberOfMeasurements);
whismanoid 34:a1993a1ee904 6261 cmdLine.serial().printf("\r\n Sx_measure_normValue_0_1 = %1.6f", Sx_measure_normValue_0_1);
whismanoid 34:a1993a1ee904 6262 cmdLine.serial().printf("\r\n Sxx_measure_normValue_0_1 = %1.6f", Sxx_measure_normValue_0_1);
whismanoid 34:a1993a1ee904 6263 //
whismanoid 34:a1993a1ee904 6264 // calculate mean_measure_normValue_0_1 from
whismanoid 34:a1993a1ee904 6265 // Sxx_measure_normValue_0_1, Sx_measure_normValue_0_1, numberOfMeasurements
whismanoid 34:a1993a1ee904 6266 double mean_measure_normValue_0_1 = Sx_measure_normValue_0_1 / numberOfMeasurements;
whismanoid 34:a1993a1ee904 6267 cmdLine.serial().printf("\r\n mean = %7.6f%% = %1.6fV",
whismanoid 34:a1993a1ee904 6268 mean_measure_normValue_0_1 * 100.0,
whismanoid 34:a1993a1ee904 6269 (mean_measure_normValue_0_1 * adc_full_scale_voltage[ch])
whismanoid 34:a1993a1ee904 6270 );
whismanoid 34:a1993a1ee904 6271 //
whismanoid 34:a1993a1ee904 6272 // TODO: calculate sample variance_measure_normValue_0_1 from
whismanoid 34:a1993a1ee904 6273 // Sxx_measure_normValue_0_1, Sx_measure_normValue_0_1, numberOfMeasurements
whismanoid 34:a1993a1ee904 6274 // variance_measure_normValue_0_1 = (Sxx - ( Sx * Sx / nWords) ) / (nWords - 1);
whismanoid 34:a1993a1ee904 6275 double variance_measure_normValue_0_1 = (Sxx_measure_normValue_0_1 - ( Sx_measure_normValue_0_1 * Sx_measure_normValue_0_1 / numberOfMeasurements) ) / (numberOfMeasurements - 1);
whismanoid 34:a1993a1ee904 6276 cmdLine.serial().printf("\r\n variance = %7.6f%% = %1.6fV",
whismanoid 34:a1993a1ee904 6277 variance_measure_normValue_0_1 * 100.0,
whismanoid 34:a1993a1ee904 6278 (variance_measure_normValue_0_1 * adc_full_scale_voltage[ch])
whismanoid 34:a1993a1ee904 6279 );
whismanoid 34:a1993a1ee904 6280 //
whismanoid 34:a1993a1ee904 6281 // calculate sample stddev_measure_normValue_0_1 from
whismanoid 34:a1993a1ee904 6282 // Sxx_measure_normValue_0_1, Sx_measure_normValue_0_1, numberOfMeasurements
whismanoid 34:a1993a1ee904 6283 double stddev_measure_normValue_0_1 = sqrt(variance_measure_normValue_0_1);
whismanoid 34:a1993a1ee904 6284 cmdLine.serial().printf("\r\n stddev = %7.6f%% = %1.6fV",
whismanoid 34:a1993a1ee904 6285 stddev_measure_normValue_0_1 * 100.0,
whismanoid 34:a1993a1ee904 6286 (stddev_measure_normValue_0_1 * adc_full_scale_voltage[ch])
whismanoid 34:a1993a1ee904 6287 );
whismanoid 34:a1993a1ee904 6288 //
whismanoid 34:a1993a1ee904 6289 // Validate the measurements:
whismanoid 34:a1993a1ee904 6290 // is the mean near the expected value?
whismanoid 34:a1993a1ee904 6291 // is the standard deviation not too high?
whismanoid 34:a1993a1ee904 6292 bool isCalibrationValid = true;
whismanoid 34:a1993a1ee904 6293 if ((Vtest_normValue_0_1 - mean_measure_normValue_0_1) > 0.1) {
whismanoid 34:a1993a1ee904 6294 isCalibrationValid = false;
whismanoid 34:a1993a1ee904 6295 cmdLine.serial().printf(" mean value too far from expected.\r\n");
whismanoid 34:a1993a1ee904 6296 }
whismanoid 34:a1993a1ee904 6297 if ((Vtest_normValue_0_1 - mean_measure_normValue_0_1) < -0.1) {
whismanoid 34:a1993a1ee904 6298 isCalibrationValid = false;
whismanoid 34:a1993a1ee904 6299 cmdLine.serial().printf(" mean value too far from expected.\r\n");
whismanoid 34:a1993a1ee904 6300 }
whismanoid 34:a1993a1ee904 6301 if ((stddev_measure_normValue_0_1) > 10) {
whismanoid 34:a1993a1ee904 6302 isCalibrationValid = false;
whismanoid 34:a1993a1ee904 6303 cmdLine.serial().printf(" stddev too high.\r\n");
whismanoid 34:a1993a1ee904 6304 }
whismanoid 34:a1993a1ee904 6305 if (isCalibrationValid)
whismanoid 34:a1993a1ee904 6306 {
whismanoid 34:a1993a1ee904 6307 // update calibration point (mean_measure_normValue_0_1, Vtest)
whismanoid 49:359a6b9df7c1 6308 // #350 MAX40108 %A vl#cal / vh#cal / v#copy=
whismanoid 49:359a6b9df7c1 6309 switch(calibration_command)
whismanoid 49:359a6b9df7c1 6310 {
whismanoid 49:359a6b9df7c1 6311 case 'V': // v#cal=Vtest: update calibration_05 or calibration_95
whismanoid 49:359a6b9df7c1 6312 if (Vtest_normValue_0_1 < 0.5) {
whismanoid 49:359a6b9df7c1 6313 calibration_05_normValue_0_1[ch] = mean_measure_normValue_0_1;
whismanoid 49:359a6b9df7c1 6314 calibration_05_V[ch] = Vtest;
whismanoid 49:359a6b9df7c1 6315 } else {
whismanoid 49:359a6b9df7c1 6316 calibration_95_normValue_0_1[ch] = mean_measure_normValue_0_1;
whismanoid 49:359a6b9df7c1 6317 calibration_95_V[ch] = Vtest;
whismanoid 49:359a6b9df7c1 6318 }
whismanoid 49:359a6b9df7c1 6319 break;
whismanoid 49:359a6b9df7c1 6320 case 'L': // vl#cal=Vtest: update calibration_05
whismanoid 49:359a6b9df7c1 6321 calibration_05_normValue_0_1[ch] = mean_measure_normValue_0_1;
whismanoid 49:359a6b9df7c1 6322 calibration_05_V[ch] = Vtest;
whismanoid 49:359a6b9df7c1 6323 break;
whismanoid 49:359a6b9df7c1 6324 case 'H': // vh#cal=Vtest: update calibration_95
whismanoid 49:359a6b9df7c1 6325 calibration_95_normValue_0_1[ch] = mean_measure_normValue_0_1;
whismanoid 49:359a6b9df7c1 6326 calibration_95_V[ch] = Vtest;
whismanoid 49:359a6b9df7c1 6327 break;
whismanoid 34:a1993a1ee904 6328 }
whismanoid 34:a1993a1ee904 6329 //
whismanoid 34:a1993a1ee904 6330 // print updated calibration values
whismanoid 34:a1993a1ee904 6331 cmdLine.serial().printf("\r\n");
whismanoid 52:bb09c0f452ec 6332 // %A cl0n= cl0v= ch0n= ch0v= -- unambiguous low and high cal points alternative to cal0n= cal0v= cal0n= cal0v= #354
whismanoid 52:bb09c0f452ec 6333 //cmdLine.serial().printf(" %%A cal%dn=%1.9f cal%dv=%1.9fV cal%dn=%1.9f cal%dv=%1.9fV\r\n",
whismanoid 52:bb09c0f452ec 6334 cmdLine.serial().printf(" %%A cl%dn=%1.9f cl%dv=%1.9fV ch%dn=%1.9f ch%dv=%1.9fV\r\n",
whismanoid 34:a1993a1ee904 6335 ch, calibration_05_normValue_0_1[ch],
whismanoid 34:a1993a1ee904 6336 ch, calibration_05_V[ch],
whismanoid 34:a1993a1ee904 6337 ch, calibration_95_normValue_0_1[ch],
whismanoid 34:a1993a1ee904 6338 ch, calibration_95_V[ch]
whismanoid 34:a1993a1ee904 6339 );
whismanoid 34:a1993a1ee904 6340 // print corrected value of mean of measurements (should be close to Vtest)
whismanoid 34:a1993a1ee904 6341 cmdLine.serial().printf(" CalibratedNormValue(%d, %1.6f) = %1.6f = %1.6fV vs %1.6fV\r\n",
whismanoid 34:a1993a1ee904 6342 ch,
whismanoid 34:a1993a1ee904 6343 mean_measure_normValue_0_1,
whismanoid 34:a1993a1ee904 6344 CalibratedNormValue(ch, mean_measure_normValue_0_1),
whismanoid 34:a1993a1ee904 6345 (CalibratedNormValue(ch, mean_measure_normValue_0_1) * adc_full_scale_voltage[ch]),
whismanoid 34:a1993a1ee904 6346 Vtest
whismanoid 34:a1993a1ee904 6347 );
whismanoid 34:a1993a1ee904 6348 } // end if (isCalibrationValid)
whismanoid 34:a1993a1ee904 6349 else {
whismanoid 34:a1993a1ee904 6350 cmdLine.serial().printf("\r\n");
whismanoid 34:a1993a1ee904 6351 cmdLine.serial().printf(" Measurement Error: Calibration will not be updated.\r\n");
whismanoid 34:a1993a1ee904 6352 } // end if (isCalibrationValid)
whismanoid 34:a1993a1ee904 6353 } // end if key_v0cal
whismanoid 34:a1993a1ee904 6354 } // end for (int ch = 0; ch < NUM_PLATFORM_ANALOG_IN_CHANNELS; ch++)
whismanoid 34:a1993a1ee904 6355 #endif // HAS_Platform_AIN_Calibration
whismanoid 37:3f369235e5bc 6356 // %A -- report analog input voltages
whismanoid 37:3f369235e5bc 6357 #if USE_Platform_AIN_Average
whismanoid 37:3f369235e5bc 6358 // #if USE_Platform_AIN_Average -- for (i=0; i<Platform_AIN_Average_N; i++) -- analogInPin.read()
whismanoid 37:3f369235e5bc 6359 #endif // USE_Platform_AIN_Average
whismanoid 15:37c83ec50ea0 6360 #if analogIn4_IS_HIGH_RANGE_OF_analogIn0
whismanoid 15:37c83ec50ea0 6361 // Platform board uses AIN4,AIN5,.. as high range of AIN0,AIN1,..
whismanoid 15:37c83ec50ea0 6362 for (int pinIndex = 0; pinIndex < 2; pinIndex++)
whismanoid 15:37c83ec50ea0 6363 {
whismanoid 15:37c83ec50ea0 6364 int cPinIndex = '0' + pinIndex;
whismanoid 15:37c83ec50ea0 6365 AnalogIn& analogInPin = find_analogInPin(cPinIndex);
whismanoid 15:37c83ec50ea0 6366 float adc_full_scale_voltage = analogInPin_fullScaleVoltage[pinIndex];
whismanoid 37:3f369235e5bc 6367 #if USE_Platform_AIN_Average
whismanoid 37:3f369235e5bc 6368 // #if USE_Platform_AIN_Average -- for (i=0; i<Platform_AIN_Average_N; i++) -- analogInPin.read()
whismanoid 37:3f369235e5bc 6369 // float normValue_0_1 = analogInPin.read(); but mean of Platform_AIN_Average_N samples
whismanoid 37:3f369235e5bc 6370 float normValue_0_1 = 0;
whismanoid 37:3f369235e5bc 6371 for (int i = 0; i < Platform_AIN_Average_N; i++) {
whismanoid 37:3f369235e5bc 6372 normValue_0_1 = normValue_0_1 + analogInPin.read();
whismanoid 37:3f369235e5bc 6373 }
whismanoid 37:3f369235e5bc 6374 normValue_0_1 = normValue_0_1 / Platform_AIN_Average_N;
whismanoid 37:3f369235e5bc 6375 #else // USE_Platform_AIN_Average
whismanoid 15:37c83ec50ea0 6376 float normValue_0_1 = analogInPin.read();
whismanoid 37:3f369235e5bc 6377 #endif // USE_Platform_AIN_Average
whismanoid 34:a1993a1ee904 6378 #if HAS_Platform_AIN_Calibration
whismanoid 34:a1993a1ee904 6379 // apply calibration to normValue_0_1 value
whismanoid 34:a1993a1ee904 6380 normValue_0_1 = CalibratedNormValue(pinIndex, normValue_0_1);
whismanoid 34:a1993a1ee904 6381 #endif // HAS_Platform_AIN_Calibration
whismanoid 15:37c83ec50ea0 6382 //
whismanoid 15:37c83ec50ea0 6383 int pinIndexH = pinIndex + 4;
whismanoid 15:37c83ec50ea0 6384 int cPinIndexH = '0' + pinIndexH;
whismanoid 15:37c83ec50ea0 6385 AnalogIn& analogInPinH = find_analogInPin(cPinIndexH);
whismanoid 15:37c83ec50ea0 6386 float adc_full_scale_voltageH = analogInPin_fullScaleVoltage[pinIndexH];
whismanoid 37:3f369235e5bc 6387 #if USE_Platform_AIN_Average
whismanoid 37:3f369235e5bc 6388 // #if USE_Platform_AIN_Average -- for (i=0; i<Platform_AIN_Average_N; i++) -- analogInPin.read()
whismanoid 37:3f369235e5bc 6389 // float normValueH_0_1 = analogInPinH.read(); but mean of Platform_AIN_Average_N samples
whismanoid 37:3f369235e5bc 6390 float normValueH_0_1 = 0;
whismanoid 37:3f369235e5bc 6391 for (int i = 0; i < Platform_AIN_Average_N; i++) {
whismanoid 37:3f369235e5bc 6392 normValueH_0_1 = normValueH_0_1 + analogInPinH.read();
whismanoid 37:3f369235e5bc 6393 }
whismanoid 37:3f369235e5bc 6394 normValueH_0_1 = normValueH_0_1 / Platform_AIN_Average_N;
whismanoid 37:3f369235e5bc 6395 #else // USE_Platform_AIN_Average
whismanoid 15:37c83ec50ea0 6396 float normValueH_0_1 = analogInPinH.read();
whismanoid 37:3f369235e5bc 6397 #endif // USE_Platform_AIN_Average
whismanoid 34:a1993a1ee904 6398 #if HAS_Platform_AIN_Calibration
whismanoid 34:a1993a1ee904 6399 // apply calibration to normValue_0_1 value
whismanoid 34:a1993a1ee904 6400 normValueH_0_1 = CalibratedNormValue(pinIndex, normValueH_0_1);
whismanoid 34:a1993a1ee904 6401 #endif // HAS_Platform_AIN_Calibration
whismanoid 15:37c83ec50ea0 6402 //
whismanoid 37:3f369235e5bc 6403 cmdLine.serial().printf("A%c = %7.3f%% = %1.3fV high range A%c = %7.3f%% = %1.3fV \r\n",
whismanoid 15:37c83ec50ea0 6404 cPinIndex,
whismanoid 15:37c83ec50ea0 6405 normValue_0_1 * 100.0,
whismanoid 15:37c83ec50ea0 6406 normValue_0_1 * adc_full_scale_voltage,
whismanoid 15:37c83ec50ea0 6407 cPinIndexH,
whismanoid 15:37c83ec50ea0 6408 normValueH_0_1 * 100.0,
whismanoid 15:37c83ec50ea0 6409 normValueH_0_1 * adc_full_scale_voltageH
whismanoid 15:37c83ec50ea0 6410 );
whismanoid 15:37c83ec50ea0 6411 }
whismanoid 15:37c83ec50ea0 6412 for (int pinIndex = 2; pinIndex < 4; pinIndex++)
whismanoid 15:37c83ec50ea0 6413 {
whismanoid 15:37c83ec50ea0 6414 int cPinIndex = '0' + pinIndex;
whismanoid 15:37c83ec50ea0 6415 AnalogIn& analogInPin = find_analogInPin(cPinIndex);
whismanoid 15:37c83ec50ea0 6416 float adc_full_scale_voltage = analogInPin_fullScaleVoltage[pinIndex];
whismanoid 37:3f369235e5bc 6417 #if USE_Platform_AIN_Average
whismanoid 37:3f369235e5bc 6418 // #if USE_Platform_AIN_Average -- for (i=0; i<Platform_AIN_Average_N; i++) -- analogInPin.read()
whismanoid 37:3f369235e5bc 6419 // float normValue_0_1 = analogInPin.read(); but mean of Platform_AIN_Average_N samples
whismanoid 37:3f369235e5bc 6420 float normValue_0_1 = 0;
whismanoid 37:3f369235e5bc 6421 for (int i = 0; i < Platform_AIN_Average_N; i++) {
whismanoid 37:3f369235e5bc 6422 normValue_0_1 = normValue_0_1 + analogInPin.read();
whismanoid 37:3f369235e5bc 6423 }
whismanoid 37:3f369235e5bc 6424 normValue_0_1 = normValue_0_1 / Platform_AIN_Average_N;
whismanoid 37:3f369235e5bc 6425 #else // USE_Platform_AIN_Average
whismanoid 15:37c83ec50ea0 6426 float normValue_0_1 = analogInPin.read();
whismanoid 37:3f369235e5bc 6427 #endif // USE_Platform_AIN_Average
whismanoid 34:a1993a1ee904 6428 #if HAS_Platform_AIN_Calibration
whismanoid 34:a1993a1ee904 6429 // apply calibration to normValue_0_1 value
whismanoid 34:a1993a1ee904 6430 normValue_0_1 = CalibratedNormValue(pinIndex, normValue_0_1);
whismanoid 34:a1993a1ee904 6431 #endif // HAS_Platform_AIN_Calibration
whismanoid 15:37c83ec50ea0 6432 //
whismanoid 37:3f369235e5bc 6433 cmdLine.serial().printf("A%c = %7.3f%% = %1.3fV\r\n",
whismanoid 15:37c83ec50ea0 6434 cPinIndex,
whismanoid 15:37c83ec50ea0 6435 normValue_0_1 * 100.0,
whismanoid 15:37c83ec50ea0 6436 normValue_0_1 * adc_full_scale_voltage
whismanoid 15:37c83ec50ea0 6437 );
whismanoid 15:37c83ec50ea0 6438 }
whismanoid 15:37c83ec50ea0 6439 #else // analogIn4_IS_HIGH_RANGE_OF_analogIn0
whismanoid 15:37c83ec50ea0 6440 // Platform board uses simple analog inputs
whismanoid 15:37c83ec50ea0 6441 // assume standard Arduino analog inputs A0-A5
whismanoid 15:37c83ec50ea0 6442 for (int pinIndex = 0; pinIndex < 6; pinIndex++)
whismanoid 15:37c83ec50ea0 6443 {
whismanoid 15:37c83ec50ea0 6444 int cPinIndex = '0' + pinIndex;
whismanoid 15:37c83ec50ea0 6445 AnalogIn& analogInPin = find_analogInPin(cPinIndex);
whismanoid 15:37c83ec50ea0 6446 float adc_full_scale_voltage = analogInPin_fullScaleVoltage[pinIndex];
whismanoid 37:3f369235e5bc 6447 #if USE_Platform_AIN_Average
whismanoid 37:3f369235e5bc 6448 // #if USE_Platform_AIN_Average -- for (i=0; i<Platform_AIN_Average_N; i++) -- analogInPin.read()
whismanoid 37:3f369235e5bc 6449 // float normValue_0_1 = analogInPin.read(); but mean of Platform_AIN_Average_N samples
whismanoid 37:3f369235e5bc 6450 float normValue_0_1 = 0;
whismanoid 37:3f369235e5bc 6451 for (int i = 0; i < Platform_AIN_Average_N; i++) {
whismanoid 37:3f369235e5bc 6452 normValue_0_1 = normValue_0_1 + analogInPin.read();
whismanoid 37:3f369235e5bc 6453 }
whismanoid 37:3f369235e5bc 6454 normValue_0_1 = normValue_0_1 / Platform_AIN_Average_N;
whismanoid 37:3f369235e5bc 6455 #else // USE_Platform_AIN_Average
whismanoid 15:37c83ec50ea0 6456 float normValue_0_1 = analogInPin.read();
whismanoid 37:3f369235e5bc 6457 #endif // USE_Platform_AIN_Average
whismanoid 34:a1993a1ee904 6458 #if HAS_Platform_AIN_Calibration
whismanoid 34:a1993a1ee904 6459 // apply calibration to normValue_0_1 value
whismanoid 34:a1993a1ee904 6460 normValue_0_1 = CalibratedNormValue(pinIndex, normValue_0_1);
whismanoid 34:a1993a1ee904 6461 #endif // HAS_Platform_AIN_Calibration
whismanoid 15:37c83ec50ea0 6462 //
whismanoid 37:3f369235e5bc 6463 cmdLine.serial().printf("A%c = %7.3f%% = %1.3fV\r\n",
whismanoid 15:37c83ec50ea0 6464 cPinIndex,
whismanoid 15:37c83ec50ea0 6465 normValue_0_1 * 100.0,
whismanoid 15:37c83ec50ea0 6466 normValue_0_1 * adc_full_scale_voltage
whismanoid 15:37c83ec50ea0 6467 );
whismanoid 15:37c83ec50ea0 6468 }
whismanoid 15:37c83ec50ea0 6469 #endif // analogIn4_IS_HIGH_RANGE_OF_analogIn0
whismanoid 15:37c83ec50ea0 6470 }
whismanoid 15:37c83ec50ea0 6471 break;
whismanoid 15:37c83ec50ea0 6472 #endif
whismanoid 15:37c83ec50ea0 6473 //
whismanoid 15:37c83ec50ea0 6474 #if HAS_SPI2_MAX541
whismanoid 15:37c83ec50ea0 6475 case 'D': case 'd':
whismanoid 15:37c83ec50ea0 6476 {
whismanoid 15:37c83ec50ea0 6477 // %D -- DAC output MAX541 (SPI2) -- need cmdLine.parse_float(voltageV)
whismanoid 15:37c83ec50ea0 6478 // MAX541 max541(spi2_max541, spi2_max541_cs);
whismanoid 15:37c83ec50ea0 6479 float voltageV = max541.Get_Voltage();
whismanoid 15:37c83ec50ea0 6480 // if (cmdLine[2] == '+') {
whismanoid 15:37c83ec50ea0 6481 // // %D+
whismanoid 15:37c83ec50ea0 6482 // voltageV = voltageV * 1.25f;
whismanoid 15:37c83ec50ea0 6483 // if (voltageV >= max541.VRef) voltageV = max541.VRef;
whismanoid 15:37c83ec50ea0 6484 // SelfTest_MAX541_Voltage(cmdLine, max541, voltageV);
whismanoid 15:37c83ec50ea0 6485 // }
whismanoid 15:37c83ec50ea0 6486 // else if (cmdLine[2] == '-') {
whismanoid 15:37c83ec50ea0 6487 // // %D-
whismanoid 15:37c83ec50ea0 6488 // voltageV = voltageV * 0.75f;
whismanoid 15:37c83ec50ea0 6489 // if (voltageV < 0.1f) voltageV = 0.1f;
whismanoid 15:37c83ec50ea0 6490 // SelfTest_MAX541_Voltage(cmdLine, max541, voltageV);
whismanoid 15:37c83ec50ea0 6491 // }
whismanoid 15:37c83ec50ea0 6492 if (cmdLine.parse_float("V", voltageV))
whismanoid 15:37c83ec50ea0 6493 {
whismanoid 15:37c83ec50ea0 6494 // %D V=1.234 -- set voltage
whismanoid 15:37c83ec50ea0 6495 max541.Set_Voltage(voltageV);
whismanoid 15:37c83ec50ea0 6496 }
whismanoid 15:37c83ec50ea0 6497 else if (cmdLine.parse_float("TEST", voltageV))
whismanoid 15:37c83ec50ea0 6498 {
whismanoid 15:37c83ec50ea0 6499 // %D TEST=1.234 -- set voltage and compare with AIN0
whismanoid 15:37c83ec50ea0 6500 SelfTest_MAX541_Voltage(cmdLine, max541, voltageV);
whismanoid 15:37c83ec50ea0 6501 }
whismanoid 15:37c83ec50ea0 6502 else if (cmdLine.parse_float("CAL", voltageV))
whismanoid 15:37c83ec50ea0 6503 {
whismanoid 15:37c83ec50ea0 6504 // %D CAL=1.234 -- calibrate VRef and compare with AIN0
whismanoid 15:37c83ec50ea0 6505
whismanoid 15:37c83ec50ea0 6506 max541.Set_Code(0x8000); // we don't know the fullscale voltage yet, so set code to midscale
whismanoid 15:37c83ec50ea0 6507 double max541_midscale_V = analogInPin_fullScaleVoltage[4] * analogIn4.read(); // TARGET_MAX32630 J1.5 AIN_4 = AIN0 / 5.0 fullscale is 6.0V
whismanoid 15:37c83ec50ea0 6508 const int average_count = 100;
whismanoid 15:37c83ec50ea0 6509 const double average_K = 0.25;
whismanoid 15:37c83ec50ea0 6510 for (int count = 0; count < average_count; count++) {
whismanoid 15:37c83ec50ea0 6511 double measurement_V = analogInPin_fullScaleVoltage[4] * analogIn4.read(); // TARGET_MAX32630 J1.5 AIN_4 = AIN0 / 5.0 fullscale is 6.0V
whismanoid 15:37c83ec50ea0 6512 max541_midscale_V = ((1 - average_K) * max541_midscale_V) + (average_K * measurement_V);
whismanoid 15:37c83ec50ea0 6513 }
whismanoid 15:37c83ec50ea0 6514 max541.VRef = 2.0 * max541_midscale_V;
whismanoid 15:37c83ec50ea0 6515 cmdLine.serial().printf(
whismanoid 15:37c83ec50ea0 6516 "\r\n MAX541 midscale = %1.3fV, so fullscale = %1.3fV",
whismanoid 15:37c83ec50ea0 6517 max541_midscale_V, max541.VRef);
whismanoid 15:37c83ec50ea0 6518 // Detect whether MAX541 is really connected to MAX32625MBED.AIN0/AIN4
whismanoid 15:37c83ec50ea0 6519 voltageV = 1.0f;
whismanoid 15:37c83ec50ea0 6520 SelfTest_MAX541_Voltage(cmdLine, max541, voltageV);
whismanoid 15:37c83ec50ea0 6521 }
whismanoid 15:37c83ec50ea0 6522 else {
whismanoid 15:37c83ec50ea0 6523 // %D -- print MAX541 DAC status
whismanoid 15:37c83ec50ea0 6524 cmdLine.serial().printf("MAX541 code=0x%4.4x = %1.3fV VRef=%1.3fV\r\n",
whismanoid 15:37c83ec50ea0 6525 max541.Get_Code(), max541.Get_Voltage(), max541.VRef);
whismanoid 15:37c83ec50ea0 6526 }
whismanoid 15:37c83ec50ea0 6527 }
whismanoid 15:37c83ec50ea0 6528 break;
whismanoid 15:37c83ec50ea0 6529 #endif
whismanoid 15:37c83ec50ea0 6530
whismanoid 15:37c83ec50ea0 6531 //
whismanoid 15:37c83ec50ea0 6532 #if HAS_I2C // SUPPORT_I2C
whismanoid 15:37c83ec50ea0 6533 case 'I': case 'i':
whismanoid 15:37c83ec50ea0 6534 // %I... -- I2C diagnostics
whismanoid 15:37c83ec50ea0 6535 // %IP -- I2C probe
whismanoid 15:37c83ec50ea0 6536 // %IC scl=100khz ADDR=? -- I2C configure
whismanoid 15:37c83ec50ea0 6537 // %IW byte byte ... byte RD=? ADDR=0x -- write
whismanoid 15:37c83ec50ea0 6538 // %IR ADDR=? RD=? -- read
whismanoid 15:37c83ec50ea0 6539 // %I^ cmd=? -- i2c_smbus_read_word_data
whismanoid 15:37c83ec50ea0 6540 // get next character
whismanoid 15:37c83ec50ea0 6541 // TODO: parse cmdLine arg (ADDR=\d+)? --> g_I2C_deviceAddress7
whismanoid 15:37c83ec50ea0 6542 cmdLine.parse_byte_hex("ADDR", g_I2C_deviceAddress7);
whismanoid 15:37c83ec50ea0 6543 // TODO: parse cmdLine arg (RD=\d)? --> g_I2C_read_count
whismanoid 15:37c83ec50ea0 6544 g_I2C_read_count = 0; // read count must be reset every command
whismanoid 15:37c83ec50ea0 6545 cmdLine.parse_byte_dec("RD", g_I2C_read_count);
whismanoid 15:37c83ec50ea0 6546 // TODO: parse cmdLine arg (CMD=\d)? --> g_I2C_command_regAddress
whismanoid 15:37c83ec50ea0 6547 cmdLine.parse_byte_hex("CMD", g_I2C_command_regAddress);
whismanoid 15:37c83ec50ea0 6548 switch (cmdLine[2])
whismanoid 15:37c83ec50ea0 6549 {
whismanoid 15:37c83ec50ea0 6550 case 'P': case 'p':
whismanoid 15:37c83ec50ea0 6551 {
whismanoid 15:37c83ec50ea0 6552 // %IP -- I2C probe
whismanoid 15:37c83ec50ea0 6553 HuntAttachedI2CDevices(cmdLine, 0x03, 0x77);
whismanoid 15:37c83ec50ea0 6554 }
whismanoid 15:37c83ec50ea0 6555 break;
whismanoid 15:37c83ec50ea0 6556 case 'C': case 'c':
whismanoid 15:37c83ec50ea0 6557 {
whismanoid 15:37c83ec50ea0 6558 bool isUpdatedI2CConfig = false;
whismanoid 15:37c83ec50ea0 6559 // %IC scl=100khz ADDR=? -- I2C configure
whismanoid 15:37c83ec50ea0 6560 // parse cmdLine arg (SCL=\d+(kHZ|MHZ)?)? --> g_I2C_SCL_Hz
whismanoid 15:37c83ec50ea0 6561 if (cmdLine.parse_frequency_Hz("SCL", g_I2C_SCL_Hz))
whismanoid 15:37c83ec50ea0 6562 {
whismanoid 15:37c83ec50ea0 6563 isUpdatedI2CConfig = true;
whismanoid 15:37c83ec50ea0 6564 // TODO1: validate g_I2C_SCL_Hz against system clock frequency F_CPU
whismanoid 15:37c83ec50ea0 6565 if (g_I2C_SCL_Hz > limit_max_I2C_SCL_Hz)
whismanoid 15:37c83ec50ea0 6566 {
whismanoid 15:37c83ec50ea0 6567 g_I2C_SCL_Hz = limit_max_I2C_SCL_Hz;
whismanoid 15:37c83ec50ea0 6568 }
whismanoid 15:37c83ec50ea0 6569 if (g_I2C_SCL_Hz < limit_min_I2C_SCL_Hz)
whismanoid 15:37c83ec50ea0 6570 {
whismanoid 15:37c83ec50ea0 6571 g_I2C_SCL_Hz = limit_min_I2C_SCL_Hz;
whismanoid 15:37c83ec50ea0 6572 }
whismanoid 15:37c83ec50ea0 6573 }
whismanoid 15:37c83ec50ea0 6574 if (isUpdatedI2CConfig)
whismanoid 15:37c83ec50ea0 6575 {
whismanoid 15:37c83ec50ea0 6576 // declare in narrower scope: MAX32625MBED I2C i2cMaster(...)
whismanoid 15:37c83ec50ea0 6577 I2C i2cMaster(I2C0_SDA, I2C0_SCL); // sda scl TARGET_MAX32635MBED: P1_6, P1_7 Arduino 10-pin header
whismanoid 15:37c83ec50ea0 6578 i2cMaster.frequency(g_I2C_SCL_Hz);
whismanoid 15:37c83ec50ea0 6579 i2cMaster.start();
whismanoid 15:37c83ec50ea0 6580 i2cMaster.stop();
whismanoid 15:37c83ec50ea0 6581 i2cMaster.frequency(g_I2C_SCL_Hz);
whismanoid 15:37c83ec50ea0 6582 cmdLine.serial().printf(
whismanoid 15:37c83ec50ea0 6583 "\r\n %%IC ADDR=0x%2.2x=(0x%2.2x>>1) SCL=%d=%1.3fkHz -- I2C config",
whismanoid 15:37c83ec50ea0 6584 g_I2C_deviceAddress7, (g_I2C_deviceAddress7 << 1), g_I2C_SCL_Hz,
whismanoid 15:37c83ec50ea0 6585 (g_I2C_SCL_Hz / 1000.));
whismanoid 15:37c83ec50ea0 6586 i2cMaster.start();
whismanoid 15:37c83ec50ea0 6587 i2cMaster.stop();
whismanoid 15:37c83ec50ea0 6588 }
whismanoid 15:37c83ec50ea0 6589 }
whismanoid 15:37c83ec50ea0 6590 break;
whismanoid 15:37c83ec50ea0 6591 case 'W': case 'w':
whismanoid 15:37c83ec50ea0 6592 {
whismanoid 15:37c83ec50ea0 6593 // declare in narrower scope: MAX32625MBED I2C i2cMaster(...)
whismanoid 15:37c83ec50ea0 6594 I2C i2cMaster(I2C0_SDA, I2C0_SCL); // sda scl TARGET_MAX32635MBED: P1_6, P1_7 Arduino 10-pin header
whismanoid 15:37c83ec50ea0 6595 i2cMaster.frequency(g_I2C_SCL_Hz);
whismanoid 15:37c83ec50ea0 6596 // %IW byte byte ... byte RD=? ADDR=0x -- write
whismanoid 15:37c83ec50ea0 6597 // parse cmdLine byte list --> int byteCount; int mosiData[MAX_SPI_BYTE_COUNT];
whismanoid 15:37c83ec50ea0 6598 #define MAX_I2C_BYTE_COUNT 32
whismanoid 15:37c83ec50ea0 6599 size_t byteCount = byteCount;
whismanoid 15:37c83ec50ea0 6600 static char mosiData[MAX_I2C_BYTE_COUNT];
whismanoid 15:37c83ec50ea0 6601 static char misoData[MAX_I2C_BYTE_COUNT];
whismanoid 15:37c83ec50ea0 6602 if (cmdLine.parse_byteCount_byteList_hex(byteCount, mosiData,
whismanoid 15:37c83ec50ea0 6603 MAX_I2C_BYTE_COUNT))
whismanoid 15:37c83ec50ea0 6604 {
whismanoid 15:37c83ec50ea0 6605 // hex dump mosiData[0..byteCount-1]
whismanoid 15:37c83ec50ea0 6606 cmdLine.serial().printf(
whismanoid 15:37c83ec50ea0 6607 "\r\nADDR=0x%2.2x=(0x%2.2x>>1) byteCount:%d RD=%d\r\nI2C MOSI->",
whismanoid 15:37c83ec50ea0 6608 g_I2C_deviceAddress7,
whismanoid 15:37c83ec50ea0 6609 (g_I2C_deviceAddress7 << 1), byteCount, g_I2C_read_count);
whismanoid 15:37c83ec50ea0 6610 for (unsigned int byteIndex = 0; byteIndex < byteCount; byteIndex++)
whismanoid 15:37c83ec50ea0 6611 {
whismanoid 15:37c83ec50ea0 6612 cmdLine.serial().printf(" 0x%2.2X", mosiData[byteIndex]);
whismanoid 15:37c83ec50ea0 6613 }
whismanoid 15:37c83ec50ea0 6614 //
whismanoid 15:37c83ec50ea0 6615 // TODO: i2c transfer
whismanoid 15:37c83ec50ea0 6616 //const int addr7bit = 0x48; // 7 bit I2C address
whismanoid 15:37c83ec50ea0 6617 //const int addr8bit = 0x48 << 1; // 8bit I2C address, 0x90
whismanoid 15:37c83ec50ea0 6618 // /* int */ i2cMaster.read (int addr8bit, char *data, int length, bool repeated=false) // Read from an I2C slave.
whismanoid 15:37c83ec50ea0 6619 // /* int */ i2cMaster.read (int ack) // Read a single byte from the I2C bus.
whismanoid 15:37c83ec50ea0 6620 // /* int */ i2cMaster.write (int addr8bit, const char *data, int length, bool repeated=false) // Write to an I2C slave.
whismanoid 15:37c83ec50ea0 6621 // /* int */ i2cMaster.write (int data) // Write single byte out on the I2C bus.
whismanoid 15:37c83ec50ea0 6622 // /* void */ i2cMaster.start (void) // Creates a start condition on the I2C bus.
whismanoid 15:37c83ec50ea0 6623 // /* void */ i2cMaster.stop (void) // Creates a stop condition on the I2C bus.
whismanoid 15:37c83ec50ea0 6624 // /* int */ i2cMaster.transfer (int addr8bit, const char *tx_buffer, int tx_length, char *rx_buffer, int rx_length, const event_callback_t &callback, int event=I2C_EVENT_TRANSFER_COMPLETE, bool repeated=false) // Start nonblocking I2C transfer. More...
whismanoid 15:37c83ec50ea0 6625 // /* void */ i2cMaster.abort_transfer () // Abort the ongoing I2C transfer. More...
whismanoid 15:37c83ec50ea0 6626 const int addr8bit = g_I2C_deviceAddress7 << 1; // 8bit I2C address, 0x90
whismanoid 15:37c83ec50ea0 6627 unsigned int misoLength = 0;
whismanoid 15:37c83ec50ea0 6628 bool repeated = (g_I2C_read_count > 0);
whismanoid 15:37c83ec50ea0 6629 //
whismanoid 15:37c83ec50ea0 6630 int writeStatus = i2cMaster.write (addr8bit, mosiData, byteCount, repeated);
whismanoid 15:37c83ec50ea0 6631 switch (writeStatus)
whismanoid 15:37c83ec50ea0 6632 {
whismanoid 15:37c83ec50ea0 6633 case 0: cmdLine.serial().printf(" ack "); break;
whismanoid 15:37c83ec50ea0 6634 case 1: cmdLine.serial().printf(" nack "); break;
whismanoid 15:37c83ec50ea0 6635 default: cmdLine.serial().printf(" {writeStatus 0x%2.2X} ",
whismanoid 15:37c83ec50ea0 6636 writeStatus);
whismanoid 15:37c83ec50ea0 6637 }
whismanoid 15:37c83ec50ea0 6638 if (repeated)
whismanoid 15:37c83ec50ea0 6639 {
whismanoid 15:37c83ec50ea0 6640 int readStatus =
whismanoid 15:37c83ec50ea0 6641 i2cMaster.read (addr8bit, misoData, g_I2C_read_count, false);
whismanoid 15:37c83ec50ea0 6642 switch (readStatus)
whismanoid 15:37c83ec50ea0 6643 {
whismanoid 15:37c83ec50ea0 6644 case 1: cmdLine.serial().printf(" nack "); break;
whismanoid 15:37c83ec50ea0 6645 case 0: cmdLine.serial().printf(" ack "); break;
whismanoid 15:37c83ec50ea0 6646 default: cmdLine.serial().printf(" {readStatus 0x%2.2X} ",
whismanoid 15:37c83ec50ea0 6647 readStatus);
whismanoid 15:37c83ec50ea0 6648 }
whismanoid 15:37c83ec50ea0 6649 }
whismanoid 15:37c83ec50ea0 6650 //
whismanoid 15:37c83ec50ea0 6651 if (misoLength > 0)
whismanoid 15:37c83ec50ea0 6652 {
whismanoid 15:37c83ec50ea0 6653 // hex dump misoData[0..byteCount-1]
whismanoid 15:37c83ec50ea0 6654 cmdLine.serial().printf(" MISO<-");
whismanoid 15:37c83ec50ea0 6655 for (unsigned int byteIndex = 0; byteIndex < g_I2C_read_count;
whismanoid 15:37c83ec50ea0 6656 byteIndex++)
whismanoid 15:37c83ec50ea0 6657 {
whismanoid 15:37c83ec50ea0 6658 cmdLine.serial().printf(" 0x%2.2X", misoData[byteIndex]);
whismanoid 15:37c83ec50ea0 6659 }
whismanoid 15:37c83ec50ea0 6660 }
whismanoid 15:37c83ec50ea0 6661 cmdLine.serial().printf(" ");
whismanoid 15:37c83ec50ea0 6662 }
whismanoid 15:37c83ec50ea0 6663 }
whismanoid 15:37c83ec50ea0 6664 break;
whismanoid 15:37c83ec50ea0 6665 case 'R': case 'r':
whismanoid 15:37c83ec50ea0 6666 {
whismanoid 15:37c83ec50ea0 6667 // declare in narrower scope: MAX32625MBED I2C i2cMaster(...)
whismanoid 15:37c83ec50ea0 6668 I2C i2cMaster(I2C0_SDA, I2C0_SCL); // sda scl TARGET_MAX32635MBED: P1_6, P1_7 Arduino 10-pin header
whismanoid 15:37c83ec50ea0 6669 i2cMaster.frequency(g_I2C_SCL_Hz);
whismanoid 15:37c83ec50ea0 6670 // %IR ADDR=? RD=? -- read
whismanoid 15:37c83ec50ea0 6671 // TODO: i2c transfer
whismanoid 15:37c83ec50ea0 6672 //const int addr7bit = 0x48; // 7 bit I2C address
whismanoid 15:37c83ec50ea0 6673 //const int addr8bit = 0x48 << 1; // 8bit I2C address, 0x90
whismanoid 15:37c83ec50ea0 6674 // /* int */ i2cMaster.read (int addr8bit, char *data, int length, bool repeated=false) // Read from an I2C slave.
whismanoid 15:37c83ec50ea0 6675 // /* int */ i2cMaster.read (int ack) // Read a single byte from the I2C bus.
whismanoid 15:37c83ec50ea0 6676 // /* int */ i2cMaster.write (int addr8bit, const char *data, int length, bool repeated=false) // Write to an I2C slave.
whismanoid 15:37c83ec50ea0 6677 // /* int */ i2cMaster.write (int data) // Write single byte out on the I2C bus.
whismanoid 15:37c83ec50ea0 6678 // /* void */ i2cMaster.start (void) // Creates a start condition on the I2C bus.
whismanoid 15:37c83ec50ea0 6679 // /* void */ i2cMaster.stop (void) // Creates a stop condition on the I2C bus.
whismanoid 15:37c83ec50ea0 6680 // /* int */ i2cMaster.transfer (int addr8bit, const char *tx_buffer, int tx_length, char *rx_buffer, int rx_length, const event_callback_t &callback, int event=I2C_EVENT_TRANSFER_COMPLETE, bool repeated=false) // Start nonblocking I2C transfer. More...
whismanoid 15:37c83ec50ea0 6681 // /* void */ i2cMaster.abort_transfer () // Abort the ongoing I2C transfer. More...
whismanoid 15:37c83ec50ea0 6682 }
whismanoid 15:37c83ec50ea0 6683 break;
whismanoid 15:37c83ec50ea0 6684 case '^':
whismanoid 15:37c83ec50ea0 6685 {
whismanoid 15:37c83ec50ea0 6686 // declare in narrower scope: MAX32625MBED I2C i2cMaster(...)
whismanoid 15:37c83ec50ea0 6687 I2C i2cMaster(I2C0_SDA, I2C0_SCL); // sda scl TARGET_MAX32635MBED: P1_6, P1_7 Arduino 10-pin header
whismanoid 15:37c83ec50ea0 6688 i2cMaster.frequency(g_I2C_SCL_Hz);
whismanoid 15:37c83ec50ea0 6689 // %I^ cmd=? -- i2c_smbus_read_word_data
whismanoid 15:37c83ec50ea0 6690 // TODO: i2c transfer
whismanoid 15:37c83ec50ea0 6691 //const int addr7bit = 0x48; // 7 bit I2C address
whismanoid 15:37c83ec50ea0 6692 //const int addr8bit = 0x48 << 1; // 8bit I2C address, 0x90
whismanoid 15:37c83ec50ea0 6693 // /* int */ i2cMaster.read (int addr8bit, char *data, int length, bool repeated=false) // Read from an I2C slave.
whismanoid 15:37c83ec50ea0 6694 // /* int */ i2cMaster.read (int ack) // Read a single byte from the I2C bus.
whismanoid 15:37c83ec50ea0 6695 // /* int */ i2cMaster.write (int addr8bit, const char *data, int length, bool repeated=false) // Write to an I2C slave.
whismanoid 15:37c83ec50ea0 6696 // /* int */ i2cMaster.write (int data) // Write single byte out on the I2C bus.
whismanoid 15:37c83ec50ea0 6697 // /* void */ i2cMaster.start (void) // Creates a start condition on the I2C bus.
whismanoid 15:37c83ec50ea0 6698 // /* void */ i2cMaster.stop (void) // Creates a stop condition on the I2C bus.
whismanoid 15:37c83ec50ea0 6699 // /* int */ i2cMaster.transfer (int addr8bit, const char *tx_buffer, int tx_length, char *rx_buffer, int rx_length, const event_callback_t &callback, int event=I2C_EVENT_TRANSFER_COMPLETE, bool repeated=false) // Start nonblocking I2C transfer. More...
whismanoid 15:37c83ec50ea0 6700 // /* void */ i2cMaster.abort_transfer () // Abort the ongoing I2C transfer. More...
whismanoid 15:37c83ec50ea0 6701 }
whismanoid 15:37c83ec50ea0 6702 break;
whismanoid 15:37c83ec50ea0 6703 } // switch(cmdLine[2])
whismanoid 15:37c83ec50ea0 6704 break;
whismanoid 15:37c83ec50ea0 6705 #endif
whismanoid 15:37c83ec50ea0 6706 //
whismanoid 15:37c83ec50ea0 6707 #if HAS_SPI // SUPPORT_SPI
whismanoid 15:37c83ec50ea0 6708 case 'S': case 's':
whismanoid 15:37c83ec50ea0 6709 {
whismanoid 15:37c83ec50ea0 6710 // %S... -- SPI diagnostics
whismanoid 15:37c83ec50ea0 6711 // %SC sclk=1Mhz -- SPI configure
whismanoid 15:37c83ec50ea0 6712 // %SW -- write (write and read)
whismanoid 15:37c83ec50ea0 6713 // %SR -- read (alias for %SW because SPI always write and read)
whismanoid 15:37c83ec50ea0 6714 //
whismanoid 15:37c83ec50ea0 6715 // Process arguments SCLK=\d+(kHZ|MHZ) CPOL=\d CPHA=\d
whismanoid 15:37c83ec50ea0 6716 bool isUpdatedSPIConfig = false;
whismanoid 15:37c83ec50ea0 6717 // parse cmdLine arg (CPOL=\d)? --> g_SPI_dataMode | SPI_MODE2
whismanoid 15:37c83ec50ea0 6718 // parse cmdLine arg (CPHA=\d)? --> g_SPI_dataMode | SPI_MODE1
whismanoid 15:37c83ec50ea0 6719 if (cmdLine.parse_flag("CPOL", g_SPI_dataMode, SPI_MODE2))
whismanoid 15:37c83ec50ea0 6720 {
whismanoid 15:37c83ec50ea0 6721 isUpdatedSPIConfig = true;
whismanoid 15:37c83ec50ea0 6722 }
whismanoid 15:37c83ec50ea0 6723 if (cmdLine.parse_flag("CPHA", g_SPI_dataMode, SPI_MODE1))
whismanoid 15:37c83ec50ea0 6724 {
whismanoid 15:37c83ec50ea0 6725 isUpdatedSPIConfig = true;
whismanoid 15:37c83ec50ea0 6726 }
whismanoid 15:37c83ec50ea0 6727 if (cmdLine.parse_flag("CS", g_SPI_cs_state, 1))
whismanoid 15:37c83ec50ea0 6728 {
whismanoid 15:37c83ec50ea0 6729 isUpdatedSPIConfig = true;
whismanoid 15:37c83ec50ea0 6730 }
whismanoid 15:37c83ec50ea0 6731 // parse cmdLine arg (SCLK=\d+(kHZ|MHZ)?)? --> g_SPI_SCLK_Hz
whismanoid 15:37c83ec50ea0 6732 if (cmdLine.parse_frequency_Hz("SCLK", g_SPI_SCLK_Hz))
whismanoid 15:37c83ec50ea0 6733 {
whismanoid 15:37c83ec50ea0 6734 isUpdatedSPIConfig = true;
whismanoid 15:37c83ec50ea0 6735 // TODO1: validate g_SPI_SCLK_Hz against system clock frequency F_CPU
whismanoid 15:37c83ec50ea0 6736 if (g_SPI_SCLK_Hz > limit_max_SPI_SCLK_Hz)
whismanoid 15:37c83ec50ea0 6737 {
whismanoid 15:37c83ec50ea0 6738 g_SPI_SCLK_Hz = limit_max_SPI_SCLK_Hz;
whismanoid 15:37c83ec50ea0 6739 }
whismanoid 15:37c83ec50ea0 6740 if (g_SPI_SCLK_Hz < limit_min_SPI_SCLK_Hz)
whismanoid 15:37c83ec50ea0 6741 {
whismanoid 15:37c83ec50ea0 6742 g_SPI_SCLK_Hz = limit_min_SPI_SCLK_Hz;
whismanoid 15:37c83ec50ea0 6743 }
whismanoid 15:37c83ec50ea0 6744 }
whismanoid 15:37c83ec50ea0 6745 // Update SPI configuration
whismanoid 15:37c83ec50ea0 6746 if (isUpdatedSPIConfig)
whismanoid 15:37c83ec50ea0 6747 {
whismanoid 15:37c83ec50ea0 6748 // %SC sclk=1Mhz -- SPI configure
whismanoid 15:37c83ec50ea0 6749 spi_cs = g_SPI_cs_state;
whismanoid 15:37c83ec50ea0 6750 spi.format(8,g_SPI_dataMode); // int bits_must_be_8, int mode=0_3 CPOL=0,CPHA=0
whismanoid 15:37c83ec50ea0 6751 #if APPLICATION_MAX5715
whismanoid 15:37c83ec50ea0 6752 g_MAX5715_device.spi_frequency(g_SPI_SCLK_Hz);
whismanoid 15:37c83ec50ea0 6753 #elif APPLICATION_MAX11131
whismanoid 15:37c83ec50ea0 6754 g_MAX11131_device.spi_frequency(g_SPI_SCLK_Hz);
whismanoid 15:37c83ec50ea0 6755 #elif APPLICATION_MAX5171
whismanoid 15:37c83ec50ea0 6756 g_MAX5171_device.spi_frequency(g_SPI_SCLK_Hz);
whismanoid 15:37c83ec50ea0 6757 #elif APPLICATION_MAX11410
whismanoid 15:37c83ec50ea0 6758 g_MAX11410_device.spi_frequency(g_SPI_SCLK_Hz);
whismanoid 15:37c83ec50ea0 6759 #elif APPLICATION_MAX12345
whismanoid 15:37c83ec50ea0 6760 g_MAX12345_device.spi_frequency(g_SPI_SCLK_Hz);
whismanoid 15:37c83ec50ea0 6761 #else
whismanoid 15:37c83ec50ea0 6762 spi.frequency(g_SPI_SCLK_Hz); // int SCLK_Hz=1000000 = 1MHz (initial default)
whismanoid 15:37c83ec50ea0 6763 #endif
whismanoid 15:37c83ec50ea0 6764 //
whismanoid 15:37c83ec50ea0 6765 double ideal_divisor = ((double)SystemCoreClock) / g_SPI_SCLK_Hz;
whismanoid 15:37c83ec50ea0 6766 int actual_divisor = (int)(ideal_divisor + 0.0); // frequency divisor truncate
whismanoid 15:37c83ec50ea0 6767 double actual_SCLK_Hz = SystemCoreClock / actual_divisor;
whismanoid 15:37c83ec50ea0 6768 //
whismanoid 15:37c83ec50ea0 6769 // fixed: mbed-os-5.11: [Warning] format '%d' expects argument of type 'int', but argument 6 has type 'uint32_t {aka long unsigned int}' [-Wformat=]
whismanoid 15:37c83ec50ea0 6770 cmdLine.serial().printf(
whismanoid 15:37c83ec50ea0 6771 "\r\n %%SC CPOL=%d CPHA=%d CS=%d SCLK=%ld=%1.3fMHz (%1.1fMHz/%1.2f = actual %1.3fMHz) -- SPI config",
whismanoid 15:37c83ec50ea0 6772 ((g_SPI_dataMode & SPI_MODE2) ? 1 : 0),
whismanoid 15:37c83ec50ea0 6773 ((g_SPI_dataMode & SPI_MODE1) ? 1 : 0),
whismanoid 15:37c83ec50ea0 6774 g_SPI_cs_state,
whismanoid 15:37c83ec50ea0 6775 g_SPI_SCLK_Hz,
whismanoid 15:37c83ec50ea0 6776 (g_SPI_SCLK_Hz / 1000000.),
whismanoid 15:37c83ec50ea0 6777 ((double)(SystemCoreClock / 1000000.)),
whismanoid 15:37c83ec50ea0 6778 ideal_divisor,
whismanoid 15:37c83ec50ea0 6779 (actual_SCLK_Hz / 1000000.)
whismanoid 15:37c83ec50ea0 6780 );
whismanoid 15:37c83ec50ea0 6781 }
whismanoid 15:37c83ec50ea0 6782 // get next character
whismanoid 15:37c83ec50ea0 6783 switch (cmdLine[2])
whismanoid 15:37c83ec50ea0 6784 {
whismanoid 15:37c83ec50ea0 6785 case 'C': case 's':
whismanoid 15:37c83ec50ea0 6786 // %SC sclk=1Mhz -- SPI configure
whismanoid 15:37c83ec50ea0 6787 break;
whismanoid 15:37c83ec50ea0 6788 case 'D': case 'd':
whismanoid 15:37c83ec50ea0 6789 // %SD -- SPI diagnostic messages enable
whismanoid 15:37c83ec50ea0 6790 if (g_MAX5719_device.onSPIprint) {
whismanoid 15:37c83ec50ea0 6791 g_MAX5719_device.onSPIprint = NULL;
whismanoid 15:37c83ec50ea0 6792 // no g_MAX5719_device.loop_limit property; device_has_property(Device, 'loop_limit') != None is false
whismanoid 15:37c83ec50ea0 6793 }
whismanoid 15:37c83ec50ea0 6794 else {
whismanoid 15:37c83ec50ea0 6795 void onSPIprint_handler(size_t byteCount, uint8_t mosiData[], uint8_t misoData[]);
whismanoid 15:37c83ec50ea0 6796 g_MAX5719_device.onSPIprint = onSPIprint_handler;
whismanoid 15:37c83ec50ea0 6797 // no g_MAX5719_device.loop_limit property; device_has_property(Device, 'loop_limit') is false
whismanoid 15:37c83ec50ea0 6798 }
whismanoid 15:37c83ec50ea0 6799 break;
whismanoid 15:37c83ec50ea0 6800 case 'W': case 'R': case 'w': case 'r':
whismanoid 15:37c83ec50ea0 6801 {
whismanoid 15:37c83ec50ea0 6802 // %SW -- write (write and read)
whismanoid 15:37c83ec50ea0 6803 // %SR -- read (alias for %SW because SPI always write and read)
whismanoid 15:37c83ec50ea0 6804 // parse cmdLine byte list --> int byteCount; int mosiData[MAX_SPI_BYTE_COUNT];
whismanoid 15:37c83ec50ea0 6805 #define MAX_SPI_BYTE_COUNT 32
whismanoid 15:37c83ec50ea0 6806 size_t byteCount = byteCount;
whismanoid 15:37c83ec50ea0 6807 static char mosiData[MAX_SPI_BYTE_COUNT];
whismanoid 15:37c83ec50ea0 6808 static char misoData[MAX_SPI_BYTE_COUNT];
whismanoid 15:37c83ec50ea0 6809 if (cmdLine.parse_byteCount_byteList_hex(byteCount, mosiData,
whismanoid 15:37c83ec50ea0 6810 MAX_SPI_BYTE_COUNT))
whismanoid 15:37c83ec50ea0 6811 {
whismanoid 15:37c83ec50ea0 6812 // hex dump mosiData[0..byteCount-1]
whismanoid 15:37c83ec50ea0 6813 cmdLine.serial().printf("\r\nSPI");
whismanoid 15:37c83ec50ea0 6814 if (byteCount > 7) {
whismanoid 15:37c83ec50ea0 6815 cmdLine.serial().printf(" byteCount:%d", byteCount);
whismanoid 15:37c83ec50ea0 6816 }
whismanoid 15:37c83ec50ea0 6817 cmdLine.serial().printf(" MOSI->");
whismanoid 15:37c83ec50ea0 6818 for (unsigned int byteIndex = 0; byteIndex < byteCount; byteIndex++)
whismanoid 15:37c83ec50ea0 6819 {
whismanoid 15:37c83ec50ea0 6820 cmdLine.serial().printf(" 0x%2.2X", mosiData[byteIndex]);
whismanoid 15:37c83ec50ea0 6821 }
whismanoid 15:37c83ec50ea0 6822 spi_cs = 0;
whismanoid 15:37c83ec50ea0 6823 unsigned int numBytesTransferred =
whismanoid 15:37c83ec50ea0 6824 spi.write(mosiData, byteCount, misoData, byteCount);
whismanoid 15:37c83ec50ea0 6825 spi_cs = 1;
whismanoid 15:37c83ec50ea0 6826 // hex dump misoData[0..byteCount-1]
whismanoid 15:37c83ec50ea0 6827 cmdLine.serial().printf(" MISO<-");
whismanoid 15:37c83ec50ea0 6828 for (unsigned int byteIndex = 0; byteIndex < numBytesTransferred;
whismanoid 15:37c83ec50ea0 6829 byteIndex++)
whismanoid 15:37c83ec50ea0 6830 {
whismanoid 15:37c83ec50ea0 6831 cmdLine.serial().printf(" 0x%2.2X", misoData[byteIndex]);
whismanoid 15:37c83ec50ea0 6832 }
whismanoid 15:37c83ec50ea0 6833 cmdLine.serial().printf(" ");
whismanoid 15:37c83ec50ea0 6834 }
whismanoid 15:37c83ec50ea0 6835 }
whismanoid 15:37c83ec50ea0 6836 break;
whismanoid 15:37c83ec50ea0 6837 } // switch(cmdLine[2])
whismanoid 15:37c83ec50ea0 6838 } // case 'S': // %S... -- SPI diagnostics
whismanoid 15:37c83ec50ea0 6839 break;
whismanoid 15:37c83ec50ea0 6840 #endif
whismanoid 15:37c83ec50ea0 6841 //
whismanoid 15:37c83ec50ea0 6842 // A-Z,a-z,0-9 reserved for application use
whismanoid 15:37c83ec50ea0 6843 } // switch(cmdLine[1])
whismanoid 15:37c83ec50ea0 6844 } // end void pinsMonitor_submenu_onEOLcommandParser(CmdLine & cmdLine)
whismanoid 15:37c83ec50ea0 6845 #endif // USE_CMDLINE_MENUS support CmdLine command menus
whismanoid 15:37c83ec50ea0 6846
whismanoid 15:37c83ec50ea0 6847 #if USE_CMDLINE_MENUS // support CmdLine command menus
whismanoid 4:d9b05924ad4c 6848 //--------------------------------------------------
whismanoid 4:d9b05924ad4c 6849 void main_menu_onEOLcommandParser(CmdLine& cmdLine)
whismanoid 4:d9b05924ad4c 6850 {
whismanoid 9:45f98573eb6d 6851 // process command line
whismanoid 31:47eee7e0cc2d 6852 // TODO: avoid excess console noise when a Button event happens during datalogging -- quiet inside Run_command_table()
whismanoid 45:74bf1fe021e5 6853 #if USE_DATALOGGER_CommandTable
whismanoid 31:47eee7e0cc2d 6854 if (g_Run_command_table_running == false) {
whismanoid 45:74bf1fe021e5 6855 #endif // USE_DATALOGGER_CommandTable
whismanoid 48:18647e0516f2 6856 //~ cmdLine.serial().printf("\r\nCmdLine buf:\"%s\"\r\n", cmdLine.str());
whismanoid 45:74bf1fe021e5 6857 #if USE_DATALOGGER_CommandTable
whismanoid 31:47eee7e0cc2d 6858 } // if (g_Run_command_table_running)
whismanoid 45:74bf1fe021e5 6859 #endif // USE_DATALOGGER_CommandTable
whismanoid 31:47eee7e0cc2d 6860 // TODO: avoid excess console noise when a Button event happens during datalogging -- quiet inside Run_command_table()
whismanoid 45:74bf1fe021e5 6861 #if USE_DATALOGGER_CommandTable
whismanoid 31:47eee7e0cc2d 6862 if (g_Run_command_table_running == false) {
whismanoid 45:74bf1fe021e5 6863 #endif // USE_DATALOGGER_CommandTable
whismanoid 45:74bf1fe021e5 6864 #if USE_DATALOGGER_CommandTable
whismanoid 31:47eee7e0cc2d 6865 } // if (g_Run_command_table_running)
whismanoid 45:74bf1fe021e5 6866 #endif // USE_DATALOGGER_CommandTable
whismanoid 4:d9b05924ad4c 6867
whismanoid 4:d9b05924ad4c 6868 #if USE_DATALOGGER_TRIGGER // support Datalog trigger
whismanoid 31:47eee7e0cc2d 6869 // TODO: avoid excess console noise when a Button event happens during datalogging -- quiet inside Run_command_table()
whismanoid 45:74bf1fe021e5 6870 #if USE_DATALOGGER_CommandTable
whismanoid 31:47eee7e0cc2d 6871 if (g_Run_command_table_running == false) {
whismanoid 45:74bf1fe021e5 6872 #endif // USE_DATALOGGER_CommandTable
whismanoid 4:d9b05924ad4c 6873 // If datalog is free running, halt on any possible received command
whismanoid 17:9397ea3ea7e9 6874 if (Datalogger_Trigger != trigger_Halt) {
whismanoid 4:d9b05924ad4c 6875 Datalogger_Trigger = trigger_Halt;
whismanoid 9:45f98573eb6d 6876 cmdLine.serial().printf("Datalog stopped by USB command input\r\n");
whismanoid 9:45f98573eb6d 6877 cmdLine.serial().printf("Restart datalog by sending LR\r\n");
whismanoid 4:d9b05924ad4c 6878 }
whismanoid 45:74bf1fe021e5 6879 #if USE_DATALOGGER_CommandTable
whismanoid 31:47eee7e0cc2d 6880 } // if (g_Run_command_table_running)
whismanoid 45:74bf1fe021e5 6881 #endif // USE_DATALOGGER_CommandTable
whismanoid 4:d9b05924ad4c 6882 #endif // USE_DATALOGGER_TRIGGER support Datalog trigger
whismanoid 4:d9b05924ad4c 6883
whismanoid 4:d9b05924ad4c 6884 // DIAGNOSTIC: print line buffer
whismanoid 4:d9b05924ad4c 6885 //~ cmdLine.serial().printf("\r\nmain_menu_onEOLcommandParser: ~%s~\r\n", cmdLine.str());
whismanoid 4:d9b05924ad4c 6886 //
whismanoid 4:d9b05924ad4c 6887 switch (cmdLine[0])
whismanoid 4:d9b05924ad4c 6888 {
whismanoid 4:d9b05924ad4c 6889 case '?':
whismanoid 4:d9b05924ad4c 6890 main_menu_status(cmdLine);
whismanoid 4:d9b05924ad4c 6891 main_menu_help(cmdLine);
whismanoid 4:d9b05924ad4c 6892 // print command prompt
whismanoid 4:d9b05924ad4c 6893 //cmdLine.serial().printf("\r\n>");
whismanoid 4:d9b05924ad4c 6894 break;
whismanoid 4:d9b05924ad4c 6895 case '\r': case '\n': // ignore blank line
whismanoid 4:d9b05924ad4c 6896 case '\0': // ignore empty line
whismanoid 30:07197a430869 6897 main_menu_status(cmdLine);
whismanoid 30:07197a430869 6898 //~ main_menu_help(cmdLine);
whismanoid 30:07197a430869 6899 // print command prompt
whismanoid 30:07197a430869 6900 //cmdLine.serial().printf("\r\n>");
whismanoid 30:07197a430869 6901 break;
whismanoid 4:d9b05924ad4c 6902 case '#': // ignore comment line
whismanoid 4:d9b05924ad4c 6903 // # -- lines beginning with # are comments
whismanoid 30:07197a430869 6904 //
whismanoid 30:07197a430869 6905 #if USE_DATALOGGER_REMARK_FIELD
whismanoid 30:07197a430869 6906 // Datalogger_PrintRow() print gstrRemarkText field from recent #remark -- in main_menu_onEOLcommandParser
whismanoid 30:07197a430869 6907 // # command handler update gstrRemarkText buffer instead of just ignoring the remark
whismanoid 30:07197a430869 6908 //
whismanoid 30:07197a430869 6909 // ignore extra spaces before the remark
whismanoid 30:07197a430869 6910 // find argIndex such that cmdLine[argIndex] is the start of the second word
whismanoid 30:07197a430869 6911 int argIndex;
whismanoid 30:07197a430869 6912 for (argIndex = 1; cmdLine[argIndex] != '\0'; argIndex++)
whismanoid 30:07197a430869 6913 {
whismanoid 30:07197a430869 6914 if (cmdLine[argIndex] == ' ') break;
whismanoid 30:07197a430869 6915 }
whismanoid 30:07197a430869 6916 for (; cmdLine[argIndex] != '\0'; argIndex++)
whismanoid 30:07197a430869 6917 {
whismanoid 30:07197a430869 6918 if (cmdLine[argIndex] != ' ') break;
whismanoid 30:07197a430869 6919 }
whismanoid 30:07197a430869 6920 //
whismanoid 30:07197a430869 6921 strncpy(gstrRemarkText, cmdLine.str()+argIndex, gstrRemarkTextLASTINDEX+1);
whismanoid 30:07197a430869 6922 // do not exceed string buffer limit; keep sentinel null character at end of buffer
whismanoid 30:07197a430869 6923 gstrRemarkText[gstrRemarkTextLASTINDEX] = '\0';
whismanoid 41:13a6a097502c 6924 for (unsigned int index = 0; index < gstrRemarkTextLASTINDEX; index++)
whismanoid 30:07197a430869 6925 {
whismanoid 30:07197a430869 6926 if ((gstrRemarkText[index]) == '\0') break; // null character at end of string
whismanoid 30:07197a430869 6927 if ((gstrRemarkText[index]) < 0x20) {
whismanoid 30:07197a430869 6928 // replace non-printing characters with _
whismanoid 30:07197a430869 6929 gstrRemarkText[index] = '_';
whismanoid 30:07197a430869 6930 continue;
whismanoid 30:07197a430869 6931 }
whismanoid 30:07197a430869 6932 if ((gstrRemarkText[index]) >= 0x7F) {
whismanoid 30:07197a430869 6933 // replace non-printing characters with _
whismanoid 30:07197a430869 6934 gstrRemarkText[index] = '_';
whismanoid 30:07197a430869 6935 continue;
whismanoid 30:07197a430869 6936 }
whismanoid 30:07197a430869 6937 switch(gstrRemarkText[index])
whismanoid 30:07197a430869 6938 {
whismanoid 30:07197a430869 6939 case ',':
whismanoid 30:07197a430869 6940 // replace , with ;
whismanoid 30:07197a430869 6941 gstrRemarkText[index] = ';';
whismanoid 30:07197a430869 6942 break;
whismanoid 30:07197a430869 6943 case '"':
whismanoid 30:07197a430869 6944 // replace " with '
whismanoid 30:07197a430869 6945 gstrRemarkText[index] = '\'';
whismanoid 30:07197a430869 6946 break;
whismanoid 30:07197a430869 6947 case '\\':
whismanoid 30:07197a430869 6948 // replace \ with /
whismanoid 30:07197a430869 6949 gstrRemarkText[index] = '/';
whismanoid 30:07197a430869 6950 break;
whismanoid 30:07197a430869 6951 }
whismanoid 30:07197a430869 6952 }
whismanoid 30:07197a430869 6953 #endif // USE_DATALOGGER_REMARK_FIELD
whismanoid 30:07197a430869 6954 //
whismanoid 31:47eee7e0cc2d 6955 // TODO: avoid excess console noise when a Button event happens during datalogging -- quiet inside Run_command_table()
whismanoid 45:74bf1fe021e5 6956 #if USE_DATALOGGER_CommandTable
whismanoid 31:47eee7e0cc2d 6957 if (g_Run_command_table_running == false) {
whismanoid 45:74bf1fe021e5 6958 #endif // USE_DATALOGGER_CommandTable
whismanoid 4:d9b05924ad4c 6959 main_menu_status(cmdLine);
whismanoid 45:74bf1fe021e5 6960 #if USE_DATALOGGER_CommandTable
whismanoid 31:47eee7e0cc2d 6961 } // if (g_Run_command_table_running)
whismanoid 45:74bf1fe021e5 6962 #endif // USE_DATALOGGER_CommandTable
whismanoid 4:d9b05924ad4c 6963 //~ main_menu_help(cmdLine);
whismanoid 4:d9b05924ad4c 6964 // print command prompt
whismanoid 4:d9b05924ad4c 6965 //cmdLine.serial().printf("\r\n>");
whismanoid 4:d9b05924ad4c 6966 break;
whismanoid 4:d9b05924ad4c 6967 #if ECHO_EOF_ON_EOL
whismanoid 4:d9b05924ad4c 6968 case '\x04': // Unicode (U+0004) EOT END OF TRANSMISSION = CTRL+D as EOF end of file
whismanoid 4:d9b05924ad4c 6969 cmdLine.serial().printf("\x04"); // immediately echo EOF for test scripting
whismanoid 4:d9b05924ad4c 6970 diagnostic_led_EOF();
whismanoid 4:d9b05924ad4c 6971 break;
whismanoid 4:d9b05924ad4c 6972 case '\x1a': // Unicode (U+001A) SUB SUBSTITUTE = CTRL+Z as EOF end of file
whismanoid 4:d9b05924ad4c 6973 cmdLine.serial().printf("\x1a"); // immediately echo EOF for test scripting
whismanoid 4:d9b05924ad4c 6974 diagnostic_led_EOF();
whismanoid 4:d9b05924ad4c 6975 break;
whismanoid 4:d9b05924ad4c 6976 #endif
whismanoid 10:04022a61b527 6977 #if defined(SPI_ADC_DeviceName) // SPI connected ADC
whismanoid 10:04022a61b527 6978 case '!': // device init
whismanoid 10:04022a61b527 6979 {
whismanoid 10:04022a61b527 6980 cmdLine.serial().printf("Init");
whismanoid 10:04022a61b527 6981 // call function Init
whismanoid 10:04022a61b527 6982 uint8_t result = g_MAX11410_device.Init();
whismanoid 10:04022a61b527 6983 // cmdLine.serial().printf(" =%d\r\n", result);
whismanoid 10:04022a61b527 6984 cmdLine.serial().printf(" =%d\r\n", result);
whismanoid 10:04022a61b527 6985 #if USE_CUSTOM_REG_INIT // custom_reg_init_addr[], custom_reg_init_data[], custom_reg_init_count
whismanoid 10:04022a61b527 6986 // in command '!' device init, apply list of custom register writes after init
whismanoid 10:04022a61b527 6987 // custom_reg_init_addr[], custom_reg_init_data[], custom_reg_init_count
whismanoid 10:04022a61b527 6988 for (unsigned int index = 0; index < custom_reg_init_count; index++) {
whismanoid 10:04022a61b527 6989 uint8_t regAddress = custom_reg_init_addr[index];
whismanoid 10:04022a61b527 6990 uint32_t regData = custom_reg_init_data[index];
whismanoid 10:04022a61b527 6991 cmdLine.serial().printf("*%s=0x%06.6x",
whismanoid 10:04022a61b527 6992 g_MAX11410_device.RegName((MAX11410::MAX11410_CMD_enum_t)regAddress),
whismanoid 10:04022a61b527 6993 regData
whismanoid 10:04022a61b527 6994 );
whismanoid 10:04022a61b527 6995 g_MAX11410_device.RegWrite((MAX11410::MAX11410_CMD_enum_t)regAddress, regData);
whismanoid 10:04022a61b527 6996 }
whismanoid 10:04022a61b527 6997 #endif // USE_CUSTOM_REG_INIT
whismanoid 10:04022a61b527 6998 g_MAX11410_device.v_filter = SPI_AIN_Cfg_v_filter_ch[0];
whismanoid 10:04022a61b527 6999 g_MAX11410_device.v_ctrl = SPI_AIN_Cfg_v_ctrl_ch[0];
whismanoid 10:04022a61b527 7000 g_MAX11410_device.v_pga = SPI_AIN_Cfg_v_pga_ch[0];
whismanoid 10:04022a61b527 7001 }
whismanoid 10:04022a61b527 7002 break;
whismanoid 10:04022a61b527 7003 #endif // defined(SPI_ADC_DeviceName) // SPI connected ADC
whismanoid 4:d9b05924ad4c 7004 #if USE_SELFTEST
whismanoid 4:d9b05924ad4c 7005 case '.':
whismanoid 4:d9b05924ad4c 7006 {
whismanoid 4:d9b05924ad4c 7007 // . -- SelfTest
whismanoid 4:d9b05924ad4c 7008 cmdLine.serial().printf("SelfTest()");
whismanoid 4:d9b05924ad4c 7009 SelfTest(cmdLine);
whismanoid 4:d9b05924ad4c 7010 }
whismanoid 4:d9b05924ad4c 7011 break;
whismanoid 4:d9b05924ad4c 7012 #endif // USE_SELFTEST
whismanoid 15:37c83ec50ea0 7013 #if 1 // APPLICATION_ArduinoPinsMonitor
whismanoid 4:d9b05924ad4c 7014 case '%':
whismanoid 4:d9b05924ad4c 7015 {
whismanoid 4:d9b05924ad4c 7016 pinsMonitor_submenu_onEOLcommandParser(cmdLine);
whismanoid 4:d9b05924ad4c 7017 }
whismanoid 4:d9b05924ad4c 7018 break; // case '%'
whismanoid 4:d9b05924ad4c 7019 #endif // APPLICATION_ArduinoPinsMonitor
whismanoid 9:45f98573eb6d 7020 #if USE_STAR_REG_READWRITE // * command read/write reg *reg? *reg=value
whismanoid 10:04022a61b527 7021 // reuse the Serial_Tester command *regName=regValue
whismanoid 10:04022a61b527 7022 // CODE GENERATOR: generate * command read/write reg *reg? *reg=value
whismanoid 10:04022a61b527 7023 case '*':
whismanoid 10:04022a61b527 7024 {
whismanoid 10:04022a61b527 7025 // if buffer starts with a regName:
whismanoid 10:04022a61b527 7026 // for each reg value (0..n) if(cmdLine.has_keyword(device.regName(r))):
whismanoid 10:04022a61b527 7027 // cmdLine.serial().printf(" scan RegName...\r\n");
whismanoid 10:04022a61b527 7028 }
whismanoid 10:04022a61b527 7029 break;
whismanoid 9:45f98573eb6d 7030 #endif // USE_STAR_REG_READWRITE // * command read/write reg *reg? *reg=value
whismanoid 10:04022a61b527 7031 //
whismanoid 10:04022a61b527 7032 #if 1 // USE_AUX_SERIAL_CMD_FORWARDING && (HAS_AUX_SERIAL || HAS_DAPLINK_SERIAL)
whismanoid 10:04022a61b527 7033 // TODO WIP Command forwarding to Auxiliary serial port TX/RX #257 -- main_menu_onEOLcommandParser
whismanoid 40:330b28116178 7034 case '>': case '<': // > send and receive; < receive without sending anything
whismanoid 10:04022a61b527 7035 {
whismanoid 10:04022a61b527 7036 // prefer cmdLine_AUXserial if available, else cmdLine_DAPLINKserial; else we don't have this feature
whismanoid 10:04022a61b527 7037 # if HAS_AUX_SERIAL
whismanoid 10:04022a61b527 7038 // TODO WIP Command forwarding to AUX serial TX/RX cmdLine_AUXserial #257
whismanoid 10:04022a61b527 7039 CmdLine& cmdLine_AuxSerial = cmdLine_AUXserial;
whismanoid 10:04022a61b527 7040 Serial& AuxSerial = AUXserial;
whismanoid 10:04022a61b527 7041 # elif HAS_DAPLINK_SERIAL
whismanoid 10:04022a61b527 7042 // TODO WIP Command forwarding to DAPLINK serial TX/RX cmdLine_DAPLINKserial #257
whismanoid 10:04022a61b527 7043 CmdLine& cmdLine_AuxSerial = cmdLine_DAPLINKserial;
whismanoid 10:04022a61b527 7044 Serial& AuxSerial = DAPLINKserial;
whismanoid 10:04022a61b527 7045 # else // neither HAS_AUX_SERIAL HAS_DAPLINK_SERIAL
whismanoid 10:04022a61b527 7046 #warning "USE_AUX_SERIAL_CMD_FORWARDING should not be enabled without HAS_AUX_SERIAL or HAS_DAPLINK_SERIAL"
whismanoid 10:04022a61b527 7047 # endif // HAS_AUX_SERIAL HAS_DAPLINK_SERIAL
whismanoid 10:04022a61b527 7048 //
whismanoid 40:330b28116178 7049 int g_auxSerialCom_outgoing_string_cr = 1; // option to send CR after outgoing_string
whismanoid 40:330b28116178 7050 int g_auxSerialCom_outgoing_string_lf = 0; // option to send LF after outgoing_string (breaks remote datalogger LR!)
whismanoid 40:330b28116178 7051 int g_auxSerialCom_rx_string_verbose_crlf = 0; // option to display \r\n as "\\r\\n" in rx_string_buf
whismanoid 40:330b28116178 7052 int g_auxSerialCom_rx_string_verbose_ctrl = 1; // option to display control codes as \xXX
whismanoid 40:330b28116178 7053 const char* g_auxSerialCom_display_tx_prefix = "\r\n->|"; // "\r\n >";
whismanoid 40:330b28116178 7054 const char* g_auxSerialCom_display_rx_prefix = "\r\n<-|"; // "\r\n< ";
whismanoid 40:330b28116178 7055 //
whismanoid 40:330b28116178 7056 bool need_g_auxSerialCom_display_rx_prefix = 1; // temp
whismanoid 40:330b28116178 7057 //
whismanoid 10:04022a61b527 7058 // >> suppress key=value parsing
whismanoid 10:04022a61b527 7059 bool suppress_parsing = (cmdLine[1] == '>');
whismanoid 10:04022a61b527 7060 if (suppress_parsing == false) {
whismanoid 10:04022a61b527 7061 // int g_auxSerialCom_baud = 9600; //!< baud rate Auxiliary serial port
whismanoid 10:04022a61b527 7062 if (cmdLine.parse_int_dec("baud", g_auxSerialCom_baud))
whismanoid 10:04022a61b527 7063 {
whismanoid 10:04022a61b527 7064 // Command forwarding to AUX serial TX/RX cmdLine_AUXserial #257 -- baud rate
whismanoid 10:04022a61b527 7065 cmdLine_AuxSerial.serial().printf("\r\n*** New Baud Rate %d ***\r\n", g_auxSerialCom_baud);
whismanoid 10:04022a61b527 7066 AuxSerial.baud(g_auxSerialCom_baud);
whismanoid 10:04022a61b527 7067 cmdLine_AuxSerial.serial().printf("\r\n*** Baud Rate was set to %d ***\r\n", g_auxSerialCom_baud);
whismanoid 10:04022a61b527 7068 }
whismanoid 10:04022a61b527 7069 #if 0
whismanoid 10:04022a61b527 7070 // int g_auxSerialCom_tx_wait_echo = 0; //!< TX wait for each character echo?
whismanoid 10:04022a61b527 7071 if (cmdLine.parse_int_dec("tx_wait_echo", g_auxSerialCom_tx_wait_echo))
whismanoid 10:04022a61b527 7072 {
whismanoid 10:04022a61b527 7073 // Command forwarding to AUX serial TX/RX cmdLine_AUXserial #257 -- tx_wait_echo
whismanoid 10:04022a61b527 7074 //~ cmdLine_AuxSerial.serial().printf("\r\n*** tx_wait_echo was set to %d ***\r\n", g_auxSerialCom_tx_wait_echo);
whismanoid 10:04022a61b527 7075 cmdLine.serial().printf("\r\n tx_wait_echo=%d", g_auxSerialCom_tx_wait_echo);
whismanoid 10:04022a61b527 7076 }
whismanoid 10:04022a61b527 7077 // int g_auxSerialCom_tx_char_delay_ms = 0; //!< TX delay after each char?
whismanoid 10:04022a61b527 7078 if (cmdLine.parse_int_dec("tx_char_delay_ms", g_auxSerialCom_tx_char_delay_ms))
whismanoid 10:04022a61b527 7079 {
whismanoid 10:04022a61b527 7080 // Command forwarding to AUX serial TX/RX cmdLine_AUXserial #257 -- tx_char_delay_ms
whismanoid 10:04022a61b527 7081 //~ cmdLine_AuxSerial.serial().printf("\r\n*** tx_char_delay_ms was set to %d ***\r\n", g_auxSerialCom_tx_char_delay_ms);
whismanoid 10:04022a61b527 7082 cmdLine.serial().printf("\r\n tx_char_delay_ms=%dms", g_auxSerialCom_tx_char_delay_ms);
whismanoid 10:04022a61b527 7083 }
whismanoid 10:04022a61b527 7084 // int g_auxSerialCom_tx_line_delay_ms = 0; //!< TX delay after each CR/LF?
whismanoid 10:04022a61b527 7085 if (cmdLine.parse_int_dec("tx_line_delay_ms", g_auxSerialCom_tx_line_delay_ms))
whismanoid 10:04022a61b527 7086 {
whismanoid 10:04022a61b527 7087 // Command forwarding to AUX serial TX/RX cmdLine_AUXserial #257 -- tx_line_delay_ms
whismanoid 10:04022a61b527 7088 //~ cmdLine_AuxSerial.serial().printf("\r\n*** tx_line_delay_ms was set to %d ***\r\n", g_auxSerialCom_tx_line_delay_ms);
whismanoid 10:04022a61b527 7089 cmdLine.serial().printf("\r\n tx_line_delay_ms=%dms", g_auxSerialCom_tx_line_delay_ms);
whismanoid 10:04022a61b527 7090 }
whismanoid 10:04022a61b527 7091 #endif
whismanoid 10:04022a61b527 7092 // int g_auxSerialCom_message_ms = 0; //!< capture RX until response timeout?
whismanoid 10:04022a61b527 7093 if (cmdLine.parse_int_dec("message_ms", g_auxSerialCom_message_ms))
whismanoid 10:04022a61b527 7094 {
whismanoid 10:04022a61b527 7095 // Command forwarding to AUX serial TX/RX cmdLine_AUXserial #257 -- message_ms
whismanoid 10:04022a61b527 7096 //~ cmdLine_AuxSerial.serial().printf("\r\n*** message_ms was set to %d ***\r\n", g_auxSerialCom_message_ms);
whismanoid 10:04022a61b527 7097 cmdLine.serial().printf("\r\n message_ms timeout %dms", g_auxSerialCom_message_ms);
whismanoid 10:04022a61b527 7098 }
whismanoid 10:04022a61b527 7099 // int g_auxSerialCom_rx_idle_ms = 0; //!< capture RX until idle timeout?
whismanoid 10:04022a61b527 7100 if (cmdLine.parse_int_dec("rx_idle_ms", g_auxSerialCom_rx_idle_ms))
whismanoid 10:04022a61b527 7101 {
whismanoid 10:04022a61b527 7102 // Command forwarding to AUX serial TX/RX cmdLine_AUXserial #257 -- rx_idle_ms
whismanoid 10:04022a61b527 7103 //~ cmdLine_AuxSerial.serial().printf("\r\n*** rx_idle_ms was set to %d ***\r\n", g_auxSerialCom_rx_idle_ms);
whismanoid 10:04022a61b527 7104 cmdLine.serial().printf("\r\n rx_idle_ms timeout %dms", g_auxSerialCom_rx_idle_ms);
whismanoid 10:04022a61b527 7105 }
whismanoid 10:04022a61b527 7106 // int g_auxSerialCom_rx_max_count = 0; //!< capture RX until max character count?
whismanoid 10:04022a61b527 7107 if (cmdLine.parse_int_dec("rx_max_count", g_auxSerialCom_rx_max_count))
whismanoid 10:04022a61b527 7108 {
whismanoid 10:04022a61b527 7109 // Command forwarding to AUX serial TX/RX cmdLine_AUXserial #257 -- rx_max_count
whismanoid 10:04022a61b527 7110 //~ cmdLine_AuxSerial.serial().printf("\r\n*** rx_max_count was set to %d ***\r\n", g_auxSerialCom_rx_max_count);
whismanoid 10:04022a61b527 7111 cmdLine.serial().printf("\r\n rx_max_count %d bytes", g_auxSerialCom_rx_max_count);
whismanoid 10:04022a61b527 7112 }
whismanoid 10:04022a61b527 7113 // int g_auxSerialCom_rx_eot = 0; //!< capture RX until match end of text char?
whismanoid 10:04022a61b527 7114 if (cmdLine.parse_int_dec("rx_eot", g_auxSerialCom_rx_eot))
whismanoid 10:04022a61b527 7115 {
whismanoid 10:04022a61b527 7116 // Command forwarding to AUX serial TX/RX cmdLine_AUXserial #257 -- rx_eot
whismanoid 10:04022a61b527 7117 //~ cmdLine_AUXserial.serial().printf("\r\n*** rx_eot was set to %d ***\r\n", g_auxSerialCom_rx_eot);
whismanoid 10:04022a61b527 7118 cmdLine.serial().printf("\r\n rx_eot %d", g_auxSerialCom_rx_eot);
whismanoid 10:04022a61b527 7119 }
whismanoid 10:04022a61b527 7120 }
whismanoid 10:04022a61b527 7121 // Command forwarding to AUX serial TX/RX cmdLine_AuxSerial #257 -- send outgoing_string
whismanoid 41:13a6a097502c 7122 char* outgoing_string = ""; // warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
whismanoid 40:330b28116178 7123 if (cmdLine[0] == '>') {
whismanoid 40:330b28116178 7124 outgoing_string = (char*)cmdLine.str();
whismanoid 40:330b28116178 7125 // > use key=value parsing
whismanoid 40:330b28116178 7126 // >> suppress key=value parsing
whismanoid 40:330b28116178 7127 if (suppress_parsing) {
whismanoid 40:330b28116178 7128 cmdLine.serial().printf("\r\n suppress_parsing outgoing_string=\"%s\"", outgoing_string);
whismanoid 40:330b28116178 7129 outgoing_string++; // skip the first '>'
whismanoid 40:330b28116178 7130 outgoing_string++; // skip the second '>'
whismanoid 40:330b28116178 7131 } else {
whismanoid 40:330b28116178 7132 // TODO: after parsing, key=value pairs should be deleted, but outgoing_string=">xyzzy abc=def"
whismanoid 40:330b28116178 7133 cmdLine.serial().printf("\r\n after parsing, outgoing_string=\"%s\"", outgoing_string);
whismanoid 40:330b28116178 7134 outgoing_string++; // skip the first '>'
whismanoid 40:330b28116178 7135 }
whismanoid 40:330b28116178 7136 } // if (cmdLine[0] == '>')
whismanoid 10:04022a61b527 7137 static char rx_string_buf[RX_STRING_BUF_SIZE];
whismanoid 10:04022a61b527 7138 unsigned int rx_string_length = 0;
whismanoid 40:330b28116178 7139 //cmdLine.serial().printf("\r\n >%s\r\n <", outgoing_string);
whismanoid 40:330b28116178 7140 //char* g_auxSerialCom_display_tx_prefix = "\r\n >";
whismanoid 40:330b28116178 7141 //char* g_auxSerialCom_display_rx_prefix = "\r\n< ";
whismanoid 40:330b28116178 7142 cmdLine.serial().printf("%s%s%s",
whismanoid 40:330b28116178 7143 g_auxSerialCom_display_tx_prefix, // "\r\n >"
whismanoid 40:330b28116178 7144 outgoing_string,
whismanoid 40:330b28116178 7145 g_auxSerialCom_display_rx_prefix // "\r\n <"
whismanoid 40:330b28116178 7146 );
whismanoid 10:04022a61b527 7147 rx_string_buf[0] = '\0';
whismanoid 10:04022a61b527 7148 rx_string_length = 0;
whismanoid 10:04022a61b527 7149 //
whismanoid 10:04022a61b527 7150 // int g_auxSerialCom_tx_wait_echo = 0; //!< TX wait for each character echo?
whismanoid 10:04022a61b527 7151 // int g_auxSerialCom_tx_char_delay_ms = 0; //!< TX delay after each char?
whismanoid 10:04022a61b527 7152 // int g_auxSerialCom_tx_line_delay_ms = 0; //!< TX delay after each CR/LF?
whismanoid 10:04022a61b527 7153 //
whismanoid 10:04022a61b527 7154 // int g_auxSerialCom_Timer_begin_message_ms = 0; //!< start of message
whismanoid 10:04022a61b527 7155 // int g_auxSerialCom_Timer_begin_rx_idle_ms = 0; //!< recent RX character timestamp
whismanoid 10:04022a61b527 7156 // int g_auxSerialCom_message_ms = 10000; //!< maximum RX message total response time
whismanoid 10:04022a61b527 7157 // int g_auxSerialCom_rx_idle_ms = 2000; //!< maximum RX message idle time between characters
whismanoid 10:04022a61b527 7158 // int g_auxSerialCom_rx_max_count = RX_STRING_BUF_SIZE-1; //!< maximum RX message total length
whismanoid 10:04022a61b527 7159 // int g_auxSerialCom_rx_eot = '\r'; //!< capture RX until match end of text char
whismanoid 10:04022a61b527 7160 //~ cmdLine_AuxSerial.serial().printf("\r\n*** TODO forward %s ***\r\n", outgoing_string);
whismanoid 10:04022a61b527 7161 //
whismanoid 10:04022a61b527 7162 // TODO: send whole string or send character-by-character?
whismanoid 40:330b28116178 7163 if (cmdLine[0] == '>') {
whismanoid 40:330b28116178 7164 cmdLine_AuxSerial.serial().printf("%s", outgoing_string);
whismanoid 40:330b28116178 7165 //
whismanoid 40:330b28116178 7166 // TODO: send CRLF or just send CR line end?
whismanoid 40:330b28116178 7167 if (g_auxSerialCom_outgoing_string_cr) { cmdLine_AuxSerial.serial().printf("\r"); }
whismanoid 40:330b28116178 7168 if (g_auxSerialCom_outgoing_string_lf) { cmdLine_AuxSerial.serial().printf("\n"); }
whismanoid 40:330b28116178 7169 // cmdLine_AuxSerial.serial().printf("\r\n");
whismanoid 40:330b28116178 7170 } // if (cmdLine[0] == '>')
whismanoid 40:330b28116178 7171 //
whismanoid 10:04022a61b527 7172 g_auxSerialCom_Timer.start();
whismanoid 10:04022a61b527 7173 g_auxSerialCom_Timer_begin_message_ms = g_auxSerialCom_Timer.read_ms(); // start of message
whismanoid 10:04022a61b527 7174 g_auxSerialCom_Timer_begin_rx_idle_ms = g_auxSerialCom_Timer.read_ms(); // recent RX character timestamp
whismanoid 10:04022a61b527 7175 while (rx_string_length < (RX_STRING_BUF_SIZE-1)) {
whismanoid 10:04022a61b527 7176 if ((g_auxSerialCom_Timer.read_ms() - g_auxSerialCom_Timer_begin_message_ms) > g_auxSerialCom_message_ms) {
whismanoid 10:04022a61b527 7177 cmdLine.serial().printf("\r\n message_ms timeout %dms", g_auxSerialCom_message_ms);
whismanoid 10:04022a61b527 7178 break;
whismanoid 10:04022a61b527 7179 }
whismanoid 10:04022a61b527 7180 if ((g_auxSerialCom_Timer.read_ms() - g_auxSerialCom_Timer_begin_rx_idle_ms) > g_auxSerialCom_rx_idle_ms) {
whismanoid 10:04022a61b527 7181 cmdLine.serial().printf("\r\n rx_idle_ms timeout %dms", g_auxSerialCom_rx_idle_ms);
whismanoid 10:04022a61b527 7182 break;
whismanoid 10:04022a61b527 7183 }
whismanoid 41:13a6a097502c 7184 if ((int)rx_string_length >= g_auxSerialCom_rx_max_count) {
whismanoid 10:04022a61b527 7185 cmdLine.serial().printf("\r\n rx_max_count %d bytes", g_auxSerialCom_rx_max_count);
whismanoid 10:04022a61b527 7186 break;
whismanoid 10:04022a61b527 7187 }
whismanoid 10:04022a61b527 7188 if (AuxSerial.readable()) {
whismanoid 10:04022a61b527 7189 g_auxSerialCom_Timer_begin_rx_idle_ms = g_auxSerialCom_Timer.read_ms(); // recent RX character timestamp
whismanoid 10:04022a61b527 7190 char ch = AuxSerial.getc();
whismanoid 10:04022a61b527 7191 rx_string_buf[rx_string_length++] = ch;
whismanoid 10:04022a61b527 7192 rx_string_buf[rx_string_length] = '\0'; // null terminate buffer
whismanoid 40:330b28116178 7193 //
whismanoid 40:330b28116178 7194 #if 1
whismanoid 40:330b28116178 7195 // immediate character echo
whismanoid 40:330b28116178 7196 for (char* cp = &(rx_string_buf[rx_string_length-1]); *cp != '\0'; cp++)
whismanoid 40:330b28116178 7197 {
whismanoid 40:330b28116178 7198 //cmdLine.serial().printf("\r\n <%s\r\n", rx_string_buf);
whismanoid 40:330b28116178 7199 if (need_g_auxSerialCom_display_rx_prefix) {
whismanoid 40:330b28116178 7200 cmdLine.serial().printf(g_auxSerialCom_display_rx_prefix); // "\r\n< " g_auxSerialCom_rx_string display prefix
whismanoid 40:330b28116178 7201 need_g_auxSerialCom_display_rx_prefix = 0;
whismanoid 40:330b28116178 7202 }
whismanoid 40:330b28116178 7203 if ((*cp) == '\r') {
whismanoid 40:330b28116178 7204 if (g_auxSerialCom_rx_string_verbose_crlf) { cmdLine.serial().printf("\\r"); }
whismanoid 40:330b28116178 7205 // if (*(cp+1) != '\n') { need_g_auxSerialCom_display_rx_prefix = 1; }
whismanoid 40:330b28116178 7206 } else if ((*cp) == '\n') {
whismanoid 40:330b28116178 7207 if (g_auxSerialCom_rx_string_verbose_crlf) { cmdLine.serial().printf("\\n"); }
whismanoid 40:330b28116178 7208 need_g_auxSerialCom_display_rx_prefix = 1;
whismanoid 40:330b28116178 7209 if (*(cp-1) != '\r') { need_g_auxSerialCom_display_rx_prefix = 1; }
whismanoid 40:330b28116178 7210 } else if ((*cp) < 0x20) {
whismanoid 40:330b28116178 7211 if (g_auxSerialCom_rx_string_verbose_ctrl) { cmdLine.serial().printf("\\x%2.2x", *cp); }
whismanoid 40:330b28116178 7212 } else if ((*cp) >= 0x7f) {
whismanoid 40:330b28116178 7213 if (g_auxSerialCom_rx_string_verbose_ctrl) { cmdLine.serial().printf("\\x%2.2x", *cp); }
whismanoid 40:330b28116178 7214 } else {
whismanoid 40:330b28116178 7215 cmdLine.serial().printf("%c", *cp);
whismanoid 40:330b28116178 7216 }
whismanoid 40:330b28116178 7217 }
whismanoid 40:330b28116178 7218 #else
whismanoid 40:330b28116178 7219 // immediate character echo
whismanoid 40:330b28116178 7220 cmdLine.serial().printf("%s", &(rx_string_buf[rx_string_length-1]) );
whismanoid 40:330b28116178 7221 #endif
whismanoid 40:330b28116178 7222 //
whismanoid 10:04022a61b527 7223 if (g_auxSerialCom_rx_eot != aux_serial_cmd_forwarding_rx_eot_not_used) {
whismanoid 10:04022a61b527 7224 if (ch == g_auxSerialCom_rx_eot) {
whismanoid 10:04022a61b527 7225 cmdLine.serial().printf("\r\n rx_eot %d", g_auxSerialCom_rx_eot);
whismanoid 10:04022a61b527 7226 break;
whismanoid 10:04022a61b527 7227 }
whismanoid 10:04022a61b527 7228 }
whismanoid 10:04022a61b527 7229 }
whismanoid 10:04022a61b527 7230 } // end while (rx_string_length < (RX_STRING_BUF_SIZE-1))
whismanoid 40:330b28116178 7231 #if 0
whismanoid 10:04022a61b527 7232 // print summary. is this needed? we already print aux rx as it is received.
whismanoid 10:04022a61b527 7233 rx_string_buf[rx_string_length] = '\0'; // null terminate buffer
whismanoid 40:330b28116178 7234 # if 1 // support multi-line rx_string_buf response
whismanoid 40:330b28116178 7235 if (cmdLine[0] == '>') {
whismanoid 40:330b28116178 7236 cmdLine.serial().printf("%s%s", g_auxSerialCom_display_tx_prefix, outgoing_string);
whismanoid 40:330b28116178 7237 } // if (cmdLine[0] == '>')
whismanoid 40:330b28116178 7238 // cmdLine.serial().printf("\r\n <"); // prefix
whismanoid 40:330b28116178 7239 need_g_auxSerialCom_display_rx_prefix = 1;
whismanoid 40:330b28116178 7240 for (char* cp = rx_string_buf; *cp != '\0'; cp++)
whismanoid 40:330b28116178 7241 {
whismanoid 40:330b28116178 7242 //cmdLine.serial().printf("\r\n <%s\r\n", rx_string_buf);
whismanoid 40:330b28116178 7243 if (need_g_auxSerialCom_display_rx_prefix) {
whismanoid 40:330b28116178 7244 cmdLine.serial().printf(g_auxSerialCom_display_rx_prefix); // "\r\n< " g_auxSerialCom_rx_string display prefix
whismanoid 40:330b28116178 7245 need_g_auxSerialCom_display_rx_prefix = 0;
whismanoid 40:330b28116178 7246 }
whismanoid 40:330b28116178 7247 if ((*cp) == '\r') {
whismanoid 40:330b28116178 7248 if (g_auxSerialCom_rx_string_verbose_crlf) { cmdLine.serial().printf("\\r"); }
whismanoid 40:330b28116178 7249 if (*(cp+1) != '\n') { need_g_auxSerialCom_display_rx_prefix = 1; }
whismanoid 40:330b28116178 7250 } else if ((*cp) == '\n') {
whismanoid 40:330b28116178 7251 if (g_auxSerialCom_rx_string_verbose_crlf) { cmdLine.serial().printf("\\n"); }
whismanoid 40:330b28116178 7252 need_g_auxSerialCom_display_rx_prefix = 1;
whismanoid 40:330b28116178 7253 } else if ((*cp) < 0x20) {
whismanoid 40:330b28116178 7254 if (g_auxSerialCom_rx_string_verbose_ctrl) { cmdLine.serial().printf("\\x%2.2x", *cp); }
whismanoid 40:330b28116178 7255 } else if ((*cp) >= 0x7f) {
whismanoid 40:330b28116178 7256 if (g_auxSerialCom_rx_string_verbose_ctrl) { cmdLine.serial().printf("\\x%2.2x", *cp); }
whismanoid 40:330b28116178 7257 } else {
whismanoid 40:330b28116178 7258 cmdLine.serial().printf("%c", *cp);
whismanoid 40:330b28116178 7259 }
whismanoid 40:330b28116178 7260 }
whismanoid 40:330b28116178 7261 cmdLine.serial().printf("\r\n");
whismanoid 40:330b28116178 7262 # else
whismanoid 10:04022a61b527 7263 cmdLine.serial().printf("\r\n >%s", outgoing_string);
whismanoid 10:04022a61b527 7264 cmdLine.serial().printf("\r\n <%s\r\n", rx_string_buf);
whismanoid 40:330b28116178 7265 # endif
whismanoid 10:04022a61b527 7266 #endif
whismanoid 10:04022a61b527 7267 //
whismanoid 10:04022a61b527 7268 }
whismanoid 10:04022a61b527 7269 break; // case '>'
whismanoid 10:04022a61b527 7270 #endif // USE_AUX_SERIAL_CMD_FORWARDING
whismanoid 10:04022a61b527 7271 //
whismanoid 4:d9b05924ad4c 7272 #if USE_DATALOGGER_TRIGGER // support Datalog trigger
whismanoid 4:d9b05924ad4c 7273 // TODO Datalog trigger menu
whismanoid 4:d9b05924ad4c 7274 // set Datalogger_Trigger to trigger_Halt or trigger_FreeRun
whismanoid 4:d9b05924ad4c 7275 // Datalogger_Trigger = trigger_Halt // halt the datalogger; continue accepting commands
whismanoid 4:d9b05924ad4c 7276 // Datalogger_Trigger = trigger_FreeRun // free run as fast as possible
whismanoid 9:45f98573eb6d 7277 case 'L': case 'l':
whismanoid 4:d9b05924ad4c 7278 {
whismanoid 4:d9b05924ad4c 7279 // halt the datalogger; continue accepting commands
whismanoid 4:d9b05924ad4c 7280 Datalogger_Trigger = trigger_Halt;
whismanoid 4:d9b05924ad4c 7281 switch (cmdLine[1])
whismanoid 4:d9b05924ad4c 7282 {
whismanoid 17:9397ea3ea7e9 7283 // LT%1.0fs -- Datalog timer sleep=%1.3f seconds g_timer_interval_msec
whismanoid 17:9397ea3ea7e9 7284 case 'T': case 't':
whismanoid 17:9397ea3ea7e9 7285 {
whismanoid 17:9397ea3ea7e9 7286 // timer (configure interval) "intermittent-sleep-mode"
whismanoid 17:9397ea3ea7e9 7287 Datalogger_Trigger = trigger_Timer;
whismanoid 17:9397ea3ea7e9 7288 Datalogger_Need_PrintHeader = true;
whismanoid 17:9397ea3ea7e9 7289 g_timer_interval_counter = 0;
whismanoid 39:4d285e961435 7290 // get g_timer_interval_msec from cmdLine
whismanoid 17:9397ea3ea7e9 7291 // g_timer_interval_msec = 500;
whismanoid 17:9397ea3ea7e9 7292 // g_timer_interval_count = 10;
whismanoid 17:9397ea3ea7e9 7293 if (cmdLine.parse_int_dec("count", g_timer_interval_count))
whismanoid 17:9397ea3ea7e9 7294 {
whismanoid 32:80f3e5eb77d4 7295 if (g_timer_interval_count < 1) { g_timer_interval_count = 1; }
whismanoid 17:9397ea3ea7e9 7296 // Command forwarding to AUX serial TX/RX cmdLine_AUXserial #257 -- message_ms
whismanoid 17:9397ea3ea7e9 7297 //~ cmdLine_AuxSerial.serial().printf("\r\n*** message_ms was set to %d ***\r\n", g_auxSerialCom_message_ms);
whismanoid 17:9397ea3ea7e9 7298 cmdLine.serial().printf("\r\n g_timer_interval_count=%d", g_timer_interval_count);
whismanoid 17:9397ea3ea7e9 7299 }
whismanoid 17:9397ea3ea7e9 7300 if (cmdLine.parse_int_dec("base", g_timer_interval_msec))
whismanoid 17:9397ea3ea7e9 7301 {
whismanoid 17:9397ea3ea7e9 7302 // Command forwarding to AUX serial TX/RX cmdLine_AUXserial #257 -- message_ms
whismanoid 17:9397ea3ea7e9 7303 //~ cmdLine_AuxSerial.serial().printf("\r\n*** message_ms was set to %d ***\r\n", g_auxSerialCom_message_ms);
whismanoid 17:9397ea3ea7e9 7304 cmdLine.serial().printf("\r\n g_timer_interval_msec=%d", g_timer_interval_msec);
whismanoid 17:9397ea3ea7e9 7305 }
whismanoid 39:4d285e961435 7306 #if USE_DATALOGGER_SLEEP // support sleep modes in Datalogger_Trigger
whismanoid 45:74bf1fe021e5 7307 // USE_DATALOGGER_SLEEP -- support sleep modes in Datalogger_Trigger
whismanoid 39:4d285e961435 7308 int int_timer_sleepmode = g_timer_sleepmode;
whismanoid 39:4d285e961435 7309 if (cmdLine.parse_int_dec("sleep", int_timer_sleepmode))
whismanoid 39:4d285e961435 7310 {
whismanoid 39:4d285e961435 7311 g_timer_sleepmode = (Datalogger_Sleep_enum_t)int_timer_sleepmode;
whismanoid 39:4d285e961435 7312 //~ if (g_timer_interval_count < 1) { g_timer_interval_count = 1; }
whismanoid 39:4d285e961435 7313 // Command forwarding to AUX serial TX/RX cmdLine_AUXserial #257 -- message_ms
whismanoid 39:4d285e961435 7314 //~ cmdLine_AuxSerial.serial().printf("\r\n*** message_ms was set to %d ***\r\n", g_auxSerialCom_message_ms);
whismanoid 39:4d285e961435 7315 cmdLine.serial().printf("\r\n g_timer_sleepmode=%d", (int)g_timer_sleepmode);
whismanoid 39:4d285e961435 7316 }
whismanoid 39:4d285e961435 7317 #else // USE_DATALOGGER_SLEEP
whismanoid 39:4d285e961435 7318 #endif // USE_DATALOGGER_SLEEP
whismanoid 17:9397ea3ea7e9 7319 return; // instead of break; avoid falling through to print_command_prompt();
whismanoid 17:9397ea3ea7e9 7320 }
whismanoid 17:9397ea3ea7e9 7321 break;
whismanoid 17:9397ea3ea7e9 7322 // LIH3 -- Datalog when input high D3
whismanoid 17:9397ea3ea7e9 7323 // LIL6 -- Datalog when input low D6
whismanoid 17:9397ea3ea7e9 7324 case 'I': case 'i':
whismanoid 17:9397ea3ea7e9 7325 {
whismanoid 17:9397ea3ea7e9 7326 // TODO: switch cmdLine[2] configure High or Low, configure input pin
whismanoid 17:9397ea3ea7e9 7327 }
whismanoid 17:9397ea3ea7e9 7328 break;
whismanoid 17:9397ea3ea7e9 7329 #if USE_DATALOGGER_SPIDeviceRegRead
whismanoid 27:b4ac095b83b3 7330 // L$ count=10 base=500ms addr=xxx data=xxx mask=xxx -- Datalog when SPI read of address matches mask
whismanoid 17:9397ea3ea7e9 7331 case '$':
whismanoid 17:9397ea3ea7e9 7332 {
whismanoid 17:9397ea3ea7e9 7333 // TODO: scan cmdLine for regAddr, dataMask, testValue
whismanoid 17:9397ea3ea7e9 7334 }
whismanoid 17:9397ea3ea7e9 7335 break;
whismanoid 17:9397ea3ea7e9 7336 #endif // USE_DATALOGGER_SPIDeviceRegRead
whismanoid 17:9397ea3ea7e9 7337 #if USE_DATALOGGER_ActionTable // Datalogger_RunActionTable() supported actions
whismanoid 17:9397ea3ea7e9 7338 // L@ -- configures Datalogger_action_table
whismanoid 17:9397ea3ea7e9 7339 case '@':
whismanoid 17:9397ea3ea7e9 7340 {
whismanoid 17:9397ea3ea7e9 7341 // L@ -- configures Datalogger_action_table
whismanoid 17:9397ea3ea7e9 7342 int editRowIndex = 0;
whismanoid 17:9397ea3ea7e9 7343 int edit_action = (int)action_noop;
whismanoid 17:9397ea3ea7e9 7344 int edit_digitalOutPin = 0;
whismanoid 17:9397ea3ea7e9 7345 int edit_condition = (int)condition_always;
whismanoid 17:9397ea3ea7e9 7346 int edit_condition_channel = 0;
whismanoid 17:9397ea3ea7e9 7347 double edit_condition_threshold = 0;
whismanoid 17:9397ea3ea7e9 7348 //
whismanoid 17:9397ea3ea7e9 7349 if (cmdLine.parse_int_dec("act", edit_action))
whismanoid 17:9397ea3ea7e9 7350 {
whismanoid 17:9397ea3ea7e9 7351 //~ cmdLine.serial().printf("\r\n act=%d", edit_action);
whismanoid 17:9397ea3ea7e9 7352 }
whismanoid 17:9397ea3ea7e9 7353 if (cmdLine.parse_int_dec("pin", edit_digitalOutPin))
whismanoid 17:9397ea3ea7e9 7354 {
whismanoid 17:9397ea3ea7e9 7355 //~ cmdLine.serial().printf("\r\n pin=%d", edit_digitalOutPin);
whismanoid 17:9397ea3ea7e9 7356 }
whismanoid 17:9397ea3ea7e9 7357 if (cmdLine.parse_int_dec("if", edit_condition))
whismanoid 17:9397ea3ea7e9 7358 {
whismanoid 17:9397ea3ea7e9 7359 //~ cmdLine.serial().printf("\r\n if=%d", edit_condition);
whismanoid 17:9397ea3ea7e9 7360 }
whismanoid 17:9397ea3ea7e9 7361 if (cmdLine.parse_int_dec("ch", edit_condition_channel))
whismanoid 17:9397ea3ea7e9 7362 {
whismanoid 17:9397ea3ea7e9 7363 //~ cmdLine.serial().printf("\r\n ch=%d", edit_condition_channel);
whismanoid 17:9397ea3ea7e9 7364 }
whismanoid 17:9397ea3ea7e9 7365 if (cmdLine.parse_double("x", edit_condition_threshold))
whismanoid 17:9397ea3ea7e9 7366 {
whismanoid 17:9397ea3ea7e9 7367 //~ cmdLine.serial().printf("\r\n x=%d", edit_condition_threshold);
whismanoid 17:9397ea3ea7e9 7368 }
whismanoid 17:9397ea3ea7e9 7369 //
whismanoid 17:9397ea3ea7e9 7370 // Edit the contents of Datalogger_action_table
whismanoid 17:9397ea3ea7e9 7371 switch (cmdLine[2]) // L@... -- Edit the contents of Datalogger_action_table
whismanoid 17:9397ea3ea7e9 7372 {
whismanoid 17:9397ea3ea7e9 7373 // LT%1.0fs -- Datalog timer sleep=%1.3f seconds g_timer_interval_msec
whismanoid 17:9397ea3ea7e9 7374 case '0': case '1': case '2': case '3': case '4':
whismanoid 17:9397ea3ea7e9 7375 case '5': case '6': case '7': case '8': case '9':
whismanoid 17:9397ea3ea7e9 7376 // edit row data
whismanoid 30:07197a430869 7377 if (1) { // removed Datalogger_action_table_row_count > 0 -- support %L@nnn command add new row (even though this looks like a replace command) if and only if nnn==next new unassigned line number
whismanoid 17:9397ea3ea7e9 7378 // if Datalogger_action_table_row_count == 0 then the table is empty
whismanoid 17:9397ea3ea7e9 7379 // get row number to edit from cmdLine[2]
whismanoid 17:9397ea3ea7e9 7380 editRowIndex = atoi(cmdLine.str()+2);
whismanoid 30:07197a430869 7381 if ((editRowIndex >= 0) && (editRowIndex < Datalogger_action_table_row_count)) {
whismanoid 30:07197a430869 7382 // update row
whismanoid 30:07197a430869 7383 cmdLine.serial().printf("\r\n replace row %d", editRowIndex);
whismanoid 30:07197a430869 7384 // rescan cmdLine[2] for key=value of what fields to change (now that we have got defaults from the existing line
whismanoid 30:07197a430869 7385 edit_action = Datalogger_action_table[editRowIndex].action;
whismanoid 30:07197a430869 7386 edit_digitalOutPin = Datalogger_action_table[editRowIndex].digitalOutPin;
whismanoid 30:07197a430869 7387 edit_condition = Datalogger_action_table[editRowIndex].condition;
whismanoid 30:07197a430869 7388 edit_condition_channel = Datalogger_action_table[editRowIndex].condition_channel;
whismanoid 30:07197a430869 7389 edit_condition_threshold = Datalogger_action_table[editRowIndex].condition_threshold;
whismanoid 30:07197a430869 7390 // rescan cmdLine[2] for key=value of what fields to change (now that we have got defaults from the existing line
whismanoid 30:07197a430869 7391 if (cmdLine.parse_int_dec("act", edit_action))
whismanoid 30:07197a430869 7392 {
whismanoid 30:07197a430869 7393 //~ cmdLine.serial().printf("\r\n act=%d", edit_action);
whismanoid 30:07197a430869 7394 }
whismanoid 30:07197a430869 7395 if (cmdLine.parse_int_dec("pin", edit_digitalOutPin))
whismanoid 30:07197a430869 7396 {
whismanoid 30:07197a430869 7397 //~ cmdLine.serial().printf("\r\n pin=%d", edit_digitalOutPin);
whismanoid 30:07197a430869 7398 }
whismanoid 30:07197a430869 7399 if (cmdLine.parse_int_dec("if", edit_condition))
whismanoid 30:07197a430869 7400 {
whismanoid 30:07197a430869 7401 //~ cmdLine.serial().printf("\r\n if=%d", edit_condition);
whismanoid 30:07197a430869 7402 }
whismanoid 30:07197a430869 7403 if (cmdLine.parse_int_dec("ch", edit_condition_channel))
whismanoid 30:07197a430869 7404 {
whismanoid 30:07197a430869 7405 //~ cmdLine.serial().printf("\r\n ch=%d", edit_condition_channel);
whismanoid 30:07197a430869 7406 }
whismanoid 30:07197a430869 7407 if (cmdLine.parse_double("x", edit_condition_threshold))
whismanoid 30:07197a430869 7408 {
whismanoid 30:07197a430869 7409 //~ cmdLine.serial().printf("\r\n x=%d", edit_condition_threshold);
whismanoid 30:07197a430869 7410 }
whismanoid 30:07197a430869 7411 Datalogger_action_table[editRowIndex].action = (action_type_enum_t)edit_action;
whismanoid 30:07197a430869 7412 Datalogger_action_table[editRowIndex].digitalOutPin = edit_digitalOutPin;
whismanoid 30:07197a430869 7413 Datalogger_action_table[editRowIndex].condition = (action_condition_enum_t)edit_condition;
whismanoid 30:07197a430869 7414 Datalogger_action_table[editRowIndex].condition_channel = edit_condition_channel;
whismanoid 30:07197a430869 7415 Datalogger_action_table[editRowIndex].condition_threshold = edit_condition_threshold;
whismanoid 17:9397ea3ea7e9 7416 }
whismanoid 30:07197a430869 7417 else if ((editRowIndex == Datalogger_action_table_row_count) && (Datalogger_action_table_row_count < ACTION_TABLE_ROW_MAX)) {
whismanoid 30:07197a430869 7418 // %L@nnn command add new row (even though this looks like a replace command) if and only if nnn==next new unassigned line number
whismanoid 30:07197a430869 7419 Datalogger_action_table_row_count++;
whismanoid 30:07197a430869 7420 cmdLine.serial().printf("\r\n add next row %d", editRowIndex);
whismanoid 30:07197a430869 7421 Datalogger_action_table[editRowIndex].action = (action_type_enum_t)edit_action;
whismanoid 30:07197a430869 7422 Datalogger_action_table[editRowIndex].digitalOutPin = edit_digitalOutPin;
whismanoid 30:07197a430869 7423 Datalogger_action_table[editRowIndex].condition = (action_condition_enum_t)edit_condition;
whismanoid 30:07197a430869 7424 Datalogger_action_table[editRowIndex].condition_channel = edit_condition_channel;
whismanoid 30:07197a430869 7425 Datalogger_action_table[editRowIndex].condition_threshold = edit_condition_threshold;
whismanoid 30:07197a430869 7426 //
whismanoid 17:9397ea3ea7e9 7427 }
whismanoid 17:9397ea3ea7e9 7428 }
whismanoid 17:9397ea3ea7e9 7429 break;
whismanoid 17:9397ea3ea7e9 7430 case '+':
whismanoid 17:9397ea3ea7e9 7431 // add a new row at end of table
whismanoid 17:9397ea3ea7e9 7432 if (Datalogger_action_table_row_count < ACTION_TABLE_ROW_MAX) {
whismanoid 17:9397ea3ea7e9 7433 // if Datalogger_action_table_row_count => ACTION_TABLE_ROW_MAX then the table is full
whismanoid 17:9397ea3ea7e9 7434 editRowIndex = Datalogger_action_table_row_count;
whismanoid 17:9397ea3ea7e9 7435 Datalogger_action_table_row_count++;
whismanoid 30:07197a430869 7436 cmdLine.serial().printf("\r\n add new row %d", editRowIndex);
whismanoid 17:9397ea3ea7e9 7437 Datalogger_action_table[editRowIndex].action = (action_type_enum_t)edit_action;
whismanoid 17:9397ea3ea7e9 7438 Datalogger_action_table[editRowIndex].digitalOutPin = edit_digitalOutPin;
whismanoid 17:9397ea3ea7e9 7439 Datalogger_action_table[editRowIndex].condition = (action_condition_enum_t)edit_condition;
whismanoid 17:9397ea3ea7e9 7440 Datalogger_action_table[editRowIndex].condition_channel = edit_condition_channel;
whismanoid 17:9397ea3ea7e9 7441 Datalogger_action_table[editRowIndex].condition_threshold = edit_condition_threshold;
whismanoid 17:9397ea3ea7e9 7442 }
whismanoid 17:9397ea3ea7e9 7443 break;
whismanoid 17:9397ea3ea7e9 7444 case '-':
whismanoid 17:9397ea3ea7e9 7445 // delete row from table
whismanoid 17:9397ea3ea7e9 7446 if (Datalogger_action_table_row_count > 0) {
whismanoid 17:9397ea3ea7e9 7447 // if Datalogger_action_table_row_count == 0 then the table is empty
whismanoid 17:9397ea3ea7e9 7448 if ((cmdLine[3] == '~') && (cmdLine[4] == '~') && (cmdLine[5] == '~')) {
whismanoid 17:9397ea3ea7e9 7449 // L@-~~~ -- delete all rows from table
whismanoid 30:07197a430869 7450 cmdLine.serial().printf("\r\n delete all rows");
whismanoid 17:9397ea3ea7e9 7451 Datalogger_action_table_row_count = 0;
whismanoid 17:9397ea3ea7e9 7452 break;
whismanoid 17:9397ea3ea7e9 7453 }
whismanoid 30:07197a430869 7454 else {
whismanoid 30:07197a430869 7455 editRowIndex = atoi(cmdLine.str()+3);
whismanoid 30:07197a430869 7456 cmdLine.serial().printf("\r\n delete row %d", editRowIndex);
whismanoid 30:07197a430869 7457 // delete row editRowIndex from Datalogger_action_table
whismanoid 30:07197a430869 7458 for (int i = editRowIndex; i < (Datalogger_action_table_row_count-1); i++)
whismanoid 30:07197a430869 7459 {
whismanoid 30:07197a430869 7460 // copy row i+1 into row i
whismanoid 30:07197a430869 7461 Datalogger_action_table[i].action = Datalogger_action_table[i+1].action;
whismanoid 30:07197a430869 7462 Datalogger_action_table[i].digitalOutPin = Datalogger_action_table[i+1].digitalOutPin;
whismanoid 30:07197a430869 7463 Datalogger_action_table[i].condition = Datalogger_action_table[i+1].condition;
whismanoid 30:07197a430869 7464 Datalogger_action_table[i].condition_channel = Datalogger_action_table[i+1].condition_channel;
whismanoid 30:07197a430869 7465 Datalogger_action_table[i].condition_threshold = Datalogger_action_table[i+1].condition_threshold;
whismanoid 30:07197a430869 7466 }
whismanoid 30:07197a430869 7467 Datalogger_action_table_row_count--;
whismanoid 17:9397ea3ea7e9 7468 }
whismanoid 17:9397ea3ea7e9 7469 }
whismanoid 17:9397ea3ea7e9 7470 break;
whismanoid 30:07197a430869 7471 case '.':
whismanoid 30:07197a430869 7472 // L@. pause the entire Log action table
whismanoid 30:07197a430869 7473 cmdLine.serial().printf("\r\n pause the entire Log action table");
whismanoid 17:9397ea3ea7e9 7474 Datalogger_action_table_enabled = false;
whismanoid 17:9397ea3ea7e9 7475 break;
whismanoid 17:9397ea3ea7e9 7476 case '@':
whismanoid 30:07197a430869 7477 // L@@ enable the entire Log action table
whismanoid 30:07197a430869 7478 cmdLine.serial().printf("\r\n enable the entire Log action table");
whismanoid 17:9397ea3ea7e9 7479 Datalogger_action_table_enabled = true;
whismanoid 17:9397ea3ea7e9 7480 break;
whismanoid 17:9397ea3ea7e9 7481 }
whismanoid 17:9397ea3ea7e9 7482 //
whismanoid 17:9397ea3ea7e9 7483 // Print the contents of Datalogger_action_table
whismanoid 17:9397ea3ea7e9 7484 if (Datalogger_action_table_enabled) {
whismanoid 30:07197a430869 7485 // cmdLine.serial().printf("Log action table enabled; L@. to pause");
whismanoid 17:9397ea3ea7e9 7486 }
whismanoid 17:9397ea3ea7e9 7487 else {
whismanoid 30:07197a430869 7488 cmdLine.serial().printf("Log action table paused; L@@ to enable");
whismanoid 17:9397ea3ea7e9 7489 }
whismanoid 17:9397ea3ea7e9 7490 //~ cmdLine.serial().printf("\r\n Datalogger_action_table_row_count=%d", Datalogger_action_table_row_count);
whismanoid 17:9397ea3ea7e9 7491 for (int i = 0; i < Datalogger_action_table_row_count; i++)
whismanoid 17:9397ea3ea7e9 7492 {
whismanoid 17:9397ea3ea7e9 7493 cmdLine.serial().printf("\r\n L@%d", i);
whismanoid 17:9397ea3ea7e9 7494 cmdLine.serial().printf(" act=%d", Datalogger_action_table[i].action);
whismanoid 17:9397ea3ea7e9 7495 switch(Datalogger_action_table[i].action)
whismanoid 17:9397ea3ea7e9 7496 {
whismanoid 17:9397ea3ea7e9 7497 case action_digitalOutLow:
whismanoid 17:9397ea3ea7e9 7498 case action_digitalOutHigh:
whismanoid 17:9397ea3ea7e9 7499 cmdLine.serial().printf(" pin=%d", Datalogger_action_table[i].digitalOutPin);
whismanoid 17:9397ea3ea7e9 7500 break;
whismanoid 29:6a9edb6e973b 7501 case action_button: // pin = button index 1, 2, 3
whismanoid 29:6a9edb6e973b 7502 cmdLine.serial().printf(" pin=%d", Datalogger_action_table[i].digitalOutPin);
whismanoid 29:6a9edb6e973b 7503 break;
whismanoid 17:9397ea3ea7e9 7504 default:
whismanoid 17:9397ea3ea7e9 7505 case action_noop:
whismanoid 17:9397ea3ea7e9 7506 case action_trigger_Halt:
whismanoid 17:9397ea3ea7e9 7507 case action_trigger_FreeRun:
whismanoid 17:9397ea3ea7e9 7508 case action_trigger_Timer:
whismanoid 17:9397ea3ea7e9 7509 case action_trigger_PlatformDigitalInput:
whismanoid 17:9397ea3ea7e9 7510 case action_trigger_SPIDeviceRegRead:
whismanoid 17:9397ea3ea7e9 7511 break;
whismanoid 17:9397ea3ea7e9 7512 }
whismanoid 17:9397ea3ea7e9 7513 switch(Datalogger_action_table[i].condition)
whismanoid 17:9397ea3ea7e9 7514 {
whismanoid 17:9397ea3ea7e9 7515 case condition_always:
whismanoid 17:9397ea3ea7e9 7516 break;
whismanoid 17:9397ea3ea7e9 7517 default:
whismanoid 17:9397ea3ea7e9 7518 case condition_if_An_gt_threshold:
whismanoid 17:9397ea3ea7e9 7519 case condition_if_An_lt_threshold:
whismanoid 17:9397ea3ea7e9 7520 case condition_if_An_eq_threshold:
whismanoid 17:9397ea3ea7e9 7521 case condition_if_An_ge_threshold:
whismanoid 17:9397ea3ea7e9 7522 case condition_if_An_le_threshold:
whismanoid 17:9397ea3ea7e9 7523 case condition_if_An_ne_threshold:
whismanoid 17:9397ea3ea7e9 7524 case condition_if_AINn_gt_threshold:
whismanoid 17:9397ea3ea7e9 7525 case condition_if_AINn_lt_threshold:
whismanoid 17:9397ea3ea7e9 7526 case condition_if_AINn_eq_threshold:
whismanoid 17:9397ea3ea7e9 7527 case condition_if_AINn_ge_threshold:
whismanoid 17:9397ea3ea7e9 7528 case condition_if_AINn_le_threshold:
whismanoid 17:9397ea3ea7e9 7529 case condition_if_AINn_ne_threshold:
whismanoid 17:9397ea3ea7e9 7530 cmdLine.serial().printf(" if=%d", Datalogger_action_table[i].condition);
whismanoid 17:9397ea3ea7e9 7531 cmdLine.serial().printf(" ch=%d", Datalogger_action_table[i].condition_channel);
whismanoid 40:330b28116178 7532 // our voltage measurement is around 1mV at best
whismanoid 40:330b28116178 7533 cmdLine.serial().printf(" x=%1.4f", Datalogger_action_table[i].condition_threshold);
whismanoid 17:9397ea3ea7e9 7534 break;
whismanoid 17:9397ea3ea7e9 7535 }
whismanoid 17:9397ea3ea7e9 7536 cmdLine.serial().printf(" -- ");
whismanoid 17:9397ea3ea7e9 7537 switch(Datalogger_action_table[i].action)
whismanoid 17:9397ea3ea7e9 7538 {
whismanoid 17:9397ea3ea7e9 7539 case action_noop:
whismanoid 17:9397ea3ea7e9 7540 cmdLine.serial().printf("No_Operation");
whismanoid 17:9397ea3ea7e9 7541 break;
whismanoid 17:9397ea3ea7e9 7542 case action_digitalOutLow:
whismanoid 17:9397ea3ea7e9 7543 cmdLine.serial().printf("digitalOutLow");
whismanoid 17:9397ea3ea7e9 7544 cmdLine.serial().printf(" D%d", Datalogger_action_table[i].digitalOutPin);
whismanoid 17:9397ea3ea7e9 7545 break;
whismanoid 17:9397ea3ea7e9 7546 case action_digitalOutHigh:
whismanoid 17:9397ea3ea7e9 7547 cmdLine.serial().printf("digitalOutHigh");
whismanoid 17:9397ea3ea7e9 7548 cmdLine.serial().printf(" D%d", Datalogger_action_table[i].digitalOutPin);
whismanoid 17:9397ea3ea7e9 7549 break;
whismanoid 29:6a9edb6e973b 7550 case action_button: // pin = button index 1, 2, 3
whismanoid 40:330b28116178 7551 cmdLine.serial().printf("button %%B%d!", Datalogger_action_table[i].digitalOutPin);
whismanoid 29:6a9edb6e973b 7552 break;
whismanoid 17:9397ea3ea7e9 7553 case action_trigger_Halt:
whismanoid 40:330b28116178 7554 cmdLine.serial().printf("Halt");
whismanoid 17:9397ea3ea7e9 7555 break;
whismanoid 17:9397ea3ea7e9 7556 case action_trigger_FreeRun:
whismanoid 40:330b28116178 7557 cmdLine.serial().printf("LR");
whismanoid 17:9397ea3ea7e9 7558 break;
whismanoid 17:9397ea3ea7e9 7559 case action_trigger_Timer:
whismanoid 45:74bf1fe021e5 7560 cmdLine.serial().printf("LT count=%d base=%dms", g_timer_interval_count, g_timer_interval_msec);
whismanoid 45:74bf1fe021e5 7561 #if USE_DATALOGGER_SLEEP // support sleep modes in Datalogger_Trigger
whismanoid 45:74bf1fe021e5 7562 cmdLine.serial().printf(" sleep=%d", g_timer_sleepmode);
whismanoid 45:74bf1fe021e5 7563 #endif // USE_DATALOGGER_SLEEP // support sleep modes in Datalogger_Trigger
whismanoid 17:9397ea3ea7e9 7564 break;
whismanoid 17:9397ea3ea7e9 7565 case action_trigger_PlatformDigitalInput:
whismanoid 17:9397ea3ea7e9 7566 cmdLine.serial().printf("trigger_PlatformDigitalInput");
whismanoid 17:9397ea3ea7e9 7567 // TODO: print configuration for trigger_PlatformDigitalInput
whismanoid 17:9397ea3ea7e9 7568 //~ cmdLine.serial().printf("(%d)", g_config_PlatformDigitalInput);
whismanoid 17:9397ea3ea7e9 7569 break;
whismanoid 17:9397ea3ea7e9 7570 case action_trigger_SPIDeviceRegRead:
whismanoid 17:9397ea3ea7e9 7571 cmdLine.serial().printf("trigger_SPIDeviceRegRead");
whismanoid 17:9397ea3ea7e9 7572 // TODO: print configuration for trigger_SPIDeviceRegRead
whismanoid 17:9397ea3ea7e9 7573 //~ cmdLine.serial().printf("(%d)", g_config_SPIDeviceRegRead);
whismanoid 17:9397ea3ea7e9 7574 break;
whismanoid 17:9397ea3ea7e9 7575 } // switch(Datalogger_action_table[i].action)
whismanoid 17:9397ea3ea7e9 7576 //~ cmdLine.serial().printf(" condition %d", Datalogger_action_table[i].condition);
whismanoid 17:9397ea3ea7e9 7577 switch(Datalogger_action_table[i].condition)
whismanoid 17:9397ea3ea7e9 7578 {
whismanoid 17:9397ea3ea7e9 7579 case condition_always:
whismanoid 17:9397ea3ea7e9 7580 cmdLine.serial().printf(" always");
whismanoid 17:9397ea3ea7e9 7581 break;
whismanoid 17:9397ea3ea7e9 7582 case condition_if_An_gt_threshold:
whismanoid 40:330b28116178 7583 cmdLine.serial().printf(" if A%d > %1.2f", Datalogger_action_table[i].condition_channel, Datalogger_action_table[i].condition_threshold);
whismanoid 17:9397ea3ea7e9 7584 break;
whismanoid 17:9397ea3ea7e9 7585 case condition_if_An_lt_threshold:
whismanoid 40:330b28116178 7586 cmdLine.serial().printf(" if A%d < %1.2f", Datalogger_action_table[i].condition_channel, Datalogger_action_table[i].condition_threshold);
whismanoid 17:9397ea3ea7e9 7587 break;
whismanoid 17:9397ea3ea7e9 7588 case condition_if_An_eq_threshold:
whismanoid 40:330b28116178 7589 cmdLine.serial().printf(" if A%d == %1.2f", Datalogger_action_table[i].condition_channel, Datalogger_action_table[i].condition_threshold);
whismanoid 17:9397ea3ea7e9 7590 break;
whismanoid 17:9397ea3ea7e9 7591 case condition_if_An_ge_threshold:
whismanoid 40:330b28116178 7592 cmdLine.serial().printf(" if A%d >= %1.2f", Datalogger_action_table[i].condition_channel, Datalogger_action_table[i].condition_threshold);
whismanoid 17:9397ea3ea7e9 7593 break;
whismanoid 17:9397ea3ea7e9 7594 case condition_if_An_le_threshold:
whismanoid 40:330b28116178 7595 cmdLine.serial().printf(" if A%d <= %1.2f", Datalogger_action_table[i].condition_channel, Datalogger_action_table[i].condition_threshold);
whismanoid 17:9397ea3ea7e9 7596 break;
whismanoid 17:9397ea3ea7e9 7597 case condition_if_An_ne_threshold:
whismanoid 40:330b28116178 7598 cmdLine.serial().printf(" if A%d != %1.2f", Datalogger_action_table[i].condition_channel, Datalogger_action_table[i].condition_threshold);
whismanoid 17:9397ea3ea7e9 7599 break;
whismanoid 17:9397ea3ea7e9 7600 case condition_if_AINn_gt_threshold:
whismanoid 40:330b28116178 7601 cmdLine.serial().printf(" if AIN%d > %1.2f", Datalogger_action_table[i].condition_channel, Datalogger_action_table[i].condition_threshold);
whismanoid 17:9397ea3ea7e9 7602 break;
whismanoid 17:9397ea3ea7e9 7603 case condition_if_AINn_lt_threshold:
whismanoid 40:330b28116178 7604 cmdLine.serial().printf(" if AIN%d < %1.2f", Datalogger_action_table[i].condition_channel, Datalogger_action_table[i].condition_threshold);
whismanoid 17:9397ea3ea7e9 7605 break;
whismanoid 17:9397ea3ea7e9 7606 case condition_if_AINn_eq_threshold:
whismanoid 40:330b28116178 7607 cmdLine.serial().printf(" if AIN%d == %1.2f", Datalogger_action_table[i].condition_channel, Datalogger_action_table[i].condition_threshold);
whismanoid 17:9397ea3ea7e9 7608 break;
whismanoid 17:9397ea3ea7e9 7609 case condition_if_AINn_ge_threshold:
whismanoid 40:330b28116178 7610 cmdLine.serial().printf(" if AIN%d >= %1.2f", Datalogger_action_table[i].condition_channel, Datalogger_action_table[i].condition_threshold);
whismanoid 17:9397ea3ea7e9 7611 break;
whismanoid 17:9397ea3ea7e9 7612 case condition_if_AINn_le_threshold:
whismanoid 40:330b28116178 7613 cmdLine.serial().printf(" if AIN%d <= %1.2f", Datalogger_action_table[i].condition_channel, Datalogger_action_table[i].condition_threshold);
whismanoid 17:9397ea3ea7e9 7614 break;
whismanoid 17:9397ea3ea7e9 7615 case condition_if_AINn_ne_threshold:
whismanoid 40:330b28116178 7616 cmdLine.serial().printf(" if AIN%d != %1.2f", Datalogger_action_table[i].condition_channel, Datalogger_action_table[i].condition_threshold);
whismanoid 17:9397ea3ea7e9 7617 break;
whismanoid 17:9397ea3ea7e9 7618 } // switch(Datalogger_action_table[i].condition)
whismanoid 17:9397ea3ea7e9 7619 } // for ...Datalogger_action_table_row_count // Print the contents of Datalogger_action_table
whismanoid 30:07197a430869 7620 cmdLine.serial().printf("\r\n\r\nEdit Log action table (used %d/%d, %d free):",
whismanoid 30:07197a430869 7621 Datalogger_action_table_row_count,
whismanoid 30:07197a430869 7622 ACTION_TABLE_ROW_MAX,
whismanoid 30:07197a430869 7623 (ACTION_TABLE_ROW_MAX - Datalogger_action_table_row_count)
whismanoid 30:07197a430869 7624 );
whismanoid 17:9397ea3ea7e9 7625 if (Datalogger_action_table_row_count < ACTION_TABLE_ROW_MAX) {
whismanoid 17:9397ea3ea7e9 7626 // if Datalogger_action_table_row_count => ACTION_TABLE_ROW_MAX then the table is full
whismanoid 17:9397ea3ea7e9 7627 cmdLine.serial().printf("\r\n L@+ act=4 if=1 ch=5 x=12345 -- add new entry at end of table");
whismanoid 17:9397ea3ea7e9 7628 }
whismanoid 17:9397ea3ea7e9 7629 if (Datalogger_action_table_row_count > 0) {
whismanoid 17:9397ea3ea7e9 7630 // if Datalogger_action_table_row_count == 0 then the table is empty
whismanoid 17:9397ea3ea7e9 7631 cmdLine.serial().printf("\r\n L@%d act=4 if=1 ch=5 x=12345 -- edit row %d",
whismanoid 17:9397ea3ea7e9 7632 Datalogger_action_table_row_count-1,
whismanoid 17:9397ea3ea7e9 7633 Datalogger_action_table_row_count-1);
whismanoid 17:9397ea3ea7e9 7634 cmdLine.serial().printf("\r\n L@-%d -- delete row %d",
whismanoid 17:9397ea3ea7e9 7635 Datalogger_action_table_row_count-1,
whismanoid 17:9397ea3ea7e9 7636 Datalogger_action_table_row_count-1);
whismanoid 17:9397ea3ea7e9 7637 cmdLine.serial().printf("\r\n L@-~~~ -- delete all rows");
whismanoid 30:07197a430869 7638 if (Datalogger_action_table_enabled) cmdLine.serial().printf("\r\n L@. -- pause entire Log action table");
whismanoid 30:07197a430869 7639 if (!Datalogger_action_table_enabled) cmdLine.serial().printf("\r\n L@@ -- enable Log action table");
whismanoid 17:9397ea3ea7e9 7640 }
whismanoid 17:9397ea3ea7e9 7641 //
whismanoid 17:9397ea3ea7e9 7642 } // case L@ -- configures Datalogger_action_table
whismanoid 17:9397ea3ea7e9 7643 break;
whismanoid 17:9397ea3ea7e9 7644 #endif // USE_DATALOGGER_ActionTable Datalogger_RunActionTable() supported actions
whismanoid 17:9397ea3ea7e9 7645 // LR -- Datalog free run as fast as possible
whismanoid 4:d9b05924ad4c 7646 case 'R': case 'r':
whismanoid 4:d9b05924ad4c 7647 // free run as fast as possible
whismanoid 8:dffee7509bfb 7648 Datalogger_Trigger = trigger_FreeRun;
whismanoid 8:dffee7509bfb 7649 Datalogger_Need_PrintHeader = true;
whismanoid 4:d9b05924ad4c 7650 return; // instead of break; avoid falling through to print_command_prompt();
whismanoid 9:45f98573eb6d 7651 #if defined(SPI_ADC_DeviceName) // SPI connected ADC
whismanoid 9:45f98573eb6d 7652 // LS<channel ID><verb>: Configure SPI_AIN channels
whismanoid 9:45f98573eb6d 7653 // channel ID: 0,1,2,... or - for all channels
whismanoid 9:45f98573eb6d 7654 // verb: D for disable, V for Voltage, L for LSB
whismanoid 9:45f98573eb6d 7655 case 'S': case 's':
whismanoid 9:45f98573eb6d 7656 {
whismanoid 9:45f98573eb6d 7657 for (int channel_index = 0; channel_index < NUM_DUT_ANALOG_IN_CHANNELS; channel_index++) {
whismanoid 9:45f98573eb6d 7658 if ((cmdLine[2] == '-' /* all channels */)
whismanoid 9:45f98573eb6d 7659 || (cmdLine[2] == '0'+channel_index)
whismanoid 9:45f98573eb6d 7660 )
whismanoid 9:45f98573eb6d 7661 {
whismanoid 9:45f98573eb6d 7662 // it's me
whismanoid 9:45f98573eb6d 7663 // test cmdLine[3] to determine action
whismanoid 9:45f98573eb6d 7664 // Platform_Enable_ch[channel_index] = Platform_AIN_xxxxx;
whismanoid 9:45f98573eb6d 7665 switch (cmdLine[3])
whismanoid 9:45f98573eb6d 7666 {
whismanoid 9:45f98573eb6d 7667 case 'D': case 'd':
whismanoid 9:45f98573eb6d 7668 SPI_AIN_Enable_ch[channel_index] = SPI_AIN_Disable;
whismanoid 9:45f98573eb6d 7669 break;
whismanoid 9:45f98573eb6d 7670 case 'L': case 'l':
whismanoid 9:45f98573eb6d 7671 SPI_AIN_Enable_ch[channel_index] = SPI_AIN_Enable_LSB;
whismanoid 9:45f98573eb6d 7672 break;
whismanoid 9:45f98573eb6d 7673 case 'V': case 'v':
whismanoid 9:45f98573eb6d 7674 SPI_AIN_Enable_ch[channel_index] = SPI_AIN_Enable_Volt;
whismanoid 9:45f98573eb6d 7675 break;
whismanoid 9:45f98573eb6d 7676 //
whismanoid 9:45f98573eb6d 7677 //
whismanoid 9:45f98573eb6d 7678 // TODO: MAX11410 verb for configuring SPI_AIN_Cfg_v_ctrl_ch[channel_index]
whismanoid 9:45f98573eb6d 7679 case 'C': case 'c':
whismanoid 9:45f98573eb6d 7680 {
whismanoid 9:45f98573eb6d 7681 uint8_t hexValue = 0;
whismanoid 9:45f98573eb6d 7682 hexValue = hexValueOfChar(cmdLine[5]) * 0x10 + hexValueOfChar(cmdLine[6]);
whismanoid 9:45f98573eb6d 7683 switch (cmdLine[4])
whismanoid 9:45f98573eb6d 7684 {
whismanoid 9:45f98573eb6d 7685 //
whismanoid 9:45f98573eb6d 7686 // MAX11410 verb for configuring SPI_AIN_Cfg_v_filter_ch[channel_index]
whismanoid 9:45f98573eb6d 7687 // cmdLine.serial().print(F("\r\n LS-CF34 -- Datalog SPI ADC channel '-'(all) v_filter 0x34"));
whismanoid 9:45f98573eb6d 7688 case 'F': case 'f':
whismanoid 9:45f98573eb6d 7689 SPI_AIN_Cfg_v_filter_ch[channel_index] = hexValue;
whismanoid 9:45f98573eb6d 7690 break;
whismanoid 9:45f98573eb6d 7691 //
whismanoid 9:45f98573eb6d 7692 // MAX11410 verb for configuring SPI_AIN_Cfg_v_ctrl_ch[channel_index]
whismanoid 9:45f98573eb6d 7693 // cmdLine.serial().print(F("\r\n LS-CC42 -- Datalog SPI ADC channel '-'(all) v_ctrl 0x42"));
whismanoid 9:45f98573eb6d 7694 case 'C': case 'c':
whismanoid 9:45f98573eb6d 7695 SPI_AIN_Cfg_v_ctrl_ch[channel_index] = hexValue;
whismanoid 9:45f98573eb6d 7696 break;
whismanoid 9:45f98573eb6d 7697 //
whismanoid 9:45f98573eb6d 7698 // MAX11410 verb for configuring SPI_AIN_Cfg_v_pga_ch[channel_index]
whismanoid 9:45f98573eb6d 7699 // cmdLine.serial().print(F("\r\n LS-CP00 -- Datalog SPI ADC channel '-'(all) v_pga 0x00"));
whismanoid 9:45f98573eb6d 7700 case 'P': case 'p':
whismanoid 9:45f98573eb6d 7701 SPI_AIN_Cfg_v_pga_ch[channel_index] = hexValue;
whismanoid 9:45f98573eb6d 7702 break;
whismanoid 9:45f98573eb6d 7703 //
whismanoid 9:45f98573eb6d 7704 // cmdLine.serial().print(F("\r\n LS5CU -- Datalog SPI ADC channel channel 5 v_ctrl Unipolar"));
whismanoid 9:45f98573eb6d 7705 // ((SPI_AIN_Cfg_v_ctrl_ch[channel_index] & 0x40) == 0) ? "BIPOLAR" : "Unipolar"
whismanoid 9:45f98573eb6d 7706 case 'U': case 'u':
whismanoid 9:45f98573eb6d 7707 SPI_AIN_Cfg_v_ctrl_ch[channel_index] = SPI_AIN_Cfg_v_ctrl_ch[channel_index] | 0x40;
whismanoid 9:45f98573eb6d 7708 break;
whismanoid 9:45f98573eb6d 7709 //
whismanoid 9:45f98573eb6d 7710 // cmdLine.serial().print(F("\r\n LS5CB -- Datalog SPI ADC channel channel 5 v_ctrl Bipolar"));
whismanoid 9:45f98573eb6d 7711 // ((SPI_AIN_Cfg_v_ctrl_ch[channel_index] & 0x40) == 0) ? "BIPOLAR" : "Unipolar"
whismanoid 9:45f98573eb6d 7712 case 'B': case 'b':
whismanoid 9:45f98573eb6d 7713 SPI_AIN_Cfg_v_ctrl_ch[channel_index] = SPI_AIN_Cfg_v_ctrl_ch[channel_index] &~ 0x40;
whismanoid 9:45f98573eb6d 7714 break;
whismanoid 9:45f98573eb6d 7715 }
whismanoid 9:45f98573eb6d 7716 break;
whismanoid 9:45f98573eb6d 7717 }
whismanoid 9:45f98573eb6d 7718 //
whismanoid 9:45f98573eb6d 7719 //
whismanoid 9:45f98573eb6d 7720 }
whismanoid 9:45f98573eb6d 7721 } // end if cmdLine[2] channel_index
whismanoid 9:45f98573eb6d 7722 } // end for channel_index
whismanoid 9:45f98573eb6d 7723 Datalogger_PrintHeader();
whismanoid 9:45f98573eb6d 7724 Datalogger_Need_PrintHeader = true;
whismanoid 9:45f98573eb6d 7725 }
whismanoid 9:45f98573eb6d 7726 break;
whismanoid 9:45f98573eb6d 7727 #endif // defined(SPI_ADC_DeviceName) // SPI connected ADC
whismanoid 9:45f98573eb6d 7728 #if defined(LOG_PLATFORM_AIN) // Datalog Arduino platform analog inputs
whismanoid 9:45f98573eb6d 7729 // LA<channel ID><verb>: Configure Platform_AIN channels
whismanoid 9:45f98573eb6d 7730 // channel ID: 0,1,2,... or - for all channels
whismanoid 9:45f98573eb6d 7731 // verb: D for disable, V for Voltage, L for LSB
whismanoid 8:dffee7509bfb 7732 case 'A': case 'a':
whismanoid 9:45f98573eb6d 7733 {
whismanoid 9:45f98573eb6d 7734 // all-channel: loop through all valid channel_index, test cmdLine[2] 'is it me'?
whismanoid 9:45f98573eb6d 7735 // for channel_index loop through 0..NUM_DUT_ANALOG_IN_CHANNELS
whismanoid 9:45f98573eb6d 7736 // if ((cmdLine[2] == '-' /* all channels */)
whismanoid 9:45f98573eb6d 7737 // || (cmdLine[2] == '0'+channel_index)
whismanoid 9:45f98573eb6d 7738 // ) {
whismanoid 9:45f98573eb6d 7739 // // it's me
whismanoid 9:45f98573eb6d 7740 // // test cmdLine[3] to determine action
whismanoid 9:45f98573eb6d 7741 // // Platform_Enable_ch[channel_index] = Platform_AIN_xxxxx;
whismanoid 9:45f98573eb6d 7742 // } end if cmdLine[2] channel_index
whismanoid 9:45f98573eb6d 7743 // } end for channel_index
whismanoid 9:45f98573eb6d 7744 for (int channel_index = 0; channel_index < NUM_PLATFORM_ANALOG_IN_CHANNELS; channel_index++) {
whismanoid 9:45f98573eb6d 7745 if ((cmdLine[2] == '-' /* all channels */)
whismanoid 9:45f98573eb6d 7746 || (cmdLine[2] == '0'+channel_index)
whismanoid 9:45f98573eb6d 7747 )
whismanoid 9:45f98573eb6d 7748 {
whismanoid 9:45f98573eb6d 7749 // it's me
whismanoid 9:45f98573eb6d 7750 // test cmdLine[3] to determine action
whismanoid 9:45f98573eb6d 7751 // Platform_Enable_ch[channel_index] = Platform_AIN_xxxxx;
whismanoid 9:45f98573eb6d 7752 switch (cmdLine[3])
whismanoid 9:45f98573eb6d 7753 {
whismanoid 9:45f98573eb6d 7754 case 'D': case 'd':
whismanoid 9:45f98573eb6d 7755 Platform_Enable_ch[channel_index] = Platform_AIN_Disable;
whismanoid 9:45f98573eb6d 7756 break;
whismanoid 9:45f98573eb6d 7757 #if LOG_PLATFORM_ANALOG_IN_LSB
whismanoid 9:45f98573eb6d 7758 case 'L': case 'l':
whismanoid 9:45f98573eb6d 7759 Platform_Enable_ch[channel_index] = Platform_AIN_Enable_LSB;
whismanoid 9:45f98573eb6d 7760 break;
whismanoid 9:45f98573eb6d 7761 #endif // LOG_PLATFORM_ANALOG_IN_LSB
whismanoid 9:45f98573eb6d 7762 #if LOG_PLATFORM_ANALOG_IN_VOLTS
whismanoid 9:45f98573eb6d 7763 case 'V': case 'v':
whismanoid 9:45f98573eb6d 7764 Platform_Enable_ch[channel_index] = Platform_AIN_Enable_Volt;
whismanoid 9:45f98573eb6d 7765 break;
whismanoid 9:45f98573eb6d 7766 #endif // LOG_PLATFORM_ANALOG_IN_VOLTS
whismanoid 9:45f98573eb6d 7767 }
whismanoid 9:45f98573eb6d 7768 } // end if cmdLine[2] channel_index
whismanoid 9:45f98573eb6d 7769 } // end for channel_index
whismanoid 10:04022a61b527 7770 // Datalogger_PrintHeader(cmdLine);
whismanoid 9:45f98573eb6d 7771 if (Datalogger_enable_serial) {
whismanoid 9:45f98573eb6d 7772 Datalogger_PrintHeader(cmdLine);
whismanoid 9:45f98573eb6d 7773 }
whismanoid 9:45f98573eb6d 7774 # if HAS_AUX_SERIAL
whismanoid 9:45f98573eb6d 7775 if (Datalogger_enable_AUXserial) {
whismanoid 9:45f98573eb6d 7776 Datalogger_PrintHeader(cmdLine_AUXserial);
whismanoid 9:45f98573eb6d 7777 }
whismanoid 9:45f98573eb6d 7778 # endif // HAS_AUX_SERIAL
whismanoid 9:45f98573eb6d 7779 # if HAS_DAPLINK_SERIAL
whismanoid 9:45f98573eb6d 7780 if (Datalogger_enable_DAPLINKserial) {
whismanoid 9:45f98573eb6d 7781 Datalogger_PrintHeader(cmdLine_DAPLINKserial);
whismanoid 9:45f98573eb6d 7782 }
whismanoid 9:45f98573eb6d 7783 # endif // HAS_DAPLINK_SERIAL
whismanoid 9:45f98573eb6d 7784 Datalogger_Need_PrintHeader = true;
whismanoid 9:45f98573eb6d 7785 }
whismanoid 8:dffee7509bfb 7786 break;
whismanoid 9:45f98573eb6d 7787 #endif // defined(LOG_PLATFORM_AIN)
whismanoid 9:45f98573eb6d 7788 case '>':
whismanoid 9:45f98573eb6d 7789 // L>A -- Datalogger_enable_AUXserial
whismanoid 9:45f98573eb6d 7790 // L>D -- Datalogger_enable_DAPLINKserial
whismanoid 9:45f98573eb6d 7791 // L>S -- Datalogger_enable_serial
whismanoid 9:45f98573eb6d 7792 switch (cmdLine[2])
whismanoid 9:45f98573eb6d 7793 {
whismanoid 9:45f98573eb6d 7794 # if HAS_AUX_SERIAL
whismanoid 9:45f98573eb6d 7795 case 'A': case 'a':
whismanoid 9:45f98573eb6d 7796 Datalogger_enable_AUXserial = !Datalogger_enable_AUXserial;
whismanoid 9:45f98573eb6d 7797 Datalogger_Need_PrintHeader = true;
whismanoid 9:45f98573eb6d 7798 break;
whismanoid 8:dffee7509bfb 7799 # endif // HAS_AUX_SERIAL
whismanoid 8:dffee7509bfb 7800 # if HAS_DAPLINK_SERIAL
whismanoid 9:45f98573eb6d 7801 case 'D': case 'd':
whismanoid 9:45f98573eb6d 7802 Datalogger_enable_DAPLINKserial = !Datalogger_enable_DAPLINKserial;
whismanoid 9:45f98573eb6d 7803 Datalogger_Need_PrintHeader = true;
whismanoid 9:45f98573eb6d 7804 break;
whismanoid 8:dffee7509bfb 7805 # endif // HAS_DAPLINK_SERIAL
whismanoid 9:45f98573eb6d 7806 case 'S': case 's':
whismanoid 9:45f98573eb6d 7807 Datalogger_enable_serial = !Datalogger_enable_serial;
whismanoid 9:45f98573eb6d 7808 Datalogger_Need_PrintHeader = true;
whismanoid 9:45f98573eb6d 7809 break;
whismanoid 9:45f98573eb6d 7810 }
whismanoid 9:45f98573eb6d 7811 break; // case '>' L>S serial enable toggle
whismanoid 28:a9a3a9db592b 7812 default:
whismanoid 28:a9a3a9db592b 7813 // TODO: L -- detailed help for datalog commands
whismanoid 28:a9a3a9db592b 7814 //
whismanoid 28:a9a3a9db592b 7815 #if USE_DATALOGGER_TRIGGER // support Datalog trigger
whismanoid 28:a9a3a9db592b 7816 #if 1 // USE_DATALOGGER_TRIGGER_HELP_BRIEF
whismanoid 28:a9a3a9db592b 7817 // Datalogger_Trigger = trigger_FreeRun // free run as fast as possible "always-on mode"
whismanoid 28:a9a3a9db592b 7818 cmdLine.serial().printf("\r\n LR -- Datalog free run as fast as possible");
whismanoid 28:a9a3a9db592b 7819 //
whismanoid 28:a9a3a9db592b 7820 // Datalogger_Trigger = trigger_Timer // timer (configure interval) "intermittent-sleep-mode"
whismanoid 28:a9a3a9db592b 7821 //~ cmdLine.serial().printf("\r\n LT -- Datalog timer"); // trigger_Timer
whismanoid 39:4d285e961435 7822 #if USE_DATALOGGER_SLEEP // support sleep modes in Datalogger_Trigger
whismanoid 45:74bf1fe021e5 7823 // USE_DATALOGGER_SLEEP -- support sleep modes in Datalogger_Trigger
whismanoid 39:4d285e961435 7824 cmdLine.serial().printf("\r\n LT count=%d base=%dms sleep=%d -- Datalog timer",
whismanoid 39:4d285e961435 7825 g_timer_interval_count,
whismanoid 39:4d285e961435 7826 g_timer_interval_msec,
whismanoid 39:4d285e961435 7827 (int)g_timer_sleepmode
whismanoid 39:4d285e961435 7828 ); // trigger_Timer
whismanoid 39:4d285e961435 7829 #else // USE_DATALOGGER_SLEEP
whismanoid 28:a9a3a9db592b 7830 cmdLine.serial().printf("\r\n LT count=%d base=%dms -- Datalog timer", g_timer_interval_count, g_timer_interval_msec); // trigger_Timer
whismanoid 39:4d285e961435 7831 #endif // USE_DATALOGGER_SLEEP
whismanoid 28:a9a3a9db592b 7832 //
whismanoid 28:a9a3a9db592b 7833 // TODO: Datalogger_Trigger = trigger_PlatformDigitalInput // platform digital input (configure digital input pin reference)
whismanoid 28:a9a3a9db592b 7834 //~ cmdLine.serial().printf("\r\n LI -- Datalog _______"); // trigger_PlatformDigitalInput
whismanoid 28:a9a3a9db592b 7835 // TODO: cmdLine.serial().printf("\r\n LIH3 -- Datalog when input high D3"); // trigger_PlatformDigitalInput
whismanoid 28:a9a3a9db592b 7836 // TODO: cmdLine.serial().printf("\r\n LIL6 -- Datalog when input low D6"); // trigger_PlatformDigitalInput
whismanoid 28:a9a3a9db592b 7837 //
whismanoid 28:a9a3a9db592b 7838 #if USE_DATALOGGER_SPIDeviceRegRead
whismanoid 28:a9a3a9db592b 7839 // TODO: Datalogger_Trigger = trigger_SPIDeviceRegRead // SPI device register read (configure regaddr, mask value, match value)
whismanoid 28:a9a3a9db592b 7840 //~ cmdLine.serial().printf("\r\n L$ -- Datalog _______"); // trigger_SPIDeviceRegRead
whismanoid 28:a9a3a9db592b 7841 cmdLine.serial().printf("\r\n L$ count=10 base=500ms addr=xxx data=xxx mask=xxx -- Datalog when SPI read of address matches mask"); // trigger_SPIDeviceRegRead
whismanoid 28:a9a3a9db592b 7842 #endif // USE_DATALOGGER_SPIDeviceRegRead
whismanoid 28:a9a3a9db592b 7843 //
whismanoid 28:a9a3a9db592b 7844 #if USE_DATALOGGER_ActionTable // Datalogger_RunActionTable() supported actions
whismanoid 28:a9a3a9db592b 7845 cmdLine.serial().printf("\r\n L@ -- configures Datalogger_action_table; show more commands");
whismanoid 28:a9a3a9db592b 7846 #endif // USE_DATALOGGER_ActionTable Datalogger_RunActionTable() supported actions
whismanoid 28:a9a3a9db592b 7847 //
whismanoid 28:a9a3a9db592b 7848 //
whismanoid 28:a9a3a9db592b 7849 #if defined(SPI_ADC_DeviceName) // SPI connected ADC
whismanoid 28:a9a3a9db592b 7850 // LS<channel ID><verb>: Configure SPI_AIN channels
whismanoid 28:a9a3a9db592b 7851 // channel ID: 0,1,2,... or - for all channels
whismanoid 28:a9a3a9db592b 7852 // verb: D for disable, V for Voltage, L for LSB
whismanoid 28:a9a3a9db592b 7853 cmdLine.serial().printf("\r\n LS-D -- Datalog SPI ADC channel '-'(all) Disable");
whismanoid 28:a9a3a9db592b 7854 cmdLine.serial().printf("\r\n LS-V -- Datalog SPI ADC channel '-'(all) Volt");
whismanoid 28:a9a3a9db592b 7855 cmdLine.serial().printf("\r\n LS-L -- Datalog SPI ADC channel '-'(all) LSB");
whismanoid 28:a9a3a9db592b 7856 cmdLine.serial().printf("\r\n LS2D -- Datalog SPI ADC channel channel 2 Disable");
whismanoid 28:a9a3a9db592b 7857 cmdLine.serial().printf("\r\n LS3V -- Datalog SPI ADC channel channel 3 Volt");
whismanoid 28:a9a3a9db592b 7858 cmdLine.serial().printf("\r\n LS4L -- Datalog SPI ADC channel channel 4 LSB");
whismanoid 28:a9a3a9db592b 7859 //
whismanoid 28:a9a3a9db592b 7860 // MAX11410 verb for configuring SPI_AIN_Cfg_v_filter_ch[channel_index]
whismanoid 28:a9a3a9db592b 7861 // cmdLine.serial().print(F("\r\n LS-CF34 -- Datalog SPI ADC channel channel 5 v_filter 0x34"));
whismanoid 28:a9a3a9db592b 7862 cmdLine.serial().printf("\r\n LS-CF34 -- Datalog SPI ADC channel '-'(all) v_filter 0x34");
whismanoid 28:a9a3a9db592b 7863 //
whismanoid 28:a9a3a9db592b 7864 // MAX11410 verb for configuring SPI_AIN_Cfg_v_ctrl_ch[channel_index]
whismanoid 28:a9a3a9db592b 7865 // cmdLine.serial().print(F("\r\n LS-CC42 -- Datalog SPI ADC channel '-'(all) v_ctrl 0x42"));
whismanoid 28:a9a3a9db592b 7866 cmdLine.serial().printf("\r\n LS-CC42 -- Datalog SPI ADC channel '-'(all) v_ctrl 0x42");
whismanoid 28:a9a3a9db592b 7867 //
whismanoid 28:a9a3a9db592b 7868 // MAX11410 verb for configuring SPI_AIN_Cfg_v_ctrl_ch[channel_index]
whismanoid 28:a9a3a9db592b 7869 // cmdLine.serial().print(F("\r\n LS5___ -- Datalog SPI ADC channel channel 5 v_ctrl"));
whismanoid 28:a9a3a9db592b 7870 // MAX11410 verb for configuring SPI_AIN_Cfg_v_ctrl_ch[channel_index]
whismanoid 28:a9a3a9db592b 7871 cmdLine.serial().printf("\r\n LS5CU -- Datalog SPI ADC channel channel 5 v_ctrl Unipolar");
whismanoid 28:a9a3a9db592b 7872 // ((SPI_AIN_Cfg_v_ctrl_ch[channel_index] & 0x40) == 0) ? "BIPOLAR" : "Unipolar"
whismanoid 28:a9a3a9db592b 7873 cmdLine.serial().printf("\r\n LS5CB -- Datalog SPI ADC channel channel 5 v_ctrl Bipolar");
whismanoid 28:a9a3a9db592b 7874 // ((SPI_AIN_Cfg_v_ctrl_ch[channel_index] & 0x40) == 0) ? "BIPOLAR" : "Unipolar"
whismanoid 28:a9a3a9db592b 7875 //
whismanoid 28:a9a3a9db592b 7876 // MAX11410 verb for configuring SPI_AIN_Cfg_v_pga_ch[channel_index]
whismanoid 28:a9a3a9db592b 7877 // cmdLine.serial().print(F("\r\n LS5CP00 -- Datalog SPI ADC channel channel 5 v_pga 0x00"));
whismanoid 28:a9a3a9db592b 7878 cmdLine.serial().printf("\r\n LS-CP00 -- Datalog SPI ADC channel '-'(all) v_pga 0x00");
whismanoid 28:a9a3a9db592b 7879 //
whismanoid 28:a9a3a9db592b 7880 #endif // defined(SPI_ADC_DeviceName) // SPI connected ADC
whismanoid 28:a9a3a9db592b 7881 //
whismanoid 28:a9a3a9db592b 7882 #if defined(LOG_PLATFORM_AIN) // Datalog Arduino platform analog inputs
whismanoid 28:a9a3a9db592b 7883 // LA<channel ID><verb>: Configure Platform_AIN channels
whismanoid 28:a9a3a9db592b 7884 // channel ID: 0,1,2,... or - for all channels
whismanoid 28:a9a3a9db592b 7885 // verb: D for disable, V for Voltage, L for LSB
whismanoid 28:a9a3a9db592b 7886 cmdLine.serial().printf("\r\n LA-D -- Datalog Platform-AIN all-channel Disable");
whismanoid 28:a9a3a9db592b 7887 #if LOG_PLATFORM_ANALOG_IN_VOLTS
whismanoid 28:a9a3a9db592b 7888 cmdLine.serial().printf("\r\n LA-V -- Datalog Platform-AIN all-channel Volt");
whismanoid 28:a9a3a9db592b 7889 #endif // LOG_PLATFORM_ANALOG_IN_VOLTS
whismanoid 28:a9a3a9db592b 7890 #if LOG_PLATFORM_ANALOG_IN_LSB
whismanoid 28:a9a3a9db592b 7891 cmdLine.serial().printf("\r\n LA-L -- Datalog Platform-AIN all-channel LSB");
whismanoid 28:a9a3a9db592b 7892 #endif // LOG_PLATFORM_ANALOG_IN_LSB
whismanoid 28:a9a3a9db592b 7893 cmdLine.serial().printf("\r\n LA2D -- Datalog Platform-AIN channel 2 Disable");
whismanoid 28:a9a3a9db592b 7894 #if LOG_PLATFORM_ANALOG_IN_VOLTS
whismanoid 28:a9a3a9db592b 7895 cmdLine.serial().printf("\r\n LA3V -- Datalog Platform-AIN channel 3 Volt");
whismanoid 28:a9a3a9db592b 7896 #endif // LOG_PLATFORM_ANALOG_IN_VOLTS
whismanoid 28:a9a3a9db592b 7897 #if LOG_PLATFORM_ANALOG_IN_LSB
whismanoid 28:a9a3a9db592b 7898 cmdLine.serial().printf("\r\n LA4L -- Datalog Platform-AIN channel 4 LSB");
whismanoid 28:a9a3a9db592b 7899 #endif // LOG_PLATFORM_ANALOG_IN_LSB
whismanoid 28:a9a3a9db592b 7900 #endif // defined(LOG_PLATFORM_AIN)
whismanoid 28:a9a3a9db592b 7901 #endif // USE_DATALOGGER_TRIGGER support Datalog trigger
whismanoid 28:a9a3a9db592b 7902 # if HAS_AUX_SERIAL
whismanoid 28:a9a3a9db592b 7903 cmdLine.serial().printf("\r\n L>A -- Datalogger_enable_AUXserial %s", (Datalogger_enable_AUXserial?"disable":"enable"));
whismanoid 28:a9a3a9db592b 7904 # endif // HAS_AUX_SERIAL
whismanoid 28:a9a3a9db592b 7905 # if HAS_DAPLINK_SERIAL
whismanoid 28:a9a3a9db592b 7906 cmdLine.serial().printf("\r\n L>D -- Datalogger_enable_DAPLINKserial %s", (Datalogger_enable_DAPLINKserial?"disable":"enable"));
whismanoid 28:a9a3a9db592b 7907 # endif // HAS_DAPLINK_SERIAL
whismanoid 28:a9a3a9db592b 7908 cmdLine.serial().printf("\r\n L>S -- Datalogger_enable_serial %s", (Datalogger_enable_serial?"disable":"enable"));
whismanoid 28:a9a3a9db592b 7909 //
whismanoid 28:a9a3a9db592b 7910 #else // USE_DATALOGGER_TRIGGER_HELP_BRIEF
whismanoid 28:a9a3a9db592b 7911 #endif // USE_DATALOGGER_TRIGGER_HELP_BRIEF
whismanoid 28:a9a3a9db592b 7912 break;
whismanoid 17:9397ea3ea7e9 7913 } // switch (cmdLine[1]) inside case 'L'
whismanoid 4:d9b05924ad4c 7914 }
whismanoid 4:d9b05924ad4c 7915 break; // case 'L'
whismanoid 4:d9b05924ad4c 7916 #endif // USE_DATALOGGER_TRIGGER support Datalog trigger
whismanoid 4:d9b05924ad4c 7917 //
whismanoid 4:d9b05924ad4c 7918 // Application-specific commands here
whismanoid 4:d9b05924ad4c 7919 // alphanumeric command codes A-Z,a-z,0-9 reserved for application use
whismanoid 4:d9b05924ad4c 7920 //
whismanoid 4:d9b05924ad4c 7921 #if APPLICATION_ArduinoPinsMonitor
whismanoid 4:d9b05924ad4c 7922 #endif // APPLICATION_ArduinoPinsMonitor
whismanoid 4:d9b05924ad4c 7923
whismanoid 4:d9b05924ad4c 7924 //
whismanoid 4:d9b05924ad4c 7925 // TODO1: add new commands here
whismanoid 4:d9b05924ad4c 7926 //
whismanoid 4:d9b05924ad4c 7927 default:
whismanoid 4:d9b05924ad4c 7928 #if APPLICATION_MAX5715 // main_menu_onEOLcommandParser print command prompt
whismanoid 4:d9b05924ad4c 7929 extern bool MAX5715_menu_onEOLcommandParser(CmdLine & cmdLine); // defined in Test_Menu_MAX5715.cpp
whismanoid 4:d9b05924ad4c 7930 if (!MAX5715_menu_onEOLcommandParser(cmdLine))
whismanoid 4:d9b05924ad4c 7931 #elif APPLICATION_MAX11131 // main_menu_onEOLcommandParser print command prompt
whismanoid 4:d9b05924ad4c 7932 extern bool MAX11131_menu_onEOLcommandParser(CmdLine & cmdLine); // defined in Test_Menu_MAX11131.cpp
whismanoid 4:d9b05924ad4c 7933 if (!MAX11131_menu_onEOLcommandParser(cmdLine))
whismanoid 4:d9b05924ad4c 7934 #elif APPLICATION_MAX5171 // main_menu_onEOLcommandParser print command prompt
whismanoid 4:d9b05924ad4c 7935 extern bool MAX5171_menu_onEOLcommandParser(CmdLine & cmdLine); // defined in Test_Menu_MAX5171.cpp
whismanoid 4:d9b05924ad4c 7936 if (!MAX5171_menu_onEOLcommandParser(cmdLine))
whismanoid 4:d9b05924ad4c 7937 #elif APPLICATION_MAX11410 // main_menu_onEOLcommandParser print command prompt
whismanoid 4:d9b05924ad4c 7938 extern bool MAX11410_menu_onEOLcommandParser(CmdLine & cmdLine); // defined in Test_Menu_MAX11410.cpp
whismanoid 4:d9b05924ad4c 7939 if (!MAX11410_menu_onEOLcommandParser(cmdLine))
whismanoid 4:d9b05924ad4c 7940 #elif APPLICATION_MAX12345 // main_menu_onEOLcommandParser print command prompt
whismanoid 4:d9b05924ad4c 7941 extern bool MAX12345_menu_onEOLcommandParser(CmdLine & cmdLine); // defined in Test_Menu_MAX12345.cpp
whismanoid 4:d9b05924ad4c 7942 if (!MAX12345_menu_onEOLcommandParser(cmdLine))
whismanoid 4:d9b05924ad4c 7943 #else
whismanoid 4:d9b05924ad4c 7944 if (0) // not_handled_by_device_submenu
whismanoid 4:d9b05924ad4c 7945 #endif
whismanoid 4:d9b05924ad4c 7946 {
whismanoid 4:d9b05924ad4c 7947 cmdLine.serial().printf("\r\n unknown command ");
whismanoid 4:d9b05924ad4c 7948 //~ cmdLine.serial().printf("\r\n unknown command 0x%2.2x \"%s\"\r\n", cmdLine.str()[0], cmdLine.str());
whismanoid 4:d9b05924ad4c 7949 # if HAS_DAPLINK_SERIAL
whismanoid 8:dffee7509bfb 7950 cmdLine_DAPLINKserial.serial().printf("\r\n unknown command 0x%2.2x \"%s\"\r\n",
whismanoid 4:d9b05924ad4c 7951 cmdLine.str()[0], cmdLine.str());
whismanoid 4:d9b05924ad4c 7952 # endif // HAS_DAPLINK_SERIAL
whismanoid 4:d9b05924ad4c 7953 }
whismanoid 4:d9b05924ad4c 7954 } // switch (cmdLine[0])
whismanoid 4:d9b05924ad4c 7955 //
whismanoid 31:47eee7e0cc2d 7956 // TODO: avoid excess console noise when a Button event happens during datalogging -- quiet inside Run_command_table()
whismanoid 31:47eee7e0cc2d 7957 if (g_Run_command_table_running == false) {
whismanoid 4:d9b05924ad4c 7958 // print command prompt
whismanoid 8:dffee7509bfb 7959 // print_command_prompt();
whismanoid 8:dffee7509bfb 7960 cmdLine.serial().printf("\r\n> ");
whismanoid 31:47eee7e0cc2d 7961 } // if (g_Run_command_table_running)
whismanoid 4:d9b05924ad4c 7962 }
whismanoid 4:d9b05924ad4c 7963 #endif // USE_CMDLINE_MENUS support CmdLine command menus
whismanoid 4:d9b05924ad4c 7964
whismanoid 4:d9b05924ad4c 7965 //--------------------------------------------------
whismanoid 4:d9b05924ad4c 7966 // print column header banner for csv data columns
whismanoid 8:dffee7509bfb 7967 void Datalogger_PrintHeader(CmdLine& cmdLine)
whismanoid 4:d9b05924ad4c 7968 {
whismanoid 37:3f369235e5bc 7969 #if MAX40108_DEMO // main_menu_status banner
whismanoid 37:3f369235e5bc 7970 cmdLine.serial().printf("\r\n\r\n\"MAX40108_U%d", MAX40108_DEMO);
whismanoid 37:3f369235e5bc 7971 #ifdef BOARD_SERIAL_NUMBER
whismanoid 37:3f369235e5bc 7972 // data unique to certain boards based on serial number
whismanoid 49:359a6b9df7c1 7973 cmdLine.serial().printf(" [s/n %ld]", g_board_serial_number);
whismanoid 37:3f369235e5bc 7974 #endif // BOARD_SERIAL_NUMBER data unique to certain boards based on serial number
whismanoid 37:3f369235e5bc 7975 #ifdef FW_REV
whismanoid 37:3f369235e5bc 7976 cmdLine.serial().printf(" [FW_REV %d]", FW_REV);
whismanoid 37:3f369235e5bc 7977 #endif // FW_REV
whismanoid 37:3f369235e5bc 7978 cmdLine.serial().printf("\"\r\n");
whismanoid 37:3f369235e5bc 7979 #endif // MAX40108_DEMO
whismanoid 37:3f369235e5bc 7980
whismanoid 4:d9b05924ad4c 7981 // column header banner for csv data columns
whismanoid 4:d9b05924ad4c 7982 int field_index = 0;
whismanoid 4:d9b05924ad4c 7983 #if defined(SPI_ADC_DeviceName) // SPI connected ADC
whismanoid 10:04022a61b527 7984 for (int channel_index = 0; channel_index < NUM_DUT_ANALOG_IN_CHANNELS; channel_index++) {
whismanoid 10:04022a61b527 7985 if (SPI_AIN_Enable_ch[channel_index] == SPI_AIN_Disable) {
whismanoid 4:d9b05924ad4c 7986 continue;
whismanoid 4:d9b05924ad4c 7987 }
whismanoid 4:d9b05924ad4c 7988 // comma between fields
whismanoid 4:d9b05924ad4c 7989 if (field_index > 0) {
whismanoid 4:d9b05924ad4c 7990 cmdLine.serial().printf(",");
whismanoid 4:d9b05924ad4c 7991 }
whismanoid 10:04022a61b527 7992 field_index++;
whismanoid 4:d9b05924ad4c 7993 // AIN_index column header prefix
whismanoid 4:d9b05924ad4c 7994 #if SPI_ADC_DeviceName == MAX11410 // SPI connected ADC
whismanoid 4:d9b05924ad4c 7995 // MAX11410 v_ctrl bipolar configuration or unipolar?
whismanoid 4:d9b05924ad4c 7996 if ((SPI_AIN_Cfg_v_ctrl_ch[channel_index] & 0x40) == 0) {
whismanoid 4:d9b05924ad4c 7997 cmdLine.serial().printf("\"AIN%d-%d_BIP", channel_index, channel_index+1);
whismanoid 4:d9b05924ad4c 7998 }
whismanoid 4:d9b05924ad4c 7999 else {
whismanoid 4:d9b05924ad4c 8000 cmdLine.serial().printf("\"AIN%d", channel_index);
whismanoid 4:d9b05924ad4c 8001 }
whismanoid 4:d9b05924ad4c 8002 #else // SPI_ADC_DeviceName == MAX11410 // SPI connected ADC
whismanoid 4:d9b05924ad4c 8003 cmdLine.serial().printf("\"AIN%d", channel_index);
whismanoid 4:d9b05924ad4c 8004 #endif // SPI_ADC_DeviceName == MAX11410 // SPI connected ADC
whismanoid 10:04022a61b527 8005 if (SPI_AIN_Enable_ch[channel_index] == SPI_AIN_Enable_LSB) {
whismanoid 4:d9b05924ad4c 8006 // _LSB column header suffix
whismanoid 13:184a08909405 8007 cmdLine.serial().printf("_LSB");
whismanoid 4:d9b05924ad4c 8008 # if HAS_DAPLINK_SERIAL
whismanoid 13:184a08909405 8009 cmdLine_DAPLINKserial.serial().printf("_LSB");
whismanoid 4:d9b05924ad4c 8010 # endif // HAS_DAPLINK_SERIAL
whismanoid 4:d9b05924ad4c 8011 }
whismanoid 10:04022a61b527 8012 else if (SPI_AIN_Enable_ch[channel_index] == SPI_AIN_Enable_Volt) {
whismanoid 4:d9b05924ad4c 8013 // _V column header suffix
whismanoid 13:184a08909405 8014 cmdLine.serial().printf("_V");
whismanoid 4:d9b05924ad4c 8015 # if HAS_DAPLINK_SERIAL
whismanoid 13:184a08909405 8016 cmdLine_DAPLINKserial.serial().printf("_V");
whismanoid 4:d9b05924ad4c 8017 # endif // HAS_DAPLINK_SERIAL
whismanoid 4:d9b05924ad4c 8018 }
whismanoid 13:184a08909405 8019 #if HAS_SPI_AIN_customChannelHeader // Optional custom per-channel header suffix
whismanoid 13:184a08909405 8020 // Optional custom per-channel header suffix
whismanoid 13:184a08909405 8021 if (SPI_AIN_customChannelHeader_ch[channel_index] && SPI_AIN_customChannelHeader_ch[channel_index][0]) {
whismanoid 13:184a08909405 8022 // not a null pointer, and not an empty string
whismanoid 13:184a08909405 8023 cmdLine.serial().printf("_%s", SPI_AIN_customChannelHeader_ch[channel_index]);
whismanoid 13:184a08909405 8024 # if HAS_DAPLINK_SERIAL
whismanoid 13:184a08909405 8025 cmdLine_DAPLINKserial.serial().printf("_%s", SPI_AIN_customChannelHeader_ch[channel_index]);
whismanoid 13:184a08909405 8026 # endif // HAS_DAPLINK_SERIAL
whismanoid 13:184a08909405 8027 } else {
whismanoid 13:184a08909405 8028 // no custom channel name for this channel
whismanoid 13:184a08909405 8029 //~ cmdLine.serial().printf("~");
whismanoid 13:184a08909405 8030 # if HAS_DAPLINK_SERIAL
whismanoid 13:184a08909405 8031 //~ cmdLine_DAPLINKserial.serial().printf("~");
whismanoid 13:184a08909405 8032 # endif // HAS_DAPLINK_SERIAL
whismanoid 13:184a08909405 8033 }
whismanoid 13:184a08909405 8034 #endif // HAS_SPI_AIN_customChannelHeader
whismanoid 13:184a08909405 8035 // close quote
whismanoid 13:184a08909405 8036 cmdLine.serial().printf("\"");
whismanoid 13:184a08909405 8037 # if HAS_DAPLINK_SERIAL
whismanoid 13:184a08909405 8038 cmdLine_DAPLINKserial.serial().printf("\"");
whismanoid 13:184a08909405 8039 # endif // HAS_DAPLINK_SERIAL
whismanoid 4:d9b05924ad4c 8040 }
whismanoid 4:d9b05924ad4c 8041
whismanoid 4:d9b05924ad4c 8042 #if VERIFY_PART_ID_IN_LOOP
whismanoid 4:d9b05924ad4c 8043 // PART_ID field: Device ID Validation
whismanoid 4:d9b05924ad4c 8044 cmdLine.serial().printf(",\"PART_ID\"");
whismanoid 4:d9b05924ad4c 8045 # if HAS_DAPLINK_SERIAL
whismanoid 4:d9b05924ad4c 8046 cmdLine_DAPLINKserial.serial().printf(",\"PART_ID\"");
whismanoid 4:d9b05924ad4c 8047 # endif // HAS_DAPLINK_SERIAL
whismanoid 4:d9b05924ad4c 8048 #endif // VERIFY_PART_ID_IN_LOOP
whismanoid 4:d9b05924ad4c 8049 #endif // defined(SPI_ADC_DeviceName) // SPI connected ADC
whismanoid 4:d9b05924ad4c 8050 #if defined(LOG_PLATFORM_AIN) // Datalog Arduino platform analog inputs
whismanoid 9:45f98573eb6d 8051 for (int channel_index = 0; channel_index < NUM_PLATFORM_ANALOG_IN_CHANNELS; channel_index++) {
whismanoid 9:45f98573eb6d 8052 if (Platform_Enable_ch[channel_index] == Platform_AIN_Disable) {
whismanoid 9:45f98573eb6d 8053 continue;
whismanoid 9:45f98573eb6d 8054 }
whismanoid 4:d9b05924ad4c 8055 // comma between fields
whismanoid 4:d9b05924ad4c 8056 if (field_index > 0) {
whismanoid 4:d9b05924ad4c 8057 cmdLine.serial().printf(",");
whismanoid 4:d9b05924ad4c 8058 }
whismanoid 9:45f98573eb6d 8059 field_index++;
whismanoid 4:d9b05924ad4c 8060 // AIN_index column header prefix
whismanoid 4:d9b05924ad4c 8061 cmdLine.serial().printf("\"A%d", channel_index);
whismanoid 9:45f98573eb6d 8062 if (Platform_Enable_ch[channel_index] == Platform_AIN_Enable_LSB) {
whismanoid 9:45f98573eb6d 8063 // _LSB column header suffix
whismanoid 13:184a08909405 8064 cmdLine.serial().printf("_LSB");
whismanoid 9:45f98573eb6d 8065 }
whismanoid 9:45f98573eb6d 8066 if (Platform_Enable_ch[channel_index] == Platform_AIN_Enable_Volt) {
whismanoid 9:45f98573eb6d 8067 // _V column header suffix
whismanoid 13:184a08909405 8068 cmdLine.serial().printf("_V");
whismanoid 9:45f98573eb6d 8069 }
whismanoid 13:184a08909405 8070 #if HAS_Platform_AIN_customChannelHeader // Optional custom per-channel header suffix
whismanoid 13:184a08909405 8071 // Optional custom per-channel header suffix
whismanoid 13:184a08909405 8072 if (Platform_AIN_customChannelHeader_ch[channel_index] && Platform_AIN_customChannelHeader_ch[channel_index][0]) {
whismanoid 13:184a08909405 8073 // not a null pointer, and not an empty string
whismanoid 13:184a08909405 8074 cmdLine.serial().printf("_%s", Platform_AIN_customChannelHeader_ch[channel_index]);
whismanoid 13:184a08909405 8075 # if HAS_DAPLINK_SERIAL
whismanoid 13:184a08909405 8076 cmdLine_DAPLINKserial.serial().printf("_%s", Platform_AIN_customChannelHeader_ch[channel_index]);
whismanoid 13:184a08909405 8077 # endif // HAS_DAPLINK_SERIAL
whismanoid 13:184a08909405 8078 } else {
whismanoid 13:184a08909405 8079 // no custom channel name for this channel
whismanoid 13:184a08909405 8080 //~ cmdLine.serial().printf("~");
whismanoid 13:184a08909405 8081 # if HAS_DAPLINK_SERIAL
whismanoid 13:184a08909405 8082 //~ cmdLine_DAPLINKserial.serial().printf("~");
whismanoid 13:184a08909405 8083 # endif // HAS_DAPLINK_SERIAL
whismanoid 13:184a08909405 8084 }
whismanoid 13:184a08909405 8085 #endif // HAS_Platform_AIN_customChannelHeader
whismanoid 13:184a08909405 8086 // close quote
whismanoid 13:184a08909405 8087 cmdLine.serial().printf("\"");
whismanoid 13:184a08909405 8088 # if HAS_DAPLINK_SERIAL
whismanoid 13:184a08909405 8089 cmdLine_DAPLINKserial.serial().printf("\"");
whismanoid 13:184a08909405 8090 # endif // HAS_DAPLINK_SERIAL
whismanoid 4:d9b05924ad4c 8091 }
whismanoid 4:d9b05924ad4c 8092 #endif // defined(LOG_PLATFORM_AIN)
whismanoid 30:07197a430869 8093 #if USE_DATALOGGER_REMARK_FIELD
whismanoid 30:07197a430869 8094 // Datalogger_PrintRow() print gstrRemarkText field from recent #remark -- in Datalogger_PrintHeader
whismanoid 30:07197a430869 8095 cmdLine.serial().printf(",\"%s\"", gstrRemarkHeader);
whismanoid 30:07197a430869 8096 #endif // USE_DATALOGGER_REMARK_FIELD
whismanoid 4:d9b05924ad4c 8097 // end of column header line
whismanoid 4:d9b05924ad4c 8098 cmdLine.serial().printf("\r\n");
whismanoid 4:d9b05924ad4c 8099 # if HAS_DAPLINK_SERIAL
whismanoid 4:d9b05924ad4c 8100 cmdLine_DAPLINKserial.serial().printf("\r\n");
whismanoid 4:d9b05924ad4c 8101 # endif // HAS_DAPLINK_SERIAL
whismanoid 4:d9b05924ad4c 8102 } // void Datalogger_PrintHeader()
whismanoid 4:d9b05924ad4c 8103
whismanoid 5:aaf8b5f5fda1 8104 //--------------------------------------------------
whismanoid 5:aaf8b5f5fda1 8105 void Datalogger_AcquireRow()
whismanoid 5:aaf8b5f5fda1 8106 {
whismanoid 5:aaf8b5f5fda1 8107 // CODE GENERATOR: example code: has no member function ScanStandardExternalClock
whismanoid 5:aaf8b5f5fda1 8108 // CODE GENERATOR: example code: has no member function ReadAINcode
whismanoid 5:aaf8b5f5fda1 8109 // CODE GENERATOR: example code: member function Read_All_Voltages
whismanoid 5:aaf8b5f5fda1 8110 #if defined(SPI_ADC_DeviceName) // SPI connected ADC
whismanoid 5:aaf8b5f5fda1 8111 // Measure ADC channels in sequence from AIN0 to channelNumber_0_9.
whismanoid 5:aaf8b5f5fda1 8112 // @param[in] g_MAX11410_device.channelNumber_0_15: AIN Channel Number
whismanoid 5:aaf8b5f5fda1 8113 // @param[in] g_MAX11410_device.PowerManagement_0_2: 0=Normal, 1=AutoShutdown, 2=AutoStandby
whismanoid 5:aaf8b5f5fda1 8114 // @param[in] g_MAX11410_device.chan_id_0_1: ADC_MODE_CONTROL.CHAN_ID
whismanoid 10:04022a61b527 8115 //~ int channelId_0_9 = NUM_DUT_ANALOG_IN_CHANNELS-1+1;
whismanoid 5:aaf8b5f5fda1 8116 //g_MAX11410_device.channelNumber_0_15 = channelId_0_9;
whismanoid 5:aaf8b5f5fda1 8117 //g_MAX11410_device.PowerManagement_0_2 = 0;
whismanoid 5:aaf8b5f5fda1 8118 //g_MAX11410_device.chan_id_0_1 = 1;
whismanoid 5:aaf8b5f5fda1 8119 //----------------------------------------
whismanoid 5:aaf8b5f5fda1 8120 // scan AIN0..AIN9
whismanoid 5:aaf8b5f5fda1 8121 //
whismanoid 10:04022a61b527 8122 #if 1
whismanoid 10:04022a61b527 8123 g_MAX11410_device.v_filter = SPI_AIN_Cfg_v_filter_ch[0];
whismanoid 10:04022a61b527 8124 g_MAX11410_device.v_ctrl = SPI_AIN_Cfg_v_ctrl_ch[0];
whismanoid 10:04022a61b527 8125 g_MAX11410_device.v_pga = SPI_AIN_Cfg_v_pga_ch[0];
whismanoid 10:04022a61b527 8126 //
whismanoid 10:04022a61b527 8127 // diagnostic GPIO pulse on MAX11410 GP1 pin (0xc3 = logic 0, 0xc4 = logic 1)
whismanoid 10:04022a61b527 8128 g_MAX11410_device.RegWrite(MAX11410::CMD_r000_0101_dddd_xddd_GP1_CTRL, 0xc3); // GP1 = 0
whismanoid 10:04022a61b527 8129 //
whismanoid 10:04022a61b527 8130 int field_index = 0;
whismanoid 10:04022a61b527 8131 for (int channel_index = 0; channel_index < NUM_DUT_ANALOG_IN_CHANNELS; channel_index++) {
whismanoid 10:04022a61b527 8132 if (SPI_AIN_Enable_ch[channel_index] == SPI_AIN_Disable) {
whismanoid 10:04022a61b527 8133 continue;
whismanoid 10:04022a61b527 8134 }
whismanoid 10:04022a61b527 8135 field_index++;
whismanoid 10:04022a61b527 8136 g_MAX11410_device.v_filter = SPI_AIN_Cfg_v_filter_ch[channel_index];
whismanoid 10:04022a61b527 8137 g_MAX11410_device.v_ctrl = SPI_AIN_Cfg_v_ctrl_ch[channel_index];
whismanoid 10:04022a61b527 8138 g_MAX11410_device.v_pga = SPI_AIN_Cfg_v_pga_ch[channel_index];
whismanoid 10:04022a61b527 8139 //
whismanoid 10:04022a61b527 8140 // WIP SampleRate_of_FILTER_CONV_START() MAX11410EMC-FW slow ODR 10Sps #262
whismanoid 10:04022a61b527 8141 // adjust the MAX11410.loop_limit value if the sample rate is set to a value slower than 20sps
whismanoid 10:04022a61b527 8142 // SampleRate_of_FILTER_CONV_START(uint8_t FILTER_RegValue, uint8_t CONV_START_RegValue)
whismanoid 10:04022a61b527 8143 double SampleRate = g_MAX11410_device.SampleRate_of_FILTER_CONV_START(g_MAX11410_device.v_filter, MAX11410::MAX11410_CONV_TYPE_enum_t::CONV_TYPE_01_Continuous);
whismanoid 10:04022a61b527 8144 if (SampleRate < 20.0) {
whismanoid 10:04022a61b527 8145 g_MAX11410_device.loop_limit = 32767; // TODO: is this timeout long enough for the slow output data rates?
whismanoid 10:04022a61b527 8146 }
whismanoid 10:04022a61b527 8147 //
whismanoid 10:04022a61b527 8148 // diagnostic GPIO pulse on MAX11410 GP0 pin (0xc3 = logic 0, 0xc4 = logic 1)
whismanoid 10:04022a61b527 8149 g_MAX11410_device.RegWrite(MAX11410::CMD_r000_0100_dddd_xddd_GP0_CTRL, 0xc3); // GP0 = 0
whismanoid 10:04022a61b527 8150 //
whismanoid 10:04022a61b527 8151 #if SPI_ADC_DeviceName == MAX11410 // SPI connected ADC
whismanoid 10:04022a61b527 8152 // MAX11410 v_ctrl bipolar configuration or unipolar?
whismanoid 10:04022a61b527 8153 if ((SPI_AIN_Cfg_v_ctrl_ch[channel_index] & 0x40) == 0) {
whismanoid 10:04022a61b527 8154 const MAX11410::MAX11410_AINP_SEL_enum_t ainp = (MAX11410::MAX11410_AINP_SEL_enum_t)(channel_index);
whismanoid 10:04022a61b527 8155 const MAX11410::MAX11410_AINN_SEL_enum_t ainn = (MAX11410::MAX11410_AINN_SEL_enum_t)(channel_index^1);
whismanoid 10:04022a61b527 8156 SPI_AIN_Voltage[channel_index] = g_MAX11410_device.Measure_Voltage(ainp, ainn);
whismanoid 10:04022a61b527 8157 // @post AINcode[ainp]: measurement result LSB code
whismanoid 10:04022a61b527 8158 }
whismanoid 10:04022a61b527 8159 else {
whismanoid 10:04022a61b527 8160 const MAX11410::MAX11410_AINP_SEL_enum_t ainp = (MAX11410::MAX11410_AINP_SEL_enum_t)(channel_index);
whismanoid 10:04022a61b527 8161 const MAX11410::MAX11410_AINN_SEL_enum_t ainn = MAX11410::AINN_SEL_1010_GND;
whismanoid 10:04022a61b527 8162 SPI_AIN_Voltage[channel_index] = g_MAX11410_device.Measure_Voltage(ainp, ainn);
whismanoid 10:04022a61b527 8163 // @post AINcode[ainp]: measurement result LSB code
whismanoid 10:04022a61b527 8164 }
whismanoid 10:04022a61b527 8165 #endif // SPI_ADC_DeviceName == MAX11410 // SPI connected ADC
whismanoid 10:04022a61b527 8166 //
whismanoid 10:04022a61b527 8167 // diagnostic GPIO pulse on MAX11410 GP0 pin (0xc3 = logic 0, 0xc4 = logic 1)
whismanoid 10:04022a61b527 8168 g_MAX11410_device.RegWrite(MAX11410::CMD_r000_0100_dddd_xddd_GP0_CTRL, 0xc4); // GP0 = 1
whismanoid 10:04022a61b527 8169 //
whismanoid 10:04022a61b527 8170 }
whismanoid 10:04022a61b527 8171 // diagnostic GPIO pulse on MAX11410 GP1 pin (0xc3 = logic 0, 0xc4 = logic 1)
whismanoid 10:04022a61b527 8172 g_MAX11410_device.RegWrite(MAX11410::CMD_r000_0101_dddd_xddd_GP1_CTRL, 0xc4); // GP1 = 1
whismanoid 10:04022a61b527 8173 #else
whismanoid 5:aaf8b5f5fda1 8174 g_MAX11410_device.Read_All_Voltages();
whismanoid 10:04022a61b527 8175 #endif
whismanoid 10:04022a61b527 8176 #endif // defined(SPI_ADC_DeviceName) // SPI connected ADC
whismanoid 5:aaf8b5f5fda1 8177 #if defined(LOG_PLATFORM_AIN) // Datalog Arduino platform analog inputs
whismanoid 5:aaf8b5f5fda1 8178 // mbed
whismanoid 5:aaf8b5f5fda1 8179 // Platform board uses simple analog inputs
whismanoid 5:aaf8b5f5fda1 8180 #if LOG_PLATFORM_ANALOG_IN_LSB
whismanoid 5:aaf8b5f5fda1 8181 Platform_LSB[0] = analogIn0.read();
whismanoid 5:aaf8b5f5fda1 8182 Platform_LSB[1] = analogIn1.read();
whismanoid 5:aaf8b5f5fda1 8183 Platform_LSB[2] = analogIn2.read();
whismanoid 5:aaf8b5f5fda1 8184 Platform_LSB[3] = analogIn3.read();
whismanoid 5:aaf8b5f5fda1 8185 Platform_LSB[4] = analogIn4.read();
whismanoid 5:aaf8b5f5fda1 8186 Platform_LSB[5] = analogIn5.read();
whismanoid 10:04022a61b527 8187 #endif
whismanoid 10:04022a61b527 8188 #if LOG_PLATFORM_ANALOG_IN_VOLTS
whismanoid 37:3f369235e5bc 8189 #if USE_Platform_AIN_Average
whismanoid 37:3f369235e5bc 8190 // #if USE_Platform_AIN_Average -- for (i=0; i<Platform_AIN_Average_N; i++) -- analogIn012345.read()
whismanoid 37:3f369235e5bc 8191 // float normValue_0_1 = analogInPin.read(); but mean of Platform_AIN_Average_N samples
whismanoid 37:3f369235e5bc 8192 float analogIn0_normValue_0_1 = 0;
whismanoid 37:3f369235e5bc 8193 float analogIn1_normValue_0_1 = 0;
whismanoid 37:3f369235e5bc 8194 float analogIn2_normValue_0_1 = 0;
whismanoid 37:3f369235e5bc 8195 float analogIn3_normValue_0_1 = 0;
whismanoid 37:3f369235e5bc 8196 float analogIn4_normValue_0_1 = 0;
whismanoid 37:3f369235e5bc 8197 float analogIn5_normValue_0_1 = 0;
whismanoid 37:3f369235e5bc 8198 for (int i = 0; i < Platform_AIN_Average_N; i++) {
whismanoid 37:3f369235e5bc 8199 analogIn0_normValue_0_1 = analogIn0_normValue_0_1 + analogIn0.read();
whismanoid 37:3f369235e5bc 8200 analogIn1_normValue_0_1 = analogIn1_normValue_0_1 + analogIn1.read();
whismanoid 37:3f369235e5bc 8201 analogIn2_normValue_0_1 = analogIn2_normValue_0_1 + analogIn2.read();
whismanoid 37:3f369235e5bc 8202 analogIn3_normValue_0_1 = analogIn3_normValue_0_1 + analogIn3.read();
whismanoid 37:3f369235e5bc 8203 analogIn4_normValue_0_1 = analogIn4_normValue_0_1 + analogIn4.read();
whismanoid 37:3f369235e5bc 8204 analogIn5_normValue_0_1 = analogIn5_normValue_0_1 + analogIn5.read();
whismanoid 37:3f369235e5bc 8205 }
whismanoid 37:3f369235e5bc 8206 analogIn0_normValue_0_1 = analogIn0_normValue_0_1 / Platform_AIN_Average_N;
whismanoid 37:3f369235e5bc 8207 analogIn1_normValue_0_1 = analogIn1_normValue_0_1 / Platform_AIN_Average_N;
whismanoid 37:3f369235e5bc 8208 analogIn2_normValue_0_1 = analogIn2_normValue_0_1 / Platform_AIN_Average_N;
whismanoid 37:3f369235e5bc 8209 analogIn3_normValue_0_1 = analogIn3_normValue_0_1 / Platform_AIN_Average_N;
whismanoid 37:3f369235e5bc 8210 analogIn4_normValue_0_1 = analogIn4_normValue_0_1 / Platform_AIN_Average_N;
whismanoid 37:3f369235e5bc 8211 analogIn5_normValue_0_1 = analogIn5_normValue_0_1 / Platform_AIN_Average_N;
whismanoid 37:3f369235e5bc 8212 #else // USE_Platform_AIN_Average
whismanoid 37:3f369235e5bc 8213 float analogIn0_normValue_0_1 = analogIn0.read();
whismanoid 37:3f369235e5bc 8214 float analogIn1_normValue_0_1 = analogIn1.read();
whismanoid 37:3f369235e5bc 8215 float analogIn2_normValue_0_1 = analogIn2.read();
whismanoid 37:3f369235e5bc 8216 float analogIn3_normValue_0_1 = analogIn3.read();
whismanoid 37:3f369235e5bc 8217 float analogIn4_normValue_0_1 = analogIn4.read();
whismanoid 37:3f369235e5bc 8218 float analogIn5_normValue_0_1 = analogIn5.read();
whismanoid 37:3f369235e5bc 8219 #endif // USE_Platform_AIN_Average
whismanoid 34:a1993a1ee904 8220 #if HAS_Platform_AIN_Calibration
whismanoid 34:a1993a1ee904 8221 // apply calibration to normValue_0_1 value
whismanoid 37:3f369235e5bc 8222 Platform_Voltage[0] = CalibratedNormValue(0, analogIn0_normValue_0_1) * adc_full_scale_voltage[0];
whismanoid 37:3f369235e5bc 8223 Platform_Voltage[1] = CalibratedNormValue(1, analogIn1_normValue_0_1) * adc_full_scale_voltage[1];
whismanoid 37:3f369235e5bc 8224 Platform_Voltage[2] = CalibratedNormValue(2, analogIn2_normValue_0_1) * adc_full_scale_voltage[2];
whismanoid 37:3f369235e5bc 8225 Platform_Voltage[3] = CalibratedNormValue(3, analogIn3_normValue_0_1) * adc_full_scale_voltage[3];
whismanoid 37:3f369235e5bc 8226 Platform_Voltage[4] = CalibratedNormValue(4, analogIn4_normValue_0_1) * adc_full_scale_voltage[4];
whismanoid 37:3f369235e5bc 8227 Platform_Voltage[5] = CalibratedNormValue(5, analogIn5_normValue_0_1) * adc_full_scale_voltage[5];
whismanoid 34:a1993a1ee904 8228 #else // HAS_Platform_AIN_Calibration
whismanoid 37:3f369235e5bc 8229 Platform_Voltage[0] = analogIn0_normValue_0_1 * adc_full_scale_voltage[0];
whismanoid 37:3f369235e5bc 8230 Platform_Voltage[1] = analogIn1_normValue_0_1 * adc_full_scale_voltage[1];
whismanoid 37:3f369235e5bc 8231 Platform_Voltage[2] = analogIn2_normValue_0_1 * adc_full_scale_voltage[2];
whismanoid 37:3f369235e5bc 8232 Platform_Voltage[3] = analogIn3_normValue_0_1 * adc_full_scale_voltage[3];
whismanoid 37:3f369235e5bc 8233 Platform_Voltage[4] = analogIn4_normValue_0_1 * adc_full_scale_voltage[4];
whismanoid 37:3f369235e5bc 8234 Platform_Voltage[5] = analogIn5_normValue_0_1 * adc_full_scale_voltage[5];
whismanoid 34:a1993a1ee904 8235 #endif // HAS_Platform_AIN_Calibration
whismanoid 37:3f369235e5bc 8236 #endif // LOG_PLATFORM_ANALOG_IN_VOLTS
whismanoid 5:aaf8b5f5fda1 8237 #endif // defined(LOG_PLATFORM_AIN) // Datalog Arduino platform analog inputs
whismanoid 5:aaf8b5f5fda1 8238
whismanoid 5:aaf8b5f5fda1 8239 #if VERIFY_PART_ID_IN_LOOP
whismanoid 5:aaf8b5f5fda1 8240 // PART_ID field: Device ID Validation
whismanoid 5:aaf8b5f5fda1 8241 const uint32_t part_id_expect = 0x000F02;
whismanoid 5:aaf8b5f5fda1 8242 uint32_t part_id_readback;
whismanoid 5:aaf8b5f5fda1 8243 g_MAX11410_device.RegRead(MAX11410::CMD_r001_0001_xxxx_xxxx_xxxx_xxxx_xxxx_xddd_PART_ID, &part_id_readback);
whismanoid 5:aaf8b5f5fda1 8244 #endif // VERIFY_PART_ID_IN_LOOP
whismanoid 5:aaf8b5f5fda1 8245 } // void Datalogger_AcquireRow()
whismanoid 5:aaf8b5f5fda1 8246
whismanoid 17:9397ea3ea7e9 8247 #if USE_DATALOGGER_ActionTable // Datalogger_RunActionTable() supported actions
whismanoid 17:9397ea3ea7e9 8248 //--------------------------------------------------
whismanoid 17:9397ea3ea7e9 8249 // TODO: Datalogger_RunActionTable() between Datalogger_AcquireRow() and Datalogger_PrintRow()
whismanoid 17:9397ea3ea7e9 8250 void Datalogger_RunActionTable()
whismanoid 17:9397ea3ea7e9 8251 {
whismanoid 17:9397ea3ea7e9 8252 if (Datalogger_action_table_enabled == false) {
whismanoid 17:9397ea3ea7e9 8253 return;
whismanoid 17:9397ea3ea7e9 8254 }
whismanoid 17:9397ea3ea7e9 8255 // TODO: verbose Datalogger_RunActionTable() emit a csv column ,"Action"
whismanoid 17:9397ea3ea7e9 8256 // TODO: assert Datalogger_action_table_row_count < ACTION_TABLE_ROW_MAX
whismanoid 17:9397ea3ea7e9 8257 // for Datalogger_action_table[0..Datalogger_action_table_row_count]
whismanoid 17:9397ea3ea7e9 8258 for (int i = 0; i < Datalogger_action_table_row_count; i++)
whismanoid 17:9397ea3ea7e9 8259 {
whismanoid 17:9397ea3ea7e9 8260 // skip if Datalogger_action_table[i].action == action_noop
whismanoid 17:9397ea3ea7e9 8261 if (Datalogger_action_table[i].action == action_noop) {
whismanoid 17:9397ea3ea7e9 8262 continue;
whismanoid 17:9397ea3ea7e9 8263 }
whismanoid 17:9397ea3ea7e9 8264 // TODO: test Datalogger_action_table[i].condition "if="
whismanoid 17:9397ea3ea7e9 8265 // TODO: Could the .condition field also distinguish Platform ADC from SPI ADC?
whismanoid 17:9397ea3ea7e9 8266 // That way we keep both sets of ADC channels in separate lists
whismanoid 17:9397ea3ea7e9 8267 // if=0 -- always
whismanoid 17:9397ea3ea7e9 8268 // if=1,2,3,4,5,6 -- Platform_Voltage[ch] > < == >= <= != threshold
whismanoid 17:9397ea3ea7e9 8269 // if=7,8,9,10,11,12 -- SPI_AIN_Voltage[ch] > < == >= <= != threshold
whismanoid 17:9397ea3ea7e9 8270 // also, are we comparing code or voltage?
whismanoid 17:9397ea3ea7e9 8271 // TODO: selected Datalogger_action_table[i].condition_channel
whismanoid 17:9397ea3ea7e9 8272 // Datalogger could have both platform ADC and external SPI ADC channels
whismanoid 17:9397ea3ea7e9 8273 // if SPI_ADC_DeviceName
whismanoid 17:9397ea3ea7e9 8274 // NUM_DUT_ANALOG_IN_CHANNELS
whismanoid 17:9397ea3ea7e9 8275 // SPI_AIN_Enable_ch[]
whismanoid 17:9397ea3ea7e9 8276 // SPI_AIN_customChannelHeader_ch[]
whismanoid 17:9397ea3ea7e9 8277 // SPI_AIN_Voltage[]
whismanoid 17:9397ea3ea7e9 8278 // if LOG_PLATFORM_AIN
whismanoid 17:9397ea3ea7e9 8279 // NUM_PLATFORM_ANALOG_IN_CHANNELS
whismanoid 17:9397ea3ea7e9 8280 // analogInPin_fullScaleVoltage[]
whismanoid 17:9397ea3ea7e9 8281 // Platform_Enable_ch[]
whismanoid 17:9397ea3ea7e9 8282 // Platform_AIN_customChannelHeader_ch[]
whismanoid 17:9397ea3ea7e9 8283 // Platform_Voltage[]
whismanoid 17:9397ea3ea7e9 8284 // TODO: selected Datalogger_action_table[i].condition_threshold
whismanoid 17:9397ea3ea7e9 8285 switch(Datalogger_action_table[i].condition)
whismanoid 17:9397ea3ea7e9 8286 {
whismanoid 17:9397ea3ea7e9 8287 case condition_always:
whismanoid 17:9397ea3ea7e9 8288 //~ cmdLine.serial().printf(" always");
whismanoid 17:9397ea3ea7e9 8289 break;
whismanoid 17:9397ea3ea7e9 8290 case condition_if_An_gt_threshold:
whismanoid 17:9397ea3ea7e9 8291 //~ cmdLine.serial().printf(" if A%d > %f", Datalogger_action_table[i].condition_channel, Datalogger_action_table[i].condition_threshold);
whismanoid 17:9397ea3ea7e9 8292 #if defined(LOG_PLATFORM_AIN) // Datalog Arduino platform analog inputs
whismanoid 17:9397ea3ea7e9 8293 if (!(Platform_Voltage[Datalogger_action_table[i].condition_channel] > Datalogger_action_table[i].condition_threshold)) {
whismanoid 17:9397ea3ea7e9 8294 continue;
whismanoid 17:9397ea3ea7e9 8295 }
whismanoid 17:9397ea3ea7e9 8296 #endif // defined(LOG_PLATFORM_AIN)
whismanoid 17:9397ea3ea7e9 8297 break;
whismanoid 17:9397ea3ea7e9 8298 case condition_if_An_lt_threshold:
whismanoid 17:9397ea3ea7e9 8299 //~ cmdLine.serial().printf(" if A%d < %f", Datalogger_action_table[i].condition_channel, Datalogger_action_table[i].condition_threshold);
whismanoid 17:9397ea3ea7e9 8300 #if defined(LOG_PLATFORM_AIN) // Datalog Arduino platform analog inputs
whismanoid 17:9397ea3ea7e9 8301 if (!(Platform_Voltage[Datalogger_action_table[i].condition_channel] < Datalogger_action_table[i].condition_threshold)) {
whismanoid 17:9397ea3ea7e9 8302 continue;
whismanoid 17:9397ea3ea7e9 8303 }
whismanoid 17:9397ea3ea7e9 8304 #endif // defined(LOG_PLATFORM_AIN)
whismanoid 17:9397ea3ea7e9 8305 break;
whismanoid 17:9397ea3ea7e9 8306 case condition_if_An_eq_threshold:
whismanoid 17:9397ea3ea7e9 8307 //~ cmdLine.serial().printf(" if A%d == %f", Datalogger_action_table[i].condition_channel, Datalogger_action_table[i].condition_threshold);
whismanoid 17:9397ea3ea7e9 8308 #if defined(LOG_PLATFORM_AIN) // Datalog Arduino platform analog inputs
whismanoid 17:9397ea3ea7e9 8309 if (!(Platform_Voltage[Datalogger_action_table[i].condition_channel] == Datalogger_action_table[i].condition_threshold)) {
whismanoid 17:9397ea3ea7e9 8310 continue;
whismanoid 17:9397ea3ea7e9 8311 }
whismanoid 17:9397ea3ea7e9 8312 #endif // defined(LOG_PLATFORM_AIN)
whismanoid 17:9397ea3ea7e9 8313 break;
whismanoid 17:9397ea3ea7e9 8314 case condition_if_An_ge_threshold:
whismanoid 17:9397ea3ea7e9 8315 //~ cmdLine.serial().printf(" if A%d >= %f", Datalogger_action_table[i].condition_channel, Datalogger_action_table[i].condition_threshold);
whismanoid 17:9397ea3ea7e9 8316 #if defined(LOG_PLATFORM_AIN) // Datalog Arduino platform analog inputs
whismanoid 17:9397ea3ea7e9 8317 if (!(Platform_Voltage[Datalogger_action_table[i].condition_channel] >= Datalogger_action_table[i].condition_threshold)) {
whismanoid 17:9397ea3ea7e9 8318 continue;
whismanoid 17:9397ea3ea7e9 8319 }
whismanoid 17:9397ea3ea7e9 8320 #endif // defined(LOG_PLATFORM_AIN)
whismanoid 17:9397ea3ea7e9 8321 break;
whismanoid 17:9397ea3ea7e9 8322 case condition_if_An_le_threshold:
whismanoid 17:9397ea3ea7e9 8323 //~ cmdLine.serial().printf(" if A%d <= %f", Datalogger_action_table[i].condition_channel, Datalogger_action_table[i].condition_threshold);
whismanoid 17:9397ea3ea7e9 8324 #if defined(LOG_PLATFORM_AIN) // Datalog Arduino platform analog inputs
whismanoid 17:9397ea3ea7e9 8325 if (!(Platform_Voltage[Datalogger_action_table[i].condition_channel] <= Datalogger_action_table[i].condition_threshold)) {
whismanoid 17:9397ea3ea7e9 8326 continue;
whismanoid 17:9397ea3ea7e9 8327 }
whismanoid 17:9397ea3ea7e9 8328 #endif // defined(LOG_PLATFORM_AIN)
whismanoid 17:9397ea3ea7e9 8329 break;
whismanoid 17:9397ea3ea7e9 8330 case condition_if_An_ne_threshold:
whismanoid 17:9397ea3ea7e9 8331 //~ cmdLine.serial().printf(" if A%d != %f", Datalogger_action_table[i].condition_channel, Datalogger_action_table[i].condition_threshold);
whismanoid 17:9397ea3ea7e9 8332 #if defined(LOG_PLATFORM_AIN) // Datalog Arduino platform analog inputs
whismanoid 17:9397ea3ea7e9 8333 #endif // defined(LOG_PLATFORM_AIN)
whismanoid 17:9397ea3ea7e9 8334 if (!(Platform_Voltage[Datalogger_action_table[i].condition_channel] != Datalogger_action_table[i].condition_threshold)) {
whismanoid 17:9397ea3ea7e9 8335 continue;
whismanoid 17:9397ea3ea7e9 8336 }
whismanoid 17:9397ea3ea7e9 8337 break;
whismanoid 17:9397ea3ea7e9 8338 case condition_if_AINn_gt_threshold:
whismanoid 17:9397ea3ea7e9 8339 //~ cmdLine.serial().printf(" if AIN%d > %f", Datalogger_action_table[i].condition_channel, Datalogger_action_table[i].condition_threshold);
whismanoid 17:9397ea3ea7e9 8340 #if defined(SPI_ADC_DeviceName) // SPI connected ADC
whismanoid 17:9397ea3ea7e9 8341 if (!(SPI_AIN_Voltage[Datalogger_action_table[i].condition_channel] > Datalogger_action_table[i].condition_threshold)) {
whismanoid 17:9397ea3ea7e9 8342 continue;
whismanoid 17:9397ea3ea7e9 8343 }
whismanoid 17:9397ea3ea7e9 8344 #endif // defined(SPI_ADC_DeviceName) // SPI connected ADC
whismanoid 17:9397ea3ea7e9 8345 break;
whismanoid 17:9397ea3ea7e9 8346 case condition_if_AINn_lt_threshold:
whismanoid 17:9397ea3ea7e9 8347 //~ cmdLine.serial().printf(" if AIN%d < %f", Datalogger_action_table[i].condition_channel, Datalogger_action_table[i].condition_threshold);
whismanoid 17:9397ea3ea7e9 8348 #if defined(SPI_ADC_DeviceName) // SPI connected ADC
whismanoid 17:9397ea3ea7e9 8349 if (!(SPI_AIN_Voltage[Datalogger_action_table[i].condition_channel] < Datalogger_action_table[i].condition_threshold)) {
whismanoid 17:9397ea3ea7e9 8350 continue;
whismanoid 17:9397ea3ea7e9 8351 }
whismanoid 17:9397ea3ea7e9 8352 #endif // defined(SPI_ADC_DeviceName) // SPI connected ADC
whismanoid 17:9397ea3ea7e9 8353 break;
whismanoid 17:9397ea3ea7e9 8354 case condition_if_AINn_eq_threshold:
whismanoid 17:9397ea3ea7e9 8355 //~ cmdLine.serial().printf(" if AIN%d == %f", Datalogger_action_table[i].condition_channel, Datalogger_action_table[i].condition_threshold);
whismanoid 17:9397ea3ea7e9 8356 #if defined(SPI_ADC_DeviceName) // SPI connected ADC
whismanoid 17:9397ea3ea7e9 8357 if (!(SPI_AIN_Voltage[Datalogger_action_table[i].condition_channel] == Datalogger_action_table[i].condition_threshold)) {
whismanoid 17:9397ea3ea7e9 8358 continue;
whismanoid 17:9397ea3ea7e9 8359 }
whismanoid 17:9397ea3ea7e9 8360 #endif // defined(SPI_ADC_DeviceName) // SPI connected ADC
whismanoid 17:9397ea3ea7e9 8361 break;
whismanoid 17:9397ea3ea7e9 8362 case condition_if_AINn_ge_threshold:
whismanoid 17:9397ea3ea7e9 8363 //~ cmdLine.serial().printf(" if AIN%d >= %f", Datalogger_action_table[i].condition_channel, Datalogger_action_table[i].condition_threshold);
whismanoid 17:9397ea3ea7e9 8364 #if defined(SPI_ADC_DeviceName) // SPI connected ADC
whismanoid 17:9397ea3ea7e9 8365 if (!(SPI_AIN_Voltage[Datalogger_action_table[i].condition_channel] >= Datalogger_action_table[i].condition_threshold)) {
whismanoid 17:9397ea3ea7e9 8366 continue;
whismanoid 17:9397ea3ea7e9 8367 }
whismanoid 17:9397ea3ea7e9 8368 #endif // defined(SPI_ADC_DeviceName) // SPI connected ADC
whismanoid 17:9397ea3ea7e9 8369 break;
whismanoid 17:9397ea3ea7e9 8370 case condition_if_AINn_le_threshold:
whismanoid 17:9397ea3ea7e9 8371 //~ cmdLine.serial().printf(" if AIN%d <= %f", Datalogger_action_table[i].condition_channel, Datalogger_action_table[i].condition_threshold);
whismanoid 17:9397ea3ea7e9 8372 #if defined(SPI_ADC_DeviceName) // SPI connected ADC
whismanoid 17:9397ea3ea7e9 8373 if (!(SPI_AIN_Voltage[Datalogger_action_table[i].condition_channel] <= Datalogger_action_table[i].condition_threshold)) {
whismanoid 17:9397ea3ea7e9 8374 continue;
whismanoid 17:9397ea3ea7e9 8375 }
whismanoid 17:9397ea3ea7e9 8376 #endif // defined(SPI_ADC_DeviceName) // SPI connected ADC
whismanoid 17:9397ea3ea7e9 8377 break;
whismanoid 17:9397ea3ea7e9 8378 case condition_if_AINn_ne_threshold:
whismanoid 17:9397ea3ea7e9 8379 //~ cmdLine.serial().printf(" if AIN%d != %f", Datalogger_action_table[i].condition_channel, Datalogger_action_table[i].condition_threshold);
whismanoid 17:9397ea3ea7e9 8380 #if defined(SPI_ADC_DeviceName) // SPI connected ADC
whismanoid 17:9397ea3ea7e9 8381 if (!(SPI_AIN_Voltage[Datalogger_action_table[i].condition_channel] != Datalogger_action_table[i].condition_threshold)) {
whismanoid 17:9397ea3ea7e9 8382 continue;
whismanoid 17:9397ea3ea7e9 8383 }
whismanoid 17:9397ea3ea7e9 8384 #endif // defined(SPI_ADC_DeviceName) // SPI connected ADC
whismanoid 17:9397ea3ea7e9 8385 break;
whismanoid 17:9397ea3ea7e9 8386 } // switch(Datalogger_action_table[i].condition)
whismanoid 17:9397ea3ea7e9 8387 // selected Datalogger_action_table[i].digitalOutPin
whismanoid 17:9397ea3ea7e9 8388 // perform selected Datalogger_action_table[i].action
whismanoid 17:9397ea3ea7e9 8389 switch(Datalogger_action_table[i].action)
whismanoid 17:9397ea3ea7e9 8390 {
whismanoid 17:9397ea3ea7e9 8391 case action_noop:
whismanoid 17:9397ea3ea7e9 8392 //~ cmdLine.serial().printf("No_Operation");
whismanoid 17:9397ea3ea7e9 8393 break;
whismanoid 17:9397ea3ea7e9 8394 case action_digitalOutLow:
whismanoid 17:9397ea3ea7e9 8395 {
whismanoid 17:9397ea3ea7e9 8396 //~ cmdLine.serial().printf("digitalOutLow");
whismanoid 17:9397ea3ea7e9 8397 //~ cmdLine.serial().printf(" D%d", Datalogger_action_table[i].digitalOutPin);
whismanoid 17:9397ea3ea7e9 8398 // perform action digitalOutLow
whismanoid 17:9397ea3ea7e9 8399 int pinIndex = Datalogger_action_table[i].digitalOutPin;
whismanoid 17:9397ea3ea7e9 8400 #if ARDUINO_STYLE
whismanoid 17:9397ea3ea7e9 8401 pinMode(pinIndex, OUTPUT); // digital pins 0, 1, 2, .. 13, analog input pins A0, A1, .. A5
whismanoid 17:9397ea3ea7e9 8402 digitalWrite(pinIndex, LOW); // digital pins 0, 1, 2, .. 13, analog input pins A0, A1, .. A5
whismanoid 17:9397ea3ea7e9 8403 #else
whismanoid 17:9397ea3ea7e9 8404 DigitalInOut& digitalInOutPin = find_digitalInOutPin(pinIndex);
whismanoid 17:9397ea3ea7e9 8405 digitalInOutPin.output();
whismanoid 17:9397ea3ea7e9 8406 digitalInOutPin.write(0);
whismanoid 17:9397ea3ea7e9 8407 #endif
whismanoid 17:9397ea3ea7e9 8408 }
whismanoid 17:9397ea3ea7e9 8409 break;
whismanoid 17:9397ea3ea7e9 8410 case action_digitalOutHigh:
whismanoid 17:9397ea3ea7e9 8411 {
whismanoid 17:9397ea3ea7e9 8412 //~ cmdLine.serial().printf("digitalOutHigh");
whismanoid 17:9397ea3ea7e9 8413 //~ cmdLine.serial().printf(" D%d", Datalogger_action_table[i].digitalOutPin);
whismanoid 17:9397ea3ea7e9 8414 // perform action digitalOutHigh
whismanoid 17:9397ea3ea7e9 8415 int pinIndex = Datalogger_action_table[i].digitalOutPin;
whismanoid 17:9397ea3ea7e9 8416 #if ARDUINO_STYLE
whismanoid 17:9397ea3ea7e9 8417 pinMode(pinIndex, OUTPUT); // digital pins 0, 1, 2, .. 13, analog input pins A0, A1, .. A5
whismanoid 17:9397ea3ea7e9 8418 digitalWrite(pinIndex, HIGH); // digital pins 0, 1, 2, .. 13, analog input pins A0, A1, .. A5
whismanoid 17:9397ea3ea7e9 8419 #else
whismanoid 17:9397ea3ea7e9 8420 DigitalInOut& digitalInOutPin = find_digitalInOutPin(pinIndex);
whismanoid 17:9397ea3ea7e9 8421 digitalInOutPin.output();
whismanoid 17:9397ea3ea7e9 8422 digitalInOutPin.write(1);
whismanoid 17:9397ea3ea7e9 8423 #endif
whismanoid 17:9397ea3ea7e9 8424 }
whismanoid 17:9397ea3ea7e9 8425 break;
whismanoid 29:6a9edb6e973b 8426 case action_button: // pin = button index 1, 2, 3
whismanoid 29:6a9edb6e973b 8427 {
whismanoid 30:07197a430869 8428 // don't allow onButton1FallingEdge() command processing to halt the datalog
whismanoid 30:07197a430869 8429 Datalogger_Trigger_enum_t saved_Datalogger_Trigger = Datalogger_Trigger;
whismanoid 29:6a9edb6e973b 8430 #if HAS_BUTTON1_DEMO_INTERRUPT
whismanoid 29:6a9edb6e973b 8431 switch (Datalogger_action_table[i].digitalOutPin) // pin = button index 1, 2, 3
whismanoid 29:6a9edb6e973b 8432 {
whismanoid 29:6a9edb6e973b 8433 case 1:
whismanoid 29:6a9edb6e973b 8434 onButton1FallingEdge();
whismanoid 29:6a9edb6e973b 8435 break;
whismanoid 29:6a9edb6e973b 8436 #if HAS_BUTTON2_DEMO_INTERRUPT
whismanoid 29:6a9edb6e973b 8437 case 2:
whismanoid 29:6a9edb6e973b 8438 onButton2FallingEdge();
whismanoid 29:6a9edb6e973b 8439 break;
whismanoid 29:6a9edb6e973b 8440 #endif // HAS_BUTTON2_DEMO_INTERRUPT
whismanoid 29:6a9edb6e973b 8441 #if HAS_BUTTON3_DEMO_INTERRUPT
whismanoid 29:6a9edb6e973b 8442 case 3:
whismanoid 29:6a9edb6e973b 8443 onButton3FallingEdge();
whismanoid 29:6a9edb6e973b 8444 break;
whismanoid 29:6a9edb6e973b 8445 #endif // HAS_BUTTON3_DEMO_INTERRUPT
whismanoid 29:6a9edb6e973b 8446 #if HAS_BUTTON4_DEMO_INTERRUPT
whismanoid 29:6a9edb6e973b 8447 case 4:
whismanoid 29:6a9edb6e973b 8448 onButton4FallingEdge();
whismanoid 29:6a9edb6e973b 8449 break;
whismanoid 29:6a9edb6e973b 8450 #endif // HAS_BUTTON4_DEMO_INTERRUPT
whismanoid 29:6a9edb6e973b 8451 #if HAS_BUTTON5_DEMO_INTERRUPT
whismanoid 29:6a9edb6e973b 8452 case 5:
whismanoid 29:6a9edb6e973b 8453 onButton5FallingEdge();
whismanoid 29:6a9edb6e973b 8454 break;
whismanoid 29:6a9edb6e973b 8455 #endif // HAS_BUTTON5_DEMO_INTERRUPT
whismanoid 29:6a9edb6e973b 8456 #if HAS_BUTTON6_DEMO_INTERRUPT
whismanoid 29:6a9edb6e973b 8457 case 6:
whismanoid 29:6a9edb6e973b 8458 onButton6FallingEdge();
whismanoid 29:6a9edb6e973b 8459 break;
whismanoid 29:6a9edb6e973b 8460 #endif // HAS_BUTTON6_DEMO_INTERRUPT
whismanoid 29:6a9edb6e973b 8461 #if HAS_BUTTON7_DEMO_INTERRUPT
whismanoid 29:6a9edb6e973b 8462 case 7:
whismanoid 29:6a9edb6e973b 8463 onButton7FallingEdge();
whismanoid 29:6a9edb6e973b 8464 break;
whismanoid 29:6a9edb6e973b 8465 #endif // HAS_BUTTON7_DEMO_INTERRUPT
whismanoid 29:6a9edb6e973b 8466 #if HAS_BUTTON8_DEMO_INTERRUPT
whismanoid 29:6a9edb6e973b 8467 case 8:
whismanoid 29:6a9edb6e973b 8468 onButton8FallingEdge();
whismanoid 29:6a9edb6e973b 8469 break;
whismanoid 29:6a9edb6e973b 8470 #endif // HAS_BUTTON8_DEMO_INTERRUPT
whismanoid 29:6a9edb6e973b 8471 #if HAS_BUTTON9_DEMO_INTERRUPT
whismanoid 29:6a9edb6e973b 8472 case 9:
whismanoid 29:6a9edb6e973b 8473 onButton9FallingEdge();
whismanoid 29:6a9edb6e973b 8474 break;
whismanoid 29:6a9edb6e973b 8475 #endif // HAS_BUTTON9_DEMO_INTERRUPT
whismanoid 29:6a9edb6e973b 8476 } // switch (Datalogger_action_table[i].digitalOutPin) // pin = button index 1, 2, 3
whismanoid 29:6a9edb6e973b 8477 #endif // HAS_BUTTON1_DEMO_INTERRUPT
whismanoid 30:07197a430869 8478 // don't allow onButton1FallingEdge() command processing to halt the datalog
whismanoid 30:07197a430869 8479 Datalogger_Trigger = saved_Datalogger_Trigger;
whismanoid 29:6a9edb6e973b 8480 } // case action_button
whismanoid 29:6a9edb6e973b 8481 break;
whismanoid 17:9397ea3ea7e9 8482 case action_trigger_Halt:
whismanoid 17:9397ea3ea7e9 8483 //~ cmdLine.serial().printf("trigger_Halt");
whismanoid 17:9397ea3ea7e9 8484 // perform action trigger_Halt
whismanoid 17:9397ea3ea7e9 8485 Datalogger_Trigger = trigger_Halt;
whismanoid 17:9397ea3ea7e9 8486 //~ Datalogger_Need_PrintHeader = true;
whismanoid 17:9397ea3ea7e9 8487 break;
whismanoid 17:9397ea3ea7e9 8488 case action_trigger_FreeRun:
whismanoid 17:9397ea3ea7e9 8489 //~ cmdLine.serial().printf("trigger_FreeRun");
whismanoid 17:9397ea3ea7e9 8490 // perform action trigger_FreeRun
whismanoid 17:9397ea3ea7e9 8491 Datalogger_Trigger = trigger_FreeRun;
whismanoid 17:9397ea3ea7e9 8492 //~ Datalogger_Need_PrintHeader = true;
whismanoid 17:9397ea3ea7e9 8493 break;
whismanoid 17:9397ea3ea7e9 8494 case action_trigger_Timer:
whismanoid 17:9397ea3ea7e9 8495 //~ cmdLine.serial().printf("trigger_Timer");
whismanoid 17:9397ea3ea7e9 8496 //~ // print configuration for trigger_Timer
whismanoid 17:9397ea3ea7e9 8497 //~ cmdLine.serial().printf("(%d x %dmsec)", g_timer_interval_count, g_timer_interval_msec);
whismanoid 17:9397ea3ea7e9 8498 // perform action trigger_Timer
whismanoid 17:9397ea3ea7e9 8499 Datalogger_Trigger = trigger_Timer;
whismanoid 17:9397ea3ea7e9 8500 //~ Datalogger_Need_PrintHeader = true;
whismanoid 17:9397ea3ea7e9 8501 break;
whismanoid 17:9397ea3ea7e9 8502 case action_trigger_PlatformDigitalInput:
whismanoid 17:9397ea3ea7e9 8503 //~ cmdLine.serial().printf("trigger_PlatformDigitalInput");
whismanoid 17:9397ea3ea7e9 8504 //~ // TODO: print configuration for trigger_PlatformDigitalInput
whismanoid 17:9397ea3ea7e9 8505 //~ cmdLine.serial().printf("(%d)", g_config_PlatformDigitalInput);
whismanoid 17:9397ea3ea7e9 8506 // TODO: perform action action_trigger_PlatformDigitalInput
whismanoid 17:9397ea3ea7e9 8507 Datalogger_Trigger = trigger_PlatformDigitalInput;
whismanoid 17:9397ea3ea7e9 8508 //~ Datalogger_Need_PrintHeader = true;
whismanoid 17:9397ea3ea7e9 8509 break;
whismanoid 17:9397ea3ea7e9 8510 case action_trigger_SPIDeviceRegRead:
whismanoid 17:9397ea3ea7e9 8511 //~ cmdLine.serial().printf("trigger_SPIDeviceRegRead");
whismanoid 17:9397ea3ea7e9 8512 //~ // TODO: print configuration for trigger_SPIDeviceRegRead
whismanoid 17:9397ea3ea7e9 8513 //~ cmdLine.serial().printf("(%d)", g_config_SPIDeviceRegRead);
whismanoid 17:9397ea3ea7e9 8514 // TODO: perform action action_trigger_SPIDeviceRegRead
whismanoid 17:9397ea3ea7e9 8515 Datalogger_Trigger = trigger_SPIDeviceRegRead;
whismanoid 17:9397ea3ea7e9 8516 //~ Datalogger_Need_PrintHeader = true;
whismanoid 17:9397ea3ea7e9 8517 break;
whismanoid 17:9397ea3ea7e9 8518 } // switch(Datalogger_action_table[i].action)
whismanoid 17:9397ea3ea7e9 8519 // consider next row of action table
whismanoid 17:9397ea3ea7e9 8520 } // for ...Datalogger_action_table_row_count
whismanoid 17:9397ea3ea7e9 8521 }
whismanoid 17:9397ea3ea7e9 8522 #endif // USE_DATALOGGER_ActionTable Datalogger_RunActionTable() supported actions
whismanoid 17:9397ea3ea7e9 8523
whismanoid 5:aaf8b5f5fda1 8524 //--------------------------------------------------
whismanoid 8:dffee7509bfb 8525 void Datalogger_PrintRow(CmdLine& cmdLine)
whismanoid 5:aaf8b5f5fda1 8526 {
whismanoid 5:aaf8b5f5fda1 8527 int field_index = 0;
whismanoid 5:aaf8b5f5fda1 8528 #if defined(SPI_ADC_DeviceName) // SPI connected ADC
whismanoid 10:04022a61b527 8529 for (int channel_index = 0; channel_index < NUM_DUT_ANALOG_IN_CHANNELS; channel_index++) {
whismanoid 10:04022a61b527 8530 if (SPI_AIN_Enable_ch[channel_index] == SPI_AIN_Disable) {
whismanoid 5:aaf8b5f5fda1 8531 continue;
whismanoid 5:aaf8b5f5fda1 8532 }
whismanoid 5:aaf8b5f5fda1 8533 // comma between fields
whismanoid 5:aaf8b5f5fda1 8534 if (field_index > 0) {
whismanoid 5:aaf8b5f5fda1 8535 cmdLine.serial().printf(",");
whismanoid 5:aaf8b5f5fda1 8536 }
whismanoid 10:04022a61b527 8537 field_index++;
whismanoid 10:04022a61b527 8538 if (SPI_AIN_Enable_ch[channel_index] == Platform_AIN_Enable_LSB) {
whismanoid 10:04022a61b527 8539 cmdLine.serial().printf("%d", g_MAX11410_device.AINcode[channel_index]);
whismanoid 10:04022a61b527 8540 }
whismanoid 10:04022a61b527 8541 if (SPI_AIN_Enable_ch[channel_index] == Platform_AIN_Enable_Volt) {
whismanoid 10:04022a61b527 8542 // TODO: report Voltage instead of LSB
whismanoid 10:04022a61b527 8543 // Serial.print(SPI_AIN_Voltage[channel_index]);
whismanoid 10:04022a61b527 8544 static char strOutLineBuffer[16];
whismanoid 10:04022a61b527 8545 cmdLine.serial().printf("%6.6f", SPI_AIN_Voltage[channel_index]);
whismanoid 10:04022a61b527 8546 }
whismanoid 5:aaf8b5f5fda1 8547 }
whismanoid 5:aaf8b5f5fda1 8548 #if VERIFY_PART_ID_IN_LOOP
whismanoid 5:aaf8b5f5fda1 8549 // PART_ID field: Device ID Validation
whismanoid 5:aaf8b5f5fda1 8550 if (part_id_readback != part_id_expect) {
whismanoid 5:aaf8b5f5fda1 8551 cmdLine.serial().printf(",\"FAIL\"");
whismanoid 9:45f98573eb6d 8552 need_reinit = true;
whismanoid 5:aaf8b5f5fda1 8553 #if defined(SPI_ADC_DeviceName) // SPI connected ADC
whismanoid 5:aaf8b5f5fda1 8554 g_MAX11410_device.Init();
whismanoid 5:aaf8b5f5fda1 8555 g_MAX11410_device.v_filter = SPI_AIN_Cfg_v_filter_ch[0];
whismanoid 5:aaf8b5f5fda1 8556 g_MAX11410_device.v_ctrl = SPI_AIN_Cfg_v_ctrl_ch[0];
whismanoid 5:aaf8b5f5fda1 8557 g_MAX11410_device.v_pga = SPI_AIN_Cfg_v_pga_ch[0];
whismanoid 5:aaf8b5f5fda1 8558 #endif // defined(SPI_ADC_DeviceName) // SPI connected ADC
whismanoid 5:aaf8b5f5fda1 8559 }
whismanoid 5:aaf8b5f5fda1 8560 else {
whismanoid 5:aaf8b5f5fda1 8561 cmdLine.serial().printf(",\"OK\"");
whismanoid 5:aaf8b5f5fda1 8562 }
whismanoid 5:aaf8b5f5fda1 8563 #endif // VERIFY_PART_ID_IN_LOOP
whismanoid 5:aaf8b5f5fda1 8564 #endif // defined(SPI_ADC_DeviceName) // SPI connected ADC
whismanoid 5:aaf8b5f5fda1 8565 #if defined(LOG_PLATFORM_AIN) // Datalog Arduino platform analog inputs
whismanoid 9:45f98573eb6d 8566 for (int channel_index = 0; channel_index < NUM_PLATFORM_ANALOG_IN_CHANNELS; channel_index++) {
whismanoid 9:45f98573eb6d 8567 if (Platform_Enable_ch[channel_index] == Platform_AIN_Disable) {
whismanoid 9:45f98573eb6d 8568 continue;
whismanoid 9:45f98573eb6d 8569 }
whismanoid 5:aaf8b5f5fda1 8570 // comma between fields
whismanoid 5:aaf8b5f5fda1 8571 if (field_index > 0) {
whismanoid 5:aaf8b5f5fda1 8572 cmdLine.serial().printf(",");
whismanoid 5:aaf8b5f5fda1 8573 }
whismanoid 9:45f98573eb6d 8574 field_index++;
whismanoid 9:45f98573eb6d 8575 if (Platform_Enable_ch[channel_index] == Platform_AIN_Enable_LSB) {
whismanoid 5:aaf8b5f5fda1 8576 #if LOG_PLATFORM_ANALOG_IN_LSB
whismanoid 9:45f98573eb6d 8577 cmdLine.serial().printf("%u", Platform_LSB[channel_index]);
whismanoid 9:45f98573eb6d 8578 #endif
whismanoid 9:45f98573eb6d 8579 }
whismanoid 9:45f98573eb6d 8580 if (Platform_Enable_ch[channel_index] == Platform_AIN_Enable_Volt) {
whismanoid 9:45f98573eb6d 8581 #if LOG_PLATFORM_ANALOG_IN_VOLTS
whismanoid 11:2b8adc78618a 8582 // Datalog Volts omit V suffix from numbers #275
whismanoid 11:2b8adc78618a 8583 // because Excel graphs can't handle numbers that have a suffix.
whismanoid 11:2b8adc78618a 8584 cmdLine.serial().printf("%6.6f", Platform_Voltage[channel_index]);
whismanoid 9:45f98573eb6d 8585 #endif
whismanoid 9:45f98573eb6d 8586 }
whismanoid 5:aaf8b5f5fda1 8587 }
whismanoid 5:aaf8b5f5fda1 8588 #endif // defined(LOG_PLATFORM_AIN)
whismanoid 9:45f98573eb6d 8589 if (need_reinit) {
whismanoid 9:45f98573eb6d 8590 #if defined(SPI_ADC_DeviceName) // SPI connected ADC
whismanoid 9:45f98573eb6d 8591 if (g_MAX11410_device.Init() == 0) {
whismanoid 9:45f98573eb6d 8592 //~ cmdLine.serial().printf(",\"Init() failed\"");
whismanoid 9:45f98573eb6d 8593 } else {
whismanoid 9:45f98573eb6d 8594 //~ cmdLine.serial().printf(",\"Init() success\"");
whismanoid 9:45f98573eb6d 8595 #if USE_CUSTOM_REG_INIT // custom_reg_init_addr[], custom_reg_init_data[], custom_reg_init_count
whismanoid 9:45f98573eb6d 8596 // in Datalogger_PrintRow(), when part_id test fails,
whismanoid 9:45f98573eb6d 8597 // apply list of custom register writes after re-init
whismanoid 9:45f98573eb6d 8598 // custom_reg_init_addr[], custom_reg_init_data[], custom_reg_init_count
whismanoid 9:45f98573eb6d 8599 for (unsigned int index = 0; index < custom_reg_init_count; index++) {
whismanoid 9:45f98573eb6d 8600 uint8_t regAddress = custom_reg_init_addr[index];
whismanoid 9:45f98573eb6d 8601 uint32_t regData = custom_reg_init_data[index];
whismanoid 9:45f98573eb6d 8602 cmdLine.serial().printf("*%s=0x%06.6x", g_MAX11410_device.RegName(regAddress), regData);
whismanoid 9:45f98573eb6d 8603 g_MAX11410_device.RegWrite((MAX11410::MAX11410_CMD_enum_t)regAddress, regData);
whismanoid 9:45f98573eb6d 8604 }
whismanoid 9:45f98573eb6d 8605 #endif // USE_CUSTOM_REG_INIT
whismanoid 9:45f98573eb6d 8606 g_MAX11410_device.v_filter = SPI_AIN_Cfg_v_filter_ch[0];
whismanoid 9:45f98573eb6d 8607 g_MAX11410_device.v_ctrl = SPI_AIN_Cfg_v_ctrl_ch[0];
whismanoid 9:45f98573eb6d 8608 g_MAX11410_device.v_pga = SPI_AIN_Cfg_v_pga_ch[0];
whismanoid 9:45f98573eb6d 8609 need_reinit = false;
whismanoid 9:45f98573eb6d 8610 }
whismanoid 9:45f98573eb6d 8611 #else // defined(SPI_ADC_DeviceName) // SPI connected ADC
whismanoid 9:45f98573eb6d 8612 need_reinit = false;
whismanoid 9:45f98573eb6d 8613 #endif // defined(SPI_ADC_DeviceName) // SPI connected ADC
whismanoid 9:45f98573eb6d 8614 }
whismanoid 30:07197a430869 8615 #if USE_DATALOGGER_REMARK_FIELD
whismanoid 30:07197a430869 8616 // Datalogger_PrintRow() print gstrRemarkText field from recent #remark -- in void Datalogger_PrintRow()
whismanoid 30:07197a430869 8617 cmdLine.serial().printf(",\"%s\"", gstrRemarkText);
whismanoid 30:07197a430869 8618 #endif // USE_DATALOGGER_REMARK_FIELD
whismanoid 5:aaf8b5f5fda1 8619 cmdLine.serial().printf("\r\n");
whismanoid 9:45f98573eb6d 8620 if (need_reinit) {
whismanoid 9:45f98573eb6d 8621 //~ delay(500); // platform_delay_ms 500ms timing delay function
whismanoid 9:45f98573eb6d 8622 }
whismanoid 5:aaf8b5f5fda1 8623 } // void Datalogger_PrintRow()
whismanoid 5:aaf8b5f5fda1 8624
whismanoid 0:cb44e2e9ec4c 8625 // example code main function
whismanoid 0:cb44e2e9ec4c 8626 int main()
whismanoid 0:cb44e2e9ec4c 8627 {
whismanoid 0:cb44e2e9ec4c 8628 // setup: put your setup code here, to run once
whismanoid 4:d9b05924ad4c 8629 #if USE_CMDLINE_MENUS // support CmdLine command menus
whismanoid 4:d9b05924ad4c 8630 // Configure serial ports
whismanoid 4:d9b05924ad4c 8631 cmdLine.clear();
whismanoid 4:d9b05924ad4c 8632 //~ cmdLine.serial().printf("\r\n cmdLine.serial().printf test\r\n");
whismanoid 4:d9b05924ad4c 8633 cmdLine.onEOLcommandParser = main_menu_onEOLcommandParser;
whismanoid 4:d9b05924ad4c 8634 //~ cmdLine.diagnostic_led_EOF = diagnostic_led_EOF;
whismanoid 4:d9b05924ad4c 8635 /// CmdLine::set_immediate_handler(char, functionPointer_void_void_on_immediate_0x21);
whismanoid 4:d9b05924ad4c 8636 //~ cmdLine.on_immediate_0x21 = on_immediate_0x21;
whismanoid 4:d9b05924ad4c 8637 //~ cmdLine.on_immediate_0x7b = on_immediate_0x7b;
whismanoid 4:d9b05924ad4c 8638 //~ cmdLine.on_immediate_0x7d = on_immediate_0x7d;
whismanoid 4:d9b05924ad4c 8639 # if HAS_DAPLINK_SERIAL
whismanoid 10:04022a61b527 8640 #if 0 // HARD CRASH -- USE_AUX_SERIAL_CMD_FORWARDING
whismanoid 10:04022a61b527 8641 // Command forwarding to AUX serial TX/RX cmdLine_AUXserial #257 -- init aux baud rate g_auxSerialCom_baud
whismanoid 10:04022a61b527 8642 // TODO: if g_auxSerialCom_baud is other than the default 9600 baud,
whismanoid 10:04022a61b527 8643 // then the auxiliary serial port baud rate should be updated.
whismanoid 10:04022a61b527 8644 # if HAS_AUX_SERIAL
whismanoid 10:04022a61b527 8645 # else
whismanoid 10:04022a61b527 8646 // Command forwarding to AUX serial TX/RX cmdLine_AUXserial #257 -- init aux baud rate g_auxSerialCom_baud
whismanoid 10:04022a61b527 8647 DAPLINKserial.baud(g_auxSerialCom_baud);
whismanoid 10:04022a61b527 8648 # endif
whismanoid 10:04022a61b527 8649 #endif // USE_AUX_SERIAL_CMD_FORWARDING
whismanoid 4:d9b05924ad4c 8650 cmdLine_DAPLINKserial.clear();
whismanoid 4:d9b05924ad4c 8651 //~ cmdLine_DAPLINKserial.serial().printf("\r\n cmdLine_DAPLINKserial.serial().printf test\r\n");
whismanoid 4:d9b05924ad4c 8652 cmdLine_DAPLINKserial.onEOLcommandParser = main_menu_onEOLcommandParser;
whismanoid 4:d9b05924ad4c 8653 //~ cmdLine_DAPLINKserial.on_immediate_0x21 = on_immediate_0x21;
whismanoid 4:d9b05924ad4c 8654 //~ cmdLine_DAPLINKserial.on_immediate_0x7b = on_immediate_0x7b;
whismanoid 4:d9b05924ad4c 8655 //~ cmdLine_DAPLINKserial.on_immediate_0x7d = on_immediate_0x7d;
whismanoid 4:d9b05924ad4c 8656 # endif
whismanoid 6:f6d16658342b 8657 # if HAS_AUX_SERIAL
whismanoid 6:f6d16658342b 8658 // TX/RX auxiliary UART port cmdLine_AUXserial AUXserial
whismanoid 10:04022a61b527 8659 #if 0 // HARD CRASH -- USE_AUX_SERIAL_CMD_FORWARDING
whismanoid 10:04022a61b527 8660 // Command forwarding to AUX serial TX/RX cmdLine_AUXserial #257 -- init aux baud rate g_auxSerialCom_baud
whismanoid 10:04022a61b527 8661 // TODO: if g_auxSerialCom_baud is other than the default 9600 baud,
whismanoid 10:04022a61b527 8662 // then the auxiliary serial port baud rate should be updated.
whismanoid 10:04022a61b527 8663 AUXserial.baud(g_auxSerialCom_baud);
whismanoid 10:04022a61b527 8664 #endif // USE_AUX_SERIAL_CMD_FORWARDING
whismanoid 6:f6d16658342b 8665 cmdLine_AUXserial.clear();
whismanoid 6:f6d16658342b 8666 //~ cmdLine_AUXserial.serial().printf("\r\n cmdLine_AUXserial.serial().printf test\r\n");
whismanoid 6:f6d16658342b 8667 cmdLine_AUXserial.onEOLcommandParser = main_menu_onEOLcommandParser;
whismanoid 6:f6d16658342b 8668 //~ cmdLine_AUXserial.on_immediate_0x21 = on_immediate_0x21;
whismanoid 6:f6d16658342b 8669 //~ cmdLine_AUXserial.on_immediate_0x7b = on_immediate_0x7b;
whismanoid 6:f6d16658342b 8670 //~ cmdLine_AUXserial.on_immediate_0x7d = on_immediate_0x7d;
whismanoid 6:f6d16658342b 8671 # endif // HAS_AUX_SERIAL
whismanoid 4:d9b05924ad4c 8672 #endif // USE_CMDLINE_MENUS support CmdLine command menus
whismanoid 0:cb44e2e9ec4c 8673
whismanoid 0:cb44e2e9ec4c 8674 // example code: serial port banner message
whismanoid 0:cb44e2e9ec4c 8675 wait(3); // 3000ms timing delay function, platform-specific
whismanoid 3:9055e17e181a 8676 #if defined(SPI_ADC_DeviceName) // SPI connected ADC
whismanoid 3:9055e17e181a 8677 cmdLine.serial().printf("\r\nDataLogger_MAX11410\r\n"); // instead of Hello_MAX11410
whismanoid 3:9055e17e181a 8678 #else // defined(SPI_ADC_DeviceName) // SPI connected ADC
whismanoid 0:cb44e2e9ec4c 8679 cmdLine.serial().printf("\r\nInternal_DataLogger\r\n"); // instead of Hello_MAX11410
whismanoid 3:9055e17e181a 8680 # if HAS_DAPLINK_SERIAL
whismanoid 3:9055e17e181a 8681 cmdLine_DAPLINKserial.serial().printf("\r\nInternal_DataLogger\r\n"); // instead of Hello_MAX11410
whismanoid 3:9055e17e181a 8682 # endif // HAS_DAPLINK_SERIAL
whismanoid 6:f6d16658342b 8683 # if HAS_AUX_SERIAL
whismanoid 6:f6d16658342b 8684 cmdLine_AUXserial.serial().printf("\r\nInternal_DataLogger\r\n"); // instead of Hello_MAX11410
whismanoid 6:f6d16658342b 8685 # endif // HAS_AUX_SERIAL
whismanoid 3:9055e17e181a 8686 #endif // defined(SPI_ADC_DeviceName) // SPI connected ADC
whismanoid 10:04022a61b527 8687
whismanoid 1:747f1602abfc 8688 // CODE GENERATOR: get spi properties from device
whismanoid 3:9055e17e181a 8689 #if defined(SPI_ADC_DeviceName) // SPI connected ADC
whismanoid 3:9055e17e181a 8690 if (g_SPI_SCLK_Hz > g_MAX11410_device.get_spi_frequency())
whismanoid 3:9055e17e181a 8691 { // Device limits SPI SCLK frequency
whismanoid 3:9055e17e181a 8692 g_SPI_SCLK_Hz = g_MAX11410_device.get_spi_frequency();
whismanoid 3:9055e17e181a 8693 cmdLine.serial().printf("\r\nMAX11410 limits SPI SCLK frequency to %ld Hz\r\n", g_SPI_SCLK_Hz);
whismanoid 3:9055e17e181a 8694
whismanoid 3:9055e17e181a 8695 g_MAX11410_device.Init();
whismanoid 3:9055e17e181a 8696 }
whismanoid 3:9055e17e181a 8697 if (g_MAX11410_device.get_spi_frequency() > g_SPI_SCLK_Hz)
whismanoid 3:9055e17e181a 8698 { // Platform limits SPI SCLK frequency
whismanoid 3:9055e17e181a 8699 g_MAX11410_device.spi_frequency(g_SPI_SCLK_Hz);
whismanoid 3:9055e17e181a 8700 cmdLine.serial().printf("\r\nPlatform limits MAX11410 SPI SCLK frequency to %ld Hz\r\n", g_SPI_SCLK_Hz);
whismanoid 3:9055e17e181a 8701
whismanoid 3:9055e17e181a 8702 g_MAX11410_device.Init();
whismanoid 3:9055e17e181a 8703 }
whismanoid 0:cb44e2e9ec4c 8704 // g_SPI_dataMode = g_MAX11410_device.get_spi_dataMode();
whismanoid 3:9055e17e181a 8705 while (g_MAX11410_device.Init() == 0)
whismanoid 3:9055e17e181a 8706 {
whismanoid 3:9055e17e181a 8707 wait(3); // 3000ms timing delay function, platform-specific
whismanoid 3:9055e17e181a 8708 cmdLine.serial().printf("\r\nMAX11410 Init failed; retry...\r\n");
whismanoid 3:9055e17e181a 8709
whismanoid 3:9055e17e181a 8710 }
whismanoid 0:cb44e2e9ec4c 8711
whismanoid 0:cb44e2e9ec4c 8712 // ---------- CUSTOMIZED from MAX11410_Hello after g_MAX11410_device.Init() ----------
whismanoid 3:9055e17e181a 8713 #if defined(SPI_ADC_DeviceName) // SPI connected ADC
whismanoid 3:9055e17e181a 8714 g_MAX11410_device.v_filter = SPI_AIN_Cfg_v_filter_ch[0];
whismanoid 3:9055e17e181a 8715 g_MAX11410_device.v_pga = SPI_AIN_Cfg_v_pga_ch[0];
whismanoid 3:9055e17e181a 8716 g_MAX11410_device.v_ctrl = SPI_AIN_Cfg_v_ctrl_ch[0];
whismanoid 3:9055e17e181a 8717 #endif // defined(SPI_ADC_DeviceName) // SPI connected ADC
whismanoid 0:cb44e2e9ec4c 8718 // ---------- CUSTOMIZED from MAX11410_Hello ----------
whismanoid 3:9055e17e181a 8719 #endif // defined(SPI_ADC_DeviceName) // SPI connected ADC
whismanoid 0:cb44e2e9ec4c 8720 // CODE GENERATOR: example code: has no member function REF
whismanoid 0:cb44e2e9ec4c 8721 // CODE GENERATOR: example code for ADC: repeat-forever convert and print conversion result, one record per line
whismanoid 0:cb44e2e9ec4c 8722 // CODE GENERATOR: ResolutionBits = 24
whismanoid 0:cb44e2e9ec4c 8723 // CODE GENERATOR: FScode = 0xffffff
whismanoid 0:cb44e2e9ec4c 8724 // CODE GENERATOR: NumChannels = 10
whismanoid 0:cb44e2e9ec4c 8725 // CODE GENERATOR: banner before DataLogHelloCppCodeList while(1)
whismanoid 3:9055e17e181a 8726 #if defined(SPI_ADC_DeviceName) // SPI connected ADC
whismanoid 3:9055e17e181a 8727 cmdLine.serial().printf("v_filter = 0x%2.2x\r\n", g_MAX11410_device.v_filter);
whismanoid 0:cb44e2e9ec4c 8728
whismanoid 3:9055e17e181a 8729 cmdLine.serial().printf("v_pga = 0x%2.2x\r\n", g_MAX11410_device.v_pga);
whismanoid 0:cb44e2e9ec4c 8730
whismanoid 3:9055e17e181a 8731 cmdLine.serial().printf("v_ctrl = 0x%2.2x\r\n", g_MAX11410_device.v_ctrl);
whismanoid 3:9055e17e181a 8732
whismanoid 3:9055e17e181a 8733 #endif // defined(SPI_ADC_DeviceName) // SPI connected ADC
whismanoid 0:cb44e2e9ec4c 8734
whismanoid 3:9055e17e181a 8735 // column header banner for csv data columns
whismanoid 8:dffee7509bfb 8736 Datalogger_Need_PrintHeader = true;
whismanoid 10:04022a61b527 8737
whismanoid 12:2dfc1f2009e0 8738 #if USE_LEDS
whismanoid 12:2dfc1f2009e0 8739 #if defined(TARGET_MAX32630)
whismanoid 12:2dfc1f2009e0 8740 led1 = LED_ON; led2 = LED_OFF; led3 = LED_OFF; // diagnostic rbg led RED
whismanoid 12:2dfc1f2009e0 8741 ThisThread::sleep_for(125); // [since mbed-os-5.10] vs Thread::wait(125);
whismanoid 12:2dfc1f2009e0 8742 led1 = LED_OFF; led2 = LED_ON; led3 = LED_OFF; // diagnostic rbg led GREEN
whismanoid 12:2dfc1f2009e0 8743 ThisThread::sleep_for(125); // [since mbed-os-5.10] vs Thread::wait(125);
whismanoid 12:2dfc1f2009e0 8744 led1 = LED_OFF; led2 = LED_OFF; led3 = LED_ON; // diagnostic rbg led BLUE
whismanoid 12:2dfc1f2009e0 8745 ThisThread::sleep_for(125); // [since mbed-os-5.10] vs Thread::wait(125);
whismanoid 12:2dfc1f2009e0 8746 led1 = LED_ON; led2 = LED_ON; led3 = LED_ON; // diagnostic rbg led RED+GREEN+BLUE=WHITE
whismanoid 12:2dfc1f2009e0 8747 ThisThread::sleep_for(125); // [since mbed-os-5.10] vs Thread::wait(125);
whismanoid 12:2dfc1f2009e0 8748 led1 = LED_OFF; led2 = LED_ON; led3 = LED_ON; // diagnostic rbg led GREEN+BLUE=CYAN
whismanoid 12:2dfc1f2009e0 8749 ThisThread::sleep_for(125); // [since mbed-os-5.10] vs Thread::wait(125);
whismanoid 12:2dfc1f2009e0 8750 led1 = LED_ON; led2 = LED_OFF; led3 = LED_ON; // diagnostic rbg led RED+BLUE=MAGENTA
whismanoid 12:2dfc1f2009e0 8751 ThisThread::sleep_for(125); // [since mbed-os-5.10] vs Thread::wait(125);
whismanoid 12:2dfc1f2009e0 8752 led1 = LED_ON; led2 = LED_ON; led3 = LED_OFF; // diagnostic rbg led RED+GREEN=YELLOW
whismanoid 12:2dfc1f2009e0 8753 ThisThread::sleep_for(125); // [since mbed-os-5.10] vs Thread::wait(125);
whismanoid 12:2dfc1f2009e0 8754 led1 = LED_OFF; led2 = LED_OFF; led3 = LED_OFF; // diagnostic rbg led BLACK
whismanoid 12:2dfc1f2009e0 8755 ThisThread::sleep_for(125); // [since mbed-os-5.10] vs Thread::wait(125);
whismanoid 19:5ff09c8e9daf 8756 #elif defined(TARGET_MAX32625MBED) || defined(TARGET_MAX32625PICO) || defined(TARGET_MAX40108DEMOP2U9)
whismanoid 12:2dfc1f2009e0 8757 led1 = LED_ON; led2 = LED_OFF; led3 = LED_OFF; // diagnostic rbg led RED
whismanoid 12:2dfc1f2009e0 8758 ThisThread::sleep_for(125); // [since mbed-os-5.10] vs Thread::wait(125);
whismanoid 12:2dfc1f2009e0 8759 led1 = LED_OFF; led2 = LED_ON; led3 = LED_OFF; // diagnostic rbg led GREEN
whismanoid 12:2dfc1f2009e0 8760 ThisThread::sleep_for(125); // [since mbed-os-5.10] vs Thread::wait(125);
whismanoid 12:2dfc1f2009e0 8761 led1 = LED_OFF; led2 = LED_OFF; led3 = LED_ON; // diagnostic rbg led BLUE
whismanoid 12:2dfc1f2009e0 8762 ThisThread::sleep_for(125); // [since mbed-os-5.10] vs Thread::wait(125);
whismanoid 12:2dfc1f2009e0 8763 led1 = LED_ON; led2 = LED_ON; led3 = LED_ON; // diagnostic rbg led RED+GREEN+BLUE=WHITE
whismanoid 12:2dfc1f2009e0 8764 ThisThread::sleep_for(125); // [since mbed-os-5.10] vs Thread::wait(125);
whismanoid 12:2dfc1f2009e0 8765 led1 = LED_OFF; led2 = LED_ON; led3 = LED_ON; // diagnostic rbg led GREEN+BLUE=CYAN
whismanoid 12:2dfc1f2009e0 8766 ThisThread::sleep_for(125); // [since mbed-os-5.10] vs Thread::wait(125);
whismanoid 12:2dfc1f2009e0 8767 led1 = LED_ON; led2 = LED_OFF; led3 = LED_ON; // diagnostic rbg led RED+BLUE=MAGENTA
whismanoid 12:2dfc1f2009e0 8768 ThisThread::sleep_for(125); // [since mbed-os-5.10] vs Thread::wait(125);
whismanoid 12:2dfc1f2009e0 8769 led1 = LED_ON; led2 = LED_ON; led3 = LED_OFF; // diagnostic rbg led RED+GREEN=YELLOW
whismanoid 12:2dfc1f2009e0 8770 ThisThread::sleep_for(125); // [since mbed-os-5.10] vs Thread::wait(125);
whismanoid 12:2dfc1f2009e0 8771 led1 = LED_OFF; led2 = LED_OFF; led3 = LED_OFF; // diagnostic rbg led BLACK
whismanoid 12:2dfc1f2009e0 8772 ThisThread::sleep_for(125); // [since mbed-os-5.10] vs Thread::wait(125);
whismanoid 12:2dfc1f2009e0 8773 #else // not defined(TARGET_LPC1768 etc.)
whismanoid 12:2dfc1f2009e0 8774 led1 = LED_ON;
whismanoid 12:2dfc1f2009e0 8775 led2 = LED_OFF;
whismanoid 12:2dfc1f2009e0 8776 led3 = LED_OFF;
whismanoid 12:2dfc1f2009e0 8777 led4 = LED_OFF;
whismanoid 12:2dfc1f2009e0 8778 ThisThread::sleep_for(75); // [since mbed-os-5.10] vs Thread::wait(75);
whismanoid 12:2dfc1f2009e0 8779 //led1 = LED_ON;
whismanoid 12:2dfc1f2009e0 8780 led2 = LED_ON;
whismanoid 12:2dfc1f2009e0 8781 ThisThread::sleep_for(75); // [since mbed-os-5.10] vs Thread::wait(75);
whismanoid 12:2dfc1f2009e0 8782 led1 = LED_OFF;
whismanoid 12:2dfc1f2009e0 8783 //led2 = LED_ON;
whismanoid 12:2dfc1f2009e0 8784 led3 = LED_ON;
whismanoid 12:2dfc1f2009e0 8785 ThisThread::sleep_for(75); // [since mbed-os-5.10] vs Thread::wait(75);
whismanoid 12:2dfc1f2009e0 8786 led2 = LED_OFF;
whismanoid 12:2dfc1f2009e0 8787 //led3 = LED_ON;
whismanoid 12:2dfc1f2009e0 8788 led4 = LED_ON;
whismanoid 12:2dfc1f2009e0 8789 ThisThread::sleep_for(75); // [since mbed-os-5.10] vs Thread::wait(75);
whismanoid 12:2dfc1f2009e0 8790 led3 = LED_OFF;
whismanoid 12:2dfc1f2009e0 8791 led4 = LED_ON;
whismanoid 12:2dfc1f2009e0 8792 //
whismanoid 12:2dfc1f2009e0 8793 #endif // target definition
whismanoid 12:2dfc1f2009e0 8794 #endif
whismanoid 12:2dfc1f2009e0 8795
whismanoid 12:2dfc1f2009e0 8796 if (led1.is_connected()) {
whismanoid 12:2dfc1f2009e0 8797 led1 = LED_ON;
whismanoid 12:2dfc1f2009e0 8798 }
whismanoid 12:2dfc1f2009e0 8799 if (led2.is_connected()) {
whismanoid 12:2dfc1f2009e0 8800 led2 = LED_ON;
whismanoid 12:2dfc1f2009e0 8801 }
whismanoid 12:2dfc1f2009e0 8802 if (led3.is_connected()) {
whismanoid 12:2dfc1f2009e0 8803 led3 = LED_ON;
whismanoid 12:2dfc1f2009e0 8804 }
whismanoid 12:2dfc1f2009e0 8805
whismanoid 46:469d0061df5d 8806 #if HAS_FLASH_LOAD_SAVE
whismanoid 46:469d0061df5d 8807 // WIP #312 load values from flash_page_configuration_back_up[] during init
whismanoid 48:18647e0516f2 8808 const uint32_t load_arg = load_arg_startup;
whismanoid 46:469d0061df5d 8809 Load_flash_page_configuration_back_up(cmdLine, load_arg);
whismanoid 46:469d0061df5d 8810 #endif // HAS_FLASH_LOAD_SAVE
whismanoid 46:469d0061df5d 8811
whismanoid 4:d9b05924ad4c 8812 while(1) { // this code repeats forever
whismanoid 4:d9b05924ad4c 8813 // this code repeats forever
whismanoid 4:d9b05924ad4c 8814
whismanoid 21:ac062a97a71d 8815 #if HAS_BUTTON1_DEMO_INTERRUPT_POLLING
whismanoid 21:ac062a97a71d 8816 // avoid runtime error on button1 press [mbed-os-5.11]
whismanoid 21:ac062a97a71d 8817 // instead of using InterruptIn, use DigitalIn and poll in main while(1)
whismanoid 21:ac062a97a71d 8818 # if HAS_BUTTON1_DEMO_INTERRUPT
whismanoid 21:ac062a97a71d 8819 static int button1_value_prev = 1;
whismanoid 21:ac062a97a71d 8820 static int button1_value_now = 1;
whismanoid 21:ac062a97a71d 8821 button1_value_prev = button1_value_now;
whismanoid 21:ac062a97a71d 8822 button1_value_now = button1.read();
whismanoid 21:ac062a97a71d 8823 if ((button1_value_prev - button1_value_now) == 1)
whismanoid 21:ac062a97a71d 8824 {
whismanoid 21:ac062a97a71d 8825 // on button1 falling edge (button1 press)
whismanoid 21:ac062a97a71d 8826 onButton1FallingEdge();
whismanoid 21:ac062a97a71d 8827 }
whismanoid 21:ac062a97a71d 8828 # endif // HAS_BUTTON1_DEMO_INTERRUPT
whismanoid 24:032f3683cb2a 8829 # if HAS_BUTTON2_DEMO_INTERRUPT
whismanoid 24:032f3683cb2a 8830 static int button2_value_prev = 1;
whismanoid 24:032f3683cb2a 8831 static int button2_value_now = 1;
whismanoid 24:032f3683cb2a 8832 button2_value_prev = button2_value_now;
whismanoid 24:032f3683cb2a 8833 button2_value_now = button2.read();
whismanoid 24:032f3683cb2a 8834 if ((button2_value_prev - button2_value_now) == 1)
whismanoid 24:032f3683cb2a 8835 {
whismanoid 24:032f3683cb2a 8836 // on button2 falling edge (button2 press)
whismanoid 24:032f3683cb2a 8837 onButton2FallingEdge();
whismanoid 24:032f3683cb2a 8838 }
whismanoid 24:032f3683cb2a 8839 # endif // HAS_BUTTON2_DEMO_INTERRUPT
whismanoid 24:032f3683cb2a 8840 # if HAS_BUTTON3_DEMO_INTERRUPT
whismanoid 24:032f3683cb2a 8841 static int button3_value_prev = 1;
whismanoid 24:032f3683cb2a 8842 static int button3_value_now = 1;
whismanoid 24:032f3683cb2a 8843 button3_value_prev = button3_value_now;
whismanoid 24:032f3683cb2a 8844 button3_value_now = button3.read();
whismanoid 24:032f3683cb2a 8845 if ((button3_value_prev - button3_value_now) == 1)
whismanoid 24:032f3683cb2a 8846 {
whismanoid 24:032f3683cb2a 8847 // on button3 falling edge (button3 press)
whismanoid 26:13cba69d88eb 8848 onButton3FallingEdge();
whismanoid 24:032f3683cb2a 8849 }
whismanoid 24:032f3683cb2a 8850 # endif // HAS_BUTTON3_DEMO_INTERRUPT
whismanoid 21:ac062a97a71d 8851 #endif // HAS_BUTTON1_DEMO_INTERRUPT_POLLING
whismanoid 4:d9b05924ad4c 8852 #if USE_CMDLINE_MENUS // support CmdLine command menus
whismanoid 4:d9b05924ad4c 8853 // TODO support CmdLine command menus (like on Serial_Tester); help and usual boilerplate
whismanoid 10:04022a61b527 8854 #if USE_AUX_SERIAL_CMD_FORWARDING
whismanoid 10:04022a61b527 8855 // Command forwarding to Auxiliary serial port;
whismanoid 10:04022a61b527 8856 // don't accept commands from Auxiliary serial port
whismanoid 10:04022a61b527 8857 #else // USE_AUX_SERIAL_CMD_FORWARDING
whismanoid 10:04022a61b527 8858 // Accept commands from Auxiliary serial port
whismanoid 6:f6d16658342b 8859 # if HAS_AUX_SERIAL
whismanoid 6:f6d16658342b 8860 if (AUXserial.readable()) {
whismanoid 6:f6d16658342b 8861 cmdLine_AUXserial.append(AUXserial.getc());
whismanoid 6:f6d16658342b 8862 }
whismanoid 6:f6d16658342b 8863 # endif // HAS_AUX_SERIAL
whismanoid 6:f6d16658342b 8864 # if HAS_DAPLINK_SERIAL
whismanoid 6:f6d16658342b 8865 if (DAPLINKserial.readable()) {
whismanoid 6:f6d16658342b 8866 cmdLine_DAPLINKserial.append(DAPLINKserial.getc());
whismanoid 6:f6d16658342b 8867 }
whismanoid 6:f6d16658342b 8868 # endif // HAS_DAPLINK_SERIAL
whismanoid 10:04022a61b527 8869 #endif // USE_AUX_SERIAL_CMD_FORWARDING
whismanoid 4:d9b05924ad4c 8870 if (serial.readable()) {
whismanoid 4:d9b05924ad4c 8871 int c = serial.getc(); // instead of getc() or fgetc()
whismanoid 4:d9b05924ad4c 8872 cmdLine.append(c);
whismanoid 4:d9b05924ad4c 8873 // cmdLine.onEOLcommandParser handler implements menus
whismanoid 4:d9b05924ad4c 8874 } // if (Serial.available())
whismanoid 4:d9b05924ad4c 8875 #endif // USE_CMDLINE_MENUS support CmdLine command menus
whismanoid 4:d9b05924ad4c 8876
whismanoid 4:d9b05924ad4c 8877 #if USE_DATALOGGER_TRIGGER // support Datalog trigger
whismanoid 32:80f3e5eb77d4 8878 // Datalog trigger
whismanoid 4:d9b05924ad4c 8879 if (Datalogger_Trigger == trigger_Halt) {
whismanoid 4:d9b05924ad4c 8880 // halt the datalogger; continue accepting commands
whismanoid 3:9055e17e181a 8881 continue;
whismanoid 3:9055e17e181a 8882 }
whismanoid 4:d9b05924ad4c 8883 if (Datalogger_Trigger == trigger_FreeRun) {
whismanoid 4:d9b05924ad4c 8884 // free run as fast as possible
whismanoid 3:9055e17e181a 8885 }
whismanoid 4:d9b05924ad4c 8886 if (Datalogger_Trigger == trigger_Timer) {
whismanoid 4:d9b05924ad4c 8887 // timer (configure interval)
whismanoid 32:80f3e5eb77d4 8888 // if Datalogger_Trigger == trigger_Timer sleep(g_timer_interval_msec)
whismanoid 39:4d285e961435 8889 //
whismanoid 39:4d285e961435 8890 #if USE_DATALOGGER_SLEEP // support sleep modes in Datalogger_Trigger
whismanoid 45:74bf1fe021e5 8891 // USE_DATALOGGER_SLEEP -- support sleep modes in Datalogger_Trigger
whismanoid 45:74bf1fe021e5 8892 // Sleep Mode vs Deep Sleep Mode
whismanoid 39:4d285e961435 8893 // See documentation https://os.mbed.com/docs/mbed-os/v5.15/apis/power-management-sleep.html
whismanoid 41:13a6a097502c 8894 // ThisThread::sleep_for(uint32_t millisec)
whismanoid 41:13a6a097502c 8895 // sleep_manager_can_deep_sleep() // tests whether deep_sleep is locked or not
whismanoid 41:13a6a097502c 8896 // sleep_manager_lock_deep_sleep() // begin section that prevents deep_sleep
whismanoid 41:13a6a097502c 8897 // sleep_manager_unlock_deep_sleep() // end section that prevents deep_sleep
whismanoid 39:4d285e961435 8898 switch(g_timer_sleepmode)
whismanoid 39:4d285e961435 8899 {
whismanoid 39:4d285e961435 8900 case datalogger_Sleep_LP0_Stop: // LT sleep = 0,
whismanoid 45:74bf1fe021e5 8901 // TODO: LP0 stop mode not supported; how would we wake up?
whismanoid 39:4d285e961435 8902 break;
whismanoid 39:4d285e961435 8903 case datalogger_Sleep_LP1_DeepSleep: // LT sleep = 1,
whismanoid 42:89607d5d4e6d 8904 //
whismanoid 45:74bf1fe021e5 8905 // In file mbed-os\targets\TARGET_Maxim\TARGET_MAX32625\sleep.c
whismanoid 45:74bf1fe021e5 8906 // support function hal_deepsleep() just calls hal_sleep(),
whismanoid 45:74bf1fe021e5 8907 // so using LP1 Deep Sleep requires calling the low-level functions directly.
whismanoid 42:89607d5d4e6d 8908 //
whismanoid 41:13a6a097502c 8909 // sleep_manager_can_deep_sleep(); // tests whether deep_sleep is locked or not
whismanoid 41:13a6a097502c 8910 // mbed_file_handle(STDIN_FILENO)->enable_input(false); // (mbed-os-5.15) platform.stdio-buffered-serial prevents deep sleep
whismanoid 45:74bf1fe021e5 8911 #if MBED_VERSION >= MBED_ENCODE_VERSION(5, 15, 0)
whismanoid 41:13a6a097502c 8912 cmdLine.serial().enable_input(false); // (mbed-os-5.15) platform.stdio-buffered-serial prevents deep sleep
whismanoid 41:13a6a097502c 8913 // serial.enable_input(false); // (mbed-os-5.15) platform.stdio-buffered-serial prevents deep sleep
whismanoid 43:4c4733760d4c 8914
whismanoid 43:4c4733760d4c 8915 // configure RTC and start
whismanoid 43:4c4733760d4c 8916 // RTC_Setup();
whismanoid 43:4c4733760d4c 8917 {
whismanoid 43:4c4733760d4c 8918 rtc_cfg_t RTCconfig;
whismanoid 43:4c4733760d4c 8919 RTCconfig.compareCount[0] = 5;//5 second timer -- override with RTC_SetCompare(0,counts)
whismanoid 43:4c4733760d4c 8920 RTCconfig.compareCount[1] = 7;//7 second timer -- override with RTC_SetCompare(1,counts)
whismanoid 43:4c4733760d4c 8921 RTCconfig.prescaler = RTC_PRESCALE_DIV_2_12; //1Hz clock
whismanoid 43:4c4733760d4c 8922 RTCconfig.prescalerMask = RTC_PRESCALE_DIV_2_12;//used for prescaler compare
whismanoid 43:4c4733760d4c 8923 RTCconfig.snoozeCount = 0;
whismanoid 43:4c4733760d4c 8924 RTCconfig.snoozeMode = RTC_SNOOZE_DISABLE;
whismanoid 43:4c4733760d4c 8925 RTC_Init(&RTCconfig);
whismanoid 43:4c4733760d4c 8926 RTC_Start();
whismanoid 43:4c4733760d4c 8927
whismanoid 43:4c4733760d4c 8928 // Clear existing wake-up config
whismanoid 43:4c4733760d4c 8929 LP_ClearWakeUpConfig();
whismanoid 43:4c4733760d4c 8930
whismanoid 43:4c4733760d4c 8931 // Clear any event flags
whismanoid 43:4c4733760d4c 8932 LP_ClearWakeUpFlags();
whismanoid 43:4c4733760d4c 8933
whismanoid 43:4c4733760d4c 8934 // configure wake-up on RTC compare 1
whismanoid 43:4c4733760d4c 8935 // LP_ConfigRTCWakeUp(unsigned int comp0_en, unsigned int comp1_en, unsigned int prescale_cmp_en, unsigned int rollover_en);
whismanoid 43:4c4733760d4c 8936 LP_ConfigRTCWakeUp(0, 1, 0, 0);
whismanoid 43:4c4733760d4c 8937
whismanoid 44:84402faa8eb9 8938 // wait until UART_Busy indicates no ongoing transactions (both ports)
whismanoid 44:84402faa8eb9 8939 while (Console_PrepForSleep() != E_NO_ERROR);
whismanoid 44:84402faa8eb9 8940
whismanoid 43:4c4733760d4c 8941 // set RTC compare 1 value
whismanoid 43:4c4733760d4c 8942 // cmp = RTC_GetCount() + LP1_WakeTime;
whismanoid 43:4c4733760d4c 8943 uint32_t cmp = RTC_GetCount() + ((g_timer_interval_msec + 500.) / 1000.);
whismanoid 43:4c4733760d4c 8944 // RTC_SetCompare(uint8_t compareIndex, uint32_t counts)
whismanoid 43:4c4733760d4c 8945 RTC_SetCompare(1, cmp);
whismanoid 43:4c4733760d4c 8946
whismanoid 43:4c4733760d4c 8947 RTC_ClearFlags(MXC_F_RTC_FLAGS_COMP1);
whismanoid 43:4c4733760d4c 8948 }
whismanoid 43:4c4733760d4c 8949
whismanoid 43:4c4733760d4c 8950 //global disable interrupt
whismanoid 43:4c4733760d4c 8951 __disable_irq();
whismanoid 43:4c4733760d4c 8952
whismanoid 43:4c4733760d4c 8953 LP_EnterLP1();
whismanoid 43:4c4733760d4c 8954
whismanoid 43:4c4733760d4c 8955 //global enable interrupt
whismanoid 43:4c4733760d4c 8956 __enable_irq();
whismanoid 43:4c4733760d4c 8957
whismanoid 43:4c4733760d4c 8958 // stop waking on RTC
whismanoid 43:4c4733760d4c 8959 // LP_ConfigRTCWakeUp(unsigned int comp0_en, unsigned int comp1_en, unsigned int prescale_cmp_en, unsigned int rollover_en);
whismanoid 43:4c4733760d4c 8960 LP_ConfigRTCWakeUp(0, 0, 0, 0);
whismanoid 43:4c4733760d4c 8961
whismanoid 43:4c4733760d4c 8962 // Clear existing wake-up config
whismanoid 43:4c4733760d4c 8963 LP_ClearWakeUpConfig();
whismanoid 43:4c4733760d4c 8964
whismanoid 43:4c4733760d4c 8965 // Clear any event flags
whismanoid 43:4c4733760d4c 8966 LP_ClearWakeUpFlags();
whismanoid 45:74bf1fe021e5 8967
whismanoid 43:4c4733760d4c 8968 RTC_Stop();
whismanoid 43:4c4733760d4c 8969
whismanoid 41:13a6a097502c 8970 // mbed_file_handle(STDIN_FILENO)->enable_input(true); // (mbed-os-5.15)
whismanoid 41:13a6a097502c 8971 cmdLine.serial().enable_input(true); // (mbed-os-5.15)
whismanoid 41:13a6a097502c 8972 // serial.enable_input(true); // (mbed-os-5.15)
whismanoid 39:4d285e961435 8973 break;
whismanoid 45:74bf1fe021e5 8974 #endif // MBED_VERSION >= MBED_ENCODE_VERSION(5, 15, 0)
whismanoid 39:4d285e961435 8975 case datalogger_Sleep_LP2_Sleep: // LT sleep = 2,
whismanoid 41:13a6a097502c 8976 sleep_manager_lock_deep_sleep(); // begin section that prevents deep_sleep
whismanoid 41:13a6a097502c 8977 ThisThread::sleep_for(g_timer_interval_msec); // wait_ms(g_timer_interval_msec); // sleep during delay?
whismanoid 41:13a6a097502c 8978 sleep_manager_unlock_deep_sleep(); // end section that prevents deep_sleep
whismanoid 39:4d285e961435 8979 break;
whismanoid 39:4d285e961435 8980 case datalogger_Sleep_LP3_Run: // LT sleep = 3,
whismanoid 45:74bf1fe021e5 8981 // TODO: USE_DATALOGGER_SLEEP -- ThisThread::sleep_for(uint32_t millisec) instead of wait_ms(g_timer_interval_msec)
whismanoid 41:13a6a097502c 8982 wait_ms(g_timer_interval_msec);
whismanoid 39:4d285e961435 8983 break;
whismanoid 39:4d285e961435 8984 }
whismanoid 39:4d285e961435 8985 #else // USE_DATALOGGER_SLEEP
whismanoid 17:9397ea3ea7e9 8986 wait_ms(g_timer_interval_msec); // sleep during delay?
whismanoid 39:4d285e961435 8987 #endif // USE_DATALOGGER_SLEEP
whismanoid 39:4d285e961435 8988 //
whismanoid 17:9397ea3ea7e9 8989 if (g_timer_interval_counter > 0) {
whismanoid 17:9397ea3ea7e9 8990 g_timer_interval_counter--;
whismanoid 17:9397ea3ea7e9 8991 continue;
whismanoid 17:9397ea3ea7e9 8992 }
whismanoid 17:9397ea3ea7e9 8993 // if time interval not yet reached, continue (continue accepting commands)
whismanoid 32:80f3e5eb77d4 8994 g_timer_interval_counter = g_timer_interval_count-1;
whismanoid 3:9055e17e181a 8995 }
whismanoid 4:d9b05924ad4c 8996 if (Datalogger_Trigger == trigger_PlatformDigitalInput) {
whismanoid 4:d9b05924ad4c 8997 // platform digital input (configure digital input pin reference)
whismanoid 17:9397ea3ea7e9 8998 // TODO: read selected input pin, test value
whismanoid 17:9397ea3ea7e9 8999 // TODO: if no match, continue (continue accepting commands)
whismanoid 3:9055e17e181a 9000 }
whismanoid 4:d9b05924ad4c 9001 if (Datalogger_Trigger == trigger_SPIDeviceRegRead) {
whismanoid 4:d9b05924ad4c 9002 // SPI device register read (configure regaddr, mask value, match value)
whismanoid 17:9397ea3ea7e9 9003 // TODO: SPI transfer regAddr
whismanoid 17:9397ea3ea7e9 9004 // TODO: apply dataMask, compare with testValue
whismanoid 17:9397ea3ea7e9 9005 // TODO: if no match, continue (continue accepting commands)
whismanoid 4:d9b05924ad4c 9006 }
whismanoid 4:d9b05924ad4c 9007 #endif // USE_DATALOGGER_TRIGGER support Datalog trigger
whismanoid 0:cb44e2e9ec4c 9008
whismanoid 8:dffee7509bfb 9009 // column header banner for csv data columns
whismanoid 8:dffee7509bfb 9010 if (Datalogger_Need_PrintHeader) {
whismanoid 8:dffee7509bfb 9011 if (Datalogger_enable_serial) {
whismanoid 8:dffee7509bfb 9012 Datalogger_PrintHeader(cmdLine);
whismanoid 8:dffee7509bfb 9013 }
whismanoid 8:dffee7509bfb 9014 # if HAS_AUX_SERIAL
whismanoid 8:dffee7509bfb 9015 if (Datalogger_enable_AUXserial) {
whismanoid 8:dffee7509bfb 9016 Datalogger_PrintHeader(cmdLine_AUXserial);
whismanoid 8:dffee7509bfb 9017 }
whismanoid 8:dffee7509bfb 9018 # endif // HAS_AUX_SERIAL
whismanoid 8:dffee7509bfb 9019 # if HAS_DAPLINK_SERIAL
whismanoid 8:dffee7509bfb 9020 if (Datalogger_enable_DAPLINKserial) {
whismanoid 8:dffee7509bfb 9021 Datalogger_PrintHeader(cmdLine_DAPLINKserial);
whismanoid 8:dffee7509bfb 9022 }
whismanoid 8:dffee7509bfb 9023 # endif // HAS_DAPLINK_SERIAL
whismanoid 8:dffee7509bfb 9024 Datalogger_Need_PrintHeader = false;
whismanoid 8:dffee7509bfb 9025 }
whismanoid 5:aaf8b5f5fda1 9026 Datalogger_AcquireRow();
whismanoid 17:9397ea3ea7e9 9027 #if USE_DATALOGGER_ActionTable // Datalogger_RunActionTable() supported actions
whismanoid 17:9397ea3ea7e9 9028 // Datalogger_RunActionTable() between Datalogger_AcquireRow() and Datalogger_PrintRow()
whismanoid 17:9397ea3ea7e9 9029 Datalogger_RunActionTable();
whismanoid 17:9397ea3ea7e9 9030 #endif // USE_DATALOGGER_ActionTable Datalogger_RunActionTable() supported actions
whismanoid 0:cb44e2e9ec4c 9031 // wait(3.0);
whismanoid 0:cb44e2e9ec4c 9032 // CODE GENERATOR: print conversion result
whismanoid 0:cb44e2e9ec4c 9033 // Use Arduino Serial Plotter to view output: Tools | Serial Plotter
whismanoid 8:dffee7509bfb 9034 if (Datalogger_enable_serial) {
whismanoid 8:dffee7509bfb 9035 Datalogger_PrintRow(cmdLine);
whismanoid 8:dffee7509bfb 9036 }
whismanoid 8:dffee7509bfb 9037 # if HAS_AUX_SERIAL
whismanoid 8:dffee7509bfb 9038 if (Datalogger_enable_AUXserial) {
whismanoid 8:dffee7509bfb 9039 Datalogger_PrintRow(cmdLine_AUXserial);
whismanoid 8:dffee7509bfb 9040 }
whismanoid 8:dffee7509bfb 9041 # endif // HAS_AUX_SERIAL
whismanoid 8:dffee7509bfb 9042 # if HAS_DAPLINK_SERIAL
whismanoid 8:dffee7509bfb 9043 if (Datalogger_enable_DAPLINKserial) {
whismanoid 8:dffee7509bfb 9044 Datalogger_PrintRow(cmdLine_DAPLINKserial);
whismanoid 8:dffee7509bfb 9045 }
whismanoid 8:dffee7509bfb 9046 # endif // HAS_DAPLINK_SERIAL
whismanoid 0:cb44e2e9ec4c 9047
whismanoid 0:cb44e2e9ec4c 9048 } // this code repeats forever
whismanoid 0:cb44e2e9ec4c 9049 }
whismanoid 0:cb44e2e9ec4c 9050 //---------- CODE GENERATOR: end DataLogHelloCppCodeList