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:
Thu Aug 18 14:46:42 2016 +0300
Revision:
26:1b988c505139
Parent:
21:a8023e5e97be
WIP on cn0391: 86ec328 Improved compatibility with Linux systems

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 26:1b988c505139 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 26:1b988c505139 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 26:1b988c505139 73 /*
Adrian Suciu 7:b62398a1d17a 74 {"echo",commands::VAR, [](){ for(auto i = begin(cmdbuffer) + 1, e = end(cmdbuffer); i!=e; ++i)
Adrian Suciu 26:1b988c505139 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 26:1b988c505139 165 {"xlawake",0,[](){adxl362diag.checkawake();}},
Adrian Suciu 26:1b988c505139 166 #endif
Adrian Suciu 26:1b988c505139 167
Adrian Suciu 26:1b988c505139 168
Adrian Suciu 26:1b988c505139 169 // UART
Adrian Suciu 26:1b988c505139 170 {"uart" , 0, [](){test.putc('\n');}},
Adrian Suciu 26:1b988c505139 171 {"uartecho" , 1, [](){test.printf(cmdbuffer[1].c_str());}},
Adrian Suciu 26:1b988c505139 172 {"uartlisten",0 , [](){
Adrian Suciu 26:1b988c505139 173 char buff[100] = {0};
Adrian Suciu 26:1b988c505139 174 size_t readPosition = 0;
Adrian Suciu 26:1b988c505139 175
Adrian Suciu 26:1b988c505139 176 // read from console until newline
Adrian Suciu 26:1b988c505139 177 while(1) {
Adrian Suciu 26:1b988c505139 178 buff[readPosition] = test.getc();
Adrian Suciu 26:1b988c505139 179 if(buff[readPosition] == '\n' || buff[readPosition] == '\r') {
Adrian Suciu 26:1b988c505139 180 buff[readPosition] = ' ';
Adrian Suciu 26:1b988c505139 181 break;
Adrian Suciu 26:1b988c505139 182 }
Adrian Suciu 26:1b988c505139 183 readPosition++;
Adrian Suciu 26:1b988c505139 184 }
Adrian Suciu 26:1b988c505139 185 readPosition++;
Adrian Suciu 26:1b988c505139 186 buff[readPosition] = '\0';
Adrian Suciu 26:1b988c505139 187 //create std::string from char buffer
Adrian Suciu 26:1b988c505139 188
Adrian Suciu 26:1b988c505139 189 pc.printf("%s",buff);}},
Adrian Suciu 26:1b988c505139 190
Adrian Suciu 26:1b988c505139 191 #ifdef AD7124_PRESENT
Adrian Suciu 26:1b988c505139 192 {"adrst" , 0, [](){ad7124diag.reset();}},
Adrian Suciu 26:1b988c505139 193 {"adrd" , 1, [](){ad7124diag.read_reg();}},
Adrian Suciu 26:1b988c505139 194 {"adrdd" , 0, [](){ad7124diag.read_data();}},
Adrian Suciu 26:1b988c505139 195 {"adrdv" , 0, [](){ad7124diag.read_volt();}},
Adrian Suciu 26:1b988c505139 196 {"adwr" , 2, [](){ad7124diag.write_reg();}},
Adrian Suciu 26:1b988c505139 197 {"adsetup",0,[]() {ad7124diag.setup();pc.printf("setup done\r\n");ad7124diag.mvpInit();pc.printf("init done\r\n");}}
Adrian Suciu 26:1b988c505139 198
Adrian Suciu 26:1b988c505139 199
Adrian Suciu 26:1b988c505139 200
Adrian Suciu 26:1b988c505139 201 #endif
Adrian Suciu 26:1b988c505139 202
Adrian Suciu 26:1b988c505139 203 #ifdef CN0398_PRESENT
Adrian Suciu 26:1b988c505139 204 {"cnrst" , 0, [](){cn0398diag.reset();}},
Adrian Suciu 26:1b988c505139 205 {"cnrd" , 1, [](){cn0398diag.read_reg();}},
Adrian Suciu 26:1b988c505139 206 /*{"cnrdd" , 0, [](){ad7124diag.read_data();}},
Adrian Suciu 26:1b988c505139 207 {"cnrdv" , 0, [](){ad7124diag.read_volt();}},*/
Adrian Suciu 26:1b988c505139 208 {"cnwr" , 2, [](){cn0398diag.write_reg();}},
Adrian Suciu 26:1b988c505139 209 {"cnsetup",0,[]() {cn0398diag.init();pc.printf("init done\r\n");}},
Adrian Suciu 26:1b988c505139 210 {"cnled0",1,[]() {cn0398diag.toggle_output(1,strtol(cmdbuffer[1].c_str(), NULL, 16)); pc.printf("LED1 toggled"); }},
Adrian Suciu 26:1b988c505139 211 {"cnled1",1,[]() {cn0398diag.toggle_output(2,strtol(cmdbuffer[1].c_str(), NULL, 16));pc.printf("LED2 toggled");}},
Adrian Suciu 26:1b988c505139 212 {"cnoffp",0,[]() {cn0398diag.offsetph();pc.printf("OffsetVoltage measured");}},
Adrian Suciu 26:1b988c505139 213 {"cnpcal0",1,[]() {cn0398diag.calibp(0);pc.printf("calibration point 0");}},
Adrian Suciu 26:1b988c505139 214 {"cnpcal1",1,[]() {cn0398diag.calibp(1);pc.printf("calibration point 1");}},
Adrian Suciu 26:1b988c505139 215 {"cnreadp",0,[]() {cn0398diag.readp();pc.printf("calibration point 1");}},
Adrian Suciu 26:1b988c505139 216 {"cnreadm",0,[]() {cn0398diag.readm();pc.printf("calibration point 1");}},
Adrian Suciu 26:1b988c505139 217 {"cnreadt",0,[]() {cn0398diag.readt();pc.printf("Temperature Read");}},
Adrian Suciu 26:1b988c505139 218
Adrian Suciu 26:1b988c505139 219
Adrian Suciu 19:fb92949e59c9 220
Adrian Suciu 19:fb92949e59c9 221
Adrian Suciu 19:fb92949e59c9 222 #endif
Adrian Suciu 19:fb92949e59c9 223
Adrian Suciu 26:1b988c505139 224 #ifdef CN0397_PRESENT
Adrian Suciu 26:1b988c505139 225 {"cnrst" , 0, [](){cn0397diag.reset();}},
Adrian Suciu 26:1b988c505139 226 /* {"cnrd" , 1, [](){cn0397diag.read_reg();}},
Adrian Suciu 26:1b988c505139 227 {"cnwr" , 2, [](){cn0397diag.write_reg();}},*/
Adrian Suciu 26:1b988c505139 228 {"cnsetup",0,[]() {cn0397diag.init();pc.printf("init done\r\n");}},
Adrian Suciu 26:1b988c505139 229 {"cnread",0,[]() {cn0397diag.read();pc.printf("calibration point 1");}},
Adrian Suciu 26:1b988c505139 230 #endif
Adrian Suciu 26:1b988c505139 231
Adrian Suciu 26:1b988c505139 232 #ifdef CN0396_PRESENT
Adrian Suciu 26:1b988c505139 233 {"cntrst" , 0, [](){pc.printf("reset temp sensor \r\n");cn0396diag.dut.temp.reset();}},
Adrian Suciu 26:1b988c505139 234 {"cntrds" , 0, [](){pc.printf("temp status: %x \r\n",cn0396diag.dut.temp.read_status());}},
Adrian Suciu 26:1b988c505139 235 {"cntrdt" , 0, [](){pc.printf("temp val: %x \r\n",cn0396diag.dut.temp.read_temp());}},
Adrian Suciu 26:1b988c505139 236 {"cntrdc" , 0, [](){pc.printf("temp val: %x \r\n",cn0396diag.dut.temp.read_config());}},
Adrian Suciu 26:1b988c505139 237 {"cntwcf" , 1, [](){pc.printf("wrote config: %x \r\n",strtol(cmdbuffer[1].c_str(), NULL, 16));
Adrian Suciu 26:1b988c505139 238 cn0396diag.dut.temp.write_config(strtol(cmdbuffer[1].c_str(), NULL, 16));}},
Adrian Suciu 26:1b988c505139 239 {"cnardi" , 0, [](){pc.printf("adid : %x \r\n",cn0396diag.dut.ad.get_register_value(3,1,true));}},
Adrian Suciu 26:1b988c505139 240
Adrian Suciu 26:1b988c505139 241 {"rdwrr" , 1, [](){ad5270diag.write_RDAC();}},
Adrian Suciu 26:1b988c505139 242 {"rdrdr" , 0, [](){ad5270diag.read_RDAC();}},
Adrian Suciu 26:1b988c505139 243 {"rdwrcmd" , 2, [](){ad5270diag.write_cmd();}},
Adrian Suciu 26:1b988c505139 244 {"rdsetz" , 0, [](){ad5270diag.set_HiZ();}},
Adrian Suciu 26:1b988c505139 245 {"rd50en", 0, [](){ad5270diag.enable_50TP_programming();}},
Adrian Suciu 26:1b988c505139 246 {"rd50ds", 0, [](){ad5270diag.disable_50TP_programming();}},
Adrian Suciu 26:1b988c505139 247 {"rd50st", 0, [](){ad5270diag.store_50TP();}},
Adrian Suciu 26:1b988c505139 248 {"rd50a" , 0, [](){ad5270diag.read_50TP_last_address();}},
Adrian Suciu 26:1b988c505139 249 {"rd50m" , 1, [](){ad5270diag.read_50TP_memory();}},
Adrian Suciu 26:1b988c505139 250 {"rdwrc" , 1, [](){ad5270diag.write_ctrl_reg();}},
Adrian Suciu 26:1b988c505139 251 {"rdrdc" , 0, [](){ad5270diag.read_ctrl_reg();}},
Adrian Suciu 26:1b988c505139 252 {"rdrst" , 0, [](){ad5270diag.reset_RDAC();}},
Adrian Suciu 26:1b988c505139 253 {"rdchm" , 1, [](){ad5270diag.change_mode();}},
Adrian Suciu 26:1b988c505139 254 {"rdwrw" , 1, [](){ad5270diag.write_wiper_reg();}},
Adrian Suciu 26:1b988c505139 255 {"rdrdw" , 0, [](){ad5270diag.read_wiper_reg();}},
Adrian Suciu 26:1b988c505139 256 {"rddc" , 0, [](){ uint8_t daisy[4]={0x08,0x00,0x08,0x00};
Adrian Suciu 26:1b988c505139 257 ad5270diag.dut.daisy_chain(daisy,4);
Adrian Suciu 26:1b988c505139 258 for(uint8_t i=0;i<4;i++)
Adrian Suciu 26:1b988c505139 259 {
Adrian Suciu 26:1b988c505139 260 pc.printf("%x ",daisy[i]);
Adrian Suciu 26:1b988c505139 261 }
Adrian Suciu 26:1b988c505139 262 pc.printf("\r\n");
Adrian Suciu 26:1b988c505139 263 }
Adrian Suciu 26:1b988c505139 264 },
Adrian Suciu 26:1b988c505139 265 {"trdid",0,[](){uint8_t val = cn0396diag.dut.temp.read_id();
Adrian Suciu 26:1b988c505139 266 pc.printf("%x \r\n",val);}},
Adrian Suciu 26:1b988c505139 267 {"ardid",0,[](){uint8_t val = cn0396diag.dut.ad.get_register_value(AD7798_REG_ID,1);
Adrian Suciu 26:1b988c505139 268 pc.printf("%x \r\n",val);}},
Adrian Suciu 26:1b988c505139 269 {"adrst",0,[](){cn0396diag.dut.ad.reset();pc.printf("reseted ADC \r\n");}},
Adrian Suciu 26:1b988c505139 270 {"cnrst",0,[](){
Adrian Suciu 26:1b988c505139 271 uint8_t daisy1[4]={0x08,0x01,0x08,0x01};
Adrian Suciu 26:1b988c505139 272 cn0396diag.dut.rdac.daisy_chain(daisy1,4);
Adrian Suciu 26:1b988c505139 273 uint8_t daisy2[4]={0,0,0,0};
Adrian Suciu 26:1b988c505139 274 cn0396diag.dut.rdac.daisy_chain(daisy2,4);
Adrian Suciu 26:1b988c505139 275 cn0396diag.dut.ad.reset();
Adrian Suciu 26:1b988c505139 276 cn0396diag.dut.temp.reset();
Adrian Suciu 26:1b988c505139 277 pc.printf("reseted ADC \r\n");
Adrian Suciu 26:1b988c505139 278 }},
Adrian Suciu 26:1b988c505139 279
Adrian Suciu 26:1b988c505139 280
Adrian Suciu 26:1b988c505139 281
Adrian Suciu 26:1b988c505139 282
Adrian Suciu 26:1b988c505139 283 #endif
Adrian Suciu 7:b62398a1d17a 284 };
Adrian Suciu 7:b62398a1d17a 285 // *INDENT-ON*
Adrian Suciu 7:b62398a1d17a 286
Adrian Suciu 7:b62398a1d17a 287
Adrian Suciu 7:b62398a1d17a 288
Adrian Suciu 7:b62398a1d17a 289 void read_from_console()
Adrian Suciu 7:b62398a1d17a 290 {
Adrian Suciu 7:b62398a1d17a 291 char buffer[100] = {0};
Adrian Suciu 7:b62398a1d17a 292 size_t readPosition = 0;
Adrian Suciu 7:b62398a1d17a 293
Adrian Suciu 7:b62398a1d17a 294 // read from console until newline
Adrian Suciu 7:b62398a1d17a 295 while(1) {
Adrian Suciu 7:b62398a1d17a 296 buffer[readPosition] = pc.getc();
Adrian Suciu 7:b62398a1d17a 297 if(buffer[readPosition] == '\n' || buffer[readPosition] == '\r') {
Adrian Suciu 7:b62398a1d17a 298 buffer[readPosition] = ' ';
Adrian Suciu 7:b62398a1d17a 299 break;
Adrian Suciu 7:b62398a1d17a 300 }
Adrian Suciu 7:b62398a1d17a 301 readPosition++;
Adrian Suciu 7:b62398a1d17a 302 }
Adrian Suciu 7:b62398a1d17a 303 readPosition++;
Adrian Suciu 7:b62398a1d17a 304 buffer[readPosition] = '\0';
Adrian Suciu 7:b62398a1d17a 305 //create std::string from char buffer
Adrian Suciu 7:b62398a1d17a 306 string s(buffer);
Adrian Suciu 7:b62398a1d17a 307
Adrian Suciu 7:b62398a1d17a 308 // create std::vector of std:string, each string contains parameter
Adrian Suciu 7:b62398a1d17a 309 size_t pos = 0;
Adrian Suciu 7:b62398a1d17a 310 string delimiter = " ";
Adrian Suciu 7:b62398a1d17a 311 string token;
Adrian Suciu 7:b62398a1d17a 312 while ((pos = s.find(delimiter)) != std::string::npos) {
Adrian Suciu 7:b62398a1d17a 313 token = s.substr(0, pos);
Adrian Suciu 7:b62398a1d17a 314 cmdbuffer.push_back(token);
Adrian Suciu 7:b62398a1d17a 315 s.erase(0, pos + delimiter.length());
Adrian Suciu 7:b62398a1d17a 316 }
Adrian Suciu 7:b62398a1d17a 317
Adrian Suciu 7:b62398a1d17a 318 }
Adrian Suciu 7:b62398a1d17a 319
Adrian Suciu 7:b62398a1d17a 320 void run_command()
Adrian Suciu 7:b62398a1d17a 321 {
Adrian Suciu 7:b62398a1d17a 322 for(auto i : cmdlist) {
Adrian Suciu 7:b62398a1d17a 323 if(i.cmd_str == cmdbuffer[0]) {
Adrian Suciu 7:b62398a1d17a 324 if(static_cast<int>(cmdbuffer.size()) - 1 == i.nr_of_param || i.nr_of_param == commands::VAR) {
Adrian Suciu 7:b62398a1d17a 325 pc.printf("RX> ");
Adrian Suciu 7:b62398a1d17a 326 i.fktPtr();
Adrian Suciu 7:b62398a1d17a 327 } else {
Adrian Suciu 7:b62398a1d17a 328 pc.printf("RX> ");
Adrian Suciu 7:b62398a1d17a 329 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 330 }
Adrian Suciu 7:b62398a1d17a 331 return;
Adrian Suciu 7:b62398a1d17a 332 }
Adrian Suciu 7:b62398a1d17a 333 }
Adrian Suciu 7:b62398a1d17a 334 pc.printf("RX> ");
Adrian Suciu 7:b62398a1d17a 335 pc.printf("Command %s not found", cmdbuffer[0].c_str());
Adrian Suciu 7:b62398a1d17a 336
Adrian Suciu 7:b62398a1d17a 337 }
Adrian Suciu 7:b62398a1d17a 338
Adrian Suciu 7:b62398a1d17a 339 int main()
Adrian Suciu 7:b62398a1d17a 340
Adrian Suciu 13:66c8e4ce4ff1 341 {
Adrian Suciu 26:1b988c505139 342 pc.baud(115200);
Adrian Suciu 26:1b988c505139 343 test.baud(76800);
Adrian Suciu 19:fb92949e59c9 344 // ad7791.frequency(100000);
Adrian Suciu 7:b62398a1d17a 345 pc.printf("\r\n#### DrvDiag ####\r\n");
Adrian Suciu 26:1b988c505139 346 cn0396.ad.frequency(500000);
Adrian Suciu 26:1b988c505139 347 cn0396.rdac.frequency(500000);
Adrian Suciu 26:1b988c505139 348 cn0396.temp.frequency(500000);
Adrian Suciu 26:1b988c505139 349
Adrian Suciu 26:1b988c505139 350 cn0396.csad = true;
Adrian Suciu 26:1b988c505139 351 cn0396.csrdac = true;
Adrian Suciu 26:1b988c505139 352 cn0396.cstemp = true;
Adrian Suciu 13:66c8e4ce4ff1 353
Adrian Suciu 7:b62398a1d17a 354 while(1) {
Adrian Suciu 7:b62398a1d17a 355 pc.printf("\r\nTX> ");
Adrian Suciu 7:b62398a1d17a 356 read_from_console();
Adrian Suciu 7:b62398a1d17a 357 run_command();
Adrian Suciu 7:b62398a1d17a 358 cmdbuffer.clear();
Adrian Suciu 7:b62398a1d17a 359 }
Adrian Suciu 7:b62398a1d17a 360
Adrian Suciu 7:b62398a1d17a 361 }
Adrian Suciu 7:b62398a1d17a 362