Library for Bert van Dam's book "ARM MICROCONTROLLERS" For all chapters with internet.

Dependencies:   mbed

Committer:
ICTFBI
Date:
Fri Oct 16 14:28:26 2015 +0000
Revision:
0:4edb816d21e1
Pre-update 16-10-15

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ICTFBI 0:4edb816d21e1 1 /**
ICTFBI 0:4edb816d21e1 2 * @section LICENSE
ICTFBI 0:4edb816d21e1 3 *Copyright (c) 2010 ARM Ltd.
ICTFBI 0:4edb816d21e1 4 *
ICTFBI 0:4edb816d21e1 5 *Permission is hereby granted, free of charge, to any person obtaining a copy
ICTFBI 0:4edb816d21e1 6 *of this software and associated documentation files (the "Software"), to deal
ICTFBI 0:4edb816d21e1 7 *in the Software without restriction, including without limitation the rights
ICTFBI 0:4edb816d21e1 8 *to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
ICTFBI 0:4edb816d21e1 9 *copies of the Software, and to permit persons to whom the Software is
ICTFBI 0:4edb816d21e1 10 *furnished to do so, subject to the following conditions:
ICTFBI 0:4edb816d21e1 11 *
ICTFBI 0:4edb816d21e1 12 *The above copyright notice and this permission notice shall be included in
ICTFBI 0:4edb816d21e1 13 *all copies or substantial portions of the Software.
ICTFBI 0:4edb816d21e1 14 *
ICTFBI 0:4edb816d21e1 15 *THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
ICTFBI 0:4edb816d21e1 16 *IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
ICTFBI 0:4edb816d21e1 17 *FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
ICTFBI 0:4edb816d21e1 18 *AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
ICTFBI 0:4edb816d21e1 19 *LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
ICTFBI 0:4edb816d21e1 20 *OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
ICTFBI 0:4edb816d21e1 21 *THE SOFTWARE.
ICTFBI 0:4edb816d21e1 22 *
ICTFBI 0:4edb816d21e1 23 * @section Description
ICTFBI 0:4edb816d21e1 24 *This class provides an object to which a variable can be attached. Any type
ICTFBI 0:4edb816d21e1 25 *for which a parse_args function specilisation exists can be attached. This includes
ICTFBI 0:4edb816d21e1 26 *all of the standard types.
ICTFBI 0:4edb816d21e1 27 *
ICTFBI 0:4edb816d21e1 28 */
ICTFBI 0:4edb816d21e1 29 #ifndef RPCVARIABLE_H_
ICTFBI 0:4edb816d21e1 30 #define RPCVARIABLE_H_
ICTFBI 0:4edb816d21e1 31
ICTFBI 0:4edb816d21e1 32 #include "mbed.h"
ICTFBI 0:4edb816d21e1 33 #include "platform.h"
ICTFBI 0:4edb816d21e1 34 #include "rpc.h"
ICTFBI 0:4edb816d21e1 35 /**
ICTFBI 0:4edb816d21e1 36 *Class to read and set an attached variable using the RPC
ICTFBI 0:4edb816d21e1 37 *
ICTFBI 0:4edb816d21e1 38 */
ICTFBI 0:4edb816d21e1 39 template<class T>
ICTFBI 0:4edb816d21e1 40 class RPCVariable : public Base{
ICTFBI 0:4edb816d21e1 41 public:
ICTFBI 0:4edb816d21e1 42 /**
ICTFBI 0:4edb816d21e1 43 * Constructor
ICTFBI 0:4edb816d21e1 44 *
ICTFBI 0:4edb816d21e1 45 *@param ptr Pointer to the variable to make accessible over RPC. Any type of
ICTFBI 0:4edb816d21e1 46 *variable can be connected
ICTFBI 0:4edb816d21e1 47 *@param name The name of that this object will be over RPC
ICTFBI 0:4edb816d21e1 48 */
ICTFBI 0:4edb816d21e1 49 template<class A>
ICTFBI 0:4edb816d21e1 50 RPCVariable(A * ptr, const char * name) : Base(name){
ICTFBI 0:4edb816d21e1 51 _ptr = ptr;
ICTFBI 0:4edb816d21e1 52 }
ICTFBI 0:4edb816d21e1 53 /**
ICTFBI 0:4edb816d21e1 54 *Read the variable over RPC.
ICTFBI 0:4edb816d21e1 55 *
ICTFBI 0:4edb816d21e1 56 *@return The value of the variable
ICTFBI 0:4edb816d21e1 57 */
ICTFBI 0:4edb816d21e1 58 T read(){
ICTFBI 0:4edb816d21e1 59 return(*_ptr);
ICTFBI 0:4edb816d21e1 60 }
ICTFBI 0:4edb816d21e1 61 /**
ICTFBI 0:4edb816d21e1 62 *Write a value to the variable over RPC
ICTFBI 0:4edb816d21e1 63 *
ICTFBI 0:4edb816d21e1 64 *@param The value to be written to the attached variable.
ICTFBI 0:4edb816d21e1 65 */
ICTFBI 0:4edb816d21e1 66 void write(T value){
ICTFBI 0:4edb816d21e1 67 *_ptr = value;
ICTFBI 0:4edb816d21e1 68 }
ICTFBI 0:4edb816d21e1 69
ICTFBI 0:4edb816d21e1 70 #ifdef MBED_RPC
ICTFBI 0:4edb816d21e1 71 virtual const struct rpc_method *get_rpc_methods();
ICTFBI 0:4edb816d21e1 72 static struct rpc_class *get_rpc_class();
ICTFBI 0:4edb816d21e1 73 #endif
ICTFBI 0:4edb816d21e1 74
ICTFBI 0:4edb816d21e1 75 private:
ICTFBI 0:4edb816d21e1 76 T * _ptr;
ICTFBI 0:4edb816d21e1 77
ICTFBI 0:4edb816d21e1 78 };
ICTFBI 0:4edb816d21e1 79
ICTFBI 0:4edb816d21e1 80 //Set up RPC methods
ICTFBI 0:4edb816d21e1 81 #ifdef MBED_RPC
ICTFBI 0:4edb816d21e1 82 template <class T>
ICTFBI 0:4edb816d21e1 83 const rpc_method *RPCVariable<T>::get_rpc_methods() {
ICTFBI 0:4edb816d21e1 84 static const rpc_method rpc_methods[] = {
ICTFBI 0:4edb816d21e1 85 { "read", rpc_method_caller<T, RPCVariable, &RPCVariable::read> },
ICTFBI 0:4edb816d21e1 86 { "write", rpc_method_caller<RPCVariable, T, &RPCVariable::write> },
ICTFBI 0:4edb816d21e1 87 RPC_METHOD_SUPER(Base)
ICTFBI 0:4edb816d21e1 88 };
ICTFBI 0:4edb816d21e1 89 return rpc_methods;
ICTFBI 0:4edb816d21e1 90 }
ICTFBI 0:4edb816d21e1 91 template <class T>
ICTFBI 0:4edb816d21e1 92 rpc_class *RPCVariable<T>::get_rpc_class() {
ICTFBI 0:4edb816d21e1 93 static const rpc_function funcs[] = {"new", rpc_function_caller<const char*, T,const char* , &Base::construct<RemoteVar, T ,const char*> >,RPC_METHOD_END};
ICTFBI 0:4edb816d21e1 94 static rpc_class c = { "RPCVariable", funcs, NULL };
ICTFBI 0:4edb816d21e1 95 return &c;
ICTFBI 0:4edb816d21e1 96 }
ICTFBI 0:4edb816d21e1 97 #endif
ICTFBI 0:4edb816d21e1 98
ICTFBI 0:4edb816d21e1 99 //There could be specialisation for integer, to also give increment and decrements
ICTFBI 0:4edb816d21e1 100
ICTFBI 0:4edb816d21e1 101
ICTFBI 0:4edb816d21e1 102 #endif //RPCVARIABLE_H_