Test program running on MAX32625MBED. Control through USB Serial commands using a terminal emulator such as teraterm or putty.
Dependencies: MaximTinyTester CmdLine MAX541 MAX5715 USBDevice
Test_Menu_MAX5715.cpp
- Committer:
- whismanoid
- Date:
- 2020-03-17
- Revision:
- 23:45fe3f734bcc
- Parent:
- 21:7cd01d9d0309
File content as of revision 23:45fe3f734bcc:
// /******************************************************************************* // * Copyright (C) 2019 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. // ******************************************************************************* // */ #include "mbed.h" #include "MAX5715.h" #include "CmdLine.h" //-------------------------------------------------- // tolerate AT commands, which may be sent during probe, such as: // AT // AT+CGMI -- request manufacturer identification AT+CMGI=? // AT+CGMM -- request manufacturer model // AT%IPSYS? // ATE0 -- echo disable // ATV1 -- verbose result codes OK | ERROR | NO CARRIER // AT+CMEE=1 // ATX4 // AT&C1 // ATE0 // AT+CMEE=1 // AT+GCAP // ATI // AT+CPIN? // AT+CGMM #ifndef IGNORE_AT_COMMANDS #define IGNORE_AT_COMMANDS 1 #endif extern MAX5715 g_MAX5715_device; // defined in main.cpp bool MAX5715_menu_onEOLcommandParser(CmdLine & cmdLine) { switch (cmdLine[0]) { case '0': { // recommended for hex command codes 00..0F // TODO: cmdLine.serial().printf("\r\n 0 ch=? code=? -- CODEn"); // Menu 0 ch=? code=?) CODEn // MAX5715_CODEn(uint8_t channel, uint16_t dacCodeLsbs); // VERIFY: parse strCommandArgs for additional arguments including key=value pairs // TODO: parse command arguments ~ parse_strCommandArgs(strCommandArgs); uint16_t ch = g_MAX5715_device.channelNumber_0_3; if (cmdLine.parse_uint16_dec("ch", ch)) { } uint16_t code = g_MAX5715_device.CODE[ch]; if (cmdLine.parse_uint16_dec("code", code)) { } cmdLine.serial().printf("CODEn ch=%d code=%d", ch, code); g_MAX5715_device.CODEn(ch, code); return true; // command was handled by MAX5715 } break; case '1': { // recommended for hex command codes 10..1F // TODO: cmdLine.serial().printf("\r\n 1 ch=? -- LOADn"); // TODO: parse command arguments ~ parse_strCommandArgs(strCommandArgs); uint16_t ch = g_MAX5715_device.channelNumber_0_3; if (cmdLine.parse_uint16_dec("ch", ch)) { } cmdLine.serial().printf("LOADn ch=%d", ch); g_MAX5715_device.LOADn(ch); return true; // command was handled by MAX5715 } break; case '2': { // recommended for hex command codes 20..2F // TODO: cmdLine.serial().printf("\r\n 2 ch=? code=? -- CODEnLOADall"); // TODO: parse command arguments ~ parse_strCommandArgs(strCommandArgs); uint16_t ch = g_MAX5715_device.channelNumber_0_3; if (cmdLine.parse_uint16_dec("ch", ch)) { } uint16_t code = g_MAX5715_device.CODE[ch]; if (cmdLine.parse_uint16_dec("code", code)) { } cmdLine.serial().printf("CODEnLOADall ch=%d code=%d", ch, code); g_MAX5715_device.CODEnLOADall(ch, code); return true; // command was handled by MAX5715 } break; case '3': { // recommended for hex command codes 30..3F // TODO: cmdLine.serial().printf("\r\n 3 ch=? code=? -- CODEnLOADn"); // TODO: parse command arguments ~ parse_strCommandArgs(strCommandArgs); uint16_t ch = g_MAX5715_device.channelNumber_0_3; uint16_t code; if (cmdLine.parse_uint16_dec("ch", ch)) { } if (cmdLine.parse_uint16_dec("code", code)) { } cmdLine.serial().printf("CODEnLOADn ch=%d code=%d", ch, code); g_MAX5715_device.CODEnLOADn(ch, code); return true; // command was handled by MAX5715 } break; case '4': { // recommended for hex command codes 40..4F switch (cmdLine[1]) { case '0': { // cmdLine.serial().printf("\r\n 40 ch=? -- POWERn_Normal"); cmdLine.serial().printf( "channel_dcba=%d, POWERn_Normal)", g_MAX5715_device.channels_bitmask_DCBA); g_MAX5715_device.POWER(g_MAX5715_device. channels_bitmask_DCBA, MAX5715::POWERn_Normal); return true; // command was handled by MAX5715 } break; case '1': { // cmdLine.serial().printf("\r\n 41 ch=? -- POWERn_PD1k"); cmdLine.serial().printf( "channel_dcba=%d, POWERn_PD1k)", g_MAX5715_device.channels_bitmask_DCBA); g_MAX5715_device.POWER(g_MAX5715_device. channels_bitmask_DCBA, MAX5715::POWERn_PD1k); return true; // command was handled by MAX5715 } break; case '2': { // cmdLine.serial().printf("\r\n 42 ch=? -- POWERn_PD100k"); cmdLine.serial().printf( "channel_dcba=%d, POWERn_PD100k)", g_MAX5715_device.channels_bitmask_DCBA); g_MAX5715_device.POWER(g_MAX5715_device. channels_bitmask_DCBA, MAX5715::POWERn_PD100k); return true; // command was handled by MAX5715 } break; case '3': { // cmdLine.serial().printf("\r\n 43 ch=? -- POWERn_PDHiZ"); cmdLine.serial().printf( "channel_dcba=%d, POWERn_PDHiZ)", g_MAX5715_device.channels_bitmask_DCBA); g_MAX5715_device.POWER(g_MAX5715_device. channels_bitmask_DCBA, MAX5715::POWERn_PDHiZ); return true; // command was handled by MAX5715 } break; } break; } break; case '5': { // recommended for hex command codes 50..5F switch (cmdLine[1]) { case '0': { // cmdLine.serial().printf("\r\n 50 -- SW_CLEAR"); cmdLine.serial().printf("SW_CLEAR"); g_MAX5715_device.SW_CLEAR(); return true; // command was handled by MAX5715 } break; case '1': { // cmdLine.serial().printf("\r\n 51 -- SW_RESET"); cmdLine.serial().printf("SW_RESET"); g_MAX5715_device.SW_RESET(); return true; // command was handled by MAX5715 } break; } } break; case '6': { // recommended for hex command codes 60..6F switch (cmdLine[1]) { case '0': { // cmdLine.serial().printf("\r\n 60 ch=? -- CONFIGn_LATCHED"); cmdLine.serial().printf( "MAX5715_CONFIGn_LATCHED(channel_dcba=%d)", g_MAX5715_device. channels_bitmask_DCBA); g_MAX5715_device.CONFIGn_LATCHED(g_MAX5715_device. channels_bitmask_DCBA); return true; // command was handled by MAX5715 } break; case '1': { // cmdLine.serial().printf("\r\n 61 ch=? -- CONFIGn_TRANSPARENT"); cmdLine.serial().printf( "MAX5715_CONFIGn_TRANSPARENT(channel_dcba=%d)", g_MAX5715_device. channels_bitmask_DCBA); g_MAX5715_device.CONFIGn_TRANSPARENT( g_MAX5715_device.channels_bitmask_DCBA); return true; // command was handled by MAX5715 } break; case '8': { // cmdLine.serial().printf("\r\n 68 -- CONFIGall_LATCHED"); cmdLine.serial().printf( "MAX5715_CONFIGall_LATCHED()"); g_MAX5715_device.CONFIGall_LATCHED(); return true; // command was handled by MAX5715 } break; case '9': { // cmdLine.serial().printf("\r\n 69 -- CONFIGall_TRANSPARENT"); cmdLine.serial().printf( "MAX5715_CONFIGall_TRANSPARENT()"); g_MAX5715_device.CONFIGall_TRANSPARENT(); return true; // command was handled by MAX5715 } break; } } break; case '7': { // recommended for hex command codes 70..7F switch (cmdLine[1]) { case '0': { // cmdLine.serial().printf("\r\n 70 -- REF_EXT"); cmdLine.serial().printf( "MAX5715_REF(REF_EXT)"); g_MAX5715_device.REF(MAX5715::REF_EXT); return true; // command was handled by MAX5715 } break; case '1': { // cmdLine.serial().printf("\r\n 71 -- REF_2V500"); cmdLine.serial().printf( "MAX5715_REF(REF_2V500)"); g_MAX5715_device.REF(MAX5715::REF_2V500); return true; // command was handled by MAX5715 } break; case '2': { // cmdLine.serial().printf("\r\n 72 -- REF_2V048"); cmdLine.serial().printf( "MAX5715_REF(REF_2V048)"); g_MAX5715_device.REF(MAX5715::REF_2V048); return true; // command was handled by MAX5715 } break; case '3': { // cmdLine.serial().printf("\r\n 73 -- REF_4V096"); cmdLine.serial().printf( "MAX5715_REF(REF_4V096)"); g_MAX5715_device.REF(MAX5715::REF_4V096); return true; // command was handled by MAX5715 } break; case '4': { // cmdLine.serial().printf("\r\n 74 -- REF_AlwaysOn_EXT"); cmdLine.serial().printf( "MAX5715_REF(REF_AlwaysOn_EXT)"); g_MAX5715_device.REF(MAX5715::REF_AlwaysOn_EXT); return true; // command was handled by MAX5715 } break; case '5': { // cmdLine.serial().printf("\r\n 75 -- REF_AlwaysOn_2V500"); cmdLine.serial().printf( "MAX5715_REF(REF_AlwaysOn_2V500)"); g_MAX5715_device.REF(MAX5715::REF_AlwaysOn_2V500); return true; // command was handled by MAX5715 } break; case '6': { // cmdLine.serial().printf("\r\n 76 -- REF_AlwaysOn_2V048"); cmdLine.serial().printf( "MAX5715_REF(REF_AlwaysOn_2V048)"); g_MAX5715_device.REF(MAX5715::REF_AlwaysOn_2V048); return true; // command was handled by MAX5715 } break; case '7': { // cmdLine.serial().printf("\r\n 77 -- REF_AlwaysOn_4V096"); cmdLine.serial().printf( "MAX5715_REF(REF_AlwaysOn_4V096)"); g_MAX5715_device.REF(MAX5715::REF_AlwaysOn_4V096); return true; // command was handled by MAX5715 } break; } } break; case '8': { // recommended for hex command codes 80..8F switch (cmdLine[1]) { case '0': { // TODO: cmdLine.serial().printf("\r\n 80 code=? -- CODEall"); // TODO: parse command arguments ~ parse_strCommandArgs(strCommandArgs); g_MAX5715_device.channels_bitmask_DCBA = 0xFF; // store g_MAX5715_device.CODE[allChannels] uint16_t code = g_MAX5715_device.CODE[0]; if (cmdLine.parse_uint16_dec("code", code)) { } cmdLine.serial().printf("CODEall code=%d", code); g_MAX5715_device.CODEall(code); return true; // command was handled by MAX5715 } break; case '1': { // TODO: cmdLine.serial().printf("\r\n 81 -- LOADall"); cmdLine.serial().printf("LOADall"); g_MAX5715_device.LOADall(); return true; // command was handled by MAX5715 } break; case '2': { // TODO: cmdLine.serial().printf("\r\n 82 code=? -- CODEallLOADall"); uint16_t code = g_MAX5715_device.CODE[0]; if (cmdLine.parse_uint16_dec("code", code)) { } cmdLine.serial().printf("CODEallLOADall code=%d", code); g_MAX5715_device.CODEallLOADall(code); return true; // command was handled by MAX5715 } break; } } break; case '9': { // recommended for hex command codes 90..9F } break; case 'a': case 'A': { // recommended for hex command codes A0..AF switch (cmdLine[1]) { case 't': case 'T': #if IGNORE_AT_COMMANDS # if HAS_DAPLINK_SERIAL cmdLine_DAPLINKserial.serial().printf("\r\n ignore AT command \"%s\"\r\n", cmdLine.str()); # endif // HAS_DAPLINK_SERIAL // AT command: skip the prompt to avoid confusing modem detector return false; // command not handled #endif // IGNORE_AT_COMMANDS } } break; case 'b': case 'B': { // recommended for hex command codes B0..BF } break; case 'c': case 'C': { // recommended for hex command codes C0..CF // // MAX5717 menu function to drive MAX5717_CLRb_Pin CLR# // cmdLine.serial().printf("\r\n C -- CLR# pulse CH high CL low"); switch (cmdLine[1]) { default: // g_MAX5715_device.CLRboutputPulseLow(); g_MAX5715_device.CLRboutputValue(1); g_MAX5715_device.CLRboutputValue(0); g_MAX5715_device.CLRboutputValue(1); break; case 'H': case 'h': case '1': g_MAX5715_device.CLRboutputValue(1); // GPIOoutputCLRb(int isLogicHigh); break; case 'L': case 'l': case '0': g_MAX5715_device.CLRboutputValue(0); // GPIOoutputCLRb(int isLogicHigh); break; } return true; // command was handled by MAX5715 } break; case 'd': case 'D': { // recommended for hex command codes D0..DF } break; case 'e': case 'E': { // recommended for hex command codes E0..EF } break; case 'f': case 'F': { // recommended for hex command codes F0..FF } break; case 'l': case 'L': { // // MAX5717 menu function to drive MAX5717_LDACb_Pin LDAC# // cmdLine.serial().printf("\r\n L -- LDAC# pulse LH high LL low"); switch (cmdLine[1]) { default: // g_MAX5715_device.LDACboutputPulseLow(); g_MAX5715_device.LDACboutputValue(1); g_MAX5715_device.LDACboutputValue(0); g_MAX5715_device.LDACboutputValue(1); break; case 'H': case 'h': case '1': g_MAX5715_device.LDACboutputValue(1); // GPIOoutputLDACb(int isLogicHigh); break; case 'L': case 'l': case '0': g_MAX5715_device.LDACboutputValue(0); // GPIOoutputLDACb(int isLogicHigh); break; } return true; // command was handled by MAX5715 } break; case 'x': case 'X': { } break; case 'y': case 'Y': { } break; case 'z': case 'Z': { } break; case '~': // TODO: IGNORE_AT_COMMANDS -- ignore ~~~ modem command { // TODO: '~' is not recommended for menu commands, interferes with ssh switch (cmdLine[1]) { default: { #if IGNORE_AT_COMMANDS # if HAS_DAPLINK_SERIAL cmdLine_DAPLINKserial.serial().printf("\r\n ignore AT command \"%s\"\r\n", cmdLine.str()); # endif // HAS_DAPLINK_SERIAL #endif // IGNORE_AT_COMMANDS } } } break; case '+': // TODO: IGNORE_AT_COMMANDS -- ignore +++ modem command { #if IGNORE_AT_COMMANDS # if HAS_DAPLINK_SERIAL cmdLine_DAPLINKserial.serial().printf("\r\n ignore AT command \"%s\"\r\n", cmdLine.str()); # endif // HAS_DAPLINK_SERIAL #endif // IGNORE_AT_COMMANDS } break; case '@': { // // // // Menu @ -- print device configuration // TODO: cmdLine.serial().printf("\r\n @ -- print MAX5715 configuration"); // // // print shadow register configuration // // shadow of write-only register CODE dddd_dddd_dddd_0000 //~ int16_t CMD_1000_CODE; int index = 0; for (index = 0; index < 4; index++) { cmdLine.serial().printf("CODE %c=0x%4.4x MAX5715_VoltageOfCode(%d)=%5.3fV\r\n", (char)('A' + index), (g_MAX5715_device.Shadow_0010_nnnn_CODE[index] & 0xFFFF), g_MAX5715_device.CODE[index], g_MAX5715_device.VoltageOfCode(g_MAX5715_device.CODE[index]) ); } // cmdLine.serial().printf("\r\n"); // // // Menu @) print MAX5715 configuration AND g_MAX5715_device globals // #if 1 // SUPPORT_CHANNELS cmdLine.serial().printf("channelNumber_0_3=%d channels_bitmask_DCBA=%d\r\n", (g_MAX5715_device.channelNumber_0_3 & 0xFFFF), (g_MAX5715_device.channels_bitmask_DCBA & 0xFFFF)); #endif // SUPPORT_CHANNELS // cmdLine.serial().printf("VRef=%5.3fV\r\n", g_MAX5715_device.VRef); // dtostrf width and precision: 3.3V / 1024 LSB = 0.00322265625 volts per LSB return true; // command was handled by MAX5715 } break; } // end switch (cmdLine[0]) return false; // command not handled by MAX5715 } // end bool MAX5715_menu_onEOLcommandParser(CmdLine & cmdLine)