Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: 1-RenBuggyTimed RenBED_RGB RenBED_RGB_PWM RenBED_RGB
Fork of mbed by
Diff: Base.h
- Revision:
- 4:5d1359a283bc
- Parent:
- 1:6b7f447ca868
- Child:
- 5:62573be585e9
diff -r aefd12a1f1c5 -r 5d1359a283bc Base.h
--- a/Base.h Fri Nov 14 15:25:20 2008 +0000
+++ b/Base.h Thu Nov 27 16:23:24 2008 +0000
@@ -1,42 +1,117 @@
/* mbed Microcontroller Library - Base
- * Copyright (c) 2007-2008, sford
+ * Copyright (c) 2006-2008 ARM Limited. All rights reserved.
+ * sford, jbrawn
*/
-
+
#ifndef MBED_BASE_H
#define MBED_BASE_H
-#define MBED_BASE_NUM_OBJECTS 128 // max # base objects
-#define MBED_BASE_SIZE_NAME 16 // max size of object name, including the null-termination
-
-#include "rt_sys.h"
+#include <cstdlib>
namespace mbed {
+/* Class Base
+ * The base class for most things
+ */
class Base {
public:
+
+ Base(const char *name = NULL);
- Base();
- virtual ~Base();
+ virtual ~Base();
+
+ /* Function register_object
+ * Registers this object with the given name, so that it can be
+ * looked up with lookup. If this object has already been
+ * registered, then this just changes the name.
+ *
+ * Variables
+ * name - The name to give the object. If NULL we do nothing.
+ */
+ void register_object(const char *name);
+
+ /* Function name
+ * Returns the name of the object, or NULL if it has no name.
+ */
+ const char *name();
+
+ /* Function rpc
+ * Call the given method with the given arguments, and write the
+ * result into the string pointed to by result. The default
+ * implementation calls rpc_methods to determine the supported
+ * methods.
+ *
+ * Variables
+ * method - The name of the method to call.
+ * arguments - A list of arguments separated by spaces.
+ * result - A pointer to a string to write the result into. May
+ * be NULL, in which case nothing is written.
+ * returns - true if method corresponds to a valid rpc method, or
+ * false otherwise.
+ */
+ virtual bool rpc(const char *method, const char *arguments, char *result);
- void name(const char* name);
- const char* name();
- const char* type();
-
- static Base* lookup(const char* name);
-
- virtual FILEHANDLE sys_open(const char* name, int openmode);
+ /* Function rpc_method
+ * Returns a pointer to an array describing the rpc methods
+ * supported by this object, terminated by RPC_METHOD_END.
+ *
+ * Example
+ *
+ * > class Example : public Base {
+ * > int foo(int a, int b) { return a + b; }
+ * > virtual const struct rpc_method *rpc_methods() {
+ * > static const rpc_method rpc_methods[] = {
+ * > { "foo", generic_caller<int, Example, int, int, &Example::foo> },
+ * > RPC_METHOD_END
+ * > };
+ * > return rpc_methods;
+ * > }
+ * > };
+ */
+ virtual const struct rpc_method *rpc_methods();
+
+ /* Function rpc
+ * Use the lookup function to lookup an object and, if
+ * successful, call its rpc method
+ *
+ * Variables
+ * returns - false if name does not correspond to an object,
+ * otherwise the return value of the call to the object's rpc
+ * method.
+ */
+ static bool rpc(const char *name, const char *method, const char *arguments, char *result);
+
+ /* Function lookup
+ * Lookup and return the object that has the given name.
+ *
+ * Variables
+ * name - the name to lookup.
+ * len - the length of name.
+ */
+ static Base *lookup(const char *name, unsigned int len);
protected:
- const char* _type; // The class type
- char _name[MBED_BASE_SIZE_NAME]; // The class instance name
-
- static int _uid; // The counter used to generate the uid's
- static Base* _objects[MBED_BASE_NUM_OBJECTS]; // Pointers to all the objects to enable things like rpc
-
+ static Base *_head;
+ Base *_next;
+ const char *_name;
+
};
+/* Macro MBED_OBJECT_NAME_MAX
+ * The maximum size of object name (including terminating null byte)
+ * that will be recognised when using fopen to open a FileLike
+ * object, or when using the rpc function.
+ */
+#define MBED_OBJECT_NAME_MAX 32
+
+/* Macro MBED_METHOD_NAME_MAX
+ * The maximum size of rpc method name (including terminating null
+ * byte) that will be recognised by the rpc function (in rpc.h).
+ */
+#define MBED_METHOD_NAME_MAX 32
+
} // namespace mbed
#endif
