Programme d'utilisation des AX12 et de l'MX12 V3

Fork of Utilisatio_MX12_V2 by CRAC Team

Committer:
R66Y
Date:
Sat May 20 16:16:00 2017 +0000
Revision:
4:0972025782f3
Parent:
1:f3f702086a30
Programme d'utilisation des AX et de l'MX12 V3

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ClementBreteau 1:f3f702086a30 1 /* mbed Microcontroller Library - Base
ClementBreteau 1:f3f702086a30 2 * Copyright (c) 2006-2008 ARM Limited. All rights reserved.
ClementBreteau 1:f3f702086a30 3 */
ClementBreteau 1:f3f702086a30 4
ClementBreteau 1:f3f702086a30 5 #ifndef MBED_BASE_H
ClementBreteau 1:f3f702086a30 6 #define MBED_BASE_H
ClementBreteau 1:f3f702086a30 7
ClementBreteau 1:f3f702086a30 8 #include "platform.h"
ClementBreteau 1:f3f702086a30 9 #include "PinNames.h"
ClementBreteau 1:f3f702086a30 10 #include "PeripheralNames.h"
ClementBreteau 1:f3f702086a30 11 #include <cstdlib>
ClementBreteau 1:f3f702086a30 12 #include "DirHandle.h"
ClementBreteau 1:f3f702086a30 13
ClementBreteau 1:f3f702086a30 14 namespace mbed {
ClementBreteau 1:f3f702086a30 15
ClementBreteau 1:f3f702086a30 16 #ifdef MBED_RPC
ClementBreteau 1:f3f702086a30 17 struct rpc_function {
ClementBreteau 1:f3f702086a30 18 const char *name;
ClementBreteau 1:f3f702086a30 19 void (*caller)(const char*, char*);
ClementBreteau 1:f3f702086a30 20 };
ClementBreteau 1:f3f702086a30 21
ClementBreteau 1:f3f702086a30 22 struct rpc_class {
ClementBreteau 1:f3f702086a30 23 const char *name;
ClementBreteau 1:f3f702086a30 24 const rpc_function *static_functions;
ClementBreteau 1:f3f702086a30 25 struct rpc_class *next;
ClementBreteau 1:f3f702086a30 26 };
ClementBreteau 1:f3f702086a30 27 #endif
ClementBreteau 1:f3f702086a30 28
ClementBreteau 1:f3f702086a30 29 /* Class Base
ClementBreteau 1:f3f702086a30 30 * The base class for most things
ClementBreteau 1:f3f702086a30 31 */
ClementBreteau 1:f3f702086a30 32 class Base {
ClementBreteau 1:f3f702086a30 33
ClementBreteau 1:f3f702086a30 34 public:
ClementBreteau 1:f3f702086a30 35
ClementBreteau 1:f3f702086a30 36 Base(const char *name = NULL);
ClementBreteau 1:f3f702086a30 37
ClementBreteau 1:f3f702086a30 38 virtual ~Base();
ClementBreteau 1:f3f702086a30 39
ClementBreteau 1:f3f702086a30 40 /* Function register_object
ClementBreteau 1:f3f702086a30 41 * Registers this object with the given name, so that it can be
ClementBreteau 1:f3f702086a30 42 * looked up with lookup. If this object has already been
ClementBreteau 1:f3f702086a30 43 * registered, then this just changes the name.
ClementBreteau 1:f3f702086a30 44 *
ClementBreteau 1:f3f702086a30 45 * Variables
ClementBreteau 1:f3f702086a30 46 * name - The name to give the object. If NULL we do nothing.
ClementBreteau 1:f3f702086a30 47 */
ClementBreteau 1:f3f702086a30 48 void register_object(const char *name);
ClementBreteau 1:f3f702086a30 49
ClementBreteau 1:f3f702086a30 50 /* Function name
ClementBreteau 1:f3f702086a30 51 * Returns the name of the object, or NULL if it has no name.
ClementBreteau 1:f3f702086a30 52 */
ClementBreteau 1:f3f702086a30 53 const char *name();
ClementBreteau 1:f3f702086a30 54
ClementBreteau 1:f3f702086a30 55 #ifdef MBED_RPC
ClementBreteau 1:f3f702086a30 56
ClementBreteau 1:f3f702086a30 57 /* Function rpc
ClementBreteau 1:f3f702086a30 58 * Call the given method with the given arguments, and write the
ClementBreteau 1:f3f702086a30 59 * result into the string pointed to by result. The default
ClementBreteau 1:f3f702086a30 60 * implementation calls rpc_methods to determine the supported
ClementBreteau 1:f3f702086a30 61 * methods.
ClementBreteau 1:f3f702086a30 62 *
ClementBreteau 1:f3f702086a30 63 * Variables
ClementBreteau 1:f3f702086a30 64 * method - The name of the method to call.
ClementBreteau 1:f3f702086a30 65 * arguments - A list of arguments separated by spaces.
ClementBreteau 1:f3f702086a30 66 * result - A pointer to a string to write the result into. May
ClementBreteau 1:f3f702086a30 67 * be NULL, in which case nothing is written.
ClementBreteau 1:f3f702086a30 68 *
ClementBreteau 1:f3f702086a30 69 * Returns
ClementBreteau 1:f3f702086a30 70 * true if method corresponds to a valid rpc method, or
ClementBreteau 1:f3f702086a30 71 * false otherwise.
ClementBreteau 1:f3f702086a30 72 */
ClementBreteau 1:f3f702086a30 73 virtual bool rpc(const char *method, const char *arguments, char *result);
ClementBreteau 1:f3f702086a30 74
ClementBreteau 1:f3f702086a30 75 /* Function get_rpc_methods
ClementBreteau 1:f3f702086a30 76 * Returns a pointer to an array describing the rpc methods
ClementBreteau 1:f3f702086a30 77 * supported by this object, terminated by either
ClementBreteau 1:f3f702086a30 78 * RPC_METHOD_END or RPC_METHOD_SUPER(Superclass).
ClementBreteau 1:f3f702086a30 79 *
ClementBreteau 1:f3f702086a30 80 * Example
ClementBreteau 1:f3f702086a30 81 * > class Example : public Base {
ClementBreteau 1:f3f702086a30 82 * > int foo(int a, int b) { return a + b; }
ClementBreteau 1:f3f702086a30 83 * > virtual const struct rpc_method *get_rpc_methods() {
ClementBreteau 1:f3f702086a30 84 * > static const rpc_method rpc_methods[] = {
ClementBreteau 1:f3f702086a30 85 * > { "foo", generic_caller<int, Example, int, int, &Example::foo> },
ClementBreteau 1:f3f702086a30 86 * > RPC_METHOD_SUPER(Base)
ClementBreteau 1:f3f702086a30 87 * > };
ClementBreteau 1:f3f702086a30 88 * > return rpc_methods;
ClementBreteau 1:f3f702086a30 89 * > }
ClementBreteau 1:f3f702086a30 90 * > };
ClementBreteau 1:f3f702086a30 91 */
ClementBreteau 1:f3f702086a30 92 virtual const struct rpc_method *get_rpc_methods();
ClementBreteau 1:f3f702086a30 93
ClementBreteau 1:f3f702086a30 94 /* Function rpc
ClementBreteau 1:f3f702086a30 95 * Use the lookup function to lookup an object and, if
ClementBreteau 1:f3f702086a30 96 * successful, call its rpc method
ClementBreteau 1:f3f702086a30 97 *
ClementBreteau 1:f3f702086a30 98 * Variables
ClementBreteau 1:f3f702086a30 99 * returns - false if name does not correspond to an object,
ClementBreteau 1:f3f702086a30 100 * otherwise the return value of the call to the object's rpc
ClementBreteau 1:f3f702086a30 101 * method.
ClementBreteau 1:f3f702086a30 102 */
ClementBreteau 1:f3f702086a30 103 static bool rpc(const char *name, const char *method, const char *arguments, char *result);
ClementBreteau 1:f3f702086a30 104
ClementBreteau 1:f3f702086a30 105 #endif
ClementBreteau 1:f3f702086a30 106
ClementBreteau 1:f3f702086a30 107 /* Function lookup
ClementBreteau 1:f3f702086a30 108 * Lookup and return the object that has the given name.
ClementBreteau 1:f3f702086a30 109 *
ClementBreteau 1:f3f702086a30 110 * Variables
ClementBreteau 1:f3f702086a30 111 * name - the name to lookup.
ClementBreteau 1:f3f702086a30 112 * len - the length of name.
ClementBreteau 1:f3f702086a30 113 */
ClementBreteau 1:f3f702086a30 114 static Base *lookup(const char *name, unsigned int len);
ClementBreteau 1:f3f702086a30 115
ClementBreteau 1:f3f702086a30 116 static DirHandle *opendir();
ClementBreteau 1:f3f702086a30 117 friend class BaseDirHandle;
ClementBreteau 1:f3f702086a30 118
ClementBreteau 1:f3f702086a30 119 protected:
ClementBreteau 1:f3f702086a30 120
ClementBreteau 1:f3f702086a30 121 static Base *_head;
ClementBreteau 1:f3f702086a30 122 Base *_next;
ClementBreteau 1:f3f702086a30 123 const char *_name;
ClementBreteau 1:f3f702086a30 124 bool _from_construct;
ClementBreteau 1:f3f702086a30 125
ClementBreteau 1:f3f702086a30 126 private:
ClementBreteau 1:f3f702086a30 127
ClementBreteau 1:f3f702086a30 128 #ifdef MBED_RPC
ClementBreteau 1:f3f702086a30 129 static rpc_class *_classes;
ClementBreteau 1:f3f702086a30 130
ClementBreteau 1:f3f702086a30 131 static const rpc_function _base_funcs[];
ClementBreteau 1:f3f702086a30 132 static rpc_class _base_class;
ClementBreteau 1:f3f702086a30 133 #endif
ClementBreteau 1:f3f702086a30 134
ClementBreteau 1:f3f702086a30 135 void delete_self();
ClementBreteau 1:f3f702086a30 136 static void list_objs(const char *arguments, char *result);
ClementBreteau 1:f3f702086a30 137 static void clear(const char*,char*);
ClementBreteau 1:f3f702086a30 138
ClementBreteau 1:f3f702086a30 139 static char *new_name(Base *p);
ClementBreteau 1:f3f702086a30 140
ClementBreteau 1:f3f702086a30 141 public:
ClementBreteau 1:f3f702086a30 142
ClementBreteau 1:f3f702086a30 143 #ifdef MBED_RPC
ClementBreteau 1:f3f702086a30 144 /* Function add_rpc_class
ClementBreteau 1:f3f702086a30 145 * Add the class to the list of classes which can have static
ClementBreteau 1:f3f702086a30 146 * methods called via rpc (the static methods which can be called
ClementBreteau 1:f3f702086a30 147 * are defined by that class' get_rpc_class() static method).
ClementBreteau 1:f3f702086a30 148 */
ClementBreteau 1:f3f702086a30 149 template<class C>
ClementBreteau 1:f3f702086a30 150 static void add_rpc_class() {
ClementBreteau 1:f3f702086a30 151 rpc_class *c = C::get_rpc_class();
ClementBreteau 1:f3f702086a30 152 c->next = _classes;
ClementBreteau 1:f3f702086a30 153 _classes = c;
ClementBreteau 1:f3f702086a30 154 }
ClementBreteau 1:f3f702086a30 155
ClementBreteau 1:f3f702086a30 156 template<class C>
ClementBreteau 1:f3f702086a30 157 static const char *construct() {
ClementBreteau 1:f3f702086a30 158 Base *p = new C();
ClementBreteau 1:f3f702086a30 159 p->_from_construct = true;
ClementBreteau 1:f3f702086a30 160 if(p->_name==NULL) {
ClementBreteau 1:f3f702086a30 161 p->register_object(new_name(p));
ClementBreteau 1:f3f702086a30 162 }
ClementBreteau 1:f3f702086a30 163 return p->_name;
ClementBreteau 1:f3f702086a30 164 }
ClementBreteau 1:f3f702086a30 165
ClementBreteau 1:f3f702086a30 166 template<class C, typename A1>
ClementBreteau 1:f3f702086a30 167 static const char *construct(A1 arg1) {
ClementBreteau 1:f3f702086a30 168 Base *p = new C(arg1);
ClementBreteau 1:f3f702086a30 169 p->_from_construct = true;
ClementBreteau 1:f3f702086a30 170 if(p->_name==NULL) {
ClementBreteau 1:f3f702086a30 171 p->register_object(new_name(p));
ClementBreteau 1:f3f702086a30 172 }
ClementBreteau 1:f3f702086a30 173 return p->_name;
ClementBreteau 1:f3f702086a30 174 }
ClementBreteau 1:f3f702086a30 175
ClementBreteau 1:f3f702086a30 176 template<class C, typename A1, typename A2>
ClementBreteau 1:f3f702086a30 177 static const char *construct(A1 arg1, A2 arg2) {
ClementBreteau 1:f3f702086a30 178 Base *p = new C(arg1,arg2);
ClementBreteau 1:f3f702086a30 179 p->_from_construct = true;
ClementBreteau 1:f3f702086a30 180 if(p->_name==NULL) {
ClementBreteau 1:f3f702086a30 181 p->register_object(new_name(p));
ClementBreteau 1:f3f702086a30 182 }
ClementBreteau 1:f3f702086a30 183 return p->_name;
ClementBreteau 1:f3f702086a30 184 }
ClementBreteau 1:f3f702086a30 185
ClementBreteau 1:f3f702086a30 186 template<class C, typename A1, typename A2, typename A3>
ClementBreteau 1:f3f702086a30 187 static const char *construct(A1 arg1, A2 arg2, A3 arg3) {
ClementBreteau 1:f3f702086a30 188 Base *p = new C(arg1,arg2,arg3);
ClementBreteau 1:f3f702086a30 189 p->_from_construct = true;
ClementBreteau 1:f3f702086a30 190 if(p->_name==NULL) {
ClementBreteau 1:f3f702086a30 191 p->register_object(new_name(p));
ClementBreteau 1:f3f702086a30 192 }
ClementBreteau 1:f3f702086a30 193 return p->_name;
ClementBreteau 1:f3f702086a30 194 }
ClementBreteau 1:f3f702086a30 195
ClementBreteau 1:f3f702086a30 196 template<class C, typename A1, typename A2, typename A3, typename A4>
ClementBreteau 1:f3f702086a30 197 static const char *construct(A1 arg1, A2 arg2, A3 arg3, A4 arg4) {
ClementBreteau 1:f3f702086a30 198 Base *p = new C(arg1,arg2,arg3,arg4);
ClementBreteau 1:f3f702086a30 199 p->_from_construct = true;
ClementBreteau 1:f3f702086a30 200 if(p->_name==NULL) {
ClementBreteau 1:f3f702086a30 201 p->register_object(new_name(p));
ClementBreteau 1:f3f702086a30 202 }
ClementBreteau 1:f3f702086a30 203 return p->_name;
ClementBreteau 1:f3f702086a30 204 }
ClementBreteau 1:f3f702086a30 205 #endif
ClementBreteau 1:f3f702086a30 206
ClementBreteau 1:f3f702086a30 207 };
ClementBreteau 1:f3f702086a30 208
ClementBreteau 1:f3f702086a30 209 /* Macro MBED_OBJECT_NAME_MAX
ClementBreteau 1:f3f702086a30 210 * The maximum size of object name (including terminating null byte)
ClementBreteau 1:f3f702086a30 211 * that will be recognised when using fopen to open a FileLike
ClementBreteau 1:f3f702086a30 212 * object, or when using the rpc function.
ClementBreteau 1:f3f702086a30 213 */
ClementBreteau 1:f3f702086a30 214 #define MBED_OBJECT_NAME_MAX 32
ClementBreteau 1:f3f702086a30 215
ClementBreteau 1:f3f702086a30 216 /* Macro MBED_METHOD_NAME_MAX
ClementBreteau 1:f3f702086a30 217 * The maximum size of rpc method name (including terminating null
ClementBreteau 1:f3f702086a30 218 * byte) that will be recognised by the rpc function (in rpc.h).
ClementBreteau 1:f3f702086a30 219 */
ClementBreteau 1:f3f702086a30 220 #define MBED_METHOD_NAME_MAX 32
ClementBreteau 1:f3f702086a30 221
ClementBreteau 1:f3f702086a30 222 } // namespace mbed
ClementBreteau 1:f3f702086a30 223
ClementBreteau 1:f3f702086a30 224 #endif
ClementBreteau 1:f3f702086a30 225