MMEx with SPI Slave to allow legacy devices to communicate with modern media such as USB, SD cards, the internet and all of the mbed\'s other interfaces
Dependencies: NetServices MSCUsbHost mbed TMP102 SDFileSystem
mfuncs.cpp@0:67a55a82ce06, 2011-02-27 (annotated)
- Committer:
- DeMein
- Date:
- Sun Feb 27 18:54:40 2011 +0000
- Revision:
- 0:67a55a82ce06
Version as submitted to the NXP Design Challenge
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
DeMein | 0:67a55a82ce06 | 1 | /* MMEx for MBED - MBED specific command processing |
DeMein | 0:67a55a82ce06 | 2 | * Copyright (c) 2011 MK |
DeMein | 0:67a55a82ce06 | 3 | * |
DeMein | 0:67a55a82ce06 | 4 | * Permission is hereby granted, free of charge, to any person obtaining a copy |
DeMein | 0:67a55a82ce06 | 5 | * of this software and associated documentation files (the "Software"), to deal |
DeMein | 0:67a55a82ce06 | 6 | * in the Software without restriction, including without limitation the rights |
DeMein | 0:67a55a82ce06 | 7 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
DeMein | 0:67a55a82ce06 | 8 | * copies of the Software, and to permit persons to whom the Software is |
DeMein | 0:67a55a82ce06 | 9 | * furnished to do so, subject to the following conditions: |
DeMein | 0:67a55a82ce06 | 10 | * |
DeMein | 0:67a55a82ce06 | 11 | * The above copyright notice and this permission notice shall be included in |
DeMein | 0:67a55a82ce06 | 12 | * all copies or substantial portions of the Software. |
DeMein | 0:67a55a82ce06 | 13 | * |
DeMein | 0:67a55a82ce06 | 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
DeMein | 0:67a55a82ce06 | 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
DeMein | 0:67a55a82ce06 | 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
DeMein | 0:67a55a82ce06 | 17 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
DeMein | 0:67a55a82ce06 | 18 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
DeMein | 0:67a55a82ce06 | 19 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
DeMein | 0:67a55a82ce06 | 20 | * THE SOFTWARE. |
DeMein | 0:67a55a82ce06 | 21 | */ |
DeMein | 0:67a55a82ce06 | 22 | |
DeMein | 0:67a55a82ce06 | 23 | /** |
DeMein | 0:67a55a82ce06 | 24 | \file mfuncs.cpp |
DeMein | 0:67a55a82ce06 | 25 | \brief Commands starting with M for MBED features |
DeMein | 0:67a55a82ce06 | 26 | */ |
DeMein | 0:67a55a82ce06 | 27 | |
DeMein | 0:67a55a82ce06 | 28 | #include "mfuncs.h" |
DeMein | 0:67a55a82ce06 | 29 | |
DeMein | 0:67a55a82ce06 | 30 | /** main entry for parsing M-commands |
DeMein | 0:67a55a82ce06 | 31 | * |
DeMein | 0:67a55a82ce06 | 32 | */ |
DeMein | 0:67a55a82ce06 | 33 | void parse_M() { |
DeMein | 0:67a55a82ce06 | 34 | // process M-commands for mbed |
DeMein | 0:67a55a82ce06 | 35 | DBG_msg("parse_M", inbuf); |
DeMein | 0:67a55a82ce06 | 36 | err_num = noerror; |
DeMein | 0:67a55a82ce06 | 37 | |
DeMein | 0:67a55a82ce06 | 38 | wipesp(inbuf); // remove all spaces from string |
DeMein | 0:67a55a82ce06 | 39 | |
DeMein | 0:67a55a82ce06 | 40 | if (inbuf[1] != NULL) { |
DeMein | 0:67a55a82ce06 | 41 | switch (inbuf[1]) { |
DeMein | 0:67a55a82ce06 | 42 | case mled : do_mled(); // control LED's |
DeMein | 0:67a55a82ce06 | 43 | break; |
DeMein | 0:67a55a82ce06 | 44 | case mversion : do_mversion(); // get version string |
DeMein | 0:67a55a82ce06 | 45 | break; |
DeMein | 0:67a55a82ce06 | 46 | case mwelcome : do_mwelcome(); // get welcome string |
DeMein | 0:67a55a82ce06 | 47 | break; |
DeMein | 0:67a55a82ce06 | 48 | case mstatus : do_mstatus(); // get MMex status |
DeMein | 0:67a55a82ce06 | 49 | break; |
DeMein | 0:67a55a82ce06 | 50 | case mdebug : do_mdebug(); // control DEBUG level |
DeMein | 0:67a55a82ce06 | 51 | break; |
DeMein | 0:67a55a82ce06 | 52 | case merror : do_merror(); // get latest error message |
DeMein | 0:67a55a82ce06 | 53 | break; |
DeMein | 0:67a55a82ce06 | 54 | case mbaud : do_mbaud(); // set console baud rate |
DeMein | 0:67a55a82ce06 | 55 | break; |
DeMein | 0:67a55a82ce06 | 56 | case mcase : do_mcase(); |
DeMein | 0:67a55a82ce06 | 57 | break; |
DeMein | 0:67a55a82ce06 | 58 | case mtime : do_mtime(); |
DeMein | 0:67a55a82ce06 | 59 | break; |
DeMein | 0:67a55a82ce06 | 60 | case mreset : do_mreset(); // reset mbed |
DeMein | 0:67a55a82ce06 | 61 | break; |
DeMein | 0:67a55a82ce06 | 62 | default : do_mdefault(); // command not recognized |
DeMein | 0:67a55a82ce06 | 63 | break; |
DeMein | 0:67a55a82ce06 | 64 | } |
DeMein | 0:67a55a82ce06 | 65 | } else { do_mdefault(); } |
DeMein | 0:67a55a82ce06 | 66 | } |
DeMein | 0:67a55a82ce06 | 67 | |
DeMein | 0:67a55a82ce06 | 68 | /** control/read MBED led status |
DeMein | 0:67a55a82ce06 | 69 | * |
DeMein | 0:67a55a82ce06 | 70 | * syntax: ML[number][value]<CR> |
DeMein | 0:67a55a82ce06 | 71 | * \n [number]: 1, 2, 3, 4, LED number |
DeMein | 0:67a55a82ce06 | 72 | * \n [value] : 0 (off), 1(ON), T(toggle), R(read) |
DeMein | 0:67a55a82ce06 | 73 | */ |
DeMein | 0:67a55a82ce06 | 74 | void do_mled() { |
DeMein | 0:67a55a82ce06 | 75 | DBG_msg("mled", inbuf); |
DeMein | 0:67a55a82ce06 | 76 | if ((inbuf[2] != NULL) && (inbuf[3] != NULL)) { |
DeMein | 0:67a55a82ce06 | 77 | // we have enough arguments |
DeMein | 0:67a55a82ce06 | 78 | switch (inbuf[3]) { |
DeMein | 0:67a55a82ce06 | 79 | case ledon : |
DeMein | 0:67a55a82ce06 | 80 | switch (inbuf[2]) { |
DeMein | 0:67a55a82ce06 | 81 | case '1' : _led1.write(1); break; |
DeMein | 0:67a55a82ce06 | 82 | case '2' : _led2.write(1); break; |
DeMein | 0:67a55a82ce06 | 83 | case '3' : _led3.write(1); break; |
DeMein | 0:67a55a82ce06 | 84 | case '4' : _led4.write(1); break; |
DeMein | 0:67a55a82ce06 | 85 | default : do_mdefault(); break; |
DeMein | 0:67a55a82ce06 | 86 | } |
DeMein | 0:67a55a82ce06 | 87 | break; |
DeMein | 0:67a55a82ce06 | 88 | |
DeMein | 0:67a55a82ce06 | 89 | case ledoff : |
DeMein | 0:67a55a82ce06 | 90 | switch (inbuf[2]) { |
DeMein | 0:67a55a82ce06 | 91 | case '1' : _led1.write(0); break; |
DeMein | 0:67a55a82ce06 | 92 | case '2' : _led2.write(0); break; |
DeMein | 0:67a55a82ce06 | 93 | case '3' : _led3.write(0); break; |
DeMein | 0:67a55a82ce06 | 94 | case '4' : _led4.write(0); break; |
DeMein | 0:67a55a82ce06 | 95 | default : do_mdefault(); break; |
DeMein | 0:67a55a82ce06 | 96 | } |
DeMein | 0:67a55a82ce06 | 97 | break; |
DeMein | 0:67a55a82ce06 | 98 | |
DeMein | 0:67a55a82ce06 | 99 | case ledtog : |
DeMein | 0:67a55a82ce06 | 100 | switch (inbuf[2]) { |
DeMein | 0:67a55a82ce06 | 101 | case '1' : _led1 = !_led1; break; |
DeMein | 0:67a55a82ce06 | 102 | case '2' : _led2 = !_led2; break; |
DeMein | 0:67a55a82ce06 | 103 | case '3' : _led3 = !_led3; break; |
DeMein | 0:67a55a82ce06 | 104 | case '4' : _led4 = !_led4; break; |
DeMein | 0:67a55a82ce06 | 105 | default : do_mdefault(); break; |
DeMein | 0:67a55a82ce06 | 106 | } |
DeMein | 0:67a55a82ce06 | 107 | break; |
DeMein | 0:67a55a82ce06 | 108 | |
DeMein | 0:67a55a82ce06 | 109 | case ledread : |
DeMein | 0:67a55a82ce06 | 110 | switch (inbuf[2]) { |
DeMein | 0:67a55a82ce06 | 111 | case '1' : send_int(_led1); break; |
DeMein | 0:67a55a82ce06 | 112 | case '2' : send_int(_led2); break; |
DeMein | 0:67a55a82ce06 | 113 | case '3' : send_int(_led3); break; |
DeMein | 0:67a55a82ce06 | 114 | case '4' : send_int(_led4); break; |
DeMein | 0:67a55a82ce06 | 115 | default : do_mdefault(); break; |
DeMein | 0:67a55a82ce06 | 116 | } |
DeMein | 0:67a55a82ce06 | 117 | break; |
DeMein | 0:67a55a82ce06 | 118 | |
DeMein | 0:67a55a82ce06 | 119 | default : do_mdefault(); |
DeMein | 0:67a55a82ce06 | 120 | break; |
DeMein | 0:67a55a82ce06 | 121 | } |
DeMein | 0:67a55a82ce06 | 122 | } else { do_mdefault(); } |
DeMein | 0:67a55a82ce06 | 123 | } |
DeMein | 0:67a55a82ce06 | 124 | |
DeMein | 0:67a55a82ce06 | 125 | /** Read MMEx version information |
DeMein | 0:67a55a82ce06 | 126 | * |
DeMein | 0:67a55a82ce06 | 127 | * syntax: MV<CR> |
DeMein | 0:67a55a82ce06 | 128 | * |
DeMein | 0:67a55a82ce06 | 129 | */ |
DeMein | 0:67a55a82ce06 | 130 | void do_mversion() { |
DeMein | 0:67a55a82ce06 | 131 | DBG_msg("mversion", inbuf); |
DeMein | 0:67a55a82ce06 | 132 | char str[] = msg_version; |
DeMein | 0:67a55a82ce06 | 133 | upstring(str); |
DeMein | 0:67a55a82ce06 | 134 | mldl.tx_string(str); |
DeMein | 0:67a55a82ce06 | 135 | } |
DeMein | 0:67a55a82ce06 | 136 | |
DeMein | 0:67a55a82ce06 | 137 | /** Read MMEx welcome message |
DeMein | 0:67a55a82ce06 | 138 | * |
DeMein | 0:67a55a82ce06 | 139 | * syntax: MW<CR> |
DeMein | 0:67a55a82ce06 | 140 | * |
DeMein | 0:67a55a82ce06 | 141 | */ |
DeMein | 0:67a55a82ce06 | 142 | void do_mwelcome() { |
DeMein | 0:67a55a82ce06 | 143 | DBG_msg("mwelcome", inbuf); |
DeMein | 0:67a55a82ce06 | 144 | welcome(); |
DeMein | 0:67a55a82ce06 | 145 | } |
DeMein | 0:67a55a82ce06 | 146 | |
DeMein | 0:67a55a82ce06 | 147 | /** Read MMEx status message |
DeMein | 0:67a55a82ce06 | 148 | * |
DeMein | 0:67a55a82ce06 | 149 | * syntax: MS<CR> |
DeMein | 0:67a55a82ce06 | 150 | * |
DeMein | 0:67a55a82ce06 | 151 | */ |
DeMein | 0:67a55a82ce06 | 152 | void do_mstatus() { |
DeMein | 0:67a55a82ce06 | 153 | DBG_msg("mstatus", inbuf); |
DeMein | 0:67a55a82ce06 | 154 | send_status(); |
DeMein | 0:67a55a82ce06 | 155 | } |
DeMein | 0:67a55a82ce06 | 156 | |
DeMein | 0:67a55a82ce06 | 157 | /** Set MMEx debug level |
DeMein | 0:67a55a82ce06 | 158 | * |
DeMein | 0:67a55a82ce06 | 159 | * syntax: MD[value]<CR> |
DeMein | 0:67a55a82ce06 | 160 | * \n [value]: 0 no debug output |
DeMein | 0:67a55a82ce06 | 161 | * \n [value]: 1 high level debug messages |
DeMein | 0:67a55a82ce06 | 162 | * \n [value]: 2 like 1, including SPI straffic |
DeMein | 0:67a55a82ce06 | 163 | * |
DeMein | 0:67a55a82ce06 | 164 | */ |
DeMein | 0:67a55a82ce06 | 165 | void do_mdebug() { |
DeMein | 0:67a55a82ce06 | 166 | DBG_msg("mdebug", inbuf); |
DeMein | 0:67a55a82ce06 | 167 | if (inbuf[2] != NULL) { |
DeMein | 0:67a55a82ce06 | 168 | // we have enough arguments |
DeMein | 0:67a55a82ce06 | 169 | switch (inbuf[2]) { |
DeMein | 0:67a55a82ce06 | 170 | case '0' : DBG_level = DBG_OFF; |
DeMein | 0:67a55a82ce06 | 171 | mldl.DBG_set(DBG_OFF); |
DeMein | 0:67a55a82ce06 | 172 | // now redirect stderr to NULL |
DeMein | 0:67a55a82ce06 | 173 | freopen(NULL, "w", stderr); |
DeMein | 0:67a55a82ce06 | 174 | freopen(NULL, "w", stdout); |
DeMein | 0:67a55a82ce06 | 175 | break; |
DeMein | 0:67a55a82ce06 | 176 | case '1' : DBG_level = DBG_ON; |
DeMein | 0:67a55a82ce06 | 177 | mldl.DBG_set(DBG_ON); |
DeMein | 0:67a55a82ce06 | 178 | //restore sterr and stdout |
DeMein | 0:67a55a82ce06 | 179 | freopen("/pc", "w", stderr); |
DeMein | 0:67a55a82ce06 | 180 | freopen("/pc", "w", stdout); |
DeMein | 0:67a55a82ce06 | 181 | break; |
DeMein | 0:67a55a82ce06 | 182 | case '2' : DBG_level = DBG_FULL; |
DeMein | 0:67a55a82ce06 | 183 | mldl.DBG_set(DBG_FULL); |
DeMein | 0:67a55a82ce06 | 184 | //restore sterr and stdout |
DeMein | 0:67a55a82ce06 | 185 | freopen("/pc", "w", stderr); |
DeMein | 0:67a55a82ce06 | 186 | freopen("/pc", "w", stdout); |
DeMein | 0:67a55a82ce06 | 187 | break; |
DeMein | 0:67a55a82ce06 | 188 | default : do_mdefault(); |
DeMein | 0:67a55a82ce06 | 189 | break; |
DeMein | 0:67a55a82ce06 | 190 | } |
DeMein | 0:67a55a82ce06 | 191 | } else { do_mdefault(); } |
DeMein | 0:67a55a82ce06 | 192 | } |
DeMein | 0:67a55a82ce06 | 193 | |
DeMein | 0:67a55a82ce06 | 194 | /** get latest error number |
DeMein | 0:67a55a82ce06 | 195 | * |
DeMein | 0:67a55a82ce06 | 196 | * syntax: ME<CR> |
DeMein | 0:67a55a82ce06 | 197 | * |
DeMein | 0:67a55a82ce06 | 198 | */ |
DeMein | 0:67a55a82ce06 | 199 | void do_merror() { |
DeMein | 0:67a55a82ce06 | 200 | // get latest error message |
DeMein | 0:67a55a82ce06 | 201 | DBG_msg("do_merror", inbuf); |
DeMein | 0:67a55a82ce06 | 202 | send_2int(last_err); |
DeMein | 0:67a55a82ce06 | 203 | last_err = 0; // clear after reading |
DeMein | 0:67a55a82ce06 | 204 | } |
DeMein | 0:67a55a82ce06 | 205 | |
DeMein | 0:67a55a82ce06 | 206 | /** set console (UBSB) baud rate |
DeMein | 0:67a55a82ce06 | 207 | * |
DeMein | 0:67a55a82ce06 | 208 | * syntax: MB[value]<CR> |
DeMein | 0:67a55a82ce06 | 209 | * \n [value]: new baud rate |
DeMein | 0:67a55a82ce06 | 210 | * |
DeMein | 0:67a55a82ce06 | 211 | */ |
DeMein | 0:67a55a82ce06 | 212 | void do_mbaud() { |
DeMein | 0:67a55a82ce06 | 213 | long int baud = 0; |
DeMein | 0:67a55a82ce06 | 214 | |
DeMein | 0:67a55a82ce06 | 215 | DBG_msg("do_mbaud", inbuf); |
DeMein | 0:67a55a82ce06 | 216 | |
DeMein | 0:67a55a82ce06 | 217 | // next chars on the commandline is the baud rate |
DeMein | 0:67a55a82ce06 | 218 | if (inbuf[2] != NULL) { |
DeMein | 0:67a55a82ce06 | 219 | // now process line |
DeMein | 0:67a55a82ce06 | 220 | for (int i = 2; ((inbuf[i] >='0') && (inbuf[i] <= '9')); i++ ) { |
DeMein | 0:67a55a82ce06 | 221 | baud = 10 * baud + (inbuf[i] - '0'); |
DeMein | 0:67a55a82ce06 | 222 | } |
DeMein | 0:67a55a82ce06 | 223 | } |
DeMein | 0:67a55a82ce06 | 224 | if (baud == 0) { |
DeMein | 0:67a55a82ce06 | 225 | DBG_msg("do_mbaud", "invalid baud rate"); |
DeMein | 0:67a55a82ce06 | 226 | send_error(err_notrecognized); |
DeMein | 0:67a55a82ce06 | 227 | } else { |
DeMein | 0:67a55a82ce06 | 228 | // now set baud rate |
DeMein | 0:67a55a82ce06 | 229 | DBG_int("set baudrate", baud); |
DeMein | 0:67a55a82ce06 | 230 | pc.baud(baud); |
DeMein | 0:67a55a82ce06 | 231 | } |
DeMein | 0:67a55a82ce06 | 232 | } |
DeMein | 0:67a55a82ce06 | 233 | |
DeMein | 0:67a55a82ce06 | 234 | /** set case for output of text commands |
DeMein | 0:67a55a82ce06 | 235 | * |
DeMein | 0:67a55a82ce06 | 236 | * syntax: MC[value]<CR> |
DeMein | 0:67a55a82ce06 | 237 | * \n [value]: U all output upper case |
DeMein | 0:67a55a82ce06 | 238 | * \n [value]: N no change to output (or any other value) |
DeMein | 0:67a55a82ce06 | 239 | * |
DeMein | 0:67a55a82ce06 | 240 | */ |
DeMein | 0:67a55a82ce06 | 241 | void do_mcase() { |
DeMein | 0:67a55a82ce06 | 242 | DBG_msg("do_mcase", inbuf); |
DeMein | 0:67a55a82ce06 | 243 | |
DeMein | 0:67a55a82ce06 | 244 | // next char on commandline is 'U' |
DeMein | 0:67a55a82ce06 | 245 | upcase = false; // default value |
DeMein | 0:67a55a82ce06 | 246 | if (inbuf[2] == ucase ) { |
DeMein | 0:67a55a82ce06 | 247 | upcase = true; // change default if 'U' |
DeMein | 0:67a55a82ce06 | 248 | DBG_msg("do_mcase", "change to uppercase"); |
DeMein | 0:67a55a82ce06 | 249 | } else { |
DeMein | 0:67a55a82ce06 | 250 | DBG_msg("do_mcase", "no change"); |
DeMein | 0:67a55a82ce06 | 251 | } |
DeMein | 0:67a55a82ce06 | 252 | } |
DeMein | 0:67a55a82ce06 | 253 | |
DeMein | 0:67a55a82ce06 | 254 | /** get or set the MBED RTC time |
DeMein | 0:67a55a82ce06 | 255 | * |
DeMein | 0:67a55a82ce06 | 256 | * syntax: MT<CR> return the current time set in the RTC in date format |
DeMein | 0:67a55a82ce06 | 257 | * \n MTS<CR> return the current time in seconds |
DeMein | 0:67a55a82ce06 | 258 | * \n MT[value]<CR> set the time in date format |
DeMein | 0:67a55a82ce06 | 259 | * \n MTS[value]<CR> set the current time in seconds |
DeMein | 0:67a55a82ce06 | 260 | * \n date format is [year][month][day][hour][minute][second], all 2 digits, |
DeMein | 0:67a55a82ce06 | 261 | * \n year is 4 digits |
DeMein | 0:67a55a82ce06 | 262 | * \n seconds format is number of seconds since Jan 1, 1970 (Unix convention) |
DeMein | 0:67a55a82ce06 | 263 | */ |
DeMein | 0:67a55a82ce06 | 264 | void do_mtime() { |
DeMein | 0:67a55a82ce06 | 265 | bool secs = false; |
DeMein | 0:67a55a82ce06 | 266 | time_t seconds; |
DeMein | 0:67a55a82ce06 | 267 | struct tm t; // for YYYYMMDDHHMMSS format |
DeMein | 0:67a55a82ce06 | 268 | |
DeMein | 0:67a55a82ce06 | 269 | |
DeMein | 0:67a55a82ce06 | 270 | char s[40]; // to hold output string |
DeMein | 0:67a55a82ce06 | 271 | int i = 2; |
DeMein | 0:67a55a82ce06 | 272 | DBG_msg("do_mtime", inbuf); |
DeMein | 0:67a55a82ce06 | 273 | |
DeMein | 0:67a55a82ce06 | 274 | if (inbuf[2] == 'S') { |
DeMein | 0:67a55a82ce06 | 275 | secs = true; // seconds mode |
DeMein | 0:67a55a82ce06 | 276 | i = 3; // char counter for time value |
DeMein | 0:67a55a82ce06 | 277 | } |
DeMein | 0:67a55a82ce06 | 278 | |
DeMein | 0:67a55a82ce06 | 279 | // check if there is a parameter, if so read it |
DeMein | 0:67a55a82ce06 | 280 | if (inbuf[i] == NULL) { |
DeMein | 0:67a55a82ce06 | 281 | // no parameter, return current time |
DeMein | 0:67a55a82ce06 | 282 | seconds = time(NULL); // get current time |
DeMein | 0:67a55a82ce06 | 283 | if (!secs) { |
DeMein | 0:67a55a82ce06 | 284 | // translate to YYYYMMDDHHMMSS |
DeMein | 0:67a55a82ce06 | 285 | t = *localtime(&seconds); |
DeMein | 0:67a55a82ce06 | 286 | sprintf(s, "%04d%02d%02d%02d%02d%02d", |
DeMein | 0:67a55a82ce06 | 287 | t.tm_year + 1900, t.tm_mon + 1, t.tm_mday, |
DeMein | 0:67a55a82ce06 | 288 | t.tm_hour, t.tm_min, t.tm_sec); |
DeMein | 0:67a55a82ce06 | 289 | DBG_msg("read time", s); |
DeMein | 0:67a55a82ce06 | 290 | mldl.tx_string(s); |
DeMein | 0:67a55a82ce06 | 291 | } else { |
DeMein | 0:67a55a82ce06 | 292 | sprintf(s, "%d", seconds); |
DeMein | 0:67a55a82ce06 | 293 | DBG_msg("read time", s); |
DeMein | 0:67a55a82ce06 | 294 | mldl.tx_string(s); |
DeMein | 0:67a55a82ce06 | 295 | } |
DeMein | 0:67a55a82ce06 | 296 | |
DeMein | 0:67a55a82ce06 | 297 | } else { |
DeMein | 0:67a55a82ce06 | 298 | // set time from input |
DeMein | 0:67a55a82ce06 | 299 | if (secs) { |
DeMein | 0:67a55a82ce06 | 300 | // seconds format |
DeMein | 0:67a55a82ce06 | 301 | seconds = 0; |
DeMein | 0:67a55a82ce06 | 302 | while ((inbuf[i] != NULL) && (inbuf[i] >= '0') && (inbuf[i] <= '9')) { |
DeMein | 0:67a55a82ce06 | 303 | seconds = (10 * seconds) + (inbuf[i] - '0'); |
DeMein | 0:67a55a82ce06 | 304 | i++; |
DeMein | 0:67a55a82ce06 | 305 | } |
DeMein | 0:67a55a82ce06 | 306 | sprintf(s, "%d", seconds); |
DeMein | 0:67a55a82ce06 | 307 | DBG_msg("set time", s); |
DeMein | 0:67a55a82ce06 | 308 | } else { |
DeMein | 0:67a55a82ce06 | 309 | // YYYYMMDDHHMMSS format |
DeMein | 0:67a55a82ce06 | 310 | DBG_msg("set time", inbuf); |
DeMein | 0:67a55a82ce06 | 311 | int j = 0; |
DeMein | 0:67a55a82ce06 | 312 | for (j = 0; j < 39; j++) s[j] = '0'; |
DeMein | 0:67a55a82ce06 | 313 | s[39] = NULL; |
DeMein | 0:67a55a82ce06 | 314 | j = 0; |
DeMein | 0:67a55a82ce06 | 315 | while ((inbuf[i] != NULL) && (inbuf[i] >= '0') && (inbuf[i] <= '9')) { |
DeMein | 0:67a55a82ce06 | 316 | s[j] = inbuf[i]; |
DeMein | 0:67a55a82ce06 | 317 | i++; |
DeMein | 0:67a55a82ce06 | 318 | j++; |
DeMein | 0:67a55a82ce06 | 319 | } |
DeMein | 0:67a55a82ce06 | 320 | DBG_msg("set time s", s); |
DeMein | 0:67a55a82ce06 | 321 | i = 1000 * (s[ 0] - '0') + 100 * (s[ 1] - '0') + 10 * (s[ 1] - '0') + (s[ 3] - '0'); |
DeMein | 0:67a55a82ce06 | 322 | t.tm_year = i - 1900; |
DeMein | 0:67a55a82ce06 | 323 | |
DeMein | 0:67a55a82ce06 | 324 | i = 10 * (s[ 4] - '0') + (s[ 5] - '0'); |
DeMein | 0:67a55a82ce06 | 325 | t.tm_mon = i - 1; |
DeMein | 0:67a55a82ce06 | 326 | |
DeMein | 0:67a55a82ce06 | 327 | i = 10 * (s[ 6] - '0') + (s[ 7] - '0');; |
DeMein | 0:67a55a82ce06 | 328 | t.tm_mday = i; |
DeMein | 0:67a55a82ce06 | 329 | |
DeMein | 0:67a55a82ce06 | 330 | i = 10 * (s[ 8] - '0') + (s[ 9] - '0'); |
DeMein | 0:67a55a82ce06 | 331 | t.tm_hour = i; |
DeMein | 0:67a55a82ce06 | 332 | |
DeMein | 0:67a55a82ce06 | 333 | i = 10 * (s[10] - '0') + (s[11] - '0'); |
DeMein | 0:67a55a82ce06 | 334 | t.tm_min = i; |
DeMein | 0:67a55a82ce06 | 335 | |
DeMein | 0:67a55a82ce06 | 336 | i = 10 * (s[10] - '0') + (s[11] - '0'); |
DeMein | 0:67a55a82ce06 | 337 | t.tm_sec = i; |
DeMein | 0:67a55a82ce06 | 338 | |
DeMein | 0:67a55a82ce06 | 339 | seconds = mktime(&t); |
DeMein | 0:67a55a82ce06 | 340 | |
DeMein | 0:67a55a82ce06 | 341 | } |
DeMein | 0:67a55a82ce06 | 342 | set_time(seconds); |
DeMein | 0:67a55a82ce06 | 343 | } |
DeMein | 0:67a55a82ce06 | 344 | } |
DeMein | 0:67a55a82ce06 | 345 | |
DeMein | 0:67a55a82ce06 | 346 | /** (soft) reset the MBED module |
DeMein | 0:67a55a82ce06 | 347 | * |
DeMein | 0:67a55a82ce06 | 348 | * syntax: MR<CR> |
DeMein | 0:67a55a82ce06 | 349 | * |
DeMein | 0:67a55a82ce06 | 350 | */ |
DeMein | 0:67a55a82ce06 | 351 | void do_mreset() { |
DeMein | 0:67a55a82ce06 | 352 | DBG_msg("do_mreset", inbuf); |
DeMein | 0:67a55a82ce06 | 353 | mbed_reset(); |
DeMein | 0:67a55a82ce06 | 354 | } |
DeMein | 0:67a55a82ce06 | 355 | |
DeMein | 0:67a55a82ce06 | 356 | /** send error message, command not recognized |
DeMein | 0:67a55a82ce06 | 357 | * |
DeMein | 0:67a55a82ce06 | 358 | */ |
DeMein | 0:67a55a82ce06 | 359 | void do_mdefault() { |
DeMein | 0:67a55a82ce06 | 360 | // command not recognized |
DeMein | 0:67a55a82ce06 | 361 | DBG_msg("do_mdefault", inbuf); |
DeMein | 0:67a55a82ce06 | 362 | send_error(err_notrecognized); |
DeMein | 0:67a55a82ce06 | 363 | } |