Radio Structures in OOP

Dependencies:   mbed mbed-rtos

Revision:
4:989d51f3e6ef
Parent:
3:dc7e9c6bc26c
--- a/utils/RTOS_Management/FunctionPointerRJ.h	Sat Jan 03 04:35:32 2015 +0000
+++ b/utils/RTOS_Management/FunctionPointerRJ.h	Sat Jan 03 11:04:31 2015 +0000
@@ -19,13 +19,12 @@
 #include <string.h>
 #include "RTP.h"
 
-namespace mbed {
-
 typedef void (*pvoidf_t)(void);
 
 /** A class for storing and calling a pointer to a static or member void function
  */
-class FunctionPointerRJ {
+class FunctionPointerRJ
+{
 public:
 
     /** Create a FunctionPointer, attaching a static function
@@ -48,9 +47,9 @@
      *
      *  @param function The void static function to attach (default is none)
      */
-    void attach(void (*function)(void) = 0);
-    void attach(void (*function)(RTP_t*));
-    void attach(void (*function)(void const*));
+    void attach(void(*function)(void) = 0);
+    void attach(void(*function)(RTP_t*) = 0);
+    void attach(void(*function)(void const*));
 
     /** Attach a member function
      *
@@ -64,17 +63,17 @@
         _membercaller = &FunctionPointerRJ::membercaller<T>;
         _function = 0;
     }
-    
-        /** Attach a member function
-     *
-     *  @param object The object pointer to invoke the member function on (i.e. the this pointer)
-     *  @param function The address of the void member function to attach
-     */
+
+    /** Attach a member function
+    *
+    *  @param object The object pointer to invoke the member function on (i.e. the this pointer)
+    *  @param function The address of the void member function to attach
+    */
     template<typename T>
-    void attach(T *object, void (T::*member)(RTP_t&)) {
+    void attach(T *object, void (T::*member)(RTP_t*)) {
         _object = static_cast<void*>(object);
         memcpy(_member, (char*)&member, sizeof(member));
-        _membercaller = &FunctionPointerRJ::membercaller<T>;
+        _membercallerRTP = &FunctionPointerRJ::membercallerRTP<T>;
         _functionRTP = 0;
     }
 
@@ -101,14 +100,22 @@
         (o->*m)();
     }
 
-    void (*_functionConst)(void const*); 
-    void (*_functionRTP)(RTP_t*); 
+    template<typename T>
+    static void membercallerRTP(void *object, char *member, RTP_t *p) {
+        T* o = static_cast<T*>(object);
+        void(T::*m)(RTP_t*);
+        memcpy((char*)&m, member, sizeof(m));
+        (o->*m)(p);
+
+    }
+
+    void (*_functionConst)(void const*);
+    void (*_functionRTP)(RTP_t*);
     void (*_function)(void);             // static function pointer - 0 if none attached
     void *_object;                       // object this pointer - 0 if none attached
     char _member[16];                    // raw member function pointer storage - converted back by registered _membercaller
     void (*_membercaller)(void*, char*); // registered membercaller function to convert back and call _member on _object
+    void (*_membercallerRTP)(void*, char*, RTP_t*);
 };
 
-} // namespace mbed
-
 #endif  // FUNCTIONPOINTER_RJ_H