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

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?

UserRevisionLine numberNew contents of line
DeMein 0:67a55a82ce06 1 /* MMEx for MBED - Main function
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 /**
DeMein 0:67a55a82ce06 25 \file main.cpp
DeMein 0:67a55a82ce06 26 \brief main function for the MMEx application
DeMein 0:67a55a82ce06 27 */
DeMein 0:67a55a82ce06 28
DeMein 0:67a55a82ce06 29 #include "mmex.h"
DeMein 0:67a55a82ce06 30 #include "mbed.h"
DeMein 0:67a55a82ce06 31
DeMein 0:67a55a82ce06 32 /** read data from the commandline until a <CR> is found
DeMein 0:67a55a82ce06 33 *
DeMein 0:67a55a82ce06 34 * @return returns the number of characters read (including the <CR>)
DeMein 0:67a55a82ce06 35 */
DeMein 0:67a55a82ce06 36 int readin() {
DeMein 0:67a55a82ce06 37 int i = 0;
DeMein 0:67a55a82ce06 38 bool go = true;
DeMein 0:67a55a82ce06 39 unsigned char inp;
DeMein 0:67a55a82ce06 40
DeMein 0:67a55a82ce06 41 while (go) { // as long as we can continue
DeMein 0:67a55a82ce06 42 inp = mldl.rxx_read(command_mode); // read data with protocol
DeMein 0:67a55a82ce06 43 switch (inp) {
DeMein 0:67a55a82ce06 44 case NULL : break; // do nothing, read next value
DeMein 0:67a55a82ce06 45 case c_cr : inbuf[i] = NULL; //terminate string
DeMein 0:67a55a82ce06 46 go = false;
DeMein 0:67a55a82ce06 47 break;
DeMein 0:67a55a82ce06 48 default: inbuf[i] = inp;
DeMein 0:67a55a82ce06 49 i++;
DeMein 0:67a55a82ce06 50 break;
DeMein 0:67a55a82ce06 51 } // switch
DeMein 0:67a55a82ce06 52 if(i >= bufsize) { // command is too long!
DeMein 0:67a55a82ce06 53 // add proper error handling
DeMein 0:67a55a82ce06 54 go = false;
DeMein 0:67a55a82ce06 55 inbuf[i] = NULL; // terminate string
DeMein 0:67a55a82ce06 56 }
DeMein 0:67a55a82ce06 57 }
DeMein 0:67a55a82ce06 58 return i;
DeMein 0:67a55a82ce06 59 }
DeMein 0:67a55a82ce06 60
DeMein 0:67a55a82ce06 61 /** MMEx main function, never returns
DeMein 0:67a55a82ce06 62 *
DeMein 0:67a55a82ce06 63 */
DeMein 0:67a55a82ce06 64 int main() {
DeMein 0:67a55a82ce06 65 int numin;
DeMein 0:67a55a82ce06 66
DeMein 0:67a55a82ce06 67 init_handles();
DeMein 0:67a55a82ce06 68
DeMein 0:67a55a82ce06 69 pc.baud(start_baud);
DeMein 0:67a55a82ce06 70
DeMein 0:67a55a82ce06 71 mldl.init(); // initialize spi
DeMein 0:67a55a82ce06 72 mldl.DBG_set(DBG_ON);
DeMein 0:67a55a82ce06 73
DeMein 0:67a55a82ce06 74 welcome(); // send welcome message
DeMein 0:67a55a82ce06 75
DeMein 0:67a55a82ce06 76 init_loadp(); // auto load PARAM_A.TXT
DeMein 0:67a55a82ce06 77 init_xeq(); // auto execute parameter X
DeMein 0:67a55a82ce06 78
DeMein 0:67a55a82ce06 79 while(1) {
DeMein 0:67a55a82ce06 80 // main loop for parsing commands
DeMein 0:67a55a82ce06 81 send_prompt();
DeMein 0:67a55a82ce06 82 DBG_msg("main", "send prompt");
DeMein 0:67a55a82ce06 83
DeMein 0:67a55a82ce06 84 // remove comments below for more extended debugging
DeMein 0:67a55a82ce06 85 // DBG_int("rx_room", mldl.rx_room());
DeMein 0:67a55a82ce06 86 // DBG_int("tx_room", mldl.tx_room());
DeMein 0:67a55a82ce06 87 // DBG_int("rx_empty", mldl.rx_empty());
DeMein 0:67a55a82ce06 88 // DBG_int("rx_full", mldl.rx_full());
DeMein 0:67a55a82ce06 89 // DBG_int("tx_empty", mldl.tx_empty());
DeMein 0:67a55a82ce06 90 // DBG_int("tx_full", mldl.tx_full());
DeMein 0:67a55a82ce06 91
DeMein 0:67a55a82ce06 92 numin = readin(); // read input command, must end with <CR>
DeMein 0:67a55a82ce06 93 // we are interpreting commands, string is in inbuf[]
DeMein 0:67a55a82ce06 94 if (inbuf[0] != NULL) {
DeMein 0:67a55a82ce06 95 DBG_msg("main", inbuf);
DeMein 0:67a55a82ce06 96 switch (inbuf[0]) {
DeMein 0:67a55a82ce06 97 case cmd_f : param[par_C_].assign(inbuf);
DeMein 0:67a55a82ce06 98 parse_F(); // File functions
DeMein 0:67a55a82ce06 99 break;
DeMein 0:67a55a82ce06 100 case cmd_m : param[par_C_].assign(inbuf);
DeMein 0:67a55a82ce06 101 parse_M(); // MBed functions
DeMein 0:67a55a82ce06 102 break;
DeMein 0:67a55a82ce06 103 case cmd_p : parse_P(); // Parameter functions
DeMein 0:67a55a82ce06 104 break;
DeMein 0:67a55a82ce06 105 case cmd_rpc :
DeMein 0:67a55a82ce06 106 case cmd_r: param[par_C_].assign(inbuf);
DeMein 0:67a55a82ce06 107 parse_R(); // RPC functions
DeMein 0:67a55a82ce06 108 break;
DeMein 0:67a55a82ce06 109 case cmd_n : param[par_C_].assign(inbuf);
DeMein 0:67a55a82ce06 110 parse_N(); // Network functions
DeMein 0:67a55a82ce06 111 break;
DeMein 0:67a55a82ce06 112 case cmd_u : param[par_C_].assign(inbuf);
DeMein 0:67a55a82ce06 113 parse_U(); // User functions
DeMein 0:67a55a82ce06 114 break;
DeMein 0:67a55a82ce06 115 case cmd_c : param[par_C_].assign(inbuf);
DeMein 0:67a55a82ce06 116 parse_C(); // User functions
DeMein 0:67a55a82ce06 117 break;
DeMein 0:67a55a82ce06 118
DeMein 0:67a55a82ce06 119 default : DBG_msg("do_maindefault", inbuf);
DeMein 0:67a55a82ce06 120 do_maindefault(); // first char not recognized
DeMein 0:67a55a82ce06 121 break;
DeMein 0:67a55a82ce06 122 }
DeMein 0:67a55a82ce06 123 }
DeMein 0:67a55a82ce06 124 }
DeMein 0:67a55a82ce06 125 }