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 *
zainulcharbiwala 0:66e48adbb27b 24 * @section DESCRIPTION
zainulcharbiwala 0:66e48adbb27b 25 *
zainulcharbiwala 0:66e48adbb27b 26 *This class sets up RPC communication over serial.
zainulcharbiwala 0:66e48adbb27b 27 */
zainulcharbiwala 0:66e48adbb27b 28 #ifndef INTERFACE
zainulcharbiwala 0:66e48adbb27b 29 #define INTERFACE
zainulcharbiwala 0:66e48adbb27b 30
zainulcharbiwala 0:66e48adbb27b 31 /**
zainulcharbiwala 0:66e48adbb27b 32 *Includes
zainulcharbiwala 0:66e48adbb27b 33 */
zainulcharbiwala 0:66e48adbb27b 34 #include "mbed.h"
zainulcharbiwala 0:66e48adbb27b 35 #include "platform.h"
zainulcharbiwala 0:66e48adbb27b 36 #include "rpc.h"
zainulcharbiwala 0:66e48adbb27b 37 #include "RPCFunction.h"
zainulcharbiwala 0:66e48adbb27b 38 #include "RPCVariable.h"
zainulcharbiwala 0:66e48adbb27b 39 #include "MODSERIAL.h"
zainulcharbiwala 0:66e48adbb27b 40
zainulcharbiwala 0:66e48adbb27b 41
zainulcharbiwala 0:66e48adbb27b 42 namespace mbed{
zainulcharbiwala 0:66e48adbb27b 43 /**
zainulcharbiwala 0:66e48adbb27b 44 *Provides an Interface to mbed over RPC.
zainulcharbiwala 0:66e48adbb27b 45 *
zainulcharbiwala 0:66e48adbb27b 46 *For the chosen communication type this class sets up the necessary interrupts to receive RPC messages. Receives the messages, passes them to the rpc function and then returns the result.
zainulcharbiwala 0:66e48adbb27b 47 */
zainulcharbiwala 0:66e48adbb27b 48 class SerialRPCInterface{
zainulcharbiwala 0:66e48adbb27b 49 public:
zainulcharbiwala 0:66e48adbb27b 50 /**
zainulcharbiwala 0:66e48adbb27b 51 *Constructor
zainulcharbiwala 0:66e48adbb27b 52 *
zainulcharbiwala 0:66e48adbb27b 53 *Sets up RPC communication using serial communication.
zainulcharbiwala 0:66e48adbb27b 54 *
zainulcharbiwala 0:66e48adbb27b 55 *@param tx The transmit pin of the serial port.
zainulcharbiwala 0:66e48adbb27b 56 *@param rx The receive pin of the serial port.
zainulcharbiwala 0:66e48adbb27b 57 *@param baud Set the baud rate, default is 9600.
zainulcharbiwala 0:66e48adbb27b 58 */
zainulcharbiwala 0:66e48adbb27b 59 SerialRPCInterface(PinName tx, PinName rx, int baud = 9600);
zainulcharbiwala 0:66e48adbb27b 60
zainulcharbiwala 0:66e48adbb27b 61 /**
zainulcharbiwala 0:66e48adbb27b 62 *Disable the RPC.
zainulcharbiwala 0:66e48adbb27b 63 *
zainulcharbiwala 0:66e48adbb27b 64 *This will stop RPC messages being recevied and interpreted by this library. This might be used to prevent RPC commands interrupting an important piece of code on mbed.
zainulcharbiwala 0:66e48adbb27b 65 */
zainulcharbiwala 0:66e48adbb27b 66 void Disable(void);
zainulcharbiwala 0:66e48adbb27b 67
zainulcharbiwala 0:66e48adbb27b 68 /**
zainulcharbiwala 0:66e48adbb27b 69 *Enable the RPC
zainulcharbiwala 0:66e48adbb27b 70 *
zainulcharbiwala 0:66e48adbb27b 71 *This will set this class to receiving and executing RPC commands. The class starts in this mode so this function only needs to be called if you have previosuly disabled the RPC.
zainulcharbiwala 0:66e48adbb27b 72 *
zainulcharbiwala 0:66e48adbb27b 73 */
zainulcharbiwala 0:66e48adbb27b 74 void Enable(void);
zainulcharbiwala 0:66e48adbb27b 75
zainulcharbiwala 0:66e48adbb27b 76 //The Serial Port
zainulcharbiwala 0:66e48adbb27b 77 MODSERIAL pc;
zainulcharbiwala 0:66e48adbb27b 78
zainulcharbiwala 0:66e48adbb27b 79
zainulcharbiwala 0:66e48adbb27b 80 private:
zainulcharbiwala 0:66e48adbb27b 81 //Handle messgaes and take appropriate action
zainulcharbiwala 0:66e48adbb27b 82 void _MsgProcess(void);
zainulcharbiwala 0:66e48adbb27b 83 void _RegClasses(void);
zainulcharbiwala 0:66e48adbb27b 84 void _RPCSerial();
zainulcharbiwala 0:66e48adbb27b 85 bool _enabled;
zainulcharbiwala 0:66e48adbb27b 86 char _command[256];
zainulcharbiwala 0:66e48adbb27b 87 char _response[256];
zainulcharbiwala 0:66e48adbb27b 88 bool _RPCflag;
zainulcharbiwala 0:66e48adbb27b 89 };
zainulcharbiwala 0:66e48adbb27b 90 }
zainulcharbiwala 0:66e48adbb27b 91 #endif