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 - MMEx specific functions
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 mmex.cpp
DeMein 0:67a55a82ce06 25 \brief MMEx specific functions
DeMein 0:67a55a82ce06 26 */
DeMein 0:67a55a82ce06 27
DeMein 0:67a55a82ce06 28 #include "mmex.h"
DeMein 0:67a55a82ce06 29
DeMein 0:67a55a82ce06 30 char inbuf[bufsize];
DeMein 0:67a55a82ce06 31 char outbuf[bufsize];
DeMein 0:67a55a82ce06 32
DeMein 0:67a55a82ce06 33 int rx_max = 0;
DeMein 0:67a55a82ce06 34 int tx_max = 0;
DeMein 0:67a55a82ce06 35
DeMein 0:67a55a82ce06 36 int err_num = 0; // global error number
DeMein 0:67a55a82ce06 37 int last_err = 0;
DeMein 0:67a55a82ce06 38 bool upcase = false; // global for change of case for text output
DeMein 0:67a55a82ce06 39
DeMein 0:67a55a82ce06 40 const char *err_text[] = {
DeMein 0:67a55a82ce06 41 err_0, err_1, err_2, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
DeMein 0:67a55a82ce06 42 err_10, err_11, err_12, err_13, err_14, err_15, err_16, err_17, err_18, err_19,
DeMein 0:67a55a82ce06 43 err_20, err_21, err_22, err_23, err_24, err_25, err_26, err_27, err_28, err_29,
DeMein 0:67a55a82ce06 44 err_30, err_31, err_32, err_33, err_34, err_35, err_36, err_37, err_38, err_39 } ;
DeMein 0:67a55a82ce06 45
DeMein 0:67a55a82ce06 46 /** send the MMEx prompt sequence
DeMein 0:67a55a82ce06 47 *
DeMein 0:67a55a82ce06 48 */
DeMein 0:67a55a82ce06 49 void send_prompt() {
DeMein 0:67a55a82ce06 50 mldl.tx_add(c_escape);
DeMein 0:67a55a82ce06 51 mldl.tx_add(c_prompt);
DeMein 0:67a55a82ce06 52 }
DeMein 0:67a55a82ce06 53
DeMein 0:67a55a82ce06 54 /** send the MMEx welcome message
DeMein 0:67a55a82ce06 55 *
DeMein 0:67a55a82ce06 56 */
DeMein 0:67a55a82ce06 57 void welcome() {
DeMein 0:67a55a82ce06 58 DBG_msg("MMEx welcome", msg_welcome msg_version);
DeMein 0:67a55a82ce06 59 char str[] = msg_welcome msg_version;
DeMein 0:67a55a82ce06 60 upstring(str);
DeMein 0:67a55a82ce06 61 mldl.tx_string(str);
DeMein 0:67a55a82ce06 62 }
DeMein 0:67a55a82ce06 63
DeMein 0:67a55a82ce06 64 /** send the actual MMEx status
DeMein 0:67a55a82ce06 65 *
DeMein 0:67a55a82ce06 66 */
DeMein 0:67a55a82ce06 67 void send_status() {
DeMein 0:67a55a82ce06 68 char str[] = "MMEx running";
DeMein 0:67a55a82ce06 69 upstring(str);
DeMein 0:67a55a82ce06 70 mldl.tx_string(str);
DeMein 0:67a55a82ce06 71 }
DeMein 0:67a55a82ce06 72
DeMein 0:67a55a82ce06 73 /** send error message, command not recognized
DeMein 0:67a55a82ce06 74 *
DeMein 0:67a55a82ce06 75 */
DeMein 0:67a55a82ce06 76 void do_maindefault() {
DeMein 0:67a55a82ce06 77 // command not recognized
DeMein 0:67a55a82ce06 78 DBG_msg("main", "parameter not recognized");
DeMein 0:67a55a82ce06 79 send_error(err_notrecognized);
DeMein 0:67a55a82ce06 80 }
DeMein 0:67a55a82ce06 81
DeMein 0:67a55a82ce06 82 /** send an integer value to the SPI interface
DeMein 0:67a55a82ce06 83 *
DeMein 0:67a55a82ce06 84 * @param val value to be sent
DeMein 0:67a55a82ce06 85 *
DeMein 0:67a55a82ce06 86 */
DeMein 0:67a55a82ce06 87 void send_int(int val) {
DeMein 0:67a55a82ce06 88 sprintf(outbuf, "%d", val);
DeMein 0:67a55a82ce06 89 mldl.tx_string(outbuf);
DeMein 0:67a55a82ce06 90 }
DeMein 0:67a55a82ce06 91
DeMein 0:67a55a82ce06 92 /** send a 2-digit integer value to the SPI interface
DeMein 0:67a55a82ce06 93 *
DeMein 0:67a55a82ce06 94 * @param val value to be sent
DeMein 0:67a55a82ce06 95 *
DeMein 0:67a55a82ce06 96 */
DeMein 0:67a55a82ce06 97 void send_2int(int val) {
DeMein 0:67a55a82ce06 98 sprintf(outbuf, "%02d", val);
DeMein 0:67a55a82ce06 99 mldl.tx_string(outbuf);
DeMein 0:67a55a82ce06 100 }
DeMein 0:67a55a82ce06 101
DeMein 0:67a55a82ce06 102 /** global error message processing, send error sequence
DeMein 0:67a55a82ce06 103 * and prepare message string
DeMein 0:67a55a82ce06 104 *
DeMein 0:67a55a82ce06 105 * @param val error value
DeMein 0:67a55a82ce06 106 *
DeMein 0:67a55a82ce06 107 */
DeMein 0:67a55a82ce06 108 void send_error(int val) {
DeMein 0:67a55a82ce06 109 char str[20];
DeMein 0:67a55a82ce06 110 sprintf(str, "%02d", val);
DeMein 0:67a55a82ce06 111 err_num = val;
DeMein 0:67a55a82ce06 112 last_err = val;
DeMein 0:67a55a82ce06 113 DBG_msg("error found: ", str);
DeMein 0:67a55a82ce06 114 sprintf(str, "%02d:", err_num);
DeMein 0:67a55a82ce06 115 param[par_E_].assign(str);
DeMein 0:67a55a82ce06 116 param[par_E_] += err_text[err_num];
DeMein 0:67a55a82ce06 117 mldl.tx_add(c_escape);
DeMein 0:67a55a82ce06 118 mldl.tx_add(c_error);
DeMein 0:67a55a82ce06 119 }
DeMein 0:67a55a82ce06 120
DeMein 0:67a55a82ce06 121