code ax12 petit robot 12/05/2017

Fork of command_AX12_petit_robot_V3 by CRAC Team

Committer:
ClementBreteau
Date:
Fri May 12 14:35:09 2017 +0000
Revision:
7:ad4a19e26b84
Parent:
2:99b1cb0d9f5e
position ax12

Who changed what in which revision?

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