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

Dependencies:   MaximTinyTester CmdLine MAX541 USBDevice

Files at this revision

API Documentation at this revision

Comitter:
whismanoid
Date:
Tue Feb 11 09:01:20 2020 +0000
Parent:
52:607010f0c54e
Child:
54:26a973c5dac4
Commit message:
enable SPI commands

Changed in this revision

MAX11043/MAX11043.cpp Show annotated file Show diff for this revision Revisions of this file
MAX11043/MAX11043.h Show annotated file Show diff for this revision Revisions of this file
Test_Main_MAX11043.cpp Show annotated file Show diff for this revision Revisions of this file
Test_Menu_MAX11043.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/MAX11043/MAX11043.cpp	Tue Feb 11 01:16:34 2020 +0000
+++ b/MAX11043/MAX11043.cpp	Tue Feb 11 09:01:20 2020 +0000
@@ -1,934 +1,933 @@
-// /*******************************************************************************
-// * Copyright (C) 2020 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"),
-// * to deal in the Software without restriction, including without limitation
-// * the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// * and/or sell copies of the Software, and to permit persons to whom the
-// * Software is furnished to do so, subject to the following conditions:
-// *
-// * The above copyright notice and this permission notice shall be included
-// * in all copies or substantial portions of the Software.
-// *
-// * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-// * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
-// * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-// * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-// * OTHER DEALINGS IN THE SOFTWARE.
-// *
-// * Except as contained in this notice, the name of Maxim Integrated
-// * Products, Inc. shall not be used except as stated in the Maxim Integrated
-// * Products, Inc. Branding Policy.
-// *
-// * The mere transfer of this software does not imply any licenses
-// * of trade secrets, proprietary technology, copyrights, patents,
-// * trademarks, maskwork rights, or any other form of intellectual
-// * property whatsoever. Maxim Integrated Products, Inc. retains all
-// * ownership rights.
-// *******************************************************************************
-// */
-// *********************************************************************
-// @file MAX11043.cpp
-// *********************************************************************
-// Device Driver file
-// DO NOT EDIT; except areas designated "CUSTOMIZE". Automatically generated file.
-// generated by XMLSystemOfDevicesToMBED.py
-// System Name = ExampleSystem
-// System Description = Device driver example
-
-#include "MAX11043.h"
-
-// Device Name = MAX11043
-// Device Description = 200ksps, Low-Power, Serial SPI 24-Bit, 4-Channel, Differential/Single-Ended Input, Simultaneous-Sampling SD ADC
-// Device DeviceBriefDescription = 24-bit 200ksps Delta-Sigma ADC
-// Device Manufacturer = Maxim Integrated
-// Device PartNumber = MAX11043ATL+
-// Device RegValue_Width = DataWidth16bit_HL
-//
-// ADC MaxOutputDataRate = 200ksps
-// ADC NumChannels = 4
-// ADC ResolutionBits = 24
-//
-// SPI CS = ActiveLow
-// SPI FrameStart = CS
-// SPI CPOL = 0
-// SPI CPHA = 0
-// SPI MOSI and MISO Data are both stable on Rising edge of SCLK
-// SPI SCLK Idle Low
-// SPI SCLKMaxMHz = 40
-// SPI SCLKMinMHz = 0
-//
-// InputPin Name = CONVRUN
-// InputPin Description = CONVRUN (digital input). Convert Run. Drive high to start continuous conversions on all 4 channels. The device is idle when
-// CONVRUN is low.
-// InputPin Function = Configuration
-//
-// InputPin Name = SHDN
-// InputPin Description = Shutdown (digital input). Active-High Shutdown Input. Drive high to shut down the MAX11043.
-// InputPin Function = Configuration
-//
-// InputPin Name = DACSTEP
-// InputPin Description = DACSTEP (digital input). DAC Step Input. Drive high to move the DAC output in the direction of UP/DWN on the next rising
-// edge of the system clock.
-// InputPin Function = Configuration
-//
-// InputPin Name = UP/DWN#
-// InputPin Description = UP/DWN# (digital input). DAC Step Direction Select. Drive high to step up, drive low to step down when DACSTEP is toggled.
-// InputPin Function = Configuration
-//
-// OutputPin Name = EOC
-// OutputPin Description = End of Conversion Output. Active-Low End-of-Conversion Indicator. EOC asserts low to indicate that new data is ready.
-// OutputPin Function = Event
-//
-
-// CODE GENERATOR: class constructor definition
-MAX11043::MAX11043(SPI &spi, DigitalOut &cs_pin, // SPI interface
-                 // CODE GENERATOR: class constructor definition gpio InputPin pins
-                 DigitalOut &CONVRUN_pin, // Digital Configuration Input to MAX11043 device
-                 DigitalOut &SHDN_pin, // Digital Configuration Input to MAX11043 device
-                 DigitalOut &DACSTEP_pin, // Digital Configuration Input to MAX11043 device
-                 DigitalOut &UP_slash_DWNb_pin, // Digital Configuration Input to MAX11043 device
-                 // CODE GENERATOR: class constructor definition gpio OutputPin pins
-                 DigitalIn &EOC_pin, // Digital Event Output from MAX11043 device
-                 // CODE GENERATOR: class constructor definition ic_variant
-                 MAX11043_ic_t ic_variant)
-    // CODE GENERATOR: class constructor initializer list
-    : m_spi(spi), m_cs_pin(cs_pin), // SPI interface
-    // CODE GENERATOR: class constructor initializer list gpio InputPin pins
-    m_CONVRUN_pin(CONVRUN_pin), // Digital Configuration Input to MAX11043 device
-    m_SHDN_pin(SHDN_pin), // Digital Configuration Input to MAX11043 device
-    m_DACSTEP_pin(DACSTEP_pin), // Digital Configuration Input to MAX11043 device
-    m_UP_slash_DWNb_pin(UP_slash_DWNb_pin), // Digital Configuration Input to MAX11043 device
-    // CODE GENERATOR: class constructor initializer list gpio OutputPin pins
-    m_EOC_pin(EOC_pin), // Digital Event Output from MAX11043 device
-    // CODE GENERATOR: class constructor initializer list ic_variant
-    m_ic_variant(ic_variant)
-{
-    // CODE GENERATOR: class constructor definition SPI interface initialization
-    //
-    // SPI CS = ActiveLow
-    // SPI FrameStart = CS
-    m_SPI_cs_state = 1;
-    m_cs_pin = m_SPI_cs_state;
-
-    // SPI CPOL = 0
-    // SPI CPHA = 0
-    // SPI MOSI and MISO Data are both stable on Rising edge of SCLK
-    // SPI SCLK Idle Low
-    m_SPI_dataMode = 0; //SPI_MODE0; // CPOL=0,CPHA=0: Rising Edge stable; SCLK idle Low
-    m_spi.format(8,m_SPI_dataMode);         // int bits_must_be_8, int mode=0_3 CPOL=0,CPHA=0
-
-    // SPI SCLKMaxMHz = 40
-    // SPI SCLKMinMHz = 0
-    //#define SPI_SCLK_Hz 48000000 // 48MHz
-    //#define SPI_SCLK_Hz 24000000 // 24MHz
-    //#define SPI_SCLK_Hz 12000000 // 12MHz
-    //#define SPI_SCLK_Hz 6000000 // 6MHz
-    //#define SPI_SCLK_Hz 4000000 // 4MHz
-    //#define SPI_SCLK_Hz 2000000 // 2MHz
-    //#define SPI_SCLK_Hz 1000000 // 1MHz
-    m_SPI_SCLK_Hz = 12000000; // 12MHz; MAX11043 limit is 40MHz
-    m_spi.frequency(m_SPI_SCLK_Hz);
-
-    //
-    // CODE GENERATOR: class constructor definition gpio InputPin (Input to device) initialization
-    //
-    // CONVRUN Configuration Input to MAX11043 device
-    m_CONVRUN_pin = 1; // output logic high -- initial value in constructor
-    //
-    // SHDN Configuration Input to MAX11043 device
-    m_SHDN_pin = 1; // output logic high -- initial value in constructor
-    //
-    // DACSTEP Configuration Input to MAX11043 device
-    m_DACSTEP_pin = 1; // output logic high -- initial value in constructor
-    //
-    // UP_slash_DWNb Configuration Input to MAX11043 device
-    m_UP_slash_DWNb_pin = 1; // output logic high -- initial value in constructor
-    //
-    // CODE GENERATOR: class constructor definition gpio OutputPin (Output from MAX11043 device) initialization
-    //
-    // EOC Event Output from device
-}
-
-// CODE GENERATOR: class destructor definition
-MAX11043::~MAX11043()
-{
-    // do nothing
-}
-
-// CODE GENERATOR: spi_frequency setter definition
-/// set SPI SCLK frequency
-void MAX11043::spi_frequency(int spi_sclk_Hz)
-{
-    m_SPI_SCLK_Hz = spi_sclk_Hz;
-    m_spi.frequency(m_SPI_SCLK_Hz);
-}
-
-// CODE GENERATOR: omit global g_MAX11043_device
-// CODE GENERATOR: extern function declarations
-// CODE GENERATOR: extern function requirement MAX11043::SPIoutputCS
-// Assert SPI Chip Select
-// SPI chip-select for MAX11043
-//
-void MAX11043::SPIoutputCS(int isLogicHigh)
-{
-    // CODE GENERATOR: extern function definition for function SPIoutputCS
-    // CODE GENERATOR: extern function definition for standard SPI interface function SPIoutputCS(int isLogicHigh)
-    m_SPI_cs_state = isLogicHigh;
-    m_cs_pin = m_SPI_cs_state;
-}
-
-// CODE GENERATOR: extern function requirement MAX11043::SPIwrite16bits
-// SPI write 16 bits
-// SPI interface to MAX11043 shift 16 bits mosiData into MAX11043 DIN
-//
-void MAX11043::SPIwrite16bits(int16_t mosiData16)
-{
-    // CODE GENERATOR: extern function definition for function SPIwrite16bits
-    // TODO1: CODE GENERATOR: extern function definition for standard SPI interface function SPIwrite16bits(int16_t mosiData16)
-    size_t byteCount = 2;
-    static char mosiData[2];
-    static char misoData[2];
-    mosiData[0] = (char)((mosiData16 >> 8) & 0xFF); // MSByte
-    mosiData[1] = (char)((mosiData16 >> 0) & 0xFF); // LSByte
-    //
-    // Arduino: begin critical section: noInterrupts() masks all interrupt sources; end critical section with interrupts()
-    //~ noInterrupts();
-    //
-    //~ digitalWrite(Scope_Trigger_Pin, LOW); // diagnostic Scope_Trigger_Pin
-    //
-    unsigned int numBytesTransferred = m_spi.write(mosiData, byteCount, misoData, byteCount);
-    //~ m_spi.transfer(mosiData8_FF0000);
-    //~ m_spi.transfer(mosiData16_00FF00);
-    //~ m_spi.transfer(mosiData16_0000FF);
-    //
-    //~ digitalWrite(Scope_Trigger_Pin, HIGH); // diagnostic Scope_Trigger_Pin
-    //
-    // Arduino: begin critical section: noInterrupts() masks all interrupt sources; end critical section with interrupts()
-    //~ interrupts();
-    // Optional Diagnostic function to print SPI transactions
-    if (onSPIprint)
-    {
-        onSPIprint(byteCount, (uint8_t*)mosiData, (uint8_t*)misoData);
-    }
-    //
-    // VERIFY: SPIwrite24bits print diagnostic information
-    //cmdLine.serial().printf(" MOSI->"));
-    //cmdLine.serial().printf(" 0x"));
-    //Serial.print( (mosiData8_FF0000 & 0xFF), HEX);
-    //cmdLine.serial().printf(" 0x"));
-    //Serial.print( (mosiData16_00FF00 & 0xFF), HEX);
-    //cmdLine.serial().printf(" 0x"));
-    //Serial.print( (mosiData16_0000FF & 0xFF), HEX);
-    // hex dump mosiData[0..byteCount-1]
-#if 0 // HAS_MICROUSBSERIAL
-    cmdLine_microUSBserial.serial().printf("\r\nSPI");
-    if (byteCount > 7) {
-        cmdLine_microUSBserial.serial().printf(" byteCount:%d", byteCount);
-    }
-    cmdLine_microUSBserial.serial().printf(" MOSI->");
-    for (unsigned int byteIndex = 0; byteIndex < byteCount; byteIndex++)
-    {
-        cmdLine_microUSBserial.serial().printf(" 0x%2.2X", mosiData[byteIndex]);
-    }
-    // hex dump misoData[0..byteCount-1]
-    cmdLine_microUSBserial.serial().printf("  MISO<-");
-    for (unsigned int byteIndex = 0; byteIndex < numBytesTransferred; byteIndex++)
-    {
-        cmdLine_microUSBserial.serial().printf(" 0x%2.2X", misoData[byteIndex]);
-    }
-    cmdLine_microUSBserial.serial().printf(" ");
-#endif
-#if 0 // HAS_DAPLINK_SERIAL
-    cmdLine_DAPLINKserial.serial().printf("\r\nSPI");
-    if (byteCount > 7) {
-        cmdLine_DAPLINKserial.serial().printf(" byteCount:%d", byteCount);
-    }
-    cmdLine_DAPLINKserial.serial().printf(" MOSI->");
-    for (unsigned int byteIndex = 0; byteIndex < byteCount; byteIndex++)
-    {
-        cmdLine_DAPLINKserial.serial().printf(" 0x%2.2X", mosiData[byteIndex]);
-    }
-    // hex dump misoData[0..byteCount-1]
-    cmdLine_DAPLINKserial.serial().printf("  MISO<-");
-    for (unsigned int byteIndex = 0; byteIndex < numBytesTransferred; byteIndex++)
-    {
-        cmdLine_DAPLINKserial.serial().printf(" 0x%2.2X", misoData[byteIndex]);
-    }
-    cmdLine_DAPLINKserial.serial().printf(" ");
-#endif
-    // VERIFY: DIAGNOSTIC: print MAX5715 device register write
-    // TODO: MAX5715_print_register_verbose(mosiData8_FF0000, mosiData16_00FFFF);
-    // TODO: print_verbose_SPI_diagnostic(mosiData16_FF00, mosiData16_00FF, misoData16_FF00, misoData16_00FF);
-    //
-    // int misoData16 = (misoData16_FF00 << 8) | misoData16_00FF;
-    // return misoData16;
-}
-
-// CODE GENERATOR: extern function requirement MAX11043::SPIreadWrite16bits
-// SPI read and write 16 bits
-// SPI interface to MAX11043 shift 16 bits mosiData16 into MAX11043 DIN
-// while simultaneously capturing 16 bits miso data from MAX11043 DOUT
-//
-int16_t MAX11043::SPIreadWrite16bits(int16_t mosiData16)
-{
-    // CODE GENERATOR: extern function definition for function SPIreadWrite16bits
-    // TODO1: CODE GENERATOR: extern function definition for standard SPI interface function SPIreadWrite16bits(int16_t mosiData16)
-    size_t byteCount = 2;
-    static char mosiData[2];
-    static char misoData[2];
-    mosiData[0] = (char)((mosiData16 >> 8) & 0xFF); // MSByte
-    mosiData[1] = (char)((mosiData16 >> 0) & 0xFF); // LSByte
-    //
-    // Arduino: begin critical section: noInterrupts() masks all interrupt sources; end critical section with interrupts()
-    //~ noInterrupts();
-    //
-    //~ digitalWrite(Scope_Trigger_Pin, LOW); // diagnostic Scope_Trigger_Pin
-    //
-    unsigned int numBytesTransferred = m_spi.write(mosiData, byteCount, misoData, byteCount);
-    //~ m_spi.transfer(mosiData8_FF0000);
-    //~ m_spi.transfer(mosiData16_00FF00);
-    //~ m_spi.transfer(mosiData16_0000FF);
-    //
-    //~ digitalWrite(Scope_Trigger_Pin, HIGH); // diagnostic Scope_Trigger_Pin
-    //
-    // Arduino: begin critical section: noInterrupts() masks all interrupt sources; end critical section with interrupts()
-    //~ interrupts();
-    // Optional Diagnostic function to print SPI transactions
-    if (onSPIprint)
-    {
-        onSPIprint(byteCount, (uint8_t*)mosiData, (uint8_t*)misoData);
-    }
-    //
-    // VERIFY: SPIwrite24bits print diagnostic information
-    //cmdLine.serial().printf(" MOSI->"));
-    //cmdLine.serial().printf(" 0x"));
-    //Serial.print( (mosiData8_FF0000 & 0xFF), HEX);
-    //cmdLine.serial().printf(" 0x"));
-    //Serial.print( (mosiData16_00FF00 & 0xFF), HEX);
-    //cmdLine.serial().printf(" 0x"));
-    //Serial.print( (mosiData16_0000FF & 0xFF), HEX);
-    // hex dump mosiData[0..byteCount-1]
-#if 0 // HAS_MICROUSBSERIAL
-    cmdLine_microUSBserial.serial().printf("\r\nSPI");
-    if (byteCount > 7) {
-        cmdLine_microUSBserial.serial().printf(" byteCount:%d", byteCount);
-    }
-    cmdLine_microUSBserial.serial().printf(" MOSI->");
-    for (unsigned int byteIndex = 0; byteIndex < byteCount; byteIndex++)
-    {
-        cmdLine_microUSBserial.serial().printf(" 0x%2.2X", mosiData[byteIndex]);
-    }
-    // hex dump misoData[0..byteCount-1]
-    cmdLine_microUSBserial.serial().printf("  MISO<-");
-    for (unsigned int byteIndex = 0; byteIndex < numBytesTransferred; byteIndex++)
-    {
-        cmdLine_microUSBserial.serial().printf(" 0x%2.2X", misoData[byteIndex]);
-    }
-    cmdLine_microUSBserial.serial().printf(" ");
-#endif
-#if 0 // HAS_DAPLINK_SERIAL
-    cmdLine_DAPLINKserial.serial().printf("\r\nSPI");
-    if (byteCount > 7) {
-        cmdLine_DAPLINKserial.serial().printf(" byteCount:%d", byteCount);
-    }
-    cmdLine_DAPLINKserial.serial().printf(" MOSI->");
-    for (unsigned int byteIndex = 0; byteIndex < byteCount; byteIndex++)
-    {
-        cmdLine_DAPLINKserial.serial().printf(" 0x%2.2X", mosiData[byteIndex]);
-    }
-    // hex dump misoData[0..byteCount-1]
-    cmdLine_DAPLINKserial.serial().printf("  MISO<-");
-    for (unsigned int byteIndex = 0; byteIndex < numBytesTransferred; byteIndex++)
-    {
-        cmdLine_DAPLINKserial.serial().printf(" 0x%2.2X", misoData[byteIndex]);
-    }
-    cmdLine_DAPLINKserial.serial().printf(" ");
-#endif
-    // VERIFY: DIAGNOSTIC: print MAX5715 device register write
-    // TODO: MAX5715_print_register_verbose(mosiData8_FF0000, mosiData16_00FFFF);
-    // TODO: print_verbose_SPI_diagnostic(mosiData16_FF00, mosiData16_00FF, misoData16_FF00, misoData16_00FF);
-    //
-    //int misoData16 = (misoData16_FF00 << 8) | misoData16_00FF;
-    int misoData16 = (misoData[0] << 8) | misoData[1];
-    return misoData16;
-}
-
-// CODE GENERATOR: extern function requirement MAX11043::SPIreadWrite32bits
-// SPI read and write 32 bits
-// SPI interface to MAX11043 shift 32 bits mosiData into MAX11043 DIN
-// while simultaneously capturing 32 bits miso data from MAX11043 DOUT
-//
-int32_t MAX11043::SPIreadWrite32bits(int32_t mosiData32)
-{
-    // CODE GENERATOR: extern function definition for function SPIreadWrite32bits
-    // TODO1: CODE GENERATOR: extern function definition for standard SPI interface function SPIreadWrite32bits(int32_t mosiData32)
-    size_t byteCount = 4;
-    static char mosiData[4];
-    static char misoData[4];
-    mosiData[0] = (char)((mosiData32 >> 24) & 0xFF); // MSByte
-    mosiData[1] = (char)((mosiData32 >> 16) & 0xFF);
-    mosiData[2] = (char)((mosiData32 >>  8) & 0xFF);
-    mosiData[3] = (char)((mosiData32 >>  0) & 0xFF); // LSByte
-    //
-    // Arduino: begin critical section: noInterrupts() masks all interrupt sources; end critical section with interrupts()
-    //~ noInterrupts();
-    //
-    //~ digitalWrite(Scope_Trigger_Pin, LOW); // diagnostic Scope_Trigger_Pin
-    //
-    unsigned int numBytesTransferred = m_spi.write(mosiData, byteCount, misoData, byteCount);
-    //~ m_spi.transfer(mosiData8_FF0000);
-    //~ m_spi.transfer(mosiData16_00FF00);
-    //~ m_spi.transfer(mosiData16_0000FF);
-    //
-    //~ digitalWrite(Scope_Trigger_Pin, HIGH); // diagnostic Scope_Trigger_Pin
-    //
-    // Arduino: begin critical section: noInterrupts() masks all interrupt sources; end critical section with interrupts()
-    //~ interrupts();
-    // Optional Diagnostic function to print SPI transactions
-    if (onSPIprint)
-    {
-        onSPIprint(byteCount, (uint8_t*)mosiData, (uint8_t*)misoData);
-    }
-    //
-    // VERIFY: SPIwrite24bits print diagnostic information
-    //cmdLine.serial().printf(" MOSI->"));
-    //cmdLine.serial().printf(" 0x"));
-    //Serial.print( (mosiData8_FF0000 & 0xFF), HEX);
-    //cmdLine.serial().printf(" 0x"));
-    //Serial.print( (mosiData16_00FF00 & 0xFF), HEX);
-    //cmdLine.serial().printf(" 0x"));
-    //Serial.print( (mosiData16_0000FF & 0xFF), HEX);
-    // hex dump mosiData[0..byteCount-1]
-#if 0 // HAS_MICROUSBSERIAL
-    cmdLine_microUSBserial.serial().printf("\r\nSPI");
-    if (byteCount > 7) {
-        cmdLine_microUSBserial.serial().printf(" byteCount:%d", byteCount);
-    }
-    cmdLine_microUSBserial.serial().printf(" MOSI->");
-    for (unsigned int byteIndex = 0; byteIndex < byteCount; byteIndex++)
-    {
-        cmdLine_microUSBserial.serial().printf(" 0x%2.2X", mosiData[byteIndex]);
-    }
-    // hex dump misoData[0..byteCount-1]
-    cmdLine_microUSBserial.serial().printf("  MISO<-");
-    for (unsigned int byteIndex = 0; byteIndex < numBytesTransferred; byteIndex++)
-    {
-        cmdLine_microUSBserial.serial().printf(" 0x%2.2X", misoData[byteIndex]);
-    }
-    cmdLine_microUSBserial.serial().printf(" ");
-#endif
-#if 0 // HAS_DAPLINK_SERIAL
-    cmdLine_DAPLINKserial.serial().printf("\r\nSPI");
-    if (byteCount > 7) {
-        cmdLine_DAPLINKserial.serial().printf(" byteCount:%d", byteCount);
-    }
-    cmdLine_DAPLINKserial.serial().printf(" MOSI->");
-    for (unsigned int byteIndex = 0; byteIndex < byteCount; byteIndex++)
-    {
-        cmdLine_DAPLINKserial.serial().printf(" 0x%2.2X", mosiData[byteIndex]);
-    }
-    // hex dump misoData[0..byteCount-1]
-    cmdLine_DAPLINKserial.serial().printf("  MISO<-");
-    for (unsigned int byteIndex = 0; byteIndex < numBytesTransferred; byteIndex++)
-    {
-        cmdLine_DAPLINKserial.serial().printf(" 0x%2.2X", misoData[byteIndex]);
-    }
-    cmdLine_DAPLINKserial.serial().printf(" ");
-#endif
-    // VERIFY: DIAGNOSTIC: print MAX5715 device register write
-    // TODO: MAX5715_print_register_verbose(mosiData8_FF0000, mosiData16_00FFFF);
-    // TODO: print_verbose_SPI_diagnostic(mosiData16_FF00, mosiData16_00FF, misoData16_FF00, misoData16_00FF);
-    //
-    //int misoData32 = (misoData32_FF000000 << 24) | (misoData32_FF0000 << 16) | (misoData32_0000FF00 << 8) | misoData32_000000FF;
-    int misoData32 = (misoData[0] << 24) | (misoData[1] << 16) | (misoData[2] << 8) | misoData[3];
-    return misoData32;
-}
-
-// TODO1: CODE GENERATOR: extern function GPIOoutputSHDN alias SHDNoutputValue
-// CODE GENERATOR: extern function requirement MAX11043::SHDNoutputValue
-// Assert MAX11043 SHDN pin : High = _____, Low = _____.
-//
-void MAX11043::SHDNoutputValue(int isLogicHigh)
-{
-    // CODE GENERATOR: extern function definition for function SHDNoutputValue
-    // TODO1: CODE GENERATOR: extern function definition for gpio interface function SHDNoutputValue
-    // TODO1: CODE GENERATOR: gpio pin SHDN assuming member function m_SHDN_pin
-    // TODO1: CODE GENERATOR: gpio direction output
-    // m_SHDN_pin.output(); // only applicable to DigitalInOut
-    // TODO1: CODE GENERATOR: gpio function Value
-    m_SHDN_pin = isLogicHigh;
-}
-
-// TODO1: CODE GENERATOR: extern function GPIOoutputCONVRUN alias CONVRUNoutputValue
-// CODE GENERATOR: extern function requirement MAX11043::CONVRUNoutputValue
-// Assert MAX11043 CONVRUN pin : High = _____, Low = _____.
-//
-void MAX11043::CONVRUNoutputValue(int isLogicHigh)
-{
-    // CODE GENERATOR: extern function definition for function CONVRUNoutputValue
-    // TODO1: CODE GENERATOR: extern function definition for gpio interface function CONVRUNoutputValue
-    // TODO1: CODE GENERATOR: gpio pin CONVRUN assuming member function m_CONVRUN_pin
-    // TODO1: CODE GENERATOR: gpio direction output
-    // m_CONVRUN_pin.output(); // only applicable to DigitalInOut
-    // TODO1: CODE GENERATOR: gpio function Value
-    m_CONVRUN_pin = isLogicHigh;
-}
-
-// TODO1: CODE GENERATOR: extern function GPIOoutputDACSTEP alias DACSTEPoutputValue
-// CODE GENERATOR: extern function requirement MAX11043::DACSTEPoutputValue
-// Assert MAX11043 DACSTEP pin : High = _____, Low = _____.
-//
-void MAX11043::DACSTEPoutputValue(int isLogicHigh)
-{
-    // CODE GENERATOR: extern function definition for function DACSTEPoutputValue
-    // TODO1: CODE GENERATOR: extern function definition for gpio interface function DACSTEPoutputValue
-    // TODO1: CODE GENERATOR: gpio pin DACSTEP assuming member function m_DACSTEP_pin
-    // TODO1: CODE GENERATOR: gpio direction output
-    // m_DACSTEP_pin.output(); // only applicable to DigitalInOut
-    // TODO1: CODE GENERATOR: gpio function Value
-    m_DACSTEP_pin = isLogicHigh;
-}
-
-// TODO1: CODE GENERATOR: extern function GPIOoutputUP_slash_DWNb alias UP_slash_DWNboutputValue
-// CODE GENERATOR: extern function requirement MAX11043::UP_slash_DWNboutputValue
-// Assert MAX11043 UP_slash_DWNb pin : High = _____, Low = _____.
-//
-void MAX11043::UP_slash_DWNboutputValue(int isLogicHigh)
-{
-    // CODE GENERATOR: extern function definition for function UP_slash_DWNboutputValue
-    // TODO1: CODE GENERATOR: extern function definition for gpio interface function UP_slash_DWNboutputValue
-    // TODO1: CODE GENERATOR: gpio pin UP_slash_DWNb assuming member function m_UP_slash_DWNb_pin
-    // TODO1: CODE GENERATOR: gpio direction output
-    // m_UP_slash_DWNb_pin.output(); // only applicable to DigitalInOut
-    // TODO1: CODE GENERATOR: gpio function Value
-    m_UP_slash_DWNb_pin = isLogicHigh;
-}
-
-// CODE GENERATOR: extern function requirement MAX11043::EOCinputWaitUntilLow
-// Wait for MAX11043 EOC pin low, indicating end of conversion.
-// Required when using any of the InternalClock modes.
-//
-void MAX11043::EOCinputWaitUntilLow()
-{
-    // CODE GENERATOR: extern function definition for function EOCinputWaitUntilLow
-    // TODO1: CODE GENERATOR: extern function definition for gpio interface function EOCinputWaitUntilLow
-    // TODO1: CODE GENERATOR: gpio pin EOC assuming member function m_EOC_pin
-    // TODO1: CODE GENERATOR: gpio direction input
-    // m_EOC_pin.input(); // only applicable to DigitalInOut
-    // TODO1: CODE GENERATOR: gpio function WaitUntilLow
-    while (m_EOC_pin != 0)
-    {
-        // spinlock waiting for logic low pin state
-    }
-}
-
-// CODE GENERATOR: extern function requirement MAX11043::EOCinputValue
-// Return the status of the MAX11043 EOC pin.
-//
-int MAX11043::EOCinputValue()
-{
-    // CODE GENERATOR: extern function definition for function EOCinputValue
-    // TODO1: CODE GENERATOR: extern function definition for gpio interface function EOCinputValue
-    // TODO1: CODE GENERATOR: gpio pin EOC assuming member function m_EOC_pin
-    // TODO1: CODE GENERATOR: gpio direction input
-    // m_EOC_pin.input(); // only applicable to DigitalInOut
-    // TODO1: CODE GENERATOR: gpio function Value
-    return m_EOC_pin.read();
-}
-
-// CODE GENERATOR: class member function definitions
-//----------------------------------------
-// Menu item '!'
-// Initialize device
-// @return 1 on success; 0 on failure
-uint8_t MAX11043::Init(void)
-{
-    
-    //----------------------------------------
-    // TODO1: AC79 MAX11043 AIN0-AIN1 reference voltage, in Volts
-    VRef_xxxxxx = 2.500;
-    
-    //----------------------------------------
-    // shadow of register ctrl CMD_r000_1001_dddd_dddd_CTRL
-    ctrl = 0x01;
-    
-    //----------------------------------------
-    // set by Configure_PGA gain index register pga CMD_r000_1110_xxdd_xddd_PGA
-    pgaGain = 1;
-    
-    //----------------------------------------
-    // init (based on old EV kit GUI)
-    #warning "Not Implemented Yet: MAX11043::Init init..."
-    // bool bOpResult = false;
-    // String FWVersionString = "00";
-    // bool bDemoMode = true;
-    // int scan_resolution = 0;
-    // int scan_channels = 0;
-    // int scan_bits = 0;
-    // int sampleRateFactore = 0;
-    // double sampleRate = 0;
-    // unsigned long banks_requested = 0;
-    // bool bScanMode = 0;
-    
-    //----------------------------------------
-    // Device ID Validation
-    #warning "Not Implemented Yet: MAX11043::Init Device ID Validation..."
-    // const uint32_t part_id_expect = 0x000F02;
-    // uint32_t part_id_readback;
-    // RegRead(xxxxxxxxxxxxCMD_r001_0001_xxxx_xxxx_xxxx_xxxx_xxxx_xddd_PART_ID, &part_id_readback);
-    // if (part_id_readback != part_id_expect) return 0;
-    
-    //----------------------------------------
-    // write8 0x00 PD = 0x03 (Reset Registers; enter Standby mode)
-    // RegWrite(xxxxxxxxxxxCMD_r000_0000_xxxx_xxdd_PD, PD_11_Reset);
-    
-    //----------------------------------------
-    // write8 0x00 PD = 0x00 (NOP)
-    // RegWrite(xxxxxxxxxxxxCMD_r000_0000_xxxx_xxdd_PD, PD_00_Normal);
-    
-    //----------------------------------------
-    // success
-    return 1;
-}
-
-//----------------------------------------
-// Write a MAX11043 register.
-//
-// CMD_1aaa_aaaa_REGISTER_READ bit is cleared 0 indicating a write operation.
-//
-// MAX11043 register length can be determined by function RegSize.
-//
-// For 8-bit register size:
-//
-//     SPI 16-bit transfer
-//
-//     SPI MOSI = 0aaa_aaaa_dddd_dddd
-//
-//     SPI MISO = xxxx_xxxx_xxxx_xxxx
-//
-// For 16-bit register size:
-//
-//     SPI 24-bit or 32-bit transfer
-//
-//     SPI MOSI = 0aaa_aaaa_dddd_dddd_dddd_dddd
-//
-//     SPI MISO = xxxx_xxxx_xxxx_xxxx_xxxx_xxxx
-//
-// For 24-bit register size:
-//
-//     SPI 32-bit transfer
-//
-//     SPI MOSI = 0aaa_aaaa_dddd_dddd_dddd_dddd_dddd_dddd
-//
-//     SPI MISO = xxxx_xxxx_xxxx_xxxx_xxxx_xxxx_xxxx_xxxx
-//
-// @return 1 on success; 0 on failure
-uint8_t MAX11043::RegWrite(MAX11043_CMD_enum_t commandByte, uint32_t regData)
-{
-    
-    //----------------------------------------
-    // switch based on register address szie RegSize(commandByte)
-    //commandByte = (MAX11043_CMD_enum_t)((commandByte &~ CMD_0aaa_aa10_RdAddr_ReadAnyRegister) & 0xFF);
-    switch(RegSize(commandByte))
-    {
-        case 8:  // 8-bit register size
-            {
-                // SPI 16-bit transfer
-                // SPI MOSI = 0aaa_aaaa_dddd_dddd
-                // SPI MISO = xxxx_xxxx_xxxx_xxxx
-                int16_t mosiData16 = ((int16_t)commandByte << 8) | ((int16_t)regData & 0xFF);
-                SPIoutputCS(0);
-                SPIwrite16bits(mosiData16);
-                SPIoutputCS(1);
-            }
-            break;
-        case 16:  // 16-bit register size
-            #warning "Not Verified Yet: MAX11043::RegWrite 16-bit SPIreadWrite32bits"
-            {
-                // SPI 24-bit or 32-bit transfer
-                // SPI MOSI = 0aaa_aaaa_dddd_dddd_dddd_dddd
-                // SPI MISO = xxxx_xxxx_xxxx_xxxx_xxxx_xxxx
-                // SPI MOSI = 0aaa_aaaa_dddd_dddd_dddd_dddd_0000_0000
-                // SPI MISO = xxxx_xxxx_xxxx_xxxx_xxxx_xxxx_xxxx_xxxx
-                int32_t mosiData32 = ((int32_t)commandByte << 24) | (((int32_t)regData & 0xFFFF) << 8);
-                SPIoutputCS(0);
-                SPIreadWrite32bits(mosiData32);
-                SPIoutputCS(1);
-            }
-            break;
-        case 24:  // 24-bit register size
-            {
-                // SPI 32-bit transfer
-                // SPI MOSI = 0aaa_aaaa_dddd_dddd_dddd_dddd_dddd_dddd
-                // SPI MISO = xxxx_xxxx_xxxx_xxxx_xxxx_xxxx_xxxx_xxxx
-                int32_t mosiData32 = ((int32_t)commandByte << 24) | ((int32_t)regData & 0x00FFFFFF);
-                SPIoutputCS(0);
-                SPIreadWrite32bits(mosiData32);
-                SPIoutputCS(1);
-            }
-            break;
-    }
-    
-    //----------------------------------------
-    // success
-    return 1;
-}
-
-//----------------------------------------
-// Read an 8-bit MAX11043 register
-//
-// CMD_1aaa_aaaa_REGISTER_READ bit is set 1 indicating a read operation.
-//
-// MAX11043 register length can be determined by function RegSize.
-//
-// For 8-bit register size:
-//
-//     SPI 16-bit transfer
-//
-//     SPI MOSI = 1aaa_aaaa_0000_0000
-//
-//     SPI MISO = xxxx_xxxx_dddd_dddd
-//
-// For 16-bit register size:
-//
-//     SPI 24-bit or 32-bit transfer
-//
-//     SPI MOSI = 1aaa_aaaa_0000_0000_0000_0000
-//
-//     SPI MISO = xxxx_xxxx_dddd_dddd_dddd_dddd
-//
-// For 24-bit register size:
-//
-//     SPI 32-bit transfer
-//
-//     SPI MOSI = 1aaa_aaaa_0000_0000_0000_0000_0000_0000
-//
-//     SPI MISO = xxxx_xxxx_dddd_dddd_dddd_dddd_dddd_dddd
-//
-//
-// @return 1 on success; 0 on failure
-uint8_t MAX11043::RegRead(MAX11043_CMD_enum_t commandByte, uint32_t* ptrRegData)
-{
-    
-    //----------------------------------------
-    // switch based on register address szie RegSize(regAddress)
-    //commandByte = (MAX11043_CMD_enum_t)((commandByte &~ CMD_0aaa_aa10_RdAddr_ReadAnyRegister) & 0xFF);
-    switch(RegSize(commandByte))
-    {
-        case 8:  // 8-bit register size
-            {
-                // SPI 16-bit transfer
-                // SPI MOSI = 1aaa_aaaa_0000_0000
-                // SPI MISO = xxxx_xxxx_dddd_dddd
-                int16_t mosiData16 = ((CMD_0aaa_aa10_RdAddr_ReadAnyRegister | (int16_t)commandByte) << 8) | ((int16_t)0);
-                SPIoutputCS(0);
-                int16_t misoData16 = SPIreadWrite16bits(mosiData16);
-                SPIoutputCS(1);
-                (*ptrRegData) = (misoData16 & 0x00FF);
-            }
-            break;
-        case 16:  // 16-bit register size
-            #warning "Not Verified Yet: MAX11043::RegRead 16-bit SPIreadWrite32bits"
-            {
-                // SPI 24-bit or 32-bit transfer
-                // SPI MOSI = 1aaa_aaaa_0000_0000_0000_0000
-                // SPI MISO = xxxx_xxxx_dddd_dddd_dddd_dddd
-                // SPI MOSI = 1aaa_aaaa_0000_0000_0000_0000_0000_0000
-                // SPI MISO = xxxx_xxxx_dddd_dddd_dddd_dddd_xxxx_xxxx
-                int32_t mosiData32 = ((CMD_0aaa_aa10_RdAddr_ReadAnyRegister | (int32_t)commandByte) << 24);
-                SPIoutputCS(0);
-                int32_t misoData32 = SPIreadWrite32bits(mosiData32);
-                SPIoutputCS(1);
-                (*ptrRegData) = ((misoData32 >> 8) & 0x00FFFF);
-            }
-            break;
-        case 24:  // 24-bit register size
-            {
-                // SPI 32-bit transfer
-                // SPI MOSI = 1aaa_aaaa_0000_0000_0000_0000_0000_0000
-                // SPI MISO = xxxx_xxxx_dddd_dddd_dddd_dddd_dddd_dddd
-                int32_t mosiData32 = ((CMD_0aaa_aa10_RdAddr_ReadAnyRegister | (int32_t)commandByte) << 24);
-                SPIoutputCS(0);
-                int32_t misoData32 = SPIreadWrite32bits(mosiData32);
-                SPIoutputCS(1);
-                (*ptrRegData) = (misoData32 & 0x00FFFFFF);
-            }
-            break;
-    }
-    
-    //----------------------------------------
-    // success
-    return 1;
-}
-
-//----------------------------------------
-// Return the size of a MAX11043 register
-//
-// @return 8 for 8-bit, 16 for 16-bit, 24 for 24-bit, else 0 for undefined register size
-uint8_t MAX11043::RegSize(MAX11043_CMD_enum_t commandByte)
-{
-    
-    //----------------------------------------
-    // switch based on register address value regAddress
-    // commandByte = (MAX11043_CMD_enum_t)((commandByte &~ CMD_0aaa_aa10_RdAddr_ReadAnyRegister) & 0xFF);
-    switch(commandByte)
-    {
-        default:
-        case CMD_0aaa_aa00_WrAddr_WriteAnyRegister:
-        case CMD_0aaa_aa10_RdAddr_ReadAnyRegister:
-        case CMD_1111_1111_NoOperationMOSIidleHigh:
-            return 0;  // undefined register size
-        case CMD_0001_1110_d8_Rd07_Status:
-        case CMD_0101_0100_d8_Wr15_FilterCAddress:
-        case CMD_0101_0110_d8_Rd15_FilterCAddress:
-        case CMD_0110_0000_d8_Wr18_FlashMode:
-        case CMD_0110_0010_d8_Rd18_FlashMode:
-            return 8;  // 8-bit register size
-        case CMD_0010_0000_d16_Wr08_Configuration:
-        case CMD_0010_0010_d16_Rd08_Configuration:
-        case CMD_0010_0100_d16_Wr09_DAC:
-        case CMD_0010_0110_d16_Rd09_DAC:
-        case CMD_0010_1000_d16_Wr0A_DACStep:
-        case CMD_0010_1010_d16_Rd0A_DACStep:
-        case CMD_0010_1100_d16_Wr0B_DACHDACL:
-        case CMD_0010_1110_d16_Rd0B_DACHDACL:
-        case CMD_0011_0000_d16_Wr0C_ConfigA:
-        case CMD_0011_0010_d16_Rd0C_ConfigA:
-        case CMD_0011_0100_d16_Wr0D_ConfigB:
-        case CMD_0011_0110_d16_Rd0D_ConfigB:
-        case CMD_0011_1000_d16_Wr0E_ConfigC:
-        case CMD_0011_1010_d16_Rd0E_ConfigC:
-        case CMD_0011_1100_d16_Wr0F_ConfigD:
-        case CMD_0011_1110_d16_Rd0F_ConfigD:
-        case CMD_0100_0000_d16_Wr10_Reference:
-        case CMD_0100_0010_d16_Rd10_Reference:
-        case CMD_0100_0100_d16_Wr11_AGain:
-        case CMD_0100_0110_d16_Rd11_AGain:
-        case CMD_0100_1000_d16_Wr12_BGain:
-        case CMD_0100_1010_d16_Rd12_BGain:
-        case CMD_0100_1100_d16_Wr13_CGain:
-        case CMD_0100_1110_d16_Rd13_CGain:
-        case CMD_0101_0000_d16_Wr14_DGain:
-        case CMD_0101_0010_d16_Rd14_DGain:
-        case CMD_0110_0100_d16_Wr19_FlashAddr:
-        case CMD_0110_0110_d16_Rd19_FlashAddr:
-        case CMD_0110_1000_d16_Wr1A_FlashDataIn:
-        case CMD_0110_1010_d16_Rd1A_FlashDataIn:
-        case CMD_0110_1110_d16_Rd1B_FlashDataOut:
-            return 16;  // 16-bit register size
-        case CMD_0000_0010_d24_Rd00_ADCa:
-        case CMD_0000_0110_d24_Rd01_ADCb:
-        case CMD_0000_1010_d24_Rd02_ADCc:
-        case CMD_0000_1110_d24_Rd03_ADCd:
-            return 24;  // 24-bit register size
-        case CMD_0001_0010_d24_d24_Rd04_ADCab:
-        case CMD_0001_0110_d24_d24_Rd05_ADCcd:
-            return 48;  // 24-bit register size
-        case CMD_0001_1010_d24_d24_d24_d24_Rd06_ADCabcd:
-            return 96;  // 24-bit register size
-        case CMD_0101_1000_d32_Wr16_FilterCDataOut:
-        case CMD_0101_1010_d32_Rd16_FilterCDataOut:
-        case CMD_0101_1100_d32_Wr17_FilterCDataIn:
-        case CMD_0101_1110_d32_Rd17_FilterCDataIn:
-            return 32;  // 32-bit register size
-    }
-}
-
-//----------------------------------------
-// Return the address field of a MAX11043 register
-//
-// @return register address field as given in datasheet
-uint8_t MAX11043::RegAddrOfCommand(MAX11043_CMD_enum_t commandByte)
-{
-    
-    //----------------------------------------
-    // extract register address value from command byte
-    return (uint8_t)((commandByte &~ 0x83) >> 2); // CMD_0aaa_aa10_RdAddr_ReadAnyRegister
-}
-
-//----------------------------------------
-// Test whether a command byte is a register read command
-//
-// @return true if command byte is a register read command
-uint8_t MAX11043::IsRegReadCommand(MAX11043_CMD_enum_t commandByte)
-{
-    
-    //----------------------------------------
-    // Test whether a command byte is a register read command
-    return (commandByte &~ 0x02) ? 1 : 0; // CMD_0aaa_aa10_RdAddr_ReadAnyRegister
-}
-
-//----------------------------------------
-// Return the name of a MAX11043 register
-//
-// @return null-terminated constant C string containing register name or empty string
-const char* MAX11043::RegName(MAX11043_CMD_enum_t commandByte)
-{
-    
-    //----------------------------------------
-    // switch based on register address value regAddress
-    // commandByte = (MAX11043_CMD_enum_t)((commandByte &~ CMD_0aaa_aa10_RdAddr_ReadAnyRegister) & 0xFF);
-    switch(commandByte)
-    {
-        default:
-            return "";  // undefined register
-        // case CMD_0aaa_aa00_WrAddr_WriteAnyRegister: return "_______";
-        // case CMD_0aaa_aa10_RdAddr_ReadAnyRegister: return "_______";
-        // case CMD_1111_1111_NoOperationMOSIidleHigh: return "_______";
-        case CMD_0000_0010_d24_Rd00_ADCa: return "ADCa";
-        case CMD_0000_0110_d24_Rd01_ADCb: return "ADCb";
-        case CMD_0000_1010_d24_Rd02_ADCc: return "ADCc";
-        case CMD_0000_1110_d24_Rd03_ADCd: return "ADCd";
-        case CMD_0001_0010_d24_d24_Rd04_ADCab: return "ADCab";
-        case CMD_0001_0110_d24_d24_Rd05_ADCcd: return "ADCcd";
-        case CMD_0001_1010_d24_d24_d24_d24_Rd06_ADCabcd: return "ADCabcd";
-        case CMD_0001_1110_d8_Rd07_Status: return "Status";
-        case CMD_0010_0000_d16_Wr08_Configuration: return "Configuration";
-        case CMD_0010_0010_d16_Rd08_Configuration: return "Configuration";
-        case CMD_0010_0100_d16_Wr09_DAC: return "DAC";
-        case CMD_0010_0110_d16_Rd09_DAC: return "DAC";
-        case CMD_0010_1000_d16_Wr0A_DACStep: return "DACStep";
-        case CMD_0010_1010_d16_Rd0A_DACStep: return "DACStep";
-        case CMD_0010_1100_d16_Wr0B_DACHDACL: return "DACHDACL";
-        case CMD_0010_1110_d16_Rd0B_DACHDACL: return "DACHDACL";
-        case CMD_0011_0000_d16_Wr0C_ConfigA: return "ConfigA";
-        case CMD_0011_0010_d16_Rd0C_ConfigA: return "ConfigA";
-        case CMD_0011_0100_d16_Wr0D_ConfigB: return "ConfigB";
-        case CMD_0011_0110_d16_Rd0D_ConfigB: return "ConfigB";
-        case CMD_0011_1000_d16_Wr0E_ConfigC: return "ConfigC";
-        case CMD_0011_1010_d16_Rd0E_ConfigC: return "ConfigC";
-        case CMD_0011_1100_d16_Wr0F_ConfigD: return "ConfigD";
-        case CMD_0011_1110_d16_Rd0F_ConfigD: return "ConfigD";
-        case CMD_0100_0000_d16_Wr10_Reference: return "Reference";
-        case CMD_0100_0010_d16_Rd10_Reference: return "Reference";
-        case CMD_0100_0100_d16_Wr11_AGain: return "AGain";
-        case CMD_0100_0110_d16_Rd11_AGain: return "AGain";
-        case CMD_0100_1000_d16_Wr12_BGain: return "BGain";
-        case CMD_0100_1010_d16_Rd12_BGain: return "BGain";
-        case CMD_0100_1100_d16_Wr13_CGain: return "CGain";
-        case CMD_0100_1110_d16_Rd13_CGain: return "CGain";
-        case CMD_0101_0000_d16_Wr14_DGain: return "DGain";
-        case CMD_0101_0010_d16_Rd14_DGain: return "DGain";
-        case CMD_0101_0100_d8_Wr15_FilterCAddress: return "FilterCAddress";
-        case CMD_0101_0110_d8_Rd15_FilterCAddress: return "FilterCAddress";
-        case CMD_0101_1000_d32_Wr16_FilterCDataOut: return "FilterCDataOut";
-        case CMD_0101_1010_d32_Rd16_FilterCDataOut: return "FilterCDataOut";
-        case CMD_0101_1100_d32_Wr17_FilterCDataIn: return "FilterCDataIn";
-        case CMD_0101_1110_d32_Rd17_FilterCDataIn: return "FilterCDataIn";
-        case CMD_0110_0000_d8_Wr18_FlashMode: return "FlashMode";
-        case CMD_0110_0010_d8_Rd18_FlashMode: return "FlashMode";
-        case CMD_0110_0100_d16_Wr19_FlashAddr: return "FlashAddr";
-        case CMD_0110_0110_d16_Rd19_FlashAddr: return "FlashAddr";
-        case CMD_0110_1000_d16_Wr1A_FlashDataIn: return "FlashDataIn";
-        case CMD_0110_1010_d16_Rd1A_FlashDataIn: return "FlashDataIn";
-        case CMD_0110_1110_d16_Rd1B_FlashDataOut: return "FlashDataOut";
-    }
-}
-
-
-// End of file
+// /*******************************************************************************
+// * Copyright (C) 2020 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"),
+// * to deal in the Software without restriction, including without limitation
+// * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+// * and/or sell copies of the Software, and to permit persons to whom the
+// * Software is furnished to do so, subject to the following conditions:
+// *
+// * The above copyright notice and this permission notice shall be included
+// * in all copies or substantial portions of the Software.
+// *
+// * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+// * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+// * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
+// * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+// * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+// * OTHER DEALINGS IN THE SOFTWARE.
+// *
+// * Except as contained in this notice, the name of Maxim Integrated
+// * Products, Inc. shall not be used except as stated in the Maxim Integrated
+// * Products, Inc. Branding Policy.
+// *
+// * The mere transfer of this software does not imply any licenses
+// * of trade secrets, proprietary technology, copyrights, patents,
+// * trademarks, maskwork rights, or any other form of intellectual
+// * property whatsoever. Maxim Integrated Products, Inc. retains all
+// * ownership rights.
+// *******************************************************************************
+// */
+// *********************************************************************
+// @file MAX11043.cpp
+// *********************************************************************
+// Device Driver file
+// DO NOT EDIT; except areas designated "CUSTOMIZE". Automatically generated file.
+// generated by XMLSystemOfDevicesToMBED.py
+// System Name = ExampleSystem
+// System Description = Device driver example
+
+#include "MAX11043.h"
+
+// Device Name = MAX11043
+// Device Description = 200ksps, Low-Power, Serial SPI 24-Bit, 4-Channel, Differential/Single-Ended Input, Simultaneous-Sampling SD ADC
+// Device DeviceBriefDescription = 24-bit 200ksps Delta-Sigma ADC
+// Device Manufacturer = Maxim Integrated
+// Device PartNumber = MAX11043ATL+
+// Device RegValue_Width = DataWidth16bit_HL
+//
+// ADC MaxOutputDataRate = 200ksps
+// ADC NumChannels = 4
+// ADC ResolutionBits = 24
+//
+// SPI CS = ActiveLow
+// SPI FrameStart = CS
+// SPI CPOL = 0
+// SPI CPHA = 0
+// SPI MOSI and MISO Data are both stable on Rising edge of SCLK
+// SPI SCLK Idle Low
+// SPI SCLKMaxMHz = 40
+// SPI SCLKMinMHz = 0
+//
+// InputPin Name = CONVRUN
+// InputPin Description = CONVRUN (digital input). Convert Run. Drive high to start continuous conversions on all 4 channels. The device is idle when
+// CONVRUN is low.
+// InputPin Function = Configuration
+//
+// InputPin Name = SHDN
+// InputPin Description = Shutdown (digital input). Active-High Shutdown Input. Drive high to shut down the MAX11043.
+// InputPin Function = Configuration
+//
+// InputPin Name = DACSTEP
+// InputPin Description = DACSTEP (digital input). DAC Step Input. Drive high to move the DAC output in the direction of UP/DWN on the next rising
+// edge of the system clock.
+// InputPin Function = Configuration
+//
+// InputPin Name = UP/DWN#
+// InputPin Description = UP/DWN# (digital input). DAC Step Direction Select. Drive high to step up, drive low to step down when DACSTEP is toggled.
+// InputPin Function = Configuration
+//
+// OutputPin Name = EOC
+// OutputPin Description = End of Conversion Output. Active-Low End-of-Conversion Indicator. EOC asserts low to indicate that new data is ready.
+// OutputPin Function = Event
+//
+
+// CODE GENERATOR: class constructor definition
+MAX11043::MAX11043(SPI &spi, DigitalOut &cs_pin, // SPI interface
+                 // CODE GENERATOR: class constructor definition gpio InputPin pins
+                 DigitalOut &CONVRUN_pin, // Digital Configuration Input to MAX11043 device
+                 DigitalOut &SHDN_pin, // Digital Configuration Input to MAX11043 device
+                 DigitalOut &DACSTEP_pin, // Digital Configuration Input to MAX11043 device
+                 DigitalOut &UP_slash_DWNb_pin, // Digital Configuration Input to MAX11043 device
+                 // CODE GENERATOR: class constructor definition gpio OutputPin pins
+                 DigitalIn &EOC_pin, // Digital Event Output from MAX11043 device
+                 // CODE GENERATOR: class constructor definition ic_variant
+                 MAX11043_ic_t ic_variant)
+    // CODE GENERATOR: class constructor initializer list
+    : m_spi(spi), m_cs_pin(cs_pin), // SPI interface
+    // CODE GENERATOR: class constructor initializer list gpio InputPin pins
+    m_CONVRUN_pin(CONVRUN_pin), // Digital Configuration Input to MAX11043 device
+    m_SHDN_pin(SHDN_pin), // Digital Configuration Input to MAX11043 device
+    m_DACSTEP_pin(DACSTEP_pin), // Digital Configuration Input to MAX11043 device
+    m_UP_slash_DWNb_pin(UP_slash_DWNb_pin), // Digital Configuration Input to MAX11043 device
+    // CODE GENERATOR: class constructor initializer list gpio OutputPin pins
+    m_EOC_pin(EOC_pin), // Digital Event Output from MAX11043 device
+    // CODE GENERATOR: class constructor initializer list ic_variant
+    m_ic_variant(ic_variant)
+{
+    // CODE GENERATOR: class constructor definition SPI interface initialization
+    //
+    // SPI CS = ActiveLow
+    // SPI FrameStart = CS
+    m_SPI_cs_state = 1;
+    m_cs_pin = m_SPI_cs_state;
+
+    // SPI CPOL = 0
+    // SPI CPHA = 0
+    // SPI MOSI and MISO Data are both stable on Rising edge of SCLK
+    // SPI SCLK Idle Low
+    m_SPI_dataMode = 0; //SPI_MODE0; // CPOL=0,CPHA=0: Rising Edge stable; SCLK idle Low
+    m_spi.format(8,m_SPI_dataMode);         // int bits_must_be_8, int mode=0_3 CPOL=0,CPHA=0
+
+    // SPI SCLKMaxMHz = 40
+    // SPI SCLKMinMHz = 0
+    //#define SPI_SCLK_Hz 48000000 // 48MHz
+    //#define SPI_SCLK_Hz 24000000 // 24MHz
+    //#define SPI_SCLK_Hz 12000000 // 12MHz
+    //#define SPI_SCLK_Hz 6000000 // 6MHz
+    //#define SPI_SCLK_Hz 4000000 // 4MHz
+    //#define SPI_SCLK_Hz 2000000 // 2MHz
+    //#define SPI_SCLK_Hz 1000000 // 1MHz
+    m_SPI_SCLK_Hz = 12000000; // 12MHz; MAX11043 limit is 40MHz
+    m_spi.frequency(m_SPI_SCLK_Hz);
+
+    //
+    // CODE GENERATOR: class constructor definition gpio InputPin (Input to device) initialization
+    //
+    // CONVRUN Configuration Input to MAX11043 device
+    m_CONVRUN_pin = 1; // output logic high -- initial value in constructor
+    //
+    // SHDN Configuration Input to MAX11043 device
+    m_SHDN_pin = 1; // output logic high -- initial value in constructor
+    //
+    // DACSTEP Configuration Input to MAX11043 device
+    m_DACSTEP_pin = 1; // output logic high -- initial value in constructor
+    //
+    // UP_slash_DWNb Configuration Input to MAX11043 device
+    m_UP_slash_DWNb_pin = 1; // output logic high -- initial value in constructor
+    //
+    // CODE GENERATOR: class constructor definition gpio OutputPin (Output from MAX11043 device) initialization
+    //
+    // EOC Event Output from device
+}
+
+// CODE GENERATOR: class destructor definition
+MAX11043::~MAX11043()
+{
+    // do nothing
+}
+
+// CODE GENERATOR: spi_frequency setter definition
+/// set SPI SCLK frequency
+void MAX11043::spi_frequency(int spi_sclk_Hz)
+{
+    m_SPI_SCLK_Hz = spi_sclk_Hz;
+    m_spi.frequency(m_SPI_SCLK_Hz);
+}
+
+// CODE GENERATOR: omit global g_MAX11043_device
+// CODE GENERATOR: extern function declarations
+// CODE GENERATOR: extern function requirement MAX11043::SPIoutputCS
+// Assert SPI Chip Select
+// SPI chip-select for MAX11043
+//
+void MAX11043::SPIoutputCS(int isLogicHigh)
+{
+    // CODE GENERATOR: extern function definition for function SPIoutputCS
+    // CODE GENERATOR: extern function definition for standard SPI interface function SPIoutputCS(int isLogicHigh)
+    m_SPI_cs_state = isLogicHigh;
+    m_cs_pin = m_SPI_cs_state;
+}
+
+// CODE GENERATOR: extern function requirement MAX11043::SPIwrite16bits
+// SPI write 16 bits
+// SPI interface to MAX11043 shift 16 bits mosiData into MAX11043 DIN
+//
+void MAX11043::SPIwrite16bits(int16_t mosiData16)
+{
+    // CODE GENERATOR: extern function definition for function SPIwrite16bits
+    // TODO1: CODE GENERATOR: extern function definition for standard SPI interface function SPIwrite16bits(int16_t mosiData16)
+    size_t byteCount = 2;
+    static char mosiData[2];
+    static char misoData[2];
+    mosiData[0] = (char)((mosiData16 >> 8) & 0xFF); // MSByte
+    mosiData[1] = (char)((mosiData16 >> 0) & 0xFF); // LSByte
+    //
+    // Arduino: begin critical section: noInterrupts() masks all interrupt sources; end critical section with interrupts()
+    //~ noInterrupts();
+    //
+    //~ digitalWrite(Scope_Trigger_Pin, LOW); // diagnostic Scope_Trigger_Pin
+    //
+    unsigned int numBytesTransferred = m_spi.write(mosiData, byteCount, misoData, byteCount);
+    //~ m_spi.transfer(mosiData8_FF0000);
+    //~ m_spi.transfer(mosiData16_00FF00);
+    //~ m_spi.transfer(mosiData16_0000FF);
+    //
+    //~ digitalWrite(Scope_Trigger_Pin, HIGH); // diagnostic Scope_Trigger_Pin
+    //
+    // Arduino: begin critical section: noInterrupts() masks all interrupt sources; end critical section with interrupts()
+    //~ interrupts();
+    // Optional Diagnostic function to print SPI transactions
+    if (onSPIprint)
+    {
+        onSPIprint(byteCount, (uint8_t*)mosiData, (uint8_t*)misoData);
+    }
+    //
+    // VERIFY: SPIwrite24bits print diagnostic information
+    //cmdLine.serial().printf(" MOSI->"));
+    //cmdLine.serial().printf(" 0x"));
+    //Serial.print( (mosiData8_FF0000 & 0xFF), HEX);
+    //cmdLine.serial().printf(" 0x"));
+    //Serial.print( (mosiData16_00FF00 & 0xFF), HEX);
+    //cmdLine.serial().printf(" 0x"));
+    //Serial.print( (mosiData16_0000FF & 0xFF), HEX);
+    // hex dump mosiData[0..byteCount-1]
+#if 0 // HAS_MICROUSBSERIAL
+    cmdLine_microUSBserial.serial().printf("\r\nSPI");
+    if (byteCount > 7) {
+        cmdLine_microUSBserial.serial().printf(" byteCount:%d", byteCount);
+    }
+    cmdLine_microUSBserial.serial().printf(" MOSI->");
+    for (unsigned int byteIndex = 0; byteIndex < byteCount; byteIndex++)
+    {
+        cmdLine_microUSBserial.serial().printf(" 0x%2.2X", mosiData[byteIndex]);
+    }
+    // hex dump misoData[0..byteCount-1]
+    cmdLine_microUSBserial.serial().printf("  MISO<-");
+    for (unsigned int byteIndex = 0; byteIndex < numBytesTransferred; byteIndex++)
+    {
+        cmdLine_microUSBserial.serial().printf(" 0x%2.2X", misoData[byteIndex]);
+    }
+    cmdLine_microUSBserial.serial().printf(" ");
+#endif
+#if 0 // HAS_DAPLINK_SERIAL
+    cmdLine_DAPLINKserial.serial().printf("\r\nSPI");
+    if (byteCount > 7) {
+        cmdLine_DAPLINKserial.serial().printf(" byteCount:%d", byteCount);
+    }
+    cmdLine_DAPLINKserial.serial().printf(" MOSI->");
+    for (unsigned int byteIndex = 0; byteIndex < byteCount; byteIndex++)
+    {
+        cmdLine_DAPLINKserial.serial().printf(" 0x%2.2X", mosiData[byteIndex]);
+    }
+    // hex dump misoData[0..byteCount-1]
+    cmdLine_DAPLINKserial.serial().printf("  MISO<-");
+    for (unsigned int byteIndex = 0; byteIndex < numBytesTransferred; byteIndex++)
+    {
+        cmdLine_DAPLINKserial.serial().printf(" 0x%2.2X", misoData[byteIndex]);
+    }
+    cmdLine_DAPLINKserial.serial().printf(" ");
+#endif
+    // VERIFY: DIAGNOSTIC: print MAX5715 device register write
+    // TODO: MAX5715_print_register_verbose(mosiData8_FF0000, mosiData16_00FFFF);
+    // TODO: print_verbose_SPI_diagnostic(mosiData16_FF00, mosiData16_00FF, misoData16_FF00, misoData16_00FF);
+    //
+    // int misoData16 = (misoData16_FF00 << 8) | misoData16_00FF;
+    // return misoData16;
+}
+
+// CODE GENERATOR: extern function requirement MAX11043::SPIreadWrite16bits
+// SPI read and write 16 bits
+// SPI interface to MAX11043 shift 16 bits mosiData16 into MAX11043 DIN
+// while simultaneously capturing 16 bits miso data from MAX11043 DOUT
+//
+int16_t MAX11043::SPIreadWrite16bits(int16_t mosiData16)
+{
+    // CODE GENERATOR: extern function definition for function SPIreadWrite16bits
+    // TODO1: CODE GENERATOR: extern function definition for standard SPI interface function SPIreadWrite16bits(int16_t mosiData16)
+    size_t byteCount = 2;
+    static char mosiData[2];
+    static char misoData[2];
+    mosiData[0] = (char)((mosiData16 >> 8) & 0xFF); // MSByte
+    mosiData[1] = (char)((mosiData16 >> 0) & 0xFF); // LSByte
+    //
+    // Arduino: begin critical section: noInterrupts() masks all interrupt sources; end critical section with interrupts()
+    //~ noInterrupts();
+    //
+    //~ digitalWrite(Scope_Trigger_Pin, LOW); // diagnostic Scope_Trigger_Pin
+    //
+    unsigned int numBytesTransferred = m_spi.write(mosiData, byteCount, misoData, byteCount);
+    //~ m_spi.transfer(mosiData8_FF0000);
+    //~ m_spi.transfer(mosiData16_00FF00);
+    //~ m_spi.transfer(mosiData16_0000FF);
+    //
+    //~ digitalWrite(Scope_Trigger_Pin, HIGH); // diagnostic Scope_Trigger_Pin
+    //
+    // Arduino: begin critical section: noInterrupts() masks all interrupt sources; end critical section with interrupts()
+    //~ interrupts();
+    // Optional Diagnostic function to print SPI transactions
+    if (onSPIprint)
+    {
+        onSPIprint(byteCount, (uint8_t*)mosiData, (uint8_t*)misoData);
+    }
+    //
+    // VERIFY: SPIwrite24bits print diagnostic information
+    //cmdLine.serial().printf(" MOSI->"));
+    //cmdLine.serial().printf(" 0x"));
+    //Serial.print( (mosiData8_FF0000 & 0xFF), HEX);
+    //cmdLine.serial().printf(" 0x"));
+    //Serial.print( (mosiData16_00FF00 & 0xFF), HEX);
+    //cmdLine.serial().printf(" 0x"));
+    //Serial.print( (mosiData16_0000FF & 0xFF), HEX);
+    // hex dump mosiData[0..byteCount-1]
+#if 0 // HAS_MICROUSBSERIAL
+    cmdLine_microUSBserial.serial().printf("\r\nSPI");
+    if (byteCount > 7) {
+        cmdLine_microUSBserial.serial().printf(" byteCount:%d", byteCount);
+    }
+    cmdLine_microUSBserial.serial().printf(" MOSI->");
+    for (unsigned int byteIndex = 0; byteIndex < byteCount; byteIndex++)
+    {
+        cmdLine_microUSBserial.serial().printf(" 0x%2.2X", mosiData[byteIndex]);
+    }
+    // hex dump misoData[0..byteCount-1]
+    cmdLine_microUSBserial.serial().printf("  MISO<-");
+    for (unsigned int byteIndex = 0; byteIndex < numBytesTransferred; byteIndex++)
+    {
+        cmdLine_microUSBserial.serial().printf(" 0x%2.2X", misoData[byteIndex]);
+    }
+    cmdLine_microUSBserial.serial().printf(" ");
+#endif
+#if 0 // HAS_DAPLINK_SERIAL
+    cmdLine_DAPLINKserial.serial().printf("\r\nSPI");
+    if (byteCount > 7) {
+        cmdLine_DAPLINKserial.serial().printf(" byteCount:%d", byteCount);
+    }
+    cmdLine_DAPLINKserial.serial().printf(" MOSI->");
+    for (unsigned int byteIndex = 0; byteIndex < byteCount; byteIndex++)
+    {
+        cmdLine_DAPLINKserial.serial().printf(" 0x%2.2X", mosiData[byteIndex]);
+    }
+    // hex dump misoData[0..byteCount-1]
+    cmdLine_DAPLINKserial.serial().printf("  MISO<-");
+    for (unsigned int byteIndex = 0; byteIndex < numBytesTransferred; byteIndex++)
+    {
+        cmdLine_DAPLINKserial.serial().printf(" 0x%2.2X", misoData[byteIndex]);
+    }
+    cmdLine_DAPLINKserial.serial().printf(" ");
+#endif
+    // VERIFY: DIAGNOSTIC: print MAX5715 device register write
+    // TODO: MAX5715_print_register_verbose(mosiData8_FF0000, mosiData16_00FFFF);
+    // TODO: print_verbose_SPI_diagnostic(mosiData16_FF00, mosiData16_00FF, misoData16_FF00, misoData16_00FF);
+    //
+    //int misoData16 = (misoData16_FF00 << 8) | misoData16_00FF;
+    int misoData16 = (misoData[0] << 8) | misoData[1];
+    return misoData16;
+}
+
+// CODE GENERATOR: extern function requirement MAX11043::SPIreadWrite32bits
+// SPI read and write 32 bits
+// SPI interface to MAX11043 shift 32 bits mosiData into MAX11043 DIN
+// while simultaneously capturing 32 bits miso data from MAX11043 DOUT
+//
+int32_t MAX11043::SPIreadWrite32bits(int32_t mosiData32)
+{
+    // CODE GENERATOR: extern function definition for function SPIreadWrite32bits
+    // TODO1: CODE GENERATOR: extern function definition for standard SPI interface function SPIreadWrite32bits(int32_t mosiData32)
+    size_t byteCount = 4;
+    static char mosiData[4];
+    static char misoData[4];
+    mosiData[0] = (char)((mosiData32 >> 24) & 0xFF); // MSByte
+    mosiData[1] = (char)((mosiData32 >> 16) & 0xFF);
+    mosiData[2] = (char)((mosiData32 >>  8) & 0xFF);
+    mosiData[3] = (char)((mosiData32 >>  0) & 0xFF); // LSByte
+    //
+    // Arduino: begin critical section: noInterrupts() masks all interrupt sources; end critical section with interrupts()
+    //~ noInterrupts();
+    //
+    //~ digitalWrite(Scope_Trigger_Pin, LOW); // diagnostic Scope_Trigger_Pin
+    //
+    unsigned int numBytesTransferred = m_spi.write(mosiData, byteCount, misoData, byteCount);
+    //~ m_spi.transfer(mosiData8_FF0000);
+    //~ m_spi.transfer(mosiData16_00FF00);
+    //~ m_spi.transfer(mosiData16_0000FF);
+    //
+    //~ digitalWrite(Scope_Trigger_Pin, HIGH); // diagnostic Scope_Trigger_Pin
+    //
+    // Arduino: begin critical section: noInterrupts() masks all interrupt sources; end critical section with interrupts()
+    //~ interrupts();
+    // Optional Diagnostic function to print SPI transactions
+    if (onSPIprint)
+    {
+        onSPIprint(byteCount, (uint8_t*)mosiData, (uint8_t*)misoData);
+    }
+    //
+    // VERIFY: SPIwrite24bits print diagnostic information
+    //cmdLine.serial().printf(" MOSI->"));
+    //cmdLine.serial().printf(" 0x"));
+    //Serial.print( (mosiData8_FF0000 & 0xFF), HEX);
+    //cmdLine.serial().printf(" 0x"));
+    //Serial.print( (mosiData16_00FF00 & 0xFF), HEX);
+    //cmdLine.serial().printf(" 0x"));
+    //Serial.print( (mosiData16_0000FF & 0xFF), HEX);
+    // hex dump mosiData[0..byteCount-1]
+#if 0 // HAS_MICROUSBSERIAL
+    cmdLine_microUSBserial.serial().printf("\r\nSPI");
+    if (byteCount > 7) {
+        cmdLine_microUSBserial.serial().printf(" byteCount:%d", byteCount);
+    }
+    cmdLine_microUSBserial.serial().printf(" MOSI->");
+    for (unsigned int byteIndex = 0; byteIndex < byteCount; byteIndex++)
+    {
+        cmdLine_microUSBserial.serial().printf(" 0x%2.2X", mosiData[byteIndex]);
+    }
+    // hex dump misoData[0..byteCount-1]
+    cmdLine_microUSBserial.serial().printf("  MISO<-");
+    for (unsigned int byteIndex = 0; byteIndex < numBytesTransferred; byteIndex++)
+    {
+        cmdLine_microUSBserial.serial().printf(" 0x%2.2X", misoData[byteIndex]);
+    }
+    cmdLine_microUSBserial.serial().printf(" ");
+#endif
+#if 0 // HAS_DAPLINK_SERIAL
+    cmdLine_DAPLINKserial.serial().printf("\r\nSPI");
+    if (byteCount > 7) {
+        cmdLine_DAPLINKserial.serial().printf(" byteCount:%d", byteCount);
+    }
+    cmdLine_DAPLINKserial.serial().printf(" MOSI->");
+    for (unsigned int byteIndex = 0; byteIndex < byteCount; byteIndex++)
+    {
+        cmdLine_DAPLINKserial.serial().printf(" 0x%2.2X", mosiData[byteIndex]);
+    }
+    // hex dump misoData[0..byteCount-1]
+    cmdLine_DAPLINKserial.serial().printf("  MISO<-");
+    for (unsigned int byteIndex = 0; byteIndex < numBytesTransferred; byteIndex++)
+    {
+        cmdLine_DAPLINKserial.serial().printf(" 0x%2.2X", misoData[byteIndex]);
+    }
+    cmdLine_DAPLINKserial.serial().printf(" ");
+#endif
+    // VERIFY: DIAGNOSTIC: print MAX5715 device register write
+    // TODO: MAX5715_print_register_verbose(mosiData8_FF0000, mosiData16_00FFFF);
+    // TODO: print_verbose_SPI_diagnostic(mosiData16_FF00, mosiData16_00FF, misoData16_FF00, misoData16_00FF);
+    //
+    //int misoData32 = (misoData32_FF000000 << 24) | (misoData32_FF0000 << 16) | (misoData32_0000FF00 << 8) | misoData32_000000FF;
+    int misoData32 = (misoData[0] << 24) | (misoData[1] << 16) | (misoData[2] << 8) | misoData[3];
+    return misoData32;
+}
+
+// TODO1: CODE GENERATOR: extern function GPIOoutputSHDN alias SHDNoutputValue
+// CODE GENERATOR: extern function requirement MAX11043::SHDNoutputValue
+// Assert MAX11043 SHDN pin : High = _____, Low = _____.
+//
+void MAX11043::SHDNoutputValue(int isLogicHigh)
+{
+    // CODE GENERATOR: extern function definition for function SHDNoutputValue
+    // TODO1: CODE GENERATOR: extern function definition for gpio interface function SHDNoutputValue
+    // TODO1: CODE GENERATOR: gpio pin SHDN assuming member function m_SHDN_pin
+    // TODO1: CODE GENERATOR: gpio direction output
+    // m_SHDN_pin.output(); // only applicable to DigitalInOut
+    // TODO1: CODE GENERATOR: gpio function Value
+    m_SHDN_pin = isLogicHigh;
+}
 
+// TODO1: CODE GENERATOR: extern function GPIOoutputCONVRUN alias CONVRUNoutputValue
+// CODE GENERATOR: extern function requirement MAX11043::CONVRUNoutputValue
+// Assert MAX11043 CONVRUN pin : High = _____, Low = _____.
+//
+void MAX11043::CONVRUNoutputValue(int isLogicHigh)
+{
+    // CODE GENERATOR: extern function definition for function CONVRUNoutputValue
+    // TODO1: CODE GENERATOR: extern function definition for gpio interface function CONVRUNoutputValue
+    // TODO1: CODE GENERATOR: gpio pin CONVRUN assuming member function m_CONVRUN_pin
+    // TODO1: CODE GENERATOR: gpio direction output
+    // m_CONVRUN_pin.output(); // only applicable to DigitalInOut
+    // TODO1: CODE GENERATOR: gpio function Value
+    m_CONVRUN_pin = isLogicHigh;
+}
+
+// TODO1: CODE GENERATOR: extern function GPIOoutputDACSTEP alias DACSTEPoutputValue
+// CODE GENERATOR: extern function requirement MAX11043::DACSTEPoutputValue
+// Assert MAX11043 DACSTEP pin : High = _____, Low = _____.
+//
+void MAX11043::DACSTEPoutputValue(int isLogicHigh)
+{
+    // CODE GENERATOR: extern function definition for function DACSTEPoutputValue
+    // TODO1: CODE GENERATOR: extern function definition for gpio interface function DACSTEPoutputValue
+    // TODO1: CODE GENERATOR: gpio pin DACSTEP assuming member function m_DACSTEP_pin
+    // TODO1: CODE GENERATOR: gpio direction output
+    // m_DACSTEP_pin.output(); // only applicable to DigitalInOut
+    // TODO1: CODE GENERATOR: gpio function Value
+    m_DACSTEP_pin = isLogicHigh;
+}
+
+// TODO1: CODE GENERATOR: extern function GPIOoutputUP_slash_DWNb alias UP_slash_DWNboutputValue
+// CODE GENERATOR: extern function requirement MAX11043::UP_slash_DWNboutputValue
+// Assert MAX11043 UP_slash_DWNb pin : High = _____, Low = _____.
+//
+void MAX11043::UP_slash_DWNboutputValue(int isLogicHigh)
+{
+    // CODE GENERATOR: extern function definition for function UP_slash_DWNboutputValue
+    // TODO1: CODE GENERATOR: extern function definition for gpio interface function UP_slash_DWNboutputValue
+    // TODO1: CODE GENERATOR: gpio pin UP_slash_DWNb assuming member function m_UP_slash_DWNb_pin
+    // TODO1: CODE GENERATOR: gpio direction output
+    // m_UP_slash_DWNb_pin.output(); // only applicable to DigitalInOut
+    // TODO1: CODE GENERATOR: gpio function Value
+    m_UP_slash_DWNb_pin = isLogicHigh;
+}
+
+// CODE GENERATOR: extern function requirement MAX11043::EOCinputWaitUntilLow
+// Wait for MAX11043 EOC pin low, indicating end of conversion.
+// Required when using any of the InternalClock modes.
+//
+void MAX11043::EOCinputWaitUntilLow()
+{
+    // CODE GENERATOR: extern function definition for function EOCinputWaitUntilLow
+    // TODO1: CODE GENERATOR: extern function definition for gpio interface function EOCinputWaitUntilLow
+    // TODO1: CODE GENERATOR: gpio pin EOC assuming member function m_EOC_pin
+    // TODO1: CODE GENERATOR: gpio direction input
+    // m_EOC_pin.input(); // only applicable to DigitalInOut
+    // TODO1: CODE GENERATOR: gpio function WaitUntilLow
+    while (m_EOC_pin != 0)
+    {
+        // spinlock waiting for logic low pin state
+    }
+}
+
+// CODE GENERATOR: extern function requirement MAX11043::EOCinputValue
+// Return the status of the MAX11043 EOC pin.
+//
+int MAX11043::EOCinputValue()
+{
+    // CODE GENERATOR: extern function definition for function EOCinputValue
+    // TODO1: CODE GENERATOR: extern function definition for gpio interface function EOCinputValue
+    // TODO1: CODE GENERATOR: gpio pin EOC assuming member function m_EOC_pin
+    // TODO1: CODE GENERATOR: gpio direction input
+    // m_EOC_pin.input(); // only applicable to DigitalInOut
+    // TODO1: CODE GENERATOR: gpio function Value
+    return m_EOC_pin.read();
+}
+
+// CODE GENERATOR: class member function definitions
+//----------------------------------------
+// Menu item '!'
+// Initialize device
+// @return 1 on success; 0 on failure
+uint8_t MAX11043::Init(void)
+{
+    
+    //----------------------------------------
+    // TODO1: AC79 MAX11043 AIN0-AIN1 reference voltage, in Volts
+    VRef_xxxxxx = 2.500;
+    
+    //----------------------------------------
+    // shadow of register ctrl CMD_r000_1001_dddd_dddd_CTRL
+    ctrl = 0x01;
+    
+    //----------------------------------------
+    // set by Configure_PGA gain index register pga CMD_r000_1110_xxdd_xddd_PGA
+    pgaGain = 1;
+    
+    //----------------------------------------
+    // init (based on old EV kit GUI)
+    #warning "Not Implemented Yet: MAX11043::Init init..."
+    // bool bOpResult = false;
+    // String FWVersionString = "00";
+    // bool bDemoMode = true;
+    // int scan_resolution = 0;
+    // int scan_channels = 0;
+    // int scan_bits = 0;
+    // int sampleRateFactore = 0;
+    // double sampleRate = 0;
+    // unsigned long banks_requested = 0;
+    // bool bScanMode = 0;
+    
+    //----------------------------------------
+    // Device ID Validation
+    #warning "Not Implemented Yet: MAX11043::Init Device ID Validation..."
+    // const uint32_t part_id_expect = 0x000F02;
+    // uint32_t part_id_readback;
+    // RegRead(xxxxxxxxxxxxCMD_r001_0001_xxxx_xxxx_xxxx_xxxx_xxxx_xddd_PART_ID, &part_id_readback);
+    // if (part_id_readback != part_id_expect) return 0;
+    
+    //----------------------------------------
+    // write8 0x00 PD = 0x03 (Reset Registers; enter Standby mode)
+    // RegWrite(xxxxxxxxxxxCMD_r000_0000_xxxx_xxdd_PD, PD_11_Reset);
+    
+    //----------------------------------------
+    // write8 0x00 PD = 0x00 (NOP)
+    // RegWrite(xxxxxxxxxxxxCMD_r000_0000_xxxx_xxdd_PD, PD_00_Normal);
+    
+    //----------------------------------------
+    // success
+    return 1;
+}
+
+//----------------------------------------
+// Write a MAX11043 register.
+//
+// CMD_1aaa_aaaa_REGISTER_READ bit is cleared 0 indicating a write operation.
+//
+// MAX11043 register length can be determined by function RegSize.
+//
+// For 8-bit register size:
+//
+//     SPI 16-bit transfer
+//
+//     SPI MOSI = 0aaa_aaaa_dddd_dddd
+//
+//     SPI MISO = xxxx_xxxx_xxxx_xxxx
+//
+// For 16-bit register size:
+//
+//     SPI 24-bit or 32-bit transfer
+//
+//     SPI MOSI = 0aaa_aaaa_dddd_dddd_dddd_dddd
+//
+//     SPI MISO = xxxx_xxxx_xxxx_xxxx_xxxx_xxxx
+//
+// For 24-bit register size:
+//
+//     SPI 32-bit transfer
+//
+//     SPI MOSI = 0aaa_aaaa_dddd_dddd_dddd_dddd_dddd_dddd
+//
+//     SPI MISO = xxxx_xxxx_xxxx_xxxx_xxxx_xxxx_xxxx_xxxx
+//
+// @return 1 on success; 0 on failure
+uint8_t MAX11043::RegWrite(MAX11043_CMD_enum_t commandByte, uint32_t regData)
+{
+    
+    //----------------------------------------
+    // switch based on register address szie RegSize(commandByte)
+    //commandByte = (MAX11043_CMD_enum_t)((commandByte &~ CMD_0aaa_aa10_RdAddr_ReadAnyRegister) & 0xFF);
+    switch(RegSize(commandByte))
+    {
+        case 8:  // 8-bit register size
+            {
+                // SPI 16-bit transfer
+                // SPI MOSI = 0aaa_aaaa_dddd_dddd
+                // SPI MISO = xxxx_xxxx_xxxx_xxxx
+                int16_t mosiData16 = ((int16_t)commandByte << 8) | ((int16_t)regData & 0xFF);
+                SPIoutputCS(0);
+                SPIwrite16bits(mosiData16);
+                SPIoutputCS(1);
+            }
+            break;
+        case 16:  // 16-bit register size
+            #warning "Not Verified Yet: MAX11043::RegWrite 16-bit SPIreadWrite32bits"
+            {
+                // SPI 24-bit or 32-bit transfer
+                // SPI MOSI = 0aaa_aaaa_dddd_dddd_dddd_dddd
+                // SPI MISO = xxxx_xxxx_xxxx_xxxx_xxxx_xxxx
+                // SPI MOSI = 0aaa_aaaa_dddd_dddd_dddd_dddd_0000_0000
+                // SPI MISO = xxxx_xxxx_xxxx_xxxx_xxxx_xxxx_xxxx_xxxx
+                int32_t mosiData32 = ((int32_t)commandByte << 24) | (((int32_t)regData & 0xFFFF) << 8);
+                SPIoutputCS(0);
+                SPIreadWrite32bits(mosiData32);
+                SPIoutputCS(1);
+            }
+            break;
+        case 24:  // 24-bit register size
+            {
+                // SPI 32-bit transfer
+                // SPI MOSI = 0aaa_aaaa_dddd_dddd_dddd_dddd_dddd_dddd
+                // SPI MISO = xxxx_xxxx_xxxx_xxxx_xxxx_xxxx_xxxx_xxxx
+                int32_t mosiData32 = ((int32_t)commandByte << 24) | ((int32_t)regData & 0x00FFFFFF);
+                SPIoutputCS(0);
+                SPIreadWrite32bits(mosiData32);
+                SPIoutputCS(1);
+            }
+            break;
+    }
+    
+    //----------------------------------------
+    // success
+    return 1;
+}
+
+//----------------------------------------
+// Read an 8-bit MAX11043 register
+//
+// CMD_1aaa_aaaa_REGISTER_READ bit is set 1 indicating a read operation.
+//
+// MAX11043 register length can be determined by function RegSize.
+//
+// For 8-bit register size:
+//
+//     SPI 16-bit transfer
+//
+//     SPI MOSI = 1aaa_aaaa_0000_0000
+//
+//     SPI MISO = xxxx_xxxx_dddd_dddd
+//
+// For 16-bit register size:
+//
+//     SPI 24-bit or 32-bit transfer
+//
+//     SPI MOSI = 1aaa_aaaa_0000_0000_0000_0000
+//
+//     SPI MISO = xxxx_xxxx_dddd_dddd_dddd_dddd
+//
+// For 24-bit register size:
+//
+//     SPI 32-bit transfer
+//
+//     SPI MOSI = 1aaa_aaaa_0000_0000_0000_0000_0000_0000
+//
+//     SPI MISO = xxxx_xxxx_dddd_dddd_dddd_dddd_dddd_dddd
+//
+//
+// @return 1 on success; 0 on failure
+uint8_t MAX11043::RegRead(MAX11043_CMD_enum_t commandByte, uint32_t* ptrRegData)
+{
+    
+    //----------------------------------------
+    // switch based on register address szie RegSize(regAddress)
+    //commandByte = (MAX11043_CMD_enum_t)((commandByte &~ CMD_0aaa_aa10_RdAddr_ReadAnyRegister) & 0xFF);
+    switch(RegSize(commandByte))
+    {
+        case 8:  // 8-bit register size
+            {
+                // SPI 16-bit transfer
+                // SPI MOSI = 1aaa_aaaa_0000_0000
+                // SPI MISO = xxxx_xxxx_dddd_dddd
+                int16_t mosiData16 = ((CMD_0aaa_aa10_RdAddr_ReadAnyRegister | (int16_t)commandByte) << 8) | ((int16_t)0);
+                SPIoutputCS(0);
+                int16_t misoData16 = SPIreadWrite16bits(mosiData16);
+                SPIoutputCS(1);
+                (*ptrRegData) = (misoData16 & 0x00FF);
+            }
+            break;
+        case 16:  // 16-bit register size
+            #warning "Not Verified Yet: MAX11043::RegRead 16-bit SPIreadWrite32bits"
+            {
+                // SPI 24-bit or 32-bit transfer
+                // SPI MOSI = 1aaa_aaaa_0000_0000_0000_0000
+                // SPI MISO = xxxx_xxxx_dddd_dddd_dddd_dddd
+                // SPI MOSI = 1aaa_aaaa_0000_0000_0000_0000_0000_0000
+                // SPI MISO = xxxx_xxxx_dddd_dddd_dddd_dddd_xxxx_xxxx
+                int32_t mosiData32 = ((CMD_0aaa_aa10_RdAddr_ReadAnyRegister | (int32_t)commandByte) << 24);
+                SPIoutputCS(0);
+                int32_t misoData32 = SPIreadWrite32bits(mosiData32);
+                SPIoutputCS(1);
+                (*ptrRegData) = ((misoData32 >> 8) & 0x00FFFF);
+            }
+            break;
+        case 24:  // 24-bit register size
+            {
+                // SPI 32-bit transfer
+                // SPI MOSI = 1aaa_aaaa_0000_0000_0000_0000_0000_0000
+                // SPI MISO = xxxx_xxxx_dddd_dddd_dddd_dddd_dddd_dddd
+                int32_t mosiData32 = ((CMD_0aaa_aa10_RdAddr_ReadAnyRegister | (int32_t)commandByte) << 24);
+                SPIoutputCS(0);
+                int32_t misoData32 = SPIreadWrite32bits(mosiData32);
+                SPIoutputCS(1);
+                (*ptrRegData) = (misoData32 & 0x00FFFFFF);
+            }
+            break;
+    }
+    
+    //----------------------------------------
+    // success
+    return 1;
+}
+
+//----------------------------------------
+// Return the size of a MAX11043 register
+//
+// @return 8 for 8-bit, 16 for 16-bit, 24 for 24-bit, else 0 for undefined register size
+uint8_t MAX11043::RegSize(MAX11043_CMD_enum_t commandByte)
+{
+    
+    //----------------------------------------
+    // switch based on register address value regAddress
+    // commandByte = (MAX11043_CMD_enum_t)((commandByte &~ CMD_0aaa_aa10_RdAddr_ReadAnyRegister) & 0xFF);
+    switch(commandByte)
+    {
+        default:
+        case CMD_0aaa_aa00_WrAddr_WriteAnyRegister:
+        case CMD_0aaa_aa10_RdAddr_ReadAnyRegister:
+        case CMD_1111_1111_NoOperationMOSIidleHigh:
+            return 0;  // undefined register size
+        case CMD_0001_1110_d8_Rd07_Status:
+        case CMD_0101_0100_d8_Wr15_FilterCAddress:
+        case CMD_0101_0110_d8_Rd15_FilterCAddress:
+        case CMD_0110_0000_d8_Wr18_FlashMode:
+        case CMD_0110_0010_d8_Rd18_FlashMode:
+            return 8;  // 8-bit register size
+        case CMD_0010_0000_d16_Wr08_Configuration:
+        case CMD_0010_0010_d16_Rd08_Configuration:
+        case CMD_0010_0100_d16_Wr09_DAC:
+        case CMD_0010_0110_d16_Rd09_DAC:
+        case CMD_0010_1000_d16_Wr0A_DACStep:
+        case CMD_0010_1010_d16_Rd0A_DACStep:
+        case CMD_0010_1100_d16_Wr0B_DACHDACL:
+        case CMD_0010_1110_d16_Rd0B_DACHDACL:
+        case CMD_0011_0000_d16_Wr0C_ConfigA:
+        case CMD_0011_0010_d16_Rd0C_ConfigA:
+        case CMD_0011_0100_d16_Wr0D_ConfigB:
+        case CMD_0011_0110_d16_Rd0D_ConfigB:
+        case CMD_0011_1000_d16_Wr0E_ConfigC:
+        case CMD_0011_1010_d16_Rd0E_ConfigC:
+        case CMD_0011_1100_d16_Wr0F_ConfigD:
+        case CMD_0011_1110_d16_Rd0F_ConfigD:
+        case CMD_0100_0000_d16_Wr10_Reference:
+        case CMD_0100_0010_d16_Rd10_Reference:
+        case CMD_0100_0100_d16_Wr11_AGain:
+        case CMD_0100_0110_d16_Rd11_AGain:
+        case CMD_0100_1000_d16_Wr12_BGain:
+        case CMD_0100_1010_d16_Rd12_BGain:
+        case CMD_0100_1100_d16_Wr13_CGain:
+        case CMD_0100_1110_d16_Rd13_CGain:
+        case CMD_0101_0000_d16_Wr14_DGain:
+        case CMD_0101_0010_d16_Rd14_DGain:
+        case CMD_0110_0100_d16_Wr19_FlashAddr:
+        case CMD_0110_0110_d16_Rd19_FlashAddr:
+        case CMD_0110_1000_d16_Wr1A_FlashDataIn:
+        case CMD_0110_1010_d16_Rd1A_FlashDataIn:
+        case CMD_0110_1110_d16_Rd1B_FlashDataOut:
+            return 16;  // 16-bit register size
+        case CMD_0000_0010_d24_Rd00_ADCa:
+        case CMD_0000_0110_d24_Rd01_ADCb:
+        case CMD_0000_1010_d24_Rd02_ADCc:
+        case CMD_0000_1110_d24_Rd03_ADCd:
+            return 24;  // 24-bit register size
+        case CMD_0001_0010_d24_d24_Rd04_ADCab:
+        case CMD_0001_0110_d24_d24_Rd05_ADCcd:
+            return 48;  // 24-bit register size
+        case CMD_0001_1010_d24_d24_d24_d24_Rd06_ADCabcd:
+            return 96;  // 24-bit register size
+        case CMD_0101_1000_d32_Wr16_FilterCDataOut:
+        case CMD_0101_1010_d32_Rd16_FilterCDataOut:
+        case CMD_0101_1100_d32_Wr17_FilterCDataIn:
+        case CMD_0101_1110_d32_Rd17_FilterCDataIn:
+            return 32;  // 32-bit register size
+    }
+}
+
+//----------------------------------------
+// Return the address field of a MAX11043 register
+//
+// @return register address field as given in datasheet
+uint8_t MAX11043::RegAddrOfCommand(MAX11043_CMD_enum_t commandByte)
+{
+    
+    //----------------------------------------
+    // extract register address value from command byte
+    return (uint8_t)((commandByte &~ 0x83) >> 2); // CMD_0aaa_aa10_RdAddr_ReadAnyRegister
+}
+
+//----------------------------------------
+// Test whether a command byte is a register read command
+//
+// @return true if command byte is a register read command
+uint8_t MAX11043::IsRegReadCommand(MAX11043_CMD_enum_t commandByte)
+{
+    
+    //----------------------------------------
+    // Test whether a command byte is a register read command
+    return (commandByte &~ 0x02) ? 1 : 0; // CMD_0aaa_aa10_RdAddr_ReadAnyRegister
+}
+
+//----------------------------------------
+// Return the name of a MAX11043 register
+//
+// @return null-terminated constant C string containing register name or empty string
+const char* MAX11043::RegName(MAX11043_CMD_enum_t commandByte)
+{
+    
+    //----------------------------------------
+    // switch based on register address value regAddress
+    // commandByte = (MAX11043_CMD_enum_t)((commandByte &~ CMD_0aaa_aa10_RdAddr_ReadAnyRegister) & 0xFF);
+    switch(commandByte)
+    {
+        default:
+            return "";  // undefined register
+        // case CMD_0aaa_aa00_WrAddr_WriteAnyRegister: return "_______";
+        // case CMD_0aaa_aa10_RdAddr_ReadAnyRegister: return "_______";
+        // case CMD_1111_1111_NoOperationMOSIidleHigh: return "_______";
+        case CMD_0000_0010_d24_Rd00_ADCa: return "ADCa";
+        case CMD_0000_0110_d24_Rd01_ADCb: return "ADCb";
+        case CMD_0000_1010_d24_Rd02_ADCc: return "ADCc";
+        case CMD_0000_1110_d24_Rd03_ADCd: return "ADCd";
+        case CMD_0001_0010_d24_d24_Rd04_ADCab: return "ADCab";
+        case CMD_0001_0110_d24_d24_Rd05_ADCcd: return "ADCcd";
+        case CMD_0001_1010_d24_d24_d24_d24_Rd06_ADCabcd: return "ADCabcd";
+        case CMD_0001_1110_d8_Rd07_Status: return "Status";
+        case CMD_0010_0000_d16_Wr08_Configuration: return "Configuration";
+        case CMD_0010_0010_d16_Rd08_Configuration: return "Configuration";
+        case CMD_0010_0100_d16_Wr09_DAC: return "DAC";
+        case CMD_0010_0110_d16_Rd09_DAC: return "DAC";
+        case CMD_0010_1000_d16_Wr0A_DACStep: return "DACStep";
+        case CMD_0010_1010_d16_Rd0A_DACStep: return "DACStep";
+        case CMD_0010_1100_d16_Wr0B_DACHDACL: return "DACHDACL";
+        case CMD_0010_1110_d16_Rd0B_DACHDACL: return "DACHDACL";
+        case CMD_0011_0000_d16_Wr0C_ConfigA: return "ConfigA";
+        case CMD_0011_0010_d16_Rd0C_ConfigA: return "ConfigA";
+        case CMD_0011_0100_d16_Wr0D_ConfigB: return "ConfigB";
+        case CMD_0011_0110_d16_Rd0D_ConfigB: return "ConfigB";
+        case CMD_0011_1000_d16_Wr0E_ConfigC: return "ConfigC";
+        case CMD_0011_1010_d16_Rd0E_ConfigC: return "ConfigC";
+        case CMD_0011_1100_d16_Wr0F_ConfigD: return "ConfigD";
+        case CMD_0011_1110_d16_Rd0F_ConfigD: return "ConfigD";
+        case CMD_0100_0000_d16_Wr10_Reference: return "Reference";
+        case CMD_0100_0010_d16_Rd10_Reference: return "Reference";
+        case CMD_0100_0100_d16_Wr11_AGain: return "AGain";
+        case CMD_0100_0110_d16_Rd11_AGain: return "AGain";
+        case CMD_0100_1000_d16_Wr12_BGain: return "BGain";
+        case CMD_0100_1010_d16_Rd12_BGain: return "BGain";
+        case CMD_0100_1100_d16_Wr13_CGain: return "CGain";
+        case CMD_0100_1110_d16_Rd13_CGain: return "CGain";
+        case CMD_0101_0000_d16_Wr14_DGain: return "DGain";
+        case CMD_0101_0010_d16_Rd14_DGain: return "DGain";
+        case CMD_0101_0100_d8_Wr15_FilterCAddress: return "FilterCAddress";
+        case CMD_0101_0110_d8_Rd15_FilterCAddress: return "FilterCAddress";
+        case CMD_0101_1000_d32_Wr16_FilterCDataOut: return "FilterCDataOut";
+        case CMD_0101_1010_d32_Rd16_FilterCDataOut: return "FilterCDataOut";
+        case CMD_0101_1100_d32_Wr17_FilterCDataIn: return "FilterCDataIn";
+        case CMD_0101_1110_d32_Rd17_FilterCDataIn: return "FilterCDataIn";
+        case CMD_0110_0000_d8_Wr18_FlashMode: return "FlashMode";
+        case CMD_0110_0010_d8_Rd18_FlashMode: return "FlashMode";
+        case CMD_0110_0100_d16_Wr19_FlashAddr: return "FlashAddr";
+        case CMD_0110_0110_d16_Rd19_FlashAddr: return "FlashAddr";
+        case CMD_0110_1000_d16_Wr1A_FlashDataIn: return "FlashDataIn";
+        case CMD_0110_1010_d16_Rd1A_FlashDataIn: return "FlashDataIn";
+        case CMD_0110_1110_d16_Rd1B_FlashDataOut: return "FlashDataOut";
+    }
+}
+
+
+// End of file
--- a/MAX11043/MAX11043.h	Tue Feb 11 01:16:34 2020 +0000
+++ b/MAX11043/MAX11043.h	Tue Feb 11 09:01:20 2020 +0000
@@ -1,832 +1,831 @@
-// /*******************************************************************************
-// * Copyright (C) 2020 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"),
-// * to deal in the Software without restriction, including without limitation
-// * the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// * and/or sell copies of the Software, and to permit persons to whom the
-// * Software is furnished to do so, subject to the following conditions:
-// *
-// * The above copyright notice and this permission notice shall be included
-// * in all copies or substantial portions of the Software.
-// *
-// * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-// * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
-// * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-// * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-// * OTHER DEALINGS IN THE SOFTWARE.
-// *
-// * Except as contained in this notice, the name of Maxim Integrated
-// * Products, Inc. shall not be used except as stated in the Maxim Integrated
-// * Products, Inc. Branding Policy.
-// *
-// * The mere transfer of this software does not imply any licenses
-// * of trade secrets, proprietary technology, copyrights, patents,
-// * trademarks, maskwork rights, or any other form of intellectual
-// * property whatsoever. Maxim Integrated Products, Inc. retains all
-// * ownership rights.
-// *******************************************************************************
-// */
-// *********************************************************************
-// @file MAX11043.h
-// *********************************************************************
-// Header file
-// DO NOT EDIT; except areas designated "CUSTOMIZE". Automatically generated file.
-// generated by XMLSystemOfDevicesToMBED.py
-// System Name = ExampleSystem
-// System Description = Device driver example
-// Device Name = MAX11043
-// Device Description = 200ksps, Low-Power, Serial SPI 24-Bit, 4-Channel, Differential/Single-Ended Input, Simultaneous-Sampling SD ADC
-// Device DeviceBriefDescription = 24-bit 200ksps Delta-Sigma ADC
-// Device Manufacturer = Maxim Integrated
-// Device PartNumber = MAX11043ATL+
-// Device RegValue_Width = DataWidth16bit_HL
-//
-// ADC MaxOutputDataRate = 200ksps
-// ADC NumChannels = 4
-// ADC ResolutionBits = 24
-//
-// SPI CS = ActiveLow
-// SPI FrameStart = CS
-// SPI CPOL = 0
-// SPI CPHA = 0
-// SPI MOSI and MISO Data are both stable on Rising edge of SCLK
-// SPI SCLK Idle Low
-// SPI SCLKMaxMHz = 40
-// SPI SCLKMinMHz = 0
-//
-
-
-// Prevent multiple declaration
-#ifndef __MAX11043_H__
-#define __MAX11043_H__
-
-// 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
-//      - 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://os.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
-//      - remove max32630fthr library (if present)
-//      - remove MAX32620FTHR library (if present)
-//      - not tested yet
-//
-// end Platform_Include_Boilerplate
-
-// CODE GENERATOR: conditional defines
-// CODE GENERATOR: class declaration and docstrings
-/**
- * @brief MAX11043 200ksps, Low-Power, Serial SPI 24-Bit, 4-Channel, Differential/Single-Ended Input, Simultaneous-Sampling SD ADC
- *
- *
- *
- * Datasheet: https://www.maximintegrated.com/MAX11043
- *
- *
- *
- * //---------- CODE GENERATOR: helloCppCodeList
- * @code
- * // CODE GENERATOR: example code includes
- *
- * // 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
- * //      - 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://os.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
- * //      - remove max32630fthr library (if present)
- * //      - remove MAX32620FTHR library (if present)
- * //      - not tested yet
- * //
- * // end Platform_Include_Boilerplate
- * #include "MAX11043.h"
- *
- * // example code board support
- * //MAX32630FTHR pegasus(MAX32630FTHR::VIO_3V3);
- * //DigitalOut rLED(LED1);
- * //DigitalOut gLED(LED2);
- * //DigitalOut bLED(LED3);
- * //
- * // Arduino "shield" connector port definitions (MAX32625MBED shown)
- * #if defined(TARGET_MAX32625MBED)
- * #define A0 AIN_0
- * #define A1 AIN_1
- * #define A2 AIN_2
- * #define A3 AIN_3
- * #define D0 P0_0
- * #define D1 P0_1
- * #define D2 P0_2
- * #define D3 P0_3
- * #define D4 P0_4
- * #define D5 P0_5
- * #define D6 P0_6
- * #define D7 P0_7
- * #define D8 P1_4
- * #define D9 P1_5
- * #define D10 P1_3
- * #define D11 P1_1
- * #define D12 P1_2
- * #define D13 P1_0
- * #endif
- *
- * // example code declare SPI interface
- * #if defined(TARGET_MAX32625MBED)
- * SPI spi(SPI1_MOSI, SPI1_MISO, SPI1_SCK); // mosi, miso, sclk spi1 TARGET_MAX32625MBED: P1_1 P1_2 P1_0 Arduino 10-pin header D11 D12 D13
- * DigitalOut spi_cs(SPI1_SS); // TARGET_MAX32625MBED: P1_3 Arduino 10-pin header D10
- * #elif defined(TARGET_MAX32600MBED)
- * SPI spi(SPI2_MOSI, SPI2_MISO, SPI2_SCK); // mosi, miso, sclk spi1 TARGET_MAX32600MBED: Arduino 10-pin header D11 D12 D13
- * DigitalOut spi_cs(SPI2_SS); // Generic: Arduino 10-pin header D10
- * #else
- * SPI spi(D11, D12, D13); // mosi, miso, sclk spi1 TARGET_MAX32600MBED: Arduino 10-pin header D11 D12 D13
- * DigitalOut spi_cs(D10); // Generic: Arduino 10-pin header D10
- * #endif
- *
- * // example code declare GPIO interface pins
- * DigitalOut CONVRUN_pin(D9); // Digital Configuration Input to MAX11043 device
- * DigitalOut SHDN_pin(D8); // Digital Configuration Input to MAX11043 device
- * DigitalOut DACSTEP_pin(D7); // Digital Configuration Input to MAX11043 device
- * DigitalOut UP_slash_DWNb_pin(D6); // Digital Configuration Input to MAX11043 device
- * DigitalIn EOC_pin(D2); // Digital Event Output from MAX11043 device
- * // example code declare device instance
- * MAX11043 g_MAX11043_device(spi, spi_cs, CONVRUN_pin, SHDN_pin, DACSTEP_pin, UP_slash_DWNb_pin, EOC_pin, MAX11043::MAX11043_IC);
- *
- * // CODE GENERATOR: example code for ADC: serial port declaration
- * //--------------------------------------------------
- * // Declare the Serial driver
- * // default baud rate settings are 9600 8N1
- * // install device driver from http://developer.mbed.org/media/downloads/drivers/mbedWinSerial_16466.exe
- * // see docs https://docs.mbed.com/docs/mbed-os-handbook/en/5.5/getting_started/what_need/
- * #if defined(TARGET_MAX32630)
- *     #include "USBSerial.h"
- * // Hardware serial port over DAPLink
- * // The default baud rate for the DapLink UART is 9600
- * //Serial DAPLINKserial(P2_1, P2_0);     // tx, rx
- * //    #define HAS_DAPLINK_SERIAL 1
- * // Virtual serial port over USB
- * // The baud rate does not affect the virtual USBSerial UART.
- * USBSerial serial;
- * //--------------------------------------------------
- * #elif defined(TARGET_MAX32625MBED)
- *     #include "USBSerial.h"
- * // Hardware serial port over DAPLink
- * // The default baud rate for the DapLink UART is 9600
- * //Serial DAPLINKserial(P2_1, P2_0);     // tx, rx
- * //    #define HAS_DAPLINK_SERIAL 1
- * // Virtual serial port over USB
- * // The baud rate does not affect the virtual USBSerial UART.
- * USBSerial serial;
- * //--------------------------------------------------
- * #elif defined(TARGET_MAX32600)
- *     #include "USBSerial.h"
- * // Hardware serial port over DAPLink
- * // The default baud rate for the DapLink UART is 9600
- * Serial DAPLINKserial(P1_1, P1_0);     // tx, rx
- *     #define HAS_DAPLINK_SERIAL 1
- * // Virtual serial port over USB
- * // The baud rate does not affect the virtual USBSerial UART.
- * USBSerial serial;
- * //--------------------------------------------------
- * #elif defined(TARGET_NUCLEO_F446RE) || defined(TARGET_NUCLEO_F401RE)
- * Serial serial(SERIAL_TX, SERIAL_RX);     // tx, rx
- * //--------------------------------------------------
- * #else
- * #if defined(SERIAL_TX)
- * #warning "target not previously tested; guess serial pins are SERIAL_TX, SERIAL_RX..."
- * Serial serial(SERIAL_TX, SERIAL_RX);     // tx, rx
- * #elif defined(USBTX)
- * #warning "target not previously tested; guess serial pins are USBTX, USBRX..."
- * Serial serial(USBTX, USBRX);     // tx, rx
- * #elif defined(UART_TX)
- * #warning "target not previously tested; guess serial pins are UART_TX, UART_RX..."
- * Serial serial(UART_TX, UART_RX);     // tx, rx
- * #else
- * #warning "target not previously tested; need to define serial pins..."
- * #endif
- * #endif
- * //
- * #include "CmdLine.h"
- * CmdLine cmdLine(serial, "serial");
- *
- * // example code main function
- * int main()
- * {
- *     // CODE GENERATOR: example code: member function Init
- *     g_MAX11043_device.Init();
- *
- *     while (1)
- *     {
- *         // CODE GENERATOR: example code: has no member function REF
- *         // CODE GENERATOR: example code for ADC: repeat-forever convert and print conversion result, one record per line
- *         // CODE GENERATOR: ResolutionBits = 24
- *         // CODE GENERATOR: FScode = None
- *         // CODE GENERATOR: NumChannels = 4
- *         while(1) { // this code repeats forever
- *             // this code repeats forever
- *             // CODE GENERATOR: example code: has no member function ScanStandardExternalClock
- *             // CODE GENERATOR: example code: has no member function ReadAINcode
- *             // wait(3.0);
- *             // CODE GENERATOR: print conversion result
- *             // Use Arduino Serial Plotter to view output: Tools | Serial Plotter
- *             cmdLine.serial().printf("%d", g_MAX11043_device.AINcode[0]);
- *             for (int index = 1; index <= channelId_0_3; index++) {
- *                 cmdLine.serial().printf(",%d", g_MAX11043_device.AINcode[index]);
- *             }
- *             cmdLine.serial().printf("\r\n");
- *
- *         } // this code repeats forever
- *     }
- * }
- * @endcode
- * //---------- CODE GENERATOR: end helloCppCodeList
- */
-class MAX11043 {
-public:
-// CODE GENERATOR: TypedefEnum EnumItem declarations
-// CODE GENERATOR: TypedefEnum MAX11043_CMD_enum_t
-    //----------------------------------------
-    /// Register Addresses
-    ///
-    /// Naming convention is CMD_bitstream_WrAddr_FunctionName
-    /// - first byte format is 0aaa_aar0
-    /// - 0 = bitstream required 0 bit
-    /// - aaa_aa = bitstream 5-bit register address field
-    /// - r = bitstream read/write bit (1=read, 0=write)
-    /// - WrAddr = Write operation to address Addr
-    /// - RdAddr = Read operation from address Addr
-    /// - d8 = 8-bit register data field
-    /// - d16 = 16-bit register data field
-    /// - d24 = 24-bit register data field
-    /// - d32 = 32-bit register data field
-    /// - x = don't care
-    typedef enum MAX11043_CMD_enum_t {
-        CMD_0aaa_aa00_WrAddr_WriteAnyRegister = 0x00, //!< 8'b00000000
-        CMD_0000_0010_d24_Rd00_ADCa = 0x02, //!< 8'b00000010
-        CMD_0000_0110_d24_Rd01_ADCb = 0x06, //!< 8'b00000110
-        CMD_0000_1010_d24_Rd02_ADCc = 0x0a, //!< 8'b00001010
-        CMD_0000_1110_d24_Rd03_ADCd = 0x0e, //!< 8'b00001110
-        CMD_0001_0010_d24_d24_Rd04_ADCab = 0x12, //!< 8'b00010010
-        CMD_0001_0110_d24_d24_Rd05_ADCcd = 0x16, //!< 8'b00010110
-        CMD_0001_1010_d24_d24_d24_d24_Rd06_ADCabcd = 0x1a, //!< 8'b00011010
-        CMD_0001_1110_d8_Rd07_Status = 0x1e, //!< 8'b00011110
-        CMD_0010_0000_d16_Wr08_Configuration = 0x20, //!< 8'b00100000
-        CMD_0010_0010_d16_Rd08_Configuration = 0x22, //!< 8'b00100010
-        CMD_0010_0100_d16_Wr09_DAC = 0x24, //!< 8'b00100100
-        CMD_0010_0110_d16_Rd09_DAC = 0x26, //!< 8'b00100110
-        CMD_0010_1000_d16_Wr0A_DACStep = 0x28, //!< 8'b00101000
-        CMD_0010_1010_d16_Rd0A_DACStep = 0x2a, //!< 8'b00101010
-        CMD_0010_1100_d16_Wr0B_DACHDACL = 0x2c, //!< 8'b00101100
-        CMD_0010_1110_d16_Rd0B_DACHDACL = 0x2e, //!< 8'b00101110
-        CMD_0011_0000_d16_Wr0C_ConfigA = 0x30, //!< 8'b00110000
-        CMD_0011_0010_d16_Rd0C_ConfigA = 0x32, //!< 8'b00110010
-        CMD_0011_0100_d16_Wr0D_ConfigB = 0x34, //!< 8'b00110100
-        CMD_0011_0110_d16_Rd0D_ConfigB = 0x36, //!< 8'b00110110
-        CMD_0011_1000_d16_Wr0E_ConfigC = 0x38, //!< 8'b00111000
-        CMD_0011_1010_d16_Rd0E_ConfigC = 0x3a, //!< 8'b00111010
-        CMD_0011_1100_d16_Wr0F_ConfigD = 0x3c, //!< 8'b00111100
-        CMD_0011_1110_d16_Rd0F_ConfigD = 0x3e, //!< 8'b00111110
-        CMD_0100_0000_d16_Wr10_Reference = 0x40, //!< 8'b01000000
-        CMD_0100_0010_d16_Rd10_Reference = 0x42, //!< 8'b01000010
-        CMD_0100_0100_d16_Wr11_AGain = 0x44, //!< 8'b01000100
-        CMD_0100_0110_d16_Rd11_AGain = 0x46, //!< 8'b01000110
-        CMD_0100_1000_d16_Wr12_BGain = 0x48, //!< 8'b01001000
-        CMD_0100_1010_d16_Rd12_BGain = 0x4a, //!< 8'b01001010
-        CMD_0100_1100_d16_Wr13_CGain = 0x4c, //!< 8'b01001100
-        CMD_0100_1110_d16_Rd13_CGain = 0x4e, //!< 8'b01001110
-        CMD_0101_0000_d16_Wr14_DGain = 0x50, //!< 8'b01010000
-        CMD_0101_0010_d16_Rd14_DGain = 0x52, //!< 8'b01010010
-        CMD_0101_0100_d8_Wr15_FilterCAddress = 0x54, //!< 8'b01010100
-        CMD_0101_0110_d8_Rd15_FilterCAddress = 0x56, //!< 8'b01010110
-        CMD_0101_1000_d32_Wr16_FilterCDataOut = 0x58, //!< 8'b01011000
-        CMD_0101_1010_d32_Rd16_FilterCDataOut = 0x5a, //!< 8'b01011010
-        CMD_0101_1100_d32_Wr17_FilterCDataIn = 0x5c, //!< 8'b01011100
-        CMD_0101_1110_d32_Rd17_FilterCDataIn = 0x5e, //!< 8'b01011110
-        CMD_0110_0000_d8_Wr18_FlashMode = 0x60, //!< 8'b01100000
-        CMD_0110_0010_d8_Rd18_FlashMode = 0x62, //!< 8'b01100010
-        CMD_0110_0100_d16_Wr19_FlashAddr = 0x64, //!< 8'b01100100
-        CMD_0110_0110_d16_Rd19_FlashAddr = 0x66, //!< 8'b01100110
-        CMD_0110_1000_d16_Wr1A_FlashDataIn = 0x68, //!< 8'b01101000
-        CMD_0110_1010_d16_Rd1A_FlashDataIn = 0x6a, //!< 8'b01101010
-        CMD_0110_1110_d16_Rd1B_FlashDataOut = 0x6e, //!< 8'b01101110
-        CMD_0aaa_aa10_RdAddr_ReadAnyRegister = 0x80, //!< 8'b10000000
-        CMD_1111_1111_NoOperationMOSIidleHigh = 0xff, //!< 8'b11111111
-    } MAX11043_CMD_enum_t;
-
-// CODE GENERATOR: TypedefEnum MAX11043_STATUS_enum_t
-    //----------------------------------------
-    /// CMD_0001_1110_d8_Rd_Status
-    /// regAddr=07h
-    /// Status: x x FlashBusy BOOT OFLGA OFLGB OFLGC OFLGD
-    typedef enum MAX11043_STATUS_enum_t {
-        STATUS_xxxx_xxx1_OverflowFlagOFLGD = 0x01, //!< 8'b00000001
-        STATUS_xxxx_xx1x_OverflowFlagOFLGC = 0x02, //!< 8'b00000010
-        STATUS_xxxx_x1xx_OverflowFlagOFLGB = 0x04, //!< 8'b00000100
-        STATUS_xxxx_1xxx_OverflowFlagOFLGA = 0x08, //!< 8'b00001000
-        STATUS_xxx1_xxxx_PowerOnResetBOOT = 0x10, //!< 8'b00010000
-        STATUS_xx1x_xxxx_FlashBusy = 0x20, //!< 8'b00100000
-        STATUS_x1xx_xxxx_RESERVED = 0x40, //!< 8'b01000000
-        STATUS_1xxx_xxxx_RESERVED = 0x80, //!< 8'b10000000
-    } MAX11043_STATUS_enum_t;
-
-// CODE GENERATOR: TypedefEnum MAX11043_CONFIG_enum_t
-    //----------------------------------------
-    /// CMD_0010_0000_d16_Wr_Configuration
-    /// regAddr=08h
-    /// Config: EXTCLK CLKDIV1 CLKDIV0 PD PDA PDB PDC PDD PDDAC PDOSC 24BIT SCHANA SCHANB SCHANC SCHAND DECSEL
-    typedef enum MAX11043_CONFIG_enum_t {
-        CONFIG_xxxx_xxxx_xxxx_xxx1_DECSEL12 = 0x0001, //!< 16'b0000000000000001
-        CONFIG_xxxx_xxxx_xxxx_xx1x_SCHAND = 0x0002, //!< 16'b0000000000000010
-        CONFIG_xxxx_xxxx_xxxx_x1xx_SCHANC = 0x0004, //!< 16'b0000000000000100
-        CONFIG_xxxx_xxxx_xxxx_1xxx_SCHANB = 0x0008, //!< 16'b0000000000001000
-        CONFIG_xxxx_xxxx_xxx1_xxxx_SCHANA = 0x0010, //!< 16'b0000000000010000
-        CONFIG_xxxx_xxxx_xx1x_xxxx_24BIT = 0x0020, //!< 16'b0000000000100000
-        CONFIG_xxxx_xxxx_x1xx_xxxx_PDOSC = 0x0040, //!< 16'b0000000001000000
-        CONFIG_xxxx_xxxx_1xxx_xxxx_PDDAC = 0x0080, //!< 16'b0000000010000000
-        CONFIG_xxxx_xxx1_xxxx_xxxx_PDD = 0x0100, //!< 16'b0000000100000000
-        CONFIG_xxxx_xx1x_xxxx_xxxx_PDC = 0x0200, //!< 16'b0000001000000000
-        CONFIG_xxxx_x1xx_xxxx_xxxx_PDB = 0x0400, //!< 16'b0000010000000000
-        CONFIG_xxxx_1xxx_xxxx_xxxx_PDA = 0x0800, //!< 16'b0000100000000000
-        CONFIG_xxx1_xxxx_xxxx_xxxx_PD = 0x1000, //!< 16'b0001000000000000
-        CONFIG_xx1x_xxxx_xxxx_xxxx_CLKDIV0 = 0x2000, //!< 16'b0010000000000000
-        CONFIG_x1xx_xxxx_xxxx_xxxx_CLKDIV1 = 0x4000, //!< 16'b0100000000000000
-        CONFIG_1xxx_xxxx_xxxx_xxxx_EXTCLK = 0x8000, //!< 16'b1000000000000000
-    } MAX11043_CONFIG_enum_t;
-
-// CODE GENERATOR: TypedefEnum MAX11043_CONFIGABCD_enum_t
-    //----------------------------------------
-    /// CMD_0011_0000_d16_Wr_CONFIGa
-    /// CMD_0011_0100_d16_Wr_CONFIGb
-    /// CMD_0011_1000_d16_Wr_CONFIGc
-    /// CMD_0011_1100_d16_Wr_CONFIGd
-    /// regAddr=0Ch
-    /// regAddr=0Dh
-    /// regAddr=0Eh
-    /// regAddr=0Fh
-    /// ConfigABCD: x x x BDAC[3:0] DIFF EQ MODG[1:0] PDPGA FILT PGAG ENBIASP ENBIASN
-    typedef enum MAX11043_CONFIGABCD_enum_t {
-        CONFIGABCD_xxxx_xxxx_xxxx_xxx1_ENBIASN = 0x0001, //!< 16'b0000000000000001
-        CONFIGABCD_xxxx_xxxx_xxxx_xx1x_ENBIASP = 0x0002, //!< 16'b0000000000000010
-        CONFIGABCD_xxxx_xxxx_xxxx_x1xx_PGAG16 = 0x0004, //!< 16'b0000000000000100
-        CONFIGABCD_xxxx_xxxx_xxxx_1xxx_FILTLP = 0x0008, //!< 16'b0000000000001000
-        CONFIGABCD_xxxx_xxxx_xxx1_xxxx_PDPGA = 0x0010, //!< 16'b0000000000010000
-        CONFIGABCD_xxxx_xxxx_xx1x_xxxx_MODG0 = 0x0020, //!< 16'b0000000000100000
-        CONFIGABCD_xxxx_xxxx_x1xx_xxxx_MODG1 = 0x0040, //!< 16'b0000000001000000
-        CONFIGABCD_xxxx_xxxx_1xxx_xxxx_EQ = 0x0080, //!< 16'b0000000010000000
-        CONFIGABCD_xxxx_xxx1_xxxx_xxxx_DIFF = 0x0100, //!< 16'b0000000100000000
-        CONFIGABCD_xxxx_xx1x_xxxx_xxxx_BDAC0 = 0x0200, //!< 16'b0000001000000000
-        CONFIGABCD_xxxx_x1xx_xxxx_xxxx_BDAC1 = 0x0400, //!< 16'b0000010000000000
-        CONFIGABCD_xxxx_1xxx_xxxx_xxxx_BDAC2 = 0x0800, //!< 16'b0000100000000000
-        CONFIGABCD_xxx1_xxxx_xxxx_xxxx_BDAC3 = 0x1000, //!< 16'b0001000000000000
-        CONFIGABCD_xx1x_xxxx_xxxx_xxxx_RESERVED = 0x2000, //!< 16'b0010000000000000
-        CONFIGABCD_x1xx_xxxx_xxxx_xxxx_RESERVED = 0x4000, //!< 16'b0100000000000000
-        CONFIGABCD_1xxx_xxxx_xxxx_xxxx_RESERVED = 0x8000, //!< 16'b1000000000000000
-    } MAX11043_CONFIGABCD_enum_t;
-
-// CODE GENERATOR: TypedefEnum MAX11043_BDAC_enum_t
-    //----------------------------------------
-    /// CMD_0011_0000_d16_Wr_CONFIGa
-    /// CMD_0011_0100_d16_Wr_CONFIGb
-    /// CMD_0011_1000_d16_Wr_CONFIGc
-    /// CMD_0011_1100_d16_Wr_CONFIGd
-    /// CONFIGABCD_xxx1_xxxx_xxxx_xxxx_BDAC3
-    /// CONFIGABCD_xxxx_1xxx_xxxx_xxxx_BDAC2
-    /// CONFIGABCD_xxxx_x1xx_xxxx_xxxx_BDAC1
-    /// CONFIGABCD_xxxx_xx1x_xxxx_xxxx_BDAC0
-    /// Sets the input bias voltage for AC-coupled signals when ENBIAS_ is set to 1.
-    /// regAddr=0Ch
-    /// regAddr=0Dh
-    /// regAddr=0Eh
-    /// regAddr=0Fh
-    /// ConfigABCD: x x x BDAC[3:0] DIFF EQ MODG[1:0] PDPGA FILT PGAG ENBIASP ENBIASN
-    typedef enum MAX11043_BDAC_enum_t {
-        BDAC_0000_033pctAVDD = 0x00, //!< 8'b00000000
-        BDAC_0001_035pctAVDD = 0x01, //!< 8'b00000001
-        BDAC_0010_038pctAVDD = 0x02, //!< 8'b00000010
-        BDAC_0011_040pctAVDD = 0x03, //!< 8'b00000011
-        BDAC_0100_042pctAVDD = 0x04, //!< 8'b00000100
-        BDAC_0101_044pctAVDD = 0x05, //!< 8'b00000101
-        BDAC_0110_046pctAVDD = 0x06, //!< 8'b00000110
-        BDAC_0111_048pctAVDD = 0x07, //!< 8'b00000111
-        BDAC_1000_050pctAVDD = 0x08, //!< 8'b00001000
-        BDAC_1001_052pctAVDD = 0x09, //!< 8'b00001001
-        BDAC_1010_054pctAVDD = 0x0a, //!< 8'b00001010
-        BDAC_1011_056pctAVDD = 0x0b, //!< 8'b00001011
-        BDAC_1100_058pctAVDD = 0x0c, //!< 8'b00001100
-        BDAC_1101_060pctAVDD = 0x0d, //!< 8'b00001101
-        BDAC_1110_062pctAVDD = 0x0e, //!< 8'b00001110
-        BDAC_1111_065pctAVDD = 0x0f, //!< 8'b00001111
-    } MAX11043_BDAC_enum_t;
-
-// CODE GENERATOR: TypedefEnum MAX11043_REFERENCE_enum_t
-    //----------------------------------------
-    /// CMD_0100_0000_d16_Wr_Reference
-    /// regAddr=10h
-    /// ReferenceDelay: 0 0 0 PURGE[4:0] EXTREF EXBUFA EXBUFB EXBUFC EXBUFD EXBUFDAC EXBUFDACH EXBUFDACL
-    typedef enum MAX11043_REFERENCE_enum_t {
-        REFERENCE_xxxx_xxxx_xxxx_xxx1_EXBUFDACL = 0x0001, //!< 16'b0000000000000001
-        REFERENCE_xxxx_xxxx_xxxx_xx1x_EXBUFDACH = 0x0002, //!< 16'b0000000000000010
-        REFERENCE_xxxx_xxxx_xxxx_x1xx_EXBUFDAC = 0x0004, //!< 16'b0000000000000100
-        REFERENCE_xxxx_xxxx_xxxx_1xxx_EXBUFD = 0x0008, //!< 16'b0000000000001000
-        REFERENCE_xxxx_xxxx_xxx1_xxxx_EXBUFC = 0x0010, //!< 16'b0000000000010000
-        REFERENCE_xxxx_xxxx_xx1x_xxxx_EXBUFB = 0x0020, //!< 16'b0000000000100000
-        REFERENCE_xxxx_xxxx_x1xx_xxxx_EXBUFA = 0x0040, //!< 16'b0000000001000000
-        REFERENCE_xxxx_xxxx_1xxx_xxxx_EXTREF = 0x0080, //!< 16'b0000000010000000
-        REFERENCE_xxxx_xxx1_xxxx_xxxx_PURGE0 = 0x0100, //!< 16'b0000000100000000
-        REFERENCE_xxxx_xx1x_xxxx_xxxx_PURGE1 = 0x0200, //!< 16'b0000001000000000
-        REFERENCE_xxxx_x1xx_xxxx_xxxx_PURGE2 = 0x0400, //!< 16'b0000010000000000
-        REFERENCE_xxxx_1xxx_xxxx_xxxx_PURGE3 = 0x0800, //!< 16'b0000100000000000
-        REFERENCE_xxx1_xxxx_xxxx_xxxx_PURGE4 = 0x1000, //!< 16'b0001000000000000
-        REFERENCE_xx1x_xxxx_xxxx_xxxx_RESERVED = 0x2000, //!< 16'b0010000000000000
-        REFERENCE_x1xx_xxxx_xxxx_xxxx_RESERVED = 0x4000, //!< 16'b0100000000000000
-        REFERENCE_1xxx_xxxx_xxxx_xxxx_RESERVED = 0x8000, //!< 16'b1000000000000000
-    } MAX11043_REFERENCE_enum_t;
-
-// TODO1: CODE GENERATOR: ic_variant -- IC's supported with this driver
-    /**
-     * @brief IC's supported with this driver
-     * @details MAX11043
-     */
-    typedef enum
-    {
-        MAX11043_IC = 0,
-        //MAX11043_IC = 1
-    } MAX11043_ic_t;
-
-// TODO1: CODE GENERATOR: class constructor declaration
-    /**********************************************************//**
-    * @brief Constructor for MAX11043 Class.
-    *
-    * @details Requires an existing SPI object as well as a DigitalOut object.
-    * The DigitalOut object is used for a chip enable signal
-    *
-    * On Entry:
-    *     @param[in] spi - pointer to existing SPI object
-    *     @param[in] cs_pin - pointer to a DigitalOut pin object
-    *     CODE GENERATOR: class constructor docstrings gpio InputPin pins
-    *     @param[in] CONVRUN_pin - pointer to a DigitalOut pin object
-    *     @param[in] SHDN_pin - pointer to a DigitalOut pin object
-    *     @param[in] DACSTEP_pin - pointer to a DigitalOut pin object
-    *     @param[in] UP_slash_DWNb_pin - pointer to a DigitalOut pin object
-    *     CODE GENERATOR: class constructor docstrings gpio OutputPin pins
-    *     @param[in] EOC_pin - pointer to a DigitalIn pin object
-    *     @param[in] ic_variant - which type of MAX11043 is used
-    *
-    * On Exit:
-    *
-    * @return None
-    **************************************************************/
-    MAX11043(SPI &spi, DigitalOut &cs_pin, // SPI interface
-            // CODE GENERATOR: class constructor declaration gpio InputPin pins
-            DigitalOut &CONVRUN_pin, // Digital Configuration Input to MAX11043 device
-            DigitalOut &SHDN_pin, // Digital Configuration Input to MAX11043 device
-            DigitalOut &DACSTEP_pin, // Digital Configuration Input to MAX11043 device
-            DigitalOut &UP_slash_DWNb_pin, // Digital Configuration Input to MAX11043 device
-            // CODE GENERATOR: class constructor declaration gpio OutputPin pins
-            DigitalIn &EOC_pin, // Digital Event Output from MAX11043 device
-            MAX11043_ic_t ic_variant);
-
-// CODE GENERATOR: class destructor declaration
-    /************************************************************
-     * @brief Default destructor for MAX11043 Class.
-     *
-     * @details Destroys SPI object if owner
-     *
-     * On Entry:
-     *
-     * On Exit:
-     *
-     * @return None
-     **************************************************************/
-    ~MAX11043();
-
-    // CODE GENERATOR: Declare SPI diagnostic function pointer void onSPIprint()
-    /// Function pointer void f(size_t byteCount, uint8_t mosiData[], uint8_t misoData[])
-    Callback<void(size_t, uint8_t*, uint8_t*)> onSPIprint; //!< optional @ref onSPIprint SPI diagnostic function
-
-    // CODE GENERATOR: spi_frequency setter declaration
-    /// set SPI SCLK frequency
-    void spi_frequency(int spi_sclk_Hz);
-
-    // CODE GENERATOR: spi_frequency getter declaration and definition
-    /// get SPI SCLK frequency
-    int get_spi_frequency() const { return m_SPI_SCLK_Hz; }
-
-    // CODE GENERATOR: spi_dataMode getter declaration and definition
-    /// get SPI mode
-    int get_spi_dataMode() const { return m_SPI_dataMode; }
-
-//----------------------------------------
-// CODE GENERATOR: omit typedef enum MAX11043_device_t, class members instead of global device object
-public:
-
-    /// TODO1: AC79 MAX11043 AIN0-AIN1 reference voltage, in Volts
-    double VRef_xxxxxx;
-
-    /// TODO1: AC79 MAX11043 shadow of register ctrl CMD_r000_1001_dddd_dddd_CTRL
-    uint32_t ctrl;
-
-    /// TODO1: AC79 MAX11043 read-only pga gain 1, 2, 4, 8, 16, 32, 64, or 128 set by Configure_PGA gain index register pga CMD_r000_1110_xxdd_xddd_PGA
-    uint8_t pgaGain;
-
-    /// TODO1: AC79 MAX11043 shadow of register status CMD_r011_1000_dddd_dddd_dddd_dddd_dxxx_dddd_STATUS
-    uint32_t status;
-
-    /// TODO1: AC79 MAX11043 shadow of register data0 CMD_r011_0000_dddd_dddd_dddd_dddd_dddd_dddd_DATA0
-    uint32_t data0;
-
-    /// TODO1: AC79 MAX11043 Each channel's most recent value in LSBs.
-    /// Updated by Measure_Voltage function.
-    /// Use VoltageOfCode function to convert LSBs to physical voltage.
-    /// (Valid index range AINP_SEL_0000_AIN0 to AINP_SEL_1010_AVDD)
-    ///
-    uint32_t AINcode[11];
-
-// CODE GENERATOR: omit global g_MAX11043_device
-
-// CODE GENERATOR: extern function declarations
-// CODE GENERATOR: extern function declaration SPIoutputCS
-//----------------------------------------
-// Assert SPI Chip Select
-// SPI chip-select for MAX11043
-//
-    void SPIoutputCS(int isLogicHigh);
-
-// CODE GENERATOR: extern function declaration SPIwrite16bits
-//----------------------------------------
-// SPI write 16 bits
-// SPI interface to MAX11043 shift 16 bits mosiData into MAX11043 DIN
-//
-    void SPIwrite16bits(int16_t mosiData16);
-
-// CODE GENERATOR: extern function declaration SPIreadWrite16bits
-//----------------------------------------
-// SPI read and write 16 bits
-// SPI interface to MAX11043 shift 16 bits mosiData16 into MAX11043 DIN
-// while simultaneously capturing 16 bits miso data from MAX11043 DOUT
-//
-    int16_t SPIreadWrite16bits(int16_t mosiData16);
-
-// CODE GENERATOR: extern function declaration SPIreadWrite32bits
-//----------------------------------------
-// SPI read and write 32 bits
-// SPI interface to MAX11043 shift 32 bits mosiData into MAX11043 DIN
-// while simultaneously capturing 32 bits miso data from MAX11043 DOUT
-//
-    int32_t SPIreadWrite32bits(int32_t mosiData32);
-
-// CODE GENERATOR: extern function declaration SHDNoutputValue
-//----------------------------------------
-// Assert MAX11043 SHDN pin : High = _____, Low = _____.
-//
-    void SHDNoutputValue(int isLogicHigh);
-
-// CODE GENERATOR: extern function declaration CONVRUNoutputValue
-//----------------------------------------
-// Assert MAX11043 CONVRUN pin : High = _____, Low = _____.
-//
-    void CONVRUNoutputValue(int isLogicHigh);
-
-// CODE GENERATOR: extern function declaration DACSTEPoutputValue
-//----------------------------------------
-// Assert MAX11043 DACSTEP pin : High = _____, Low = _____.
-//
-    void DACSTEPoutputValue(int isLogicHigh);
-
-// CODE GENERATOR: extern function declaration UP_slash_DWNboutputValue
-//----------------------------------------
-// Assert MAX11043 UP_slash_DWNb pin : High = _____, Low = _____.
-//
-    void UP_slash_DWNboutputValue(int isLogicHigh);
-
-// CODE GENERATOR: extern function declaration EOCinputWaitUntilLow
-//----------------------------------------
-// Wait for MAX11043 EOC pin low, indicating end of conversion.
-// Required when using any of the InternalClock modes.
-//
-    void EOCinputWaitUntilLow();
-
-// CODE GENERATOR: extern function declaration EOCinputValue
-//----------------------------------------
-// Return the status of the MAX11043 EOC pin.
-//
-    int EOCinputValue();
-
-// CODE GENERATOR: class member data
-private:
-// CODE GENERATOR: class member data for SPI interface
-    // SPI object
-    SPI &m_spi;
-    int m_SPI_SCLK_Hz;
-    int m_SPI_dataMode;
-    int m_SPI_cs_state;
-
-    // Selector pin object
-    DigitalOut &m_cs_pin;
-
-// CODE GENERATOR: class member data for gpio InputPin pins
-// InputPin Name = CONVRUN
-// InputPin Description = CONVRUN (digital input). Convert Run. Drive high to start continuous conversions on all 4 channels. The device is idle when
-// CONVRUN is low.
-// InputPin Function = Configuration
-    DigitalOut &m_CONVRUN_pin;
-//
-// InputPin Name = SHDN
-// InputPin Description = Shutdown (digital input). Active-High Shutdown Input. Drive high to shut down the MAX11043.
-// InputPin Function = Configuration
-    DigitalOut &m_SHDN_pin;
-//
-// InputPin Name = DACSTEP
-// InputPin Description = DACSTEP (digital input). DAC Step Input. Drive high to move the DAC output in the direction of UP/DWN on the next rising
-// edge of the system clock.
-// InputPin Function = Configuration
-    DigitalOut &m_DACSTEP_pin;
-//
-// InputPin Name = UP/DWN#
-// InputPin Description = UP/DWN# (digital input). DAC Step Direction Select. Drive high to step up, drive low to step down when DACSTEP is toggled.
-// InputPin Function = Configuration
-    DigitalOut &m_UP_slash_DWNb_pin;
-//
-// CODE GENERATOR: class member data for gpio OutputPin pins
-// OutputPin Name = EOC
-// OutputPin Description = End of Conversion Output. Active-Low End-of-Conversion Indicator. EOC asserts low to indicate that new data is ready.
-// OutputPin Function = Event
-    DigitalIn &m_EOC_pin;
-//
-
-    // Identifies which IC variant is being used
-    MAX11043_ic_t m_ic_variant;
-
-public:
-
-// CODE GENERATOR: class member function declarations
-    //----------------------------------------
-    /// Menu item '!'
-    /// Initialize device
-    /// @return 1 on success; 0 on failure
-    uint8_t Init(void);
-
-// CODE GENERATOR: looks like this is a register access function because 'regAdd'
-// CODE GENERATOR: looks like this is a 'write' register access function
-// CODE GENERATOR: looks like this is a register access function because 'regAdd'
-// CODE GENERATOR: looks like this is a 'write' register access function: omit this function from test menu
-    //----------------------------------------
-    /// Write a MAX11043 register.
-    ///
-    /// CMD_1aaa_aaaa_REGISTER_READ bit is cleared 0 indicating a write operation.
-    ///
-    /// MAX11043 register length can be determined by function RegSize.
-    ///
-    /// For 8-bit register size:
-    ///
-    ///     SPI 16-bit transfer
-    ///
-    ///     SPI MOSI = 0aaa_aaaa_dddd_dddd
-    ///
-    ///     SPI MISO = xxxx_xxxx_xxxx_xxxx
-    ///
-    /// For 16-bit register size:
-    ///
-    ///     SPI 24-bit or 32-bit transfer
-    ///
-    ///     SPI MOSI = 0aaa_aaaa_dddd_dddd_dddd_dddd
-    ///
-    ///     SPI MISO = xxxx_xxxx_xxxx_xxxx_xxxx_xxxx
-    ///
-    /// For 24-bit register size:
-    ///
-    ///     SPI 32-bit transfer
-    ///
-    ///     SPI MOSI = 0aaa_aaaa_dddd_dddd_dddd_dddd_dddd_dddd
-    ///
-    ///     SPI MISO = xxxx_xxxx_xxxx_xxxx_xxxx_xxxx_xxxx_xxxx
-    ///
-    /// @return 1 on success; 0 on failure
-    uint8_t RegWrite(MAX11043_CMD_enum_t commandByte, uint32_t regData);
-
-// CODE GENERATOR: looks like this is a register access function because 'regAdd'
-// CODE GENERATOR: looks like this is a 'read' register access function
-// CODE GENERATOR: looks like this is a register access function because 'regAdd'
-// CODE GENERATOR: looks like this is a 'read' register access function: omit this function from test menu
-    //----------------------------------------
-    /// Read an 8-bit MAX11043 register
-    ///
-    /// CMD_1aaa_aaaa_REGISTER_READ bit is set 1 indicating a read operation.
-    ///
-    /// MAX11043 register length can be determined by function RegSize.
-    ///
-    /// For 8-bit register size:
-    ///
-    ///     SPI 16-bit transfer
-    ///
-    ///     SPI MOSI = 1aaa_aaaa_0000_0000
-    ///
-    ///     SPI MISO = xxxx_xxxx_dddd_dddd
-    ///
-    /// For 16-bit register size:
-    ///
-    ///     SPI 24-bit or 32-bit transfer
-    ///
-    ///     SPI MOSI = 1aaa_aaaa_0000_0000_0000_0000
-    ///
-    ///     SPI MISO = xxxx_xxxx_dddd_dddd_dddd_dddd
-    ///
-    /// For 24-bit register size:
-    ///
-    ///     SPI 32-bit transfer
-    ///
-    ///     SPI MOSI = 1aaa_aaaa_0000_0000_0000_0000_0000_0000
-    ///
-    ///     SPI MISO = xxxx_xxxx_dddd_dddd_dddd_dddd_dddd_dddd
-    ///
-    ///
-    /// @return 1 on success; 0 on failure
-    uint8_t RegRead(MAX11043_CMD_enum_t commandByte, uint32_t* ptrRegData);
-
-// CODE GENERATOR: looks like this is a register access function because 'regAdd'
-// CODE GENERATOR: looks like this is a 'size' register access function
-    //----------------------------------------
-    /// Return the size of a MAX11043 register
-    ///
-    /// @return 8 for 8-bit, 16 for 16-bit, 24 for 24-bit, else 0 for undefined register size
-    uint8_t RegSize(MAX11043_CMD_enum_t commandByte);
-
-// CODE GENERATOR: looks like this is a register access function because 'regAdd'
-    //----------------------------------------
-    /// Return the address field of a MAX11043 register
-    ///
-    /// @return register address field as given in datasheet
-    uint8_t RegAddrOfCommand(MAX11043_CMD_enum_t commandByte);
-
-// CODE GENERATOR: looks like this is a register access function because 'regAdd'
-// CODE GENERATOR: looks like this is a 'read' register access function
-    //----------------------------------------
-    /// Test whether a command byte is a register read command
-    ///
-    /// @return true if command byte is a register read command
-    uint8_t IsRegReadCommand(MAX11043_CMD_enum_t commandByte);
-
-// CODE GENERATOR: looks like this is a register access function because 'regAdd'
-// CODE GENERATOR: looks like this is a 'name' register access function
-    //----------------------------------------
-    /// Return the name of a MAX11043 register
-    ///
-    /// @return null-terminated constant C string containing register name or empty string
-    const char* RegName(MAX11043_CMD_enum_t commandByte);
-
-}; // end of class MAX11043
-
-#endif // __MAX11043_H__
-
-// End of file
+// /*******************************************************************************
+// * Copyright (C) 2020 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"),
+// * to deal in the Software without restriction, including without limitation
+// * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+// * and/or sell copies of the Software, and to permit persons to whom the
+// * Software is furnished to do so, subject to the following conditions:
+// *
+// * The above copyright notice and this permission notice shall be included
+// * in all copies or substantial portions of the Software.
+// *
+// * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+// * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+// * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
+// * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+// * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+// * OTHER DEALINGS IN THE SOFTWARE.
+// *
+// * Except as contained in this notice, the name of Maxim Integrated
+// * Products, Inc. shall not be used except as stated in the Maxim Integrated
+// * Products, Inc. Branding Policy.
+// *
+// * The mere transfer of this software does not imply any licenses
+// * of trade secrets, proprietary technology, copyrights, patents,
+// * trademarks, maskwork rights, or any other form of intellectual
+// * property whatsoever. Maxim Integrated Products, Inc. retains all
+// * ownership rights.
+// *******************************************************************************
+// */
+// *********************************************************************
+// @file MAX11043.h
+// *********************************************************************
+// Header file
+// DO NOT EDIT; except areas designated "CUSTOMIZE". Automatically generated file.
+// generated by XMLSystemOfDevicesToMBED.py
+// System Name = ExampleSystem
+// System Description = Device driver example
+// Device Name = MAX11043
+// Device Description = 200ksps, Low-Power, Serial SPI 24-Bit, 4-Channel, Differential/Single-Ended Input, Simultaneous-Sampling SD ADC
+// Device DeviceBriefDescription = 24-bit 200ksps Delta-Sigma ADC
+// Device Manufacturer = Maxim Integrated
+// Device PartNumber = MAX11043ATL+
+// Device RegValue_Width = DataWidth16bit_HL
+//
+// ADC MaxOutputDataRate = 200ksps
+// ADC NumChannels = 4
+// ADC ResolutionBits = 24
+//
+// SPI CS = ActiveLow
+// SPI FrameStart = CS
+// SPI CPOL = 0
+// SPI CPHA = 0
+// SPI MOSI and MISO Data are both stable on Rising edge of SCLK
+// SPI SCLK Idle Low
+// SPI SCLKMaxMHz = 40
+// SPI SCLKMinMHz = 0
+//
+
+
+// Prevent multiple declaration
+#ifndef __MAX11043_H__
+#define __MAX11043_H__
+
+// 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
+//      - 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://os.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
+//      - remove max32630fthr library (if present)
+//      - remove MAX32620FTHR library (if present)
+//      - not tested yet
+//
+// end Platform_Include_Boilerplate
+
+// CODE GENERATOR: conditional defines
+// CODE GENERATOR: class declaration and docstrings
+/**
+ * @brief MAX11043 200ksps, Low-Power, Serial SPI 24-Bit, 4-Channel, Differential/Single-Ended Input, Simultaneous-Sampling SD ADC
+ *
+ *
+ *
+ * Datasheet: https://www.maximintegrated.com/MAX11043
+ *
+ *
+ *
+ * //---------- CODE GENERATOR: helloCppCodeList
+ * @code
+ * // CODE GENERATOR: example code includes
+ *
+ * // 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
+ * //      - 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://os.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
+ * //      - remove max32630fthr library (if present)
+ * //      - remove MAX32620FTHR library (if present)
+ * //      - not tested yet
+ * //
+ * // end Platform_Include_Boilerplate
+ * #include "MAX11043.h"
+ *
+ * // example code board support
+ * //MAX32630FTHR pegasus(MAX32630FTHR::VIO_3V3);
+ * //DigitalOut rLED(LED1);
+ * //DigitalOut gLED(LED2);
+ * //DigitalOut bLED(LED3);
+ * //
+ * // Arduino "shield" connector port definitions (MAX32625MBED shown)
+ * #if defined(TARGET_MAX32625MBED)
+ * #define A0 AIN_0
+ * #define A1 AIN_1
+ * #define A2 AIN_2
+ * #define A3 AIN_3
+ * #define D0 P0_0
+ * #define D1 P0_1
+ * #define D2 P0_2
+ * #define D3 P0_3
+ * #define D4 P0_4
+ * #define D5 P0_5
+ * #define D6 P0_6
+ * #define D7 P0_7
+ * #define D8 P1_4
+ * #define D9 P1_5
+ * #define D10 P1_3
+ * #define D11 P1_1
+ * #define D12 P1_2
+ * #define D13 P1_0
+ * #endif
+ *
+ * // example code declare SPI interface
+ * #if defined(TARGET_MAX32625MBED)
+ * SPI spi(SPI1_MOSI, SPI1_MISO, SPI1_SCK); // mosi, miso, sclk spi1 TARGET_MAX32625MBED: P1_1 P1_2 P1_0 Arduino 10-pin header D11 D12 D13
+ * DigitalOut spi_cs(SPI1_SS); // TARGET_MAX32625MBED: P1_3 Arduino 10-pin header D10
+ * #elif defined(TARGET_MAX32600MBED)
+ * SPI spi(SPI2_MOSI, SPI2_MISO, SPI2_SCK); // mosi, miso, sclk spi1 TARGET_MAX32600MBED: Arduino 10-pin header D11 D12 D13
+ * DigitalOut spi_cs(SPI2_SS); // Generic: Arduino 10-pin header D10
+ * #else
+ * SPI spi(D11, D12, D13); // mosi, miso, sclk spi1 TARGET_MAX32600MBED: Arduino 10-pin header D11 D12 D13
+ * DigitalOut spi_cs(D10); // Generic: Arduino 10-pin header D10
+ * #endif
+ *
+ * // example code declare GPIO interface pins
+ * DigitalOut CONVRUN_pin(D9); // Digital Configuration Input to MAX11043 device
+ * DigitalOut SHDN_pin(D8); // Digital Configuration Input to MAX11043 device
+ * DigitalOut DACSTEP_pin(D7); // Digital Configuration Input to MAX11043 device
+ * DigitalOut UP_slash_DWNb_pin(D6); // Digital Configuration Input to MAX11043 device
+ * DigitalIn EOC_pin(D2); // Digital Event Output from MAX11043 device
+ * // example code declare device instance
+ * MAX11043 g_MAX11043_device(spi, spi_cs, CONVRUN_pin, SHDN_pin, DACSTEP_pin, UP_slash_DWNb_pin, EOC_pin, MAX11043::MAX11043_IC);
+ *
+ * // CODE GENERATOR: example code for ADC: serial port declaration
+ * //--------------------------------------------------
+ * // Declare the Serial driver
+ * // default baud rate settings are 9600 8N1
+ * // install device driver from http://developer.mbed.org/media/downloads/drivers/mbedWinSerial_16466.exe
+ * // see docs https://docs.mbed.com/docs/mbed-os-handbook/en/5.5/getting_started/what_need/
+ * #if defined(TARGET_MAX32630)
+ *     #include "USBSerial.h"
+ * // Hardware serial port over DAPLink
+ * // The default baud rate for the DapLink UART is 9600
+ * //Serial DAPLINKserial(P2_1, P2_0);     // tx, rx
+ * //    #define HAS_DAPLINK_SERIAL 1
+ * // Virtual serial port over USB
+ * // The baud rate does not affect the virtual USBSerial UART.
+ * USBSerial serial;
+ * //--------------------------------------------------
+ * #elif defined(TARGET_MAX32625MBED)
+ *     #include "USBSerial.h"
+ * // Hardware serial port over DAPLink
+ * // The default baud rate for the DapLink UART is 9600
+ * //Serial DAPLINKserial(P2_1, P2_0);     // tx, rx
+ * //    #define HAS_DAPLINK_SERIAL 1
+ * // Virtual serial port over USB
+ * // The baud rate does not affect the virtual USBSerial UART.
+ * USBSerial serial;
+ * //--------------------------------------------------
+ * #elif defined(TARGET_MAX32600)
+ *     #include "USBSerial.h"
+ * // Hardware serial port over DAPLink
+ * // The default baud rate for the DapLink UART is 9600
+ * Serial DAPLINKserial(P1_1, P1_0);     // tx, rx
+ *     #define HAS_DAPLINK_SERIAL 1
+ * // Virtual serial port over USB
+ * // The baud rate does not affect the virtual USBSerial UART.
+ * USBSerial serial;
+ * //--------------------------------------------------
+ * #elif defined(TARGET_NUCLEO_F446RE) || defined(TARGET_NUCLEO_F401RE)
+ * Serial serial(SERIAL_TX, SERIAL_RX);     // tx, rx
+ * //--------------------------------------------------
+ * #else
+ * #if defined(SERIAL_TX)
+ * #warning "target not previously tested; guess serial pins are SERIAL_TX, SERIAL_RX..."
+ * Serial serial(SERIAL_TX, SERIAL_RX);     // tx, rx
+ * #elif defined(USBTX)
+ * #warning "target not previously tested; guess serial pins are USBTX, USBRX..."
+ * Serial serial(USBTX, USBRX);     // tx, rx
+ * #elif defined(UART_TX)
+ * #warning "target not previously tested; guess serial pins are UART_TX, UART_RX..."
+ * Serial serial(UART_TX, UART_RX);     // tx, rx
+ * #else
+ * #warning "target not previously tested; need to define serial pins..."
+ * #endif
+ * #endif
+ * //
+ * #include "CmdLine.h"
+ * CmdLine cmdLine(serial, "serial");
+ *
+ * // example code main function
+ * int main()
+ * {
+ *     // CODE GENERATOR: example code: member function Init
+ *     g_MAX11043_device.Init();
+ *
+ *     while (1)
+ *     {
+ *         // CODE GENERATOR: example code: has no member function REF
+ *         // CODE GENERATOR: example code for ADC: repeat-forever convert and print conversion result, one record per line
+ *         // CODE GENERATOR: ResolutionBits = 24
+ *         // CODE GENERATOR: FScode = None
+ *         // CODE GENERATOR: NumChannels = 4
+ *         while(1) { // this code repeats forever
+ *             // this code repeats forever
+ *             // CODE GENERATOR: example code: has no member function ScanStandardExternalClock
+ *             // CODE GENERATOR: example code: has no member function ReadAINcode
+ *             // wait(3.0);
+ *             // CODE GENERATOR: print conversion result
+ *             // Use Arduino Serial Plotter to view output: Tools | Serial Plotter
+ *             cmdLine.serial().printf("%d", g_MAX11043_device.AINcode[0]);
+ *             for (int index = 1; index <= channelId_0_3; index++) {
+ *                 cmdLine.serial().printf(",%d", g_MAX11043_device.AINcode[index]);
+ *             }
+ *             cmdLine.serial().printf("\r\n");
+ *
+ *         } // this code repeats forever
+ *     }
+ * }
+ * @endcode
+ * //---------- CODE GENERATOR: end helloCppCodeList
+ */
+class MAX11043 {
+public:
+// CODE GENERATOR: TypedefEnum EnumItem declarations
+// CODE GENERATOR: TypedefEnum MAX11043_CMD_enum_t
+    //----------------------------------------
+    /// Register Addresses
+    ///
+    /// Naming convention is CMD_bitstream_WrAddr_FunctionName
+    /// - first byte format is 0aaa_aar0
+    /// - 0 = bitstream required 0 bit
+    /// - aaa_aa = bitstream 5-bit register address field
+    /// - r = bitstream read/write bit (1=read, 0=write)
+    /// - WrAddr = Write operation to address Addr
+    /// - RdAddr = Read operation from address Addr
+    /// - d8 = 8-bit register data field
+    /// - d16 = 16-bit register data field
+    /// - d24 = 24-bit register data field
+    /// - d32 = 32-bit register data field
+    /// - x = don't care
+    typedef enum MAX11043_CMD_enum_t {
+        CMD_0aaa_aa00_WrAddr_WriteAnyRegister = 0x00, //!< 8'b00000000
+        CMD_0000_0010_d24_Rd00_ADCa = 0x02, //!< 8'b00000010
+        CMD_0000_0110_d24_Rd01_ADCb = 0x06, //!< 8'b00000110
+        CMD_0000_1010_d24_Rd02_ADCc = 0x0a, //!< 8'b00001010
+        CMD_0000_1110_d24_Rd03_ADCd = 0x0e, //!< 8'b00001110
+        CMD_0001_0010_d24_d24_Rd04_ADCab = 0x12, //!< 8'b00010010
+        CMD_0001_0110_d24_d24_Rd05_ADCcd = 0x16, //!< 8'b00010110
+        CMD_0001_1010_d24_d24_d24_d24_Rd06_ADCabcd = 0x1a, //!< 8'b00011010
+        CMD_0001_1110_d8_Rd07_Status = 0x1e, //!< 8'b00011110
+        CMD_0010_0000_d16_Wr08_Configuration = 0x20, //!< 8'b00100000
+        CMD_0010_0010_d16_Rd08_Configuration = 0x22, //!< 8'b00100010
+        CMD_0010_0100_d16_Wr09_DAC = 0x24, //!< 8'b00100100
+        CMD_0010_0110_d16_Rd09_DAC = 0x26, //!< 8'b00100110
+        CMD_0010_1000_d16_Wr0A_DACStep = 0x28, //!< 8'b00101000
+        CMD_0010_1010_d16_Rd0A_DACStep = 0x2a, //!< 8'b00101010
+        CMD_0010_1100_d16_Wr0B_DACHDACL = 0x2c, //!< 8'b00101100
+        CMD_0010_1110_d16_Rd0B_DACHDACL = 0x2e, //!< 8'b00101110
+        CMD_0011_0000_d16_Wr0C_ConfigA = 0x30, //!< 8'b00110000
+        CMD_0011_0010_d16_Rd0C_ConfigA = 0x32, //!< 8'b00110010
+        CMD_0011_0100_d16_Wr0D_ConfigB = 0x34, //!< 8'b00110100
+        CMD_0011_0110_d16_Rd0D_ConfigB = 0x36, //!< 8'b00110110
+        CMD_0011_1000_d16_Wr0E_ConfigC = 0x38, //!< 8'b00111000
+        CMD_0011_1010_d16_Rd0E_ConfigC = 0x3a, //!< 8'b00111010
+        CMD_0011_1100_d16_Wr0F_ConfigD = 0x3c, //!< 8'b00111100
+        CMD_0011_1110_d16_Rd0F_ConfigD = 0x3e, //!< 8'b00111110
+        CMD_0100_0000_d16_Wr10_Reference = 0x40, //!< 8'b01000000
+        CMD_0100_0010_d16_Rd10_Reference = 0x42, //!< 8'b01000010
+        CMD_0100_0100_d16_Wr11_AGain = 0x44, //!< 8'b01000100
+        CMD_0100_0110_d16_Rd11_AGain = 0x46, //!< 8'b01000110
+        CMD_0100_1000_d16_Wr12_BGain = 0x48, //!< 8'b01001000
+        CMD_0100_1010_d16_Rd12_BGain = 0x4a, //!< 8'b01001010
+        CMD_0100_1100_d16_Wr13_CGain = 0x4c, //!< 8'b01001100
+        CMD_0100_1110_d16_Rd13_CGain = 0x4e, //!< 8'b01001110
+        CMD_0101_0000_d16_Wr14_DGain = 0x50, //!< 8'b01010000
+        CMD_0101_0010_d16_Rd14_DGain = 0x52, //!< 8'b01010010
+        CMD_0101_0100_d8_Wr15_FilterCAddress = 0x54, //!< 8'b01010100
+        CMD_0101_0110_d8_Rd15_FilterCAddress = 0x56, //!< 8'b01010110
+        CMD_0101_1000_d32_Wr16_FilterCDataOut = 0x58, //!< 8'b01011000
+        CMD_0101_1010_d32_Rd16_FilterCDataOut = 0x5a, //!< 8'b01011010
+        CMD_0101_1100_d32_Wr17_FilterCDataIn = 0x5c, //!< 8'b01011100
+        CMD_0101_1110_d32_Rd17_FilterCDataIn = 0x5e, //!< 8'b01011110
+        CMD_0110_0000_d8_Wr18_FlashMode = 0x60, //!< 8'b01100000
+        CMD_0110_0010_d8_Rd18_FlashMode = 0x62, //!< 8'b01100010
+        CMD_0110_0100_d16_Wr19_FlashAddr = 0x64, //!< 8'b01100100
+        CMD_0110_0110_d16_Rd19_FlashAddr = 0x66, //!< 8'b01100110
+        CMD_0110_1000_d16_Wr1A_FlashDataIn = 0x68, //!< 8'b01101000
+        CMD_0110_1010_d16_Rd1A_FlashDataIn = 0x6a, //!< 8'b01101010
+        CMD_0110_1110_d16_Rd1B_FlashDataOut = 0x6e, //!< 8'b01101110
+        CMD_0aaa_aa10_RdAddr_ReadAnyRegister = 0x80, //!< 8'b10000000
+        CMD_1111_1111_NoOperationMOSIidleHigh = 0xff, //!< 8'b11111111
+    } MAX11043_CMD_enum_t;
+
+// CODE GENERATOR: TypedefEnum MAX11043_STATUS_enum_t
+    //----------------------------------------
+    /// CMD_0001_1110_d8_Rd_Status
+    /// regAddr=07h
+    /// Status: x x FlashBusy BOOT OFLGA OFLGB OFLGC OFLGD
+    typedef enum MAX11043_STATUS_enum_t {
+        STATUS_xxxx_xxx1_OverflowFlagOFLGD = 0x01, //!< 8'b00000001
+        STATUS_xxxx_xx1x_OverflowFlagOFLGC = 0x02, //!< 8'b00000010
+        STATUS_xxxx_x1xx_OverflowFlagOFLGB = 0x04, //!< 8'b00000100
+        STATUS_xxxx_1xxx_OverflowFlagOFLGA = 0x08, //!< 8'b00001000
+        STATUS_xxx1_xxxx_PowerOnResetBOOT = 0x10, //!< 8'b00010000
+        STATUS_xx1x_xxxx_FlashBusy = 0x20, //!< 8'b00100000
+        STATUS_x1xx_xxxx_RESERVED = 0x40, //!< 8'b01000000
+        STATUS_1xxx_xxxx_RESERVED = 0x80, //!< 8'b10000000
+    } MAX11043_STATUS_enum_t;
+
+// CODE GENERATOR: TypedefEnum MAX11043_CONFIG_enum_t
+    //----------------------------------------
+    /// CMD_0010_0000_d16_Wr_Configuration
+    /// regAddr=08h
+    /// Config: EXTCLK CLKDIV1 CLKDIV0 PD PDA PDB PDC PDD PDDAC PDOSC 24BIT SCHANA SCHANB SCHANC SCHAND DECSEL
+    typedef enum MAX11043_CONFIG_enum_t {
+        CONFIG_xxxx_xxxx_xxxx_xxx1_DECSEL12 = 0x0001, //!< 16'b0000000000000001
+        CONFIG_xxxx_xxxx_xxxx_xx1x_SCHAND = 0x0002, //!< 16'b0000000000000010
+        CONFIG_xxxx_xxxx_xxxx_x1xx_SCHANC = 0x0004, //!< 16'b0000000000000100
+        CONFIG_xxxx_xxxx_xxxx_1xxx_SCHANB = 0x0008, //!< 16'b0000000000001000
+        CONFIG_xxxx_xxxx_xxx1_xxxx_SCHANA = 0x0010, //!< 16'b0000000000010000
+        CONFIG_xxxx_xxxx_xx1x_xxxx_24BIT = 0x0020, //!< 16'b0000000000100000
+        CONFIG_xxxx_xxxx_x1xx_xxxx_PDOSC = 0x0040, //!< 16'b0000000001000000
+        CONFIG_xxxx_xxxx_1xxx_xxxx_PDDAC = 0x0080, //!< 16'b0000000010000000
+        CONFIG_xxxx_xxx1_xxxx_xxxx_PDD = 0x0100, //!< 16'b0000000100000000
+        CONFIG_xxxx_xx1x_xxxx_xxxx_PDC = 0x0200, //!< 16'b0000001000000000
+        CONFIG_xxxx_x1xx_xxxx_xxxx_PDB = 0x0400, //!< 16'b0000010000000000
+        CONFIG_xxxx_1xxx_xxxx_xxxx_PDA = 0x0800, //!< 16'b0000100000000000
+        CONFIG_xxx1_xxxx_xxxx_xxxx_PD = 0x1000, //!< 16'b0001000000000000
+        CONFIG_xx1x_xxxx_xxxx_xxxx_CLKDIV0 = 0x2000, //!< 16'b0010000000000000
+        CONFIG_x1xx_xxxx_xxxx_xxxx_CLKDIV1 = 0x4000, //!< 16'b0100000000000000
+        CONFIG_1xxx_xxxx_xxxx_xxxx_EXTCLK = 0x8000, //!< 16'b1000000000000000
+    } MAX11043_CONFIG_enum_t;
 
+// CODE GENERATOR: TypedefEnum MAX11043_CONFIGABCD_enum_t
+    //----------------------------------------
+    /// CMD_0011_0000_d16_Wr_CONFIGa
+    /// CMD_0011_0100_d16_Wr_CONFIGb
+    /// CMD_0011_1000_d16_Wr_CONFIGc
+    /// CMD_0011_1100_d16_Wr_CONFIGd
+    /// regAddr=0Ch
+    /// regAddr=0Dh
+    /// regAddr=0Eh
+    /// regAddr=0Fh
+    /// ConfigABCD: x x x BDAC[3:0] DIFF EQ MODG[1:0] PDPGA FILT PGAG ENBIASP ENBIASN
+    typedef enum MAX11043_CONFIGABCD_enum_t {
+        CONFIGABCD_xxxx_xxxx_xxxx_xxx1_ENBIASN = 0x0001, //!< 16'b0000000000000001
+        CONFIGABCD_xxxx_xxxx_xxxx_xx1x_ENBIASP = 0x0002, //!< 16'b0000000000000010
+        CONFIGABCD_xxxx_xxxx_xxxx_x1xx_PGAG16 = 0x0004, //!< 16'b0000000000000100
+        CONFIGABCD_xxxx_xxxx_xxxx_1xxx_FILTLP = 0x0008, //!< 16'b0000000000001000
+        CONFIGABCD_xxxx_xxxx_xxx1_xxxx_PDPGA = 0x0010, //!< 16'b0000000000010000
+        CONFIGABCD_xxxx_xxxx_xx1x_xxxx_MODG0 = 0x0020, //!< 16'b0000000000100000
+        CONFIGABCD_xxxx_xxxx_x1xx_xxxx_MODG1 = 0x0040, //!< 16'b0000000001000000
+        CONFIGABCD_xxxx_xxxx_1xxx_xxxx_EQ = 0x0080, //!< 16'b0000000010000000
+        CONFIGABCD_xxxx_xxx1_xxxx_xxxx_DIFF = 0x0100, //!< 16'b0000000100000000
+        CONFIGABCD_xxxx_xx1x_xxxx_xxxx_BDAC0 = 0x0200, //!< 16'b0000001000000000
+        CONFIGABCD_xxxx_x1xx_xxxx_xxxx_BDAC1 = 0x0400, //!< 16'b0000010000000000
+        CONFIGABCD_xxxx_1xxx_xxxx_xxxx_BDAC2 = 0x0800, //!< 16'b0000100000000000
+        CONFIGABCD_xxx1_xxxx_xxxx_xxxx_BDAC3 = 0x1000, //!< 16'b0001000000000000
+        CONFIGABCD_xx1x_xxxx_xxxx_xxxx_RESERVED = 0x2000, //!< 16'b0010000000000000
+        CONFIGABCD_x1xx_xxxx_xxxx_xxxx_RESERVED = 0x4000, //!< 16'b0100000000000000
+        CONFIGABCD_1xxx_xxxx_xxxx_xxxx_RESERVED = 0x8000, //!< 16'b1000000000000000
+    } MAX11043_CONFIGABCD_enum_t;
+
+// CODE GENERATOR: TypedefEnum MAX11043_BDAC_enum_t
+    //----------------------------------------
+    /// CMD_0011_0000_d16_Wr_CONFIGa
+    /// CMD_0011_0100_d16_Wr_CONFIGb
+    /// CMD_0011_1000_d16_Wr_CONFIGc
+    /// CMD_0011_1100_d16_Wr_CONFIGd
+    /// CONFIGABCD_xxx1_xxxx_xxxx_xxxx_BDAC3
+    /// CONFIGABCD_xxxx_1xxx_xxxx_xxxx_BDAC2
+    /// CONFIGABCD_xxxx_x1xx_xxxx_xxxx_BDAC1
+    /// CONFIGABCD_xxxx_xx1x_xxxx_xxxx_BDAC0
+    /// Sets the input bias voltage for AC-coupled signals when ENBIAS_ is set to 1.
+    /// regAddr=0Ch
+    /// regAddr=0Dh
+    /// regAddr=0Eh
+    /// regAddr=0Fh
+    /// ConfigABCD: x x x BDAC[3:0] DIFF EQ MODG[1:0] PDPGA FILT PGAG ENBIASP ENBIASN
+    typedef enum MAX11043_BDAC_enum_t {
+        BDAC_0000_033pctAVDD = 0x00, //!< 8'b00000000
+        BDAC_0001_035pctAVDD = 0x01, //!< 8'b00000001
+        BDAC_0010_038pctAVDD = 0x02, //!< 8'b00000010
+        BDAC_0011_040pctAVDD = 0x03, //!< 8'b00000011
+        BDAC_0100_042pctAVDD = 0x04, //!< 8'b00000100
+        BDAC_0101_044pctAVDD = 0x05, //!< 8'b00000101
+        BDAC_0110_046pctAVDD = 0x06, //!< 8'b00000110
+        BDAC_0111_048pctAVDD = 0x07, //!< 8'b00000111
+        BDAC_1000_050pctAVDD = 0x08, //!< 8'b00001000
+        BDAC_1001_052pctAVDD = 0x09, //!< 8'b00001001
+        BDAC_1010_054pctAVDD = 0x0a, //!< 8'b00001010
+        BDAC_1011_056pctAVDD = 0x0b, //!< 8'b00001011
+        BDAC_1100_058pctAVDD = 0x0c, //!< 8'b00001100
+        BDAC_1101_060pctAVDD = 0x0d, //!< 8'b00001101
+        BDAC_1110_062pctAVDD = 0x0e, //!< 8'b00001110
+        BDAC_1111_065pctAVDD = 0x0f, //!< 8'b00001111
+    } MAX11043_BDAC_enum_t;
+
+// CODE GENERATOR: TypedefEnum MAX11043_REFERENCE_enum_t
+    //----------------------------------------
+    /// CMD_0100_0000_d16_Wr_Reference
+    /// regAddr=10h
+    /// ReferenceDelay: 0 0 0 PURGE[4:0] EXTREF EXBUFA EXBUFB EXBUFC EXBUFD EXBUFDAC EXBUFDACH EXBUFDACL
+    typedef enum MAX11043_REFERENCE_enum_t {
+        REFERENCE_xxxx_xxxx_xxxx_xxx1_EXBUFDACL = 0x0001, //!< 16'b0000000000000001
+        REFERENCE_xxxx_xxxx_xxxx_xx1x_EXBUFDACH = 0x0002, //!< 16'b0000000000000010
+        REFERENCE_xxxx_xxxx_xxxx_x1xx_EXBUFDAC = 0x0004, //!< 16'b0000000000000100
+        REFERENCE_xxxx_xxxx_xxxx_1xxx_EXBUFD = 0x0008, //!< 16'b0000000000001000
+        REFERENCE_xxxx_xxxx_xxx1_xxxx_EXBUFC = 0x0010, //!< 16'b0000000000010000
+        REFERENCE_xxxx_xxxx_xx1x_xxxx_EXBUFB = 0x0020, //!< 16'b0000000000100000
+        REFERENCE_xxxx_xxxx_x1xx_xxxx_EXBUFA = 0x0040, //!< 16'b0000000001000000
+        REFERENCE_xxxx_xxxx_1xxx_xxxx_EXTREF = 0x0080, //!< 16'b0000000010000000
+        REFERENCE_xxxx_xxx1_xxxx_xxxx_PURGE0 = 0x0100, //!< 16'b0000000100000000
+        REFERENCE_xxxx_xx1x_xxxx_xxxx_PURGE1 = 0x0200, //!< 16'b0000001000000000
+        REFERENCE_xxxx_x1xx_xxxx_xxxx_PURGE2 = 0x0400, //!< 16'b0000010000000000
+        REFERENCE_xxxx_1xxx_xxxx_xxxx_PURGE3 = 0x0800, //!< 16'b0000100000000000
+        REFERENCE_xxx1_xxxx_xxxx_xxxx_PURGE4 = 0x1000, //!< 16'b0001000000000000
+        REFERENCE_xx1x_xxxx_xxxx_xxxx_RESERVED = 0x2000, //!< 16'b0010000000000000
+        REFERENCE_x1xx_xxxx_xxxx_xxxx_RESERVED = 0x4000, //!< 16'b0100000000000000
+        REFERENCE_1xxx_xxxx_xxxx_xxxx_RESERVED = 0x8000, //!< 16'b1000000000000000
+    } MAX11043_REFERENCE_enum_t;
+
+// TODO1: CODE GENERATOR: ic_variant -- IC's supported with this driver
+    /**
+     * @brief IC's supported with this driver
+     * @details MAX11043
+     */
+    typedef enum
+    {
+        MAX11043_IC = 0,
+        //MAX11043_IC = 1
+    } MAX11043_ic_t;
+
+// TODO1: CODE GENERATOR: class constructor declaration
+    /**********************************************************//**
+    * @brief Constructor for MAX11043 Class.
+    *
+    * @details Requires an existing SPI object as well as a DigitalOut object.
+    * The DigitalOut object is used for a chip enable signal
+    *
+    * On Entry:
+    *     @param[in] spi - pointer to existing SPI object
+    *     @param[in] cs_pin - pointer to a DigitalOut pin object
+    *     CODE GENERATOR: class constructor docstrings gpio InputPin pins
+    *     @param[in] CONVRUN_pin - pointer to a DigitalOut pin object
+    *     @param[in] SHDN_pin - pointer to a DigitalOut pin object
+    *     @param[in] DACSTEP_pin - pointer to a DigitalOut pin object
+    *     @param[in] UP_slash_DWNb_pin - pointer to a DigitalOut pin object
+    *     CODE GENERATOR: class constructor docstrings gpio OutputPin pins
+    *     @param[in] EOC_pin - pointer to a DigitalIn pin object
+    *     @param[in] ic_variant - which type of MAX11043 is used
+    *
+    * On Exit:
+    *
+    * @return None
+    **************************************************************/
+    MAX11043(SPI &spi, DigitalOut &cs_pin, // SPI interface
+            // CODE GENERATOR: class constructor declaration gpio InputPin pins
+            DigitalOut &CONVRUN_pin, // Digital Configuration Input to MAX11043 device
+            DigitalOut &SHDN_pin, // Digital Configuration Input to MAX11043 device
+            DigitalOut &DACSTEP_pin, // Digital Configuration Input to MAX11043 device
+            DigitalOut &UP_slash_DWNb_pin, // Digital Configuration Input to MAX11043 device
+            // CODE GENERATOR: class constructor declaration gpio OutputPin pins
+            DigitalIn &EOC_pin, // Digital Event Output from MAX11043 device
+            MAX11043_ic_t ic_variant);
+
+// CODE GENERATOR: class destructor declaration
+    /************************************************************
+     * @brief Default destructor for MAX11043 Class.
+     *
+     * @details Destroys SPI object if owner
+     *
+     * On Entry:
+     *
+     * On Exit:
+     *
+     * @return None
+     **************************************************************/
+    ~MAX11043();
+
+    // CODE GENERATOR: Declare SPI diagnostic function pointer void onSPIprint()
+    /// Function pointer void f(size_t byteCount, uint8_t mosiData[], uint8_t misoData[])
+    Callback<void(size_t, uint8_t*, uint8_t*)> onSPIprint; //!< optional @ref onSPIprint SPI diagnostic function
+
+    // CODE GENERATOR: spi_frequency setter declaration
+    /// set SPI SCLK frequency
+    void spi_frequency(int spi_sclk_Hz);
+
+    // CODE GENERATOR: spi_frequency getter declaration and definition
+    /// get SPI SCLK frequency
+    int get_spi_frequency() const { return m_SPI_SCLK_Hz; }
+
+    // CODE GENERATOR: spi_dataMode getter declaration and definition
+    /// get SPI mode
+    int get_spi_dataMode() const { return m_SPI_dataMode; }
+
+//----------------------------------------
+// CODE GENERATOR: omit typedef enum MAX11043_device_t, class members instead of global device object
+public:
+
+    /// TODO1: AC79 MAX11043 AIN0-AIN1 reference voltage, in Volts
+    double VRef_xxxxxx;
+
+    /// TODO1: AC79 MAX11043 shadow of register ctrl CMD_r000_1001_dddd_dddd_CTRL
+    uint32_t ctrl;
+
+    /// TODO1: AC79 MAX11043 read-only pga gain 1, 2, 4, 8, 16, 32, 64, or 128 set by Configure_PGA gain index register pga CMD_r000_1110_xxdd_xddd_PGA
+    uint8_t pgaGain;
+
+    /// TODO1: AC79 MAX11043 shadow of register status CMD_r011_1000_dddd_dddd_dddd_dddd_dxxx_dddd_STATUS
+    uint32_t status;
+
+    /// TODO1: AC79 MAX11043 shadow of register data0 CMD_r011_0000_dddd_dddd_dddd_dddd_dddd_dddd_DATA0
+    uint32_t data0;
+
+    /// TODO1: AC79 MAX11043 Each channel's most recent value in LSBs.
+    /// Updated by Measure_Voltage function.
+    /// Use VoltageOfCode function to convert LSBs to physical voltage.
+    /// (Valid index range AINP_SEL_0000_AIN0 to AINP_SEL_1010_AVDD)
+    ///
+    uint32_t AINcode[11];
+
+// CODE GENERATOR: omit global g_MAX11043_device
+
+// CODE GENERATOR: extern function declarations
+// CODE GENERATOR: extern function declaration SPIoutputCS
+//----------------------------------------
+// Assert SPI Chip Select
+// SPI chip-select for MAX11043
+//
+    void SPIoutputCS(int isLogicHigh);
+
+// CODE GENERATOR: extern function declaration SPIwrite16bits
+//----------------------------------------
+// SPI write 16 bits
+// SPI interface to MAX11043 shift 16 bits mosiData into MAX11043 DIN
+//
+    void SPIwrite16bits(int16_t mosiData16);
+
+// CODE GENERATOR: extern function declaration SPIreadWrite16bits
+//----------------------------------------
+// SPI read and write 16 bits
+// SPI interface to MAX11043 shift 16 bits mosiData16 into MAX11043 DIN
+// while simultaneously capturing 16 bits miso data from MAX11043 DOUT
+//
+    int16_t SPIreadWrite16bits(int16_t mosiData16);
+
+// CODE GENERATOR: extern function declaration SPIreadWrite32bits
+//----------------------------------------
+// SPI read and write 32 bits
+// SPI interface to MAX11043 shift 32 bits mosiData into MAX11043 DIN
+// while simultaneously capturing 32 bits miso data from MAX11043 DOUT
+//
+    int32_t SPIreadWrite32bits(int32_t mosiData32);
+
+// CODE GENERATOR: extern function declaration SHDNoutputValue
+//----------------------------------------
+// Assert MAX11043 SHDN pin : High = _____, Low = _____.
+//
+    void SHDNoutputValue(int isLogicHigh);
+
+// CODE GENERATOR: extern function declaration CONVRUNoutputValue
+//----------------------------------------
+// Assert MAX11043 CONVRUN pin : High = _____, Low = _____.
+//
+    void CONVRUNoutputValue(int isLogicHigh);
+
+// CODE GENERATOR: extern function declaration DACSTEPoutputValue
+//----------------------------------------
+// Assert MAX11043 DACSTEP pin : High = _____, Low = _____.
+//
+    void DACSTEPoutputValue(int isLogicHigh);
+
+// CODE GENERATOR: extern function declaration UP_slash_DWNboutputValue
+//----------------------------------------
+// Assert MAX11043 UP_slash_DWNb pin : High = _____, Low = _____.
+//
+    void UP_slash_DWNboutputValue(int isLogicHigh);
+
+// CODE GENERATOR: extern function declaration EOCinputWaitUntilLow
+//----------------------------------------
+// Wait for MAX11043 EOC pin low, indicating end of conversion.
+// Required when using any of the InternalClock modes.
+//
+    void EOCinputWaitUntilLow();
+
+// CODE GENERATOR: extern function declaration EOCinputValue
+//----------------------------------------
+// Return the status of the MAX11043 EOC pin.
+//
+    int EOCinputValue();
+
+// CODE GENERATOR: class member data
+private:
+// CODE GENERATOR: class member data for SPI interface
+    // SPI object
+    SPI &m_spi;
+    int m_SPI_SCLK_Hz;
+    int m_SPI_dataMode;
+    int m_SPI_cs_state;
+
+    // Selector pin object
+    DigitalOut &m_cs_pin;
+
+// CODE GENERATOR: class member data for gpio InputPin pins
+// InputPin Name = CONVRUN
+// InputPin Description = CONVRUN (digital input). Convert Run. Drive high to start continuous conversions on all 4 channels. The device is idle when
+// CONVRUN is low.
+// InputPin Function = Configuration
+    DigitalOut &m_CONVRUN_pin;
+//
+// InputPin Name = SHDN
+// InputPin Description = Shutdown (digital input). Active-High Shutdown Input. Drive high to shut down the MAX11043.
+// InputPin Function = Configuration
+    DigitalOut &m_SHDN_pin;
+//
+// InputPin Name = DACSTEP
+// InputPin Description = DACSTEP (digital input). DAC Step Input. Drive high to move the DAC output in the direction of UP/DWN on the next rising
+// edge of the system clock.
+// InputPin Function = Configuration
+    DigitalOut &m_DACSTEP_pin;
+//
+// InputPin Name = UP/DWN#
+// InputPin Description = UP/DWN# (digital input). DAC Step Direction Select. Drive high to step up, drive low to step down when DACSTEP is toggled.
+// InputPin Function = Configuration
+    DigitalOut &m_UP_slash_DWNb_pin;
+//
+// CODE GENERATOR: class member data for gpio OutputPin pins
+// OutputPin Name = EOC
+// OutputPin Description = End of Conversion Output. Active-Low End-of-Conversion Indicator. EOC asserts low to indicate that new data is ready.
+// OutputPin Function = Event
+    DigitalIn &m_EOC_pin;
+//
+
+    // Identifies which IC variant is being used
+    MAX11043_ic_t m_ic_variant;
+
+public:
+
+// CODE GENERATOR: class member function declarations
+    //----------------------------------------
+    /// Menu item '!'
+    /// Initialize device
+    /// @return 1 on success; 0 on failure
+    uint8_t Init(void);
+
+// CODE GENERATOR: looks like this is a register access function because 'regAdd'
+// CODE GENERATOR: looks like this is a 'write' register access function
+// CODE GENERATOR: looks like this is a register access function because 'regAdd'
+// CODE GENERATOR: looks like this is a 'write' register access function: omit this function from test menu
+    //----------------------------------------
+    /// Write a MAX11043 register.
+    ///
+    /// CMD_1aaa_aaaa_REGISTER_READ bit is cleared 0 indicating a write operation.
+    ///
+    /// MAX11043 register length can be determined by function RegSize.
+    ///
+    /// For 8-bit register size:
+    ///
+    ///     SPI 16-bit transfer
+    ///
+    ///     SPI MOSI = 0aaa_aaaa_dddd_dddd
+    ///
+    ///     SPI MISO = xxxx_xxxx_xxxx_xxxx
+    ///
+    /// For 16-bit register size:
+    ///
+    ///     SPI 24-bit or 32-bit transfer
+    ///
+    ///     SPI MOSI = 0aaa_aaaa_dddd_dddd_dddd_dddd
+    ///
+    ///     SPI MISO = xxxx_xxxx_xxxx_xxxx_xxxx_xxxx
+    ///
+    /// For 24-bit register size:
+    ///
+    ///     SPI 32-bit transfer
+    ///
+    ///     SPI MOSI = 0aaa_aaaa_dddd_dddd_dddd_dddd_dddd_dddd
+    ///
+    ///     SPI MISO = xxxx_xxxx_xxxx_xxxx_xxxx_xxxx_xxxx_xxxx
+    ///
+    /// @return 1 on success; 0 on failure
+    uint8_t RegWrite(MAX11043_CMD_enum_t commandByte, uint32_t regData);
+
+// CODE GENERATOR: looks like this is a register access function because 'regAdd'
+// CODE GENERATOR: looks like this is a 'read' register access function
+// CODE GENERATOR: looks like this is a register access function because 'regAdd'
+// CODE GENERATOR: looks like this is a 'read' register access function: omit this function from test menu
+    //----------------------------------------
+    /// Read an 8-bit MAX11043 register
+    ///
+    /// CMD_1aaa_aaaa_REGISTER_READ bit is set 1 indicating a read operation.
+    ///
+    /// MAX11043 register length can be determined by function RegSize.
+    ///
+    /// For 8-bit register size:
+    ///
+    ///     SPI 16-bit transfer
+    ///
+    ///     SPI MOSI = 1aaa_aaaa_0000_0000
+    ///
+    ///     SPI MISO = xxxx_xxxx_dddd_dddd
+    ///
+    /// For 16-bit register size:
+    ///
+    ///     SPI 24-bit or 32-bit transfer
+    ///
+    ///     SPI MOSI = 1aaa_aaaa_0000_0000_0000_0000
+    ///
+    ///     SPI MISO = xxxx_xxxx_dddd_dddd_dddd_dddd
+    ///
+    /// For 24-bit register size:
+    ///
+    ///     SPI 32-bit transfer
+    ///
+    ///     SPI MOSI = 1aaa_aaaa_0000_0000_0000_0000_0000_0000
+    ///
+    ///     SPI MISO = xxxx_xxxx_dddd_dddd_dddd_dddd_dddd_dddd
+    ///
+    ///
+    /// @return 1 on success; 0 on failure
+    uint8_t RegRead(MAX11043_CMD_enum_t commandByte, uint32_t* ptrRegData);
+
+// CODE GENERATOR: looks like this is a register access function because 'regAdd'
+// CODE GENERATOR: looks like this is a 'size' register access function
+    //----------------------------------------
+    /// Return the size of a MAX11043 register
+    ///
+    /// @return 8 for 8-bit, 16 for 16-bit, 24 for 24-bit, else 0 for undefined register size
+    uint8_t RegSize(MAX11043_CMD_enum_t commandByte);
+
+// CODE GENERATOR: looks like this is a register access function because 'regAdd'
+    //----------------------------------------
+    /// Return the address field of a MAX11043 register
+    ///
+    /// @return register address field as given in datasheet
+    uint8_t RegAddrOfCommand(MAX11043_CMD_enum_t commandByte);
+
+// CODE GENERATOR: looks like this is a register access function because 'regAdd'
+// CODE GENERATOR: looks like this is a 'read' register access function
+    //----------------------------------------
+    /// Test whether a command byte is a register read command
+    ///
+    /// @return true if command byte is a register read command
+    uint8_t IsRegReadCommand(MAX11043_CMD_enum_t commandByte);
+
+// CODE GENERATOR: looks like this is a register access function because 'regAdd'
+// CODE GENERATOR: looks like this is a 'name' register access function
+    //----------------------------------------
+    /// Return the name of a MAX11043 register
+    ///
+    /// @return null-terminated constant C string containing register name or empty string
+    const char* RegName(MAX11043_CMD_enum_t commandByte);
+
+}; // end of class MAX11043
+
+#endif // __MAX11043_H__
+
+// End of file
--- a/Test_Main_MAX11043.cpp	Tue Feb 11 01:16:34 2020 +0000
+++ b/Test_Main_MAX11043.cpp	Tue Feb 11 09:01:20 2020 +0000
@@ -1,2165 +1,2257 @@
-// /*******************************************************************************
-// * Copyright (C) 2020 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"),
-// * to deal in the Software without restriction, including without limitation
-// * the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// * and/or sell copies of the Software, and to permit persons to whom the
-// * Software is furnished to do so, subject to the following conditions:
-// *
-// * The above copyright notice and this permission notice shall be included
-// * in all copies or substantial portions of the Software.
-// *
-// * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-// * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
-// * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-// * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-// * OTHER DEALINGS IN THE SOFTWARE.
-// *
-// * Except as contained in this notice, the name of Maxim Integrated
-// * Products, Inc. shall not be used except as stated in the Maxim Integrated
-// * Products, Inc. Branding Policy.
-// *
-// * The mere transfer of this software does not imply any licenses
-// * of trade secrets, proprietary technology, copyrights, patents,
-// * trademarks, maskwork rights, or any other form of intellectual
-// * property whatsoever. Maxim Integrated Products, Inc. retains all
-// * ownership rights.
-// *******************************************************************************
-// */
-//---------- CODE GENERATOR: testMainCppCodeList
-// CODE GENERATOR: example code includes
-
-// 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
-//      - 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://os.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
-//      - remove max32630fthr library (if present)
-//      - remove MAX32620FTHR library (if present)
-//      - not tested yet
-//
-// end Platform_Include_Boilerplate
-#include "MAX11043.h"
-#include "CmdLine.h"
-#include "MaximTinyTester.h"
-
-// optional: serial port
-// note: some platforms such as Nucleo-F446RE do not support the USBSerial library.
-// In those cases, remove the USBDevice lib from the project and rebuild.
-#if defined(TARGET_MAX32625MBED)
-#include "USBSerial.h"
-USBSerial serial; // virtual serial port over USB (DEV connector)
-#elif defined(TARGET_MAX32630MBED)
-#include "USBSerial.h"
-USBSerial serial; // virtual serial port over USB (DEV connector)
-#else
-//#include "USBSerial.h"
-Serial serial(USBTX, USBRX); // tx, rx
-#endif
-
-void on_immediate_0x21(); // Unicode (U+0021) ! EXCLAMATION MARK
-void on_immediate_0x7b(); // Unicode (U+007B) { LEFT CURLY BRACKET
-void on_immediate_0x7d(); // Unicode (U+007D) } RIGHT CURLY BRACKET
-
-#include "CmdLine.h"
-
-# if HAS_DAPLINK_SERIAL
-CmdLine cmdLine_DAPLINKserial(DAPLINKserial, "DAPLINK");
-# endif // HAS_DAPLINK_SERIAL
-CmdLine cmdLine_serial(serial, "serial");
-
-
-//--------------------------------------------------
-
-
-#if defined(TARGET)
-// TARGET_NAME macros from targets/TARGET_Maxim/TARGET_MAX32625/device/mxc_device.h
-// Create a string definition for the TARGET
-#define STRING_ARG(arg) #arg
-#define STRING_NAME(name) STRING_ARG(name)
-#define TARGET_NAME STRING_NAME(TARGET)
-#elif defined(TARGET_MAX32600)
-#define TARGET_NAME "MAX32600"
-#elif defined(TARGET_LPC1768)
-#define TARGET_NAME "LPC1768"
-#elif defined(TARGET_NUCLEO_F446RE)
-#define TARGET_NAME "NUCLEO_F446RE"
-#elif defined(TARGET_NUCLEO_F401RE)
-#define TARGET_NAME "NUCLEO_F401RE"
-#else
-#error TARGET NOT DEFINED
-#endif
-#if defined(TARGET_MAX32630)
-//--------------------------------------------------
-// TARGET=MAX32630FTHR ARM Cortex-M4F 96MHz 2048kB Flash 512kB SRAM
-//             +-------------[microUSB]-------------+
-//             | J1         MAX32630FTHR        J2  |
-//      ______ | [ ] RST                    GND [ ] |
-//      ______ | [ ] 3V3                    BAT+[ ] |
-//      ______ | [ ] 1V8                  reset SW1 |
-//      ______ | [ ] GND       J4               J3  |
-// analogIn0/4 | [a] AIN_0 1.2Vfs     (bat) SYS [ ] | switched BAT+
-// analogIn1/5 | [a] AIN_1 1.2Vfs           PWR [ ] | external pwr btn
-// analogIn2   | [a] AIN_2 1.2Vfs      +5V VBUS [ ] | USB +5V power
-// analogIn3   | [a] AIN_3 1.2Vfs   1-WIRE P4_0 [d] | D0 dig9
-//  (I2C2.SDA) | [d] P5_7  SDA2        SRN P5_6 [d] | D1 dig8
-//  (I2C2.SCL) | [d] P6_0  SCL2      SDIO3 P5_5 [d] | D2 dig7
-//    D13/SCLK | [s] P5_0  SCLK      SDIO2 P5_4 [d] | D3 dig6
-//    D11/MOSI | [s] P5_1  MOSI       SSEL P5_3 [d] | D4 dig5
-//    D12/MISO | [s] P5_2  MISO        RTS P3_3 [d] | D5 dig4
-//    D10/CS   | [s] P3_0  RX          CTS P3_2 [d] | D6 dig3
-//    D9  dig0 | [d] P3_1  TX          SCL P3_5 [d] | D7 dig2
-//      ______ | [ ] GND               SDA P3_4 [d] | D8 dig1
-//             |                                    |
-//             | XIP Flash      MAX14690N           |
-//             | XIP_SCLK P1_0  SDA2 P5_7           |
-//             | XIP_MOSI P1_1  SCL2 P6_0           |
-//             | XIP_MISO P1_2  PMIC_INIT P3_7      |
-//             | XIP_SSEL P1_3  MPC P2_7            |
-//             | XIP_DIO2 P1_4  MON AIN_0           |
-//             | XIP_DIO3 P1_5                      |
-//             |                                    |
-//             | PAN1326B     MicroSD        LED    |
-//             | BT_RX  P0_0  SD_SCLK P0_4   r P2_4 |
-//             | BT_TX  P0_1  SD_MOSI P0_5   g P2_5 |
-//             | BT_CTS P0_2  SD_MISO P0_6   b P2_6 |
-//             | BT_RTS P0_3  SD_SSEL P0_7          |
-//             | BT_RST P1_6  DETECT  P2_2          |
-//             | BT_CLK P1_7               SW2 P2_3 |
-//             +------------------------------------+
-// MAX32630FTHR board has MAX14690 PMIC on I2C bus (P5_7 SDA, P6_0 SCL) at slave address 0101_000r 0x50 (or 0x28 for 7 MSbit address).
-// MAX32630FTHR board has BMI160 accelerometer on I2C bus (P5_7 SDA, P6_0 SCL) at slave address 1101_000r 0xD0 (or 0x68 for 7 MSbit address).
-// AIN_0 = AIN0 pin       fullscale is 1.2V
-// AIN_1 = AIN1 pin       fullscale is 1.2V
-// AIN_2 = AIN2 pin       fullscale is 1.2V
-// AIN_3 = AIN3 pin       fullscale is 1.2V
-// AIN_4 = AIN0 / 5.0     fullscale is 6.0V
-// AIN_5 = AIN1 / 5.0     fullscale is 6.0V
-// AIN_6 = VDDB / 4.0     fullscale is 4.8V
-// AIN_7 = VDD18          fullscale is 1.2V
-// AIN_8 = VDD12          fullscale is 1.2V
-// AIN_9 = VRTC / 2.0     fullscale is 2.4V
-// AIN_10 = x undefined?
-// AIN_11 = VDDIO / 4.0   fullscale is 4.8V
-// AIN_12 = VDDIOH / 4.0  fullscale is 4.8V
-//
-    #include "max32630fthr.h"
-MAX32630FTHR pegasus(MAX32630FTHR::VIO_3V3);
-#define analogIn4_IS_HIGH_RANGE_OF_analogIn0 1
-// MAX32630FTHR board supports only internal VREF = 1.200V at bypass capacitor C15
-const float ADC_FULL_SCALE_VOLTAGE = 1.200;
-// Arduino connector
-#ifndef A0
-#define A0 AIN_0
-#endif
-#ifndef A1
-#define A1 AIN_1
-#endif
-#ifndef A2
-#define A2 AIN_2
-#endif
-#ifndef A3
-#define A3 AIN_3
-#endif
-#ifndef D0
-#define D0 P4_0
-#endif
-#ifndef D1
-#define D1 P5_6
-#endif
-#ifndef D2
-#define D2 P5_5
-#endif
-#ifndef D3
-#define D3 P5_4
-#endif
-#ifndef D4
-#define D4 P5_3
-#endif
-#ifndef D5
-#define D5 P3_3
-#endif
-#ifndef D6
-#define D6 P3_2
-#endif
-#ifndef D7
-#define D7 P3_5
-#endif
-#ifndef D8
-#define D8 P3_4
-#endif
-#ifndef D9
-#define D9 P3_1
-#endif
-#ifndef D10
-#define D10 P3_0
-#endif
-#ifndef D11
-#define D11 P5_1
-#endif
-#ifndef D12
-#define D12 P5_2
-#endif
-#ifndef D13
-#define D13 P5_0
-#endif
-//--------------------------------------------------
-#elif defined(TARGET_MAX32625MBED)
-//--------------------------------------------------
-// TARGET=MAX32625MBED ARM Cortex-M4F 96MHz 512kB Flash 160kB SRAM
-//             +-------------------------------------+
-//             |   MAX32625MBED Arduino UNO header   |
-//             |                                     |
-//             |                           A5/SCL[ ] |   P1_7 dig15
-//             |                           A4/SDA[ ] |   P1_6 dig14
-//             |                         AREF=N/C[ ] |
-//             |                              GND[ ] |
-//             | [ ]N/C                    SCK/13[ ] |   P1_0 dig13
-//             | [ ]IOREF=3V3             MISO/12[ ] |   P1_2 dig12
-//             | [ ]RST                   MOSI/11[ ]~|   P1_1 dig11
-//             | [ ]3V3                     CS/10[ ]~|   P1_3 dig10
-//             | [ ]5V0                         9[ ]~|   P1_5 dig9
-//             | [ ]GND                         8[ ] |   P1_4 dig8
-//             | [ ]GND                              |
-//             | [ ]Vin                         7[ ] |   P0_7 dig7
-//             |                                6[ ]~|   P0_6 dig6
-//       AIN_0 | [ ]A0                          5[ ]~|   P0_5 dig5
-//       AIN_1 | [ ]A1                          4[ ] |   P0_4 dig4
-//       AIN_2 | [ ]A2                     INT1/3[ ]~|   P0_3 dig3
-//       AIN_3 | [ ]A3                     INT0/2[ ] |   P0_2 dig2
-// dig16  P3_4 | [ ]A4/SDA  RST SCK MISO     TX>1[ ] |   P0_1 dig1
-// dig17  P3_5 | [ ]A5/SCL  [ ] [ ] [ ]      RX<0[ ] |   P0_0 dig0
-//             |            [ ] [ ] [ ]              |
-//             |  UNO_R3    GND MOSI 5V  ____________/
-//              \_______________________/
-//
-//             +------------------------+
-//             |                        |
-//             |  MicroSD        LED    |
-//             |  SD_SCLK P2_4   r P3_0 |
-//             |  SD_MOSI P2_5   g P3_1 |
-//             |  SD_MISO P2_6   b P3_2 |
-//             |  SD_SSEL P2_7   y P3_3 |
-//             |                        |
-//             |  DAPLINK      BUTTONS  |
-//             |  TX P2_1      SW3 P2_3 |
-//             |  RX P2_0      SW2 P2_2 |
-//             +------------------------+
-//
-// AIN_0 = AIN0 pin       fullscale is 1.2V
-// AIN_1 = AIN1 pin       fullscale is 1.2V
-// AIN_2 = AIN2 pin       fullscale is 1.2V
-// AIN_3 = AIN3 pin       fullscale is 1.2V
-// AIN_4 = AIN0 / 5.0     fullscale is 6.0V
-// AIN_5 = AIN1 / 5.0     fullscale is 6.0V
-// AIN_6 = VDDB / 4.0     fullscale is 4.8V
-// AIN_7 = VDD18          fullscale is 1.2V
-// AIN_8 = VDD12          fullscale is 1.2V
-// AIN_9 = VRTC / 2.0     fullscale is 2.4V
-// AIN_10 = x undefined?
-// AIN_11 = VDDIO / 4.0   fullscale is 4.8V
-// AIN_12 = VDDIOH / 4.0  fullscale is 4.8V
-//
-//#include "max32625mbed.h" // ?
-//MAX32625MBED mbed(MAX32625MBED::VIO_3V3); // ?
-#define analogIn4_IS_HIGH_RANGE_OF_analogIn0 1
-// MAX32630FTHR board supports only internal VREF = 1.200V at bypass capacitor C15
-const float ADC_FULL_SCALE_VOLTAGE = 1.200;     // TODO: ADC_FULL_SCALE_VOLTAGE Pico?
-// Arduino connector
-#ifndef A0
-#define A0 AIN_0
-#endif
-#ifndef A1
-#define A1 AIN_1
-#endif
-#ifndef A2
-#define A2 AIN_2
-#endif
-#ifndef A3
-#define A3 AIN_3
-#endif
-#ifndef D0
-#define D0 P0_0
-#endif
-#ifndef D1
-#define D1 P0_1
-#endif
-#ifndef D2
-#define D2 P0_2
-#endif
-#ifndef D3
-#define D3 P0_3
-#endif
-#ifndef D4
-#define D4 P0_4
-#endif
-#ifndef D5
-#define D5 P0_5
-#endif
-#ifndef D6
-#define D6 P0_6
-#endif
-#ifndef D7
-#define D7 P0_7
-#endif
-#ifndef D8
-#define D8 P1_4
-#endif
-#ifndef D9
-#define D9 P1_5
-#endif
-#ifndef D10
-#define D10 P1_3
-#endif
-#ifndef D11
-#define D11 P1_1
-#endif
-#ifndef D12
-#define D12 P1_2
-#endif
-#ifndef D13
-#define D13 P1_0
-#endif
-//--------------------------------------------------
-#elif defined(TARGET_MAX32600)
-// target MAX32600
-//
-#define analogIn4_IS_HIGH_RANGE_OF_analogIn0 0
-const float ADC_FULL_SCALE_VOLTAGE = 1.500;
-//
-//--------------------------------------------------
-#elif defined(TARGET_MAX32620FTHR)
-#warning "TARGET_MAX32620FTHR not previously tested; need to define pins..."
-#include "MAX32620FTHR.h"
-// Initialize I/O voltages on MAX32620FTHR board
-MAX32620FTHR fthr(MAX32620FTHR::VIO_3V3);
-//#define USE_LEDS 0 ?
-#define analogIn4_IS_HIGH_RANGE_OF_analogIn0 1
-#warning "TARGET_MAX32620FTHR not previously tested; need to verify ADC_FULL_SCALE_VOLTAGE..."
-const float ADC_FULL_SCALE_VOLTAGE = 1.200;
-//
-//--------------------------------------------------
-#elif defined(TARGET_MAX32625PICO)
-#warning "TARGET_MAX32625PICO not previously tested; need to define pins..."
-//#define USE_LEDS 0 ?
-#define analogIn4_IS_HIGH_RANGE_OF_analogIn0 1
-#warning "TARGET_MAX32625PICO not previously tested; need to verify ADC_FULL_SCALE_VOLTAGE..."
-const float ADC_FULL_SCALE_VOLTAGE = 1.200;
-//
-//--------------------------------------------------
-#elif defined(TARGET_NUCLEO_F446RE) || defined(TARGET_NUCLEO_F401RE)
-// TODO1: target NUCLEO_F446RE
-//
-// USER_BUTTON PC13
-// LED1 is shared with SPI_SCK on NUCLEO_F446RE PA_5, so don't use LED1.
-#define USE_LEDS 0
-// SPI spi(SPI_MOSI, SPI_MISO, SPI_SCK);
-// Serial serial(SERIAL_TX, SERIAL_RX);
-#define analogIn4_IS_HIGH_RANGE_OF_analogIn0 0
-const float ADC_FULL_SCALE_VOLTAGE = 3.300;     // TODO: ADC_FULL_SCALE_VOLTAGE Pico?
-//
-//--------------------------------------------------
-#elif defined(TARGET_LPC1768)
-//--------------------------------------------------
-// TARGET=LPC1768 ARM Cortex-M3 100 MHz 512kB flash 64kB SRAM
-//               +-------------[microUSB]-------------+
-//        ______ | [ ] GND             +3.3V VOUT [ ] | ______
-//        ______ | [ ] 4.5V<VIN<9.0V   +5.0V VU   [ ] | ______
-//        ______ | [ ] VB                 USB.IF- [ ] | ______
-//        ______ | [ ] nR                 USB.IF+ [ ] | ______
-// digitalInOut0 | [ ] p5 MOSI       ETHERNET.RD- [ ] | ______
-// digitalInOut1 | [ ] p6 MISO       ETHERNET.RD+ [ ] | ______
-// digitalInOut2 | [ ] p7 SCLK       ETHERNET.TD- [ ] | ______
-// digitalInOut3 | [ ] p8            ETHERNET.TD+ [ ] | ______
-// digitalInOut4 | [ ] p9  TX SDA          USB.D- [ ] | ______
-// digitalInOut5 | [ ] p10 RX SCL          USB.D+ [ ] | ______
-// digitalInOut6 | [ ] p11    MOSI     CAN-RD p30 [ ] | digitalInOut13
-// digitalInOut7 | [ ] p12    MISO     CAN-TD p29 [ ] | digitalInOut12
-// digitalInOut8 | [ ] p13 TX SCLK     SDA TX p28 [ ] | digitalInOut11
-// digitalInOut9 | [ ] p14 RX          SCL RX p27 [ ] | digitalInOut10
-//     analogIn0 | [ ] p15 AIN0 3.3Vfs   PWM1 p26 [ ] | pwmDriver1
-//     analogIn1 | [ ] p16 AIN1 3.3Vfs   PWM2 p25 [ ] | pwmDriver2
-//     analogIn2 | [ ] p17 AIN2 3.3Vfs   PWM3 p24 [ ] | pwmDriver3
-//     analogIn3 | [ ] p18 AIN3 AOUT     PWM4 p23 [ ] | pwmDriver4
-//     analogIn4 | [ ] p19 AIN4 3.3Vfs   PWM5 p22 [ ] | pwmDriver5
-//     analogIn5 | [ ] p20 AIN5 3.3Vfs   PWM6 p21 [ ] | pwmDriver6
-//               +------------------------------------+
-// AIN6 = P0.3 = TGT_SBL_RXD?
-// AIN7 = P0.2 = TGT_SBL_TXD?
-//
-//--------------------------------------------------
-// LPC1768 board uses VREF = 3.300V +A3,3V thru L1 to bypass capacitor C14
-#define analogIn4_IS_HIGH_RANGE_OF_analogIn0 0
-const float ADC_FULL_SCALE_VOLTAGE = 3.300;
-#else // not defined(TARGET_LPC1768 etc.)
-//--------------------------------------------------
-// unknown target
-//--------------------------------------------------
-#endif // target definition
-
-
-
-// uncrustify-0.66.1 *INDENT-OFF*
-//--------------------------------------------------
-// Declare the AnalogIn driver
-// Optional analogIn support. If there is only one it should be analogIn1.
-// A) analog input
-#if defined(TARGET_MAX32630)
-    #define HAS_analogIn0 1
-    #define HAS_analogIn1 1
-    #define HAS_analogIn2 1
-    #define HAS_analogIn3 1
-    #define HAS_analogIn4 1
-    #define HAS_analogIn5 1
-    #define HAS_analogIn6 1
-    #define HAS_analogIn7 1
-    #define HAS_analogIn8 1
-    #define HAS_analogIn9 1
-//    #define HAS_analogIn10 0
-//    #define HAS_analogIn11 0
-//    #define HAS_analogIn12 0
-//    #define HAS_analogIn13 0
-//    #define HAS_analogIn14 0
-//    #define HAS_analogIn15 0
-#if HAS_analogIn0
-    AnalogIn analogIn0(AIN_0); // TARGET_MAX32630 J1.5 AIN_0 = AIN0 pin       fullscale is 1.2V
-#endif
-#if HAS_analogIn1
-    AnalogIn analogIn1(AIN_1); // TARGET_MAX32630 J1.6 AIN_1 = AIN1 pin       fullscale is 1.2V
-#endif
-#if HAS_analogIn2
-    AnalogIn analogIn2(AIN_2); // TARGET_MAX32630 J1.7 AIN_2 = AIN2 pin       fullscale is 1.2V
-#endif
-#if HAS_analogIn3
-    AnalogIn analogIn3(AIN_3); // TARGET_MAX32630 J1.8 AIN_3 = AIN3 pin       fullscale is 1.2V
-#endif
-#if HAS_analogIn4
-    AnalogIn analogIn4(AIN_4); // TARGET_MAX32630 J1.5 AIN_4 = AIN0 / 5.0     fullscale is 6.0V
-#endif
-#if HAS_analogIn5
-    AnalogIn analogIn5(AIN_5); // TARGET_MAX32630 J1.6 AIN_5 = AIN1 / 5.0     fullscale is 6.0V
-#endif
-#if HAS_analogIn6
-    AnalogIn analogIn6(AIN_6); // TARGET_MAX32630 AIN_6 = VDDB / 4.0     fullscale is 4.8V
-#endif
-#if HAS_analogIn7
-    AnalogIn analogIn7(AIN_7); // TARGET_MAX32630 AIN_7 = VDD18          fullscale is 1.2V
-#endif
-#if HAS_analogIn8
-    AnalogIn analogIn8(AIN_8); // TARGET_MAX32630 AIN_8 = VDD12          fullscale is 1.2V
-#endif
-#if HAS_analogIn9
-    AnalogIn analogIn9(AIN_9); // TARGET_MAX32630 AIN_9 = VRTC / 2.0     fullscale is 2.4V
-#endif
-#if HAS_analogIn10
-    AnalogIn analogIn10(____); // TARGET_MAX32630 AIN_10 = x undefined?
-#endif
-#if HAS_analogIn11
-    AnalogIn analogIn11(____); // TARGET_MAX32630 AIN_11 = VDDIO / 4.0   fullscale is 4.8V
-#endif
-#if HAS_analogIn12
-    AnalogIn analogIn12(____); // TARGET_MAX32630 AIN_12 = VDDIOH / 4.0  fullscale is 4.8V
-#endif
-#if HAS_analogIn13
-    AnalogIn analogIn13(____);
-#endif
-#if HAS_analogIn14
-    AnalogIn analogIn14(____);
-#endif
-#if HAS_analogIn15
-    AnalogIn analogIn15(____);
-#endif
-//--------------------------------------------------
-#elif defined(TARGET_MAX32625MBED)
-    #define HAS_analogIn0 1
-    #define HAS_analogIn1 1
-    #define HAS_analogIn2 1
-    #define HAS_analogIn3 1
-    #define HAS_analogIn4 1
-    #define HAS_analogIn5 1
-#if HAS_analogIn0
-    AnalogIn analogIn0(AIN_0); // TARGET_MAX32630 J1.5 AIN_0 = AIN0 pin       fullscale is 1.2V
-#endif
-#if HAS_analogIn1
-    AnalogIn analogIn1(AIN_1); // TARGET_MAX32630 J1.6 AIN_1 = AIN1 pin       fullscale is 1.2V
-#endif
-#if HAS_analogIn2
-    AnalogIn analogIn2(AIN_2); // TARGET_MAX32630 J1.7 AIN_2 = AIN2 pin       fullscale is 1.2V
-#endif
-#if HAS_analogIn3
-    AnalogIn analogIn3(AIN_3); // TARGET_MAX32630 J1.8 AIN_3 = AIN3 pin       fullscale is 1.2V
-#endif
-#if HAS_analogIn4
-    AnalogIn analogIn4(AIN_4); // TARGET_MAX32630 J1.5 AIN_4 = AIN0 / 5.0     fullscale is 6.0V
-#endif
-#if HAS_analogIn5
-    AnalogIn analogIn5(AIN_5); // TARGET_MAX32630 J1.6 AIN_5 = AIN1 / 5.0     fullscale is 6.0V
-#endif
-//--------------------------------------------------
-#elif defined(TARGET_MAX32620FTHR)
-#warning "TARGET_MAX32620FTHR not previously tested; need to verify analogIn0..."
-    #define HAS_analogIn0 1
-    #define HAS_analogIn1 1
-    #define HAS_analogIn2 1
-    #define HAS_analogIn3 1
-    #define HAS_analogIn4 1
-    #define HAS_analogIn5 1
-    #define HAS_analogIn6 1
-    #define HAS_analogIn7 1
-    #define HAS_analogIn8 1
-    #define HAS_analogIn9 1
-//    #define HAS_analogIn10 0
-//    #define HAS_analogIn11 0
-//    #define HAS_analogIn12 0
-//    #define HAS_analogIn13 0
-//    #define HAS_analogIn14 0
-//    #define HAS_analogIn15 0
-#if HAS_analogIn0
-    AnalogIn analogIn0(AIN_0); // TARGET_MAX32620FTHR J1.5 AIN_0 = AIN0 pin       fullscale is 1.2V
-#endif
-#if HAS_analogIn1
-    AnalogIn analogIn1(AIN_1); // TARGET_MAX32620FTHR J1.6 AIN_1 = AIN1 pin       fullscale is 1.2V
-#endif
-#if HAS_analogIn2
-    AnalogIn analogIn2(AIN_2); // TARGET_MAX32620FTHR J1.7 AIN_2 = AIN2 pin       fullscale is 1.2V
-#endif
-#if HAS_analogIn3
-    AnalogIn analogIn3(AIN_3); // TARGET_MAX32620FTHR J1.8 AIN_3 = AIN3 pin       fullscale is 1.2V
-#endif
-#if HAS_analogIn4
-    AnalogIn analogIn4(AIN_4); // TARGET_MAX32620FTHR J1.5 AIN_4 = AIN0 / 5.0     fullscale is 6.0V
-#endif
-#if HAS_analogIn5
-    AnalogIn analogIn5(AIN_5); // TARGET_MAX32620FTHR J1.6 AIN_5 = AIN1 / 5.0     fullscale is 6.0V
-#endif
-#if HAS_analogIn6
-    AnalogIn analogIn6(AIN_6); // TARGET_MAX32620FTHR AIN_6 = VDDB / 4.0     fullscale is 4.8V
-#endif
-#if HAS_analogIn7
-    AnalogIn analogIn7(AIN_7); // TARGET_MAX32620FTHR AIN_7 = VDD18          fullscale is 1.2V
-#endif
-#if HAS_analogIn8
-    AnalogIn analogIn8(AIN_8); // TARGET_MAX32620FTHR AIN_8 = VDD12          fullscale is 1.2V
-#endif
-#if HAS_analogIn9
-    AnalogIn analogIn9(AIN_9); // TARGET_MAX32620FTHR AIN_9 = VRTC / 2.0     fullscale is 2.4V
-#endif
-#if HAS_analogIn10
-    AnalogIn analogIn10(____); // TARGET_MAX32620FTHR AIN_10 = x undefined?
-#endif
-#if HAS_analogIn11
-    AnalogIn analogIn11(____); // TARGET_MAX32620FTHR AIN_11 = VDDIO / 4.0   fullscale is 4.8V
-#endif
-#if HAS_analogIn12
-    AnalogIn analogIn12(____); // TARGET_MAX32620FTHR AIN_12 = VDDIOH / 4.0  fullscale is 4.8V
-#endif
-#if HAS_analogIn13
-    AnalogIn analogIn13(____);
-#endif
-#if HAS_analogIn14
-    AnalogIn analogIn14(____);
-#endif
-#if HAS_analogIn15
-    AnalogIn analogIn15(____);
-#endif
-//--------------------------------------------------
-#elif defined(TARGET_MAX32625PICO)
-#warning "TARGET_MAX32625PICO not previously tested; need to verify analogIn0..."
-    #define HAS_analogIn0 1
-    #define HAS_analogIn1 1
-    #define HAS_analogIn2 1
-    #define HAS_analogIn3 1
-    #define HAS_analogIn4 1
-    #define HAS_analogIn5 1
-#if HAS_analogIn0
-    AnalogIn analogIn0(AIN_0); // TARGET_MAX32630 J1.5 AIN_0 = AIN0 pin       fullscale is 1.2V
-#endif
-#if HAS_analogIn1
-    AnalogIn analogIn1(AIN_1); // TARGET_MAX32630 J1.6 AIN_1 = AIN1 pin       fullscale is 1.2V
-#endif
-#if HAS_analogIn2
-    AnalogIn analogIn2(AIN_2); // TARGET_MAX32630 J1.7 AIN_2 = AIN2 pin       fullscale is 1.2V
-#endif
-#if HAS_analogIn3
-    AnalogIn analogIn3(AIN_3); // TARGET_MAX32630 J1.8 AIN_3 = AIN3 pin       fullscale is 1.2V
-#endif
-#if HAS_analogIn4
-    AnalogIn analogIn4(AIN_4); // TARGET_MAX32630 J1.5 AIN_4 = AIN0 / 5.0     fullscale is 6.0V
-#endif
-#if HAS_analogIn5
-    AnalogIn analogIn5(AIN_5); // TARGET_MAX32630 J1.6 AIN_5 = AIN1 / 5.0     fullscale is 6.0V
-#endif
-//--------------------------------------------------
-#elif defined(TARGET_MAX32600)
-    #define HAS_analogIn0 1
-    #define HAS_analogIn1 1
-    #define HAS_analogIn2 1
-    #define HAS_analogIn3 1
-    #define HAS_analogIn4 1
-    #define HAS_analogIn5 1
-#if HAS_analogIn0
-    AnalogIn analogIn0(A0);
-#endif
-#if HAS_analogIn1
-    AnalogIn analogIn1(A1);
-#endif
-#if HAS_analogIn2
-    AnalogIn analogIn2(A2);
-#endif
-#if HAS_analogIn3
-    AnalogIn analogIn3(A3);
-#endif
-#if HAS_analogIn4
-    AnalogIn analogIn4(A4);
-#endif
-#if HAS_analogIn5
-    AnalogIn analogIn5(A5);
-#endif
-//--------------------------------------------------
-#elif defined(TARGET_NUCLEO_F446RE)
-    #define HAS_analogIn0 1
-    #define HAS_analogIn1 1
-    #define HAS_analogIn2 1
-    #define HAS_analogIn3 1
-    #define HAS_analogIn4 1
-    #define HAS_analogIn5 1
-#if HAS_analogIn0
-    AnalogIn analogIn0(A0);
-#endif
-#if HAS_analogIn1
-    AnalogIn analogIn1(A1);
-#endif
-#if HAS_analogIn2
-    AnalogIn analogIn2(A2);
-#endif
-#if HAS_analogIn3
-    AnalogIn analogIn3(A3);
-#endif
-#if HAS_analogIn4
-    AnalogIn analogIn4(A4);
-#endif
-#if HAS_analogIn5
-    AnalogIn analogIn5(A5);
-#endif
-//--------------------------------------------------
-#elif defined(TARGET_NUCLEO_F401RE)
-    #define HAS_analogIn0 1
-    #define HAS_analogIn1 1
-    #define HAS_analogIn2 1
-    #define HAS_analogIn3 1
-    #define HAS_analogIn4 1
-    #define HAS_analogIn5 1
-#if HAS_analogIn0
-    AnalogIn analogIn0(A0);
-#endif
-#if HAS_analogIn1
-    AnalogIn analogIn1(A1);
-#endif
-#if HAS_analogIn2
-    AnalogIn analogIn2(A2);
-#endif
-#if HAS_analogIn3
-    AnalogIn analogIn3(A3);
-#endif
-#if HAS_analogIn4
-    AnalogIn analogIn4(A4);
-#endif
-#if HAS_analogIn5
-    AnalogIn analogIn5(A5);
-#endif
-//--------------------------------------------------
-// TODO1: TARGET=MAX32625MBED ARM Cortex-M4F 96MHz 512kB Flash 160kB SRAM
-#elif defined(TARGET_LPC1768)
-    #define HAS_analogIn0 1
-    #define HAS_analogIn1 1
-    #define HAS_analogIn2 1
-    #define HAS_analogIn3 1
-    #define HAS_analogIn4 1
-    #define HAS_analogIn5 1
-//    #define HAS_analogIn6 1
-//    #define HAS_analogIn7 1
-//    #define HAS_analogIn8 1
-//    #define HAS_analogIn9 1
-//    #define HAS_analogIn10 1
-//    #define HAS_analogIn11 1
-//    #define HAS_analogIn12 1
-//    #define HAS_analogIn13 1
-//    #define HAS_analogIn14 1
-//    #define HAS_analogIn15 1
-#if HAS_analogIn0
-    AnalogIn analogIn0(p15); // TARGET_LPC1768 P0.23/AD0.0/I2SRX_CLK/CAP3.0
-#endif
-#if HAS_analogIn1
-    AnalogIn analogIn1(p16); // TARGET_LPC1768 P0.24/AD0.1/I2SRX_WS/CAP3.1
-#endif
-#if HAS_analogIn2
-    AnalogIn analogIn2(p17); // TARGET_LPC1768 P0.25/AD0.2/I2SRX_SDA/TXD3
-#endif
-#if HAS_analogIn3
-    AnalogIn analogIn3(p18); // TARGET_LPC1768 P0.26/AD0.3/AOUT/RXD3
-#endif
-#if HAS_analogIn4
-    AnalogIn analogIn4(p19); // TARGET_LPC1768 P1.30/VBUS/AD0.4
-#endif
-#if HAS_analogIn5
-    AnalogIn analogIn5(p20); // TARGET_LPC1768 P1.31/SCK1/AD0.5
-#endif
-#if HAS_analogIn6
-    AnalogIn analogIn6(____);
-#endif
-#if HAS_analogIn7
-    AnalogIn analogIn7(____);
-#endif
-#if HAS_analogIn8
-    AnalogIn analogIn8(____);
-#endif
-#if HAS_analogIn9
-    AnalogIn analogIn9(____);
-#endif
-#if HAS_analogIn10
-    AnalogIn analogIn10(____);
-#endif
-#if HAS_analogIn11
-    AnalogIn analogIn11(____);
-#endif
-#if HAS_analogIn12
-    AnalogIn analogIn12(____);
-#endif
-#if HAS_analogIn13
-    AnalogIn analogIn13(____);
-#endif
-#if HAS_analogIn14
-    AnalogIn analogIn14(____);
-#endif
-#if HAS_analogIn15
-    AnalogIn analogIn15(____);
-#endif
-#else
-    // unknown target
-#endif
-// uncrustify-0.66.1 *INDENT-ON*
-#if HAS_analogIn0 || HAS_analogIn1 \
-    || HAS_analogIn2 || HAS_analogIn3 \
-    || HAS_analogIn4 || HAS_analogIn5 \
-    || HAS_analogIn6 || HAS_analogIn7 \
-    || HAS_analogIn8 || HAS_analogIn9 \
-    || HAS_analogIn10 || HAS_analogIn11 \
-    || HAS_analogIn12 || HAS_analogIn13 \
-    || HAS_analogIn14 || HAS_analogIn15
-#define HAS_analogIns 1
-#endif
-
-
-
-// AnalogIn pin resource: search index
-#if HAS_analogIns
-AnalogIn& find_analogInPin(int cPinIndex)
-{
-    switch (cPinIndex)
-    {
-        default: // default to the first defined analogIn pin
-#if HAS_analogIn0
-        case '0': case 0x00: return analogIn0;
-#endif
-#if HAS_analogIn1
-        case '1': case 0x01: return analogIn1;
-#endif
-#if HAS_analogIn2
-        case '2': case 0x02: return analogIn2;
-#endif
-#if HAS_analogIn3
-        case '3': case 0x03: return analogIn3;
-#endif
-#if HAS_analogIn4
-        case '4': case 0x04: return analogIn4;
-#endif
-#if HAS_analogIn5
-        case '5': case 0x05: return analogIn5;
-#endif
-#if HAS_analogIn6
-        case '6': case 0x06: return analogIn6;
-#endif
-#if HAS_analogIn7
-        case '7': case 0x07: return analogIn7;
-#endif
-#if HAS_analogIn8
-        case '8': case 0x08: return analogIn8;
-#endif
-#if HAS_analogIn9
-        case '9': case 0x09: return analogIn9;
-#endif
-#if HAS_analogIn10
-        case 'a': case 0x0a: return analogIn10;
-#endif
-#if HAS_analogIn11
-        case 'b': case 0x0b: return analogIn11;
-#endif
-#if HAS_analogIn12
-        case 'c': case 0x0c: return analogIn12;
-#endif
-#if HAS_analogIn13
-        case 'd': case 0x0d: return analogIn13;
-#endif
-#if HAS_analogIn14
-        case 'e': case 0x0e: return analogIn14;
-#endif
-#if HAS_analogIn15
-        case 'f': case 0x0f: return analogIn15;
-#endif
-    }
-}
-#endif
-
-#if HAS_analogIns
-const float analogInPin_fullScaleVoltage[] = {
-# if defined(TARGET_MAX32630)
-    ADC_FULL_SCALE_VOLTAGE, // analogIn0
-    ADC_FULL_SCALE_VOLTAGE, // analogIn1
-    ADC_FULL_SCALE_VOLTAGE, // analogIn2
-    ADC_FULL_SCALE_VOLTAGE, // analogIn3
-    ADC_FULL_SCALE_VOLTAGE * 5.0f, // analogIn4 // AIN_4 = AIN0 / 5.0     fullscale is 6.0V
-    ADC_FULL_SCALE_VOLTAGE * 5.0f, // analogIn4 // AIN_5 = AIN1 / 5.0     fullscale is 6.0V
-    ADC_FULL_SCALE_VOLTAGE * 4.0f, // analogIn6 // AIN_6 = VDDB / 4.0     fullscale is 4.8V
-    ADC_FULL_SCALE_VOLTAGE, // analogIn7 // AIN_7 = VDD18          fullscale is 1.2V
-    ADC_FULL_SCALE_VOLTAGE, // analogIn8 // AIN_8 = VDD12          fullscale is 1.2V
-    ADC_FULL_SCALE_VOLTAGE * 2.0f, // analogIn9 // AIN_9 = VRTC / 2.0     fullscale is 2.4V
-    ADC_FULL_SCALE_VOLTAGE, // analogIn10  // AIN_10 = x undefined?
-    ADC_FULL_SCALE_VOLTAGE * 4.0f, // analogIn11 // AIN_11 = VDDIO / 4.0   fullscale is 4.8V
-    ADC_FULL_SCALE_VOLTAGE * 4.0f, // analogIn12 // AIN_12 = VDDIOH / 4.0  fullscale is 4.8V
-    ADC_FULL_SCALE_VOLTAGE, // analogIn13
-    ADC_FULL_SCALE_VOLTAGE, // analogIn14
-    ADC_FULL_SCALE_VOLTAGE // analogIn15
-# elif defined(TARGET_MAX32620FTHR)
-#warning "TARGET_MAX32620FTHR not previously tested; need to verify analogIn0..."
-    ADC_FULL_SCALE_VOLTAGE, // analogIn0
-    ADC_FULL_SCALE_VOLTAGE, // analogIn1
-    ADC_FULL_SCALE_VOLTAGE, // analogIn2
-    ADC_FULL_SCALE_VOLTAGE, // analogIn3
-    ADC_FULL_SCALE_VOLTAGE * 5.0f, // analogIn4 // AIN_4 = AIN0 / 5.0     fullscale is 6.0V
-    ADC_FULL_SCALE_VOLTAGE * 5.0f, // analogIn4 // AIN_5 = AIN1 / 5.0     fullscale is 6.0V
-    ADC_FULL_SCALE_VOLTAGE * 4.0f, // analogIn6 // AIN_6 = VDDB / 4.0     fullscale is 4.8V
-    ADC_FULL_SCALE_VOLTAGE, // analogIn7 // AIN_7 = VDD18          fullscale is 1.2V
-    ADC_FULL_SCALE_VOLTAGE, // analogIn8 // AIN_8 = VDD12          fullscale is 1.2V
-    ADC_FULL_SCALE_VOLTAGE * 2.0f, // analogIn9 // AIN_9 = VRTC / 2.0     fullscale is 2.4V
-    ADC_FULL_SCALE_VOLTAGE, // analogIn10  // AIN_10 = x undefined?
-    ADC_FULL_SCALE_VOLTAGE * 4.0f, // analogIn11 // AIN_11 = VDDIO / 4.0   fullscale is 4.8V
-    ADC_FULL_SCALE_VOLTAGE * 4.0f, // analogIn12 // AIN_12 = VDDIOH / 4.0  fullscale is 4.8V
-    ADC_FULL_SCALE_VOLTAGE, // analogIn13
-    ADC_FULL_SCALE_VOLTAGE, // analogIn14
-    ADC_FULL_SCALE_VOLTAGE // analogIn15
-#elif defined(TARGET_MAX32625MBED)
-    ADC_FULL_SCALE_VOLTAGE * 1.0f, // analogIn0 // fullscale is 1.2V
-    ADC_FULL_SCALE_VOLTAGE * 1.0f, // analogIn1 // fullscale is 1.2V
-    ADC_FULL_SCALE_VOLTAGE * 1.0f, // analogIn2 // fullscale is 1.2V
-    ADC_FULL_SCALE_VOLTAGE * 1.0f, // analogIn3 // fullscale is 1.2V
-    ADC_FULL_SCALE_VOLTAGE * 5.0f, // analogIn4 // AIN_4 = AIN0 / 5.0     fullscale is 6.0V
-    ADC_FULL_SCALE_VOLTAGE * 5.0f, // analogIn4 // AIN_5 = AIN1 / 5.0     fullscale is 6.0V
-    ADC_FULL_SCALE_VOLTAGE * 4.0f, // analogIn6 // AIN_6 = VDDB / 4.0     fullscale is 4.8V
-    ADC_FULL_SCALE_VOLTAGE, // analogIn7 // AIN_7 = VDD18          fullscale is 1.2V
-    ADC_FULL_SCALE_VOLTAGE, // analogIn8 // AIN_8 = VDD12          fullscale is 1.2V
-    ADC_FULL_SCALE_VOLTAGE * 2.0f, // analogIn9 // AIN_9 = VRTC / 2.0     fullscale is 2.4V
-    ADC_FULL_SCALE_VOLTAGE, // analogIn10  // AIN_10 = x undefined?
-    ADC_FULL_SCALE_VOLTAGE * 4.0f, // analogIn11 // AIN_11 = VDDIO / 4.0   fullscale is 4.8V
-    ADC_FULL_SCALE_VOLTAGE * 4.0f, // analogIn12 // AIN_12 = VDDIOH / 4.0  fullscale is 4.8V
-    ADC_FULL_SCALE_VOLTAGE, // analogIn13
-    ADC_FULL_SCALE_VOLTAGE, // analogIn14
-    ADC_FULL_SCALE_VOLTAGE // analogIn15
-#elif defined(TARGET_NUCLEO_F446RE)
-    ADC_FULL_SCALE_VOLTAGE, // analogIn0
-    ADC_FULL_SCALE_VOLTAGE, // analogIn1
-    ADC_FULL_SCALE_VOLTAGE, // analogIn2
-    ADC_FULL_SCALE_VOLTAGE, // analogIn3
-    ADC_FULL_SCALE_VOLTAGE, // analogIn4
-    ADC_FULL_SCALE_VOLTAGE, // analogIn5
-    ADC_FULL_SCALE_VOLTAGE, // analogIn6
-    ADC_FULL_SCALE_VOLTAGE, // analogIn7
-    ADC_FULL_SCALE_VOLTAGE, // analogIn8
-    ADC_FULL_SCALE_VOLTAGE, // analogIn9
-    ADC_FULL_SCALE_VOLTAGE, // analogIn10
-    ADC_FULL_SCALE_VOLTAGE, // analogIn11
-    ADC_FULL_SCALE_VOLTAGE, // analogIn12
-    ADC_FULL_SCALE_VOLTAGE, // analogIn13
-    ADC_FULL_SCALE_VOLTAGE, // analogIn14
-    ADC_FULL_SCALE_VOLTAGE // analogIn15
-#elif defined(TARGET_NUCLEO_F401RE)
-    ADC_FULL_SCALE_VOLTAGE, // analogIn0
-    ADC_FULL_SCALE_VOLTAGE, // analogIn1
-    ADC_FULL_SCALE_VOLTAGE, // analogIn2
-    ADC_FULL_SCALE_VOLTAGE, // analogIn3
-    ADC_FULL_SCALE_VOLTAGE, // analogIn4
-    ADC_FULL_SCALE_VOLTAGE, // analogIn5
-    ADC_FULL_SCALE_VOLTAGE, // analogIn6
-    ADC_FULL_SCALE_VOLTAGE, // analogIn7
-    ADC_FULL_SCALE_VOLTAGE, // analogIn8
-    ADC_FULL_SCALE_VOLTAGE, // analogIn9
-    ADC_FULL_SCALE_VOLTAGE, // analogIn10
-    ADC_FULL_SCALE_VOLTAGE, // analogIn11
-    ADC_FULL_SCALE_VOLTAGE, // analogIn12
-    ADC_FULL_SCALE_VOLTAGE, // analogIn13
-    ADC_FULL_SCALE_VOLTAGE, // analogIn14
-    ADC_FULL_SCALE_VOLTAGE // analogIn15
-//#elif defined(TARGET_LPC1768)
-#else
-    // unknown target
-    ADC_FULL_SCALE_VOLTAGE, // analogIn0
-    ADC_FULL_SCALE_VOLTAGE, // analogIn1
-    ADC_FULL_SCALE_VOLTAGE, // analogIn2
-    ADC_FULL_SCALE_VOLTAGE, // analogIn3
-    ADC_FULL_SCALE_VOLTAGE, // analogIn4
-    ADC_FULL_SCALE_VOLTAGE, // analogIn5
-    ADC_FULL_SCALE_VOLTAGE, // analogIn6
-    ADC_FULL_SCALE_VOLTAGE, // analogIn7
-    ADC_FULL_SCALE_VOLTAGE, // analogIn8
-    ADC_FULL_SCALE_VOLTAGE, // analogIn9
-    ADC_FULL_SCALE_VOLTAGE, // analogIn10
-    ADC_FULL_SCALE_VOLTAGE, // analogIn11
-    ADC_FULL_SCALE_VOLTAGE, // analogIn12
-    ADC_FULL_SCALE_VOLTAGE, // analogIn13
-    ADC_FULL_SCALE_VOLTAGE, // analogIn14
-    ADC_FULL_SCALE_VOLTAGE // analogIn15
-# endif
-};
-#endif
-
-
-
-
-//--------------------------------------------------
-// Option to use LEDs to show status
-#ifndef USE_LEDS
-#define USE_LEDS 1
-#endif
-#if USE_LEDS
-#if defined(TARGET_MAX32630)
-# define LED_ON  0
-# define LED_OFF 1
-//--------------------------------------------------
-#elif defined(TARGET_MAX32625MBED)
-# define LED_ON  0
-# define LED_OFF 1
-//--------------------------------------------------
-// TODO1: TARGET=MAX32625MBED ARM Cortex-M4F 96MHz 512kB Flash 160kB SRAM
-#elif defined(TARGET_LPC1768)
-# define LED_ON  1
-# define LED_OFF 0
-#else // not defined(TARGET_LPC1768 etc.)
-// USE_LEDS with some platform other than MAX32630, MAX32625MBED, LPC1768
-// bugfix for MAX32600MBED LED blink pattern: check if LED_ON/LED_OFF already defined
-# ifndef LED_ON
-#  define LED_ON  0
-# endif
-# ifndef LED_OFF
-#  define LED_OFF 1
-# endif
-//# define LED_ON  1
-//# define LED_OFF 0
-#endif // target definition
-DigitalOut led1(LED1, LED_OFF); // MAX32630FTHR: LED1 = LED_RED
-DigitalOut led2(LED2, LED_OFF); // MAX32630FTHR: LED2 = LED_GREEN
-DigitalOut led3(LED3, LED_OFF); // MAX32630FTHR: LED3 = LED_BLUE
-DigitalOut led4(LED4, LED_OFF);
-#else // USE_LEDS=0
-// issue #41 support Nucleo_F446RE
-// there are no LED indicators on the board, LED1 interferes with SPI;
-// but we still need placeholders led1 led2 led3 led4.
-// Declare DigitalOut led1 led2 led3 led4 targeting safe pins.
-// PinName NC means NOT_CONNECTED; DigitalOut::is_connected() returns false
-# define LED_ON  0
-# define LED_OFF 1
-DigitalOut led1(NC, LED_OFF);
-DigitalOut led2(NC, LED_OFF);
-DigitalOut led3(NC, LED_OFF);
-DigitalOut led4(NC, LED_OFF);
-#endif // USE_LEDS
-#define led1_RFailLED led1
-#define led2_GPassLED led2
-#define led3_BBusyLED led3
-
-//--------------------------------------------------
-
-
-// example code board support
-//MAX32630FTHR pegasus(MAX32630FTHR::VIO_3V3);
-//DigitalOut rLED(LED1);
-//DigitalOut gLED(LED2);
-//DigitalOut bLED(LED3);
-//
-// Arduino "shield" connector port definitions (MAX32625MBED shown)
-#if defined(TARGET_MAX32625MBED)
-#define A0 AIN_0
-#define A1 AIN_1
-#define A2 AIN_2
-#define A3 AIN_3
-#define D0 P0_0
-#define D1 P0_1
-#define D2 P0_2
-#define D3 P0_3
-#define D4 P0_4
-#define D5 P0_5
-#define D6 P0_6
-#define D7 P0_7
-#define D8 P1_4
-#define D9 P1_5
-#define D10 P1_3
-#define D11 P1_1
-#define D12 P1_2
-#define D13 P1_0
-#endif
-
-// example code declare SPI interface
-#if defined(TARGET_MAX32625MBED)
-SPI spi(SPI1_MOSI, SPI1_MISO, SPI1_SCK); // mosi, miso, sclk spi1 TARGET_MAX32625MBED: P1_1 P1_2 P1_0 Arduino 10-pin header D11 D12 D13
-DigitalOut spi_cs(SPI1_SS); // TARGET_MAX32625MBED: P1_3 Arduino 10-pin header D10
-#elif defined(TARGET_MAX32600MBED)
-SPI spi(SPI2_MOSI, SPI2_MISO, SPI2_SCK); // mosi, miso, sclk spi1 TARGET_MAX32600MBED: Arduino 10-pin header D11 D12 D13
-DigitalOut spi_cs(SPI2_SS); // Generic: Arduino 10-pin header D10
-#else
-SPI spi(D11, D12, D13); // mosi, miso, sclk spi1 TARGET_MAX32600MBED: Arduino 10-pin header D11 D12 D13
-DigitalOut spi_cs(D10); // Generic: Arduino 10-pin header D10
-#endif
-
-// example code declare GPIO interface pins
-DigitalOut CONVRUN_pin(D9); // Digital Configuration Input to MAX11043 device
-DigitalOut SHDN_pin(D8); // Digital Configuration Input to MAX11043 device
-DigitalOut DACSTEP_pin(D7); // Digital Configuration Input to MAX11043 device
-DigitalOut UP_slash_DWNb_pin(D6); // Digital Configuration Input to MAX11043 device
-DigitalIn EOC_pin(D2); // Digital Event Output from MAX11043 device
-// example code declare device instance
-MAX11043 g_MAX11043_device(spi, spi_cs, CONVRUN_pin, SHDN_pin, DACSTEP_pin, UP_slash_DWNb_pin, EOC_pin, MAX11043::MAX11043_IC);
-
-
-//----------------------------------------
-// Global SPI options
-//
-
-//----------------------------------------
-// Global I2C options
-//
-
-#define APPLICATION_ArduinoPinsMonitor 1
-
-//--------------------------------------------------
-// use BUTTON1 trigger some action
-#if defined(TARGET_MAX32630)
-#define HAS_BUTTON1_DEMO_INTERRUPT 1
-#define HAS_BUTTON2_DEMO 0
-#define HAS_BUTTON2_DEMO_INTERRUPT 0
-#elif defined(TARGET_MAX32625PICO)
-#warning "TARGET_MAX32625PICO not previously tested; need to define buttons..."
-#define HAS_BUTTON1_DEMO_INTERRUPT 1
-#define HAS_BUTTON2_DEMO 0
-#define HAS_BUTTON2_DEMO_INTERRUPT 0
-#elif defined(TARGET_MAX32625)
-#define HAS_BUTTON1_DEMO_INTERRUPT 1
-#define HAS_BUTTON2_DEMO_INTERRUPT 1
-#elif defined(TARGET_MAX32620FTHR)
-#warning "TARGET_MAX32620FTHR not previously tested; need to define buttons..."
-#define BUTTON1 SW1
-#define HAS_BUTTON1_DEMO_INTERRUPT 1
-#define HAS_BUTTON2_DEMO 0
-#define HAS_BUTTON2_DEMO_INTERRUPT 0
-#elif defined(TARGET_NUCLEO_F446RE)
-#define HAS_BUTTON1_DEMO_INTERRUPT 0
-#define HAS_BUTTON2_DEMO_INTERRUPT 0
-#elif defined(TARGET_NUCLEO_F401RE)
-#define HAS_BUTTON1_DEMO_INTERRUPT 0
-#define HAS_BUTTON2_DEMO_INTERRUPT 0
-#else
-#warning "target not previously tested; need to define buttons..."
-#endif
-//
-#ifndef HAS_BUTTON1_DEMO
-#define HAS_BUTTON1_DEMO 0
-#endif
-#ifndef HAS_BUTTON2_DEMO
-#define HAS_BUTTON2_DEMO 0
-#endif
-//
-// avoid runtime error on button1 press [mbed-os-5.11]
-// instead of using InterruptIn, use DigitalIn and poll in main while(1)
-#ifndef HAS_BUTTON1_DEMO_INTERRUPT_POLLING
-#define HAS_BUTTON1_DEMO_INTERRUPT_POLLING 1
-#endif
-//
-#ifndef HAS_BUTTON1_DEMO_INTERRUPT
-#define HAS_BUTTON1_DEMO_INTERRUPT 1
-#endif
-#ifndef HAS_BUTTON2_DEMO_INTERRUPT
-#define HAS_BUTTON2_DEMO_INTERRUPT 1
-#endif
-//
-#if HAS_BUTTON1_DEMO_INTERRUPT
-# if HAS_BUTTON1_DEMO_INTERRUPT_POLLING
-// avoid runtime error on button1 press [mbed-os-5.11]
-// instead of using InterruptIn, use DigitalIn and poll in main while(1)
-DigitalIn button1(BUTTON1);
-# else
-InterruptIn button1(BUTTON1);
-# endif
-#elif HAS_BUTTON1_DEMO
-DigitalIn button1(BUTTON1);
-#endif
-#if HAS_BUTTON2_DEMO_INTERRUPT
-# if HAS_BUTTON1_DEMO_INTERRUPT_POLLING
-// avoid runtime error on button1 press [mbed-os-5.11]
-// instead of using InterruptIn, use DigitalIn and poll in main while(1)
-DigitalIn button2(BUTTON2);
-# else
-InterruptIn button2(BUTTON2);
-# endif
-#elif HAS_BUTTON2_DEMO
-DigitalIn button2(BUTTON2);
-#endif
-
-//--------------------------------------------------
-// When user presses button BUTTON1, perform self test
-#if HAS_BUTTON1_DEMO_INTERRUPT
-void onButton1FallingEdge(void)
-{
-    void SelfTest(CmdLine & cmdLine);
-    SelfTest(cmdLine_serial);
-}
-#endif // HAS_BUTTON1_DEMO_INTERRUPT
-
-//--------------------------------------------------
-// When user presses button BUTTON2, perform demo configuration
-#if HAS_BUTTON2_DEMO_INTERRUPT
-void onButton2FallingEdge(void)
-{
-    // TBD demo configuration
-    // TODO diagnostic LED
-}
-#endif // HAS_BUTTON2_DEMO_INTERRUPT
-
-//--------------------------------------------------
-void SelfTest(CmdLine & cmdLine)
-{
-    //--------------------------------------------------
-#if analogIn4_IS_HIGH_RANGE_OF_analogIn0
-    // Platform board uses AIN4,AIN5,.. as high range of AIN0,AIN1,..
-    MaximTinyTester tinyTester(cmdLine, analogIn4, analogIn5, analogIn2, analogIn3, analogIn0, analogIn4, led1_RFailLED, led2_GPassLED, led3_BBusyLED);
-    tinyTester.analogInPin_fullScaleVoltage[0] = analogInPin_fullScaleVoltage[4]; // board support
-    tinyTester.analogInPin_fullScaleVoltage[1] = analogInPin_fullScaleVoltage[5]; // board support
-    tinyTester.analogInPin_fullScaleVoltage[2] = analogInPin_fullScaleVoltage[2]; // board support
-    tinyTester.analogInPin_fullScaleVoltage[3] = analogInPin_fullScaleVoltage[3]; // board support
-    tinyTester.analogInPin_fullScaleVoltage[4] = analogInPin_fullScaleVoltage[0]; // board support
-    tinyTester.analogInPin_fullScaleVoltage[5] = analogInPin_fullScaleVoltage[1]; // board support
-    // low range channels AIN0, AIN1, AIN2, AIN3
-#else // analogIn4_IS_HIGH_RANGE_OF_analogIn0
-    // Platform board uses simple analog inputs
-    MaximTinyTester tinyTester(cmdLine, analogIn0, analogIn1, analogIn2, analogIn3, analogIn4, analogIn5, led1_RFailLED, led2_GPassLED, led3_BBusyLED);
-    tinyTester.analogInPin_fullScaleVoltage[0] = analogInPin_fullScaleVoltage[0]; // board support
-    tinyTester.analogInPin_fullScaleVoltage[1] = analogInPin_fullScaleVoltage[1]; // board support
-    tinyTester.analogInPin_fullScaleVoltage[2] = analogInPin_fullScaleVoltage[2]; // board support
-    tinyTester.analogInPin_fullScaleVoltage[3] = analogInPin_fullScaleVoltage[3]; // board support
-    tinyTester.analogInPin_fullScaleVoltage[4] = analogInPin_fullScaleVoltage[4]; // board support
-    tinyTester.analogInPin_fullScaleVoltage[5] = analogInPin_fullScaleVoltage[5]; // board support
-#endif
-    tinyTester.clear();
-
-    // CODE GENERATOR: generate SelfTest based on function docstrings @test lines
-
-    //
-#if INJECT_SELFTEST_FAIL
-    // Test of the pass/fail report mechanism
-    tinyTester.FAIL();
-    cmdLine.serial().print(F("injecting one false failure for test reporting"));
-#endif
-    //
-    // Report number of pass and number of fail test results
-    tinyTester.Report_Summary();
-}
-
-
-//--------------------------------------------------
-inline void print_command_prompt()
-{
-    cmdLine_serial.serial().printf("\r\n> ");
-
-}
-
-
-//--------------------------------------------------
-void pinsMonitor_submenu_onEOLcommandParser(CmdLine& cmdLine)
-{
-    // % diagnostic commands submenu
-    // %Hpin -- digital output high
-    // %Lpin -- digital output low
-    // %?pin -- digital input
-    // %A %Apin -- analog input
-    // %Ppin df=xx -- pwm output
-    // %Wpin -- measure high pulsewidth input in usec
-    // %wpin -- measure low pulsewidth input in usec
-    // %I... -- I2C diagnostics
-    // %IP -- I2C probe
-    // %IC scl=100khz ADDR=? -- I2C configure
-    // %IW byte byte ... byte RD=? ADDR=0x -- write
-    // %IR ADDR=? RD=? -- read
-    // %I^ cmd=? -- i2c_smbus_read_word_data
-    // %S... -- SPI diagnostics
-    // %SC sclk=1Mhz -- SPI configure
-    // %SW -- write (write and read)
-    // %SR -- read (alias for %SW because SPI always write and read)
-    // A-Z,a-z,0-9 reserved for application use
-    //
-    char strPinIndex[3];
-    strPinIndex[0] = cmdLine[2];
-    strPinIndex[1] = cmdLine[3];
-    strPinIndex[2] = '\0';
-    int pinIndex = strtoul(strPinIndex, NULL, 10);         // strtol(str, NULL, 10): get decimal value
-    //cmdLine.serial().printf(" pinIndex=%d ", pinIndex);
-    //
-    // get next character
-    switch (cmdLine[1])
-    {
-#if HAS_digitalInOuts
-        case 'H': case 'h':
-        {
-            // %Hpin -- digital output high
-#if ARDUINO_STYLE
-            pinMode(pinIndex, OUTPUT);             // digital pins 0, 1, 2, .. 13, analog input pins A0, A1, .. A5
-            digitalWrite(pinIndex, HIGH);             // digital pins 0, 1, 2, .. 13, analog input pins A0, A1, .. A5
-#else
-            DigitalInOut& digitalInOutPin = find_digitalInOutPin(pinIndex);
-            digitalInOutPin.output();
-            digitalInOutPin.write(1);
-#endif
-            cmdLine.serial().printf(" digitalInOutPin %d Output High ", pinIndex);
-        }
-        break;
-        case 'L': case 'l':
-        {
-            // %Lpin -- digital output low
-#if ARDUINO_STYLE
-            pinMode(pinIndex, OUTPUT);             // digital pins 0, 1, 2, .. 13, analog input pins A0, A1, .. A5
-            digitalWrite(pinIndex, LOW);             // digital pins 0, 1, 2, .. 13, analog input pins A0, A1, .. A5
-#else
-            DigitalInOut& digitalInOutPin = find_digitalInOutPin(pinIndex);
-            digitalInOutPin.output();
-            digitalInOutPin.write(0);
-#endif
-            cmdLine.serial().printf(" digitalInOutPin %d Output Low ", pinIndex);
-        }
-        break;
-        case '?':
-        {
-            // %?pin -- digital input
-#if ARDUINO_STYLE
-            pinMode(pinIndex, INPUT);             // digital pins 0, 1, 2, .. 13, analog input pins A0, A1, .. A5
-#else
-            DigitalInOut& digitalInOutPin = find_digitalInOutPin(pinIndex);
-            digitalInOutPin.input();
-#endif
-            serial.printf(" digitalInOutPin %d Input ", pinIndex);
-#if ARDUINO_STYLE
-            int value = digitalRead(pinIndex);
-#else
-            int value = digitalInOutPin.read();
-#endif
-            cmdLine.serial().printf("%d ", value);
-        }
-        break;
-#endif
-        //
-#if HAS_analogIns
-        case 'A': case 'a':
-        {
-            // %A %Apin -- analog input
-#if analogIn4_IS_HIGH_RANGE_OF_analogIn0
-            // Platform board uses AIN4,AIN5,.. as high range of AIN0,AIN1,..
-            for (int pinIndex = 0; pinIndex < 2; pinIndex++)
-            {
-                int cPinIndex = '0' + pinIndex;
-                AnalogIn& analogInPin = find_analogInPin(cPinIndex);
-                float adc_full_scale_voltage = analogInPin_fullScaleVoltage[pinIndex];
-                float normValue_0_1 = analogInPin.read();
-                //
-                int pinIndexH = pinIndex + 4;
-                int cPinIndexH = '0' + pinIndexH;
-                AnalogIn& analogInPinH = find_analogInPin(cPinIndexH);
-                float adc_full_scale_voltageH = analogInPin_fullScaleVoltage[pinIndexH];
-                float normValueH_0_1 = analogInPinH.read();
-                //
-                cmdLine.serial().printf("AIN%c = %7.3f%% = %1.3fV  AIN%c = %7.3f%% = %1.3fV  \r\n",
-                                        cPinIndex,
-                                        normValue_0_1 * 100.0,
-                                        normValue_0_1 * adc_full_scale_voltage,
-                                        cPinIndexH,
-                                        normValueH_0_1 * 100.0,
-                                        normValueH_0_1 * adc_full_scale_voltageH
-                                        );
-            }
-            for (int pinIndex = 2; pinIndex < 4; pinIndex++)
-            {
-                int cPinIndex = '0' + pinIndex;
-                AnalogIn& analogInPin = find_analogInPin(cPinIndex);
-                float adc_full_scale_voltage = analogInPin_fullScaleVoltage[pinIndex];
-                float normValue_0_1 = analogInPin.read();
-                //
-                cmdLine.serial().printf("AIN%c = %7.3f%% = %1.3fV\r\n",
-                                        cPinIndex,
-                                        normValue_0_1 * 100.0,
-                                        normValue_0_1 * adc_full_scale_voltage
-                                        );
-            }
-#else // analogIn4_IS_HIGH_RANGE_OF_analogIn0
-            // Platform board uses simple analog inputs
-            // assume standard Arduino analog inputs A0-A5
-            for (int pinIndex = 0; pinIndex < 6; pinIndex++)
-            {
-                int cPinIndex = '0' + pinIndex;
-                AnalogIn& analogInPin = find_analogInPin(cPinIndex);
-                float adc_full_scale_voltage = analogInPin_fullScaleVoltage[pinIndex];
-                float normValue_0_1 = analogInPin.read();
-                //
-                cmdLine.serial().printf("AIN%c = %7.3f%% = %1.3fV\r\n",
-                                        cPinIndex,
-                                        normValue_0_1 * 100.0,
-                                        normValue_0_1 * adc_full_scale_voltage
-                                        );
-            }
-#endif // analogIn4_IS_HIGH_RANGE_OF_analogIn0
-        }
-        break;
-#endif
-        //
-#if HAS_SPI2_MAX541
-        case 'D': case 'd':
-        {
-            // %D -- DAC output MAX541 (SPI2) -- need cmdLine.parse_float(voltageV)
-            // MAX541 max541(spi2_max541, spi2_max541_cs);
-            float voltageV = max541.Get_Voltage();
-            // if (cmdLine[2] == '+') {
-            //     // %D+
-            //     voltageV = voltageV * 1.25f;
-            //     if (voltageV >= max541.VRef) voltageV = max541.VRef;
-            //     SelfTest_MAX541_Voltage(cmdLine, max541, voltageV);
-            // }
-            // else if (cmdLine[2] == '-') {
-            //     // %D-
-            //     voltageV = voltageV * 0.75f;
-            //     if (voltageV < 0.1f) voltageV = 0.1f;
-            //     SelfTest_MAX541_Voltage(cmdLine, max541, voltageV);
-            // }
-            if (cmdLine.parse_float("V", voltageV))
-            {
-                // %D V=1.234 -- set voltage
-                max541.Set_Voltage(voltageV);
-            }
-            else if (cmdLine.parse_float("TEST", voltageV))
-            {
-                // %D TEST=1.234 -- set voltage and compare with AIN0
-                SelfTest_MAX541_Voltage(cmdLine, max541, voltageV);
-            }
-            else if (cmdLine.parse_float("CAL", voltageV))
-            {
-                // %D CAL=1.234 -- calibrate VRef and compare with AIN0
-
-                max541.Set_Code(0x8000); // we don't know the fullscale voltage yet, so set code to midscale
-                double max541_midscale_V = analogInPin_fullScaleVoltage[4] * analogIn4.read(); // TARGET_MAX32630 J1.5 AIN_4 = AIN0 / 5.0     fullscale is 6.0V
-                const int average_count = 100;
-                const double average_K = 0.25;
-                for (int count = 0; count < average_count; count++) {
-                    double measurement_V = analogInPin_fullScaleVoltage[4] * analogIn4.read(); // TARGET_MAX32630 J1.5 AIN_4 = AIN0 / 5.0     fullscale is 6.0V
-                    max541_midscale_V = ((1 - average_K) * max541_midscale_V) + (average_K * measurement_V);
-                }
-                max541.VRef = 2.0 * max541_midscale_V;
-                cmdLine.serial().printf(
-                    "\r\n      MAX541 midscale = %1.3fV, so fullscale = %1.3fV",
-                    max541_midscale_V, max541.VRef);
-                // Detect whether MAX541 is really connected to MAX32625MBED.AIN0/AIN4
-                voltageV = 1.0f;
-                SelfTest_MAX541_Voltage(cmdLine, max541, voltageV);
-            }
-            else {
-                // %D -- print MAX541 DAC status
-                cmdLine.serial().printf("MAX541 code=0x%4.4x = %1.3fV  VRef=%1.3fV\r\n",
-                                        max541.Get_Code(), max541.Get_Voltage(), max541.VRef);
-            }
-        }
-        break;
-#endif
-
-        //
-#if HAS_I2C // SUPPORT_I2C
-        case 'I': case 'i':
-            // %I... -- I2C diagnostics
-            // %IP -- I2C probe
-            // %IC scl=100khz ADDR=? -- I2C configure
-            // %IW byte byte ... byte RD=? ADDR=0x -- write
-            // %IR ADDR=? RD=? -- read
-            // %I^ cmd=? -- i2c_smbus_read_word_data
-            // get next character
-            // TODO: parse cmdLine arg (ADDR=\d+)? --> g_I2C_deviceAddress7
-            cmdLine.parse_byte_hex("ADDR", g_I2C_deviceAddress7);
-            // TODO: parse cmdLine arg (RD=\d)? --> g_I2C_read_count
-            g_I2C_read_count = 0;         // read count must be reset every command
-            cmdLine.parse_byte_dec("RD", g_I2C_read_count);
-            // TODO: parse cmdLine arg (CMD=\d)? --> g_I2C_command_regAddress
-            cmdLine.parse_byte_hex("CMD", g_I2C_command_regAddress);
-            switch (cmdLine[2])
-            {
-                case 'P': case 'p':
-                {
-                    // %IP -- I2C probe
-                    HuntAttachedI2CDevices(cmdLine, 0x03, 0x77);
-                }
-                break;
-                case 'C': case 'c':
-                {
-                    bool isUpdatedI2CConfig = false;
-                    // %IC scl=100khz ADDR=? -- I2C configure
-                    // parse cmdLine arg (SCL=\d+(kHZ|MHZ)?)? --> g_I2C_SCL_Hz
-                    if (cmdLine.parse_frequency_Hz("SCL", g_I2C_SCL_Hz))
-                    {
-                        isUpdatedI2CConfig = true;
-                        // TODO1: validate g_I2C_SCL_Hz against system clock frequency F_CPU
-                        if (g_I2C_SCL_Hz > limit_max_I2C_SCL_Hz)
-                        {
-                            g_I2C_SCL_Hz = limit_max_I2C_SCL_Hz;
-                        }
-                        if (g_I2C_SCL_Hz < limit_min_I2C_SCL_Hz)
-                        {
-                            g_I2C_SCL_Hz = limit_min_I2C_SCL_Hz;
-                        }
-                    }
-                    if (isUpdatedI2CConfig)
-                    {
-                        // declare in narrower scope: MAX32625MBED I2C i2cMaster(...)
-                        I2C i2cMaster(I2C0_SDA, I2C0_SCL);             // sda scl TARGET_MAX32635MBED: P1_6, P1_7 Arduino 10-pin header
-                        i2cMaster.frequency(g_I2C_SCL_Hz);
-                        i2cMaster.start();
-                        i2cMaster.stop();
-                        i2cMaster.frequency(g_I2C_SCL_Hz);
-                        cmdLine.serial().printf(
-                            "\r\n %%IC ADDR=0x%2.2x=(0x%2.2x>>1) SCL=%d=%1.3fkHz -- I2C config",
-                            g_I2C_deviceAddress7, (g_I2C_deviceAddress7 << 1), g_I2C_SCL_Hz,
-                            (g_I2C_SCL_Hz / 1000.));
-                        i2cMaster.start();
-                        i2cMaster.stop();
-                    }
-                }
-                break;
-                case 'W': case 'w':
-                {
-                    // declare in narrower scope: MAX32625MBED I2C i2cMaster(...)
-                    I2C i2cMaster(I2C0_SDA, I2C0_SCL);             // sda scl TARGET_MAX32635MBED: P1_6, P1_7 Arduino 10-pin header
-                    i2cMaster.frequency(g_I2C_SCL_Hz);
-                    // %IW byte byte ... byte RD=? ADDR=0x -- write
-                    // parse cmdLine byte list --> int byteCount; int mosiData[MAX_SPI_BYTE_COUNT];
-                    #define MAX_I2C_BYTE_COUNT 32
-                    size_t byteCount = byteCount;
-                    static char mosiData[MAX_I2C_BYTE_COUNT];
-                    static char misoData[MAX_I2C_BYTE_COUNT];
-                    if (cmdLine.parse_byteCount_byteList_hex(byteCount, mosiData,
-                                                             MAX_I2C_BYTE_COUNT))
-                    {
-                        // hex dump mosiData[0..byteCount-1]
-                        cmdLine.serial().printf(
-                            "\r\nADDR=0x%2.2x=(0x%2.2x>>1) byteCount:%d RD=%d\r\nI2C MOSI->",
-                            g_I2C_deviceAddress7,
-                            (g_I2C_deviceAddress7 << 1), byteCount, g_I2C_read_count);
-                        for (unsigned int byteIndex = 0; byteIndex < byteCount; byteIndex++)
-                        {
-                            cmdLine.serial().printf(" 0x%2.2X", mosiData[byteIndex]);
-                        }
-                        //
-                        // TODO: i2c transfer
-                        //const int addr7bit = 0x48;      // 7 bit I2C address
-                        //const int addr8bit = 0x48 << 1; // 8bit I2C address, 0x90
-                        // /* int  */   i2cMaster.read (int addr8bit, char *data, int length, bool repeated=false) // Read from an I2C slave.
-                        // /* int  */   i2cMaster.read (int ack) // Read a single byte from the I2C bus.
-                        // /* int  */   i2cMaster.write (int addr8bit, const char *data, int length, bool repeated=false) // Write to an I2C slave.
-                        // /* int  */   i2cMaster.write (int data) // Write single byte out on the I2C bus.
-                        // /* void */   i2cMaster.start (void) // Creates a start condition on the I2C bus.
-                        // /* void */   i2cMaster.stop (void) // Creates a stop condition on the I2C bus.
-                        // /* int */    i2cMaster.transfer (int addr8bit, const char *tx_buffer, int tx_length, char *rx_buffer, int rx_length, const event_callback_t &callback, int event=I2C_EVENT_TRANSFER_COMPLETE, bool repeated=false) // Start nonblocking I2C transfer. More...
-                        // /* void */   i2cMaster.abort_transfer () // Abort the ongoing I2C transfer. More...
-                        const int addr8bit = g_I2C_deviceAddress7 << 1;             // 8bit I2C address, 0x90
-                        unsigned int misoLength = 0;
-                        bool repeated = (g_I2C_read_count > 0);
-                        //
-                        int writeStatus = i2cMaster.write (addr8bit, mosiData, byteCount, repeated);
-                        switch (writeStatus)
-                        {
-                            case 0: cmdLine.serial().printf(" ack "); break;
-                            case 1: cmdLine.serial().printf(" nack "); break;
-                            default: cmdLine.serial().printf(" {writeStatus 0x%2.2X} ",
-                                                             writeStatus);
-                        }
-                        if (repeated)
-                        {
-                            int readStatus =
-                                i2cMaster.read (addr8bit, misoData, g_I2C_read_count, false);
-                            switch (readStatus)
-                            {
-                                case 1: cmdLine.serial().printf(" nack "); break;
-                                case 0: cmdLine.serial().printf(" ack "); break;
-                                default: cmdLine.serial().printf(" {readStatus 0x%2.2X} ",
-                                                                 readStatus);
-                            }
-                        }
-                        //
-                        if (misoLength > 0)
-                        {
-                            // hex dump misoData[0..byteCount-1]
-                            cmdLine.serial().printf("  MISO<-");
-                            for (unsigned int byteIndex = 0; byteIndex < g_I2C_read_count;
-                                 byteIndex++)
-                            {
-                                cmdLine.serial().printf(" 0x%2.2X", misoData[byteIndex]);
-                            }
-                        }
-                        cmdLine.serial().printf(" ");
-                    }
-                }
-                break;
-                case 'R': case 'r':
-                {
-                    // declare in narrower scope: MAX32625MBED I2C i2cMaster(...)
-                    I2C i2cMaster(I2C0_SDA, I2C0_SCL);             // sda scl TARGET_MAX32635MBED: P1_6, P1_7 Arduino 10-pin header
-                    i2cMaster.frequency(g_I2C_SCL_Hz);
-                    // %IR ADDR=? RD=? -- read
-                    // TODO: i2c transfer
-                    //const int addr7bit = 0x48;      // 7 bit I2C address
-                    //const int addr8bit = 0x48 << 1; // 8bit I2C address, 0x90
-                    // /* int  */   i2cMaster.read (int addr8bit, char *data, int length, bool repeated=false) // Read from an I2C slave.
-                    // /* int  */   i2cMaster.read (int ack) // Read a single byte from the I2C bus.
-                    // /* int  */   i2cMaster.write (int addr8bit, const char *data, int length, bool repeated=false) // Write to an I2C slave.
-                    // /* int  */   i2cMaster.write (int data) // Write single byte out on the I2C bus.
-                    // /* void */   i2cMaster.start (void) // Creates a start condition on the I2C bus.
-                    // /* void */   i2cMaster.stop (void) // Creates a stop condition on the I2C bus.
-                    // /* int */    i2cMaster.transfer (int addr8bit, const char *tx_buffer, int tx_length, char *rx_buffer, int rx_length, const event_callback_t &callback, int event=I2C_EVENT_TRANSFER_COMPLETE, bool repeated=false) // Start nonblocking I2C transfer. More...
-                    // /* void */   i2cMaster.abort_transfer () // Abort the ongoing I2C transfer. More...
-                }
-                break;
-                case '^':
-                {
-                    // declare in narrower scope: MAX32625MBED I2C i2cMaster(...)
-                    I2C i2cMaster(I2C0_SDA, I2C0_SCL);             // sda scl TARGET_MAX32635MBED: P1_6, P1_7 Arduino 10-pin header
-                    i2cMaster.frequency(g_I2C_SCL_Hz);
-                    // %I^ cmd=? -- i2c_smbus_read_word_data
-                    // TODO: i2c transfer
-                    //const int addr7bit = 0x48;      // 7 bit I2C address
-                    //const int addr8bit = 0x48 << 1; // 8bit I2C address, 0x90
-                    // /* int  */   i2cMaster.read (int addr8bit, char *data, int length, bool repeated=false) // Read from an I2C slave.
-                    // /* int  */   i2cMaster.read (int ack) // Read a single byte from the I2C bus.
-                    // /* int  */   i2cMaster.write (int addr8bit, const char *data, int length, bool repeated=false) // Write to an I2C slave.
-                    // /* int  */   i2cMaster.write (int data) // Write single byte out on the I2C bus.
-                    // /* void */   i2cMaster.start (void) // Creates a start condition on the I2C bus.
-                    // /* void */   i2cMaster.stop (void) // Creates a stop condition on the I2C bus.
-                    // /* int */    i2cMaster.transfer (int addr8bit, const char *tx_buffer, int tx_length, char *rx_buffer, int rx_length, const event_callback_t &callback, int event=I2C_EVENT_TRANSFER_COMPLETE, bool repeated=false) // Start nonblocking I2C transfer. More...
-                    // /* void */   i2cMaster.abort_transfer () // Abort the ongoing I2C transfer. More...
-                }
-                break;
-            }         // switch(cmdLine[2])
-            break;
-#endif
-        //
-#if HAS_SPI // SUPPORT_SPI
-        case 'S': case 's':
-        {
-            // %S... -- SPI diagnostics
-            // %SC sclk=1Mhz -- SPI configure
-            // %SW -- write (write and read)
-            // %SR -- read (alias for %SW because SPI always write and read)
-            //
-            // Process arguments SCLK=\d+(kHZ|MHZ) CPOL=\d CPHA=\d
-            bool isUpdatedSPIConfig = false;
-            // parse cmdLine arg (CPOL=\d)? --> g_SPI_dataMode | SPI_MODE2
-            // parse cmdLine arg (CPHA=\d)? --> g_SPI_dataMode | SPI_MODE1
-            if (cmdLine.parse_flag("CPOL", g_SPI_dataMode, SPI_MODE2))
-            {
-                isUpdatedSPIConfig = true;
-            }
-            if (cmdLine.parse_flag("CPHA", g_SPI_dataMode, SPI_MODE1))
-            {
-                isUpdatedSPIConfig = true;
-            }
-            if (cmdLine.parse_flag("CS", g_SPI_cs_state, 1))
-            {
-                isUpdatedSPIConfig = true;
-            }
-            // parse cmdLine arg (SCLK=\d+(kHZ|MHZ)?)? --> g_SPI_SCLK_Hz
-            if (cmdLine.parse_frequency_Hz("SCLK", g_SPI_SCLK_Hz))
-            {
-                isUpdatedSPIConfig = true;
-                // TODO1: validate g_SPI_SCLK_Hz against system clock frequency F_CPU
-                if (g_SPI_SCLK_Hz > limit_max_SPI_SCLK_Hz)
-                {
-                    g_SPI_SCLK_Hz = limit_max_SPI_SCLK_Hz;
-                }
-                if (g_SPI_SCLK_Hz < limit_min_SPI_SCLK_Hz)
-                {
-                    g_SPI_SCLK_Hz = limit_min_SPI_SCLK_Hz;
-                }
-            }
-            // Update SPI configuration
-            if (isUpdatedSPIConfig)
-            {
-                // %SC sclk=1Mhz -- SPI configure
-                spi_cs = g_SPI_cs_state;
-                spi.format(8,g_SPI_dataMode);             // int bits_must_be_8, int mode=0_3 CPOL=0,CPHA=0
-#if APPLICATION_MAX5715
-                g_MAX5715_device.spi_frequency(g_SPI_SCLK_Hz);
-#elif APPLICATION_MAX11131
-                g_MAX11131_device.spi_frequency(g_SPI_SCLK_Hz);
-#elif APPLICATION_MAX5171
-                g_MAX5171_device.spi_frequency(g_SPI_SCLK_Hz);
-#elif APPLICATION_MAX11410
-                g_MAX11410_device.spi_frequency(g_SPI_SCLK_Hz);
-#elif APPLICATION_MAX12345
-                g_MAX12345_device.spi_frequency(g_SPI_SCLK_Hz);
-#else
-                spi.frequency(g_SPI_SCLK_Hz);             // int SCLK_Hz=1000000 = 1MHz (initial default)
-#endif
-                //
-                double ideal_divisor = ((double)SystemCoreClock) / g_SPI_SCLK_Hz;
-                int actual_divisor = (int)(ideal_divisor + 0.0);             // frequency divisor truncate
-                double actual_SCLK_Hz = SystemCoreClock / actual_divisor;
-                //
-                // fixed: mbed-os-5.11: [Warning] format '%d' expects argument of type 'int', but argument 6 has type 'uint32_t {aka long unsigned int}' [-Wformat=]
-                cmdLine.serial().printf(
-                    "\r\n %%SC CPOL=%d CPHA=%d CS=%d SCLK=%ld=%1.3fMHz (%1.1fMHz/%1.2f = actual %1.3fMHz) -- SPI config",
-                    ((g_SPI_dataMode & SPI_MODE2) ? 1 : 0),
-                    ((g_SPI_dataMode & SPI_MODE1) ? 1 : 0),
-                    g_SPI_cs_state,
-                    g_SPI_SCLK_Hz,
-                    (g_SPI_SCLK_Hz / 1000000.),
-                    ((double)(SystemCoreClock / 1000000.)),
-                    ideal_divisor,
-                    (actual_SCLK_Hz / 1000000.)
-                    );
-            }
-            // get next character
-            switch (cmdLine[2])
-            {
-                case 'C': case 's':
-                    // %SC sclk=1Mhz -- SPI configure
-                    break;
-                case 'W': case 'R': case 'w': case 'r':
-                {
-                    // %SW -- write (write and read)
-                    // %SR -- read (alias for %SW because SPI always write and read)
-                    // parse cmdLine byte list --> int byteCount; int mosiData[MAX_SPI_BYTE_COUNT];
-                    #define MAX_SPI_BYTE_COUNT 32
-                    size_t byteCount = byteCount;
-                    static char mosiData[MAX_SPI_BYTE_COUNT];
-                    static char misoData[MAX_SPI_BYTE_COUNT];
-                    if (cmdLine.parse_byteCount_byteList_hex(byteCount, mosiData,
-                                                             MAX_SPI_BYTE_COUNT))
-                    {
-                        // hex dump mosiData[0..byteCount-1]
-                        cmdLine.serial().printf("\r\nSPI");
-                        if (byteCount > 7) {
-                            cmdLine.serial().printf(" byteCount:%d", byteCount);
-                        }
-                        cmdLine.serial().printf(" MOSI->");
-                        for (unsigned int byteIndex = 0; byteIndex < byteCount; byteIndex++)
-                        {
-                            cmdLine.serial().printf(" 0x%2.2X", mosiData[byteIndex]);
-                        }
-                        spi_cs = 0;
-                        unsigned int numBytesTransferred =
-                            spi.write(mosiData, byteCount, misoData, byteCount);
-                        spi_cs = 1;
-                        // hex dump misoData[0..byteCount-1]
-                        cmdLine.serial().printf("  MISO<-");
-                        for (unsigned int byteIndex = 0; byteIndex < numBytesTransferred;
-                             byteIndex++)
-                        {
-                            cmdLine.serial().printf(" 0x%2.2X", misoData[byteIndex]);
-                        }
-                        cmdLine.serial().printf(" ");
-                    }
-                }
-                break;
-            }             // switch(cmdLine[2])
-        }             // case 'S': // %S... -- SPI diagnostics
-        break;
-#endif
-        //
-        // A-Z,a-z,0-9 reserved for application use
-    }         // switch(cmdLine[1])
-} // end void pinsMonitor_submenu_onEOLcommandParser(CmdLine & cmdLine)
-
-
-//--------------------------------------------------
-void main_menu_status(CmdLine & cmdLine)
-{
-    cmdLine.serial().printf("\r\nMain menu");
-
-    cmdLine.serial().printf(" MAX11043 24-bit 200ksps Delta-Sigma ADC");
-
-    //cmdLine.serial().print(" %s", TARGET_NAME);
-    if (cmdLine.nameStr())
-    {
-        cmdLine.serial().printf(" [%s]", cmdLine.nameStr());
-
-    }
-    cmdLine.serial().printf("\r\n ? -- help");
-
-}
-
-
-//--------------------------------------------------
-void main_menu_help(CmdLine & cmdLine)
-{
-    // ? -- help
-    //~ cmdLine.serial().print(F("\r\nMenu:"));
-    cmdLine.serial().printf("\r\n # -- lines beginning with # are comments");
-
-    cmdLine.serial().printf("\r\n . -- SelfTest");
-
-    //cmdLine.serial().print(F("\r\n ! -- Initial Configuration"));
-    //
-    // % standardize diagnostic commands
-    // %Hpin -- digital output high
-    // %Lpin -- digital output low
-    // %?pin -- digital input
-    // %A %Apin -- analog input
-    // %Ppin df=xx -- pwm output
-    // %Wpin -- measure high pulsewidth input in usec
-    // %wpin -- measure low pulsewidth input in usec
-    // %I... -- I2C diagnostics
-    // %IP -- I2C probe
-    // %IC scl=100khz ADDR=? -- I2C configure
-    // %IW ADDR=? cmd=? data,data,data -- write
-    // %IR ADDR=? RD=? -- read
-    // %I^ cmd=? -- i2c_smbus_read_word_data
-    // %S... -- SPI diagnostics
-    // %SC sclk=1Mhz -- SPI configure
-    // %SW -- write (write and read)
-    // %SR -- read (alias for %SW because SPI always write and read)
-    // A-Z,a-z,0-9 reserved for application use
-    //
-#if HAS_digitalInOuts
-    // %Hpin -- digital output high
-    // %Lpin -- digital output low
-    // %?pin -- digital input
-    cmdLine.serial().printf("\r\n %%Hn {pin:");
-    list_digitalInOutPins(cmdLine.serial());
-    cmdLine.serial().printf("} -- High Output");
-    cmdLine.serial().printf("\r\n %%Ln {pin:");
-    list_digitalInOutPins(cmdLine.serial());
-    cmdLine.serial().printf("} -- Low Output");
-    cmdLine.serial().printf("\r\n %%?n {pin:");
-    list_digitalInOutPins(cmdLine.serial());
-    cmdLine.serial().printf("} -- Input");
-#endif
-
-#if HAS_analogIns
-    // Menu A) analogRead A0..7
-    // %A %Apin -- analog input
-    // analogRead(pinIndex) // analog input pins A0, A1, A2, A3, A4, A5; float voltage = analogRead(A0) * (5.0 / 1023.0)
-    cmdLine.serial().printf("\r\n %%A -- analogRead");
-#endif
-
-#if HAS_SPI2_MAX541
-    // TODO1: MAX541 max541(spi2_max541, spi2_max541_cs);
-    cmdLine.serial().printf("\r\n %%D -- DAC output MAX541 (SPI2)");
-#endif
-
-#if HAS_I2C // SUPPORT_I2C
-    // TODO: support I2C HAS_I2C // SUPPORT_I2C
-    // VERIFY: I2C utility commands SUPPORT_I2C
-    // VERIFY: report g_I2C_SCL_Hz = (F_CPU / ((TWBR * 2) + 16)) from last Wire_Sr.setClock(I2C_SCL_Hz);
-    // %I... -- I2C diagnostics
-    // %IP -- I2C probe
-    // %IC scl=100khz ADDR=? -- I2C configure
-    // %IW byte byte ... byte RD=? ADDR=0x -- write
-    // %IR ADDR=? RD=? -- read
-    // %I^ cmd=? -- i2c_smbus_read_word_data
-    //g_I2C_SCL_Hz = (F_CPU / ((TWBR * 2) + 16));   // 'F_CPU' 'TWBR' not declared in this scope
-    cmdLine.serial().printf("\r\n %%IC ADDR=0x%2.2x=(0x%2.2x>>1) SCL=%d=%1.3fkHz -- I2C config",
-                            g_I2C_deviceAddress7, (g_I2C_deviceAddress7 << 1), g_I2C_SCL_Hz,
-                            (g_I2C_SCL_Hz / 1000.));
-    cmdLine.serial().printf("\r\n %%IW byte byte ... byte RD=? ADDR=0x%2.2x -- I2C write/read",
-                            g_I2C_deviceAddress7);
-    //
-#if SUPPORT_I2C
-    // Menu ^ cmd=?) i2c_smbus_read_word_data
-    cmdLine.serial().printf("\r\n %%I^ cmd=? -- i2c_smbus_read_word_data");
-    // test low-level I2C i2c_smbus_read_word_data
-#endif // SUPPORT_I2C
-    //cmdLine.serial().printf(" H) Hunt for attached I2C devices");
-    cmdLine.serial().printf("\r\n %%IP -- I2C Probe for attached devices");
-    // cmdLine.serial().printf(" s) search i2c address");
-#endif // SUPPORT_I2C
-
-#if HAS_SPI // SUPPORT_SPI
-    // TODO: support SPI HAS_SPI // SUPPORT_SPI
-    // SPI test command  S (mosiData)+
-    // %S... -- SPI diagnostics
-    // %SC sclk=1Mhz -- SPI configure
-    // %SW -- write (write and read)
-    // %SR -- read (alias for %SW because SPI always write and read)
-    // spi.format(8,0); // int bits_must_be_8, int mode=0_3 CPOL=0,CPHA=0 rising edge (initial default)
-    // spi.format(8,1); // int bits_must_be_8, int mode=0_3 CPOL=0,CPHA=1 falling edge (initial default)
-    // spi.format(8,2); // int bits_must_be_8, int mode=0_3 CPOL=1,CPHA=0 falling edge (initial default)
-    // spi.format(8,3); // int bits_must_be_8, int mode=0_3 CPOL=1,CPHA=1 rising edge (initial default)
-    // spi.frequency(1000000); // int SCLK_Hz=1000000 = 1MHz (initial default)
-    // mode | POL PHA
-    // -----+--------
-    //   0  |  0   0
-    //   1  |  0   1
-    //   2  |  1   0
-    //   3  |  1   1
-    //cmdLine.serial().printf(" S) SPI mosi,mosi,...mosi hex bytes SCLK=1000000 CPOL=0 CPHA=0");
-    // fixed: mbed-os-5.11: [Warning] format '%d' expects argument of type 'int', but argument 3 has type 'uint32_t {aka long unsigned int}' [-Wformat=]
-    cmdLine.serial().printf("\r\n %%SC SCLK=%ld=%1.3fMHz CPOL=%d CPHA=%d -- SPI config",
-                            g_SPI_SCLK_Hz, (g_SPI_SCLK_Hz / 1000000.),
-                            ((g_SPI_dataMode & SPI_MODE2) ? 1 : 0),
-                            ((g_SPI_dataMode & SPI_MODE1) ? 1 : 0));
-    cmdLine.serial().printf("\r\n %%SW mosi,mosi,...mosi -- SPI write hex bytes");
-    // VERIFY: parse new SPI settings parse_strCommandArgs() SCLK=1000000 CPOL=0 CPHA=0
-#endif // SUPPORT_SPI
-       //
-       // Application-specific commands (help text) here
-       //
-#if APPLICATION_ArduinoPinsMonitor
-    cmdLine.serial().printf("\r\n A-Z,a-z,0-9 -- reserved for application use");     // ArduinoPinsMonitor
-#endif // APPLICATION_ArduinoPinsMonitor
-       //
-
-    extern bool MAX11043_menu_help(CmdLine & cmdLine); // defined in Test_Menu_MAX11043.cpp\n
-    MAX11043_menu_help(cmdLine);
-}
-
-
-
-//--------------------------------------------------
-// main menu command-line parser
-// invoked by CmdLine::append(char ch) or CmdLine::idleAppendIfReadable()
-void main_menu_onEOLcommandParser(CmdLine & cmdLine)
-{
-    // DIAGNOSTIC: print line buffer
-    //~ cmdLine.serial().printf("\r\nmain_menu_onEOLcommandParser: ~%s~\r\n", cmdLine.str());
-    //
-    switch (cmdLine[0])
-    {
-        case '?':
-            main_menu_status(cmdLine);
-            main_menu_help(cmdLine);
-            // print command prompt
-            //cmdLine.serial().printf("\r\n>");
-            break;
-        case '\r': case '\n':     // ignore blank line
-        case '\0':     // ignore empty line
-        case '#':     // ignore comment line
-            // # -- lines beginning with # are comments
-            main_menu_status(cmdLine);
-            //~ main_menu_help(cmdLine);
-            // print command prompt
-            //cmdLine.serial().printf("\r\n>");
-            break;
-#if ECHO_EOF_ON_EOL
-        case '\x04':     // Unicode (U+0004) EOT END OF TRANSMISSION = CTRL+D as EOF end of file
-            cmdLine.serial().printf("\x04");     // immediately echo EOF for test scripting
-            diagnostic_led_EOF();
-            break;
-        case '\x1a':     // Unicode (U+001A) SUB SUBSTITUTE = CTRL+Z as EOF end of file
-            cmdLine.serial().printf("\x1a");     // immediately echo EOF for test scripting
-            diagnostic_led_EOF();
-            break;
-#endif
-#if APPLICATION_ArduinoPinsMonitor
-        case '.':
-        {
-            // . -- SelfTest
-            cmdLine.serial().printf("SelfTest()");
-            SelfTest(cmdLine);
-        }
-        break;
-        case '%':
-        {
-            pinsMonitor_submenu_onEOLcommandParser(cmdLine);
-        }
-        break;         // case '%'
-#endif // APPLICATION_ArduinoPinsMonitor
-       //
-       // Application-specific commands here
-       // alphanumeric command codes A-Z,a-z,0-9 reserved for application use
-       //
-#if APPLICATION_ArduinoPinsMonitor
-#endif // APPLICATION_ArduinoPinsMonitor
-
-        //
-        // add new commands here
-        //
-        default:
-            extern bool MAX11043_menu_onEOLcommandParser(CmdLine & cmdLine); // defined in Test_Menu_MAX11043.cpp
-            if (!MAX11043_menu_onEOLcommandParser(cmdLine))
-            { // not_handled_by_device_submenu
-                cmdLine.serial().printf("\r\n unknown command 0x%2.2x \"%s\"\r\n", cmdLine.str()[0], cmdLine.str());
-
-# if HAS_DAPLINK_SERIAL
-                cmdLine_DAPLINKserial.serial().printf("\r\n unknown command 0x%2.2x \"%s\"\r\n", cmdLine.str()[0], cmdLine.str());
-
-# endif // HAS_DAPLINK_SERIAL
-            }
-    }     // switch (cmdLine[0])
-//
-// print command prompt
-    cmdLine.serial().printf("\r\nMAX11043 > ");
-
-} // end void main_menu_onEOLcommandParser(CmdLine & cmdLine)
-
-//--------------------------------------------------
-void InitializeConfiguration()
-{
-    // CODE GENERATOR: example code: member function Init
-# if HAS_DAPLINK_SERIAL
-    cmdLine_DAPLINKserial.serial().printf("\r\nMAX11043_Init()");
-
-# endif
-    cmdLine_serial.serial().printf("\r\nMAX11043_Init()");
-
-    int initResult = g_MAX11043_device.Init();     // defined in #include MAX11043.h
-# if HAS_DAPLINK_SERIAL
-    cmdLine_DAPLINKserial.serial().printf("\r\nMAX11043_Init() returned %d\r\n", initResult);
-
-# endif
-    cmdLine_serial.serial().printf("\r\nMAX11043_Init() returned %d\r\n", initResult);
-
-# if MAX11043_ONSPIPRINT
-  // Optional Diagnostic function to print SPI transactions
-  g_MAX11043_device.onSPIprint = onSPIprint_handler;
-# endif
-}
-
-//--------------------------------------------------
-// diagnostic rbg led GREEN
-void diagnostic_led_EOF()
-{
-#if USE_LEDS
-    led1 = LED_ON; led2 = LED_ON; led3 = LED_OFF;     // diagnostic rbg led RED+GREEN=YELLOW
-    // TODO1: mbed-os-5.11: [Warning] 'static osStatus rtos::Thread::wait(uint32_t)' is deprecated: Static methods only affecting current thread cause confusion. Replaced by ThisThread::sleep_for. [since mbed-os-5.10] [-Wdeprecated-declarations]
-    ThisThread::sleep_for(250); // [since mbed-os-5.10] vs Thread::wait(250);
-    led1 = LED_OFF; led2 = LED_ON; led3 = LED_OFF;     // diagnostic rbg led GREEN
-    ThisThread::sleep_for(250); // [since mbed-os-5.10] vs Thread::wait(250);
-    led1 = LED_ON; led2 = LED_ON; led3 = LED_OFF;     // diagnostic rbg led RED+GREEN=YELLOW
-    ThisThread::sleep_for(250); // [since mbed-os-5.10] vs Thread::wait(250);
-    led1 = LED_OFF; led2 = LED_ON; led3 = LED_OFF;     // diagnostic rbg led GREEN
-    ThisThread::sleep_for(250); // [since mbed-os-5.10] vs Thread::wait(250);
-#endif // USE_LEDS
-}
-
-//--------------------------------------------------
-// Support commands that get handled immediately w/o waiting for EOL
-// handled as immediate command, do not append to buffer
-void on_immediate_0x21() // Unicode (U+0021) ! EXCLAMATION MARK
-{
-#if USE_LEDS
-    led1 = LED_OFF; led2 = LED_OFF; led3 = LED_ON;     // diagnostic rbg led BLUE
-#endif // USE_LEDS
-    InitializeConfiguration();
-    ThisThread::sleep_for(125); // [since mbed-os-5.10] vs Thread::wait(125);
-}
-
-//--------------------------------------------------
-// Support commands that get handled immediately w/o waiting for EOL
-// handled as immediate command, do not append to buffer
-void on_immediate_0x7b() // Unicode (U+007B) { LEFT CURLY BRACKET
-{
-#if HAS_BUTTON2_DEMO_INTERRUPT
-    onButton2FallingEdge();
-#endif
-}
-
-//--------------------------------------------------
-// Support commands that get handled immediately w/o waiting for EOL
-// handled as immediate command, do not append to buffer
-void on_immediate_0x7d() // Unicode (U+007D) } RIGHT CURLY BRACKET
-{
-#if HAS_BUTTON1_DEMO_INTERRUPT
-    onButton1FallingEdge();
-#endif
-}
-
-//----------------------------------------
-// example code main function
-int main()
-{
-    // Configure serial ports
-    cmdLine_serial.clear();
-    //~ cmdLine_serial.serial().printf("\r\n cmdLine_serial.serial().printf test\r\n");
-    cmdLine_serial.onEOLcommandParser = main_menu_onEOLcommandParser;
-    cmdLine_serial.diagnostic_led_EOF = diagnostic_led_EOF;
-    /// CmdLine::set_immediate_handler(char, functionPointer_void_void_on_immediate_0x21);
-    cmdLine_serial.on_immediate_0x21 = on_immediate_0x21;
-    cmdLine_serial.on_immediate_0x7b = on_immediate_0x7b;
-    cmdLine_serial.on_immediate_0x7d = on_immediate_0x7d;
-# if HAS_DAPLINK_SERIAL
-    cmdLine_DAPLINKserial.clear();
-    //~ cmdLine_DAPLINKserial.serial().printf("\r\n cmdLine_DAPLINKserial.serial().printf test\r\n");
-    cmdLine_DAPLINKserial.onEOLcommandParser = main_menu_onEOLcommandParser;
-    /// @todo CmdLine::set_immediate_handler(char, functionPointer_void_void_on_immediate_0x21);
-    cmdLine_DAPLINKserial.on_immediate_0x21 = on_immediate_0x21;
-    cmdLine_DAPLINKserial.on_immediate_0x7b = on_immediate_0x7b;
-    cmdLine_DAPLINKserial.on_immediate_0x7d = on_immediate_0x7d;
-# endif
-
-
-    //print_banner();
-
-
-
-#if USE_LEDS
-#if defined(TARGET_MAX32630)
-    led1 = LED_ON; led2 = LED_OFF; led3 = LED_OFF;     // diagnostic rbg led RED
-    ThisThread::sleep_for(125); // [since mbed-os-5.10] vs Thread::wait(125);
-    led1 = LED_OFF; led2 = LED_ON; led3 = LED_OFF;     // diagnostic rbg led GREEN
-    ThisThread::sleep_for(125); // [since mbed-os-5.10] vs Thread::wait(125);
-    led1 = LED_OFF; led2 = LED_OFF; led3 = LED_ON;     // diagnostic rbg led BLUE
-    ThisThread::sleep_for(125); // [since mbed-os-5.10] vs Thread::wait(125);
-    led1 = LED_ON; led2 = LED_ON; led3 = LED_ON;     // diagnostic rbg led RED+GREEN+BLUE=WHITE
-    ThisThread::sleep_for(125); // [since mbed-os-5.10] vs Thread::wait(125);
-    led1 = LED_OFF; led2 = LED_ON; led3 = LED_ON;     // diagnostic rbg led GREEN+BLUE=CYAN
-    ThisThread::sleep_for(125); // [since mbed-os-5.10] vs Thread::wait(125);
-    led1 = LED_ON; led2 = LED_OFF; led3 = LED_ON;     // diagnostic rbg led RED+BLUE=MAGENTA
-    ThisThread::sleep_for(125); // [since mbed-os-5.10] vs Thread::wait(125);
-    led1 = LED_ON; led2 = LED_ON; led3 = LED_OFF;     // diagnostic rbg led RED+GREEN=YELLOW
-    ThisThread::sleep_for(125); // [since mbed-os-5.10] vs Thread::wait(125);
-    led1 = LED_OFF; led2 = LED_OFF; led3 = LED_OFF;     // diagnostic rbg led BLACK
-    ThisThread::sleep_for(125); // [since mbed-os-5.10] vs Thread::wait(125);
-#elif defined(TARGET_MAX32625MBED)
-    led1 = LED_ON; led2 = LED_OFF; led3 = LED_OFF;     // diagnostic rbg led RED
-    ThisThread::sleep_for(125); // [since mbed-os-5.10] vs Thread::wait(125);
-    led1 = LED_OFF; led2 = LED_ON; led3 = LED_OFF;     // diagnostic rbg led GREEN
-    ThisThread::sleep_for(125); // [since mbed-os-5.10] vs Thread::wait(125);
-    led1 = LED_OFF; led2 = LED_OFF; led3 = LED_ON;     // diagnostic rbg led BLUE
-    ThisThread::sleep_for(125); // [since mbed-os-5.10] vs Thread::wait(125);
-    led1 = LED_ON; led2 = LED_ON; led3 = LED_ON;     // diagnostic rbg led RED+GREEN+BLUE=WHITE
-    ThisThread::sleep_for(125); // [since mbed-os-5.10] vs Thread::wait(125);
-    led1 = LED_OFF; led2 = LED_ON; led3 = LED_ON;     // diagnostic rbg led GREEN+BLUE=CYAN
-    ThisThread::sleep_for(125); // [since mbed-os-5.10] vs Thread::wait(125);
-    led1 = LED_ON; led2 = LED_OFF; led3 = LED_ON;     // diagnostic rbg led RED+BLUE=MAGENTA
-    ThisThread::sleep_for(125); // [since mbed-os-5.10] vs Thread::wait(125);
-    led1 = LED_ON; led2 = LED_ON; led3 = LED_OFF;     // diagnostic rbg led RED+GREEN=YELLOW
-    ThisThread::sleep_for(125); // [since mbed-os-5.10] vs Thread::wait(125);
-    led1 = LED_OFF; led2 = LED_OFF; led3 = LED_OFF;     // diagnostic rbg led BLACK
-    ThisThread::sleep_for(125); // [since mbed-os-5.10] vs Thread::wait(125);
-#else // not defined(TARGET_LPC1768 etc.)
-    led1 = LED_ON;
-    led2 = LED_OFF;
-    led3 = LED_OFF;
-    led4 = LED_OFF;
-    ThisThread::sleep_for(75); // [since mbed-os-5.10] vs Thread::wait(75);
-    //led1 = LED_ON;
-    led2 = LED_ON;
-    ThisThread::sleep_for(75); // [since mbed-os-5.10] vs Thread::wait(75);
-    led1 = LED_OFF;
-    //led2 = LED_ON;
-    led3 = LED_ON;
-    ThisThread::sleep_for(75); // [since mbed-os-5.10] vs Thread::wait(75);
-    led2 = LED_OFF;
-    //led3 = LED_ON;
-    led4 = LED_ON;
-    ThisThread::sleep_for(75); // [since mbed-os-5.10] vs Thread::wait(75);
-    led3 = LED_OFF;
-    led4 = LED_ON;
-    //
-#endif // target definition
-#endif
-
-    // cmd_TE();
-
-// #if USE_LEDS
-//     rgb_led.white();     // diagnostic rbg led RED+GREEN+BLUE=WHITE
-// #endif // USE_LEDS
-    led1 = LED_ON;
-    led2 = LED_ON;
-    led3 = LED_ON;
-
-    InitializeConfiguration();
-    // CODE GENERATOR: example code: member function Init
-    g_MAX11043_device.Init();
-
-        // example code: serial port banner message
-    #if defined(TARGET_MAX32625MBED)
-        serial.printf("MAX32625MBED ");
-    #elif defined(TARGET_MAX32600MBED)
-        serial.printf("MAX32600MBED ");
-    #elif defined(TARGET_NUCLEO_F446RE)
-        serial.printf("NUCLEO_F446RE ");
-    #endif
-        serial.printf("MAX11043BOB\r\n");
-
-
-    while (1) {
-#if HAS_BUTTON1_DEMO_INTERRUPT_POLLING
-        // avoid runtime error on button1 press [mbed-os-5.11]
-        // instead of using InterruptIn, use DigitalIn and poll in main while(1)
-# if HAS_BUTTON1_DEMO_INTERRUPT
-        static int button1_value_prev = 1;
-        static int button1_value_now = 1;
-        button1_value_prev = button1_value_now;
-        button1_value_now = button1.read();
-        if ((button1_value_prev - button1_value_now) == 1)
-        {
-            // on button1 falling edge (button1 press)
-            onButton1FallingEdge();
-        }
-# endif // HAS_BUTTON1_DEMO_INTERRUPT
-# if HAS_BUTTON2_DEMO_INTERRUPT
-        static int button2_value_prev = 1;
-        static int button2_value_now = 1;
-        button2_value_prev = button2_value_now;
-        button2_value_now = button2.read();
-        if ((button2_value_prev - button2_value_now) == 1)
-        {
-            // on button2 falling edge (button2 press)
-            onButton2FallingEdge();
-        }
-# endif // HAS_BUTTON2_DEMO_INTERRUPT
-#endif
-    # if HAS_DAPLINK_SERIAL
-        if (DAPLINKserial.readable()) {
-            cmdLine_DAPLINKserial.append(DAPLINKserial.getc());
-        }
-    # endif // HAS_DAPLINK_SERIAL
-        if (serial.readable()) {
-            int c = serial.getc();
-            cmdLine_serial.append(c);
-#if IGNORE_AT_COMMANDS
-# if HAS_DAPLINK_SERIAL
-            cmdLine_DAPLINKserial.serial().printf("%c", c);
-# endif // HAS_DAPLINK_SERIAL
-#endif // IGNORE_AT_COMMANDS
-            //
-        }
-    }     // while(1)
-}
-//---------- CODE GENERATOR: end testMainCppCodeList
+// /*******************************************************************************
+// * Copyright (C) 2020 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"),
+// * to deal in the Software without restriction, including without limitation
+// * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+// * and/or sell copies of the Software, and to permit persons to whom the
+// * Software is furnished to do so, subject to the following conditions:
+// *
+// * The above copyright notice and this permission notice shall be included
+// * in all copies or substantial portions of the Software.
+// *
+// * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+// * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+// * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
+// * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+// * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+// * OTHER DEALINGS IN THE SOFTWARE.
+// *
+// * Except as contained in this notice, the name of Maxim Integrated
+// * Products, Inc. shall not be used except as stated in the Maxim Integrated
+// * Products, Inc. Branding Policy.
+// *
+// * The mere transfer of this software does not imply any licenses
+// * of trade secrets, proprietary technology, copyrights, patents,
+// * trademarks, maskwork rights, or any other form of intellectual
+// * property whatsoever. Maxim Integrated Products, Inc. retains all
+// * ownership rights.
+// *******************************************************************************
+// */
+//---------- CODE GENERATOR: testMainCppCodeList
+// CODE GENERATOR: example code includes
+
+// 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
+//      - 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://os.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
+//      - remove max32630fthr library (if present)
+//      - remove MAX32620FTHR library (if present)
+//      - not tested yet
+//
+// end Platform_Include_Boilerplate
+#include "MAX11043.h"
+#include "CmdLine.h"
+#include "MaximTinyTester.h"
+
+// optional: serial port
+// note: some platforms such as Nucleo-F446RE do not support the USBSerial library.
+// In those cases, remove the USBDevice lib from the project and rebuild.
+#if defined(TARGET_MAX32625MBED)
+#include "USBSerial.h"
+USBSerial serial; // virtual serial port over USB (DEV connector)
+#elif defined(TARGET_MAX32630MBED)
+#include "USBSerial.h"
+USBSerial serial; // virtual serial port over USB (DEV connector)
+#else
+//#include "USBSerial.h"
+Serial serial(USBTX, USBRX); // tx, rx
+#endif
+
+void on_immediate_0x21(); // Unicode (U+0021) ! EXCLAMATION MARK
+void on_immediate_0x7b(); // Unicode (U+007B) { LEFT CURLY BRACKET
+void on_immediate_0x7d(); // Unicode (U+007D) } RIGHT CURLY BRACKET
+
+#include "CmdLine.h"
+
+# if HAS_DAPLINK_SERIAL
+CmdLine cmdLine_DAPLINKserial(DAPLINKserial, "DAPLINK");
+# endif // HAS_DAPLINK_SERIAL
+CmdLine cmdLine_serial(serial, "serial");
+
+
+//--------------------------------------------------
+
+
+#if defined(TARGET)
+// TARGET_NAME macros from targets/TARGET_Maxim/TARGET_MAX32625/device/mxc_device.h
+// Create a string definition for the TARGET
+#define STRING_ARG(arg) #arg
+#define STRING_NAME(name) STRING_ARG(name)
+#define TARGET_NAME STRING_NAME(TARGET)
+#elif defined(TARGET_MAX32600)
+#define TARGET_NAME "MAX32600"
+#elif defined(TARGET_LPC1768)
+#define TARGET_NAME "LPC1768"
+#elif defined(TARGET_NUCLEO_F446RE)
+#define TARGET_NAME "NUCLEO_F446RE"
+#elif defined(TARGET_NUCLEO_F401RE)
+#define TARGET_NAME "NUCLEO_F401RE"
+#else
+#error TARGET NOT DEFINED
+#endif
+#if defined(TARGET_MAX32630)
+//--------------------------------------------------
+// TARGET=MAX32630FTHR ARM Cortex-M4F 96MHz 2048kB Flash 512kB SRAM
+//             +-------------[microUSB]-------------+
+//             | J1         MAX32630FTHR        J2  |
+//      ______ | [ ] RST                    GND [ ] |
+//      ______ | [ ] 3V3                    BAT+[ ] |
+//      ______ | [ ] 1V8                  reset SW1 |
+//      ______ | [ ] GND       J4               J3  |
+// analogIn0/4 | [a] AIN_0 1.2Vfs     (bat) SYS [ ] | switched BAT+
+// analogIn1/5 | [a] AIN_1 1.2Vfs           PWR [ ] | external pwr btn
+// analogIn2   | [a] AIN_2 1.2Vfs      +5V VBUS [ ] | USB +5V power
+// analogIn3   | [a] AIN_3 1.2Vfs   1-WIRE P4_0 [d] | D0 dig9
+//  (I2C2.SDA) | [d] P5_7  SDA2        SRN P5_6 [d] | D1 dig8
+//  (I2C2.SCL) | [d] P6_0  SCL2      SDIO3 P5_5 [d] | D2 dig7
+//    D13/SCLK | [s] P5_0  SCLK      SDIO2 P5_4 [d] | D3 dig6
+//    D11/MOSI | [s] P5_1  MOSI       SSEL P5_3 [d] | D4 dig5
+//    D12/MISO | [s] P5_2  MISO        RTS P3_3 [d] | D5 dig4
+//    D10/CS   | [s] P3_0  RX          CTS P3_2 [d] | D6 dig3
+//    D9  dig0 | [d] P3_1  TX          SCL P3_5 [d] | D7 dig2
+//      ______ | [ ] GND               SDA P3_4 [d] | D8 dig1
+//             |                                    |
+//             | XIP Flash      MAX14690N           |
+//             | XIP_SCLK P1_0  SDA2 P5_7           |
+//             | XIP_MOSI P1_1  SCL2 P6_0           |
+//             | XIP_MISO P1_2  PMIC_INIT P3_7      |
+//             | XIP_SSEL P1_3  MPC P2_7            |
+//             | XIP_DIO2 P1_4  MON AIN_0           |
+//             | XIP_DIO3 P1_5                      |
+//             |                                    |
+//             | PAN1326B     MicroSD        LED    |
+//             | BT_RX  P0_0  SD_SCLK P0_4   r P2_4 |
+//             | BT_TX  P0_1  SD_MOSI P0_5   g P2_5 |
+//             | BT_CTS P0_2  SD_MISO P0_6   b P2_6 |
+//             | BT_RTS P0_3  SD_SSEL P0_7          |
+//             | BT_RST P1_6  DETECT  P2_2          |
+//             | BT_CLK P1_7               SW2 P2_3 |
+//             +------------------------------------+
+// MAX32630FTHR board has MAX14690 PMIC on I2C bus (P5_7 SDA, P6_0 SCL) at slave address 0101_000r 0x50 (or 0x28 for 7 MSbit address).
+// MAX32630FTHR board has BMI160 accelerometer on I2C bus (P5_7 SDA, P6_0 SCL) at slave address 1101_000r 0xD0 (or 0x68 for 7 MSbit address).
+// AIN_0 = AIN0 pin       fullscale is 1.2V
+// AIN_1 = AIN1 pin       fullscale is 1.2V
+// AIN_2 = AIN2 pin       fullscale is 1.2V
+// AIN_3 = AIN3 pin       fullscale is 1.2V
+// AIN_4 = AIN0 / 5.0     fullscale is 6.0V
+// AIN_5 = AIN1 / 5.0     fullscale is 6.0V
+// AIN_6 = VDDB / 4.0     fullscale is 4.8V
+// AIN_7 = VDD18          fullscale is 1.2V
+// AIN_8 = VDD12          fullscale is 1.2V
+// AIN_9 = VRTC / 2.0     fullscale is 2.4V
+// AIN_10 = x undefined?
+// AIN_11 = VDDIO / 4.0   fullscale is 4.8V
+// AIN_12 = VDDIOH / 4.0  fullscale is 4.8V
+//
+    #include "max32630fthr.h"
+MAX32630FTHR pegasus(MAX32630FTHR::VIO_3V3);
+#define analogIn4_IS_HIGH_RANGE_OF_analogIn0 1
+// MAX32630FTHR board supports only internal VREF = 1.200V at bypass capacitor C15
+const float ADC_FULL_SCALE_VOLTAGE = 1.200;
+// Arduino connector
+#ifndef A0
+#define A0 AIN_0
+#endif
+#ifndef A1
+#define A1 AIN_1
+#endif
+#ifndef A2
+#define A2 AIN_2
+#endif
+#ifndef A3
+#define A3 AIN_3
+#endif
+#ifndef D0
+#define D0 P4_0
+#endif
+#ifndef D1
+#define D1 P5_6
+#endif
+#ifndef D2
+#define D2 P5_5
+#endif
+#ifndef D3
+#define D3 P5_4
+#endif
+#ifndef D4
+#define D4 P5_3
+#endif
+#ifndef D5
+#define D5 P3_3
+#endif
+#ifndef D6
+#define D6 P3_2
+#endif
+#ifndef D7
+#define D7 P3_5
+#endif
+#ifndef D8
+#define D8 P3_4
+#endif
+#ifndef D9
+#define D9 P3_1
+#endif
+#ifndef D10
+#define D10 P3_0
+#endif
+#ifndef D11
+#define D11 P5_1
+#endif
+#ifndef D12
+#define D12 P5_2
+#endif
+#ifndef D13
+#define D13 P5_0
+#endif
+//--------------------------------------------------
+#elif defined(TARGET_MAX32625MBED)
+//--------------------------------------------------
+// TARGET=MAX32625MBED ARM Cortex-M4F 96MHz 512kB Flash 160kB SRAM
+//             +-------------------------------------+
+//             |   MAX32625MBED Arduino UNO header   |
+//             |                                     |
+//             |                           A5/SCL[ ] |   P1_7 dig15
+//             |                           A4/SDA[ ] |   P1_6 dig14
+//             |                         AREF=N/C[ ] |
+//             |                              GND[ ] |
+//             | [ ]N/C                    SCK/13[ ] |   P1_0 dig13
+//             | [ ]IOREF=3V3             MISO/12[ ] |   P1_2 dig12
+//             | [ ]RST                   MOSI/11[ ]~|   P1_1 dig11
+//             | [ ]3V3                     CS/10[ ]~|   P1_3 dig10
+//             | [ ]5V0                         9[ ]~|   P1_5 dig9
+//             | [ ]GND                         8[ ] |   P1_4 dig8
+//             | [ ]GND                              |
+//             | [ ]Vin                         7[ ] |   P0_7 dig7
+//             |                                6[ ]~|   P0_6 dig6
+//       AIN_0 | [ ]A0                          5[ ]~|   P0_5 dig5
+//       AIN_1 | [ ]A1                          4[ ] |   P0_4 dig4
+//       AIN_2 | [ ]A2                     INT1/3[ ]~|   P0_3 dig3
+//       AIN_3 | [ ]A3                     INT0/2[ ] |   P0_2 dig2
+// dig16  P3_4 | [ ]A4/SDA  RST SCK MISO     TX>1[ ] |   P0_1 dig1
+// dig17  P3_5 | [ ]A5/SCL  [ ] [ ] [ ]      RX<0[ ] |   P0_0 dig0
+//             |            [ ] [ ] [ ]              |
+//             |  UNO_R3    GND MOSI 5V  ____________/
+//              \_______________________/
+//
+//             +------------------------+
+//             |                        |
+//             |  MicroSD        LED    |
+//             |  SD_SCLK P2_4   r P3_0 |
+//             |  SD_MOSI P2_5   g P3_1 |
+//             |  SD_MISO P2_6   b P3_2 |
+//             |  SD_SSEL P2_7   y P3_3 |
+//             |                        |
+//             |  DAPLINK      BUTTONS  |
+//             |  TX P2_1      SW3 P2_3 |
+//             |  RX P2_0      SW2 P2_2 |
+//             +------------------------+
+//
+// AIN_0 = AIN0 pin       fullscale is 1.2V
+// AIN_1 = AIN1 pin       fullscale is 1.2V
+// AIN_2 = AIN2 pin       fullscale is 1.2V
+// AIN_3 = AIN3 pin       fullscale is 1.2V
+// AIN_4 = AIN0 / 5.0     fullscale is 6.0V
+// AIN_5 = AIN1 / 5.0     fullscale is 6.0V
+// AIN_6 = VDDB / 4.0     fullscale is 4.8V
+// AIN_7 = VDD18          fullscale is 1.2V
+// AIN_8 = VDD12          fullscale is 1.2V
+// AIN_9 = VRTC / 2.0     fullscale is 2.4V
+// AIN_10 = x undefined?
+// AIN_11 = VDDIO / 4.0   fullscale is 4.8V
+// AIN_12 = VDDIOH / 4.0  fullscale is 4.8V
+//
+//#include "max32625mbed.h" // ?
+//MAX32625MBED mbed(MAX32625MBED::VIO_3V3); // ?
+#define analogIn4_IS_HIGH_RANGE_OF_analogIn0 1
+// MAX32630FTHR board supports only internal VREF = 1.200V at bypass capacitor C15
+const float ADC_FULL_SCALE_VOLTAGE = 1.200;     // TODO: ADC_FULL_SCALE_VOLTAGE Pico?
+// Arduino connector
+#ifndef A0
+#define A0 AIN_0
+#endif
+#ifndef A1
+#define A1 AIN_1
+#endif
+#ifndef A2
+#define A2 AIN_2
+#endif
+#ifndef A3
+#define A3 AIN_3
+#endif
+#ifndef D0
+#define D0 P0_0
+#endif
+#ifndef D1
+#define D1 P0_1
+#endif
+#ifndef D2
+#define D2 P0_2
+#endif
+#ifndef D3
+#define D3 P0_3
+#endif
+#ifndef D4
+#define D4 P0_4
+#endif
+#ifndef D5
+#define D5 P0_5
+#endif
+#ifndef D6
+#define D6 P0_6
+#endif
+#ifndef D7
+#define D7 P0_7
+#endif
+#ifndef D8
+#define D8 P1_4
+#endif
+#ifndef D9
+#define D9 P1_5
+#endif
+#ifndef D10
+#define D10 P1_3
+#endif
+#ifndef D11
+#define D11 P1_1
+#endif
+#ifndef D12
+#define D12 P1_2
+#endif
+#ifndef D13
+#define D13 P1_0
+#endif
+//--------------------------------------------------
+#elif defined(TARGET_MAX32600)
+// target MAX32600
+//
+#define analogIn4_IS_HIGH_RANGE_OF_analogIn0 0
+const float ADC_FULL_SCALE_VOLTAGE = 1.500;
+//
+//--------------------------------------------------
+#elif defined(TARGET_MAX32620FTHR)
+#warning "TARGET_MAX32620FTHR not previously tested; need to define pins..."
+#include "MAX32620FTHR.h"
+// Initialize I/O voltages on MAX32620FTHR board
+MAX32620FTHR fthr(MAX32620FTHR::VIO_3V3);
+//#define USE_LEDS 0 ?
+#define analogIn4_IS_HIGH_RANGE_OF_analogIn0 1
+#warning "TARGET_MAX32620FTHR not previously tested; need to verify ADC_FULL_SCALE_VOLTAGE..."
+const float ADC_FULL_SCALE_VOLTAGE = 1.200;
+//
+//--------------------------------------------------
+#elif defined(TARGET_MAX32625PICO)
+#warning "TARGET_MAX32625PICO not previously tested; need to define pins..."
+//#define USE_LEDS 0 ?
+#define analogIn4_IS_HIGH_RANGE_OF_analogIn0 1
+#warning "TARGET_MAX32625PICO not previously tested; need to verify ADC_FULL_SCALE_VOLTAGE..."
+const float ADC_FULL_SCALE_VOLTAGE = 1.200;
+//
+//--------------------------------------------------
+#elif defined(TARGET_NUCLEO_F446RE) || defined(TARGET_NUCLEO_F401RE)
+// TODO1: target NUCLEO_F446RE
+//
+// USER_BUTTON PC13
+// LED1 is shared with SPI_SCK on NUCLEO_F446RE PA_5, so don't use LED1.
+#define USE_LEDS 0
+// SPI spi(SPI_MOSI, SPI_MISO, SPI_SCK);
+// Serial serial(SERIAL_TX, SERIAL_RX);
+#define analogIn4_IS_HIGH_RANGE_OF_analogIn0 0
+const float ADC_FULL_SCALE_VOLTAGE = 3.300;     // TODO: ADC_FULL_SCALE_VOLTAGE Pico?
+//
+//--------------------------------------------------
+#elif defined(TARGET_LPC1768)
+//--------------------------------------------------
+// TARGET=LPC1768 ARM Cortex-M3 100 MHz 512kB flash 64kB SRAM
+//               +-------------[microUSB]-------------+
+//        ______ | [ ] GND             +3.3V VOUT [ ] | ______
+//        ______ | [ ] 4.5V<VIN<9.0V   +5.0V VU   [ ] | ______
+//        ______ | [ ] VB                 USB.IF- [ ] | ______
+//        ______ | [ ] nR                 USB.IF+ [ ] | ______
+// digitalInOut0 | [ ] p5 MOSI       ETHERNET.RD- [ ] | ______
+// digitalInOut1 | [ ] p6 MISO       ETHERNET.RD+ [ ] | ______
+// digitalInOut2 | [ ] p7 SCLK       ETHERNET.TD- [ ] | ______
+// digitalInOut3 | [ ] p8            ETHERNET.TD+ [ ] | ______
+// digitalInOut4 | [ ] p9  TX SDA          USB.D- [ ] | ______
+// digitalInOut5 | [ ] p10 RX SCL          USB.D+ [ ] | ______
+// digitalInOut6 | [ ] p11    MOSI     CAN-RD p30 [ ] | digitalInOut13
+// digitalInOut7 | [ ] p12    MISO     CAN-TD p29 [ ] | digitalInOut12
+// digitalInOut8 | [ ] p13 TX SCLK     SDA TX p28 [ ] | digitalInOut11
+// digitalInOut9 | [ ] p14 RX          SCL RX p27 [ ] | digitalInOut10
+//     analogIn0 | [ ] p15 AIN0 3.3Vfs   PWM1 p26 [ ] | pwmDriver1
+//     analogIn1 | [ ] p16 AIN1 3.3Vfs   PWM2 p25 [ ] | pwmDriver2
+//     analogIn2 | [ ] p17 AIN2 3.3Vfs   PWM3 p24 [ ] | pwmDriver3
+//     analogIn3 | [ ] p18 AIN3 AOUT     PWM4 p23 [ ] | pwmDriver4
+//     analogIn4 | [ ] p19 AIN4 3.3Vfs   PWM5 p22 [ ] | pwmDriver5
+//     analogIn5 | [ ] p20 AIN5 3.3Vfs   PWM6 p21 [ ] | pwmDriver6
+//               +------------------------------------+
+// AIN6 = P0.3 = TGT_SBL_RXD?
+// AIN7 = P0.2 = TGT_SBL_TXD?
+//
+//--------------------------------------------------
+// LPC1768 board uses VREF = 3.300V +A3,3V thru L1 to bypass capacitor C14
+#define analogIn4_IS_HIGH_RANGE_OF_analogIn0 0
+const float ADC_FULL_SCALE_VOLTAGE = 3.300;
+#else // not defined(TARGET_LPC1768 etc.)
+//--------------------------------------------------
+// unknown target
+//--------------------------------------------------
+#endif // target definition
+
+
+//--------------------------------------------------
+// Option to dedicate SPI port pins
+//
+//    SPI2_MOSI  = P5_1
+//    SPI2_MISO  = P5_2
+//    SPI2_SCK   = P5_0
+//    On this board I'm using P3_0 as spi_cs
+//    SPI2_SS    = P5_3
+//    SPI2_SDIO2 = P5_4
+//    SPI2_SDIO3 = P5_5
+//    SPI2_SRN   = P5_6
+//
+#ifndef HAS_SPI
+#define HAS_SPI 1
+#endif
+#if HAS_SPI
+#define SPI_MODE0 0
+#define SPI_MODE1 1
+#define SPI_MODE2 2
+#define SPI_MODE3 3
+//
+#if defined(TARGET_MAX32630)
+  // Before setting global variables g_SPI_SCLK_Hz and g_SPI_dataMode,
+  // workaround for TARGET_MAX32630 SPI_MODE2 SPI_MODE3 problem (issue #30)
+#warning "MAX32630 SPI workaround..."
+  // replace SPI_MODE2 (CPOL=1,CPHA=0) with SPI_MODE1 (CPOL=0,CPHA=1) Falling Edge stable
+  // replace SPI_MODE3 (CPOL=1,CPHA=1) with SPI_MODE0 (CPOL=0,CPHA=0) Rising Edge stable
+# if ((SPI_dataMode) == (SPI_MODE2))
+#warning "MAX32630 SPI_MODE2 workaround, changing SPI_dataMode to SPI_MODE1..."
+  // SPI_dataMode SPI_MODE2 // CPOL=1,CPHA=0: Falling Edge stable; SCLK idle High
+#  undef SPI_dataMode
+#  define SPI_dataMode SPI_MODE1 // CPOL=0,CPHA=1: Falling Edge stable; SCLK idle Low
+# elif ((SPI_dataMode) == (SPI_MODE3))
+#warning "MAX32630 SPI_MODE3 workaround, changing SPI_dataMode to SPI_MODE0..."
+  // SPI_dataMode SPI_MODE3 // CPOL=1,CPHA=1: Rising Edge stable; SCLK idle High
+#  undef SPI_dataMode
+#  define SPI_dataMode SPI_MODE0 // CPOL=0,CPHA=0: Rising Edge stable; SCLK idle Low
+# endif // workaround for TARGET_MAX32630 SPI_MODE2 SPI_MODE3 problem
+  // workaround for TARGET_MAX32630 SPI_MODE2 SPI_MODE3 problem (issue #30)
+  // limit SPI SCLK speed to 6MHz or less
+# if ((SPI_SCLK_Hz) > (6000000))
+#warning "MAX32630 SPI speed workaround, changing SPI_SCLK_Hz to 6000000 or 6MHz..."
+#  undef SPI_SCLK_Hz
+#  define SPI_SCLK_Hz 6000000 // 6MHz
+# endif
+#endif
+//
+uint32_t g_SPI_SCLK_Hz = 6000000; // TODO: missing definition of SPI_SCLK_Hz;
+// TODO1: validate g_SPI_SCLK_Hz against system clock frequency SystemCoreClock F_CPU
+#if defined(TARGET_NUCLEO_F446RE) || defined(TARGET_NUCLEO_F401RE)
+// Nucleo SPI frequency isn't working quite as expected...
+// Looks like STMF4 has an spi clock prescaler (2,4,8,16,32,64,128,256)
+// so 180MHz->[90.0, 45.0, 22.5, 11.25, 5.625, 2.8125, 1.40625, 0.703125]
+// %SC SCLK=1MHz sets spi frequency 703.125kHz
+// %SC SCLK=2MHz sets spi frequency 1.40625MHz
+// %SC SCLK=3MHz sets spi frequency 2.8125MHz
+// %SC SCLK=6MHz sets spi frequency 5.625MHz
+// %SC SCLK=12MHz sets spi frequency 11.25MHz
+// %SC SCLK=23MHz sets spi frequency 22.5MHz
+// %SC SCLK=45MHz sets spi frequency 45.0MHz
+// Don't know why I can't reach spi frequency 90.0MHz, but ok whatever.
+const uint32_t limit_min_SPI_SCLK_divisor = 2;
+const uint32_t limit_max_SPI_SCLK_divisor = 256;
+// not really a divisor, just a powers-of-two prescaler with no intermediate divisors.
+#else
+const uint32_t limit_min_SPI_SCLK_divisor = 2;
+const uint32_t limit_max_SPI_SCLK_divisor = 8191;
+#endif
+const uint32_t limit_max_SPI_SCLK_Hz = (SystemCoreClock / limit_min_SPI_SCLK_divisor); // F_CPU / 2; // 8MHz / 2 = 4MHz
+const uint32_t limit_min_SPI_SCLK_Hz = (SystemCoreClock / limit_max_SPI_SCLK_divisor); // F_CPU / 128; // 8MHz / 128 = 62.5kHz
+//
+uint8_t g_SPI_dataMode = SPI_MODE0; // TODO: missing definition SPI_dataMode;
+uint8_t g_SPI_cs_state = 1;
+//
+#endif
+
+
+
+// uncrustify-0.66.1 *INDENT-OFF*
+//--------------------------------------------------
+// Declare the AnalogIn driver
+// Optional analogIn support. If there is only one it should be analogIn1.
+// A) analog input
+#if defined(TARGET_MAX32630)
+    #define HAS_analogIn0 1
+    #define HAS_analogIn1 1
+    #define HAS_analogIn2 1
+    #define HAS_analogIn3 1
+    #define HAS_analogIn4 1
+    #define HAS_analogIn5 1
+    #define HAS_analogIn6 1
+    #define HAS_analogIn7 1
+    #define HAS_analogIn8 1
+    #define HAS_analogIn9 1
+//    #define HAS_analogIn10 0
+//    #define HAS_analogIn11 0
+//    #define HAS_analogIn12 0
+//    #define HAS_analogIn13 0
+//    #define HAS_analogIn14 0
+//    #define HAS_analogIn15 0
+#if HAS_analogIn0
+    AnalogIn analogIn0(AIN_0); // TARGET_MAX32630 J1.5 AIN_0 = AIN0 pin       fullscale is 1.2V
+#endif
+#if HAS_analogIn1
+    AnalogIn analogIn1(AIN_1); // TARGET_MAX32630 J1.6 AIN_1 = AIN1 pin       fullscale is 1.2V
+#endif
+#if HAS_analogIn2
+    AnalogIn analogIn2(AIN_2); // TARGET_MAX32630 J1.7 AIN_2 = AIN2 pin       fullscale is 1.2V
+#endif
+#if HAS_analogIn3
+    AnalogIn analogIn3(AIN_3); // TARGET_MAX32630 J1.8 AIN_3 = AIN3 pin       fullscale is 1.2V
+#endif
+#if HAS_analogIn4
+    AnalogIn analogIn4(AIN_4); // TARGET_MAX32630 J1.5 AIN_4 = AIN0 / 5.0     fullscale is 6.0V
+#endif
+#if HAS_analogIn5
+    AnalogIn analogIn5(AIN_5); // TARGET_MAX32630 J1.6 AIN_5 = AIN1 / 5.0     fullscale is 6.0V
+#endif
+#if HAS_analogIn6
+    AnalogIn analogIn6(AIN_6); // TARGET_MAX32630 AIN_6 = VDDB / 4.0     fullscale is 4.8V
+#endif
+#if HAS_analogIn7
+    AnalogIn analogIn7(AIN_7); // TARGET_MAX32630 AIN_7 = VDD18          fullscale is 1.2V
+#endif
+#if HAS_analogIn8
+    AnalogIn analogIn8(AIN_8); // TARGET_MAX32630 AIN_8 = VDD12          fullscale is 1.2V
+#endif
+#if HAS_analogIn9
+    AnalogIn analogIn9(AIN_9); // TARGET_MAX32630 AIN_9 = VRTC / 2.0     fullscale is 2.4V
+#endif
+#if HAS_analogIn10
+    AnalogIn analogIn10(____); // TARGET_MAX32630 AIN_10 = x undefined?
+#endif
+#if HAS_analogIn11
+    AnalogIn analogIn11(____); // TARGET_MAX32630 AIN_11 = VDDIO / 4.0   fullscale is 4.8V
+#endif
+#if HAS_analogIn12
+    AnalogIn analogIn12(____); // TARGET_MAX32630 AIN_12 = VDDIOH / 4.0  fullscale is 4.8V
+#endif
+#if HAS_analogIn13
+    AnalogIn analogIn13(____);
+#endif
+#if HAS_analogIn14
+    AnalogIn analogIn14(____);
+#endif
+#if HAS_analogIn15
+    AnalogIn analogIn15(____);
+#endif
+//--------------------------------------------------
+#elif defined(TARGET_MAX32625MBED)
+    #define HAS_analogIn0 1
+    #define HAS_analogIn1 1
+    #define HAS_analogIn2 1
+    #define HAS_analogIn3 1
+    #define HAS_analogIn4 1
+    #define HAS_analogIn5 1
+#if HAS_analogIn0
+    AnalogIn analogIn0(AIN_0); // TARGET_MAX32630 J1.5 AIN_0 = AIN0 pin       fullscale is 1.2V
+#endif
+#if HAS_analogIn1
+    AnalogIn analogIn1(AIN_1); // TARGET_MAX32630 J1.6 AIN_1 = AIN1 pin       fullscale is 1.2V
+#endif
+#if HAS_analogIn2
+    AnalogIn analogIn2(AIN_2); // TARGET_MAX32630 J1.7 AIN_2 = AIN2 pin       fullscale is 1.2V
+#endif
+#if HAS_analogIn3
+    AnalogIn analogIn3(AIN_3); // TARGET_MAX32630 J1.8 AIN_3 = AIN3 pin       fullscale is 1.2V
+#endif
+#if HAS_analogIn4
+    AnalogIn analogIn4(AIN_4); // TARGET_MAX32630 J1.5 AIN_4 = AIN0 / 5.0     fullscale is 6.0V
+#endif
+#if HAS_analogIn5
+    AnalogIn analogIn5(AIN_5); // TARGET_MAX32630 J1.6 AIN_5 = AIN1 / 5.0     fullscale is 6.0V
+#endif
+//--------------------------------------------------
+#elif defined(TARGET_MAX32620FTHR)
+#warning "TARGET_MAX32620FTHR not previously tested; need to verify analogIn0..."
+    #define HAS_analogIn0 1
+    #define HAS_analogIn1 1
+    #define HAS_analogIn2 1
+    #define HAS_analogIn3 1
+    #define HAS_analogIn4 1
+    #define HAS_analogIn5 1
+    #define HAS_analogIn6 1
+    #define HAS_analogIn7 1
+    #define HAS_analogIn8 1
+    #define HAS_analogIn9 1
+//    #define HAS_analogIn10 0
+//    #define HAS_analogIn11 0
+//    #define HAS_analogIn12 0
+//    #define HAS_analogIn13 0
+//    #define HAS_analogIn14 0
+//    #define HAS_analogIn15 0
+#if HAS_analogIn0
+    AnalogIn analogIn0(AIN_0); // TARGET_MAX32620FTHR J1.5 AIN_0 = AIN0 pin       fullscale is 1.2V
+#endif
+#if HAS_analogIn1
+    AnalogIn analogIn1(AIN_1); // TARGET_MAX32620FTHR J1.6 AIN_1 = AIN1 pin       fullscale is 1.2V
+#endif
+#if HAS_analogIn2
+    AnalogIn analogIn2(AIN_2); // TARGET_MAX32620FTHR J1.7 AIN_2 = AIN2 pin       fullscale is 1.2V
+#endif
+#if HAS_analogIn3
+    AnalogIn analogIn3(AIN_3); // TARGET_MAX32620FTHR J1.8 AIN_3 = AIN3 pin       fullscale is 1.2V
+#endif
+#if HAS_analogIn4
+    AnalogIn analogIn4(AIN_4); // TARGET_MAX32620FTHR J1.5 AIN_4 = AIN0 / 5.0     fullscale is 6.0V
+#endif
+#if HAS_analogIn5
+    AnalogIn analogIn5(AIN_5); // TARGET_MAX32620FTHR J1.6 AIN_5 = AIN1 / 5.0     fullscale is 6.0V
+#endif
+#if HAS_analogIn6
+    AnalogIn analogIn6(AIN_6); // TARGET_MAX32620FTHR AIN_6 = VDDB / 4.0     fullscale is 4.8V
+#endif
+#if HAS_analogIn7
+    AnalogIn analogIn7(AIN_7); // TARGET_MAX32620FTHR AIN_7 = VDD18          fullscale is 1.2V
+#endif
+#if HAS_analogIn8
+    AnalogIn analogIn8(AIN_8); // TARGET_MAX32620FTHR AIN_8 = VDD12          fullscale is 1.2V
+#endif
+#if HAS_analogIn9
+    AnalogIn analogIn9(AIN_9); // TARGET_MAX32620FTHR AIN_9 = VRTC / 2.0     fullscale is 2.4V
+#endif
+#if HAS_analogIn10
+    AnalogIn analogIn10(____); // TARGET_MAX32620FTHR AIN_10 = x undefined?
+#endif
+#if HAS_analogIn11
+    AnalogIn analogIn11(____); // TARGET_MAX32620FTHR AIN_11 = VDDIO / 4.0   fullscale is 4.8V
+#endif
+#if HAS_analogIn12
+    AnalogIn analogIn12(____); // TARGET_MAX32620FTHR AIN_12 = VDDIOH / 4.0  fullscale is 4.8V
+#endif
+#if HAS_analogIn13
+    AnalogIn analogIn13(____);
+#endif
+#if HAS_analogIn14
+    AnalogIn analogIn14(____);
+#endif
+#if HAS_analogIn15
+    AnalogIn analogIn15(____);
+#endif
+//--------------------------------------------------
+#elif defined(TARGET_MAX32625PICO)
+#warning "TARGET_MAX32625PICO not previously tested; need to verify analogIn0..."
+    #define HAS_analogIn0 1
+    #define HAS_analogIn1 1
+    #define HAS_analogIn2 1
+    #define HAS_analogIn3 1
+    #define HAS_analogIn4 1
+    #define HAS_analogIn5 1
+#if HAS_analogIn0
+    AnalogIn analogIn0(AIN_0); // TARGET_MAX32630 J1.5 AIN_0 = AIN0 pin       fullscale is 1.2V
+#endif
+#if HAS_analogIn1
+    AnalogIn analogIn1(AIN_1); // TARGET_MAX32630 J1.6 AIN_1 = AIN1 pin       fullscale is 1.2V
+#endif
+#if HAS_analogIn2
+    AnalogIn analogIn2(AIN_2); // TARGET_MAX32630 J1.7 AIN_2 = AIN2 pin       fullscale is 1.2V
+#endif
+#if HAS_analogIn3
+    AnalogIn analogIn3(AIN_3); // TARGET_MAX32630 J1.8 AIN_3 = AIN3 pin       fullscale is 1.2V
+#endif
+#if HAS_analogIn4
+    AnalogIn analogIn4(AIN_4); // TARGET_MAX32630 J1.5 AIN_4 = AIN0 / 5.0     fullscale is 6.0V
+#endif
+#if HAS_analogIn5
+    AnalogIn analogIn5(AIN_5); // TARGET_MAX32630 J1.6 AIN_5 = AIN1 / 5.0     fullscale is 6.0V
+#endif
+//--------------------------------------------------
+#elif defined(TARGET_MAX32600)
+    #define HAS_analogIn0 1
+    #define HAS_analogIn1 1
+    #define HAS_analogIn2 1
+    #define HAS_analogIn3 1
+    #define HAS_analogIn4 1
+    #define HAS_analogIn5 1
+#if HAS_analogIn0
+    AnalogIn analogIn0(A0);
+#endif
+#if HAS_analogIn1
+    AnalogIn analogIn1(A1);
+#endif
+#if HAS_analogIn2
+    AnalogIn analogIn2(A2);
+#endif
+#if HAS_analogIn3
+    AnalogIn analogIn3(A3);
+#endif
+#if HAS_analogIn4
+    AnalogIn analogIn4(A4);
+#endif
+#if HAS_analogIn5
+    AnalogIn analogIn5(A5);
+#endif
+//--------------------------------------------------
+#elif defined(TARGET_NUCLEO_F446RE)
+    #define HAS_analogIn0 1
+    #define HAS_analogIn1 1
+    #define HAS_analogIn2 1
+    #define HAS_analogIn3 1
+    #define HAS_analogIn4 1
+    #define HAS_analogIn5 1
+#if HAS_analogIn0
+    AnalogIn analogIn0(A0);
+#endif
+#if HAS_analogIn1
+    AnalogIn analogIn1(A1);
+#endif
+#if HAS_analogIn2
+    AnalogIn analogIn2(A2);
+#endif
+#if HAS_analogIn3
+    AnalogIn analogIn3(A3);
+#endif
+#if HAS_analogIn4
+    AnalogIn analogIn4(A4);
+#endif
+#if HAS_analogIn5
+    AnalogIn analogIn5(A5);
+#endif
+//--------------------------------------------------
+#elif defined(TARGET_NUCLEO_F401RE)
+    #define HAS_analogIn0 1
+    #define HAS_analogIn1 1
+    #define HAS_analogIn2 1
+    #define HAS_analogIn3 1
+    #define HAS_analogIn4 1
+    #define HAS_analogIn5 1
+#if HAS_analogIn0
+    AnalogIn analogIn0(A0);
+#endif
+#if HAS_analogIn1
+    AnalogIn analogIn1(A1);
+#endif
+#if HAS_analogIn2
+    AnalogIn analogIn2(A2);
+#endif
+#if HAS_analogIn3
+    AnalogIn analogIn3(A3);
+#endif
+#if HAS_analogIn4
+    AnalogIn analogIn4(A4);
+#endif
+#if HAS_analogIn5
+    AnalogIn analogIn5(A5);
+#endif
+//--------------------------------------------------
+// TODO1: TARGET=MAX32625MBED ARM Cortex-M4F 96MHz 512kB Flash 160kB SRAM
+#elif defined(TARGET_LPC1768)
+    #define HAS_analogIn0 1
+    #define HAS_analogIn1 1
+    #define HAS_analogIn2 1
+    #define HAS_analogIn3 1
+    #define HAS_analogIn4 1
+    #define HAS_analogIn5 1
+//    #define HAS_analogIn6 1
+//    #define HAS_analogIn7 1
+//    #define HAS_analogIn8 1
+//    #define HAS_analogIn9 1
+//    #define HAS_analogIn10 1
+//    #define HAS_analogIn11 1
+//    #define HAS_analogIn12 1
+//    #define HAS_analogIn13 1
+//    #define HAS_analogIn14 1
+//    #define HAS_analogIn15 1
+#if HAS_analogIn0
+    AnalogIn analogIn0(p15); // TARGET_LPC1768 P0.23/AD0.0/I2SRX_CLK/CAP3.0
+#endif
+#if HAS_analogIn1
+    AnalogIn analogIn1(p16); // TARGET_LPC1768 P0.24/AD0.1/I2SRX_WS/CAP3.1
+#endif
+#if HAS_analogIn2
+    AnalogIn analogIn2(p17); // TARGET_LPC1768 P0.25/AD0.2/I2SRX_SDA/TXD3
+#endif
+#if HAS_analogIn3
+    AnalogIn analogIn3(p18); // TARGET_LPC1768 P0.26/AD0.3/AOUT/RXD3
+#endif
+#if HAS_analogIn4
+    AnalogIn analogIn4(p19); // TARGET_LPC1768 P1.30/VBUS/AD0.4
+#endif
+#if HAS_analogIn5
+    AnalogIn analogIn5(p20); // TARGET_LPC1768 P1.31/SCK1/AD0.5
+#endif
+#if HAS_analogIn6
+    AnalogIn analogIn6(____);
+#endif
+#if HAS_analogIn7
+    AnalogIn analogIn7(____);
+#endif
+#if HAS_analogIn8
+    AnalogIn analogIn8(____);
+#endif
+#if HAS_analogIn9
+    AnalogIn analogIn9(____);
+#endif
+#if HAS_analogIn10
+    AnalogIn analogIn10(____);
+#endif
+#if HAS_analogIn11
+    AnalogIn analogIn11(____);
+#endif
+#if HAS_analogIn12
+    AnalogIn analogIn12(____);
+#endif
+#if HAS_analogIn13
+    AnalogIn analogIn13(____);
+#endif
+#if HAS_analogIn14
+    AnalogIn analogIn14(____);
+#endif
+#if HAS_analogIn15
+    AnalogIn analogIn15(____);
+#endif
+#else
+    // unknown target
+#endif
+// uncrustify-0.66.1 *INDENT-ON*
+#if HAS_analogIn0 || HAS_analogIn1 \
+    || HAS_analogIn2 || HAS_analogIn3 \
+    || HAS_analogIn4 || HAS_analogIn5 \
+    || HAS_analogIn6 || HAS_analogIn7 \
+    || HAS_analogIn8 || HAS_analogIn9 \
+    || HAS_analogIn10 || HAS_analogIn11 \
+    || HAS_analogIn12 || HAS_analogIn13 \
+    || HAS_analogIn14 || HAS_analogIn15
+#define HAS_analogIns 1
+#endif
+
+
+
+// AnalogIn pin resource: search index
+#if HAS_analogIns
+AnalogIn& find_analogInPin(int cPinIndex)
+{
+    switch (cPinIndex)
+    {
+        default: // default to the first defined analogIn pin
+#if HAS_analogIn0
+        case '0': case 0x00: return analogIn0;
+#endif
+#if HAS_analogIn1
+        case '1': case 0x01: return analogIn1;
+#endif
+#if HAS_analogIn2
+        case '2': case 0x02: return analogIn2;
+#endif
+#if HAS_analogIn3
+        case '3': case 0x03: return analogIn3;
+#endif
+#if HAS_analogIn4
+        case '4': case 0x04: return analogIn4;
+#endif
+#if HAS_analogIn5
+        case '5': case 0x05: return analogIn5;
+#endif
+#if HAS_analogIn6
+        case '6': case 0x06: return analogIn6;
+#endif
+#if HAS_analogIn7
+        case '7': case 0x07: return analogIn7;
+#endif
+#if HAS_analogIn8
+        case '8': case 0x08: return analogIn8;
+#endif
+#if HAS_analogIn9
+        case '9': case 0x09: return analogIn9;
+#endif
+#if HAS_analogIn10
+        case 'a': case 0x0a: return analogIn10;
+#endif
+#if HAS_analogIn11
+        case 'b': case 0x0b: return analogIn11;
+#endif
+#if HAS_analogIn12
+        case 'c': case 0x0c: return analogIn12;
+#endif
+#if HAS_analogIn13
+        case 'd': case 0x0d: return analogIn13;
+#endif
+#if HAS_analogIn14
+        case 'e': case 0x0e: return analogIn14;
+#endif
+#if HAS_analogIn15
+        case 'f': case 0x0f: return analogIn15;
+#endif
+    }
+}
+#endif
+
+#if HAS_analogIns
+const float analogInPin_fullScaleVoltage[] = {
+# if defined(TARGET_MAX32630)
+    ADC_FULL_SCALE_VOLTAGE, // analogIn0
+    ADC_FULL_SCALE_VOLTAGE, // analogIn1
+    ADC_FULL_SCALE_VOLTAGE, // analogIn2
+    ADC_FULL_SCALE_VOLTAGE, // analogIn3
+    ADC_FULL_SCALE_VOLTAGE * 5.0f, // analogIn4 // AIN_4 = AIN0 / 5.0     fullscale is 6.0V
+    ADC_FULL_SCALE_VOLTAGE * 5.0f, // analogIn4 // AIN_5 = AIN1 / 5.0     fullscale is 6.0V
+    ADC_FULL_SCALE_VOLTAGE * 4.0f, // analogIn6 // AIN_6 = VDDB / 4.0     fullscale is 4.8V
+    ADC_FULL_SCALE_VOLTAGE, // analogIn7 // AIN_7 = VDD18          fullscale is 1.2V
+    ADC_FULL_SCALE_VOLTAGE, // analogIn8 // AIN_8 = VDD12          fullscale is 1.2V
+    ADC_FULL_SCALE_VOLTAGE * 2.0f, // analogIn9 // AIN_9 = VRTC / 2.0     fullscale is 2.4V
+    ADC_FULL_SCALE_VOLTAGE, // analogIn10  // AIN_10 = x undefined?
+    ADC_FULL_SCALE_VOLTAGE * 4.0f, // analogIn11 // AIN_11 = VDDIO / 4.0   fullscale is 4.8V
+    ADC_FULL_SCALE_VOLTAGE * 4.0f, // analogIn12 // AIN_12 = VDDIOH / 4.0  fullscale is 4.8V
+    ADC_FULL_SCALE_VOLTAGE, // analogIn13
+    ADC_FULL_SCALE_VOLTAGE, // analogIn14
+    ADC_FULL_SCALE_VOLTAGE // analogIn15
+# elif defined(TARGET_MAX32620FTHR)
+#warning "TARGET_MAX32620FTHR not previously tested; need to verify analogIn0..."
+    ADC_FULL_SCALE_VOLTAGE, // analogIn0
+    ADC_FULL_SCALE_VOLTAGE, // analogIn1
+    ADC_FULL_SCALE_VOLTAGE, // analogIn2
+    ADC_FULL_SCALE_VOLTAGE, // analogIn3
+    ADC_FULL_SCALE_VOLTAGE * 5.0f, // analogIn4 // AIN_4 = AIN0 / 5.0     fullscale is 6.0V
+    ADC_FULL_SCALE_VOLTAGE * 5.0f, // analogIn4 // AIN_5 = AIN1 / 5.0     fullscale is 6.0V
+    ADC_FULL_SCALE_VOLTAGE * 4.0f, // analogIn6 // AIN_6 = VDDB / 4.0     fullscale is 4.8V
+    ADC_FULL_SCALE_VOLTAGE, // analogIn7 // AIN_7 = VDD18          fullscale is 1.2V
+    ADC_FULL_SCALE_VOLTAGE, // analogIn8 // AIN_8 = VDD12          fullscale is 1.2V
+    ADC_FULL_SCALE_VOLTAGE * 2.0f, // analogIn9 // AIN_9 = VRTC / 2.0     fullscale is 2.4V
+    ADC_FULL_SCALE_VOLTAGE, // analogIn10  // AIN_10 = x undefined?
+    ADC_FULL_SCALE_VOLTAGE * 4.0f, // analogIn11 // AIN_11 = VDDIO / 4.0   fullscale is 4.8V
+    ADC_FULL_SCALE_VOLTAGE * 4.0f, // analogIn12 // AIN_12 = VDDIOH / 4.0  fullscale is 4.8V
+    ADC_FULL_SCALE_VOLTAGE, // analogIn13
+    ADC_FULL_SCALE_VOLTAGE, // analogIn14
+    ADC_FULL_SCALE_VOLTAGE // analogIn15
+#elif defined(TARGET_MAX32625MBED)
+    ADC_FULL_SCALE_VOLTAGE * 1.0f, // analogIn0 // fullscale is 1.2V
+    ADC_FULL_SCALE_VOLTAGE * 1.0f, // analogIn1 // fullscale is 1.2V
+    ADC_FULL_SCALE_VOLTAGE * 1.0f, // analogIn2 // fullscale is 1.2V
+    ADC_FULL_SCALE_VOLTAGE * 1.0f, // analogIn3 // fullscale is 1.2V
+    ADC_FULL_SCALE_VOLTAGE * 5.0f, // analogIn4 // AIN_4 = AIN0 / 5.0     fullscale is 6.0V
+    ADC_FULL_SCALE_VOLTAGE * 5.0f, // analogIn4 // AIN_5 = AIN1 / 5.0     fullscale is 6.0V
+    ADC_FULL_SCALE_VOLTAGE * 4.0f, // analogIn6 // AIN_6 = VDDB / 4.0     fullscale is 4.8V
+    ADC_FULL_SCALE_VOLTAGE, // analogIn7 // AIN_7 = VDD18          fullscale is 1.2V
+    ADC_FULL_SCALE_VOLTAGE, // analogIn8 // AIN_8 = VDD12          fullscale is 1.2V
+    ADC_FULL_SCALE_VOLTAGE * 2.0f, // analogIn9 // AIN_9 = VRTC / 2.0     fullscale is 2.4V
+    ADC_FULL_SCALE_VOLTAGE, // analogIn10  // AIN_10 = x undefined?
+    ADC_FULL_SCALE_VOLTAGE * 4.0f, // analogIn11 // AIN_11 = VDDIO / 4.0   fullscale is 4.8V
+    ADC_FULL_SCALE_VOLTAGE * 4.0f, // analogIn12 // AIN_12 = VDDIOH / 4.0  fullscale is 4.8V
+    ADC_FULL_SCALE_VOLTAGE, // analogIn13
+    ADC_FULL_SCALE_VOLTAGE, // analogIn14
+    ADC_FULL_SCALE_VOLTAGE // analogIn15
+#elif defined(TARGET_NUCLEO_F446RE)
+    ADC_FULL_SCALE_VOLTAGE, // analogIn0
+    ADC_FULL_SCALE_VOLTAGE, // analogIn1
+    ADC_FULL_SCALE_VOLTAGE, // analogIn2
+    ADC_FULL_SCALE_VOLTAGE, // analogIn3
+    ADC_FULL_SCALE_VOLTAGE, // analogIn4
+    ADC_FULL_SCALE_VOLTAGE, // analogIn5
+    ADC_FULL_SCALE_VOLTAGE, // analogIn6
+    ADC_FULL_SCALE_VOLTAGE, // analogIn7
+    ADC_FULL_SCALE_VOLTAGE, // analogIn8
+    ADC_FULL_SCALE_VOLTAGE, // analogIn9
+    ADC_FULL_SCALE_VOLTAGE, // analogIn10
+    ADC_FULL_SCALE_VOLTAGE, // analogIn11
+    ADC_FULL_SCALE_VOLTAGE, // analogIn12
+    ADC_FULL_SCALE_VOLTAGE, // analogIn13
+    ADC_FULL_SCALE_VOLTAGE, // analogIn14
+    ADC_FULL_SCALE_VOLTAGE // analogIn15
+#elif defined(TARGET_NUCLEO_F401RE)
+    ADC_FULL_SCALE_VOLTAGE, // analogIn0
+    ADC_FULL_SCALE_VOLTAGE, // analogIn1
+    ADC_FULL_SCALE_VOLTAGE, // analogIn2
+    ADC_FULL_SCALE_VOLTAGE, // analogIn3
+    ADC_FULL_SCALE_VOLTAGE, // analogIn4
+    ADC_FULL_SCALE_VOLTAGE, // analogIn5
+    ADC_FULL_SCALE_VOLTAGE, // analogIn6
+    ADC_FULL_SCALE_VOLTAGE, // analogIn7
+    ADC_FULL_SCALE_VOLTAGE, // analogIn8
+    ADC_FULL_SCALE_VOLTAGE, // analogIn9
+    ADC_FULL_SCALE_VOLTAGE, // analogIn10
+    ADC_FULL_SCALE_VOLTAGE, // analogIn11
+    ADC_FULL_SCALE_VOLTAGE, // analogIn12
+    ADC_FULL_SCALE_VOLTAGE, // analogIn13
+    ADC_FULL_SCALE_VOLTAGE, // analogIn14
+    ADC_FULL_SCALE_VOLTAGE // analogIn15
+//#elif defined(TARGET_LPC1768)
+#else
+    // unknown target
+    ADC_FULL_SCALE_VOLTAGE, // analogIn0
+    ADC_FULL_SCALE_VOLTAGE, // analogIn1
+    ADC_FULL_SCALE_VOLTAGE, // analogIn2
+    ADC_FULL_SCALE_VOLTAGE, // analogIn3
+    ADC_FULL_SCALE_VOLTAGE, // analogIn4
+    ADC_FULL_SCALE_VOLTAGE, // analogIn5
+    ADC_FULL_SCALE_VOLTAGE, // analogIn6
+    ADC_FULL_SCALE_VOLTAGE, // analogIn7
+    ADC_FULL_SCALE_VOLTAGE, // analogIn8
+    ADC_FULL_SCALE_VOLTAGE, // analogIn9
+    ADC_FULL_SCALE_VOLTAGE, // analogIn10
+    ADC_FULL_SCALE_VOLTAGE, // analogIn11
+    ADC_FULL_SCALE_VOLTAGE, // analogIn12
+    ADC_FULL_SCALE_VOLTAGE, // analogIn13
+    ADC_FULL_SCALE_VOLTAGE, // analogIn14
+    ADC_FULL_SCALE_VOLTAGE // analogIn15
+# endif
+};
+#endif
+
+
+
+
+//--------------------------------------------------
+// Option to use LEDs to show status
+#ifndef USE_LEDS
+#define USE_LEDS 1
+#endif
+#if USE_LEDS
+#if defined(TARGET_MAX32630)
+# define LED_ON  0
+# define LED_OFF 1
+//--------------------------------------------------
+#elif defined(TARGET_MAX32625MBED)
+# define LED_ON  0
+# define LED_OFF 1
+//--------------------------------------------------
+// TODO1: TARGET=MAX32625MBED ARM Cortex-M4F 96MHz 512kB Flash 160kB SRAM
+#elif defined(TARGET_LPC1768)
+# define LED_ON  1
+# define LED_OFF 0
+#else // not defined(TARGET_LPC1768 etc.)
+// USE_LEDS with some platform other than MAX32630, MAX32625MBED, LPC1768
+// bugfix for MAX32600MBED LED blink pattern: check if LED_ON/LED_OFF already defined
+# ifndef LED_ON
+#  define LED_ON  0
+# endif
+# ifndef LED_OFF
+#  define LED_OFF 1
+# endif
+//# define LED_ON  1
+//# define LED_OFF 0
+#endif // target definition
+DigitalOut led1(LED1, LED_OFF); // MAX32630FTHR: LED1 = LED_RED
+DigitalOut led2(LED2, LED_OFF); // MAX32630FTHR: LED2 = LED_GREEN
+DigitalOut led3(LED3, LED_OFF); // MAX32630FTHR: LED3 = LED_BLUE
+DigitalOut led4(LED4, LED_OFF);
+#else // USE_LEDS=0
+// issue #41 support Nucleo_F446RE
+// there are no LED indicators on the board, LED1 interferes with SPI;
+// but we still need placeholders led1 led2 led3 led4.
+// Declare DigitalOut led1 led2 led3 led4 targeting safe pins.
+// PinName NC means NOT_CONNECTED; DigitalOut::is_connected() returns false
+# define LED_ON  0
+# define LED_OFF 1
+DigitalOut led1(NC, LED_OFF);
+DigitalOut led2(NC, LED_OFF);
+DigitalOut led3(NC, LED_OFF);
+DigitalOut led4(NC, LED_OFF);
+#endif // USE_LEDS
+#define led1_RFailLED led1
+#define led2_GPassLED led2
+#define led3_BBusyLED led3
+
+//--------------------------------------------------
+
+
+// example code board support
+//MAX32630FTHR pegasus(MAX32630FTHR::VIO_3V3);
+//DigitalOut rLED(LED1);
+//DigitalOut gLED(LED2);
+//DigitalOut bLED(LED3);
+//
+// Arduino "shield" connector port definitions (MAX32625MBED shown)
+#if defined(TARGET_MAX32625MBED)
+#define A0 AIN_0
+#define A1 AIN_1
+#define A2 AIN_2
+#define A3 AIN_3
+#define D0 P0_0
+#define D1 P0_1
+#define D2 P0_2
+#define D3 P0_3
+#define D4 P0_4
+#define D5 P0_5
+#define D6 P0_6
+#define D7 P0_7
+#define D8 P1_4
+#define D9 P1_5
+#define D10 P1_3
+#define D11 P1_1
+#define D12 P1_2
+#define D13 P1_0
+#endif
+
+// example code declare SPI interface
+#if defined(TARGET_MAX32625MBED)
+SPI spi(SPI1_MOSI, SPI1_MISO, SPI1_SCK); // mosi, miso, sclk spi1 TARGET_MAX32625MBED: P1_1 P1_2 P1_0 Arduino 10-pin header D11 D12 D13
+DigitalOut spi_cs(SPI1_SS); // TARGET_MAX32625MBED: P1_3 Arduino 10-pin header D10
+#elif defined(TARGET_MAX32600MBED)
+SPI spi(SPI2_MOSI, SPI2_MISO, SPI2_SCK); // mosi, miso, sclk spi1 TARGET_MAX32600MBED: Arduino 10-pin header D11 D12 D13
+DigitalOut spi_cs(SPI2_SS); // Generic: Arduino 10-pin header D10
+#else
+SPI spi(D11, D12, D13); // mosi, miso, sclk spi1 TARGET_MAX32600MBED: Arduino 10-pin header D11 D12 D13
+DigitalOut spi_cs(D10); // Generic: Arduino 10-pin header D10
+#endif
 
+// example code declare GPIO interface pins
+DigitalOut CONVRUN_pin(D9); // Digital Configuration Input to MAX11043 device
+DigitalOut SHDN_pin(D8); // Digital Configuration Input to MAX11043 device
+DigitalOut DACSTEP_pin(D7); // Digital Configuration Input to MAX11043 device
+DigitalOut UP_slash_DWNb_pin(D6); // Digital Configuration Input to MAX11043 device
+DigitalIn EOC_pin(D2); // Digital Event Output from MAX11043 device
+// example code declare device instance
+MAX11043 g_MAX11043_device(spi, spi_cs, CONVRUN_pin, SHDN_pin, DACSTEP_pin, UP_slash_DWNb_pin, EOC_pin, MAX11043::MAX11043_IC);
+
+
+//----------------------------------------
+// Global SPI options
+//
+
+//----------------------------------------
+// Global I2C options
+//
+
+#define APPLICATION_ArduinoPinsMonitor 1
+
+//--------------------------------------------------
+// use BUTTON1 trigger some action
+#if defined(TARGET_MAX32630)
+#define HAS_BUTTON1_DEMO_INTERRUPT 1
+#define HAS_BUTTON2_DEMO 0
+#define HAS_BUTTON2_DEMO_INTERRUPT 0
+#elif defined(TARGET_MAX32625PICO)
+#warning "TARGET_MAX32625PICO not previously tested; need to define buttons..."
+#define HAS_BUTTON1_DEMO_INTERRUPT 1
+#define HAS_BUTTON2_DEMO 0
+#define HAS_BUTTON2_DEMO_INTERRUPT 0
+#elif defined(TARGET_MAX32625)
+#define HAS_BUTTON1_DEMO_INTERRUPT 1
+#define HAS_BUTTON2_DEMO_INTERRUPT 1
+#elif defined(TARGET_MAX32620FTHR)
+#warning "TARGET_MAX32620FTHR not previously tested; need to define buttons..."
+#define BUTTON1 SW1
+#define HAS_BUTTON1_DEMO_INTERRUPT 1
+#define HAS_BUTTON2_DEMO 0
+#define HAS_BUTTON2_DEMO_INTERRUPT 0
+#elif defined(TARGET_NUCLEO_F446RE)
+#define HAS_BUTTON1_DEMO_INTERRUPT 0
+#define HAS_BUTTON2_DEMO_INTERRUPT 0
+#elif defined(TARGET_NUCLEO_F401RE)
+#define HAS_BUTTON1_DEMO_INTERRUPT 0
+#define HAS_BUTTON2_DEMO_INTERRUPT 0
+#else
+#warning "target not previously tested; need to define buttons..."
+#endif
+//
+#ifndef HAS_BUTTON1_DEMO
+#define HAS_BUTTON1_DEMO 0
+#endif
+#ifndef HAS_BUTTON2_DEMO
+#define HAS_BUTTON2_DEMO 0
+#endif
+//
+// avoid runtime error on button1 press [mbed-os-5.11]
+// instead of using InterruptIn, use DigitalIn and poll in main while(1)
+#ifndef HAS_BUTTON1_DEMO_INTERRUPT_POLLING
+#define HAS_BUTTON1_DEMO_INTERRUPT_POLLING 1
+#endif
+//
+#ifndef HAS_BUTTON1_DEMO_INTERRUPT
+#define HAS_BUTTON1_DEMO_INTERRUPT 1
+#endif
+#ifndef HAS_BUTTON2_DEMO_INTERRUPT
+#define HAS_BUTTON2_DEMO_INTERRUPT 1
+#endif
+//
+#if HAS_BUTTON1_DEMO_INTERRUPT
+# if HAS_BUTTON1_DEMO_INTERRUPT_POLLING
+// avoid runtime error on button1 press [mbed-os-5.11]
+// instead of using InterruptIn, use DigitalIn and poll in main while(1)
+DigitalIn button1(BUTTON1);
+# else
+InterruptIn button1(BUTTON1);
+# endif
+#elif HAS_BUTTON1_DEMO
+DigitalIn button1(BUTTON1);
+#endif
+#if HAS_BUTTON2_DEMO_INTERRUPT
+# if HAS_BUTTON1_DEMO_INTERRUPT_POLLING
+// avoid runtime error on button1 press [mbed-os-5.11]
+// instead of using InterruptIn, use DigitalIn and poll in main while(1)
+DigitalIn button2(BUTTON2);
+# else
+InterruptIn button2(BUTTON2);
+# endif
+#elif HAS_BUTTON2_DEMO
+DigitalIn button2(BUTTON2);
+#endif
+
+//--------------------------------------------------
+// When user presses button BUTTON1, perform self test
+#if HAS_BUTTON1_DEMO_INTERRUPT
+void onButton1FallingEdge(void)
+{
+    void SelfTest(CmdLine & cmdLine);
+    SelfTest(cmdLine_serial);
+}
+#endif // HAS_BUTTON1_DEMO_INTERRUPT
+
+//--------------------------------------------------
+// When user presses button BUTTON2, perform demo configuration
+#if HAS_BUTTON2_DEMO_INTERRUPT
+void onButton2FallingEdge(void)
+{
+    // TBD demo configuration
+    // TODO diagnostic LED
+}
+#endif // HAS_BUTTON2_DEMO_INTERRUPT
+
+//--------------------------------------------------
+void SelfTest(CmdLine & cmdLine)
+{
+    //--------------------------------------------------
+#if analogIn4_IS_HIGH_RANGE_OF_analogIn0
+    // Platform board uses AIN4,AIN5,.. as high range of AIN0,AIN1,..
+    MaximTinyTester tinyTester(cmdLine, analogIn4, analogIn5, analogIn2, analogIn3, analogIn0, analogIn4, led1_RFailLED, led2_GPassLED, led3_BBusyLED);
+    tinyTester.analogInPin_fullScaleVoltage[0] = analogInPin_fullScaleVoltage[4]; // board support
+    tinyTester.analogInPin_fullScaleVoltage[1] = analogInPin_fullScaleVoltage[5]; // board support
+    tinyTester.analogInPin_fullScaleVoltage[2] = analogInPin_fullScaleVoltage[2]; // board support
+    tinyTester.analogInPin_fullScaleVoltage[3] = analogInPin_fullScaleVoltage[3]; // board support
+    tinyTester.analogInPin_fullScaleVoltage[4] = analogInPin_fullScaleVoltage[0]; // board support
+    tinyTester.analogInPin_fullScaleVoltage[5] = analogInPin_fullScaleVoltage[1]; // board support
+    // low range channels AIN0, AIN1, AIN2, AIN3
+#else // analogIn4_IS_HIGH_RANGE_OF_analogIn0
+    // Platform board uses simple analog inputs
+    MaximTinyTester tinyTester(cmdLine, analogIn0, analogIn1, analogIn2, analogIn3, analogIn4, analogIn5, led1_RFailLED, led2_GPassLED, led3_BBusyLED);
+    tinyTester.analogInPin_fullScaleVoltage[0] = analogInPin_fullScaleVoltage[0]; // board support
+    tinyTester.analogInPin_fullScaleVoltage[1] = analogInPin_fullScaleVoltage[1]; // board support
+    tinyTester.analogInPin_fullScaleVoltage[2] = analogInPin_fullScaleVoltage[2]; // board support
+    tinyTester.analogInPin_fullScaleVoltage[3] = analogInPin_fullScaleVoltage[3]; // board support
+    tinyTester.analogInPin_fullScaleVoltage[4] = analogInPin_fullScaleVoltage[4]; // board support
+    tinyTester.analogInPin_fullScaleVoltage[5] = analogInPin_fullScaleVoltage[5]; // board support
+#endif
+    tinyTester.clear();
+
+    // CODE GENERATOR: generate SelfTest based on function docstrings @test lines
+
+    //
+#if INJECT_SELFTEST_FAIL
+    // Test of the pass/fail report mechanism
+    tinyTester.FAIL();
+    cmdLine.serial().print(F("injecting one false failure for test reporting"));
+#endif
+    //
+    // Report number of pass and number of fail test results
+    tinyTester.Report_Summary();
+}
+
+
+//--------------------------------------------------
+inline void print_command_prompt()
+{
+    cmdLine_serial.serial().printf("\r\n> ");
+
+}
+
+
+//--------------------------------------------------
+void pinsMonitor_submenu_onEOLcommandParser(CmdLine& cmdLine)
+{
+    // % diagnostic commands submenu
+    // %Hpin -- digital output high
+    // %Lpin -- digital output low
+    // %?pin -- digital input
+    // %A %Apin -- analog input
+    // %Ppin df=xx -- pwm output
+    // %Wpin -- measure high pulsewidth input in usec
+    // %wpin -- measure low pulsewidth input in usec
+    // %I... -- I2C diagnostics
+    // %IP -- I2C probe
+    // %IC scl=100khz ADDR=? -- I2C configure
+    // %IW byte byte ... byte RD=? ADDR=0x -- write
+    // %IR ADDR=? RD=? -- read
+    // %I^ cmd=? -- i2c_smbus_read_word_data
+    // %S... -- SPI diagnostics
+    // %SC sclk=1Mhz -- SPI configure
+    // %SW -- write (write and read)
+    // %SR -- read (alias for %SW because SPI always write and read)
+    // A-Z,a-z,0-9 reserved for application use
+    //
+    char strPinIndex[3];
+    strPinIndex[0] = cmdLine[2];
+    strPinIndex[1] = cmdLine[3];
+    strPinIndex[2] = '\0';
+    int pinIndex = strtoul(strPinIndex, NULL, 10);         // strtol(str, NULL, 10): get decimal value
+    //cmdLine.serial().printf(" pinIndex=%d ", pinIndex);
+    //
+    // get next character
+    switch (cmdLine[1])
+    {
+#if HAS_digitalInOuts
+        case 'H': case 'h':
+        {
+            // %Hpin -- digital output high
+#if ARDUINO_STYLE
+            pinMode(pinIndex, OUTPUT);             // digital pins 0, 1, 2, .. 13, analog input pins A0, A1, .. A5
+            digitalWrite(pinIndex, HIGH);             // digital pins 0, 1, 2, .. 13, analog input pins A0, A1, .. A5
+#else
+            DigitalInOut& digitalInOutPin = find_digitalInOutPin(pinIndex);
+            digitalInOutPin.output();
+            digitalInOutPin.write(1);
+#endif
+            cmdLine.serial().printf(" digitalInOutPin %d Output High ", pinIndex);
+        }
+        break;
+        case 'L': case 'l':
+        {
+            // %Lpin -- digital output low
+#if ARDUINO_STYLE
+            pinMode(pinIndex, OUTPUT);             // digital pins 0, 1, 2, .. 13, analog input pins A0, A1, .. A5
+            digitalWrite(pinIndex, LOW);             // digital pins 0, 1, 2, .. 13, analog input pins A0, A1, .. A5
+#else
+            DigitalInOut& digitalInOutPin = find_digitalInOutPin(pinIndex);
+            digitalInOutPin.output();
+            digitalInOutPin.write(0);
+#endif
+            cmdLine.serial().printf(" digitalInOutPin %d Output Low ", pinIndex);
+        }
+        break;
+        case '?':
+        {
+            // %?pin -- digital input
+#if ARDUINO_STYLE
+            pinMode(pinIndex, INPUT);             // digital pins 0, 1, 2, .. 13, analog input pins A0, A1, .. A5
+#else
+            DigitalInOut& digitalInOutPin = find_digitalInOutPin(pinIndex);
+            digitalInOutPin.input();
+#endif
+            serial.printf(" digitalInOutPin %d Input ", pinIndex);
+#if ARDUINO_STYLE
+            int value = digitalRead(pinIndex);
+#else
+            int value = digitalInOutPin.read();
+#endif
+            cmdLine.serial().printf("%d ", value);
+        }
+        break;
+#endif
+        //
+#if HAS_analogIns
+        case 'A': case 'a':
+        {
+            // %A %Apin -- analog input
+#if analogIn4_IS_HIGH_RANGE_OF_analogIn0
+            // Platform board uses AIN4,AIN5,.. as high range of AIN0,AIN1,..
+            for (int pinIndex = 0; pinIndex < 2; pinIndex++)
+            {
+                int cPinIndex = '0' + pinIndex;
+                AnalogIn& analogInPin = find_analogInPin(cPinIndex);
+                float adc_full_scale_voltage = analogInPin_fullScaleVoltage[pinIndex];
+                float normValue_0_1 = analogInPin.read();
+                //
+                int pinIndexH = pinIndex + 4;
+                int cPinIndexH = '0' + pinIndexH;
+                AnalogIn& analogInPinH = find_analogInPin(cPinIndexH);
+                float adc_full_scale_voltageH = analogInPin_fullScaleVoltage[pinIndexH];
+                float normValueH_0_1 = analogInPinH.read();
+                //
+                cmdLine.serial().printf("AIN%c = %7.3f%% = %1.3fV  AIN%c = %7.3f%% = %1.3fV  \r\n",
+                                        cPinIndex,
+                                        normValue_0_1 * 100.0,
+                                        normValue_0_1 * adc_full_scale_voltage,
+                                        cPinIndexH,
+                                        normValueH_0_1 * 100.0,
+                                        normValueH_0_1 * adc_full_scale_voltageH
+                                        );
+            }
+            for (int pinIndex = 2; pinIndex < 4; pinIndex++)
+            {
+                int cPinIndex = '0' + pinIndex;
+                AnalogIn& analogInPin = find_analogInPin(cPinIndex);
+                float adc_full_scale_voltage = analogInPin_fullScaleVoltage[pinIndex];
+                float normValue_0_1 = analogInPin.read();
+                //
+                cmdLine.serial().printf("AIN%c = %7.3f%% = %1.3fV\r\n",
+                                        cPinIndex,
+                                        normValue_0_1 * 100.0,
+                                        normValue_0_1 * adc_full_scale_voltage
+                                        );
+            }
+#else // analogIn4_IS_HIGH_RANGE_OF_analogIn0
+            // Platform board uses simple analog inputs
+            // assume standard Arduino analog inputs A0-A5
+            for (int pinIndex = 0; pinIndex < 6; pinIndex++)
+            {
+                int cPinIndex = '0' + pinIndex;
+                AnalogIn& analogInPin = find_analogInPin(cPinIndex);
+                float adc_full_scale_voltage = analogInPin_fullScaleVoltage[pinIndex];
+                float normValue_0_1 = analogInPin.read();
+                //
+                cmdLine.serial().printf("AIN%c = %7.3f%% = %1.3fV\r\n",
+                                        cPinIndex,
+                                        normValue_0_1 * 100.0,
+                                        normValue_0_1 * adc_full_scale_voltage
+                                        );
+            }
+#endif // analogIn4_IS_HIGH_RANGE_OF_analogIn0
+        }
+        break;
+#endif
+        //
+#if HAS_SPI2_MAX541
+        case 'D': case 'd':
+        {
+            // %D -- DAC output MAX541 (SPI2) -- need cmdLine.parse_float(voltageV)
+            // MAX541 max541(spi2_max541, spi2_max541_cs);
+            float voltageV = max541.Get_Voltage();
+            // if (cmdLine[2] == '+') {
+            //     // %D+
+            //     voltageV = voltageV * 1.25f;
+            //     if (voltageV >= max541.VRef) voltageV = max541.VRef;
+            //     SelfTest_MAX541_Voltage(cmdLine, max541, voltageV);
+            // }
+            // else if (cmdLine[2] == '-') {
+            //     // %D-
+            //     voltageV = voltageV * 0.75f;
+            //     if (voltageV < 0.1f) voltageV = 0.1f;
+            //     SelfTest_MAX541_Voltage(cmdLine, max541, voltageV);
+            // }
+            if (cmdLine.parse_float("V", voltageV))
+            {
+                // %D V=1.234 -- set voltage
+                max541.Set_Voltage(voltageV);
+            }
+            else if (cmdLine.parse_float("TEST", voltageV))
+            {
+                // %D TEST=1.234 -- set voltage and compare with AIN0
+                SelfTest_MAX541_Voltage(cmdLine, max541, voltageV);
+            }
+            else if (cmdLine.parse_float("CAL", voltageV))
+            {
+                // %D CAL=1.234 -- calibrate VRef and compare with AIN0
+
+                max541.Set_Code(0x8000); // we don't know the fullscale voltage yet, so set code to midscale
+                double max541_midscale_V = analogInPin_fullScaleVoltage[4] * analogIn4.read(); // TARGET_MAX32630 J1.5 AIN_4 = AIN0 / 5.0     fullscale is 6.0V
+                const int average_count = 100;
+                const double average_K = 0.25;
+                for (int count = 0; count < average_count; count++) {
+                    double measurement_V = analogInPin_fullScaleVoltage[4] * analogIn4.read(); // TARGET_MAX32630 J1.5 AIN_4 = AIN0 / 5.0     fullscale is 6.0V
+                    max541_midscale_V = ((1 - average_K) * max541_midscale_V) + (average_K * measurement_V);
+                }
+                max541.VRef = 2.0 * max541_midscale_V;
+                cmdLine.serial().printf(
+                    "\r\n      MAX541 midscale = %1.3fV, so fullscale = %1.3fV",
+                    max541_midscale_V, max541.VRef);
+                // Detect whether MAX541 is really connected to MAX32625MBED.AIN0/AIN4
+                voltageV = 1.0f;
+                SelfTest_MAX541_Voltage(cmdLine, max541, voltageV);
+            }
+            else {
+                // %D -- print MAX541 DAC status
+                cmdLine.serial().printf("MAX541 code=0x%4.4x = %1.3fV  VRef=%1.3fV\r\n",
+                                        max541.Get_Code(), max541.Get_Voltage(), max541.VRef);
+            }
+        }
+        break;
+#endif
+
+        //
+#if HAS_I2C // SUPPORT_I2C
+        case 'I': case 'i':
+            // %I... -- I2C diagnostics
+            // %IP -- I2C probe
+            // %IC scl=100khz ADDR=? -- I2C configure
+            // %IW byte byte ... byte RD=? ADDR=0x -- write
+            // %IR ADDR=? RD=? -- read
+            // %I^ cmd=? -- i2c_smbus_read_word_data
+            // get next character
+            // TODO: parse cmdLine arg (ADDR=\d+)? --> g_I2C_deviceAddress7
+            cmdLine.parse_byte_hex("ADDR", g_I2C_deviceAddress7);
+            // TODO: parse cmdLine arg (RD=\d)? --> g_I2C_read_count
+            g_I2C_read_count = 0;         // read count must be reset every command
+            cmdLine.parse_byte_dec("RD", g_I2C_read_count);
+            // TODO: parse cmdLine arg (CMD=\d)? --> g_I2C_command_regAddress
+            cmdLine.parse_byte_hex("CMD", g_I2C_command_regAddress);
+            switch (cmdLine[2])
+            {
+                case 'P': case 'p':
+                {
+                    // %IP -- I2C probe
+                    HuntAttachedI2CDevices(cmdLine, 0x03, 0x77);
+                }
+                break;
+                case 'C': case 'c':
+                {
+                    bool isUpdatedI2CConfig = false;
+                    // %IC scl=100khz ADDR=? -- I2C configure
+                    // parse cmdLine arg (SCL=\d+(kHZ|MHZ)?)? --> g_I2C_SCL_Hz
+                    if (cmdLine.parse_frequency_Hz("SCL", g_I2C_SCL_Hz))
+                    {
+                        isUpdatedI2CConfig = true;
+                        // TODO1: validate g_I2C_SCL_Hz against system clock frequency F_CPU
+                        if (g_I2C_SCL_Hz > limit_max_I2C_SCL_Hz)
+                        {
+                            g_I2C_SCL_Hz = limit_max_I2C_SCL_Hz;
+                        }
+                        if (g_I2C_SCL_Hz < limit_min_I2C_SCL_Hz)
+                        {
+                            g_I2C_SCL_Hz = limit_min_I2C_SCL_Hz;
+                        }
+                    }
+                    if (isUpdatedI2CConfig)
+                    {
+                        // declare in narrower scope: MAX32625MBED I2C i2cMaster(...)
+                        I2C i2cMaster(I2C0_SDA, I2C0_SCL);             // sda scl TARGET_MAX32635MBED: P1_6, P1_7 Arduino 10-pin header
+                        i2cMaster.frequency(g_I2C_SCL_Hz);
+                        i2cMaster.start();
+                        i2cMaster.stop();
+                        i2cMaster.frequency(g_I2C_SCL_Hz);
+                        cmdLine.serial().printf(
+                            "\r\n %%IC ADDR=0x%2.2x=(0x%2.2x>>1) SCL=%d=%1.3fkHz -- I2C config",
+                            g_I2C_deviceAddress7, (g_I2C_deviceAddress7 << 1), g_I2C_SCL_Hz,
+                            (g_I2C_SCL_Hz / 1000.));
+                        i2cMaster.start();
+                        i2cMaster.stop();
+                    }
+                }
+                break;
+                case 'W': case 'w':
+                {
+                    // declare in narrower scope: MAX32625MBED I2C i2cMaster(...)
+                    I2C i2cMaster(I2C0_SDA, I2C0_SCL);             // sda scl TARGET_MAX32635MBED: P1_6, P1_7 Arduino 10-pin header
+                    i2cMaster.frequency(g_I2C_SCL_Hz);
+                    // %IW byte byte ... byte RD=? ADDR=0x -- write
+                    // parse cmdLine byte list --> int byteCount; int mosiData[MAX_SPI_BYTE_COUNT];
+                    #define MAX_I2C_BYTE_COUNT 32
+                    size_t byteCount = byteCount;
+                    static char mosiData[MAX_I2C_BYTE_COUNT];
+                    static char misoData[MAX_I2C_BYTE_COUNT];
+                    if (cmdLine.parse_byteCount_byteList_hex(byteCount, mosiData,
+                                                             MAX_I2C_BYTE_COUNT))
+                    {
+                        // hex dump mosiData[0..byteCount-1]
+                        cmdLine.serial().printf(
+                            "\r\nADDR=0x%2.2x=(0x%2.2x>>1) byteCount:%d RD=%d\r\nI2C MOSI->",
+                            g_I2C_deviceAddress7,
+                            (g_I2C_deviceAddress7 << 1), byteCount, g_I2C_read_count);
+                        for (unsigned int byteIndex = 0; byteIndex < byteCount; byteIndex++)
+                        {
+                            cmdLine.serial().printf(" 0x%2.2X", mosiData[byteIndex]);
+                        }
+                        //
+                        // TODO: i2c transfer
+                        //const int addr7bit = 0x48;      // 7 bit I2C address
+                        //const int addr8bit = 0x48 << 1; // 8bit I2C address, 0x90
+                        // /* int  */   i2cMaster.read (int addr8bit, char *data, int length, bool repeated=false) // Read from an I2C slave.
+                        // /* int  */   i2cMaster.read (int ack) // Read a single byte from the I2C bus.
+                        // /* int  */   i2cMaster.write (int addr8bit, const char *data, int length, bool repeated=false) // Write to an I2C slave.
+                        // /* int  */   i2cMaster.write (int data) // Write single byte out on the I2C bus.
+                        // /* void */   i2cMaster.start (void) // Creates a start condition on the I2C bus.
+                        // /* void */   i2cMaster.stop (void) // Creates a stop condition on the I2C bus.
+                        // /* int */    i2cMaster.transfer (int addr8bit, const char *tx_buffer, int tx_length, char *rx_buffer, int rx_length, const event_callback_t &callback, int event=I2C_EVENT_TRANSFER_COMPLETE, bool repeated=false) // Start nonblocking I2C transfer. More...
+                        // /* void */   i2cMaster.abort_transfer () // Abort the ongoing I2C transfer. More...
+                        const int addr8bit = g_I2C_deviceAddress7 << 1;             // 8bit I2C address, 0x90
+                        unsigned int misoLength = 0;
+                        bool repeated = (g_I2C_read_count > 0);
+                        //
+                        int writeStatus = i2cMaster.write (addr8bit, mosiData, byteCount, repeated);
+                        switch (writeStatus)
+                        {
+                            case 0: cmdLine.serial().printf(" ack "); break;
+                            case 1: cmdLine.serial().printf(" nack "); break;
+                            default: cmdLine.serial().printf(" {writeStatus 0x%2.2X} ",
+                                                             writeStatus);
+                        }
+                        if (repeated)
+                        {
+                            int readStatus =
+                                i2cMaster.read (addr8bit, misoData, g_I2C_read_count, false);
+                            switch (readStatus)
+                            {
+                                case 1: cmdLine.serial().printf(" nack "); break;
+                                case 0: cmdLine.serial().printf(" ack "); break;
+                                default: cmdLine.serial().printf(" {readStatus 0x%2.2X} ",
+                                                                 readStatus);
+                            }
+                        }
+                        //
+                        if (misoLength > 0)
+                        {
+                            // hex dump misoData[0..byteCount-1]
+                            cmdLine.serial().printf("  MISO<-");
+                            for (unsigned int byteIndex = 0; byteIndex < g_I2C_read_count;
+                                 byteIndex++)
+                            {
+                                cmdLine.serial().printf(" 0x%2.2X", misoData[byteIndex]);
+                            }
+                        }
+                        cmdLine.serial().printf(" ");
+                    }
+                }
+                break;
+                case 'R': case 'r':
+                {
+                    // declare in narrower scope: MAX32625MBED I2C i2cMaster(...)
+                    I2C i2cMaster(I2C0_SDA, I2C0_SCL);             // sda scl TARGET_MAX32635MBED: P1_6, P1_7 Arduino 10-pin header
+                    i2cMaster.frequency(g_I2C_SCL_Hz);
+                    // %IR ADDR=? RD=? -- read
+                    // TODO: i2c transfer
+                    //const int addr7bit = 0x48;      // 7 bit I2C address
+                    //const int addr8bit = 0x48 << 1; // 8bit I2C address, 0x90
+                    // /* int  */   i2cMaster.read (int addr8bit, char *data, int length, bool repeated=false) // Read from an I2C slave.
+                    // /* int  */   i2cMaster.read (int ack) // Read a single byte from the I2C bus.
+                    // /* int  */   i2cMaster.write (int addr8bit, const char *data, int length, bool repeated=false) // Write to an I2C slave.
+                    // /* int  */   i2cMaster.write (int data) // Write single byte out on the I2C bus.
+                    // /* void */   i2cMaster.start (void) // Creates a start condition on the I2C bus.
+                    // /* void */   i2cMaster.stop (void) // Creates a stop condition on the I2C bus.
+                    // /* int */    i2cMaster.transfer (int addr8bit, const char *tx_buffer, int tx_length, char *rx_buffer, int rx_length, const event_callback_t &callback, int event=I2C_EVENT_TRANSFER_COMPLETE, bool repeated=false) // Start nonblocking I2C transfer. More...
+                    // /* void */   i2cMaster.abort_transfer () // Abort the ongoing I2C transfer. More...
+                }
+                break;
+                case '^':
+                {
+                    // declare in narrower scope: MAX32625MBED I2C i2cMaster(...)
+                    I2C i2cMaster(I2C0_SDA, I2C0_SCL);             // sda scl TARGET_MAX32635MBED: P1_6, P1_7 Arduino 10-pin header
+                    i2cMaster.frequency(g_I2C_SCL_Hz);
+                    // %I^ cmd=? -- i2c_smbus_read_word_data
+                    // TODO: i2c transfer
+                    //const int addr7bit = 0x48;      // 7 bit I2C address
+                    //const int addr8bit = 0x48 << 1; // 8bit I2C address, 0x90
+                    // /* int  */   i2cMaster.read (int addr8bit, char *data, int length, bool repeated=false) // Read from an I2C slave.
+                    // /* int  */   i2cMaster.read (int ack) // Read a single byte from the I2C bus.
+                    // /* int  */   i2cMaster.write (int addr8bit, const char *data, int length, bool repeated=false) // Write to an I2C slave.
+                    // /* int  */   i2cMaster.write (int data) // Write single byte out on the I2C bus.
+                    // /* void */   i2cMaster.start (void) // Creates a start condition on the I2C bus.
+                    // /* void */   i2cMaster.stop (void) // Creates a stop condition on the I2C bus.
+                    // /* int */    i2cMaster.transfer (int addr8bit, const char *tx_buffer, int tx_length, char *rx_buffer, int rx_length, const event_callback_t &callback, int event=I2C_EVENT_TRANSFER_COMPLETE, bool repeated=false) // Start nonblocking I2C transfer. More...
+                    // /* void */   i2cMaster.abort_transfer () // Abort the ongoing I2C transfer. More...
+                }
+                break;
+            }         // switch(cmdLine[2])
+            break;
+#endif
+        //
+#if HAS_SPI // SUPPORT_SPI
+        case 'S': case 's':
+        {
+            // %S... -- SPI diagnostics
+            // %SC sclk=1Mhz -- SPI configure
+            // %SW -- write (write and read)
+            // %SR -- read (alias for %SW because SPI always write and read)
+            //
+            // Process arguments SCLK=\d+(kHZ|MHZ) CPOL=\d CPHA=\d
+            bool isUpdatedSPIConfig = false;
+            // parse cmdLine arg (CPOL=\d)? --> g_SPI_dataMode | SPI_MODE2
+            // parse cmdLine arg (CPHA=\d)? --> g_SPI_dataMode | SPI_MODE1
+            if (cmdLine.parse_flag("CPOL", g_SPI_dataMode, SPI_MODE2))
+            {
+                isUpdatedSPIConfig = true;
+            }
+            if (cmdLine.parse_flag("CPHA", g_SPI_dataMode, SPI_MODE1))
+            {
+                isUpdatedSPIConfig = true;
+            }
+            if (cmdLine.parse_flag("CS", g_SPI_cs_state, 1))
+            {
+                isUpdatedSPIConfig = true;
+            }
+            // parse cmdLine arg (SCLK=\d+(kHZ|MHZ)?)? --> g_SPI_SCLK_Hz
+            if (cmdLine.parse_frequency_Hz("SCLK", g_SPI_SCLK_Hz))
+            {
+                isUpdatedSPIConfig = true;
+                // TODO1: validate g_SPI_SCLK_Hz against system clock frequency F_CPU
+                if (g_SPI_SCLK_Hz > limit_max_SPI_SCLK_Hz)
+                {
+                    g_SPI_SCLK_Hz = limit_max_SPI_SCLK_Hz;
+                }
+                if (g_SPI_SCLK_Hz < limit_min_SPI_SCLK_Hz)
+                {
+                    g_SPI_SCLK_Hz = limit_min_SPI_SCLK_Hz;
+                }
+            }
+            // Update SPI configuration
+            if (isUpdatedSPIConfig)
+            {
+                // %SC sclk=1Mhz -- SPI configure
+                spi_cs = g_SPI_cs_state;
+                spi.format(8,g_SPI_dataMode);             // int bits_must_be_8, int mode=0_3 CPOL=0,CPHA=0
+#if APPLICATION_MAX5715
+                g_MAX5715_device.spi_frequency(g_SPI_SCLK_Hz);
+#elif APPLICATION_MAX11131
+                g_MAX11131_device.spi_frequency(g_SPI_SCLK_Hz);
+#elif APPLICATION_MAX5171
+                g_MAX5171_device.spi_frequency(g_SPI_SCLK_Hz);
+#elif APPLICATION_MAX11410
+                g_MAX11410_device.spi_frequency(g_SPI_SCLK_Hz);
+#elif APPLICATION_MAX12345
+                g_MAX12345_device.spi_frequency(g_SPI_SCLK_Hz);
+#else
+                spi.frequency(g_SPI_SCLK_Hz);             // int SCLK_Hz=1000000 = 1MHz (initial default)
+#endif
+                //
+                double ideal_divisor = ((double)SystemCoreClock) / g_SPI_SCLK_Hz;
+                int actual_divisor = (int)(ideal_divisor + 0.0);             // frequency divisor truncate
+                double actual_SCLK_Hz = SystemCoreClock / actual_divisor;
+                //
+                // fixed: mbed-os-5.11: [Warning] format '%d' expects argument of type 'int', but argument 6 has type 'uint32_t {aka long unsigned int}' [-Wformat=]
+                cmdLine.serial().printf(
+                    "\r\n %%SC CPOL=%d CPHA=%d CS=%d SCLK=%ld=%1.3fMHz (%1.1fMHz/%1.2f = actual %1.3fMHz) -- SPI config",
+                    ((g_SPI_dataMode & SPI_MODE2) ? 1 : 0),
+                    ((g_SPI_dataMode & SPI_MODE1) ? 1 : 0),
+                    g_SPI_cs_state,
+                    g_SPI_SCLK_Hz,
+                    (g_SPI_SCLK_Hz / 1000000.),
+                    ((double)(SystemCoreClock / 1000000.)),
+                    ideal_divisor,
+                    (actual_SCLK_Hz / 1000000.)
+                    );
+            }
+            // get next character
+            switch (cmdLine[2])
+            {
+                case 'C': case 's':
+                    // %SC sclk=1Mhz -- SPI configure
+                    break;
+                case 'W': case 'R': case 'w': case 'r':
+                {
+                    // %SW -- write (write and read)
+                    // %SR -- read (alias for %SW because SPI always write and read)
+                    // parse cmdLine byte list --> int byteCount; int mosiData[MAX_SPI_BYTE_COUNT];
+                    #define MAX_SPI_BYTE_COUNT 32
+                    size_t byteCount = byteCount;
+                    static char mosiData[MAX_SPI_BYTE_COUNT];
+                    static char misoData[MAX_SPI_BYTE_COUNT];
+                    if (cmdLine.parse_byteCount_byteList_hex(byteCount, mosiData,
+                                                             MAX_SPI_BYTE_COUNT))
+                    {
+                        // hex dump mosiData[0..byteCount-1]
+                        cmdLine.serial().printf("\r\nSPI");
+                        if (byteCount > 7) {
+                            cmdLine.serial().printf(" byteCount:%d", byteCount);
+                        }
+                        cmdLine.serial().printf(" MOSI->");
+                        for (unsigned int byteIndex = 0; byteIndex < byteCount; byteIndex++)
+                        {
+                            cmdLine.serial().printf(" 0x%2.2X", mosiData[byteIndex]);
+                        }
+                        spi_cs = 0;
+                        unsigned int numBytesTransferred =
+                            spi.write(mosiData, byteCount, misoData, byteCount);
+                        spi_cs = 1;
+                        // hex dump misoData[0..byteCount-1]
+                        cmdLine.serial().printf("  MISO<-");
+                        for (unsigned int byteIndex = 0; byteIndex < numBytesTransferred;
+                             byteIndex++)
+                        {
+                            cmdLine.serial().printf(" 0x%2.2X", misoData[byteIndex]);
+                        }
+                        cmdLine.serial().printf(" ");
+                    }
+                }
+                break;
+            }             // switch(cmdLine[2])
+        }             // case 'S': // %S... -- SPI diagnostics
+        break;
+#endif
+        //
+        // A-Z,a-z,0-9 reserved for application use
+    }         // switch(cmdLine[1])
+} // end void pinsMonitor_submenu_onEOLcommandParser(CmdLine & cmdLine)
+
+
+//--------------------------------------------------
+void main_menu_status(CmdLine & cmdLine)
+{
+    cmdLine.serial().printf("\r\nMain menu");
+
+    cmdLine.serial().printf(" MAX11043 24-bit 200ksps Delta-Sigma ADC");
+
+    //cmdLine.serial().print(" %s", TARGET_NAME);
+    if (cmdLine.nameStr())
+    {
+        cmdLine.serial().printf(" [%s]", cmdLine.nameStr());
+
+    }
+    cmdLine.serial().printf("\r\n ? -- help");
+
+}
+
+
+//--------------------------------------------------
+void main_menu_help(CmdLine & cmdLine)
+{
+    // ? -- help
+    //~ cmdLine.serial().print(F("\r\nMenu:"));
+    cmdLine.serial().printf("\r\n # -- lines beginning with # are comments");
+
+    cmdLine.serial().printf("\r\n . -- SelfTest");
+
+    //cmdLine.serial().print(F("\r\n ! -- Initial Configuration"));
+    //
+    // % standardize diagnostic commands
+    // %Hpin -- digital output high
+    // %Lpin -- digital output low
+    // %?pin -- digital input
+    // %A %Apin -- analog input
+    // %Ppin df=xx -- pwm output
+    // %Wpin -- measure high pulsewidth input in usec
+    // %wpin -- measure low pulsewidth input in usec
+    // %I... -- I2C diagnostics
+    // %IP -- I2C probe
+    // %IC scl=100khz ADDR=? -- I2C configure
+    // %IW ADDR=? cmd=? data,data,data -- write
+    // %IR ADDR=? RD=? -- read
+    // %I^ cmd=? -- i2c_smbus_read_word_data
+    // %S... -- SPI diagnostics
+    // %SC sclk=1Mhz -- SPI configure
+    // %SW -- write (write and read)
+    // %SR -- read (alias for %SW because SPI always write and read)
+    // A-Z,a-z,0-9 reserved for application use
+    //
+#if HAS_digitalInOuts
+    // %Hpin -- digital output high
+    // %Lpin -- digital output low
+    // %?pin -- digital input
+    cmdLine.serial().printf("\r\n %%Hn {pin:");
+    list_digitalInOutPins(cmdLine.serial());
+    cmdLine.serial().printf("} -- High Output");
+    cmdLine.serial().printf("\r\n %%Ln {pin:");
+    list_digitalInOutPins(cmdLine.serial());
+    cmdLine.serial().printf("} -- Low Output");
+    cmdLine.serial().printf("\r\n %%?n {pin:");
+    list_digitalInOutPins(cmdLine.serial());
+    cmdLine.serial().printf("} -- Input");
+#endif
+
+#if HAS_analogIns
+    // Menu A) analogRead A0..7
+    // %A %Apin -- analog input
+    // analogRead(pinIndex) // analog input pins A0, A1, A2, A3, A4, A5; float voltage = analogRead(A0) * (5.0 / 1023.0)
+    cmdLine.serial().printf("\r\n %%A -- analogRead");
+#endif
+
+#if HAS_SPI2_MAX541
+    // TODO1: MAX541 max541(spi2_max541, spi2_max541_cs);
+    cmdLine.serial().printf("\r\n %%D -- DAC output MAX541 (SPI2)");
+#endif
+
+#if HAS_I2C // SUPPORT_I2C
+    // TODO: support I2C HAS_I2C // SUPPORT_I2C
+    // VERIFY: I2C utility commands SUPPORT_I2C
+    // VERIFY: report g_I2C_SCL_Hz = (F_CPU / ((TWBR * 2) + 16)) from last Wire_Sr.setClock(I2C_SCL_Hz);
+    // %I... -- I2C diagnostics
+    // %IP -- I2C probe
+    // %IC scl=100khz ADDR=? -- I2C configure
+    // %IW byte byte ... byte RD=? ADDR=0x -- write
+    // %IR ADDR=? RD=? -- read
+    // %I^ cmd=? -- i2c_smbus_read_word_data
+    //g_I2C_SCL_Hz = (F_CPU / ((TWBR * 2) + 16));   // 'F_CPU' 'TWBR' not declared in this scope
+    cmdLine.serial().printf("\r\n %%IC ADDR=0x%2.2x=(0x%2.2x>>1) SCL=%d=%1.3fkHz -- I2C config",
+                            g_I2C_deviceAddress7, (g_I2C_deviceAddress7 << 1), g_I2C_SCL_Hz,
+                            (g_I2C_SCL_Hz / 1000.));
+    cmdLine.serial().printf("\r\n %%IW byte byte ... byte RD=? ADDR=0x%2.2x -- I2C write/read",
+                            g_I2C_deviceAddress7);
+    //
+#if SUPPORT_I2C
+    // Menu ^ cmd=?) i2c_smbus_read_word_data
+    cmdLine.serial().printf("\r\n %%I^ cmd=? -- i2c_smbus_read_word_data");
+    // test low-level I2C i2c_smbus_read_word_data
+#endif // SUPPORT_I2C
+    //cmdLine.serial().printf(" H) Hunt for attached I2C devices");
+    cmdLine.serial().printf("\r\n %%IP -- I2C Probe for attached devices");
+    // cmdLine.serial().printf(" s) search i2c address");
+#endif // SUPPORT_I2C
+
+#if HAS_SPI // SUPPORT_SPI
+    // TODO: support SPI HAS_SPI // SUPPORT_SPI
+    // SPI test command  S (mosiData)+
+    // %S... -- SPI diagnostics
+    // %SC sclk=1Mhz -- SPI configure
+    // %SW -- write (write and read)
+    // %SR -- read (alias for %SW because SPI always write and read)
+    // spi.format(8,0); // int bits_must_be_8, int mode=0_3 CPOL=0,CPHA=0 rising edge (initial default)
+    // spi.format(8,1); // int bits_must_be_8, int mode=0_3 CPOL=0,CPHA=1 falling edge (initial default)
+    // spi.format(8,2); // int bits_must_be_8, int mode=0_3 CPOL=1,CPHA=0 falling edge (initial default)
+    // spi.format(8,3); // int bits_must_be_8, int mode=0_3 CPOL=1,CPHA=1 rising edge (initial default)
+    // spi.frequency(1000000); // int SCLK_Hz=1000000 = 1MHz (initial default)
+    // mode | POL PHA
+    // -----+--------
+    //   0  |  0   0
+    //   1  |  0   1
+    //   2  |  1   0
+    //   3  |  1   1
+    //cmdLine.serial().printf(" S) SPI mosi,mosi,...mosi hex bytes SCLK=1000000 CPOL=0 CPHA=0");
+    // fixed: mbed-os-5.11: [Warning] format '%d' expects argument of type 'int', but argument 3 has type 'uint32_t {aka long unsigned int}' [-Wformat=]
+    cmdLine.serial().printf("\r\n %%SC SCLK=%ld=%1.3fMHz CPOL=%d CPHA=%d -- SPI config",
+                            g_SPI_SCLK_Hz, (g_SPI_SCLK_Hz / 1000000.),
+                            ((g_SPI_dataMode & SPI_MODE2) ? 1 : 0),
+                            ((g_SPI_dataMode & SPI_MODE1) ? 1 : 0));
+    cmdLine.serial().printf("\r\n %%SW mosi,mosi,...mosi -- SPI write hex bytes");
+    // VERIFY: parse new SPI settings parse_strCommandArgs() SCLK=1000000 CPOL=0 CPHA=0
+#endif // SUPPORT_SPI
+       //
+       // Application-specific commands (help text) here
+       //
+#if APPLICATION_ArduinoPinsMonitor
+    cmdLine.serial().printf("\r\n A-Z,a-z,0-9 -- reserved for application use");     // ArduinoPinsMonitor
+#endif // APPLICATION_ArduinoPinsMonitor
+       //
+
+    extern bool MAX11043_menu_help(CmdLine & cmdLine); // defined in Test_Menu_MAX11043.cpp\n
+    MAX11043_menu_help(cmdLine);
+}
+
+
+
+//--------------------------------------------------
+// main menu command-line parser
+// invoked by CmdLine::append(char ch) or CmdLine::idleAppendIfReadable()
+void main_menu_onEOLcommandParser(CmdLine & cmdLine)
+{
+    // DIAGNOSTIC: print line buffer
+    //~ cmdLine.serial().printf("\r\nmain_menu_onEOLcommandParser: ~%s~\r\n", cmdLine.str());
+    //
+    switch (cmdLine[0])
+    {
+        case '?':
+            main_menu_status(cmdLine);
+            main_menu_help(cmdLine);
+            // print command prompt
+            //cmdLine.serial().printf("\r\n>");
+            break;
+        case '\r': case '\n':     // ignore blank line
+        case '\0':     // ignore empty line
+        case '#':     // ignore comment line
+            // # -- lines beginning with # are comments
+            main_menu_status(cmdLine);
+            //~ main_menu_help(cmdLine);
+            // print command prompt
+            //cmdLine.serial().printf("\r\n>");
+            break;
+#if ECHO_EOF_ON_EOL
+        case '\x04':     // Unicode (U+0004) EOT END OF TRANSMISSION = CTRL+D as EOF end of file
+            cmdLine.serial().printf("\x04");     // immediately echo EOF for test scripting
+            diagnostic_led_EOF();
+            break;
+        case '\x1a':     // Unicode (U+001A) SUB SUBSTITUTE = CTRL+Z as EOF end of file
+            cmdLine.serial().printf("\x1a");     // immediately echo EOF for test scripting
+            diagnostic_led_EOF();
+            break;
+#endif
+#if APPLICATION_ArduinoPinsMonitor
+        case '.':
+        {
+            // . -- SelfTest
+            cmdLine.serial().printf("SelfTest()");
+            SelfTest(cmdLine);
+        }
+        break;
+        case '%':
+        {
+            pinsMonitor_submenu_onEOLcommandParser(cmdLine);
+        }
+        break;         // case '%'
+#endif // APPLICATION_ArduinoPinsMonitor
+       //
+       // Application-specific commands here
+       // alphanumeric command codes A-Z,a-z,0-9 reserved for application use
+       //
+#if APPLICATION_ArduinoPinsMonitor
+#endif // APPLICATION_ArduinoPinsMonitor
+
+        //
+        // add new commands here
+        //
+        default:
+            extern bool MAX11043_menu_onEOLcommandParser(CmdLine & cmdLine); // defined in Test_Menu_MAX11043.cpp
+            if (!MAX11043_menu_onEOLcommandParser(cmdLine))
+            { // not_handled_by_device_submenu
+                cmdLine.serial().printf("\r\n unknown command 0x%2.2x \"%s\"\r\n", cmdLine.str()[0], cmdLine.str());
+
+# if HAS_DAPLINK_SERIAL
+                cmdLine_DAPLINKserial.serial().printf("\r\n unknown command 0x%2.2x \"%s\"\r\n", cmdLine.str()[0], cmdLine.str());
+
+# endif // HAS_DAPLINK_SERIAL
+            }
+    }     // switch (cmdLine[0])
+//
+// print command prompt
+    cmdLine.serial().printf("\r\nMAX11043 > ");
+
+} // end void main_menu_onEOLcommandParser(CmdLine & cmdLine)
+
+//--------------------------------------------------
+void InitializeConfiguration()
+{
+    // CODE GENERATOR: example code: member function Init
+# if HAS_DAPLINK_SERIAL
+    cmdLine_DAPLINKserial.serial().printf("\r\nMAX11043_Init()");
+
+# endif
+    cmdLine_serial.serial().printf("\r\nMAX11043_Init()");
+
+    // Initialize MAX11043 and verify device ID
+    if (g_MAX11043_device.Init() == 0)
+    {  // init failed; try "safe mode" SPI at slower SCLK rate
+        cmdLine_serial.serial().printf("\r\nMAX11043 Init failed; retry at SPI SCLK frequency 2000000 Hz");
+        g_SPI_SCLK_Hz = 2000000;
+        g_MAX11043_device.spi_frequency(2000000);
+        g_MAX11043_device.Init();
+    }
+    // CODE GENERATOR: get spi properties from device
+    if (g_SPI_SCLK_Hz > g_MAX11043_device.get_spi_frequency())
+    {  // Device limits SPI SCLK frequency
+        g_SPI_SCLK_Hz = g_MAX11043_device.get_spi_frequency();
+        cmdLine_serial.serial().printf("\r\nMAX11043 limits SPI SCLK frequency to %dHz\r\n", g_SPI_SCLK_Hz);
+        g_MAX11043_device.Init();
+    }
+    if (g_MAX11043_device.get_spi_frequency() > g_SPI_SCLK_Hz)
+    {  // Platform limits SPI SCLK frequency
+        g_MAX11043_device.spi_frequency(g_SPI_SCLK_Hz);
+        cmdLine_serial.serial().printf("\r\nPlatform limits MAX11043 SPI SCLK frequency to %dHz\r\n", g_SPI_SCLK_Hz);
+        g_MAX11043_device.Init();
+    }
+    g_SPI_dataMode = g_MAX11043_device.get_spi_dataMode();
+
+# if MAX11043_ONSPIPRINT
+  // Optional Diagnostic function to print SPI transactions
+  g_MAX11043_device.onSPIprint = onSPIprint_handler;
+# endif
+}
+
+//--------------------------------------------------
+// diagnostic rbg led GREEN
+void diagnostic_led_EOF()
+{
+#if USE_LEDS
+    led1 = LED_ON; led2 = LED_ON; led3 = LED_OFF;     // diagnostic rbg led RED+GREEN=YELLOW
+    // TODO1: mbed-os-5.11: [Warning] 'static osStatus rtos::Thread::wait(uint32_t)' is deprecated: Static methods only affecting current thread cause confusion. Replaced by ThisThread::sleep_for. [since mbed-os-5.10] [-Wdeprecated-declarations]
+    ThisThread::sleep_for(250); // [since mbed-os-5.10] vs Thread::wait(250);
+    led1 = LED_OFF; led2 = LED_ON; led3 = LED_OFF;     // diagnostic rbg led GREEN
+    ThisThread::sleep_for(250); // [since mbed-os-5.10] vs Thread::wait(250);
+    led1 = LED_ON; led2 = LED_ON; led3 = LED_OFF;     // diagnostic rbg led RED+GREEN=YELLOW
+    ThisThread::sleep_for(250); // [since mbed-os-5.10] vs Thread::wait(250);
+    led1 = LED_OFF; led2 = LED_ON; led3 = LED_OFF;     // diagnostic rbg led GREEN
+    ThisThread::sleep_for(250); // [since mbed-os-5.10] vs Thread::wait(250);
+#endif // USE_LEDS
+}
+
+//--------------------------------------------------
+// Support commands that get handled immediately w/o waiting for EOL
+// handled as immediate command, do not append to buffer
+void on_immediate_0x21() // Unicode (U+0021) ! EXCLAMATION MARK
+{
+#if USE_LEDS
+    led1 = LED_OFF; led2 = LED_OFF; led3 = LED_ON;     // diagnostic rbg led BLUE
+#endif // USE_LEDS
+    InitializeConfiguration();
+    ThisThread::sleep_for(125); // [since mbed-os-5.10] vs Thread::wait(125);
+}
+
+//--------------------------------------------------
+// Support commands that get handled immediately w/o waiting for EOL
+// handled as immediate command, do not append to buffer
+void on_immediate_0x7b() // Unicode (U+007B) { LEFT CURLY BRACKET
+{
+#if HAS_BUTTON2_DEMO_INTERRUPT
+    onButton2FallingEdge();
+#endif
+}
+
+//--------------------------------------------------
+// Support commands that get handled immediately w/o waiting for EOL
+// handled as immediate command, do not append to buffer
+void on_immediate_0x7d() // Unicode (U+007D) } RIGHT CURLY BRACKET
+{
+#if HAS_BUTTON1_DEMO_INTERRUPT
+    onButton1FallingEdge();
+#endif
+}
+
+//----------------------------------------
+// example code main function
+int main()
+{
+    // Configure serial ports
+    cmdLine_serial.clear();
+    //~ cmdLine_serial.serial().printf("\r\n cmdLine_serial.serial().printf test\r\n");
+    cmdLine_serial.onEOLcommandParser = main_menu_onEOLcommandParser;
+    cmdLine_serial.diagnostic_led_EOF = diagnostic_led_EOF;
+    /// CmdLine::set_immediate_handler(char, functionPointer_void_void_on_immediate_0x21);
+    cmdLine_serial.on_immediate_0x21 = on_immediate_0x21;
+    cmdLine_serial.on_immediate_0x7b = on_immediate_0x7b;
+    cmdLine_serial.on_immediate_0x7d = on_immediate_0x7d;
+# if HAS_DAPLINK_SERIAL
+    cmdLine_DAPLINKserial.clear();
+    //~ cmdLine_DAPLINKserial.serial().printf("\r\n cmdLine_DAPLINKserial.serial().printf test\r\n");
+    cmdLine_DAPLINKserial.onEOLcommandParser = main_menu_onEOLcommandParser;
+    /// @todo CmdLine::set_immediate_handler(char, functionPointer_void_void_on_immediate_0x21);
+    cmdLine_DAPLINKserial.on_immediate_0x21 = on_immediate_0x21;
+    cmdLine_DAPLINKserial.on_immediate_0x7b = on_immediate_0x7b;
+    cmdLine_DAPLINKserial.on_immediate_0x7d = on_immediate_0x7d;
+# endif
+
+
+    //print_banner();
+
+
+
+#if USE_LEDS
+#if defined(TARGET_MAX32630)
+    led1 = LED_ON; led2 = LED_OFF; led3 = LED_OFF;     // diagnostic rbg led RED
+    ThisThread::sleep_for(125); // [since mbed-os-5.10] vs Thread::wait(125);
+    led1 = LED_OFF; led2 = LED_ON; led3 = LED_OFF;     // diagnostic rbg led GREEN
+    ThisThread::sleep_for(125); // [since mbed-os-5.10] vs Thread::wait(125);
+    led1 = LED_OFF; led2 = LED_OFF; led3 = LED_ON;     // diagnostic rbg led BLUE
+    ThisThread::sleep_for(125); // [since mbed-os-5.10] vs Thread::wait(125);
+    led1 = LED_ON; led2 = LED_ON; led3 = LED_ON;     // diagnostic rbg led RED+GREEN+BLUE=WHITE
+    ThisThread::sleep_for(125); // [since mbed-os-5.10] vs Thread::wait(125);
+    led1 = LED_OFF; led2 = LED_ON; led3 = LED_ON;     // diagnostic rbg led GREEN+BLUE=CYAN
+    ThisThread::sleep_for(125); // [since mbed-os-5.10] vs Thread::wait(125);
+    led1 = LED_ON; led2 = LED_OFF; led3 = LED_ON;     // diagnostic rbg led RED+BLUE=MAGENTA
+    ThisThread::sleep_for(125); // [since mbed-os-5.10] vs Thread::wait(125);
+    led1 = LED_ON; led2 = LED_ON; led3 = LED_OFF;     // diagnostic rbg led RED+GREEN=YELLOW
+    ThisThread::sleep_for(125); // [since mbed-os-5.10] vs Thread::wait(125);
+    led1 = LED_OFF; led2 = LED_OFF; led3 = LED_OFF;     // diagnostic rbg led BLACK
+    ThisThread::sleep_for(125); // [since mbed-os-5.10] vs Thread::wait(125);
+#elif defined(TARGET_MAX32625MBED)
+    led1 = LED_ON; led2 = LED_OFF; led3 = LED_OFF;     // diagnostic rbg led RED
+    ThisThread::sleep_for(125); // [since mbed-os-5.10] vs Thread::wait(125);
+    led1 = LED_OFF; led2 = LED_ON; led3 = LED_OFF;     // diagnostic rbg led GREEN
+    ThisThread::sleep_for(125); // [since mbed-os-5.10] vs Thread::wait(125);
+    led1 = LED_OFF; led2 = LED_OFF; led3 = LED_ON;     // diagnostic rbg led BLUE
+    ThisThread::sleep_for(125); // [since mbed-os-5.10] vs Thread::wait(125);
+    led1 = LED_ON; led2 = LED_ON; led3 = LED_ON;     // diagnostic rbg led RED+GREEN+BLUE=WHITE
+    ThisThread::sleep_for(125); // [since mbed-os-5.10] vs Thread::wait(125);
+    led1 = LED_OFF; led2 = LED_ON; led3 = LED_ON;     // diagnostic rbg led GREEN+BLUE=CYAN
+    ThisThread::sleep_for(125); // [since mbed-os-5.10] vs Thread::wait(125);
+    led1 = LED_ON; led2 = LED_OFF; led3 = LED_ON;     // diagnostic rbg led RED+BLUE=MAGENTA
+    ThisThread::sleep_for(125); // [since mbed-os-5.10] vs Thread::wait(125);
+    led1 = LED_ON; led2 = LED_ON; led3 = LED_OFF;     // diagnostic rbg led RED+GREEN=YELLOW
+    ThisThread::sleep_for(125); // [since mbed-os-5.10] vs Thread::wait(125);
+    led1 = LED_OFF; led2 = LED_OFF; led3 = LED_OFF;     // diagnostic rbg led BLACK
+    ThisThread::sleep_for(125); // [since mbed-os-5.10] vs Thread::wait(125);
+#else // not defined(TARGET_LPC1768 etc.)
+    led1 = LED_ON;
+    led2 = LED_OFF;
+    led3 = LED_OFF;
+    led4 = LED_OFF;
+    ThisThread::sleep_for(75); // [since mbed-os-5.10] vs Thread::wait(75);
+    //led1 = LED_ON;
+    led2 = LED_ON;
+    ThisThread::sleep_for(75); // [since mbed-os-5.10] vs Thread::wait(75);
+    led1 = LED_OFF;
+    //led2 = LED_ON;
+    led3 = LED_ON;
+    ThisThread::sleep_for(75); // [since mbed-os-5.10] vs Thread::wait(75);
+    led2 = LED_OFF;
+    //led3 = LED_ON;
+    led4 = LED_ON;
+    ThisThread::sleep_for(75); // [since mbed-os-5.10] vs Thread::wait(75);
+    led3 = LED_OFF;
+    led4 = LED_ON;
+    //
+#endif // target definition
+#endif
+
+    // cmd_TE();
+
+// #if USE_LEDS
+//     rgb_led.white();     // diagnostic rbg led RED+GREEN+BLUE=WHITE
+// #endif // USE_LEDS
+    led1 = LED_ON;
+    led2 = LED_ON;
+    led3 = LED_ON;
+
+    InitializeConfiguration();
+    // CODE GENERATOR: example code: member function Init
+    g_MAX11043_device.Init();
+
+        // example code: serial port banner message
+    #if defined(TARGET_MAX32625MBED)
+        serial.printf("MAX32625MBED ");
+    #elif defined(TARGET_MAX32600MBED)
+        serial.printf("MAX32600MBED ");
+    #elif defined(TARGET_NUCLEO_F446RE)
+        serial.printf("NUCLEO_F446RE ");
+    #endif
+        serial.printf("MAX11043BOB\r\n");
+
+
+    while (1) {
+#if HAS_BUTTON1_DEMO_INTERRUPT_POLLING
+        // avoid runtime error on button1 press [mbed-os-5.11]
+        // instead of using InterruptIn, use DigitalIn and poll in main while(1)
+# if HAS_BUTTON1_DEMO_INTERRUPT
+        static int button1_value_prev = 1;
+        static int button1_value_now = 1;
+        button1_value_prev = button1_value_now;
+        button1_value_now = button1.read();
+        if ((button1_value_prev - button1_value_now) == 1)
+        {
+            // on button1 falling edge (button1 press)
+            onButton1FallingEdge();
+        }
+# endif // HAS_BUTTON1_DEMO_INTERRUPT
+# if HAS_BUTTON2_DEMO_INTERRUPT
+        static int button2_value_prev = 1;
+        static int button2_value_now = 1;
+        button2_value_prev = button2_value_now;
+        button2_value_now = button2.read();
+        if ((button2_value_prev - button2_value_now) == 1)
+        {
+            // on button2 falling edge (button2 press)
+            onButton2FallingEdge();
+        }
+# endif // HAS_BUTTON2_DEMO_INTERRUPT
+#endif
+    # if HAS_DAPLINK_SERIAL
+        if (DAPLINKserial.readable()) {
+            cmdLine_DAPLINKserial.append(DAPLINKserial.getc());
+        }
+    # endif // HAS_DAPLINK_SERIAL
+        if (serial.readable()) {
+            int c = serial.getc();
+            cmdLine_serial.append(c);
+#if IGNORE_AT_COMMANDS
+# if HAS_DAPLINK_SERIAL
+            cmdLine_DAPLINKserial.serial().printf("%c", c);
+# endif // HAS_DAPLINK_SERIAL
+#endif // IGNORE_AT_COMMANDS
+            //
+        }
+    }     // while(1)
+}
+//---------- CODE GENERATOR: end testMainCppCodeList
--- a/Test_Menu_MAX11043.cpp	Tue Feb 11 01:16:34 2020 +0000
+++ b/Test_Menu_MAX11043.cpp	Tue Feb 11 09:01:20 2020 +0000
@@ -627,4 +627,3 @@
 } // end bool MAX11043_menu_onEOLcommandParser(CmdLine & cmdLine)
 
 // CODE GENERATOR: class declaration statement close
-