A collection of Analog Devices drivers for the mbed platform

For additional information check out the mbed page of the Analog Devices wiki: https://wiki.analog.com/resources/tools-software/mbed-drivers-all

Committer:
Adrian Suciu
Date:
Mon Nov 07 16:27:12 2016 +0200
Revision:
33:c3ec596a29c2
Parent:
21:a8023e5e97be
Added CN0391, CN0396 and CN0397 shields

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Adrian Suciu 8:6e96c6b3c83f 1 /**
Adrian Suciu 8:6e96c6b3c83f 2 * @file main.cpp
Adrian Suciu 8:6e96c6b3c83f 3 * @brief Main file of the driver diag tool
Adrian Suciu 8:6e96c6b3c83f 4 * @author Analog Devices Inc.
Adrian Suciu 8:6e96c6b3c83f 5 *
Adrian Suciu 8:6e96c6b3c83f 6 * For support please go to:
Adrian Suciu 8:6e96c6b3c83f 7 * Github: https://github.com/analogdevicesinc/mbed-adi
Adrian Suciu 8:6e96c6b3c83f 8 * Support: https://ez.analog.com/community/linux-device-drivers/microcontroller-no-os-drivers
Adrian Suciu 8:6e96c6b3c83f 9 * More: https://wiki.analog.com/resources/tools-software/mbed-drivers-all
Adrian Suciu 8:6e96c6b3c83f 10
Adrian Suciu 8:6e96c6b3c83f 11 ********************************************************************************
Adrian Suciu 8:6e96c6b3c83f 12 * Copyright 2016(c) Analog Devices, Inc.
Adrian Suciu 8:6e96c6b3c83f 13 *
Adrian Suciu 8:6e96c6b3c83f 14 * All rights reserved.
Adrian Suciu 8:6e96c6b3c83f 15 *
Adrian Suciu 8:6e96c6b3c83f 16 * Redistribution and use in source and binary forms, with or without
Adrian Suciu 8:6e96c6b3c83f 17 * modification, are permitted provided that the following conditions are met:
Adrian Suciu 8:6e96c6b3c83f 18 * - Redistributions of source code must retain the above copyright
Adrian Suciu 8:6e96c6b3c83f 19 * notice, this list of conditions and the following disclaimer.
Adrian Suciu 8:6e96c6b3c83f 20 * - Redistributions in binary form must reproduce the above copyright
Adrian Suciu 8:6e96c6b3c83f 21 * notice, this list of conditions and the following disclaimer in
Adrian Suciu 8:6e96c6b3c83f 22 * the documentation and/or other materials provided with the
Adrian Suciu 8:6e96c6b3c83f 23 * distribution.
Adrian Suciu 8:6e96c6b3c83f 24 * - Neither the name of Analog Devices, Inc. nor the names of its
Adrian Suciu 8:6e96c6b3c83f 25 * contributors may be used to endorse or promote products derived
Adrian Suciu 8:6e96c6b3c83f 26 * from this software without specific prior written permission.
Adrian Suciu 8:6e96c6b3c83f 27 * - The use of this software may or may not infringe the patent rights
Adrian Suciu 8:6e96c6b3c83f 28 * of one or more patent holders. This license does not release you
Adrian Suciu 8:6e96c6b3c83f 29 * from the requirement that you obtain separate licenses from these
Adrian Suciu 8:6e96c6b3c83f 30 * patent holders to use this software.
Adrian Suciu 8:6e96c6b3c83f 31 * - Use of the software either in source or binary form, must be run
Adrian Suciu 8:6e96c6b3c83f 32 * on or directly connected to an Analog Devices Inc. component.
Adrian Suciu 8:6e96c6b3c83f 33 *
Adrian Suciu 8:6e96c6b3c83f 34 * THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR
Adrian Suciu 8:6e96c6b3c83f 35 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT,
Adrian Suciu 8:6e96c6b3c83f 36 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
Adrian Suciu 8:6e96c6b3c83f 37 * IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT,
Adrian Suciu 8:6e96c6b3c83f 38 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
Adrian Suciu 8:6e96c6b3c83f 39 * LIMITED TO, INTELLECTUAL PROPERTY RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR
Adrian Suciu 8:6e96c6b3c83f 40 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
Adrian Suciu 8:6e96c6b3c83f 41 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
Adrian Suciu 8:6e96c6b3c83f 42 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
Adrian Suciu 8:6e96c6b3c83f 43 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Adrian Suciu 8:6e96c6b3c83f 44 *
Adrian Suciu 8:6e96c6b3c83f 45 ********************************************************************************/
Adrian Suciu 8:6e96c6b3c83f 46
Adrian Suciu 7:b62398a1d17a 47 #include "mbed.h"
Adrian Suciu 7:b62398a1d17a 48 #include "stdio.h"
Adrian Suciu 7:b62398a1d17a 49 #include <iostream>
Adrian Suciu 7:b62398a1d17a 50 #include <string>
Adrian Suciu 7:b62398a1d17a 51 #include <vector>
Adrian Suciu 7:b62398a1d17a 52
Adrian Suciu 7:b62398a1d17a 53 #include "config.h"
Adrian Suciu 7:b62398a1d17a 54
Adrian Suciu 7:b62398a1d17a 55 Serial pc(SERIAL_TX, SERIAL_RX);
Adrian Suciu 33:c3ec596a29c2 56 Serial test(D8, D2);
Adrian Suciu 7:b62398a1d17a 57 vector<string> cmdbuffer;
Adrian Suciu 7:b62398a1d17a 58
Adrian Suciu 7:b62398a1d17a 59 class commands
Adrian Suciu 7:b62398a1d17a 60 {
Adrian Suciu 7:b62398a1d17a 61 public:
Adrian Suciu 7:b62398a1d17a 62 commands(string str, int p, void (*h)() ) : cmd_str(str), nr_of_param(p), fktPtr(h) { }
Adrian Suciu 7:b62398a1d17a 63 const static int VAR = -1; // variable number of params
Adrian Suciu 7:b62398a1d17a 64 string cmd_str;
Adrian Suciu 7:b62398a1d17a 65 int nr_of_param;
Adrian Suciu 7:b62398a1d17a 66 void (*fktPtr)(void);
Adrian Suciu 7:b62398a1d17a 67 };
Adrian Suciu 7:b62398a1d17a 68
Adrian Suciu 33:c3ec596a29c2 69
Adrian Suciu 7:b62398a1d17a 70 // *INDENT-OFF*
Adrian Suciu 8:6e96c6b3c83f 71 const vector<commands> cmdlist = {
Adrian Suciu 7:b62398a1d17a 72 {"nop" , 0, [](){ }},
Adrian Suciu 33:c3ec596a29c2 73 /*
Adrian Suciu 7:b62398a1d17a 74 {"echo",commands::VAR, [](){ for(auto i = begin(cmdbuffer) + 1, e = end(cmdbuffer); i!=e; ++i)
Adrian Suciu 33:c3ec596a29c2 75 printf("%s ", i->c_str()); printf("\r\n");}},*/
Adrian Suciu 7:b62398a1d17a 76
Adrian Suciu 7:b62398a1d17a 77 {"help", 0 , [](){ for(auto command : cmdlist)
Adrian Suciu 7:b62398a1d17a 78 pc.printf("%s ",command.cmd_str.c_str()); }},
Adrian Suciu 7:b62398a1d17a 79 /* #### SPI ####*/
Adrian Suciu 7:b62398a1d17a 80 #ifdef SPI_LOW_LEVEL
Adrian Suciu 7:b62398a1d17a 81 {"csa", 0, [](){ spibus.format(8, 3);CSA_pin = !CSA_pin; wait_us(2);
Adrian Suciu 7:b62398a1d17a 82 pc.printf("CS ADC pin set %s", ((CSA_pin.read()) ? "high" : "low") ); }},
Adrian Suciu 7:b62398a1d17a 83 {"csr", 0, [](){ spibus.format(8, 1);CSR_pin = !CSR_pin; wait_us(2);
Adrian Suciu 7:b62398a1d17a 84 pc.printf("CS RDAC pin set %s", ((CSR_pin.read()) ? "high" : "low") );} },
Adrian Suciu 7:b62398a1d17a 85 {"spi", 1, [](){ uint8_t spibyte = strtol(cmdbuffer[1].c_str(), NULL, 16);
Adrian Suciu 7:b62398a1d17a 86 pc.printf("writing 0x%x to SPI", spibyte);
Adrian Suciu 7:b62398a1d17a 87 pc.printf("\r\nreturned: 0x%x ", spibus.write(spibyte)); }},
Adrian Suciu 7:b62398a1d17a 88 #endif
Adrian Suciu 13:66c8e4ce4ff1 89
Adrian Suciu 13:66c8e4ce4ff1 90 #ifdef AD7791_PRESENT
Adrian Suciu 13:66c8e4ce4ff1 91 {"adrst", 0, [](){ad7791diag.reset();}},
Adrian Suciu 13:66c8e4ce4ff1 92 {"adwrm", 1, [](){ad7791diag.write_mode();}},
Adrian Suciu 13:66c8e4ce4ff1 93 {"adrdm", 0, [](){ad7791diag.read_mode();}},
Adrian Suciu 13:66c8e4ce4ff1 94 {"adwrf", 1, [](){ad7791diag.write_filter();}},
Adrian Suciu 13:66c8e4ce4ff1 95 {"adrdf", 0, [](){ad7791diag.read_filter();}},
Adrian Suciu 13:66c8e4ce4ff1 96 {"adrdd", 0, [](){ad7791diag.read_data();}},
Adrian Suciu 13:66c8e4ce4ff1 97 {"adrds", 0, [](){ad7791diag.read_status();}},
Adrian Suciu 13:66c8e4ce4ff1 98 {"adread32", 0, [](){ad7791diag.read();}},
Adrian Suciu 13:66c8e4ce4ff1 99 {"adread", 0, [](){ad7791diag.read_u16();}},
Adrian Suciu 13:66c8e4ce4ff1 100 {"adreadv", 0, [](){ad7791diag.read_voltage();}},
Adrian Suciu 13:66c8e4ce4ff1 101 {"adsetc", 1, [](){ad7791diag.set_continous_mode();}},
Adrian Suciu 13:66c8e4ce4ff1 102 {"adsetref", 1, [](){ad7791diag.set_reference_voltage();}},
Adrian Suciu 13:66c8e4ce4ff1 103 {"adsetch", 1, [](){ad7791diag.set_channel();}},
Adrian Suciu 13:66c8e4ce4ff1 104 #endif
Adrian Suciu 13:66c8e4ce4ff1 105
Adrian Suciu 13:66c8e4ce4ff1 106 #ifdef CN0216_PRESENT
Adrian Suciu 13:66c8e4ce4ff1 107 {"cninit" , 1, [](){cn0216diag.init();}},
Adrian Suciu 13:66c8e4ce4ff1 108 {"cncal" , 1, [](){cn0216diag.calibrate();}},
Adrian Suciu 13:66c8e4ce4ff1 109 {"cnrdw" , 0, [](){cn0216diag.read_weight();}},
Adrian Suciu 13:66c8e4ce4ff1 110 #endif
Adrian Suciu 7:b62398a1d17a 111
Adrian Suciu 7:b62398a1d17a 112 #ifdef AD7790_PRESENT
Adrian Suciu 7:b62398a1d17a 113 {"adrst", 0, [](){ad7790diag.reset();}},
Adrian Suciu 7:b62398a1d17a 114 {"adwrm", 1, [](){ad7790diag.write_mode();}},
Adrian Suciu 7:b62398a1d17a 115 {"adrdm", 0, [](){ad7790diag.read_mode();}},
Adrian Suciu 7:b62398a1d17a 116 {"adwrf", 1, [](){ad7790diag.write_filter();}},
Adrian Suciu 7:b62398a1d17a 117 {"adrdf", 0, [](){ad7790diag.read_filter();}},
Adrian Suciu 7:b62398a1d17a 118 {"adrdd", 0, [](){ad7790diag.read_data();}},
Adrian Suciu 7:b62398a1d17a 119 {"adrds", 0, [](){ad7790diag.read_status();}},
Adrian Suciu 7:b62398a1d17a 120 {"adread", 0, [](){ad7790diag.read_u16();}},
Adrian Suciu 7:b62398a1d17a 121 {"adreadv", 0, [](){ad7790diag.read_voltage();}},
Adrian Suciu 7:b62398a1d17a 122 {"adsetc", 1, [](){ad7790diag.set_continous_mode();}},
Adrian Suciu 7:b62398a1d17a 123 {"adsetref", 1, [](){ad7790diag.set_reference_voltage();}},
Adrian Suciu 7:b62398a1d17a 124 {"adsetch", 1, [](){ad7790diag.set_channel();}},
Adrian Suciu 7:b62398a1d17a 125 #endif
Adrian Suciu 7:b62398a1d17a 126
Adrian Suciu 7:b62398a1d17a 127 #ifdef AD5270_PRESENT
Adrian Suciu 7:b62398a1d17a 128 {"rdwrr" , 1, [](){ad5270diag.write_RDAC();}},
Adrian Suciu 7:b62398a1d17a 129 {"rdrdr" , 0, [](){ad5270diag.read_RDAC();}},
Adrian Suciu 7:b62398a1d17a 130 {"rdwrcmd" , 2, [](){ad5270diag.write_cmd();}},
Adrian Suciu 7:b62398a1d17a 131 {"rdsetz" , 0, [](){ad5270diag.set_HiZ();}},
Adrian Suciu 7:b62398a1d17a 132 {"rd50en", 0, [](){ad5270diag.enable_50TP_programming();}},
Adrian Suciu 7:b62398a1d17a 133 {"rd50ds", 0, [](){ad5270diag.disable_50TP_programming();}},
Adrian Suciu 7:b62398a1d17a 134 {"rd50st", 0, [](){ad5270diag.store_50TP();}},
Adrian Suciu 7:b62398a1d17a 135 {"rd50a" , 0, [](){ad5270diag.read_50TP_last_address();}},
Adrian Suciu 7:b62398a1d17a 136 {"rd50m" , 1, [](){ad5270diag.read_50TP_memory();}},
Adrian Suciu 7:b62398a1d17a 137 {"rdwrc" , 1, [](){ad5270diag.write_ctrl_reg();}},
Adrian Suciu 7:b62398a1d17a 138 {"rdrdc" , 0, [](){ad5270diag.read_ctrl_reg();}},
Adrian Suciu 7:b62398a1d17a 139 {"rdrst" , 0, [](){ad5270diag.reset_RDAC();}},
Adrian Suciu 7:b62398a1d17a 140 {"rdchm" , 1, [](){ad5270diag.change_mode();}},
Adrian Suciu 7:b62398a1d17a 141 {"rdwrw" , 1, [](){ad5270diag.write_wiper_reg();}},
Adrian Suciu 7:b62398a1d17a 142 {"rdrdw" , 0, [](){ad5270diag.read_wiper_reg();}},
Adrian Suciu 7:b62398a1d17a 143 #endif
Adrian Suciu 7:b62398a1d17a 144
Adrian Suciu 7:b62398a1d17a 145 #ifdef CN0357_PRESENT
Adrian Suciu 7:b62398a1d17a 146 {"cnwrdac" , 1, [](){cn0357diag.set_RDAC();}},
Adrian Suciu 7:b62398a1d17a 147 {"cnrppm" , 0, [](){cn0357diag.read_ppm();}},
Adrian Suciu 7:b62398a1d17a 148 {"cnparam" , 2, [](){cn0357diag.set_sensor_param();}}
Adrian Suciu 7:b62398a1d17a 149 #endif
Adrian Suciu 7:b62398a1d17a 150
Adrian Suciu 19:fb92949e59c9 151 #ifdef ADXL362_PRESENT
Adrian Suciu 19:fb92949e59c9 152 {"xlrst" , 0, [](){adxl362diag.reset();}},
Adrian Suciu 19:fb92949e59c9 153 {"xlscan" , 0, [](){adxl362diag.scan();}},
Adrian Suciu 19:fb92949e59c9 154 {"xlwr" , 2, [](){adxl362diag.write_reg();}},
Adrian Suciu 19:fb92949e59c9 155 {"xlrd" , 1, [](){adxl362diag.read_reg();}},
Adrian Suciu 19:fb92949e59c9 156 {"xlstat", 0 , [](){adxl362diag.read_status();}},
Adrian Suciu 19:fb92949e59c9 157 {"xlctl", 1 , [](){adxl362diag.write_ctl(); }},
Adrian Suciu 19:fb92949e59c9 158 {"xlftl", 1 , [](){adxl362diag.write_ftl(); }},
Adrian Suciu 19:fb92949e59c9 159
Adrian Suciu 19:fb92949e59c9 160 {"xlfrn", 0, [](){adxl362diag.fifo_read_nr_of_entries(); }},
Adrian Suciu 19:fb92949e59c9 161 {"xlfset", 2, [](){adxl362diag.fifo_setup(); }},
Adrian Suciu 19:fb92949e59c9 162 {"xlfr16", 0, [](){adxl362diag.fifo_read_u16(); }},
Adrian Suciu 19:fb92949e59c9 163 {"xlfrs", 0, [](){adxl362diag.fifo_scan(); }},
Adrian Suciu 21:a8023e5e97be 164 {"xlintinit",0,[](){adxl362diag.intinit();}},
Adrian Suciu 33:c3ec596a29c2 165 {"xlawake",0,[](){adxl362diag.checkawake();}},
Adrian Suciu 33:c3ec596a29c2 166 #endif
Adrian Suciu 33:c3ec596a29c2 167
Adrian Suciu 33:c3ec596a29c2 168
Adrian Suciu 33:c3ec596a29c2 169 // UART
Adrian Suciu 33:c3ec596a29c2 170 {"uart" , 0, [](){test.putc('\n');}},
Adrian Suciu 33:c3ec596a29c2 171 {"uartecho" , 1, [](){test.printf(cmdbuffer[1].c_str());}},
Adrian Suciu 33:c3ec596a29c2 172 {"uartlisten",0 , [](){
Adrian Suciu 33:c3ec596a29c2 173 char buff[100] = {0};
Adrian Suciu 33:c3ec596a29c2 174 size_t readPosition = 0;
Adrian Suciu 33:c3ec596a29c2 175
Adrian Suciu 33:c3ec596a29c2 176 // read from console until newline
Adrian Suciu 33:c3ec596a29c2 177 while(1) {
Adrian Suciu 33:c3ec596a29c2 178 buff[readPosition] = test.getc();
Adrian Suciu 33:c3ec596a29c2 179 if(buff[readPosition] == '\n' || buff[readPosition] == '\r') {
Adrian Suciu 33:c3ec596a29c2 180 buff[readPosition] = ' ';
Adrian Suciu 33:c3ec596a29c2 181 break;
Adrian Suciu 33:c3ec596a29c2 182 }
Adrian Suciu 33:c3ec596a29c2 183 readPosition++;
Adrian Suciu 33:c3ec596a29c2 184 }
Adrian Suciu 33:c3ec596a29c2 185 readPosition++;
Adrian Suciu 33:c3ec596a29c2 186 buff[readPosition] = '\0';
Adrian Suciu 33:c3ec596a29c2 187 //create std::string from char buffer
Adrian Suciu 33:c3ec596a29c2 188
Adrian Suciu 33:c3ec596a29c2 189 pc.printf("%s",buff);}},
Adrian Suciu 33:c3ec596a29c2 190
Adrian Suciu 33:c3ec596a29c2 191 #ifdef AD7124_PRESENT
Adrian Suciu 33:c3ec596a29c2 192 {"adrst" , 0, [](){ad7124diag.reset();}},
Adrian Suciu 33:c3ec596a29c2 193 {"adrd" , 1, [](){ad7124diag.read_reg();}},
Adrian Suciu 33:c3ec596a29c2 194 {"adrdd" , 0, [](){ad7124diag.read_data();}},
Adrian Suciu 33:c3ec596a29c2 195 {"adrdv" , 0, [](){ad7124diag.read_volt();}},
Adrian Suciu 33:c3ec596a29c2 196 {"adwr" , 2, [](){ad7124diag.write_reg();}},
Adrian Suciu 33:c3ec596a29c2 197 {"adsetup",0,[]() {ad7124diag.setup();pc.printf("setup done\r\n");ad7124diag.mvpInit();pc.printf("init done\r\n");}}
Adrian Suciu 33:c3ec596a29c2 198
Adrian Suciu 19:fb92949e59c9 199
Adrian Suciu 19:fb92949e59c9 200
Adrian Suciu 19:fb92949e59c9 201 #endif
Adrian Suciu 19:fb92949e59c9 202
Adrian Suciu 33:c3ec596a29c2 203 #ifdef CN0398_PRESENT
Adrian Suciu 33:c3ec596a29c2 204 {"cnrst" , 0, [](){cn0398diag.reset();}},
Adrian Suciu 33:c3ec596a29c2 205 {"cnrd" , 1, [](){cn0398diag.read_reg();}},
Adrian Suciu 33:c3ec596a29c2 206 /*{"cnrdd" , 0, [](){ad7124diag.read_data();}},
Adrian Suciu 33:c3ec596a29c2 207 {"cnrdv" , 0, [](){ad7124diag.read_volt();}},*/
Adrian Suciu 33:c3ec596a29c2 208 {"cnwr" , 2, [](){cn0398diag.write_reg();}},
Adrian Suciu 33:c3ec596a29c2 209 {"cnsetup",0,[]() {cn0398diag.init();pc.printf("init done\r\n");}},
Adrian Suciu 33:c3ec596a29c2 210 {"cnled0",1,[]() {cn0398diag.toggle_output(1,strtol(cmdbuffer[1].c_str(), NULL, 16)); pc.printf("LED1 toggled"); }},
Adrian Suciu 33:c3ec596a29c2 211 {"cnled1",1,[]() {cn0398diag.toggle_output(2,strtol(cmdbuffer[1].c_str(), NULL, 16));pc.printf("LED2 toggled");}},
Adrian Suciu 33:c3ec596a29c2 212 {"cnoffp",0,[]() {cn0398diag.offsetph();pc.printf("OffsetVoltage measured");}},
Adrian Suciu 33:c3ec596a29c2 213 {"cnpcal0",1,[]() {cn0398diag.calibp(0);pc.printf("calibration point 0");}},
Adrian Suciu 33:c3ec596a29c2 214 {"cnpcal1",1,[]() {cn0398diag.calibp(1);pc.printf("calibration point 1");}},
Adrian Suciu 33:c3ec596a29c2 215 {"cnreadp",0,[]() {cn0398diag.readp();pc.printf("calibration point 1");}},
Adrian Suciu 33:c3ec596a29c2 216 {"cnreadm",0,[]() {cn0398diag.readm();pc.printf("calibration point 1");}},
Adrian Suciu 33:c3ec596a29c2 217 {"cnreadt",0,[]() {cn0398diag.readt();pc.printf("Temperature Read");}},
Adrian Suciu 33:c3ec596a29c2 218
Adrian Suciu 33:c3ec596a29c2 219
Adrian Suciu 33:c3ec596a29c2 220
Adrian Suciu 33:c3ec596a29c2 221
Adrian Suciu 33:c3ec596a29c2 222 #endif
Adrian Suciu 33:c3ec596a29c2 223
Adrian Suciu 33:c3ec596a29c2 224 #ifdef CN0397_PRESENT
Adrian Suciu 33:c3ec596a29c2 225 {"cnrst" , 0, [](){cn0397diag.reset();}},
Adrian Suciu 33:c3ec596a29c2 226 /* {"cnrd" , 1, [](){cn0397diag.read_reg();}},
Adrian Suciu 33:c3ec596a29c2 227 {"cnwr" , 2, [](){cn0397diag.write_reg();}},*/
Adrian Suciu 33:c3ec596a29c2 228 {"cnsetup",0,[]() {cn0397diag.init();pc.printf("init done\r\n");}},
Adrian Suciu 33:c3ec596a29c2 229 {"cnread",0,[]() {cn0397diag.read();pc.printf("calibration point 1");}},
Adrian Suciu 33:c3ec596a29c2 230 #endif
Adrian Suciu 33:c3ec596a29c2 231
Adrian Suciu 33:c3ec596a29c2 232 #ifdef CN0396_PRESENT
Adrian Suciu 33:c3ec596a29c2 233 {"cntrst" , 0, [](){pc.printf("reset temp sensor \r\n");cn0396diag.dut.temp.reset();}},
Adrian Suciu 33:c3ec596a29c2 234 {"cntrds" , 0, [](){pc.printf("temp status: %x \r\n",cn0396diag.dut.temp.read_status());}},
Adrian Suciu 33:c3ec596a29c2 235 {"cntrdt" , 0, [](){pc.printf("temp val: %x \r\n",cn0396diag.dut.temp.read_temp());}},
Adrian Suciu 33:c3ec596a29c2 236 {"cntrdc" , 0, [](){pc.printf("temp val: %x \r\n",cn0396diag.dut.temp.read_config());}},
Adrian Suciu 33:c3ec596a29c2 237 {"cntwcf" , 1, [](){pc.printf("wrote config: %x \r\n",strtol(cmdbuffer[1].c_str(), NULL, 16));
Adrian Suciu 33:c3ec596a29c2 238 cn0396diag.dut.temp.write_config(strtol(cmdbuffer[1].c_str(), NULL, 16));}},
Adrian Suciu 33:c3ec596a29c2 239 {"cnardi" , 0, [](){pc.printf("adid : %x \r\n",cn0396diag.dut.ad.get_register_value(3,1,true));}},
Adrian Suciu 33:c3ec596a29c2 240
Adrian Suciu 33:c3ec596a29c2 241 {"rdwrr" , 1, [](){pc.printf("aa");ad5270diag.write_RDAC();}},
Adrian Suciu 33:c3ec596a29c2 242 {"rdrdr" , 0, [](){ad5270diag.read_RDAC();}},
Adrian Suciu 33:c3ec596a29c2 243 {"rdwrcmd" , 2, [](){ad5270diag.write_cmd();}},
Adrian Suciu 33:c3ec596a29c2 244 {"rdsetz" , 0, [](){ad5270diag.set_HiZ();}},
Adrian Suciu 33:c3ec596a29c2 245 {"rd50en", 0, [](){ad5270diag.enable_50TP_programming();}},
Adrian Suciu 33:c3ec596a29c2 246 {"rd50ds", 0, [](){ad5270diag.disable_50TP_programming();}},
Adrian Suciu 33:c3ec596a29c2 247 {"rd50st", 0, [](){ad5270diag.store_50TP();}},
Adrian Suciu 33:c3ec596a29c2 248 {"rd50a" , 0, [](){ad5270diag.read_50TP_last_address();}},
Adrian Suciu 33:c3ec596a29c2 249 {"rd50m" , 1, [](){ad5270diag.read_50TP_memory();}},
Adrian Suciu 33:c3ec596a29c2 250 {"rdwrc" , 1, [](){ad5270diag.write_ctrl_reg();}},
Adrian Suciu 33:c3ec596a29c2 251 {"rdrdc" , 0, [](){ad5270diag.read_ctrl_reg();}},
Adrian Suciu 33:c3ec596a29c2 252 {"rdrst" , 0, [](){ad5270diag.reset_RDAC();}},
Adrian Suciu 33:c3ec596a29c2 253 {"rdchm" , 1, [](){ad5270diag.change_mode();}},
Adrian Suciu 33:c3ec596a29c2 254 {"rdwrw" , 1, [](){ad5270diag.write_wiper_reg();}},
Adrian Suciu 33:c3ec596a29c2 255 {"rdrdw" , 0, [](){ad5270diag.read_wiper_reg();}},
Adrian Suciu 33:c3ec596a29c2 256
Adrian Suciu 33:c3ec596a29c2 257
Adrian Suciu 33:c3ec596a29c2 258 #endif
Adrian Suciu 7:b62398a1d17a 259 };
Adrian Suciu 7:b62398a1d17a 260 // *INDENT-ON*
Adrian Suciu 7:b62398a1d17a 261
Adrian Suciu 7:b62398a1d17a 262
Adrian Suciu 7:b62398a1d17a 263
Adrian Suciu 7:b62398a1d17a 264 void read_from_console()
Adrian Suciu 7:b62398a1d17a 265 {
Adrian Suciu 7:b62398a1d17a 266 char buffer[100] = {0};
Adrian Suciu 7:b62398a1d17a 267 size_t readPosition = 0;
Adrian Suciu 7:b62398a1d17a 268
Adrian Suciu 7:b62398a1d17a 269 // read from console until newline
Adrian Suciu 7:b62398a1d17a 270 while(1) {
Adrian Suciu 7:b62398a1d17a 271 buffer[readPosition] = pc.getc();
Adrian Suciu 7:b62398a1d17a 272 if(buffer[readPosition] == '\n' || buffer[readPosition] == '\r') {
Adrian Suciu 7:b62398a1d17a 273 buffer[readPosition] = ' ';
Adrian Suciu 7:b62398a1d17a 274 break;
Adrian Suciu 7:b62398a1d17a 275 }
Adrian Suciu 7:b62398a1d17a 276 readPosition++;
Adrian Suciu 7:b62398a1d17a 277 }
Adrian Suciu 7:b62398a1d17a 278 readPosition++;
Adrian Suciu 7:b62398a1d17a 279 buffer[readPosition] = '\0';
Adrian Suciu 7:b62398a1d17a 280 //create std::string from char buffer
Adrian Suciu 7:b62398a1d17a 281 string s(buffer);
Adrian Suciu 7:b62398a1d17a 282
Adrian Suciu 7:b62398a1d17a 283 // create std::vector of std:string, each string contains parameter
Adrian Suciu 7:b62398a1d17a 284 size_t pos = 0;
Adrian Suciu 7:b62398a1d17a 285 string delimiter = " ";
Adrian Suciu 7:b62398a1d17a 286 string token;
Adrian Suciu 7:b62398a1d17a 287 while ((pos = s.find(delimiter)) != std::string::npos) {
Adrian Suciu 7:b62398a1d17a 288 token = s.substr(0, pos);
Adrian Suciu 7:b62398a1d17a 289 cmdbuffer.push_back(token);
Adrian Suciu 7:b62398a1d17a 290 s.erase(0, pos + delimiter.length());
Adrian Suciu 7:b62398a1d17a 291 }
Adrian Suciu 7:b62398a1d17a 292
Adrian Suciu 7:b62398a1d17a 293 }
Adrian Suciu 7:b62398a1d17a 294
Adrian Suciu 7:b62398a1d17a 295 void run_command()
Adrian Suciu 7:b62398a1d17a 296 {
Adrian Suciu 7:b62398a1d17a 297 for(auto i : cmdlist) {
Adrian Suciu 7:b62398a1d17a 298 if(i.cmd_str == cmdbuffer[0]) {
Adrian Suciu 7:b62398a1d17a 299 if(static_cast<int>(cmdbuffer.size()) - 1 == i.nr_of_param || i.nr_of_param == commands::VAR) {
Adrian Suciu 7:b62398a1d17a 300 pc.printf("RX> ");
Adrian Suciu 7:b62398a1d17a 301 i.fktPtr();
Adrian Suciu 7:b62398a1d17a 302 } else {
Adrian Suciu 7:b62398a1d17a 303 pc.printf("RX> ");
Adrian Suciu 7:b62398a1d17a 304 pc.printf("Command %s expects %d parameters, found %d", i.cmd_str.c_str(), i.nr_of_param, cmdbuffer.size() - 1);
Adrian Suciu 7:b62398a1d17a 305 }
Adrian Suciu 7:b62398a1d17a 306 return;
Adrian Suciu 7:b62398a1d17a 307 }
Adrian Suciu 7:b62398a1d17a 308 }
Adrian Suciu 7:b62398a1d17a 309 pc.printf("RX> ");
Adrian Suciu 7:b62398a1d17a 310 pc.printf("Command %s not found", cmdbuffer[0].c_str());
Adrian Suciu 7:b62398a1d17a 311
Adrian Suciu 7:b62398a1d17a 312 }
Adrian Suciu 7:b62398a1d17a 313
Adrian Suciu 7:b62398a1d17a 314 int main()
Adrian Suciu 7:b62398a1d17a 315
Adrian Suciu 13:66c8e4ce4ff1 316 {
Adrian Suciu 33:c3ec596a29c2 317 pc.baud(115200);
Adrian Suciu 33:c3ec596a29c2 318 test.baud(76800);
Adrian Suciu 19:fb92949e59c9 319 // ad7791.frequency(100000);
Adrian Suciu 7:b62398a1d17a 320 pc.printf("\r\n#### DrvDiag ####\r\n");
Adrian Suciu 13:66c8e4ce4ff1 321
Adrian Suciu 7:b62398a1d17a 322 while(1) {
Adrian Suciu 7:b62398a1d17a 323 pc.printf("\r\nTX> ");
Adrian Suciu 7:b62398a1d17a 324 read_from_console();
Adrian Suciu 7:b62398a1d17a 325 run_command();
Adrian Suciu 7:b62398a1d17a 326 cmdbuffer.clear();
Adrian Suciu 7:b62398a1d17a 327 }
Adrian Suciu 7:b62398a1d17a 328
Adrian Suciu 7:b62398a1d17a 329 }
Adrian Suciu 7:b62398a1d17a 330