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:
Wed Apr 20 16:35:44 2016 +0300
Revision:
7:b62398a1d17a
Child:
8:6e96c6b3c83f
Added drvdiag tool

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Adrian Suciu 7:b62398a1d17a 1 #include "mbed.h"
Adrian Suciu 7:b62398a1d17a 2 #include "stdio.h"
Adrian Suciu 7:b62398a1d17a 3 #include <iostream>
Adrian Suciu 7:b62398a1d17a 4 #include <string>
Adrian Suciu 7:b62398a1d17a 5 #include <vector>
Adrian Suciu 7:b62398a1d17a 6
Adrian Suciu 7:b62398a1d17a 7 #include "config.h"
Adrian Suciu 7:b62398a1d17a 8
Adrian Suciu 7:b62398a1d17a 9 Serial pc(SERIAL_TX, SERIAL_RX);
Adrian Suciu 7:b62398a1d17a 10 vector<string> cmdbuffer;
Adrian Suciu 7:b62398a1d17a 11
Adrian Suciu 7:b62398a1d17a 12 class commands
Adrian Suciu 7:b62398a1d17a 13 {
Adrian Suciu 7:b62398a1d17a 14 public:
Adrian Suciu 7:b62398a1d17a 15 commands(string str, int p, void (*h)() ) : cmd_str(str), nr_of_param(p), fktPtr(h) { }
Adrian Suciu 7:b62398a1d17a 16 const static int VAR = -1; // variable number of params
Adrian Suciu 7:b62398a1d17a 17 string cmd_str;
Adrian Suciu 7:b62398a1d17a 18 int nr_of_param;
Adrian Suciu 7:b62398a1d17a 19 void (*fktPtr)(void);
Adrian Suciu 7:b62398a1d17a 20 };
Adrian Suciu 7:b62398a1d17a 21
Adrian Suciu 7:b62398a1d17a 22 // *INDENT-OFF*
Adrian Suciu 7:b62398a1d17a 23 vector<commands> cmdlist = {
Adrian Suciu 7:b62398a1d17a 24 {"nop" , 0, [](){ }},
Adrian Suciu 7:b62398a1d17a 25 {"echo",commands::VAR, [](){ for(auto i = begin(cmdbuffer) + 1, e = end(cmdbuffer); i!=e; ++i)
Adrian Suciu 7:b62398a1d17a 26 printf("%s ", i->c_str()); printf("\r\n");}},
Adrian Suciu 7:b62398a1d17a 27
Adrian Suciu 7:b62398a1d17a 28 {"help", 0 , [](){ for(auto command : cmdlist)
Adrian Suciu 7:b62398a1d17a 29 pc.printf("%s ",command.cmd_str.c_str()); }},
Adrian Suciu 7:b62398a1d17a 30 /* #### SPI ####*/
Adrian Suciu 7:b62398a1d17a 31 #ifdef SPI_LOW_LEVEL
Adrian Suciu 7:b62398a1d17a 32 {"csa", 0, [](){ spibus.format(8, 3);CSA_pin = !CSA_pin; wait_us(2);
Adrian Suciu 7:b62398a1d17a 33 pc.printf("CS ADC pin set %s", ((CSA_pin.read()) ? "high" : "low") ); }},
Adrian Suciu 7:b62398a1d17a 34 {"csr", 0, [](){ spibus.format(8, 1);CSR_pin = !CSR_pin; wait_us(2);
Adrian Suciu 7:b62398a1d17a 35 pc.printf("CS RDAC pin set %s", ((CSR_pin.read()) ? "high" : "low") );} },
Adrian Suciu 7:b62398a1d17a 36 {"spi", 1, [](){ uint8_t spibyte = strtol(cmdbuffer[1].c_str(), NULL, 16);
Adrian Suciu 7:b62398a1d17a 37 pc.printf("writing 0x%x to SPI", spibyte);
Adrian Suciu 7:b62398a1d17a 38 pc.printf("\r\nreturned: 0x%x ", spibus.write(spibyte)); }},
Adrian Suciu 7:b62398a1d17a 39 #endif
Adrian Suciu 7:b62398a1d17a 40 /* #### AD7790 #### */
Adrian Suciu 7:b62398a1d17a 41
Adrian Suciu 7:b62398a1d17a 42 #ifdef AD7790_PRESENT
Adrian Suciu 7:b62398a1d17a 43 {"adrst", 0, [](){ad7790diag.reset();}},
Adrian Suciu 7:b62398a1d17a 44 {"adwrm", 1, [](){ad7790diag.write_mode();}},
Adrian Suciu 7:b62398a1d17a 45 {"adrdm", 0, [](){ad7790diag.read_mode();}},
Adrian Suciu 7:b62398a1d17a 46 {"adwrf", 1, [](){ad7790diag.write_filter();}},
Adrian Suciu 7:b62398a1d17a 47 {"adrdf", 0, [](){ad7790diag.read_filter();}},
Adrian Suciu 7:b62398a1d17a 48 {"adrdd", 0, [](){ad7790diag.read_data();}},
Adrian Suciu 7:b62398a1d17a 49 {"adrds", 0, [](){ad7790diag.read_status();}},
Adrian Suciu 7:b62398a1d17a 50 {"adread", 0, [](){ad7790diag.read_u16();}},
Adrian Suciu 7:b62398a1d17a 51 {"adreadv", 0, [](){ad7790diag.read_voltage();}},
Adrian Suciu 7:b62398a1d17a 52 {"adsetc", 1, [](){ad7790diag.set_continous_mode();}},
Adrian Suciu 7:b62398a1d17a 53 {"adsetref", 1, [](){ad7790diag.set_reference_voltage();}},
Adrian Suciu 7:b62398a1d17a 54 {"adsetch", 1, [](){ad7790diag.set_channel();}},
Adrian Suciu 7:b62398a1d17a 55 #endif
Adrian Suciu 7:b62398a1d17a 56
Adrian Suciu 7:b62398a1d17a 57 #ifdef AD5270_PRESENT
Adrian Suciu 7:b62398a1d17a 58 {"rdwrr" , 1, [](){ad5270diag.write_RDAC();}},
Adrian Suciu 7:b62398a1d17a 59 {"rdrdr" , 0, [](){ad5270diag.read_RDAC();}},
Adrian Suciu 7:b62398a1d17a 60 {"rdwrcmd" , 2, [](){ad5270diag.write_cmd();}},
Adrian Suciu 7:b62398a1d17a 61 {"rdsetz" , 0, [](){ad5270diag.set_HiZ();}},
Adrian Suciu 7:b62398a1d17a 62 {"rd50en", 0, [](){ad5270diag.enable_50TP_programming();}},
Adrian Suciu 7:b62398a1d17a 63 {"rd50ds", 0, [](){ad5270diag.disable_50TP_programming();}},
Adrian Suciu 7:b62398a1d17a 64 {"rd50st", 0, [](){ad5270diag.store_50TP();}},
Adrian Suciu 7:b62398a1d17a 65 {"rd50a" , 0, [](){ad5270diag.read_50TP_last_address();}},
Adrian Suciu 7:b62398a1d17a 66 {"rd50m" , 1, [](){ad5270diag.read_50TP_memory();}},
Adrian Suciu 7:b62398a1d17a 67 {"rdwrc" , 1, [](){ad5270diag.write_ctrl_reg();}},
Adrian Suciu 7:b62398a1d17a 68 {"rdrdc" , 0, [](){ad5270diag.read_ctrl_reg();}},
Adrian Suciu 7:b62398a1d17a 69 {"rdrst" , 0, [](){ad5270diag.reset_RDAC();}},
Adrian Suciu 7:b62398a1d17a 70 {"rdchm" , 1, [](){ad5270diag.change_mode();}},
Adrian Suciu 7:b62398a1d17a 71 {"rdwrw" , 1, [](){ad5270diag.write_wiper_reg();}},
Adrian Suciu 7:b62398a1d17a 72 {"rdrdw" , 0, [](){ad5270diag.read_wiper_reg();}},
Adrian Suciu 7:b62398a1d17a 73 #endif
Adrian Suciu 7:b62398a1d17a 74
Adrian Suciu 7:b62398a1d17a 75 #ifdef CN0357_PRESENT
Adrian Suciu 7:b62398a1d17a 76 {"cnwrdac" , 1, [](){cn0357diag.set_RDAC();}},
Adrian Suciu 7:b62398a1d17a 77 {"cnrppm" , 0, [](){cn0357diag.read_ppm();}},
Adrian Suciu 7:b62398a1d17a 78 {"cnparam" , 2, [](){cn0357diag.set_sensor_param();}}
Adrian Suciu 7:b62398a1d17a 79 #endif
Adrian Suciu 7:b62398a1d17a 80
Adrian Suciu 7:b62398a1d17a 81 };
Adrian Suciu 7:b62398a1d17a 82 // *INDENT-ON*
Adrian Suciu 7:b62398a1d17a 83
Adrian Suciu 7:b62398a1d17a 84
Adrian Suciu 7:b62398a1d17a 85
Adrian Suciu 7:b62398a1d17a 86 void read_from_console()
Adrian Suciu 7:b62398a1d17a 87 {
Adrian Suciu 7:b62398a1d17a 88 char buffer[100] = {0};
Adrian Suciu 7:b62398a1d17a 89 size_t readPosition = 0;
Adrian Suciu 7:b62398a1d17a 90
Adrian Suciu 7:b62398a1d17a 91 // read from console until newline
Adrian Suciu 7:b62398a1d17a 92 while(1) {
Adrian Suciu 7:b62398a1d17a 93 buffer[readPosition] = pc.getc();
Adrian Suciu 7:b62398a1d17a 94 if(buffer[readPosition] == '\n' || buffer[readPosition] == '\r') {
Adrian Suciu 7:b62398a1d17a 95 buffer[readPosition] = ' ';
Adrian Suciu 7:b62398a1d17a 96 break;
Adrian Suciu 7:b62398a1d17a 97 }
Adrian Suciu 7:b62398a1d17a 98 readPosition++;
Adrian Suciu 7:b62398a1d17a 99 }
Adrian Suciu 7:b62398a1d17a 100 readPosition++;
Adrian Suciu 7:b62398a1d17a 101 buffer[readPosition] = '\0';
Adrian Suciu 7:b62398a1d17a 102 //create std::string from char buffer
Adrian Suciu 7:b62398a1d17a 103 string s(buffer);
Adrian Suciu 7:b62398a1d17a 104
Adrian Suciu 7:b62398a1d17a 105 // create std::vector of std:string, each string contains parameter
Adrian Suciu 7:b62398a1d17a 106 size_t pos = 0;
Adrian Suciu 7:b62398a1d17a 107 string delimiter = " ";
Adrian Suciu 7:b62398a1d17a 108 string token;
Adrian Suciu 7:b62398a1d17a 109 while ((pos = s.find(delimiter)) != std::string::npos) {
Adrian Suciu 7:b62398a1d17a 110 token = s.substr(0, pos);
Adrian Suciu 7:b62398a1d17a 111 cmdbuffer.push_back(token);
Adrian Suciu 7:b62398a1d17a 112 s.erase(0, pos + delimiter.length());
Adrian Suciu 7:b62398a1d17a 113 }
Adrian Suciu 7:b62398a1d17a 114
Adrian Suciu 7:b62398a1d17a 115 }
Adrian Suciu 7:b62398a1d17a 116
Adrian Suciu 7:b62398a1d17a 117 void run_command()
Adrian Suciu 7:b62398a1d17a 118 {
Adrian Suciu 7:b62398a1d17a 119 for(auto i : cmdlist) {
Adrian Suciu 7:b62398a1d17a 120 if(i.cmd_str == cmdbuffer[0]) {
Adrian Suciu 7:b62398a1d17a 121 if(static_cast<int>(cmdbuffer.size()) - 1 == i.nr_of_param || i.nr_of_param == commands::VAR) {
Adrian Suciu 7:b62398a1d17a 122 pc.printf("RX> ");
Adrian Suciu 7:b62398a1d17a 123 i.fktPtr();
Adrian Suciu 7:b62398a1d17a 124 } else {
Adrian Suciu 7:b62398a1d17a 125 pc.printf("RX> ");
Adrian Suciu 7:b62398a1d17a 126 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 127 }
Adrian Suciu 7:b62398a1d17a 128 return;
Adrian Suciu 7:b62398a1d17a 129 }
Adrian Suciu 7:b62398a1d17a 130 }
Adrian Suciu 7:b62398a1d17a 131 pc.printf("RX> ");
Adrian Suciu 7:b62398a1d17a 132 pc.printf("Command %s not found", cmdbuffer[0].c_str());
Adrian Suciu 7:b62398a1d17a 133
Adrian Suciu 7:b62398a1d17a 134 }
Adrian Suciu 7:b62398a1d17a 135
Adrian Suciu 7:b62398a1d17a 136 int main()
Adrian Suciu 7:b62398a1d17a 137 {
Adrian Suciu 7:b62398a1d17a 138
Adrian Suciu 7:b62398a1d17a 139 pc.printf("\r\n#### DrvDiag ####\r\n");
Adrian Suciu 7:b62398a1d17a 140 while(1) {
Adrian Suciu 7:b62398a1d17a 141 pc.printf("\r\nTX> ");
Adrian Suciu 7:b62398a1d17a 142 read_from_console();
Adrian Suciu 7:b62398a1d17a 143 run_command();
Adrian Suciu 7:b62398a1d17a 144 cmdbuffer.clear();
Adrian Suciu 7:b62398a1d17a 145 }
Adrian Suciu 7:b62398a1d17a 146
Adrian Suciu 7:b62398a1d17a 147 }
Adrian Suciu 7:b62398a1d17a 148