Serial RPC Interface using the MODSERIAL library. Does not hang when serial port misbehaves.

Committer:
zainulcharbiwala
Date:
Fri Feb 04 01:54:41 2011 +0000
Revision:
3:d5d7e52769e7
Parent:
0:66e48adbb27b
Added Hexley Ball\s fix for memory leak in RFCFunction

Who changed what in which revision?

UserRevisionLine numberNew contents of line
zainulcharbiwala 0:66e48adbb27b 1 /**
zainulcharbiwala 0:66e48adbb27b 2 * @section LICENSE
zainulcharbiwala 0:66e48adbb27b 3 *Copyright (c) 2010 ARM Ltd.
zainulcharbiwala 0:66e48adbb27b 4 *
zainulcharbiwala 0:66e48adbb27b 5 *Permission is hereby granted, free of charge, to any person obtaining a copy
zainulcharbiwala 0:66e48adbb27b 6 *of this software and associated documentation files (the "Software"), to deal
zainulcharbiwala 0:66e48adbb27b 7 *in the Software without restriction, including without limitation the rights
zainulcharbiwala 0:66e48adbb27b 8 *to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
zainulcharbiwala 0:66e48adbb27b 9 *copies of the Software, and to permit persons to whom the Software is
zainulcharbiwala 0:66e48adbb27b 10 *furnished to do so, subject to the following conditions:
zainulcharbiwala 0:66e48adbb27b 11 *
zainulcharbiwala 0:66e48adbb27b 12 *The above copyright notice and this permission notice shall be included in
zainulcharbiwala 0:66e48adbb27b 13 *all copies or substantial portions of the Software.
zainulcharbiwala 0:66e48adbb27b 14 *
zainulcharbiwala 0:66e48adbb27b 15 *THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
zainulcharbiwala 0:66e48adbb27b 16 *IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
zainulcharbiwala 0:66e48adbb27b 17 *FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
zainulcharbiwala 0:66e48adbb27b 18 *AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
zainulcharbiwala 0:66e48adbb27b 19 *LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
zainulcharbiwala 0:66e48adbb27b 20 *OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
zainulcharbiwala 0:66e48adbb27b 21 *THE SOFTWARE.
zainulcharbiwala 0:66e48adbb27b 22 *
zainulcharbiwala 0:66e48adbb27b 23 * @section Description
zainulcharbiwala 0:66e48adbb27b 24 *This class provides an object which can be called over RPC to run the function which is attached to it.
zainulcharbiwala 0:66e48adbb27b 25 *
zainulcharbiwala 0:66e48adbb27b 26 */
zainulcharbiwala 0:66e48adbb27b 27 #ifndef RPCFUNCTION_RPC
zainulcharbiwala 0:66e48adbb27b 28 #define RPCFUNCTION_RPC
zainulcharbiwala 0:66e48adbb27b 29 /**
zainulcharbiwala 0:66e48adbb27b 30 *Includes
zainulcharbiwala 0:66e48adbb27b 31 */
zainulcharbiwala 0:66e48adbb27b 32 #include "mbed.h"
zainulcharbiwala 0:66e48adbb27b 33 #include "platform.h"
zainulcharbiwala 0:66e48adbb27b 34 #include "rpc.h"
zainulcharbiwala 0:66e48adbb27b 35 #define STR_LEN 64
zainulcharbiwala 0:66e48adbb27b 36 #include "platform.h"
zainulcharbiwala 0:66e48adbb27b 37
zainulcharbiwala 0:66e48adbb27b 38 #ifdef MBED_RPC
zainulcharbiwala 0:66e48adbb27b 39 #include "rpc.h"
zainulcharbiwala 0:66e48adbb27b 40 #endif
zainulcharbiwala 0:66e48adbb27b 41 /**
zainulcharbiwala 0:66e48adbb27b 42 *
zainulcharbiwala 0:66e48adbb27b 43 *Class to call custom functions over RPC
zainulcharbiwala 0:66e48adbb27b 44 *
zainulcharbiwala 0:66e48adbb27b 45 */
zainulcharbiwala 0:66e48adbb27b 46 class RPCFunction : public Base{
zainulcharbiwala 0:66e48adbb27b 47 public:
zainulcharbiwala 0:66e48adbb27b 48 /**
zainulcharbiwala 0:66e48adbb27b 49 * Constructor
zainulcharbiwala 0:66e48adbb27b 50 *
zainulcharbiwala 0:66e48adbb27b 51 *@param f Pointer to the function to call. the function must be of the form void foo(char * input, char * output)
zainulcharbiwala 0:66e48adbb27b 52 *@param name The name of this object
zainulcharbiwala 0:66e48adbb27b 53 */
zainulcharbiwala 0:66e48adbb27b 54 RPCFunction(void(*f)(char*, char*), const char* = NULL);
zainulcharbiwala 0:66e48adbb27b 55
zainulcharbiwala 0:66e48adbb27b 56 /**
zainulcharbiwala 0:66e48adbb27b 57 *run
zainulcharbiwala 0:66e48adbb27b 58 *
zainulcharbiwala 0:66e48adbb27b 59 *Calls the attached function passing the string in but doesn't return the result.
zainulcharbiwala 0:66e48adbb27b 60 *@param str The string to be passed into the attached function. This string can consist of any ASCII characters apart from escape codes. The usual limtations on argument content for RPC strings has been removed
zainulcharbiwala 0:66e48adbb27b 61 *@return A string output from the function
zainulcharbiwala 0:66e48adbb27b 62 */
zainulcharbiwala 0:66e48adbb27b 63 char * run(char* str);
zainulcharbiwala 0:66e48adbb27b 64
zainulcharbiwala 0:66e48adbb27b 65 /**
zainulcharbiwala 0:66e48adbb27b 66 *Reads the value of the output string.
zainulcharbiwala 0:66e48adbb27b 67 *
zainulcharbiwala 0:66e48adbb27b 68 *@returns the string outputted from the last time the function was called
zainulcharbiwala 0:66e48adbb27b 69 */
zainulcharbiwala 0:66e48adbb27b 70 char * read();
zainulcharbiwala 0:66e48adbb27b 71
zainulcharbiwala 0:66e48adbb27b 72
zainulcharbiwala 0:66e48adbb27b 73 #ifdef MBED_RPC
zainulcharbiwala 0:66e48adbb27b 74 virtual const struct rpc_method *get_rpc_methods();
zainulcharbiwala 0:66e48adbb27b 75 #endif
zainulcharbiwala 0:66e48adbb27b 76
zainulcharbiwala 0:66e48adbb27b 77 private:
zainulcharbiwala 0:66e48adbb27b 78 void (*_ftr)(char*, char*);
zainulcharbiwala 0:66e48adbb27b 79
zainulcharbiwala 0:66e48adbb27b 80 char _input[STR_LEN];
zainulcharbiwala 0:66e48adbb27b 81 char _output[STR_LEN];
zainulcharbiwala 0:66e48adbb27b 82
zainulcharbiwala 0:66e48adbb27b 83 };
zainulcharbiwala 0:66e48adbb27b 84 #endif