Test program running on MAX32625MBED. Control through USB Serial commands using a terminal emulator such as teraterm or putty.

Dependencies:   MaximTinyTester MAX11131 CmdLine MAX541 USBDevice

Revision:
28:298907617848
Parent:
11:38b95a59de02
Child:
29:c4975953cb65
--- a/Test_Menu_MAX11131.cpp	Fri Sep 27 21:14:58 2019 -0700
+++ b/Test_Menu_MAX11131.cpp	Tue Apr 13 21:27:18 2021 -0700
@@ -1,5 +1,5 @@
 // /*******************************************************************************
-// * Copyright (C) 2019 Maxim Integrated Products, Inc., All Rights Reserved.
+// * Copyright (C) 2021 Maxim Integrated Products, Inc., All Rights Reserved.
 // *
 // * Permission is hereby granted, free of charge, to any person obtaining a
 // * copy of this software and associated documentation files (the "Software"),
@@ -30,648 +30,1011 @@
 // * ownership rights.
 // *******************************************************************************
 // */
-
+// example code includes
+// standard include for target platform -- Platform_Include_Boilerplate
 #include "mbed.h"
+// Platforms:
+//   - MAX32625MBED
+//      - supports mbed-os-5.11, requires USBDevice library
+//      - add https://developer.mbed.org/teams/MaximIntegrated/code/USBDevice/
+//      - remove max32630fthr library (if present)
+//      - remove MAX32620FTHR library (if present)
+//   - MAX32600MBED
+//      - Please note the last supported version is Mbed OS 6.3.
+//      - remove max32630fthr library (if present)
+//      - remove MAX32620FTHR library (if present)
+//      - Windows 10 note:  Don't connect HDK until you are ready to load new firmware into the board.
+//   - NUCLEO_F446RE
+//      - remove USBDevice library
+//      - remove max32630fthr library (if present)
+//      - remove MAX32620FTHR library (if present)
+//   - NUCLEO_F401RE
+//      - remove USBDevice library
+//      - remove max32630fthr library (if present)
+//      - remove MAX32620FTHR library (if present)
+//   - MAX32630FTHR
+//      - #include "max32630fthr.h"
+//      - add http://developer.mbed.org/teams/MaximIntegrated/code/max32630fthr/
+//      - remove MAX32620FTHR library (if present)
+//   - MAX32620FTHR
+//      - #include "MAX32620FTHR.h"
+//      - remove max32630fthr library (if present)
+//      - add https://os.mbed.com/teams/MaximIntegrated/code/MAX32620FTHR/
+//      - not tested yet
+//   - MAX32625PICO
+//      - #include "max32625pico.h"
+//      - add https://os.mbed.com/users/switches/code/max32625pico/
+//      - remove max32630fthr library (if present)
+//      - remove MAX32620FTHR library (if present)
+//      - not tested yet
+//      - see https://os.mbed.com/users/switches/code/max32625pico/
+//      - see https://os.mbed.com/users/switches/code/PICO_board_demo/
+//      - see https://os.mbed.com/users/switches/code/PICO_USB_I2C_SPI/
+//      - see https://os.mbed.com/users/switches/code/SerialInterface/
+//      - Note: To load the MAX32625PICO firmware, hold the button while
+//        connecting the USB cable, then copy firmware bin file 
+//        to the MAINTENANCE drive.
+//      - see https://os.mbed.com/platforms/MAX32625PICO/
+//      - see https://os.mbed.com/teams/MaximIntegrated/wiki/MAX32625PICO-Firmware-Updates
+//
+// end Platform_Include_Boilerplate
 #include "MAX11131.h"
 #include "CmdLine.h"
+#include "MaximTinyTester.h"
 
-//--------------------------------------------------
-// tolerate AT commands, which may be sent during probe, such as:
-//  AT
-//  AT+CGMI      -- request manufacturer identification AT+CMGI=?
-//  AT+CGMM      -- request manufacturer model
-//  AT%IPSYS?
-//  ATE0         -- echo disable
-//  ATV1         -- verbose result codes OK | ERROR | NO CARRIER
-//  AT+CMEE=1
-//  ATX4
-//  AT&C1
-//  ATE0
-//  AT+CMEE=1
-//  AT+GCAP
-//  ATI
-//  AT+CPIN?
-//  AT+CGMM
-#ifndef IGNORE_AT_COMMANDS
-#define IGNORE_AT_COMMANDS 1
-#endif
+#include "MAX11131.h"
+extern MAX11131 g_MAX11131_device; // defined in main.cpp
+
+
+
+// CODE GENERATOR: MAX11131 needs print_value(CmdLine& cmdLine, int16_t value_u12, int channelId)
+//----------------------------------------
+void print_value(CmdLine& cmdLine, int16_t value_u12, int channelId)
+{
+    int channelPairIndex = channelId / 2;
+    // format: 1 0 0 0 1 UCH0/1 UCH2/3 UCH4/5 UCH6/7 UCH8/9 UCH10/11 UCH12/13 UCH14/15 PDIFF_COM x x
+    // unused variable: int UCHn = (g_MAX11131_device.UNIPOLAR >> (10 - channelPairIndex)) & 0x01;
+    int BCHn = (g_MAX11131_device.BIPOLAR >> (10 - channelPairIndex)) & 0x01;
+    // unused variable: int RANGEn = (g_MAX11131_device.RANGE >> (10 - channelPairIndex)) & 0x01;
+    //
+    cmdLine.serial().printf(" ch=");
+    // TODO1: if CHANID=0 don't print ch=channelId
+    if ((g_MAX11131_device.isExternalClock == 0) || (g_MAX11131_device.chan_id_0_1 == 1))
+    {
+        // Internal clock modes always use channel ID.
+        // External clock modes use channel ID if ADC_MODE_CONTROL.CHAN_ID is 1.
+        cmdLine.serial().printf("%d", channelId);
+    } else {
+        cmdLine.serial().printf("?");
+    }
+    if (BCHn)
+    {
+        cmdLine.serial().printf(" xb=");
+        cmdLine.serial().printf("%d", g_MAX11131_device.TwosComplementValue(value_u12));
+    }
+    else
+    {
+        cmdLine.serial().printf(" xu=");
+        cmdLine.serial().printf("%d", value_u12);
+    }
+    // dtostrf width and precision: 2.5v / 4096 LSB = 0.0006103515625 volts per LSB
+    cmdLine.serial().printf(" = 0x%4.4x = %6.4fV", (value_u12 & 0xFFFF), g_MAX11131_device.VoltageOfCode(value_u12, channelId));
+}
+
+// CODE GENERATOR: MAX11131 needs AINcode_print_value_chanID(CmdLine& cmdLine, int nWords)
+//----------------------------------------
+// read data words
+// @pre RAW_misoData16[index] contains the raw SPI Master-In,Slave-Out data
+// @pre AINcode[NUM_CHANNELS] contains the latest readings in LSBs
+// For internal clock modes, the data format always includes the channel address.
+//     misoData16 = CH[3:0] DATA[11:0]
+void AINcode_print_value_chanID(CmdLine& cmdLine, int nWords)
+{
+    cmdLine.serial().printf("\r\nScanRead_nWords_chanID nWords=");
+    cmdLine.serial().printf("%d\r\n", nWords);
+    for (int index = 0; index < nWords; index++) {
+        //~ int16_t misoData16 = MAX11131_ScanRead();
+        // For internal clock modes, the data format always includes the channel address.
+        //     misoData16 = CH[3:0] DATA[11:0]
+        int16_t value_u12 = (g_MAX11131_device.RAW_misoData16[index] & 0x0FFF);
+        int channelId = ((g_MAX11131_device.RAW_misoData16[index] >> 12) & 0x000F);
+        // diagnostic: print raw MISO data
+        cmdLine.serial().printf("      MAX11131.MISO[");
+        cmdLine.serial().printf("%d", index);
+        cmdLine.serial().printf("]=0x");
+        cmdLine.serial().printf("%0x4.4x", (g_MAX11131_device.RAW_misoData16[index] & 0xFFFF));
+        cmdLine.serial().printf(":");
+        print_value(cmdLine, value_u12, channelId);
+        cmdLine.serial().printf("\r\n");
+    }
+}
 
-extern MAX11131 g_MAX11131_device; // defined in main.cpp
-extern void AINcode_print_value_externalClock(CmdLine& cmdLine, int nWords); // defined in main.cpp
-extern void AINcode_print_value_chanID(CmdLine& cmdLine, int nWords); // defined in main.cpp
-extern void AINcode_print_value_chanID_mean(CmdLine& cmdLine, int nWords); // defined in main.cpp
-extern void MAX11131_print_register_verbose(CmdLine& cmdLine, int16_t registerData); // defined in main.cpp
+// CODE GENERATOR: MAX11131 needs AINcode_print_value_externalClock(CmdLine& cmdLine, int nWords)
+//----------------------------------------
+// read data words
+// @pre RAW_misoData16[index] contains the raw SPI Master-In,Slave-Out data
+// @pre AINcode[NUM_CHANNELS] contains the latest readings in LSBs
+// For external clock modes, the data format returned depends on the CHAN_ID bit.
+//     when CHAN_ID = 0: misoData16 = 0 DATA[11:0] x x x
+//     when CHAN_ID = 1: misoData16 = CH[3:0] DATA[11:0]
+void AINcode_print_value_externalClock(CmdLine& cmdLine, int nWords)
+{
+    // For external clock modes, the data format returned depends on the CHAN_ID bit.
+    //     when CHAN_ID = 0: misoData16 = 0 DATA[11:0] x x x
+    //     when CHAN_ID = 1: misoData16 = CH[3:0] DATA[11:0]
+    // For internal clock modes, the data format always includes the channel address.
+    //     misoData16 = CH[3:0] DATA[11:0]
+    if (g_MAX11131_device.chan_id_0_1 != 0) {
+        AINcode_print_value_chanID(cmdLine, nWords);
+        return;
+    }
+    cmdLine.serial().printf("\r\nScanRead_nWords_externalClock nWords=");
+    cmdLine.serial().printf("%d\r\n", nWords);
+    for (int index = 0; index < nWords; index++) {
+        // int16_t misoData16 = MAX11131_ScanRead();
+        int16_t value_u12 = ((g_MAX11131_device.RAW_misoData16[index] >> 3) & 0x0FFF);
+        int channelId = g_MAX11131_device.channelNumber_0_15;
+        // diagnostic: print raw MISO data
+        cmdLine.serial().printf("      MAX11131.MISO[");
+        cmdLine.serial().printf("%d", index);
+        cmdLine.serial().printf("]=0x");
+        cmdLine.serial().printf("0x%4.4x", (g_MAX11131_device.RAW_misoData16[index] & 0xFFFF));
+        cmdLine.serial().printf(":");
+        print_value(cmdLine, value_u12, channelId);
+        cmdLine.serial().printf("\r\n");
+    }
+}
+
+// CODE GENERATOR: MAX11131 needs AINcode_print_value_chanID_mean(CmdLine& cmdLine, int nWords)
+//----------------------------------------
+// read data words and calculate mean, stddev
+// @pre RAW_misoData16[index] contains the raw SPI Master-In,Slave-Out data
+// @pre AINcode[NUM_CHANNELS] contains the latest readings in LSBs
+void AINcode_print_value_chanID_mean(CmdLine& cmdLine, int nWords)
+{
+  cmdLine.serial().printf("\r\nScanRead_nWords_chanID_mean nWords=");
+  cmdLine.serial().printf("%d\r\n", nWords);
+  double Sx = 0;
+  double Sxx = 0;
+  for (int index = 0; index < nWords; index++) {
+    //~ int16_t misoData16 = MAX11131_ScanRead();
+    // For internal clock modes, the data format always includes the channel address.
+    //     misoData16 = CH[3:0] DATA[11:0]
+    int16_t value_u12 = (g_MAX11131_device.RAW_misoData16[index] & 0x0FFF);
+    int channelId = ((g_MAX11131_device.RAW_misoData16[index] >> 12) & 0x000F);
+    // TODO: sign-extend value_s12 from value_u12
+    //
+    cmdLine.serial().printf("n=");
+    cmdLine.serial().printf("%d", index);
+    print_value(cmdLine, value_u12, channelId);
+    //
+    Sx = Sx + value_u12;
+    Sxx = Sxx + ((double)value_u12 * value_u12);
+    cmdLine.serial().printf(" Sx=%f", Sx);
+    cmdLine.serial().printf(" Sxx=%f", Sxx);
+    cmdLine.serial().printf("\r\n");
+  }
+  double mean = Sx / nWords;
+  cmdLine.serial().printf("  mean=%f", mean);
+  cmdLine.serial().printf("=0x%4.4x", (int)mean);
+  // calculate standard deviation from N, Sx, Sxx
+  if (nWords >= 2)
+  {
+    double variance = (Sxx - ( Sx * Sx / nWords) ) / (nWords - 1);
+    cmdLine.serial().printf("  variance=%f", variance);
+    // stddev = square root of variance
+    double stddev = sqrt(variance);
+    cmdLine.serial().printf("  stddev=%f", stddev);
+  }
+  cmdLine.serial().printf("\r\n");
+}
+
+void MAX11131_menu_help(CmdLine & cmdLine)
+{
+    cmdLine.serial().printf("\r\n ! -- Init");
+    cmdLine.serial().printf("\r\n 0 NumWords=? -- ReadAINcode");
+    cmdLine.serial().printf("\r\n 1 ch=? pm=? id=? -- ScanManual");
+    cmdLine.serial().printf("\r\n 2 ch=? av=? n=? swcnv=? pm=? -- ScanRepeat");
+    cmdLine.serial().printf("\r\n 3 ch=? av=? pm=? swcnv=? -- ScanStandardInternalClock");
+    cmdLine.serial().printf("\r\n 4 ch=? pm=? id=? -- ScanStandardExternalClock");
+    cmdLine.serial().printf("\r\n 5 ch=? av=? pm=? swcnv=? -- ScanUpperInternalClock");
+    cmdLine.serial().printf("\r\n 6 ch=? pm=? id=? -- ScanUpperExternalClock");
+    cmdLine.serial().printf("\r\n 7 enableMask=? av=? pm=? swcnv=? -- ScanCustomInternalClock");
+    cmdLine.serial().printf("\r\n 8 enableMask=? pm=? id=? -- ScanCustomExternalClock");
+    cmdLine.serial().printf("\r\n 9 channelsPattern...=? pm=? id=? -- ScanSampleSetExternalClock");
+    cmdLine.serial().printf("\r\n IB ch=? -- Reconfigure_DifferentialBipolarFSVref");
+    cmdLine.serial().printf("\r\n IR ch=? -- Reconfigure_DifferentialBipolarFS2Vref");
+    cmdLine.serial().printf("\r\n IS ch=? -- Reconfigure_SingleEnded");
+    cmdLine.serial().printf("\r\n IU ch=? -- Reconfigure_DifferentialUnipolar");
+    //
+    cmdLine.serial().printf("\r\n @ -- print MAX11131 configuration");
+
+    //
+        // case 'G'..'Z','g'..'z' are reserved for GPIO commands
+        // case 'A'..'F','a'..'f' may be available if not claimed by bitstream commands
+    cmdLine.serial().printf("\r\n C -- CNVST output PulseLow"); // TODO: ExternFunctionGPIOPinCommand testMenuGPIOItemsDict
+    cmdLine.serial().printf("\r\n E -- EOC input value"); // TODO: ExternFunctionGPIOPinCommand testMenuGPIOItemsDict
+
+    //
+}
 
 bool MAX11131_menu_onEOLcommandParser(CmdLine & cmdLine)
 {
+
+
+                    // parse argument int16_t ADC_CONFIGURATION
+        int16_t ADC_CONFIGURATION = g_MAX11131_device.ADC_CONFIGURATION; // default to global property value
+        if (cmdLine.parse_int16_dec("ADC_CONFIGURATION", ADC_CONFIGURATION))
+        {
+            g_MAX11131_device.ADC_CONFIGURATION = ADC_CONFIGURATION; // update global property value
+        }
+
+                    // parse argument int16_t ADC_MODE_CONTROL
+        int16_t ADC_MODE_CONTROL = g_MAX11131_device.ADC_MODE_CONTROL; // default to global property value
+        if (cmdLine.parse_int16_dec("ADC_MODE_CONTROL", ADC_MODE_CONTROL))
+        {
+            g_MAX11131_device.ADC_MODE_CONTROL = ADC_MODE_CONTROL; // update global property value
+        }
+
+                    // parse argument int16_t BIPOLAR
+        int16_t BIPOLAR = g_MAX11131_device.BIPOLAR; // default to global property value
+        if (cmdLine.parse_int16_dec("BIPOLAR", BIPOLAR))
+        {
+            g_MAX11131_device.BIPOLAR = BIPOLAR; // update global property value
+        }
+
+                    // parse argument int16_t CSCAN0
+        int16_t CSCAN0 = g_MAX11131_device.CSCAN0; // default to global property value
+        if (cmdLine.parse_int16_dec("CSCAN0", CSCAN0))
+        {
+            g_MAX11131_device.CSCAN0 = CSCAN0; // update global property value
+        }
+
+                    // parse argument int16_t CSCAN1
+        int16_t CSCAN1 = g_MAX11131_device.CSCAN1; // default to global property value
+        if (cmdLine.parse_int16_dec("CSCAN1", CSCAN1))
+        {
+            g_MAX11131_device.CSCAN1 = CSCAN1; // update global property value
+        }
+
+                    // parse argument uint16_t NumWords
+        uint16_t NumWords = g_MAX11131_device.NumWords; // default to global property value
+        if (cmdLine.parse_uint16_dec("NumWords", NumWords))
+        {
+            g_MAX11131_device.NumWords = NumWords; // update global property value
+        }
+
+                    // parse argument uint8_t PowerManagement_0_2
+        uint8_t PowerManagement_0_2 = g_MAX11131_device.PowerManagement_0_2; // default to global property value
+        if (cmdLine.parse_uint8_dec("PowerManagement_0_2", PowerManagement_0_2))
+        {
+            g_MAX11131_device.PowerManagement_0_2 = PowerManagement_0_2; // update global property value
+        }
+                    // "pm" is an alias for argument "PowerManagement_0_2"
+        if (cmdLine.parse_uint8_dec("pm", PowerManagement_0_2))
+        {
+            g_MAX11131_device.PowerManagement_0_2 = PowerManagement_0_2; // update global property value
+        }
+
+                    // parse argument int16_t RANGE
+        int16_t RANGE = g_MAX11131_device.RANGE; // default to global property value
+        if (cmdLine.parse_int16_dec("RANGE", RANGE))
+        {
+            g_MAX11131_device.RANGE = RANGE; // update global property value
+        }
+
+                    // parse argument int16_t SAMPLESET
+        int16_t SAMPLESET = g_MAX11131_device.SAMPLESET; // default to global property value
+        if (cmdLine.parse_int16_dec("SAMPLESET", SAMPLESET))
+        {
+            g_MAX11131_device.SAMPLESET = SAMPLESET; // update global property value
+        }
+
+                    // parse argument uint8_t SPI_MOSI_Semantic
+        uint8_t SPI_MOSI_Semantic = g_MAX11131_device.SPI_MOSI_Semantic; // default to global property value
+        if (cmdLine.parse_uint8_dec("SPI_MOSI_Semantic", SPI_MOSI_Semantic))
+        {
+            g_MAX11131_device.SPI_MOSI_Semantic = SPI_MOSI_Semantic; // update global property value
+        }
+
+                    // parse argument uint8_t ScanMode
+        uint8_t ScanMode = g_MAX11131_device.ScanMode; // default to global property value
+        if (cmdLine.parse_uint8_dec("ScanMode", ScanMode))
+        {
+            g_MAX11131_device.ScanMode = ScanMode; // update global property value
+        }
+
+                    // parse argument int16_t UNIPOLAR
+        int16_t UNIPOLAR = g_MAX11131_device.UNIPOLAR; // default to global property value
+        if (cmdLine.parse_int16_dec("UNIPOLAR", UNIPOLAR))
+        {
+            g_MAX11131_device.UNIPOLAR = UNIPOLAR; // update global property value
+        }
+
+                    // parse argument double VRef
+        double VRef = g_MAX11131_device.VRef; // default to global property value
+        if (cmdLine.parse_double("VRef", VRef))
+        {
+            g_MAX11131_device.VRef = VRef; // update global property value
+        }
+
+                    // parse argument uint8_t average_0_4_8_16_32
+        uint8_t average_0_4_8_16_32 = g_MAX11131_device.average_0_4_8_16_32; // default to global property value
+        if (cmdLine.parse_uint8_dec("average_0_4_8_16_32", average_0_4_8_16_32))
+        {
+            g_MAX11131_device.average_0_4_8_16_32 = average_0_4_8_16_32; // update global property value
+        }
+                    // "av" is an alias for argument "average_0_4_8_16_32"
+        if (cmdLine.parse_uint8_dec("av", average_0_4_8_16_32))
+        {
+            g_MAX11131_device.average_0_4_8_16_32 = average_0_4_8_16_32; // update global property value
+        }
+
+                    // parse argument uint8_t chan_id_0_1
+        uint8_t chan_id_0_1 = g_MAX11131_device.chan_id_0_1; // default to global property value
+        if (cmdLine.parse_uint8_dec("chan_id_0_1", chan_id_0_1))
+        {
+            g_MAX11131_device.chan_id_0_1 = chan_id_0_1; // update global property value
+        }
+                    // "id" is an alias for argument "chan_id_0_1"
+        if (cmdLine.parse_uint8_dec("id", chan_id_0_1))
+        {
+            g_MAX11131_device.chan_id_0_1 = chan_id_0_1; // update global property value
+        }
+
+                    // parse argument uint8_t channelNumber_0_15
+        uint8_t channelNumber_0_15 = g_MAX11131_device.channelNumber_0_15; // default to global property value
+        if (cmdLine.parse_uint8_dec("channelNumber_0_15", channelNumber_0_15))
+        {
+            g_MAX11131_device.channelNumber_0_15 = channelNumber_0_15; // update global property value
+        }
+                    // "ch" is an alias for argument "channelNumber_0_15"
+        if (cmdLine.parse_uint8_dec("ch", channelNumber_0_15))
+        {
+            g_MAX11131_device.channelNumber_0_15 = channelNumber_0_15; // update global property value
+        }
+
+                    // parse argument int16_t enabledChannelsMask
+        int16_t enabledChannelsMask = g_MAX11131_device.enabledChannelsMask; // default to global property value
+        if (cmdLine.parse_int16_dec("enabledChannelsMask", enabledChannelsMask))
+        {
+            g_MAX11131_device.enabledChannelsMask = enabledChannelsMask; // update global property value
+        }
+                    // "enableMask" is an alias for argument "enabledChannelsMask"
+        if (cmdLine.parse_int16_dec("enableMask", enabledChannelsMask))
+        {
+            g_MAX11131_device.enabledChannelsMask = enabledChannelsMask; // update global property value
+        }
+
+                    // parse argument uint8_t enabledChannelsPatternLength_1_256
+        uint8_t enabledChannelsPatternLength_1_256 = g_MAX11131_device.enabledChannelsPatternLength_1_256; // default to global property value
+        if (cmdLine.parse_uint8_dec("enabledChannelsPatternLength_1_256", enabledChannelsPatternLength_1_256))
+        {
+            g_MAX11131_device.enabledChannelsPatternLength_1_256 = enabledChannelsPatternLength_1_256; // update global property value
+        }
+
+                    // parse argument uint8_t isExternalClock
+        uint8_t isExternalClock = g_MAX11131_device.isExternalClock; // default to global property value
+        if (cmdLine.parse_uint8_dec("isExternalClock", isExternalClock))
+        {
+            g_MAX11131_device.isExternalClock = isExternalClock; // update global property value
+        }
+
+                    // parse argument uint8_t nscan_4_8_12_16
+        uint8_t nscan_4_8_12_16 = g_MAX11131_device.nscan_4_8_12_16; // default to global property value
+        if (cmdLine.parse_uint8_dec("nscan_4_8_12_16", nscan_4_8_12_16))
+        {
+            g_MAX11131_device.nscan_4_8_12_16 = nscan_4_8_12_16; // update global property value
+        }
+                    // "n" is an alias for argument "nscan_4_8_12_16"
+        if (cmdLine.parse_uint8_dec("n", nscan_4_8_12_16))
+        {
+            g_MAX11131_device.nscan_4_8_12_16 = nscan_4_8_12_16; // update global property value
+        }
+
+                    // parse argument uint8_t swcnv_0_1
+        uint8_t swcnv_0_1 = g_MAX11131_device.swcnv_0_1; // default to global property value
+        if (cmdLine.parse_uint8_dec("swcnv_0_1", swcnv_0_1))
+        {
+            g_MAX11131_device.swcnv_0_1 = swcnv_0_1; // update global property value
+        }
+                    // "swcnv" is an alias for argument "swcnv_0_1"
+        if (cmdLine.parse_uint8_dec("swcnv", swcnv_0_1))
+        {
+            g_MAX11131_device.swcnv_0_1 = swcnv_0_1; // update global property value
+        }
+
     switch (cmdLine[0])
     {
+        case '@':
+        {
+                    cmdLine.serial().printf("ADC_MODE_CONTROL = ");
+                    cmdLine.serial().printf("%d = 0x%4.4x\r\n", g_MAX11131_device.ADC_MODE_CONTROL, g_MAX11131_device.ADC_MODE_CONTROL);
+                    cmdLine.serial().printf("ADC_CONFIGURATION = ");
+                    cmdLine.serial().printf("%d = 0x%4.4x\r\n", g_MAX11131_device.ADC_CONFIGURATION, g_MAX11131_device.ADC_CONFIGURATION);
+                    cmdLine.serial().printf("UNIPOLAR = ");
+                    cmdLine.serial().printf("%d = 0x%4.4x\r\n", g_MAX11131_device.UNIPOLAR, g_MAX11131_device.UNIPOLAR);
+                    cmdLine.serial().printf("BIPOLAR = ");
+                    cmdLine.serial().printf("%d = 0x%4.4x\r\n", g_MAX11131_device.BIPOLAR, g_MAX11131_device.BIPOLAR);
+                    cmdLine.serial().printf("RANGE = ");
+                    cmdLine.serial().printf("%d = 0x%4.4x\r\n", g_MAX11131_device.RANGE, g_MAX11131_device.RANGE);
+                    cmdLine.serial().printf("CSCAN0 = ");
+                    cmdLine.serial().printf("%d = 0x%4.4x\r\n", g_MAX11131_device.CSCAN0, g_MAX11131_device.CSCAN0);
+                    cmdLine.serial().printf("CSCAN1 = ");
+                    cmdLine.serial().printf("%d = 0x%4.4x\r\n", g_MAX11131_device.CSCAN1, g_MAX11131_device.CSCAN1);
+                    cmdLine.serial().printf("SAMPLESET = ");
+                    cmdLine.serial().printf("%d = 0x%4.4x\r\n", g_MAX11131_device.SAMPLESET, g_MAX11131_device.SAMPLESET);
+                    cmdLine.serial().printf("enabledChannelsPatternLength_1_256 = ");
+                    cmdLine.serial().printf("%d = 0x%2.2x\r\n", g_MAX11131_device.enabledChannelsPatternLength_1_256, g_MAX11131_device.enabledChannelsPatternLength_1_256);
+                for(int index = 0; (index < g_MAX11131_device.enabledChannelsPatternLength_1_256) && (index < 16); index++) {
+                    cmdLine.serial().printf("enabledChannelsPattern[%d] = ", index);
+                    cmdLine.serial().printf("%d = 0x%2.2x\r\n", g_MAX11131_device.enabledChannelsPattern[index], g_MAX11131_device.enabledChannelsPattern[index]);
+                }
+                    cmdLine.serial().printf("SPI_MOSI_Semantic = ");
+                    cmdLine.serial().printf("%d = 0x%2.2x\r\n", g_MAX11131_device.SPI_MOSI_Semantic, g_MAX11131_device.SPI_MOSI_Semantic);
+                    cmdLine.serial().printf("NumWords = ");
+                    cmdLine.serial().printf("%d = 0x%4.4x\r\n", g_MAX11131_device.NumWords, g_MAX11131_device.NumWords);
+                    cmdLine.serial().printf("isExternalClock = ");
+                    cmdLine.serial().printf("%d = 0x%2.2x\r\n", g_MAX11131_device.isExternalClock, g_MAX11131_device.isExternalClock);
+                    cmdLine.serial().printf("ScanMode = ");
+                    cmdLine.serial().printf("%d = 0x%2.2x\r\n", g_MAX11131_device.ScanMode, g_MAX11131_device.ScanMode);
+                    cmdLine.serial().printf("channelNumber_0_15 = ");
+                    cmdLine.serial().printf("%d = 0x%2.2x\r\n", g_MAX11131_device.channelNumber_0_15, g_MAX11131_device.channelNumber_0_15);
+                    cmdLine.serial().printf("PowerManagement_0_2 = ");
+                    cmdLine.serial().printf("%d = 0x%2.2x\r\n", g_MAX11131_device.PowerManagement_0_2, g_MAX11131_device.PowerManagement_0_2);
+                    cmdLine.serial().printf("chan_id_0_1 = ");
+                    cmdLine.serial().printf("%d = 0x%2.2x\r\n", g_MAX11131_device.chan_id_0_1, g_MAX11131_device.chan_id_0_1);
+                    cmdLine.serial().printf("average_0_4_8_16_32 = ");
+                    cmdLine.serial().printf("%d = 0x%2.2x\r\n", g_MAX11131_device.average_0_4_8_16_32, g_MAX11131_device.average_0_4_8_16_32);
+                    cmdLine.serial().printf("nscan_4_8_12_16 = ");
+                    cmdLine.serial().printf("%d = 0x%2.2x\r\n", g_MAX11131_device.nscan_4_8_12_16, g_MAX11131_device.nscan_4_8_12_16);
+                    cmdLine.serial().printf("swcnv_0_1 = ");
+                    cmdLine.serial().printf("%d = 0x%2.2x\r\n", g_MAX11131_device.swcnv_0_1, g_MAX11131_device.swcnv_0_1);
+                    cmdLine.serial().printf("enabledChannelsMask = ");
+                    cmdLine.serial().printf("%d = 0x%4.4x\r\n", g_MAX11131_device.enabledChannelsMask, g_MAX11131_device.enabledChannelsMask);
+                for(int index = 0; (index < 16) && (index < 16); index++) {
+                    cmdLine.serial().printf("AINcode[%d] = ", index);
+                    cmdLine.serial().printf("%d = 0x%4.4x\r\n", g_MAX11131_device.AINcode[index], g_MAX11131_device.AINcode[index]);
+                }
+                for(int index = 0; (index < 256) && (index < 16); index++) {
+                    cmdLine.serial().printf("RAW_misoData16[%d] = ", index);
+                    cmdLine.serial().printf("%d = 0x%4.4x\r\n", g_MAX11131_device.RAW_misoData16[index], g_MAX11131_device.RAW_misoData16[index]);
+                }
+                    cmdLine.serial().printf("VRef = ");
+                    cmdLine.serial().printf("%1.6f\r\n", g_MAX11131_device.VRef);
+                    return true; // command handled by MAX11131
+            break;
+        }
+        // case 'G'..'Z','g'..'z' are reserved for GPIO commands
+        // case 'A'..'F','a'..'f' may be available if not claimed by bitstream commands
+        case 'C':
+        {
+                // TODO output PulseLow
+                g_MAX11131_device.CNVSToutputPulseLow();
+                    return true; // command handled by MAX11131
+            break;
+        }
+        case 'E':
+        {
+                // TODO capture and print input Value
+                cmdLine.serial().printf("%d", g_MAX11131_device.EOCinputValue());
+                    return true; // command handled by MAX11131
+            break;
+        }
+        // case '0'..'9','A'..'F','a'..'f' letters are reserved for bitstream commands
+        case '!':
+        {
+                    // test menu command '!' handler:
+                    // helpString='! -- Init'
+                    // CMD_='None'
+                    // CommandName='Init'
+                    // CommandParamIn='void'
+                    // CommandReturnType='void'
+                    // @Pre='        // @pre one of the MAX11311_Scan functions was called, setting g_MAX11131_device.NumWords'
+                    // @Pre='    // @pre one of the MAX11311_Scan functions was called, setting g_MAX11131_device.NumWords'
+                    // @Pre='    // @pre one of the MAX11311_Scan functions was called, setting g_MAX11131_device.NumWords'
+                    // @Param[in]=''
+                    // @Param[out]=''
+                    // @Post='    // @post RAW_misoData16[index] contains the raw SPI Master-In,Slave-Out data'
+                    // @Post='    // @post AINcode[NUM_CHANNELS] contains the latest readings in LSBs'
+                    // displayPost=''
+                    // @Return=''
+                    // @Test='@test tinyTester.blink_time_msec = 75 // default 75 resume hardware self test'
+                    // @Test='@test tinyTester.print("1.0: Test Scan_0100_StandardExt -- verify SPI (VDD, GND, SCLK, MOSI, MISO, CS)")'
+                    // @Test='@test SPIoutputCS(0)'
+                    // @Test='@test SPIwrite16bits(0x8000)'
+                    // @Test='@test SPIoutputCS(1)'
+                    cmdLine.serial().printf("Init");
+                    // call function Init
+                    g_MAX11131_device.Init();
+                    return true; // command handled by MAX11131
+        } // end case '!'
+        break;
         case '0':
         {
-            // recommended for hex command codes 00..0F
-            // VERIFY: console menu command 0 int16_t MAX11131_ScanRead(void);
-            // TODO: cmdLine.serial().printf("\r\n 0 n=?                                  -- MAX11131_ScanRead");
-            if (cmdLine.parse_uint16_dec("n", g_MAX11131_device.NumWords))
-            {
-            }
-            cmdLine.serial().printf("ScanRead NumWords=%d", g_MAX11131_device.NumWords);
-            if (g_MAX11131_device.isExternalClock)
-            {
-                cmdLine.serial().printf(" External Clock");
-                //
-                // Read raw ADC codes from device into AINcode[] and RAW_misoData16[]
-                // @pre one of the MAX11311_Scan functions was called, setting g_MAX11131_device.NumWords
-                g_MAX11131_device.ReadAINcode();
-                // @post RAW_misoData16[index] contains the raw SPI Master-In,Slave-Out data
-                // @post AINcode[NUM_CHANNELS] contains the latest readings in LSBs
-                //
-                AINcode_print_value_externalClock(cmdLine, g_MAX11131_device.NumWords);
-            }
-            else
-            {
-                cmdLine.serial().printf(" Internal Clock");
-                //
-                // Read raw ADC codes from device into AINcode[] and RAW_misoData16[]
-                // @pre one of the MAX11311_Scan functions was called, setting g_MAX11131_device.NumWords
-                g_MAX11131_device.ReadAINcode();
-                // @post RAW_misoData16[index] contains the raw SPI Master-In,Slave-Out data
-                // @post AINcode[NUM_CHANNELS] contains the latest readings in LSBs
-                //
-                AINcode_print_value_chanID(cmdLine, g_MAX11131_device.NumWords);
-            }
-            return true; // command was handled by MAX11131
-        }
+                    // test menu command '0' handler:
+                    // helpString='0 NumWords=? -- ReadAINcode'
+                    // CMD_='SCAN_0000_NOP'
+                    // CommandName='ReadAINcode'
+                    // CommandParamIn='void'
+                    // CommandReturnType='void'
+                    // @Pre='@pre one of the Scan functions was called, setting g_MAX11131_device.NumWords'
+                    // @Param[in]='@param[in] g_MAX11131_device.NumWords: number of words to be read from the FIFO'
+                    // @Param[out]=''
+                    // @Post='@post g_MAX11131_device.RAW_misoData16[index] contains the raw SPI Master-In,Slave-Out data'
+                    // @Post='@post g_MAX11131_device.AINcode[NUM_CHANNELS] contains the latest readings in LSBs'
+                    // @Return=''
+                    // exception MAX11131 Menu item '0' ReadAINcode logic flow -- omit ReadAINcode call here, will be handled in postprocessing
+                    cmdLine.serial().printf("ReadAINcode");
+                    //
+                    // CODE GENERATOR: MAX11131 ReadAINCode and print data
+                    if (g_MAX11131_device.isExternalClock)
+                    {
+                        cmdLine.serial().printf(" External Clock");
+                        //
+                        // Read raw ADC codes from device into AINcode[] and RAW_misoData16[]
+                        // @pre one of the MAX11311_Scan functions was called, setting g_MAX11131_device.NumWords
+                        g_MAX11131_device.ReadAINcode();
+                        // @post RAW_misoData16[index] contains the raw SPI Master-In,Slave-Out data
+                        // @post AINcode[NUM_CHANNELS] contains the latest readings in LSBs
+                        //
+                        AINcode_print_value_externalClock(cmdLine, g_MAX11131_device.NumWords);
+                    }
+                    else
+                    {
+                        cmdLine.serial().printf(" Internal Clock");
+                        //
+                        // Read raw ADC codes from device into AINcode[] and RAW_misoData16[]
+                        // @pre one of the MAX11311_Scan functions was called, setting g_MAX11131_device.NumWords
+                        g_MAX11131_device.ReadAINcode();
+                        // @post RAW_misoData16[index] contains the raw SPI Master-In,Slave-Out data
+                        // @post AINcode[NUM_CHANNELS] contains the latest readings in LSBs
+                        //
+                        AINcode_print_value_chanID(cmdLine, g_MAX11131_device.NumWords);
+                    }
+                    return true; // command handled by MAX11131
+        } // end case '0'
         break;
         case '1':
         {
-            // recommended for hex command codes 10..1F
-            // VERIFY: console menu command 1 MAX11131_ScanManual(int channelNumber_0_15, int PowerManagement_0_2, int chan_id_0_1);
-            // TODO: cmdLine.serial().printf("\r\n 1 ch=? pm=? id=?                       -- MAX11131_ScanManual");
-            if (cmdLine.parse_byte_dec("ch", g_MAX11131_device.channelNumber_0_15))
-            {
-            }
-            if (cmdLine.parse_byte_dec("pm", g_MAX11131_device.PowerManagement_0_2))
-            {
-            }
-            if (cmdLine.parse_byte_dec("id", g_MAX11131_device.chan_id_0_1))
-            {
-            }
-            cmdLine.serial().printf("ScanManual ch=%d pm=%d id=%d\r\n",
-                                    g_MAX11131_device.channelNumber_0_15,
-                                    g_MAX11131_device.PowerManagement_0_2,
-                                    g_MAX11131_device.chan_id_0_1);
-            // VERIFY: replace argument with driver global; g_MAX11131_device.PowerManagement_0_2 replaces PowerManagement_0_2
-            // VERIFY: replace argument with driver global; g_MAX11131_device.chan_id_0_1 replaces chan_id_0_1
-            // VERIFY: replace argument with driver global; g_MAX11131_device.channelNumber_0_15 replaces channelNumber_0_15
-            g_MAX11131_device.NumWords = g_MAX11131_device.ScanManual();
-            //
-            // Read raw ADC codes from device into AINcode[] and RAW_misoData16[]
-            // @pre one of the MAX11311_Scan functions was called, setting g_MAX11131_device.NumWords
-            g_MAX11131_device.ReadAINcode();
-            // @post RAW_misoData16[index] contains the raw SPI Master-In,Slave-Out data
-            // @post AINcode[NUM_CHANNELS] contains the latest readings in LSBs
-            //
-            AINcode_print_value_externalClock(cmdLine, g_MAX11131_device.NumWords);
-            return true; // command was handled by MAX11131
-        }
+                    // test menu command '1' handler:
+                    // helpString='1 ch=? pm=? id=? -- ScanManual'
+                    // CMD_='SCAN_0001_Manual'
+                    // CommandName='ScanManual'
+                    // CommandParamIn='void'
+                    // CommandReturnType='int'
+                    // @Pre=''
+                    // @Param[in]='@param[in] g_MAX11131_device.channelNumber_0_15: AIN Channel Number'
+                    // @Param[in]='@param[in] g_MAX11131_device.PowerManagement_0_2: 0=Normal, 1=AutoShutdown, 2=AutoStandby'
+                    // @Param[in]='@param[in] g_MAX11131_device.chan_id_0_1: ADC_MODE_CONTROL.CHAN_ID'
+                    // @Param[out]=''
+                    // @Post='@post NumWords = number of words to be read from the FIFO'
+                    // @Return='@return number of ScanRead() words needed to retrieve the data.'
+                    cmdLine.serial().printf("ScanManual");
+                    // call function ScanManual
+                    int result = g_MAX11131_device.ScanManual();
+                    cmdLine.serial().printf(" =%d\r\n", result);
+                    //
+                    // CODE GENERATOR: MAX11131 post-ScanManual ReadAINCode and print data
+                    // Read raw ADC codes from device into AINcode[] and RAW_misoData16[]
+                    // @pre one of the MAX11311_Scan functions was called, setting g_MAX11131_device.NumWords
+                    g_MAX11131_device.ReadAINcode();
+                    // @post RAW_misoData16[index] contains the raw SPI Master-In,Slave-Out data
+                    // @post AINcode[NUM_CHANNELS] contains the latest readings in LSBs
+                    //
+                    AINcode_print_value_externalClock(cmdLine, g_MAX11131_device.NumWords);
+                    return true; // command handled by MAX11131
+        } // end case '1'
         break;
         case '2':
         {
-            // recommended for hex command codes 20..2F
-            // VERIFY: console menu command 2 int MAX11131_ScanRepeat(uint8_t channelNumber_0_15, uint8_t average_0_4_8_16_32, uint8_t nscan_4_8_12_16, uint8_t PowerManagement_0_2, uint8_t swcnv_0_1);
-            // TODO: cmdLine.serial().printf("\r\n 2 ch=? av=? n=? pm=? swcnv=?           -- MAX11131_ScanRepeat");
-            // VERIFY: update value of g_MAX11131_device.channelNumber_0_15 from strCommandArgs
-            // VERIFY: update value of g_MAX11131_device.average_0_4_8_16_32 option from strCommandArgs
-            // VERIFY: update value of g_MAX11131_device.nscan_4_8_12_16 option from strCommandArgs
-            // VERIFY: update value of g_MAX11131_device.swcnv_0_1 option from strCommandArgs
-            // VERIFY: update value of g_MAX11131_device.PowerManagement_0_2 option from strCommandArgs
-            // VERIFY: parse strCommandArgs for additional arguments including key=value pairs
-            if (cmdLine.parse_byte_dec("ch", g_MAX11131_device.channelNumber_0_15))
-            {
-            }
-            if (cmdLine.parse_byte_dec("av", g_MAX11131_device.average_0_4_8_16_32))
-            {
-            }
-            if (cmdLine.parse_byte_dec("n", g_MAX11131_device.nscan_4_8_12_16))
-            {
-            }
-            if (cmdLine.parse_byte_dec("swcnv", g_MAX11131_device.swcnv_0_1))
-            {
-            }
-            if (cmdLine.parse_byte_dec("pm", g_MAX11131_device.PowerManagement_0_2))
-            {
-            }
-            cmdLine.serial().printf(
-                "ScanRepeat ch=%d average_0_4_8_16_32:%d nscan_4_8_12_16:%d swcnv=%d pm=%d\r\n",
-                g_MAX11131_device.channelNumber_0_15,
-                g_MAX11131_device.average_0_4_8_16_32,
-                g_MAX11131_device.nscan_4_8_12_16,
-                g_MAX11131_device.swcnv_0_1,
-                g_MAX11131_device.PowerManagement_0_2);
-            // VERIFY: replace argument with driver global; g_MAX11131_device.PowerManagement_0_2 replaces PowerManagement_0_2
-            // VERIFY: replace argument with driver global; g_MAX11131_device.swcnv_0_1 replaces swcnv_0_1
-            // VERIFY: replace argument with driver global; g_MAX11131_device.nscan_4_8_12_16 replaces nscan_4_8_12_16
-            // VERIFY: replace argument with driver global; g_MAX11131_device.average_0_4_8_16_32 replaces average_0_4_8_16_32
-            // VERIFY: replace argument with driver global; g_MAX11131_device.channelNumber_0_15 replaces channelNumber_0_15
-            g_MAX11131_device.NumWords = g_MAX11131_device.ScanRepeat();
-            //
-            // Read raw ADC codes from device into AINcode[] and RAW_misoData16[]
-            // @pre one of the MAX11311_Scan functions was called, setting g_MAX11131_device.NumWords
-            g_MAX11131_device.ReadAINcode();
-            // @post RAW_misoData16[index] contains the raw SPI Master-In,Slave-Out data
-            // @post AINcode[NUM_CHANNELS] contains the latest readings in LSBs
-            //
-            AINcode_print_value_chanID_mean(cmdLine, g_MAX11131_device.NumWords);
-            return true; // command was handled by MAX11131
-        }
+                    // test menu command '2' handler:
+                    // helpString='2 ch=? av=? n=? swcnv=? pm=? -- ScanRepeat'
+                    // CMD_='SCAN_0010_Repeat'
+                    // CommandName='ScanRepeat'
+                    // CommandParamIn='void'
+                    // CommandReturnType='int'
+                    // @Pre=''
+                    // @Param[in]='@param[in] g_MAX11131_device.channelNumber_0_15: AIN Channel Number'
+                    // @Param[in]='@param[in] g_MAX11131_device.average_0_4_8_16_32: Number of samples averaged per ScanRead() word.'
+                    // @Param[in]='@param[in] g_MAX11131_device.nscan_4_8_12_16: Number of ScanRead() words to report.'
+                    // @Param[in]='@param[in] g_MAX11131_device.swcnv_0_1: ADC_MODE_CONTROL.SWCNV'
+                    // @Param[in]='@param[in] g_MAX11131_device.PowerManagement_0_2: 0=Normal, 1=AutoShutdown, 2=AutoStandby'
+                    // @Param[out]=''
+                    // @Post='@post NumWords = number of words to be read from the FIFO'
+                    // @Return='@return number of ScanRead() words needed to retrieve the data.'
+                    cmdLine.serial().printf("ScanRepeat");
+                    // call function ScanRepeat
+                    int result = g_MAX11131_device.ScanRepeat();
+                    cmdLine.serial().printf(" =%d\r\n", result);
+                    //
+                    // CODE GENERATOR: MAX11131 post-ScanRepeat ReadAINCode and print data
+                    // Read raw ADC codes from device into AINcode[] and RAW_misoData16[]
+                    // @pre one of the MAX11311_Scan functions was called, setting g_MAX11131_device.NumWords
+                    g_MAX11131_device.ReadAINcode();
+                    // @post RAW_misoData16[index] contains the raw SPI Master-In,Slave-Out data
+                    // @post AINcode[NUM_CHANNELS] contains the latest readings in LSBs
+                    //
+                    AINcode_print_value_chanID_mean(cmdLine, g_MAX11131_device.NumWords);
+                    return true; // command handled by MAX11131
+        } // end case '2'
         break;
         case '3':
         {
-            // recommended for hex command codes 30..3F
-            // VERIFY: console menu command 3 MAX11131_ScanStandardInternalClock(int channelNumber_0_15, int average_0_4_8_16_32, int PowerManagement_0_2, int swcnv_0_1);
-            // TODO: cmdLine.serial().printf("\r\n 3 ch=? av=? pm=? swcnv=?               -- MAX11131_ScanStandardIntClock");
-            // VERIFY: update value of g_MAX11131_device.channelNumber_0_15 from strCommandArgs
-            // VERIFY: update value of g_MAX11131_device.average_0_4_8_16_32 option from strCommandArgs
-            // VERIFY: update value of g_MAX11131_device.swcnv_0_1 option from strCommandArgs
-            // VERIFY: update value of g_MAX11131_device.PowerManagement_0_2 option from strCommandArgs
-            if (cmdLine.parse_byte_dec("ch", g_MAX11131_device.channelNumber_0_15))
-            {
-            }
-            if (cmdLine.parse_byte_dec("av", g_MAX11131_device.average_0_4_8_16_32))
-            {
-            }
-            if (cmdLine.parse_byte_dec("pm", g_MAX11131_device.PowerManagement_0_2))
-            {
-            }
-            if (cmdLine.parse_byte_dec("swcnv", g_MAX11131_device.swcnv_0_1))
-            {
-            }
-            cmdLine.serial().printf("ScanStandardInternalClock ch=%d average_0_4_8_16_32:%d swcnv=%d pm=%d\r\n",
-                                    g_MAX11131_device.channelNumber_0_15,
-                                    g_MAX11131_device.average_0_4_8_16_32,
-                                    g_MAX11131_device.swcnv_0_1,
-                                    g_MAX11131_device.PowerManagement_0_2
-                                    );
-            // VERIFY: replace argument with driver global; g_MAX11131_device.PowerManagement_0_2 replaces PowerManagement_0_2
-            // VERIFY: replace argument with driver global; g_MAX11131_device.swcnv_0_1 replaces swcnv_0_1
-            // VERIFY: replace argument with driver global; g_MAX11131_device.average_0_4_8_16_32 replaces average_0_4_8_16_32
-            // VERIFY: replace argument with driver global; g_MAX11131_device.channelNumber_0_15 replaces channelNumber_0_15
-            g_MAX11131_device.NumWords = g_MAX11131_device.ScanStandardInternalClock();
-            //
-            // Read raw ADC codes from device into AINcode[] and RAW_misoData16[]
-            // @pre one of the MAX11311_Scan functions was called, setting g_MAX11131_device.NumWords
-            g_MAX11131_device.ReadAINcode();
-            // @post RAW_misoData16[index] contains the raw SPI Master-In,Slave-Out data
-            // @post AINcode[NUM_CHANNELS] contains the latest readings in LSBs
-            //
-            AINcode_print_value_chanID(cmdLine, g_MAX11131_device.NumWords);
-            return true; // command was handled by MAX11131
-        }
+                    // test menu command '3' handler:
+                    // helpString='3 ch=? av=? pm=? swcnv=? -- ScanStandardInternalClock'
+                    // CMD_='SCAN_0011_StandardInternalClock'
+                    // CommandName='ScanStandardInternalClock'
+                    // CommandParamIn='void'
+                    // CommandReturnType='int'
+                    // @Pre=''
+                    // @Param[in]='@param[in] g_MAX11131_device.channelNumber_0_15: AIN Channel Number'
+                    // @Param[in]='@param[in] g_MAX11131_device.average_0_4_8_16_32: Number of samples averaged per ScanRead() word.'
+                    // @Param[in]='@param[in] g_MAX11131_device.PowerManagement_0_2: 0=Normal, 1=AutoShutdown, 2=AutoStandby'
+                    // @Param[in]='@param[in] g_MAX11131_device.swcnv_0_1: ADC_MODE_CONTROL.SWCNV'
+                    // @Param[out]=''
+                    // @Post='@post NumWords = number of words to be read from the FIFO'
+                    // @Return='@return number of ScanRead() words needed to retrieve the data.'
+                    cmdLine.serial().printf("ScanStandardInternalClock");
+                    // call function ScanStandardInternalClock
+                    int result = g_MAX11131_device.ScanStandardInternalClock();
+                    cmdLine.serial().printf(" =%d\r\n", result);
+                    //
+                    // CODE GENERATOR: MAX11131 post-ScanStandardInternalClock ReadAINCode and print data
+                    // Read raw ADC codes from device into AINcode[] and RAW_misoData16[]
+                    // @pre one of the MAX11311_Scan functions was called, setting g_MAX11131_device.NumWords
+                    g_MAX11131_device.ReadAINcode();
+                    // @post RAW_misoData16[index] contains the raw SPI Master-In,Slave-Out data
+                    // @post AINcode[NUM_CHANNELS] contains the latest readings in LSBs
+                    //
+                    AINcode_print_value_chanID(cmdLine, g_MAX11131_device.NumWords);
+                    return true; // command handled by MAX11131
+        } // end case '3'
         break;
         case '4':
         {
-            // recommended for hex command codes 40..4F
-            // VERIFY: console menu command 4 MAX11131_ScanStandardExternalClock(int channelNumber_0_15, int PowerManagement_0_2, int chan_id_0_1);
-            // TODO: cmdLine.serial().printf("\r\n 4 ch=? pm=? id=?                       -- MAX11131_ScanStandardExtClock");
-            // VERIFY: update value of g_MAX11131_device.channelNumber_0_15 from strCommandArgs
-            // VERIFY: update value of g_MAX11131_device.PowerManagement_0_2 option from strCommandArgs
-            // VERIFY: update value of g_MAX11131_device.chan_id_0_1 option from strCommandArgs
-            if (cmdLine.parse_byte_dec("ch", g_MAX11131_device.channelNumber_0_15))
-            {
-            }
-            if (cmdLine.parse_byte_dec("pm", g_MAX11131_device.PowerManagement_0_2))
-            {
-            }
-            if (cmdLine.parse_byte_dec("id", g_MAX11131_device.chan_id_0_1))
-            {
-            }
-            cmdLine.serial().printf("ScanStandardExternalClock ch=%d pm=%d id=%d\r\n",
-                                    g_MAX11131_device.channelNumber_0_15,
-                                    g_MAX11131_device.PowerManagement_0_2,
-                                    g_MAX11131_device.chan_id_0_1
-                                    );
-            // VERIFY: replace argument with driver global; g_MAX11131_device.PowerManagement_0_2 replaces PowerManagement_0_2
-            // VERIFY: replace argument with driver global; g_MAX11131_device.chan_id_0_1 replaces chan_id_0_1
-            // VERIFY: replace argument with driver global; g_MAX11131_device.channelNumber_0_15 replaces channelNumber_0_15
-            g_MAX11131_device.NumWords = g_MAX11131_device.ScanStandardExternalClock();
-            //
-            // Read raw ADC codes from device into AINcode[] and RAW_misoData16[]
-            // @pre one of the MAX11311_Scan functions was called, setting g_MAX11131_device.NumWords
-            g_MAX11131_device.ReadAINcode();
-            // @post RAW_misoData16[index] contains the raw SPI Master-In,Slave-Out data
-            // @post AINcode[NUM_CHANNELS] contains the latest readings in LSBs
-            //
-            AINcode_print_value_externalClock(cmdLine, g_MAX11131_device.NumWords);
-            return true; // command was handled by MAX11131
-        }
+                    // test menu command '4' handler:
+                    // helpString='4 ch=? pm=? id=? -- ScanStandardExternalClock'
+                    // CMD_='SCAN_0100_StandardExternalClock'
+                    // CommandName='ScanStandardExternalClock'
+                    // CommandParamIn='void'
+                    // CommandReturnType='int'
+                    // @Pre=''
+                    // @Param[in]='@param[in] g_MAX11131_device.channelNumber_0_15: AIN Channel Number'
+                    // @Param[in]='@param[in] g_MAX11131_device.PowerManagement_0_2: 0=Normal, 1=AutoShutdown, 2=AutoStandby'
+                    // @Param[in]='@param[in] g_MAX11131_device.chan_id_0_1: ADC_MODE_CONTROL.CHAN_ID'
+                    // @Param[out]=''
+                    // @Post='@post NumWords = number of words to be read from the FIFO'
+                    // @Return='@return number of ScanRead() words needed to retrieve the data.'
+                    cmdLine.serial().printf("ScanStandardExternalClock");
+                    // call function ScanStandardExternalClock
+                    int result = g_MAX11131_device.ScanStandardExternalClock();
+                    cmdLine.serial().printf(" =%d\r\n", result);
+                    //
+                    // CODE GENERATOR: MAX11131 post-ScanStandardExternalClock ReadAINCode and print data
+                    // Read raw ADC codes from device into AINcode[] and RAW_misoData16[]
+                    // @pre one of the MAX11311_Scan functions was called, setting g_MAX11131_device.NumWords
+                    g_MAX11131_device.ReadAINcode();
+                    // @post RAW_misoData16[index] contains the raw SPI Master-In,Slave-Out data
+                    // @post AINcode[NUM_CHANNELS] contains the latest readings in LSBs
+                    //
+                    AINcode_print_value_externalClock(cmdLine, g_MAX11131_device.NumWords);
+                    return true; // command handled by MAX11131
+        } // end case '4'
         break;
         case '5':
         {
-            // recommended for hex command codes 50..5F
-            // VERIFY: console menu command 5 MAX11131_ScanUpperInternalClock(int channelNumber_0_15, int average_0_4_8_16_32, int PowerManagement_0_2, int swcnv_0_1);
-            // TODO: cmdLine.serial().printf("\r\n 5 ch=? av=? pm=? swcnv=?               -- MAX11131_ScanUpperIntClock");
-            // VERIFY: update value of g_MAX11131_device.channelNumber_0_15 from strCommandArgs
-            // VERIFY: update value of g_MAX11131_device.average_0_4_8_16_32 option from strCommandArgs
-            // VERIFY: update value of g_MAX11131_device.swcnv_0_1 option from strCommandArgs
-            // VERIFY: update value of g_MAX11131_device.PowerManagement_0_2 option from strCommandArgs
-            if (cmdLine.parse_byte_dec("ch", g_MAX11131_device.channelNumber_0_15))
-            {
-            }
-            if (cmdLine.parse_byte_dec("av", g_MAX11131_device.average_0_4_8_16_32))
-            {
-            }
-            if (cmdLine.parse_byte_dec("pm", g_MAX11131_device.PowerManagement_0_2))
-            {
-            }
-            if (cmdLine.parse_byte_dec("swcnv", g_MAX11131_device.swcnv_0_1))
-            {
-            }
-            cmdLine.serial().printf("ScanUpperInternalClock ch=%d average_0_4_8_16_32:%d swcnv=%d pm=%d\r\n",
-                                    g_MAX11131_device.channelNumber_0_15,
-                                    g_MAX11131_device.average_0_4_8_16_32,
-                                    g_MAX11131_device.swcnv_0_1,
-                                    g_MAX11131_device.PowerManagement_0_2
-                                    );
-            // VERIFY: replace argument with driver global; g_MAX11131_device.PowerManagement_0_2 replaces PowerManagement_0_2
-            // VERIFY: replace argument with driver global; g_MAX11131_device.swcnv_0_1 replaces swcnv_0_1
-            // VERIFY: replace argument with driver global; g_MAX11131_device.average_0_4_8_16_32 replaces average_0_4_8_16_32
-            // VERIFY: replace argument with driver global; g_MAX11131_device.channelNumber_0_15 replaces channelNumber_0_15
-            g_MAX11131_device.NumWords = g_MAX11131_device.ScanUpperInternalClock();
-            //
-            // Read raw ADC codes from device into AINcode[] and RAW_misoData16[]
-            // @pre one of the MAX11311_Scan functions was called, setting g_MAX11131_device.NumWords
-            g_MAX11131_device.ReadAINcode();
-            // @post RAW_misoData16[index] contains the raw SPI Master-In,Slave-Out data
-            // @post AINcode[NUM_CHANNELS] contains the latest readings in LSBs
-            //
-            AINcode_print_value_chanID(cmdLine, g_MAX11131_device.NumWords);
-            return true; // command was handled by MAX11131
-        }
+                    // test menu command '5' handler:
+                    // helpString='5 ch=? av=? pm=? swcnv=? -- ScanUpperInternalClock'
+                    // CMD_='SCAN_0101_UpperInternalClock'
+                    // CommandName='ScanUpperInternalClock'
+                    // CommandParamIn='void'
+                    // CommandReturnType='int'
+                    // @Pre=''
+                    // @Param[in]='@param[in] g_MAX11131_device.channelNumber_0_15: AIN Channel Number'
+                    // @Param[in]='@param[in] g_MAX11131_device.average_0_4_8_16_32: Number of samples averaged per ScanRead() word.'
+                    // @Param[in]='@param[in] g_MAX11131_device.PowerManagement_0_2: 0=Normal, 1=AutoShutdown, 2=AutoStandby'
+                    // @Param[in]='@param[in] g_MAX11131_device.swcnv_0_1: ADC_MODE_CONTROL.SWCNV'
+                    // @Param[out]=''
+                    // @Post='@post NumWords = number of words to be read from the FIFO'
+                    // @Return='@return number of ScanRead() words needed to retrieve the data.'
+                    cmdLine.serial().printf("ScanUpperInternalClock");
+                    // call function ScanUpperInternalClock
+                    int result = g_MAX11131_device.ScanUpperInternalClock();
+                    cmdLine.serial().printf(" =%d\r\n", result);
+                    //
+                    // CODE GENERATOR: MAX11131 post-ScanUpperInternalClock ReadAINCode and print data
+                    // Read raw ADC codes from device into AINcode[] and RAW_misoData16[]
+                    // @pre one of the MAX11311_Scan functions was called, setting g_MAX11131_device.NumWords
+                    g_MAX11131_device.ReadAINcode();
+                    // @post RAW_misoData16[index] contains the raw SPI Master-In,Slave-Out data
+                    // @post AINcode[NUM_CHANNELS] contains the latest readings in LSBs
+                    //
+                    AINcode_print_value_chanID(cmdLine, g_MAX11131_device.NumWords);
+                    return true; // command handled by MAX11131
+        } // end case '5'
         break;
         case '6':
         {
-            // recommended for hex command codes 60..6F
-            // VERIFY: console menu command 6 MAX11131_ScanUpperExternalClock(int channelNumber_0_15, int PowerManagement_0_2, int chan_id_0_1);
-            // TODO: cmdLine.serial().printf("\r\n 6 ch=? pm=? id=?                       -- MAX11131_ScanUpperExtClock");
-            // VERIFY: update value of g_MAX11131_device.channelNumber_0_15 from strCommandArgs
-            // VERIFY: update value of g_MAX11131_device.PowerManagement_0_2 option from strCommandArgs
-            // VERIFY: update value of g_MAX11131_device.chan_id_0_1 option from strCommandArgs
-            if (cmdLine.parse_byte_dec("ch", g_MAX11131_device.channelNumber_0_15))
-            {
-            }
-            if (cmdLine.parse_byte_dec("pm", g_MAX11131_device.PowerManagement_0_2))
-            {
-            }
-            if (cmdLine.parse_byte_dec("id", g_MAX11131_device.chan_id_0_1))
-            {
-            }
-            cmdLine.serial().printf("ScanUpperExternalClock ch=%d pm=%d id=%d\r\n",
-                                    g_MAX11131_device.channelNumber_0_15,
-                                    g_MAX11131_device.PowerManagement_0_2,
-                                    g_MAX11131_device.chan_id_0_1
-                                    );
-            // VERIFY: replace argument with driver global; g_MAX11131_device.PowerManagement_0_2 replaces PowerManagement_0_2
-            // VERIFY: replace argument with driver global; g_MAX11131_device.chan_id_0_1 replaces chan_id_0_1
-            // VERIFY: replace argument with driver global; g_MAX11131_device.channelNumber_0_15 replaces channelNumber_0_15
-            g_MAX11131_device.NumWords = g_MAX11131_device.ScanUpperExternalClock();
-            //
-            // Read raw ADC codes from device into AINcode[] and RAW_misoData16[]
-            // @pre one of the MAX11311_Scan functions was called, setting g_MAX11131_device.NumWords
-            g_MAX11131_device.ReadAINcode();
-            // @post RAW_misoData16[index] contains the raw SPI Master-In,Slave-Out data
-            // @post AINcode[NUM_CHANNELS] contains the latest readings in LSBs
-            //
-            AINcode_print_value_externalClock(cmdLine, g_MAX11131_device.NumWords);
-            return true; // command was handled by MAX11131
-        }
+                    // test menu command '6' handler:
+                    // helpString='6 ch=? pm=? id=? -- ScanUpperExternalClock'
+                    // CMD_='SCAN_0110_UpperExternalClock'
+                    // CommandName='ScanUpperExternalClock'
+                    // CommandParamIn='void'
+                    // CommandReturnType='int'
+                    // @Pre=''
+                    // @Param[in]='@param[in] g_MAX11131_device.channelNumber_0_15: AIN Channel Number'
+                    // @Param[in]='@param[in] g_MAX11131_device.PowerManagement_0_2: 0=Normal, 1=AutoShutdown, 2=AutoStandby'
+                    // @Param[in]='@param[in] g_MAX11131_device.chan_id_0_1: ADC_MODE_CONTROL.CHAN_ID'
+                    // @Param[out]=''
+                    // @Post='@post NumWords = number of words to be read from the FIFO'
+                    // @Return='@return number of ScanRead() words needed to retrieve the data.'
+                    cmdLine.serial().printf("ScanUpperExternalClock");
+                    // call function ScanUpperExternalClock
+                    int result = g_MAX11131_device.ScanUpperExternalClock();
+                    cmdLine.serial().printf(" =%d\r\n", result);
+                    //
+                    // CODE GENERATOR: MAX11131 post-ScanUpperExternalClock ReadAINCode and print data
+                    // Read raw ADC codes from device into AINcode[] and RAW_misoData16[]
+                    // @pre one of the MAX11311_Scan functions was called, setting g_MAX11131_device.NumWords
+                    g_MAX11131_device.ReadAINcode();
+                    // @post RAW_misoData16[index] contains the raw SPI Master-In,Slave-Out data
+                    // @post AINcode[NUM_CHANNELS] contains the latest readings in LSBs
+                    //
+                    AINcode_print_value_externalClock(cmdLine, g_MAX11131_device.NumWords);
+                    return true; // command handled by MAX11131
+        } // end case '6'
         break;
         case '7':
         {
-            // recommended for hex command codes 70..7F
-            // VERIFY: console menu command 7 MAX11131_ScanCustomInternalClock(int16_t enabledChannelsMask, int average_0_4_8_16_32, int PowerManagement_0_2, int swcnv_0_1);
-            // TODO: cmdLine.serial().printf("\r\n 7 enableMask=0xffff av=? pm=? swcnv=?  -- MAX11131_ScanCustomIntClock");
-            // VERIFY: update value of g_MAX11131_device.average_0_4_8_16_32 option from strCommandArgs
-            // VERIFY: update value of g_MAX11131_device.swcnv_0_1 option from strCommandArgs
-            // VERIFY: update value of g_MAX11131_device.PowerManagement_0_2 option from strCommandArgs
-            if (cmdLine.parse_int16_hex("enableMask", g_MAX11131_device.enabledChannelsMask))
-            {
-                // TODO1: get g_MAX11131_device.enabledChannelsMask from strCommandArgs
-            }
-            if (cmdLine.parse_byte_dec("av", g_MAX11131_device.average_0_4_8_16_32))
-            {
-            }
-            if (cmdLine.parse_byte_dec("pm", g_MAX11131_device.PowerManagement_0_2))
-            {
-            }
-            if (cmdLine.parse_byte_dec("swcnv", g_MAX11131_device.swcnv_0_1))
-            {
-            }
-            cmdLine.serial().printf(
-                "ScanCustomInternalClock enabledChannelsMask:0x%4.4x average_0_4_8_16_32:%d pm=%d swcnv=%d\r\n",
-                (g_MAX11131_device.enabledChannelsMask & 0xFFFF),
-                g_MAX11131_device.average_0_4_8_16_32,
-                g_MAX11131_device.PowerManagement_0_2,
-                g_MAX11131_device.swcnv_0_1
-                );
-            // VERIFY: replace argument with driver global; g_MAX11131_device.PowerManagement_0_2 replaces PowerManagement_0_2
-            // VERIFY: replace argument with driver global; g_MAX11131_device.swcnv_0_1 replaces swcnv_0_1
-            // VERIFY: replace argument with driver global; g_MAX11131_device.average_0_4_8_16_32 replaces average_0_4_8_16_32
-            // VERIFY: replace argument with driver global; g_MAX11131_device.enabledChannelsMask replaces enabledChannelsMask
-            g_MAX11131_device.NumWords = g_MAX11131_device.ScanCustomInternalClock();
-            //
-            // Read raw ADC codes from device into AINcode[] and RAW_misoData16[]
-            // @pre one of the MAX11311_Scan functions was called, setting g_MAX11131_device.NumWords
-            g_MAX11131_device.ReadAINcode();
-            // @post RAW_misoData16[index] contains the raw SPI Master-In,Slave-Out data
-            // @post AINcode[NUM_CHANNELS] contains the latest readings in LSBs
-            //
-            AINcode_print_value_chanID(cmdLine, g_MAX11131_device.NumWords);
-            return true; // command was handled by MAX11131
-        }
+                    // test menu command '7' handler:
+                    // helpString='7 enableMask=? av=? pm=? swcnv=? -- ScanCustomInternalClock'
+                    // CMD_='SCAN_0111_CustomInternalClock'
+                    // CommandName='ScanCustomInternalClock'
+                    // CommandParamIn='void'
+                    // CommandReturnType='int'
+                    // @Pre=''
+                    // @Param[in]='@param[in] g_MAX11131_device.enabledChannelsMask: Bitmap of AIN Channels to scan.'
+                    // @Param[in]='@param[in] g_MAX11131_device.average_0_4_8_16_32: Number of samples averaged per ScanRead() word.'
+                    // @Param[in]='@param[in] g_MAX11131_device.PowerManagement_0_2: 0=Normal, 1=AutoShutdown, 2=AutoStandby'
+                    // @Param[in]='@param[in] g_MAX11131_device.swcnv_0_1: ADC_MODE_CONTROL.SWCNV'
+                    // @Param[out]=''
+                    // @Post='@post NumWords = number of words to be read from the FIFO'
+                    // @Return='@return number of ScanRead() words needed to retrieve the data.'
+                    cmdLine.serial().printf("ScanCustomInternalClock");
+                    // call function ScanCustomInternalClock
+                    int result = g_MAX11131_device.ScanCustomInternalClock();
+                    cmdLine.serial().printf(" =%d\r\n", result);
+                    //
+                    // CODE GENERATOR: MAX11131 post-ScanCustomInternalClock ReadAINCode and print data
+                    // Read raw ADC codes from device into AINcode[] and RAW_misoData16[]
+                    // @pre one of the MAX11311_Scan functions was called, setting g_MAX11131_device.NumWords
+                    g_MAX11131_device.ReadAINcode();
+                    // @post RAW_misoData16[index] contains the raw SPI Master-In,Slave-Out data
+                    // @post AINcode[NUM_CHANNELS] contains the latest readings in LSBs
+                    //
+                    AINcode_print_value_chanID(cmdLine, g_MAX11131_device.NumWords);
+                    return true; // command handled by MAX11131
+        } // end case '7'
         break;
         case '8':
         {
-            // recommended for hex command codes 80..8F
-            // VERIFY: console menu command 8 MAX11131_ScanCustomExternalClock(int16_t enabledChannelsMask, int PowerManagement_0_2, int chan_id_0_1);
-            // TODO: cmdLine.serial().printf("\r\n 8 enableMask=0xffff pm=0 id=1               -- MAX11131_ScanCustomExtClock");
-            if (cmdLine.parse_int16_hex("enableMask", g_MAX11131_device.enabledChannelsMask))
-            {
-                // TODO1: get g_MAX11131_device.enabledChannelsMask from strCommandArgs
-            }
-            if (cmdLine.parse_byte_dec("pm", g_MAX11131_device.PowerManagement_0_2))
-            {
-            }
-            if (cmdLine.parse_byte_dec("id", g_MAX11131_device.chan_id_0_1))
-            {
-            }
-            cmdLine.serial().printf("ScanCustomExternalClock enabledChannelsMask:0x%4.4x pm=%d id=%d\r\n",
-                                    (g_MAX11131_device.enabledChannelsMask & 0xFFFF),
-                                    g_MAX11131_device.PowerManagement_0_2,
-                                    g_MAX11131_device.chan_id_0_1
-                                    );
-            // VERIFY: replace argument with driver global; g_MAX11131_device.PowerManagement_0_2 replaces PowerManagement_0_2
-            // VERIFY: replace argument with driver global; g_MAX11131_device.chan_id_0_1 replaces chan_id_0_1
-            // VERIFY: replace argument with driver global; g_MAX11131_device.enabledChannelsMask replaces enabledChannelsMask
-            g_MAX11131_device.NumWords = g_MAX11131_device.ScanCustomExternalClock();
-            //
-            // Read raw ADC codes from device into AINcode[] and RAW_misoData16[]
-            // @pre one of the MAX11311_Scan functions was called, setting g_MAX11131_device.NumWords
-            g_MAX11131_device.ReadAINcode();
-            // @post RAW_misoData16[index] contains the raw SPI Master-In,Slave-Out data
-            // @post AINcode[NUM_CHANNELS] contains the latest readings in LSBs
-            //
-            AINcode_print_value_externalClock(cmdLine, g_MAX11131_device.NumWords);
-            return true; // command was handled by MAX11131
-        }
+                    // test menu command '8' handler:
+                    // helpString='8 enableMask=? pm=? id=? -- ScanCustomExternalClock'
+                    // CMD_='SCAN_1000_CustomExternalClock'
+                    // CommandName='ScanCustomExternalClock'
+                    // CommandParamIn='void'
+                    // CommandReturnType='int'
+                    // @Pre=''
+                    // @Param[in]='@param[in] g_MAX11131_device.enabledChannelsMask: Bitmap of AIN Channels to scan.'
+                    // @Param[in]='@param[in] g_MAX11131_device.PowerManagement_0_2: 0=Normal, 1=AutoShutdown, 2=AutoStandby'
+                    // @Param[in]='@param[in] g_MAX11131_device.chan_id_0_1: ADC_MODE_CONTROL.CHAN_ID'
+                    // @Param[out]=''
+                    // @Post='@post NumWords = number of words to be read from the FIFO'
+                    // @Return='@return number of ScanRead() words needed to retrieve the data.'
+                    cmdLine.serial().printf("ScanCustomExternalClock");
+                    // call function ScanCustomExternalClock
+                    int result = g_MAX11131_device.ScanCustomExternalClock();
+                    cmdLine.serial().printf(" =%d\r\n", result);
+                    //
+                    // CODE GENERATOR: MAX11131 post-ScanCustomExternalClock ReadAINCode and print data
+                    // Read raw ADC codes from device into AINcode[] and RAW_misoData16[]
+                    // @pre one of the MAX11311_Scan functions was called, setting g_MAX11131_device.NumWords
+                    g_MAX11131_device.ReadAINcode();
+                    // @post RAW_misoData16[index] contains the raw SPI Master-In,Slave-Out data
+                    // @post AINcode[NUM_CHANNELS] contains the latest readings in LSBs
+                    //
+                    AINcode_print_value_externalClock(cmdLine, g_MAX11131_device.NumWords);
+                    return true; // command handled by MAX11131
+        } // end case '8'
         break;
         case '9':
         {
-            // recommended for hex command codes 90..9F
-            // VERIFY: console menu command 9 MAX11131_ScanSampleSetExternalClock(uint8_t enabledChannelsPatternLength_1_256, int16_t enabledChannelsPattern[], int PowerManagement_0_2, int chan_id_0_1);
-            // TODO: cmdLine.serial().printf("\r\n 9 channelsPattern... pm=? id=? | len=? -- MAX11131_ScanSampleSetExtClock");
-            //
-            // get MAX11131 Sampleset channel selection pattern parse_strCommandArgs(strCommandArgs);
-            // cmdLine.parse_byteCount_byteList_dec(byteCount, mosiData, MAX_SPI_BYTE_COUNT)
-            // into g_MAX11131_device.enabledChannelsPatternLength_1_256
-            // into g_MAX11131_device.enabledChannelsPattern[0..255]
-            size_t numValues;
-            char valueList[256];
-            if (cmdLine.parse_byteCount_byteList_dec( numValues, valueList, 256))
-            {
-                // first value is the "9" command itself
-                g_MAX11131_device.enabledChannelsPatternLength_1_256 = numValues - 1;
-                // copy valueList[1, ...] into g_MAX11131_device.enabledChannelsPattern[0, ...]
-                for (size_t index = 0; index < (numValues - 1); index++)
-                {
-                    g_MAX11131_device.enabledChannelsPattern[index] = valueList[1 + index];
-                }
-            }
-            //
-            cmdLine.serial().printf("ScanSampleSetExternalClock enabledChannelsPattern:{ ");
-            int index;
-            for (index = 0; index < g_MAX11131_device.enabledChannelsPatternLength_1_256; index++)
-            {
-                //~ Serial.print( ((g_enabledChannelsPattern[index] >> 4) & 0x000F), DEC);
-                //~ Serial.print(" ");
-                cmdLine.serial().printf("AIN%d ", ((g_MAX11131_device.enabledChannelsPattern[index]) & 0x000F));
-            }
-            cmdLine.serial().printf("}");
-            cmdLine.serial().printf(" pm=%d id=%d\r\n", g_MAX11131_device.PowerManagement_0_2,
-                                    g_MAX11131_device.chan_id_0_1);
-            // VERIFY: replace argument with driver global; g_MAX11131_device.PowerManagement_0_2 replaces PowerManagement_0_2
-            // VERIFY: replace argument with driver global; g_MAX11131_device.chan_id_0_1 replaces chan_id_0_1
-            g_MAX11131_device.NumWords = g_MAX11131_device.ScanSampleSetExternalClock();
-            //
-            // Read raw ADC codes from device into AINcode[] and RAW_misoData16[]
-            // @pre one of the MAX11311_Scan functions was called, setting g_MAX11131_device.NumWords
-            g_MAX11131_device.ReadAINcode();
-            // @post RAW_misoData16[index] contains the raw SPI Master-In,Slave-Out data
-            // @post AINcode[NUM_CHANNELS] contains the latest readings in LSBs
-            //
-            AINcode_print_value_externalClock(cmdLine, g_MAX11131_device.NumWords);
-            return true; // command was handled by MAX11131
-        }
+                    // test menu command '9' handler:
+                    // helpString='9 channelsPattern...=? pm=? id=? -- ScanSampleSetExternalClock'
+                    // CMD_='SCAN_1001_SampleSetExternalClock'
+                    // CommandName='ScanSampleSetExternalClock'
+                    // CommandParamIn='void'
+                    // CommandReturnType='int'
+                    // @Pre='@pre g_MAX11131_device.enabledChannelsPatternLength_1_256: number of channel selections'
+                    // @Pre='@pre g_MAX11131_device.enabledChannelsPattern: array containing channel selection pattern'
+                    // @Param[in]='@param[in] g_MAX11131_device.enabledChannelsPattern: array of channel select, one channel per byte'
+                    // @Param[in]='@param[in] g_MAX11131_device.PowerManagement_0_2: 0=Normal, 1=AutoShutdown, 2=AutoStandby'
+                    // @Param[in]='@param[in] g_MAX11131_device.chan_id_0_1: ADC_MODE_CONTROL.CHAN_ID'
+                    // @Param[out]=''
+                    // @Post='@post NumWords = number of words to be read from the FIFO'
+                    // @Return='@return number of ScanRead() words needed to retrieve the data.'
+                    // exception MAX11131 Menu item '9' ScanSampleSetExternalClock
+                    // parse channelsPattern using parse_byteCount_byteList_dec(size_t& byteCount, char *mosiDataBuf, size_t mosiDataBufSize)
+                    size_t byteCount = g_MAX11131_device.enabledChannelsPatternLength_1_256;
+                    char *mosiDataBuf = (char *)g_MAX11131_device.enabledChannelsPattern; // cast from uint8_t*
+                    size_t mosiDataBufSize = sizeof(g_MAX11131_device.enabledChannelsPattern);
+                    cmdLine.parse_byteCount_byteList_dec(byteCount, mosiDataBuf, mosiDataBufSize);
+                    g_MAX11131_device.enabledChannelsPatternLength_1_256 = byteCount;
+                    cmdLine.serial().printf("ScanSampleSetExternalClock");
+                    // call function ScanSampleSetExternalClock
+                    int result = g_MAX11131_device.ScanSampleSetExternalClock();
+                    cmdLine.serial().printf(" =%d\r\n", result);
+                    //
+                    // CODE GENERATOR: MAX11131 post-ScanSampleSetExternalClock ReadAINCode and print data
+                    // Read raw ADC codes from device into AINcode[] and RAW_misoData16[]
+                    // @pre one of the MAX11311_Scan functions was called, setting g_MAX11131_device.NumWords
+                    g_MAX11131_device.ReadAINcode();
+                    // @post RAW_misoData16[index] contains the raw SPI Master-In,Slave-Out data
+                    // @post AINcode[NUM_CHANNELS] contains the latest readings in LSBs
+                    //
+                    AINcode_print_value_externalClock(cmdLine, g_MAX11131_device.NumWords);
+                    return true; // command handled by MAX11131
+        } // end case '9'
         break;
-        case 'a': case 'A':
+        case 'I': // (multiple characters) (testMenuFirstCharHandler="I"):
         {
-            // recommended for hex command codes A0..AF
-            switch (cmdLine[1])
-            {
-                case 't': case 'T':
-#if IGNORE_AT_COMMANDS
-# if HAS_DAPLINK_SERIAL
-                    cmdLine_DAPLINKserial.serial().printf("\r\n ignore AT command \"%s\"\r\n", cmdLine.str());
-# endif // HAS_DAPLINK_SERIAL
-                    // AT command: skip the prompt to avoid confusing modem detector
-                    return false; // command not handled
-#endif // IGNORE_AT_COMMANDS
-            }
-        }
-        break;
-        case 'b': case 'B':
-        {
-            // recommended for hex command codes B0..BF
-        }
-        break;
-        case 'c': case 'C':
-        {
-            // recommended for hex command codes C0..CF
-        }
-        break;
-        case 'd': case 'D':
-        {
-            // recommended for hex command codes D0..DF
-        }
-        break;
-        case 'e': case 'E':
-        {
-            // recommended for hex command codes E0..EF
-        }
-        break;
-        case 'f': case 'F':
-        {
-            // recommended for hex command codes F0..FF
-        }
-        break;
-        case 'x': case 'X':
-        {
-        }
-        break;
-        case 'y': case 'Y':
-        {
-        }
-        break;
-        case 'i': case 'I':
-        {
-            // TODO: cmdLine.serial().printf("\r\n ISc) IUc) IBc) IRc) reconfigure channel single-ended/unipolar/bipolar/range");
-            char strChannelId[3];
-            strChannelId[0] = cmdLine[2];
-            strChannelId[1] = cmdLine[3];
-            strChannelId[2] = '\0';
-            int channelId_0_15 = strtoul(strChannelId, NULL, 10);         // strtol(str, NULL, 10): get decimal value
             switch (cmdLine[1])
             {
-                case 's': case 'S':
-                    g_MAX11131_device.Reconfigure_SingleEnded(channelId_0_15);
-                    break;
-                case 'u': case 'U':
-                    g_MAX11131_device.Reconfigure_DifferentialUnipolar(channelId_0_15);
-                    break;
-                case 'b': case 'B':
-                    g_MAX11131_device.Reconfigure_DifferentialBipolarFSVref(channelId_0_15);
-                    break;
-                case 'r': case 'R':
-                    g_MAX11131_device.Reconfigure_DifferentialBipolarFS2Vref(channelId_0_15);
-                    break;
-            }
-            // char cmd1 = strCommandArgs[0];
-            // strCommandArgs.remove(0, 1); // unsigned int index, unsigned int count
-            // // get argument int channelId_0_15
-            // // parse_strCommandArgs(strCommandArgs);
-            // int channelId_0_15 = strtoul(strCommandArgs.c_str(), NULL, 10); // strtol(str, NULL, 10): get decimal value
-            // if (cmd1 == 'S') {
-            //     MAX11131_Reconfigure_SingleEnded(channelId_0_15);
-            // }
-            // else if (cmd1 == 'U') {
-            //     MAX11131_Reconfigure_DifferentialUnipolar(channelId_0_15);
-            // }
-            // else if (cmd1 == 'B') {
-            //     MAX11131_Reconfigure_DifferentialBipolarFSVref(channelId_0_15);
-            // }
-            // else if (cmd1 == 'R') {
-            //     MAX11131_Reconfigure_DifferentialBipolarFS2Vref(channelId_0_15);
-            // }
-            return true; // command was handled by MAX11131
-        }
-        break;
-        case '@':
-        {
-            // TODO: cmdLine.serial().printf("\r\n @                                      -- print MAX11131 configuration");
-            // print shadow register configuration
-            //
-            cmdLine.serial().printf("0x%4.4x", (g_MAX11131_device.ADC_MODE_CONTROL & 0xFFFF));
-            MAX11131_print_register_verbose(cmdLine, g_MAX11131_device.ADC_MODE_CONTROL);
-            cmdLine.serial().printf("0x%4.4x", (g_MAX11131_device.ADC_CONFIGURATION & 0xFFFF));
-            MAX11131_print_register_verbose(cmdLine, g_MAX11131_device.ADC_CONFIGURATION);
-            cmdLine.serial().printf("0x%4.4x", (g_MAX11131_device.UNIPOLAR & 0xFFFF));
-            MAX11131_print_register_verbose(cmdLine, g_MAX11131_device.UNIPOLAR);
-            cmdLine.serial().printf("0x%4.4x", (g_MAX11131_device.BIPOLAR & 0xFFFF));
-            MAX11131_print_register_verbose(cmdLine, g_MAX11131_device.BIPOLAR);
-            cmdLine.serial().printf("0x%4.4x", (g_MAX11131_device.RANGE & 0xFFFF));
-            MAX11131_print_register_verbose(cmdLine, g_MAX11131_device.RANGE);
-            cmdLine.serial().printf("0x%4.4x", (g_MAX11131_device.CSCAN0 & 0xFFFF));
-            MAX11131_print_register_verbose(cmdLine, g_MAX11131_device.CSCAN0);
-            cmdLine.serial().printf("0x%4.4x", (g_MAX11131_device.CSCAN1 & 0xFFFF));
-            MAX11131_print_register_verbose(cmdLine, g_MAX11131_device.CSCAN1);
-            cmdLine.serial().printf("0x%4.4x", (g_MAX11131_device.SAMPLESET & 0xFFFF));
-            MAX11131_print_register_verbose(cmdLine, g_MAX11131_device.SAMPLESET);
-            //
-            // VERIFY: print shadow SAMPLESET pattern entry
-            int entryIndex;
-            for (entryIndex = 0; entryIndex < g_MAX11131_device.enabledChannelsPatternLength_1_256;
-                 entryIndex += 4)
-            {
-                uint16_t pack4channels = 0;
-                pack4channels |= (((g_MAX11131_device.enabledChannelsPattern[entryIndex + 0]) & 0x0F) << 12);
-                if ((entryIndex + 1) < g_MAX11131_device.enabledChannelsPatternLength_1_256) {
-                    pack4channels |= (((g_MAX11131_device.enabledChannelsPattern[entryIndex + 1]) & 0x0F) << 8);
-                }
-                if ((entryIndex + 2) < g_MAX11131_device.enabledChannelsPatternLength_1_256) {
-                    pack4channels |= (((g_MAX11131_device.enabledChannelsPattern[entryIndex + 2]) & 0x0F) << 4);
-                }
-                if ((entryIndex + 3) < g_MAX11131_device.enabledChannelsPatternLength_1_256) {
-                    pack4channels |= ((g_MAX11131_device.enabledChannelsPattern[entryIndex + 3]) & 0x0F);
-                }
-                //~ SPIwrite16bits(pack4channels);
-                cmdLine.serial().printf("       0x%4.4x", (pack4channels & 0xFFFF));
-                // decode SAMPLESET channel select pattern
-                cmdLine.serial().printf(" SampleSet Entry: AIN%d AIN%d AIN%d AIN%d\r\n",
-                                        ((pack4channels >> 12) & 0x000F),
-                                        ((pack4channels >> 8) & 0x000F),
-                                        ((pack4channels >> 4) & 0x000F),
-                                        ((pack4channels      ) & 0x000F)
-                                        );
-            }
-            //cmdLine.serial().printf("  SAMPLESET enabledChannelsPattern:{ ");
-            //int index;
-            //for (index = 0; index < g_MAX11131_device.enabledChannelsPatternLength_1_256; index++)
-            //{
-            //  //~ cmdLine.serial().printf( ((g_enabledChannelsPattern[index] >> 4) & 0x000F), DEC);
-            //  //~ cmdLine.serial().printf(" ");
-            //  cmdLine.serial().printf("AIN");
-            //  cmdLine.serial().printf( ((g_MAX11131_device.enabledChannelsPattern[index]) & 0x000F), DEC);
-            //  cmdLine.serial().printf(" ");
-            //}
-            //cmdLine.serial().printf("}");
-            //
-            // Menu @) print MAX11131 configuration AND g_MAX11131_device globals
-            //
-            cmdLine.serial().printf("SPI_MOSI_Semantic=%d\r\n", (g_MAX11131_device.SPI_MOSI_Semantic & 0xFFFF));
-            cmdLine.serial().printf("NumWords=%d\r\n", (g_MAX11131_device.NumWords & 0xFFFF));
-            cmdLine.serial().printf("isExternalClock=%d\r\n", (g_MAX11131_device.isExternalClock & 0xFFFF));
-            cmdLine.serial().printf("ScanMode=%d\r\n", (g_MAX11131_device.ScanMode & 0xFFFF));
-            cmdLine.serial().printf("channelNumber_0_15=%d\r\n",
-                                    (g_MAX11131_device.channelNumber_0_15 & 0xFFFF));
-            cmdLine.serial().printf("PowerManagement_0_2=%d\r\n",
-                                    (g_MAX11131_device.PowerManagement_0_2 & 0xFFFF));
-            cmdLine.serial().printf("chan_id_0_1=%d\r\n", (g_MAX11131_device.chan_id_0_1 & 0xFFFF));
-            cmdLine.serial().printf("average_0_4_8_16_32=%d\r\n",
-                                    (g_MAX11131_device.average_0_4_8_16_32 & 0xFFFF));
-            cmdLine.serial().printf("nscan_4_8_12_16=%d\r\n", (g_MAX11131_device.nscan_4_8_12_16 & 0xFFFF));
-            cmdLine.serial().printf("swcnv_0_1=%d\r\n", (g_MAX11131_device.swcnv_0_1 & 0xFFFF));
-            cmdLine.serial().printf("enabledChannelsMask=0x%4.4x\r\n",
-                                    (g_MAX11131_device.enabledChannelsMask & 0xFFFF));
-            //
-            cmdLine.serial().printf("VRef=%5.3fV\r\n", g_MAX11131_device.VRef);
-            // dtostrf width and precision: 3.3V / 1024 LSB = 0.00322265625 volts per LSB
-            //
-            return true; // command was handled by MAX11131
-        }
-            //case '&':
-            //{
-            //    // TODO: cmdLine.serial().printf("\r\n & -- MAX11131_Example_ScanManual");
-            //}
+                case 'B': // (nested inside case 'I')
+                {
+                    // test menu command 'IB' handler:
+                    // helpString='IB ch=? -- Reconfigure_DifferentialBipolarFSVref'
+                    // CMD_='None'
+                    // CommandName='Reconfigure_DifferentialBipolarFSVref'
+                    // CommandParamIn='int channel_0_15'
+                    // CommandReturnType='void'
+                    // @Pre=''
+                    // @Param[in]=''
+                    // @Param[out]=''
+                    // @Post=''
+                    // displayPost=''
+                    // @Return=''
+                    // parse argument list
+                    // parse argument int channel_0_15
+                    int channel_0_15 = 0; // --- g_MAX11131_device.__WARNING_no_match_for_argname_channel_0_15_in_MAX11131_device_t__; // default to global property value
+                    if (cmdLine.parse_int_dec("channel_0_15", channel_0_15))
+                    {
+                        // g_MAX11131_device.__WARNING_no_match_for_argname_channel_0_15_in_MAX11131_device_t__ = channel_0_15; // update global property value
+                    }
+                    // "ch" is an alias for argument "channel_0_15"
+                    if (cmdLine.parse_int_dec("ch", channel_0_15))
+                    {
+                        // g_MAX11131_device.__WARNING_no_match_for_argname_channel_0_15_in_MAX11131_device_t__ = channel_0_15; // update global property value
+                    }
+                    // print arguments
+                    cmdLine.serial().printf("Reconfigure_DifferentialBipolarFSVref");
+                    cmdLine.serial().printf(" channel_0_15=%d", channel_0_15);
+                    cmdLine.serial().printf("\r\n");
+                    // call function Reconfigure_DifferentialBipolarFSVref(channel_0_15)
+                    g_MAX11131_device.Reconfigure_DifferentialBipolarFSVref(channel_0_15);
+                    return true; // command handled by MAX11131
+                } // end nested case 'IB'
+                break;
+                case 'R': // (nested inside case 'I')
+                {
+                    // test menu command 'IR' handler:
+                    // helpString='IR ch=? -- Reconfigure_DifferentialBipolarFS2Vref'
+                    // CMD_='None'
+                    // CommandName='Reconfigure_DifferentialBipolarFS2Vref'
+                    // CommandParamIn='int channel_0_15'
+                    // CommandReturnType='void'
+                    // @Pre=''
+                    // @Param[in]=''
+                    // @Param[out]=''
+                    // @Post=''
+                    // displayPost=''
+                    // @Return=''
+                    // parse argument list
+                    // parse argument int channel_0_15
+                    int channel_0_15 = 0; // --- g_MAX11131_device.__WARNING_no_match_for_argname_channel_0_15_in_MAX11131_device_t__; // default to global property value
+                    if (cmdLine.parse_int_dec("channel_0_15", channel_0_15))
+                    {
+                        // g_MAX11131_device.__WARNING_no_match_for_argname_channel_0_15_in_MAX11131_device_t__ = channel_0_15; // update global property value
+                    }
+                    // "ch" is an alias for argument "channel_0_15"
+                    if (cmdLine.parse_int_dec("ch", channel_0_15))
+                    {
+                        // g_MAX11131_device.__WARNING_no_match_for_argname_channel_0_15_in_MAX11131_device_t__ = channel_0_15; // update global property value
+                    }
+                    // print arguments
+                    cmdLine.serial().printf("Reconfigure_DifferentialBipolarFS2Vref");
+                    cmdLine.serial().printf(" channel_0_15=%d", channel_0_15);
+                    cmdLine.serial().printf("\r\n");
+                    // call function Reconfigure_DifferentialBipolarFS2Vref(channel_0_15)
+                    g_MAX11131_device.Reconfigure_DifferentialBipolarFS2Vref(channel_0_15);
+                    return true; // command handled by MAX11131
+                } // end nested case 'IR'
+                break;
+                case 'S': // (nested inside case 'I')
+                {
+                    // test menu command 'IS' handler:
+                    // helpString='IS ch=? -- Reconfigure_SingleEnded'
+                    // CMD_='None'
+                    // CommandName='Reconfigure_SingleEnded'
+                    // CommandParamIn='int channel_0_15'
+                    // CommandReturnType='void'
+                    // @Pre=''
+                    // @Param[in]=''
+                    // @Param[out]=''
+                    // @Post=''
+                    // displayPost=''
+                    // @Return=''
+                    // parse argument list
+                    // parse argument int channel_0_15
+                    int channel_0_15 = 0; // --- g_MAX11131_device.__WARNING_no_match_for_argname_channel_0_15_in_MAX11131_device_t__; // default to global property value
+                    if (cmdLine.parse_int_dec("channel_0_15", channel_0_15))
+                    {
+                        // g_MAX11131_device.__WARNING_no_match_for_argname_channel_0_15_in_MAX11131_device_t__ = channel_0_15; // update global property value
+                    }
+                    // "ch" is an alias for argument "channel_0_15"
+                    if (cmdLine.parse_int_dec("ch", channel_0_15))
+                    {
+                        // g_MAX11131_device.__WARNING_no_match_for_argname_channel_0_15_in_MAX11131_device_t__ = channel_0_15; // update global property value
+                    }
+                    // print arguments
+                    cmdLine.serial().printf("Reconfigure_SingleEnded");
+                    cmdLine.serial().printf(" channel_0_15=%d", channel_0_15);
+                    cmdLine.serial().printf("\r\n");
+                    // call function Reconfigure_SingleEnded(channel_0_15)
+                    g_MAX11131_device.Reconfigure_SingleEnded(channel_0_15);
+                    return true; // command handled by MAX11131
+                } // end nested case 'IS'
+                break;
+                case 'U': // (nested inside case 'I')
+                {
+                    // test menu command 'IU' handler:
+                    // helpString='IU ch=? -- Reconfigure_DifferentialUnipolar'
+                    // CMD_='None'
+                    // CommandName='Reconfigure_DifferentialUnipolar'
+                    // CommandParamIn='int channel_0_15'
+                    // CommandReturnType='void'
+                    // @Pre=''
+                    // @Param[in]=''
+                    // @Param[out]=''
+                    // @Post=''
+                    // displayPost=''
+                    // @Return=''
+                    // parse argument list
+                    // parse argument int channel_0_15
+                    int channel_0_15 = 0; // --- g_MAX11131_device.__WARNING_no_match_for_argname_channel_0_15_in_MAX11131_device_t__; // default to global property value
+                    if (cmdLine.parse_int_dec("channel_0_15", channel_0_15))
+                    {
+                        // g_MAX11131_device.__WARNING_no_match_for_argname_channel_0_15_in_MAX11131_device_t__ = channel_0_15; // update global property value
+                    }
+                    // "ch" is an alias for argument "channel_0_15"
+                    if (cmdLine.parse_int_dec("ch", channel_0_15))
+                    {
+                        // g_MAX11131_device.__WARNING_no_match_for_argname_channel_0_15_in_MAX11131_device_t__ = channel_0_15; // update global property value
+                    }
+                    // print arguments
+                    cmdLine.serial().printf("Reconfigure_DifferentialUnipolar");
+                    cmdLine.serial().printf(" channel_0_15=%d", channel_0_15);
+                    cmdLine.serial().printf("\r\n");
+                    // call function Reconfigure_DifferentialUnipolar(channel_0_15)
+                    g_MAX11131_device.Reconfigure_DifferentialUnipolar(channel_0_15);
+                    return true; // command handled by MAX11131
+                } // end nested case 'IU'
+                break;
+            } // end nested switch (cmdLine[1]) inside case 'I'
             break;
-        case '~':     // TODO: IGNORE_AT_COMMANDS -- ignore ~~~ modem command
-        {
-            // TODO: '~' is not recommended for menu commands, interferes with ssh
-#if IGNORE_AT_COMMANDS
-# if HAS_DAPLINK_SERIAL
-            cmdLine_DAPLINKserial.serial().printf("\r\n ignore AT command \"%s\"\r\n", cmdLine.str());
-# endif // HAS_DAPLINK_SERIAL
-#endif // IGNORE_AT_COMMANDS
-        }
-        break;
-        case '+':     // TODO: IGNORE_AT_COMMANDS -- ignore +++ modem command
-        {
-#if IGNORE_AT_COMMANDS
-# if HAS_DAPLINK_SERIAL
-            cmdLine_DAPLINKserial.serial().printf("\r\n ignore AT command \"%s\"\r\n", cmdLine.str());
-# endif // HAS_DAPLINK_SERIAL
-#endif // IGNORE_AT_COMMANDS
-        }
-        break;
+        } // end case 'I'
     } // end switch (cmdLine[0])
-    return false; // command not handled
+    return false; // command not handled by MAX11131
 } // end bool MAX11131_menu_onEOLcommandParser(CmdLine & cmdLine)