minimalist hardware testing support

Dependents:   MAX5715BOB_Tester MAX11131BOB_Tester MAX5171BOB_Tester MAX11410BOB_Tester ... more

Committer:
whismanoid
Date:
Thu Jan 30 23:56:17 2020 +0000
Revision:
5:67a1cd5a67cc
Parent:
3:080aa1bb1bc0
Child:
6:3d50dda3d0eb
support double(uint32_t) FunctionCall_Expect

Who changed what in which revision?

UserRevisionLine numberNew contents of line
whismanoid 0:93d4119d3f14 1 // /*******************************************************************************
whismanoid 0:93d4119d3f14 2 // * Copyright (C) 2019 Maxim Integrated Products, Inc., All Rights Reserved.
whismanoid 0:93d4119d3f14 3 // *
whismanoid 0:93d4119d3f14 4 // * Permission is hereby granted, free of charge, to any person obtaining a
whismanoid 0:93d4119d3f14 5 // * copy of this software and associated documentation files (the "Software"),
whismanoid 0:93d4119d3f14 6 // * to deal in the Software without restriction, including without limitation
whismanoid 0:93d4119d3f14 7 // * the rights to use, copy, modify, merge, publish, distribute, sublicense,
whismanoid 0:93d4119d3f14 8 // * and/or sell copies of the Software, and to permit persons to whom the
whismanoid 0:93d4119d3f14 9 // * Software is furnished to do so, subject to the following conditions:
whismanoid 0:93d4119d3f14 10 // *
whismanoid 0:93d4119d3f14 11 // * The above copyright notice and this permission notice shall be included
whismanoid 0:93d4119d3f14 12 // * in all copies or substantial portions of the Software.
whismanoid 0:93d4119d3f14 13 // *
whismanoid 0:93d4119d3f14 14 // * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
whismanoid 0:93d4119d3f14 15 // * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
whismanoid 0:93d4119d3f14 16 // * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
whismanoid 0:93d4119d3f14 17 // * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
whismanoid 0:93d4119d3f14 18 // * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
whismanoid 0:93d4119d3f14 19 // * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
whismanoid 0:93d4119d3f14 20 // * OTHER DEALINGS IN THE SOFTWARE.
whismanoid 0:93d4119d3f14 21 // *
whismanoid 0:93d4119d3f14 22 // * Except as contained in this notice, the name of Maxim Integrated
whismanoid 0:93d4119d3f14 23 // * Products, Inc. shall not be used except as stated in the Maxim Integrated
whismanoid 0:93d4119d3f14 24 // * Products, Inc. Branding Policy.
whismanoid 0:93d4119d3f14 25 // *
whismanoid 0:93d4119d3f14 26 // * The mere transfer of this software does not imply any licenses
whismanoid 0:93d4119d3f14 27 // * of trade secrets, proprietary technology, copyrights, patents,
whismanoid 0:93d4119d3f14 28 // * trademarks, maskwork rights, or any other form of intellectual
whismanoid 0:93d4119d3f14 29 // * property whatsoever. Maxim Integrated Products, Inc. retains all
whismanoid 0:93d4119d3f14 30 // * ownership rights.
whismanoid 0:93d4119d3f14 31 // *******************************************************************************
whismanoid 0:93d4119d3f14 32 // */
whismanoid 0:93d4119d3f14 33 // *********************************************************************
whismanoid 0:93d4119d3f14 34 // @file MaximTinyTester.cpp
whismanoid 0:93d4119d3f14 35 // *********************************************************************
whismanoid 0:93d4119d3f14 36
whismanoid 0:93d4119d3f14 37 #include "MaximTinyTester.h"
whismanoid 0:93d4119d3f14 38
whismanoid 3:080aa1bb1bc0 39 #ifndef LED_ON
whismanoid 3:080aa1bb1bc0 40 # define LED_ON 0
whismanoid 3:080aa1bb1bc0 41 #endif
whismanoid 3:080aa1bb1bc0 42 #ifndef LED_OFF
whismanoid 3:080aa1bb1bc0 43 # define LED_OFF 1
whismanoid 3:080aa1bb1bc0 44 #endif
whismanoid 3:080aa1bb1bc0 45
whismanoid 0:93d4119d3f14 46 MaximTinyTester::MaximTinyTester(CmdLine& AssociatedCmdLine,
whismanoid 0:93d4119d3f14 47 AnalogIn& analogInPin0,
whismanoid 0:93d4119d3f14 48 AnalogIn& analogInPin1,
whismanoid 0:93d4119d3f14 49 AnalogIn& analogInPin2,
whismanoid 0:93d4119d3f14 50 AnalogIn& analogInPin3,
whismanoid 0:93d4119d3f14 51 AnalogIn& analogInPin4,
whismanoid 1:f98ddb04f9e0 52 AnalogIn& analogInPin5,
whismanoid 1:f98ddb04f9e0 53 DigitalOut& m_RFailLED,
whismanoid 1:f98ddb04f9e0 54 DigitalOut& m_GPassLED,
whismanoid 1:f98ddb04f9e0 55 DigitalOut& m_BBusyLED)
whismanoid 0:93d4119d3f14 56 : associatedCmdLine(AssociatedCmdLine)
whismanoid 0:93d4119d3f14 57 , analogInPin0(analogInPin0)
whismanoid 0:93d4119d3f14 58 , analogInPin1(analogInPin1)
whismanoid 0:93d4119d3f14 59 , analogInPin2(analogInPin2)
whismanoid 0:93d4119d3f14 60 , analogInPin3(analogInPin3)
whismanoid 0:93d4119d3f14 61 , analogInPin4(analogInPin4)
whismanoid 0:93d4119d3f14 62 , analogInPin5(analogInPin5)
whismanoid 1:f98ddb04f9e0 63 , m_RFailLED(m_RFailLED)
whismanoid 1:f98ddb04f9e0 64 , m_GPassLED(m_GPassLED)
whismanoid 1:f98ddb04f9e0 65 , m_BBusyLED(m_BBusyLED)
whismanoid 0:93d4119d3f14 66 {
whismanoid 0:93d4119d3f14 67 nPass = 0;
whismanoid 0:93d4119d3f14 68 nFail = 0;
whismanoid 0:93d4119d3f14 69 err_threshold = 0.030; // 30mV
whismanoid 0:93d4119d3f14 70 input_timeout_time_msec = 250;
whismanoid 0:93d4119d3f14 71 settle_time_msec = 250;
whismanoid 1:f98ddb04f9e0 72 blink_time_msec = 75;
whismanoid 0:93d4119d3f14 73 analogInPin_fullScaleVoltage[0] = 3.300;
whismanoid 0:93d4119d3f14 74 analogInPin_fullScaleVoltage[1] = 3.300;
whismanoid 0:93d4119d3f14 75 analogInPin_fullScaleVoltage[2] = 3.300;
whismanoid 0:93d4119d3f14 76 analogInPin_fullScaleVoltage[3] = 3.300;
whismanoid 0:93d4119d3f14 77 analogInPin_fullScaleVoltage[4] = 3.300;
whismanoid 0:93d4119d3f14 78 analogInPin_fullScaleVoltage[5] = 3.300;
whismanoid 0:93d4119d3f14 79 }
whismanoid 0:93d4119d3f14 80
whismanoid 0:93d4119d3f14 81 /** reset the pass/fail counters.
whismanoid 0:93d4119d3f14 82 *
whismanoid 0:93d4119d3f14 83 * @post nPass and nFail are reset to 0
whismanoid 0:93d4119d3f14 84 *
whismanoid 0:93d4119d3f14 85 */
whismanoid 0:93d4119d3f14 86 void MaximTinyTester::clear(void)
whismanoid 0:93d4119d3f14 87 {
whismanoid 0:93d4119d3f14 88 nPass = 0;
whismanoid 0:93d4119d3f14 89 nFail = 0;
whismanoid 3:080aa1bb1bc0 90 // PinName NC means NOT_CONNECTED; DigitalOut::is_connected() returns false
whismanoid 3:080aa1bb1bc0 91 if (m_RFailLED.is_connected()) {
whismanoid 3:080aa1bb1bc0 92 m_RFailLED = LED_ON;
whismanoid 3:080aa1bb1bc0 93 }
whismanoid 3:080aa1bb1bc0 94 if (m_GPassLED.is_connected()) {
whismanoid 3:080aa1bb1bc0 95 m_GPassLED = LED_ON;
whismanoid 3:080aa1bb1bc0 96 }
whismanoid 3:080aa1bb1bc0 97 if (m_BBusyLED.is_connected()) {
whismanoid 3:080aa1bb1bc0 98 m_BBusyLED = LED_OFF;
whismanoid 3:080aa1bb1bc0 99 }
whismanoid 0:93d4119d3f14 100 }
whismanoid 0:93d4119d3f14 101
whismanoid 0:93d4119d3f14 102 /** report that a test has completed with success.
whismanoid 0:93d4119d3f14 103 *
whismanoid 0:93d4119d3f14 104 * @post nPass is increased by 1
whismanoid 0:93d4119d3f14 105 *
whismanoid 0:93d4119d3f14 106 */
whismanoid 0:93d4119d3f14 107 void MaximTinyTester::PASS()
whismanoid 0:93d4119d3f14 108 {
whismanoid 0:93d4119d3f14 109 ++nPass;
whismanoid 1:f98ddb04f9e0 110 // m_RFailLED = LED_ON; m_GPassLED = LED_ON; m_BBusyLED = LED_ON;
whismanoid 1:f98ddb04f9e0 111 // pulse blue LED during test to indicate activity
whismanoid 3:080aa1bb1bc0 112 if (m_GPassLED.is_connected()) {
whismanoid 3:080aa1bb1bc0 113 m_GPassLED = LED_OFF;
whismanoid 3:080aa1bb1bc0 114 }
whismanoid 3:080aa1bb1bc0 115 if (m_BBusyLED.is_connected()) {
whismanoid 3:080aa1bb1bc0 116 m_BBusyLED = LED_ON;
whismanoid 3:080aa1bb1bc0 117 }
whismanoid 1:f98ddb04f9e0 118 wait_ms(blink_time_msec); // delay
whismanoid 3:080aa1bb1bc0 119 if (m_GPassLED.is_connected()) {
whismanoid 3:080aa1bb1bc0 120 m_GPassLED = LED_ON;
whismanoid 3:080aa1bb1bc0 121 }
whismanoid 3:080aa1bb1bc0 122 if (m_BBusyLED.is_connected()) {
whismanoid 3:080aa1bb1bc0 123 m_BBusyLED = LED_OFF;
whismanoid 3:080aa1bb1bc0 124 }
whismanoid 1:f98ddb04f9e0 125 wait_ms(blink_time_msec); // delay
whismanoid 0:93d4119d3f14 126 associatedCmdLine.serial().printf("\r\n+PASS ");
whismanoid 0:93d4119d3f14 127 }
whismanoid 0:93d4119d3f14 128
whismanoid 0:93d4119d3f14 129 /** report that a test has completed with failure.
whismanoid 0:93d4119d3f14 130 *
whismanoid 0:93d4119d3f14 131 * @post nFail is increased by 1
whismanoid 0:93d4119d3f14 132 *
whismanoid 0:93d4119d3f14 133 */
whismanoid 0:93d4119d3f14 134 void MaximTinyTester::FAIL()
whismanoid 0:93d4119d3f14 135 {
whismanoid 0:93d4119d3f14 136 ++nFail;
whismanoid 1:f98ddb04f9e0 137 // m_RFailLED = LED_ON; m_GPassLED = LED_ON; m_BBusyLED = LED_ON;
whismanoid 1:f98ddb04f9e0 138 // pulse blue LED during test to indicate activity
whismanoid 3:080aa1bb1bc0 139 if (m_RFailLED.is_connected()) {
whismanoid 3:080aa1bb1bc0 140 m_RFailLED = LED_OFF;
whismanoid 3:080aa1bb1bc0 141 }
whismanoid 3:080aa1bb1bc0 142 if (m_BBusyLED.is_connected()) {
whismanoid 3:080aa1bb1bc0 143 m_BBusyLED = LED_ON;
whismanoid 3:080aa1bb1bc0 144 }
whismanoid 1:f98ddb04f9e0 145 wait_ms(blink_time_msec); // delay
whismanoid 3:080aa1bb1bc0 146 if (m_RFailLED.is_connected()) {
whismanoid 3:080aa1bb1bc0 147 m_RFailLED = LED_ON;
whismanoid 3:080aa1bb1bc0 148 }
whismanoid 3:080aa1bb1bc0 149 if (m_BBusyLED.is_connected()) {
whismanoid 3:080aa1bb1bc0 150 m_BBusyLED = LED_OFF;
whismanoid 3:080aa1bb1bc0 151 }
whismanoid 1:f98ddb04f9e0 152 wait_ms(blink_time_msec); // delay
whismanoid 0:93d4119d3f14 153 associatedCmdLine.serial().printf("\r\n-FAIL ");
whismanoid 0:93d4119d3f14 154 #if USE_LEDS
whismanoid 0:93d4119d3f14 155 rgb_led.red(); // diagnostic rbg led RED
whismanoid 0:93d4119d3f14 156 //~ rgb_led.green(); // diagnostic rbg led GREEN
whismanoid 0:93d4119d3f14 157 //~ rgb_led.blue(); // diagnostic rbg led BLUE
whismanoid 0:93d4119d3f14 158 //~ rgb_led.white(); // diagnostic rbg led RED+GREEN+BLUE=WHITE
whismanoid 0:93d4119d3f14 159 //~ rgb_led.cyan(); // diagnostic rbg led GREEN+BLUE=CYAN
whismanoid 0:93d4119d3f14 160 //~ rgb_led.magenta(); // diagnostic rbg led RED+BLUE=MAGENTA
whismanoid 0:93d4119d3f14 161 //~ rgb_led.yellow(); // diagnostic rbg led RED+GREEN=YELLOW
whismanoid 0:93d4119d3f14 162 //~ rgb_led.black(); // diagnostic rbg led BLACK
whismanoid 0:93d4119d3f14 163 #endif // USE_LEDS
whismanoid 0:93d4119d3f14 164 }
whismanoid 0:93d4119d3f14 165
whismanoid 0:93d4119d3f14 166 /** Report number of pass and number of fail test results
whismanoid 0:93d4119d3f14 167 */
whismanoid 0:93d4119d3f14 168 void MaximTinyTester::Report_Summary(void)
whismanoid 0:93d4119d3f14 169 {
whismanoid 0:93d4119d3f14 170 associatedCmdLine.serial().printf("\r\nSummary: %d PASS %d FAIL\r\n", nPass, nFail);
whismanoid 0:93d4119d3f14 171 //~ associatedCmdLine.serial().printf(g_SelfTest_nPass);
whismanoid 0:93d4119d3f14 172 //~ associatedCmdLine.serial().printf(" PASS ");
whismanoid 0:93d4119d3f14 173 //~ associatedCmdLine.serial().printf(g_SelfTest_nFail);
whismanoid 0:93d4119d3f14 174 //~ associatedCmdLine.serial().printf(" FAIL\r\n");
whismanoid 0:93d4119d3f14 175 if (nFail == 0) {
whismanoid 3:080aa1bb1bc0 176 if (m_RFailLED.is_connected()) {
whismanoid 3:080aa1bb1bc0 177 m_RFailLED = LED_OFF;
whismanoid 3:080aa1bb1bc0 178 }
whismanoid 3:080aa1bb1bc0 179 if (m_GPassLED.is_connected()) {
whismanoid 3:080aa1bb1bc0 180 m_GPassLED = LED_ON;
whismanoid 3:080aa1bb1bc0 181 }
whismanoid 3:080aa1bb1bc0 182 if (m_BBusyLED.is_connected()) {
whismanoid 3:080aa1bb1bc0 183 m_BBusyLED = LED_OFF;
whismanoid 3:080aa1bb1bc0 184 }
whismanoid 1:f98ddb04f9e0 185 //~ rgb_led.green(); // diagnostic rbg led GREEN
whismanoid 1:f98ddb04f9e0 186 }
whismanoid 1:f98ddb04f9e0 187 else {
whismanoid 3:080aa1bb1bc0 188 if (m_RFailLED.is_connected()) {
whismanoid 3:080aa1bb1bc0 189 m_RFailLED = LED_ON;
whismanoid 3:080aa1bb1bc0 190 }
whismanoid 3:080aa1bb1bc0 191 if (m_GPassLED.is_connected()) {
whismanoid 3:080aa1bb1bc0 192 m_GPassLED = LED_OFF;
whismanoid 3:080aa1bb1bc0 193 }
whismanoid 3:080aa1bb1bc0 194 if (m_BBusyLED.is_connected()) {
whismanoid 3:080aa1bb1bc0 195 m_BBusyLED = LED_OFF;
whismanoid 3:080aa1bb1bc0 196 }
whismanoid 0:93d4119d3f14 197 //~ rgb_led.red(); // diagnostic rbg led RED
whismanoid 0:93d4119d3f14 198 }
whismanoid 0:93d4119d3f14 199 }
whismanoid 0:93d4119d3f14 200
whismanoid 0:93d4119d3f14 201 /** Test a software function
whismanoid 0:93d4119d3f14 202 *
whismanoid 0:93d4119d3f14 203 * @param[in] nameOfFunctionUnderTest is the user-facing name of the function under test
whismanoid 0:93d4119d3f14 204 *
whismanoid 0:93d4119d3f14 205 * @param[in] functionUnderTest points to the function under test
whismanoid 0:93d4119d3f14 206 *
whismanoid 0:93d4119d3f14 207 * @param[in] voltageV is a test argument given to the function under test
whismanoid 0:93d4119d3f14 208 *
whismanoid 0:93d4119d3f14 209 * @param[in] expect_result contains the expected result
whismanoid 0:93d4119d3f14 210 *
whismanoid 0:93d4119d3f14 211 * @post nPass and nFail counters are updated
whismanoid 0:93d4119d3f14 212 *
whismanoid 0:93d4119d3f14 213 * @return true if success, false if test failed
whismanoid 0:93d4119d3f14 214 *
whismanoid 0:93d4119d3f14 215 */
whismanoid 0:93d4119d3f14 216 bool MaximTinyTester::FunctionCall_Expect(const char *nameOfFunctionUnderTest,
whismanoid 0:93d4119d3f14 217 Callback<uint16_t(double)> functionUnderTest,
whismanoid 0:93d4119d3f14 218 double voltageV, uint16_t expect_result)
whismanoid 0:93d4119d3f14 219 {
whismanoid 0:93d4119d3f14 220 uint16_t actual_result = functionUnderTest(voltageV);
whismanoid 0:93d4119d3f14 221 if (actual_result != expect_result)
whismanoid 0:93d4119d3f14 222 {
whismanoid 0:93d4119d3f14 223 FAIL();
whismanoid 0:93d4119d3f14 224 associatedCmdLine.serial().printf("%s(%6.4fV)", nameOfFunctionUnderTest, voltageV);
whismanoid 0:93d4119d3f14 225 associatedCmdLine.serial().printf(" expect %d", expect_result);
whismanoid 0:93d4119d3f14 226 associatedCmdLine.serial().printf(" but got %d", actual_result);
whismanoid 0:93d4119d3f14 227 return false;
whismanoid 0:93d4119d3f14 228 }
whismanoid 0:93d4119d3f14 229 else
whismanoid 0:93d4119d3f14 230 {
whismanoid 0:93d4119d3f14 231 PASS();
whismanoid 0:93d4119d3f14 232 associatedCmdLine.serial().printf("%s(%6.4fV)", nameOfFunctionUnderTest, voltageV);
whismanoid 0:93d4119d3f14 233 associatedCmdLine.serial().printf(" expect %d", expect_result);
whismanoid 0:93d4119d3f14 234 return true;
whismanoid 0:93d4119d3f14 235 }
whismanoid 0:93d4119d3f14 236 //~ associatedCmdLine.serial().printf("\r\n");
whismanoid 0:93d4119d3f14 237 }
whismanoid 0:93d4119d3f14 238
whismanoid 0:93d4119d3f14 239 /** Test a software function
whismanoid 0:93d4119d3f14 240 *
whismanoid 0:93d4119d3f14 241 * @param[in] nameOfFunctionUnderTest is the user-facing name of the function under test
whismanoid 0:93d4119d3f14 242 *
whismanoid 0:93d4119d3f14 243 * @param[in] functionUnderTest points to the function under test
whismanoid 0:93d4119d3f14 244 *
whismanoid 0:93d4119d3f14 245 * @param[in] value_u16 is a test argument given to the function under test
whismanoid 0:93d4119d3f14 246 *
whismanoid 0:93d4119d3f14 247 * @param[in] expect_result contains the expected result
whismanoid 0:93d4119d3f14 248 *
whismanoid 0:93d4119d3f14 249 * @pre err_threshold determines how closely the result must match the expected value
whismanoid 0:93d4119d3f14 250 *
whismanoid 0:93d4119d3f14 251 * @post nPass and nFail counters are updated
whismanoid 0:93d4119d3f14 252 *
whismanoid 0:93d4119d3f14 253 * @return true if success, false if test failed
whismanoid 0:93d4119d3f14 254 *
whismanoid 0:93d4119d3f14 255 */
whismanoid 0:93d4119d3f14 256 bool MaximTinyTester::FunctionCall_Expect(const char *nameOfFunctionUnderTest,
whismanoid 0:93d4119d3f14 257 Callback<double(uint16_t)> functionUnderTest,
whismanoid 0:93d4119d3f14 258 uint16_t value_u16, double expect_result)
whismanoid 0:93d4119d3f14 259 {
whismanoid 0:93d4119d3f14 260 double actual_result = functionUnderTest(value_u16);
whismanoid 0:93d4119d3f14 261 double err_result = (actual_result - expect_result);
whismanoid 0:93d4119d3f14 262 if (( -err_threshold < err_result) && ( err_result < err_threshold))
whismanoid 0:93d4119d3f14 263 {
whismanoid 0:93d4119d3f14 264 PASS();
whismanoid 0:93d4119d3f14 265 associatedCmdLine.serial().printf("%s(%d)", nameOfFunctionUnderTest, value_u16);
whismanoid 0:93d4119d3f14 266 associatedCmdLine.serial().printf(" expect %6.6f", expect_result);
whismanoid 0:93d4119d3f14 267 return true;
whismanoid 0:93d4119d3f14 268 }
whismanoid 0:93d4119d3f14 269 else
whismanoid 0:93d4119d3f14 270 {
whismanoid 0:93d4119d3f14 271 FAIL();
whismanoid 0:93d4119d3f14 272 associatedCmdLine.serial().printf("%s(%d)", nameOfFunctionUnderTest, value_u16);
whismanoid 0:93d4119d3f14 273 associatedCmdLine.serial().printf(" expect %6.6f", expect_result);
whismanoid 0:93d4119d3f14 274 associatedCmdLine.serial().printf(" but got %6.6f", actual_result);
whismanoid 0:93d4119d3f14 275 associatedCmdLine.serial().printf(" err=%6.6f", err_result);
whismanoid 0:93d4119d3f14 276 return false;
whismanoid 0:93d4119d3f14 277 }
whismanoid 0:93d4119d3f14 278 //~ associatedCmdLine.serial().printf("\r\n");
whismanoid 0:93d4119d3f14 279 }
whismanoid 0:93d4119d3f14 280
whismanoid 5:67a1cd5a67cc 281 /** Test a software function
whismanoid 5:67a1cd5a67cc 282 *
whismanoid 5:67a1cd5a67cc 283 * @param[in] nameOfFunctionUnderTest is the user-facing name of the function under test
whismanoid 5:67a1cd5a67cc 284 *
whismanoid 5:67a1cd5a67cc 285 * @param[in] functionUnderTest points to the function under test
whismanoid 5:67a1cd5a67cc 286 *
whismanoid 5:67a1cd5a67cc 287 * @param[in] value_u32 is a test argument given to the function under test
whismanoid 5:67a1cd5a67cc 288 *
whismanoid 5:67a1cd5a67cc 289 * @param[in] expect_result contains the expected result
whismanoid 5:67a1cd5a67cc 290 *
whismanoid 5:67a1cd5a67cc 291 * @pre err_threshold determines how closely the result must match the expected value
whismanoid 5:67a1cd5a67cc 292 *
whismanoid 5:67a1cd5a67cc 293 * @post nPass and nFail counters are updated
whismanoid 5:67a1cd5a67cc 294 *
whismanoid 5:67a1cd5a67cc 295 * @return true if success, false if test failed
whismanoid 5:67a1cd5a67cc 296 *
whismanoid 5:67a1cd5a67cc 297 */
whismanoid 5:67a1cd5a67cc 298 bool MaximTinyTester::FunctionCall_Expect(const char *nameOfFunctionUnderTest,
whismanoid 5:67a1cd5a67cc 299 Callback<double(uint32_t)> functionUnderTest,
whismanoid 5:67a1cd5a67cc 300 uint32_t value_u32, double expect_result)
whismanoid 5:67a1cd5a67cc 301 {
whismanoid 5:67a1cd5a67cc 302 double actual_result = functionUnderTest(value_u32);
whismanoid 5:67a1cd5a67cc 303 double err_result = (actual_result - expect_result);
whismanoid 5:67a1cd5a67cc 304 if (( -err_threshold < err_result) && ( err_result < err_threshold))
whismanoid 5:67a1cd5a67cc 305 {
whismanoid 5:67a1cd5a67cc 306 PASS();
whismanoid 5:67a1cd5a67cc 307 associatedCmdLine.serial().printf("%s(%d)", nameOfFunctionUnderTest, value_u32);
whismanoid 5:67a1cd5a67cc 308 associatedCmdLine.serial().printf(" expect %6.6f", expect_result);
whismanoid 5:67a1cd5a67cc 309 return true;
whismanoid 5:67a1cd5a67cc 310 }
whismanoid 5:67a1cd5a67cc 311 else
whismanoid 5:67a1cd5a67cc 312 {
whismanoid 5:67a1cd5a67cc 313 FAIL();
whismanoid 5:67a1cd5a67cc 314 associatedCmdLine.serial().printf("%s(%d)", nameOfFunctionUnderTest, value_u32);
whismanoid 5:67a1cd5a67cc 315 associatedCmdLine.serial().printf(" expect %6.6f", expect_result);
whismanoid 5:67a1cd5a67cc 316 associatedCmdLine.serial().printf(" but got %6.6f", actual_result);
whismanoid 5:67a1cd5a67cc 317 associatedCmdLine.serial().printf(" err=%6.6f", err_result);
whismanoid 5:67a1cd5a67cc 318 return false;
whismanoid 5:67a1cd5a67cc 319 }
whismanoid 5:67a1cd5a67cc 320 //~ associatedCmdLine.serial().printf("\r\n");
whismanoid 5:67a1cd5a67cc 321 }
whismanoid 5:67a1cd5a67cc 322
whismanoid 5:67a1cd5a67cc 323 /** Test a software function
whismanoid 5:67a1cd5a67cc 324 *
whismanoid 5:67a1cd5a67cc 325 * @param[in] nameOfFunctionUnderTest is the user-facing name of the function under test
whismanoid 5:67a1cd5a67cc 326 *
whismanoid 5:67a1cd5a67cc 327 * @param[in] functionUnderTest points to the function under test
whismanoid 5:67a1cd5a67cc 328 *
whismanoid 5:67a1cd5a67cc 329 * @param[in] value_d is a test argument given to the function under test
whismanoid 5:67a1cd5a67cc 330 *
whismanoid 5:67a1cd5a67cc 331 * @param[in] expect_result contains the expected result
whismanoid 5:67a1cd5a67cc 332 *
whismanoid 5:67a1cd5a67cc 333 * @pre err_threshold determines how closely the result must match the expected value
whismanoid 5:67a1cd5a67cc 334 *
whismanoid 5:67a1cd5a67cc 335 * @post nPass and nFail counters are updated
whismanoid 5:67a1cd5a67cc 336 *
whismanoid 5:67a1cd5a67cc 337 * @return true if success, false if test failed
whismanoid 5:67a1cd5a67cc 338 *
whismanoid 5:67a1cd5a67cc 339 */
whismanoid 5:67a1cd5a67cc 340 bool MaximTinyTester::FunctionCall_Expect(const char *nameOfFunctionUnderTest,
whismanoid 5:67a1cd5a67cc 341 Callback<double(double)> functionUnderTest,
whismanoid 5:67a1cd5a67cc 342 double value_d, double expect_result)
whismanoid 5:67a1cd5a67cc 343 {
whismanoid 5:67a1cd5a67cc 344 double actual_result = functionUnderTest(value_d);
whismanoid 5:67a1cd5a67cc 345 double err_result = (actual_result - expect_result);
whismanoid 5:67a1cd5a67cc 346 if (( -err_threshold < err_result) && ( err_result < err_threshold))
whismanoid 5:67a1cd5a67cc 347 {
whismanoid 5:67a1cd5a67cc 348 PASS();
whismanoid 5:67a1cd5a67cc 349 associatedCmdLine.serial().printf("%s(%d)", nameOfFunctionUnderTest, value_d);
whismanoid 5:67a1cd5a67cc 350 associatedCmdLine.serial().printf(" expect %6.6f", expect_result);
whismanoid 5:67a1cd5a67cc 351 return true;
whismanoid 5:67a1cd5a67cc 352 }
whismanoid 5:67a1cd5a67cc 353 else
whismanoid 5:67a1cd5a67cc 354 {
whismanoid 5:67a1cd5a67cc 355 FAIL();
whismanoid 5:67a1cd5a67cc 356 associatedCmdLine.serial().printf("%s(%d)", nameOfFunctionUnderTest, value_d);
whismanoid 5:67a1cd5a67cc 357 associatedCmdLine.serial().printf(" expect %6.6f", expect_result);
whismanoid 5:67a1cd5a67cc 358 associatedCmdLine.serial().printf(" but got %6.6f", actual_result);
whismanoid 5:67a1cd5a67cc 359 associatedCmdLine.serial().printf(" err=%6.6f", err_result);
whismanoid 5:67a1cd5a67cc 360 return false;
whismanoid 5:67a1cd5a67cc 361 }
whismanoid 5:67a1cd5a67cc 362 //~ associatedCmdLine.serial().printf("\r\n");
whismanoid 5:67a1cd5a67cc 363 }
whismanoid 5:67a1cd5a67cc 364
whismanoid 0:93d4119d3f14 365 /** Test an analog voltage input to the platform (output from the device under test)
whismanoid 0:93d4119d3f14 366 *
whismanoid 0:93d4119d3f14 367 * @param[in] expect_result contains the expected voltage
whismanoid 0:93d4119d3f14 368 *
whismanoid 0:93d4119d3f14 369 * @pre err_threshold determines how closely the result must match the expected value
whismanoid 0:93d4119d3f14 370 *
whismanoid 0:93d4119d3f14 371 * @post nPass and nFail counters are updated
whismanoid 0:93d4119d3f14 372 *
whismanoid 0:93d4119d3f14 373 * @return true if success, false if test failed
whismanoid 0:93d4119d3f14 374 *
whismanoid 0:93d4119d3f14 375 */
whismanoid 0:93d4119d3f14 376 bool MaximTinyTester::AnalogIn0_Read_Expect_voltageV(double expect_result)
whismanoid 0:93d4119d3f14 377 {
whismanoid 0:93d4119d3f14 378 float adc_full_scale_voltage = analogInPin_fullScaleVoltage[0];
whismanoid 2:9b20cadbfa15 379 // skip if expect_result exceeds ADC full scale
whismanoid 2:9b20cadbfa15 380 if (adc_full_scale_voltage < expect_result)
whismanoid 2:9b20cadbfa15 381 {
whismanoid 2:9b20cadbfa15 382 // print a warning message that we can't perform the measurement
whismanoid 2:9b20cadbfa15 383 associatedCmdLine.serial().printf("\r\n..... AIN full scale %1.3fV < expect %6.6f cannot perform measurement",
whismanoid 2:9b20cadbfa15 384 adc_full_scale_voltage, expect_result);
whismanoid 2:9b20cadbfa15 385 return true; // ignore, test conditions are invalid; do not call PASS() or FAIL()
whismanoid 2:9b20cadbfa15 386 }
whismanoid 0:93d4119d3f14 387
whismanoid 0:93d4119d3f14 388 // TODO: tinyTester.Analog_Input_Expect_V replaces SelfTest_AnalogInput_Expect_ch_V
whismanoid 0:93d4119d3f14 389 // Platform board uses simple analog inputs
whismanoid 0:93d4119d3f14 390 float normValue_0_1 = analogInPin0.read();
whismanoid 0:93d4119d3f14 391 double actual_result = normValue_0_1 * adc_full_scale_voltage;
whismanoid 0:93d4119d3f14 392 double err_result = (actual_result - expect_result);
whismanoid 0:93d4119d3f14 393 if (( -err_threshold < err_result) && ( err_result < err_threshold))
whismanoid 0:93d4119d3f14 394 {
whismanoid 0:93d4119d3f14 395 PASS();
whismanoid 0:93d4119d3f14 396 //~ SelfTest_print_VoltageOfCode(cmdLine, value_u12);
whismanoid 0:93d4119d3f14 397 // Platform board uses simple analog inputs
whismanoid 0:93d4119d3f14 398 associatedCmdLine.serial().printf("AIN0 = %7.3f%% = %1.3fV ",
whismanoid 0:93d4119d3f14 399 normValue_0_1 * 100.0,
whismanoid 0:93d4119d3f14 400 normValue_0_1 * adc_full_scale_voltage
whismanoid 0:93d4119d3f14 401 );
whismanoid 0:93d4119d3f14 402 //
whismanoid 0:93d4119d3f14 403 associatedCmdLine.serial().printf(" expect %6.6f +/- %6.6f", expect_result, err_threshold);
whismanoid 0:93d4119d3f14 404 return true;
whismanoid 0:93d4119d3f14 405 }
whismanoid 0:93d4119d3f14 406 else
whismanoid 0:93d4119d3f14 407 {
whismanoid 0:93d4119d3f14 408 FAIL();
whismanoid 0:93d4119d3f14 409 //~ SelfTest_print_VoltageOfCode(cmdLine, value_u12);
whismanoid 0:93d4119d3f14 410 // Platform board uses simple analog inputs
whismanoid 0:93d4119d3f14 411 associatedCmdLine.serial().printf("AIN0 = %7.3f%% = %1.3fV ",
whismanoid 0:93d4119d3f14 412 normValue_0_1 * 100.0,
whismanoid 0:93d4119d3f14 413 normValue_0_1 * adc_full_scale_voltage
whismanoid 0:93d4119d3f14 414 );
whismanoid 0:93d4119d3f14 415 //
whismanoid 0:93d4119d3f14 416 associatedCmdLine.serial().printf(" expect %6.6f +/- %6.6f", expect_result, err_threshold);
whismanoid 0:93d4119d3f14 417 associatedCmdLine.serial().printf(" but got %6.6f", actual_result);
whismanoid 0:93d4119d3f14 418 associatedCmdLine.serial().printf(" err=%6.6f", err_result);
whismanoid 0:93d4119d3f14 419 }
whismanoid 0:93d4119d3f14 420 //~ associatedCmdLine.serial().printf("\r\n");
whismanoid 0:93d4119d3f14 421 return false;
whismanoid 0:93d4119d3f14 422 }
whismanoid 0:93d4119d3f14 423
whismanoid 0:93d4119d3f14 424 /** Test an analog voltage input to the platform (output from the device under test)
whismanoid 0:93d4119d3f14 425 *
whismanoid 0:93d4119d3f14 426 * @param[in] expect_result contains the expected voltage
whismanoid 0:93d4119d3f14 427 *
whismanoid 0:93d4119d3f14 428 * @pre err_threshold determines how closely the result must match the expected value
whismanoid 0:93d4119d3f14 429 *
whismanoid 0:93d4119d3f14 430 * @post nPass and nFail counters are updated
whismanoid 0:93d4119d3f14 431 *
whismanoid 0:93d4119d3f14 432 * @return true if success, false if test failed
whismanoid 0:93d4119d3f14 433 *
whismanoid 0:93d4119d3f14 434 */
whismanoid 0:93d4119d3f14 435 bool MaximTinyTester::AnalogIn1_Read_Expect_voltageV(double expect_result)
whismanoid 0:93d4119d3f14 436 {
whismanoid 0:93d4119d3f14 437 float adc_full_scale_voltage = analogInPin_fullScaleVoltage[1];
whismanoid 2:9b20cadbfa15 438 // skip if expect_result exceeds ADC full scale
whismanoid 2:9b20cadbfa15 439 if (adc_full_scale_voltage < expect_result)
whismanoid 2:9b20cadbfa15 440 {
whismanoid 2:9b20cadbfa15 441 // print a warning message that we can't perform the measurement
whismanoid 2:9b20cadbfa15 442 associatedCmdLine.serial().printf("\r\n..... AIN full scale %1.3fV < expect %6.6f cannot perform measurement",
whismanoid 2:9b20cadbfa15 443 adc_full_scale_voltage, expect_result);
whismanoid 2:9b20cadbfa15 444 return true; // ignore, test conditions are invalid; do not call PASS() or FAIL()
whismanoid 2:9b20cadbfa15 445 }
whismanoid 0:93d4119d3f14 446
whismanoid 0:93d4119d3f14 447 // TODO: tinyTester.Analog_Input_Expect_V replaces SelfTest_AnalogInput_Expect_ch_V
whismanoid 0:93d4119d3f14 448 // Platform board uses simple analog inputs
whismanoid 0:93d4119d3f14 449 float normValue_0_1 = analogInPin1.read();
whismanoid 0:93d4119d3f14 450 double actual_result = normValue_0_1 * adc_full_scale_voltage;
whismanoid 0:93d4119d3f14 451 double err_result = (actual_result - expect_result);
whismanoid 0:93d4119d3f14 452 if (( -err_threshold < err_result) && ( err_result < err_threshold))
whismanoid 0:93d4119d3f14 453 {
whismanoid 0:93d4119d3f14 454 PASS();
whismanoid 0:93d4119d3f14 455 //~ SelfTest_print_VoltageOfCode(cmdLine, value_u12);
whismanoid 0:93d4119d3f14 456 // Platform board uses simple analog inputs
whismanoid 0:93d4119d3f14 457 associatedCmdLine.serial().printf("AIN1 = %7.3f%% = %1.3fV ",
whismanoid 0:93d4119d3f14 458 normValue_0_1 * 100.0,
whismanoid 0:93d4119d3f14 459 normValue_0_1 * adc_full_scale_voltage
whismanoid 0:93d4119d3f14 460 );
whismanoid 0:93d4119d3f14 461 //
whismanoid 0:93d4119d3f14 462 associatedCmdLine.serial().printf(" expect %6.6f +/- %6.6f", expect_result, err_threshold);
whismanoid 0:93d4119d3f14 463 return true;
whismanoid 0:93d4119d3f14 464 }
whismanoid 0:93d4119d3f14 465 else
whismanoid 0:93d4119d3f14 466 {
whismanoid 0:93d4119d3f14 467 FAIL();
whismanoid 0:93d4119d3f14 468 //~ SelfTest_print_VoltageOfCode(cmdLine, value_u12);
whismanoid 0:93d4119d3f14 469 // Platform board uses simple analog inputs
whismanoid 0:93d4119d3f14 470 associatedCmdLine.serial().printf("AIN1 = %7.3f%% = %1.3fV ",
whismanoid 0:93d4119d3f14 471 normValue_0_1 * 100.0,
whismanoid 0:93d4119d3f14 472 normValue_0_1 * adc_full_scale_voltage
whismanoid 0:93d4119d3f14 473 );
whismanoid 0:93d4119d3f14 474 //
whismanoid 0:93d4119d3f14 475 associatedCmdLine.serial().printf(" expect %6.6f +/- %6.6f", expect_result, err_threshold);
whismanoid 0:93d4119d3f14 476 associatedCmdLine.serial().printf(" but got %6.6f", actual_result);
whismanoid 0:93d4119d3f14 477 associatedCmdLine.serial().printf(" err=%6.6f", err_result);
whismanoid 0:93d4119d3f14 478 }
whismanoid 0:93d4119d3f14 479 //~ associatedCmdLine.serial().printf("\r\n");
whismanoid 0:93d4119d3f14 480 return false;
whismanoid 0:93d4119d3f14 481 }
whismanoid 0:93d4119d3f14 482
whismanoid 0:93d4119d3f14 483 /** Test an analog voltage input to the platform (output from the device under test)
whismanoid 0:93d4119d3f14 484 *
whismanoid 0:93d4119d3f14 485 * @param[in] expect_result contains the expected voltage
whismanoid 0:93d4119d3f14 486 *
whismanoid 0:93d4119d3f14 487 * @pre err_threshold determines how closely the result must match the expected value
whismanoid 0:93d4119d3f14 488 *
whismanoid 0:93d4119d3f14 489 * @post nPass and nFail counters are updated
whismanoid 0:93d4119d3f14 490 *
whismanoid 0:93d4119d3f14 491 * @return true if success, false if test failed
whismanoid 0:93d4119d3f14 492 *
whismanoid 0:93d4119d3f14 493 */
whismanoid 0:93d4119d3f14 494 bool MaximTinyTester::AnalogIn2_Read_Expect_voltageV(double expect_result)
whismanoid 0:93d4119d3f14 495 {
whismanoid 0:93d4119d3f14 496 float adc_full_scale_voltage = analogInPin_fullScaleVoltage[2];
whismanoid 2:9b20cadbfa15 497 // skip if expect_result exceeds ADC full scale
whismanoid 2:9b20cadbfa15 498 if (adc_full_scale_voltage < expect_result)
whismanoid 2:9b20cadbfa15 499 {
whismanoid 2:9b20cadbfa15 500 // print a warning message that we can't perform the measurement
whismanoid 2:9b20cadbfa15 501 associatedCmdLine.serial().printf("\r\n..... AIN full scale %1.3fV < expect %6.6f cannot perform measurement",
whismanoid 2:9b20cadbfa15 502 adc_full_scale_voltage, expect_result);
whismanoid 2:9b20cadbfa15 503 return true; // ignore, test conditions are invalid; do not call PASS() or FAIL()
whismanoid 2:9b20cadbfa15 504 }
whismanoid 0:93d4119d3f14 505
whismanoid 0:93d4119d3f14 506 // TODO: tinyTester.Analog_Input_Expect_V replaces SelfTest_AnalogInput_Expect_ch_V
whismanoid 0:93d4119d3f14 507 // Platform board uses simple analog inputs
whismanoid 0:93d4119d3f14 508 float normValue_0_1 = analogInPin2.read();
whismanoid 0:93d4119d3f14 509 double actual_result = normValue_0_1 * adc_full_scale_voltage;
whismanoid 0:93d4119d3f14 510 double err_result = (actual_result - expect_result);
whismanoid 0:93d4119d3f14 511 if (( -err_threshold < err_result) && ( err_result < err_threshold))
whismanoid 0:93d4119d3f14 512 {
whismanoid 0:93d4119d3f14 513 PASS();
whismanoid 0:93d4119d3f14 514 //~ SelfTest_print_VoltageOfCode(cmdLine, value_u12);
whismanoid 0:93d4119d3f14 515 // Platform board uses simple analog inputs
whismanoid 0:93d4119d3f14 516 associatedCmdLine.serial().printf("AIN2 = %7.3f%% = %1.3fV ",
whismanoid 0:93d4119d3f14 517 normValue_0_1 * 100.0,
whismanoid 0:93d4119d3f14 518 normValue_0_1 * adc_full_scale_voltage
whismanoid 0:93d4119d3f14 519 );
whismanoid 0:93d4119d3f14 520 //
whismanoid 0:93d4119d3f14 521 associatedCmdLine.serial().printf(" expect %6.6f +/- %6.6f", expect_result, err_threshold);
whismanoid 0:93d4119d3f14 522 return true;
whismanoid 0:93d4119d3f14 523 }
whismanoid 0:93d4119d3f14 524 else
whismanoid 0:93d4119d3f14 525 {
whismanoid 0:93d4119d3f14 526 FAIL();
whismanoid 0:93d4119d3f14 527 //~ SelfTest_print_VoltageOfCode(cmdLine, value_u12);
whismanoid 0:93d4119d3f14 528 // Platform board uses simple analog inputs
whismanoid 0:93d4119d3f14 529 associatedCmdLine.serial().printf("AIN2 = %7.3f%% = %1.3fV ",
whismanoid 0:93d4119d3f14 530 normValue_0_1 * 100.0,
whismanoid 0:93d4119d3f14 531 normValue_0_1 * adc_full_scale_voltage
whismanoid 0:93d4119d3f14 532 );
whismanoid 0:93d4119d3f14 533 //
whismanoid 0:93d4119d3f14 534 associatedCmdLine.serial().printf(" expect %6.6f +/- %6.6f", expect_result, err_threshold);
whismanoid 0:93d4119d3f14 535 associatedCmdLine.serial().printf(" but got %6.6f", actual_result);
whismanoid 0:93d4119d3f14 536 associatedCmdLine.serial().printf(" err=%6.6f", err_result);
whismanoid 0:93d4119d3f14 537 }
whismanoid 0:93d4119d3f14 538 //~ associatedCmdLine.serial().printf("\r\n");
whismanoid 0:93d4119d3f14 539 return false;
whismanoid 0:93d4119d3f14 540 }
whismanoid 0:93d4119d3f14 541
whismanoid 0:93d4119d3f14 542 /** Test an analog voltage input to the platform (output from the device under test)
whismanoid 0:93d4119d3f14 543 *
whismanoid 0:93d4119d3f14 544 * @param[in] expect_result contains the expected voltage
whismanoid 0:93d4119d3f14 545 *
whismanoid 0:93d4119d3f14 546 * @pre err_threshold determines how closely the result must match the expected value
whismanoid 0:93d4119d3f14 547 *
whismanoid 0:93d4119d3f14 548 * @post nPass and nFail counters are updated
whismanoid 0:93d4119d3f14 549 *
whismanoid 0:93d4119d3f14 550 * @return true if success, false if test failed
whismanoid 0:93d4119d3f14 551 *
whismanoid 0:93d4119d3f14 552 */
whismanoid 0:93d4119d3f14 553 bool MaximTinyTester::AnalogIn3_Read_Expect_voltageV(double expect_result)
whismanoid 0:93d4119d3f14 554 {
whismanoid 0:93d4119d3f14 555 float adc_full_scale_voltage = analogInPin_fullScaleVoltage[3];
whismanoid 2:9b20cadbfa15 556 // skip if expect_result exceeds ADC full scale
whismanoid 2:9b20cadbfa15 557 if (adc_full_scale_voltage < expect_result)
whismanoid 2:9b20cadbfa15 558 {
whismanoid 2:9b20cadbfa15 559 // print a warning message that we can't perform the measurement
whismanoid 2:9b20cadbfa15 560 associatedCmdLine.serial().printf("\r\n..... AIN full scale %1.3fV < expect %6.6f cannot perform measurement",
whismanoid 2:9b20cadbfa15 561 adc_full_scale_voltage, expect_result);
whismanoid 2:9b20cadbfa15 562 return true; // ignore, test conditions are invalid; do not call PASS() or FAIL()
whismanoid 2:9b20cadbfa15 563 }
whismanoid 0:93d4119d3f14 564
whismanoid 0:93d4119d3f14 565 // TODO: tinyTester.Analog_Input_Expect_V replaces SelfTest_AnalogInput_Expect_ch_V
whismanoid 0:93d4119d3f14 566 // Platform board uses simple analog inputs
whismanoid 0:93d4119d3f14 567 float normValue_0_1 = analogInPin3.read();
whismanoid 0:93d4119d3f14 568 double actual_result = normValue_0_1 * adc_full_scale_voltage;
whismanoid 0:93d4119d3f14 569 double err_result = (actual_result - expect_result);
whismanoid 0:93d4119d3f14 570 if (( -err_threshold < err_result) && ( err_result < err_threshold))
whismanoid 0:93d4119d3f14 571 {
whismanoid 0:93d4119d3f14 572 PASS();
whismanoid 0:93d4119d3f14 573 //~ SelfTest_print_VoltageOfCode(cmdLine, value_u12);
whismanoid 0:93d4119d3f14 574 // Platform board uses simple analog inputs
whismanoid 0:93d4119d3f14 575 associatedCmdLine.serial().printf("AIN3 = %7.3f%% = %1.3fV ",
whismanoid 0:93d4119d3f14 576 normValue_0_1 * 100.0,
whismanoid 0:93d4119d3f14 577 normValue_0_1 * adc_full_scale_voltage
whismanoid 0:93d4119d3f14 578 );
whismanoid 0:93d4119d3f14 579 //
whismanoid 0:93d4119d3f14 580 associatedCmdLine.serial().printf(" expect %6.6f +/- %6.6f", expect_result, err_threshold);
whismanoid 0:93d4119d3f14 581 return true;
whismanoid 0:93d4119d3f14 582 }
whismanoid 0:93d4119d3f14 583 else
whismanoid 0:93d4119d3f14 584 {
whismanoid 0:93d4119d3f14 585 FAIL();
whismanoid 0:93d4119d3f14 586 //~ SelfTest_print_VoltageOfCode(cmdLine, value_u12);
whismanoid 0:93d4119d3f14 587 // Platform board uses simple analog inputs
whismanoid 0:93d4119d3f14 588 associatedCmdLine.serial().printf("AIN3 = %7.3f%% = %1.3fV ",
whismanoid 0:93d4119d3f14 589 normValue_0_1 * 100.0,
whismanoid 0:93d4119d3f14 590 normValue_0_1 * adc_full_scale_voltage
whismanoid 0:93d4119d3f14 591 );
whismanoid 0:93d4119d3f14 592 //
whismanoid 0:93d4119d3f14 593 associatedCmdLine.serial().printf(" expect %6.6f +/- %6.6f", expect_result, err_threshold);
whismanoid 0:93d4119d3f14 594 associatedCmdLine.serial().printf(" but got %6.6f", actual_result);
whismanoid 0:93d4119d3f14 595 associatedCmdLine.serial().printf(" err=%6.6f", err_result);
whismanoid 0:93d4119d3f14 596 }
whismanoid 0:93d4119d3f14 597 //~ associatedCmdLine.serial().printf("\r\n");
whismanoid 0:93d4119d3f14 598 return false;
whismanoid 0:93d4119d3f14 599 }
whismanoid 0:93d4119d3f14 600
whismanoid 0:93d4119d3f14 601 /** Test an analog voltage input to the platform (output from the device under test)
whismanoid 0:93d4119d3f14 602 *
whismanoid 0:93d4119d3f14 603 * @param[in] expect_result contains the expected voltage
whismanoid 0:93d4119d3f14 604 *
whismanoid 0:93d4119d3f14 605 * @pre err_threshold determines how closely the result must match the expected value
whismanoid 0:93d4119d3f14 606 *
whismanoid 0:93d4119d3f14 607 * @post nPass and nFail counters are updated
whismanoid 0:93d4119d3f14 608 *
whismanoid 0:93d4119d3f14 609 * @return true if success, false if test failed
whismanoid 0:93d4119d3f14 610 *
whismanoid 0:93d4119d3f14 611 */
whismanoid 0:93d4119d3f14 612 bool MaximTinyTester::AnalogIn4_Read_Expect_voltageV(double expect_result)
whismanoid 0:93d4119d3f14 613 {
whismanoid 0:93d4119d3f14 614 float adc_full_scale_voltage = analogInPin_fullScaleVoltage[4];
whismanoid 2:9b20cadbfa15 615 // skip if expect_result exceeds ADC full scale
whismanoid 2:9b20cadbfa15 616 if (adc_full_scale_voltage < expect_result)
whismanoid 2:9b20cadbfa15 617 {
whismanoid 2:9b20cadbfa15 618 // print a warning message that we can't perform the measurement
whismanoid 2:9b20cadbfa15 619 associatedCmdLine.serial().printf("\r\n..... AIN full scale %1.3fV < expect %6.6f cannot perform measurement",
whismanoid 2:9b20cadbfa15 620 adc_full_scale_voltage, expect_result);
whismanoid 2:9b20cadbfa15 621 return true; // ignore, test conditions are invalid; do not call PASS() or FAIL()
whismanoid 2:9b20cadbfa15 622 }
whismanoid 0:93d4119d3f14 623
whismanoid 0:93d4119d3f14 624 // TODO: tinyTester.Analog_Input_Expect_V replaces SelfTest_AnalogInput_Expect_ch_V
whismanoid 0:93d4119d3f14 625 // Platform board uses simple analog inputs
whismanoid 0:93d4119d3f14 626 float normValue_0_1 = analogInPin4.read();
whismanoid 0:93d4119d3f14 627 double actual_result = normValue_0_1 * adc_full_scale_voltage;
whismanoid 0:93d4119d3f14 628 double err_result = (actual_result - expect_result);
whismanoid 0:93d4119d3f14 629 if (( -err_threshold < err_result) && ( err_result < err_threshold))
whismanoid 0:93d4119d3f14 630 {
whismanoid 0:93d4119d3f14 631 PASS();
whismanoid 0:93d4119d3f14 632 //~ SelfTest_print_VoltageOfCode(cmdLine, value_u12);
whismanoid 0:93d4119d3f14 633 // Platform board uses simple analog inputs
whismanoid 0:93d4119d3f14 634 associatedCmdLine.serial().printf("AIN4 = %7.3f%% = %1.3fV ",
whismanoid 0:93d4119d3f14 635 normValue_0_1 * 100.0,
whismanoid 0:93d4119d3f14 636 normValue_0_1 * adc_full_scale_voltage
whismanoid 0:93d4119d3f14 637 );
whismanoid 0:93d4119d3f14 638 //
whismanoid 0:93d4119d3f14 639 associatedCmdLine.serial().printf(" expect %6.6f +/- %6.6f", expect_result, err_threshold);
whismanoid 0:93d4119d3f14 640 return true;
whismanoid 0:93d4119d3f14 641 }
whismanoid 0:93d4119d3f14 642 else
whismanoid 0:93d4119d3f14 643 {
whismanoid 0:93d4119d3f14 644 FAIL();
whismanoid 0:93d4119d3f14 645 //~ SelfTest_print_VoltageOfCode(cmdLine, value_u12);
whismanoid 0:93d4119d3f14 646 // Platform board uses simple analog inputs
whismanoid 0:93d4119d3f14 647 associatedCmdLine.serial().printf("AIN4 = %7.3f%% = %1.3fV ",
whismanoid 0:93d4119d3f14 648 normValue_0_1 * 100.0,
whismanoid 0:93d4119d3f14 649 normValue_0_1 * adc_full_scale_voltage
whismanoid 0:93d4119d3f14 650 );
whismanoid 0:93d4119d3f14 651 //
whismanoid 0:93d4119d3f14 652 associatedCmdLine.serial().printf(" expect %6.6f +/- %6.6f", expect_result, err_threshold);
whismanoid 0:93d4119d3f14 653 associatedCmdLine.serial().printf(" but got %6.6f", actual_result);
whismanoid 0:93d4119d3f14 654 associatedCmdLine.serial().printf(" err=%6.6f", err_result);
whismanoid 0:93d4119d3f14 655 }
whismanoid 0:93d4119d3f14 656 //~ associatedCmdLine.serial().printf("\r\n");
whismanoid 0:93d4119d3f14 657 return false;
whismanoid 0:93d4119d3f14 658 }
whismanoid 0:93d4119d3f14 659
whismanoid 0:93d4119d3f14 660 /** Test an analog voltage input to the platform (output from the device under test)
whismanoid 0:93d4119d3f14 661 *
whismanoid 0:93d4119d3f14 662 * @param[in] expect_result contains the expected voltage
whismanoid 0:93d4119d3f14 663 *
whismanoid 0:93d4119d3f14 664 * @pre err_threshold determines how closely the result must match the expected value
whismanoid 0:93d4119d3f14 665 *
whismanoid 0:93d4119d3f14 666 * @post nPass and nFail counters are updated
whismanoid 0:93d4119d3f14 667 *
whismanoid 0:93d4119d3f14 668 * @return true if success, false if test failed
whismanoid 0:93d4119d3f14 669 *
whismanoid 0:93d4119d3f14 670 */
whismanoid 0:93d4119d3f14 671 bool MaximTinyTester::AnalogIn5_Read_Expect_voltageV(double expect_result)
whismanoid 0:93d4119d3f14 672 {
whismanoid 0:93d4119d3f14 673 float adc_full_scale_voltage = analogInPin_fullScaleVoltage[5];
whismanoid 2:9b20cadbfa15 674 // skip if expect_result exceeds ADC full scale
whismanoid 2:9b20cadbfa15 675 if (adc_full_scale_voltage < expect_result)
whismanoid 2:9b20cadbfa15 676 {
whismanoid 2:9b20cadbfa15 677 // print a warning message that we can't perform the measurement
whismanoid 2:9b20cadbfa15 678 associatedCmdLine.serial().printf("\r\n..... AIN full scale %1.3fV < expect %6.6f cannot perform measurement",
whismanoid 2:9b20cadbfa15 679 adc_full_scale_voltage, expect_result);
whismanoid 2:9b20cadbfa15 680 return true; // ignore, test conditions are invalid; do not call PASS() or FAIL()
whismanoid 2:9b20cadbfa15 681 }
whismanoid 0:93d4119d3f14 682
whismanoid 0:93d4119d3f14 683 // TODO: tinyTester.Analog_Input_Expect_V replaces SelfTest_AnalogInput_Expect_ch_V
whismanoid 0:93d4119d3f14 684 // Platform board uses simple analog inputs
whismanoid 0:93d4119d3f14 685 float normValue_0_1 = analogInPin5.read();
whismanoid 0:93d4119d3f14 686 double actual_result = normValue_0_1 * adc_full_scale_voltage;
whismanoid 0:93d4119d3f14 687 double err_result = (actual_result - expect_result);
whismanoid 0:93d4119d3f14 688 if (( -err_threshold < err_result) && ( err_result < err_threshold))
whismanoid 0:93d4119d3f14 689 {
whismanoid 0:93d4119d3f14 690 PASS();
whismanoid 0:93d4119d3f14 691 //~ SelfTest_print_VoltageOfCode(cmdLine, value_u12);
whismanoid 0:93d4119d3f14 692 // Platform board uses simple analog inputs
whismanoid 0:93d4119d3f14 693 associatedCmdLine.serial().printf("AIN5 = %7.3f%% = %1.3fV ",
whismanoid 0:93d4119d3f14 694 normValue_0_1 * 100.0,
whismanoid 0:93d4119d3f14 695 normValue_0_1 * adc_full_scale_voltage
whismanoid 0:93d4119d3f14 696 );
whismanoid 0:93d4119d3f14 697 //
whismanoid 0:93d4119d3f14 698 associatedCmdLine.serial().printf(" expect %6.6f +/- %6.6f", expect_result, err_threshold);
whismanoid 0:93d4119d3f14 699 return true;
whismanoid 0:93d4119d3f14 700 }
whismanoid 0:93d4119d3f14 701 else
whismanoid 0:93d4119d3f14 702 {
whismanoid 0:93d4119d3f14 703 FAIL();
whismanoid 0:93d4119d3f14 704 //~ SelfTest_print_VoltageOfCode(cmdLine, value_u12);
whismanoid 0:93d4119d3f14 705 // Platform board uses simple analog inputs
whismanoid 0:93d4119d3f14 706 associatedCmdLine.serial().printf("AIN5 = %7.3f%% = %1.3fV ",
whismanoid 0:93d4119d3f14 707 normValue_0_1 * 100.0,
whismanoid 0:93d4119d3f14 708 normValue_0_1 * adc_full_scale_voltage
whismanoid 0:93d4119d3f14 709 );
whismanoid 0:93d4119d3f14 710 //
whismanoid 0:93d4119d3f14 711 associatedCmdLine.serial().printf(" expect %6.6f +/- %6.6f", expect_result, err_threshold);
whismanoid 0:93d4119d3f14 712 associatedCmdLine.serial().printf(" but got %6.6f", actual_result);
whismanoid 0:93d4119d3f14 713 associatedCmdLine.serial().printf(" err=%6.6f", err_result);
whismanoid 0:93d4119d3f14 714 }
whismanoid 0:93d4119d3f14 715 //~ associatedCmdLine.serial().printf("\r\n");
whismanoid 0:93d4119d3f14 716 return false;
whismanoid 0:93d4119d3f14 717 }
whismanoid 0:93d4119d3f14 718
whismanoid 0:93d4119d3f14 719 bool MaximTinyTester::AnalogIn_Read_Expect_voltageV(AnalogIn& analogInPin, double expect_result)
whismanoid 0:93d4119d3f14 720 {
whismanoid 0:93d4119d3f14 721 float adc_full_scale_voltage = analogInPin_fullScaleVoltage[0];
whismanoid 2:9b20cadbfa15 722 // skip if expect_result exceeds ADC full scale
whismanoid 2:9b20cadbfa15 723 if (adc_full_scale_voltage < expect_result)
whismanoid 2:9b20cadbfa15 724 {
whismanoid 2:9b20cadbfa15 725 // print a warning message that we can't perform the measurement
whismanoid 2:9b20cadbfa15 726 associatedCmdLine.serial().printf("\r\n..... AIN full scale %1.3fV < expect %6.6f cannot perform measurement",
whismanoid 2:9b20cadbfa15 727 adc_full_scale_voltage, expect_result);
whismanoid 2:9b20cadbfa15 728 return true; // ignore, test conditions are invalid; do not call PASS() or FAIL()
whismanoid 2:9b20cadbfa15 729 }
whismanoid 0:93d4119d3f14 730
whismanoid 0:93d4119d3f14 731 // TODO: tinyTester.Analog_Input_Expect_V replaces SelfTest_AnalogInput_Expect_ch_V
whismanoid 0:93d4119d3f14 732 // Platform board uses simple analog inputs
whismanoid 0:93d4119d3f14 733 float normValue_0_1 = analogInPin.read();
whismanoid 0:93d4119d3f14 734 double actual_result = normValue_0_1 * adc_full_scale_voltage;
whismanoid 0:93d4119d3f14 735 double err_result = (actual_result - expect_result);
whismanoid 0:93d4119d3f14 736 if (( -err_threshold < err_result) && ( err_result < err_threshold))
whismanoid 0:93d4119d3f14 737 {
whismanoid 0:93d4119d3f14 738 PASS();
whismanoid 0:93d4119d3f14 739 //~ SelfTest_print_VoltageOfCode(cmdLine, value_u12);
whismanoid 0:93d4119d3f14 740 // Platform board uses simple analog inputs
whismanoid 0:93d4119d3f14 741 associatedCmdLine.serial().printf("AIN0 = %7.3f%% = %1.3fV ",
whismanoid 0:93d4119d3f14 742 normValue_0_1 * 100.0,
whismanoid 0:93d4119d3f14 743 normValue_0_1 * adc_full_scale_voltage
whismanoid 0:93d4119d3f14 744 );
whismanoid 0:93d4119d3f14 745 //
whismanoid 0:93d4119d3f14 746 associatedCmdLine.serial().printf(" expect %6.6f +/- %6.6f", expect_result, err_threshold);
whismanoid 0:93d4119d3f14 747 return true;
whismanoid 0:93d4119d3f14 748 }
whismanoid 0:93d4119d3f14 749 else
whismanoid 0:93d4119d3f14 750 {
whismanoid 0:93d4119d3f14 751 FAIL();
whismanoid 0:93d4119d3f14 752 //~ SelfTest_print_VoltageOfCode(cmdLine, value_u12);
whismanoid 0:93d4119d3f14 753 // Platform board uses simple analog inputs
whismanoid 0:93d4119d3f14 754 associatedCmdLine.serial().printf("AIN0 = %7.3f%% = %1.3fV ",
whismanoid 0:93d4119d3f14 755 normValue_0_1 * 100.0,
whismanoid 0:93d4119d3f14 756 normValue_0_1 * adc_full_scale_voltage
whismanoid 0:93d4119d3f14 757 );
whismanoid 0:93d4119d3f14 758 //
whismanoid 0:93d4119d3f14 759 associatedCmdLine.serial().printf(" expect %6.6f +/- %6.6f", expect_result, err_threshold);
whismanoid 0:93d4119d3f14 760 associatedCmdLine.serial().printf(" but got %6.6f", actual_result);
whismanoid 0:93d4119d3f14 761 associatedCmdLine.serial().printf(" err=%6.6f", err_result);
whismanoid 0:93d4119d3f14 762 }
whismanoid 0:93d4119d3f14 763 //~ associatedCmdLine.serial().printf("\r\n");
whismanoid 0:93d4119d3f14 764 return false;
whismanoid 0:93d4119d3f14 765 }
whismanoid 0:93d4119d3f14 766
whismanoid 0:93d4119d3f14 767 bool MaximTinyTester::DigitalIn_Read_Expect_WarnOnly(DigitalIn& digitalInPin, const char* pinName, int expect_result, const char *expect_description)
whismanoid 0:93d4119d3f14 768 {
whismanoid 0:93d4119d3f14 769 int actual_UPO_value = -1;
whismanoid 0:93d4119d3f14 770 for (int retry_count = 0; retry_count < 10; retry_count++) {
whismanoid 0:93d4119d3f14 771 actual_UPO_value = digitalInPin.read(); // g_MAX5171_device.UPOinputValue();
whismanoid 0:93d4119d3f14 772 if (actual_UPO_value == expect_result) {
whismanoid 0:93d4119d3f14 773 PASS();
whismanoid 0:93d4119d3f14 774 associatedCmdLine.serial().printf("%s signal=%d %s", pinName, expect_result, expect_description);
whismanoid 0:93d4119d3f14 775 return true;
whismanoid 0:93d4119d3f14 776 }
whismanoid 0:93d4119d3f14 777 // UPO condition not met, retry for a while until give up
whismanoid 0:93d4119d3f14 778 wait_ms(input_timeout_time_msec / 10); // delay
whismanoid 0:93d4119d3f14 779 }
whismanoid 0:93d4119d3f14 780 associatedCmdLine.serial().printf("\r\n!WARN "); // SelfTest_FAIL(cmdLine);
whismanoid 0:93d4119d3f14 781 associatedCmdLine.serial().printf("expected %s signal=%d %s", pinName, expect_result, expect_description);
whismanoid 0:93d4119d3f14 782 associatedCmdLine.serial().printf(", but got actual %s=%d", pinName, actual_UPO_value);
whismanoid 0:93d4119d3f14 783 associatedCmdLine.serial().printf(", missing %s connections?", pinName);
whismanoid 0:93d4119d3f14 784 return false;
whismanoid 0:93d4119d3f14 785 }
whismanoid 0:93d4119d3f14 786
whismanoid 0:93d4119d3f14 787 void MaximTinyTester::Wait_Output_Settling()
whismanoid 0:93d4119d3f14 788 {
whismanoid 0:93d4119d3f14 789 wait_ms(settle_time_msec); // delay
whismanoid 0:93d4119d3f14 790 }
whismanoid 0:93d4119d3f14 791
whismanoid 0:93d4119d3f14 792
whismanoid 0:93d4119d3f14 793 // End of file