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
examples/drvdiag/main.cpp@7:b62398a1d17a, 2016-04-20 (annotated)
- 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?
| User | Revision | Line number | New 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 |
CN0357 - Toxic gas measurement
CN0216 - Weight Scale