config AX12

Fork of configure_ax12_test_bras_module by CRAC Team

Committer:
slowness
Date:
Wed Feb 03 14:01:53 2016 +0000
Revision:
0:c03cffe402df
Pour configurer les AX12 avec la carte NXP1768 sur les Pin 9 et 10

Who changed what in which revision?

UserRevisionLine numberNew contents of line
slowness 0:c03cffe402df 1 /* mbed Microcontroller Library - FunctionPointer
slowness 0:c03cffe402df 2 * Copyright (c) 2007-2009 ARM Limited. All rights reserved.
slowness 0:c03cffe402df 3 */
slowness 0:c03cffe402df 4
slowness 0:c03cffe402df 5 #ifndef MBED_FUNCTIONPOINTER_H
slowness 0:c03cffe402df 6 #define MBED_FUNCTIONPOINTER_H
slowness 0:c03cffe402df 7
slowness 0:c03cffe402df 8 #include <string.h>
slowness 0:c03cffe402df 9
slowness 0:c03cffe402df 10 namespace mbed {
slowness 0:c03cffe402df 11
slowness 0:c03cffe402df 12 /* Class FunctionPointer
slowness 0:c03cffe402df 13 * A class for storing and calling a pointer to a static or member void function
slowness 0:c03cffe402df 14 */
slowness 0:c03cffe402df 15 class FunctionPointer {
slowness 0:c03cffe402df 16
slowness 0:c03cffe402df 17 public:
slowness 0:c03cffe402df 18
slowness 0:c03cffe402df 19 /* Constructor FunctionPointer
slowness 0:c03cffe402df 20 * Create a FunctionPointer, attaching a static function
slowness 0:c03cffe402df 21 *
slowness 0:c03cffe402df 22 * Variables
slowness 0:c03cffe402df 23 * function - The void static function to attach (default is none)
slowness 0:c03cffe402df 24 */
slowness 0:c03cffe402df 25 FunctionPointer(void (*function)(void) = 0);
slowness 0:c03cffe402df 26
slowness 0:c03cffe402df 27 /* Constructor FunctionPointer
slowness 0:c03cffe402df 28 * Create a FunctionPointer, attaching a member function
slowness 0:c03cffe402df 29 *
slowness 0:c03cffe402df 30 * Variables
slowness 0:c03cffe402df 31 * object - The object pointer to invoke the member function on (i.e. the this pointer)
slowness 0:c03cffe402df 32 * function - The address of the void member function to attach
slowness 0:c03cffe402df 33 */
slowness 0:c03cffe402df 34 template<typename T>
slowness 0:c03cffe402df 35 FunctionPointer(T *object, void (T::*member)(void)) {
slowness 0:c03cffe402df 36 attach(object, member);
slowness 0:c03cffe402df 37 }
slowness 0:c03cffe402df 38
slowness 0:c03cffe402df 39 /* Function attach
slowness 0:c03cffe402df 40 * Attach a static function
slowness 0:c03cffe402df 41 *
slowness 0:c03cffe402df 42 * Variables
slowness 0:c03cffe402df 43 * function - The void static function to attach (default is none)
slowness 0:c03cffe402df 44 */
slowness 0:c03cffe402df 45 void attach(void (*function)(void) = 0);
slowness 0:c03cffe402df 46
slowness 0:c03cffe402df 47 /* Function attach
slowness 0:c03cffe402df 48 * Attach a member function
slowness 0:c03cffe402df 49 *
slowness 0:c03cffe402df 50 * Variables
slowness 0:c03cffe402df 51 * object - The object pointer to invoke the member function on (i.e. the this pointer)
slowness 0:c03cffe402df 52 * function - The address of the void member function to attach
slowness 0:c03cffe402df 53 */
slowness 0:c03cffe402df 54 template<typename T>
slowness 0:c03cffe402df 55 void attach(T *object, void (T::*member)(void)) {
slowness 0:c03cffe402df 56 _object = static_cast<void*>(object);
slowness 0:c03cffe402df 57 memcpy(_member, (char*)&member, sizeof(member));
slowness 0:c03cffe402df 58 _membercaller = &FunctionPointer::membercaller<T>;
slowness 0:c03cffe402df 59 _function = 0;
slowness 0:c03cffe402df 60 }
slowness 0:c03cffe402df 61
slowness 0:c03cffe402df 62 /* Function call
slowness 0:c03cffe402df 63 * Call the attached static or member function
slowness 0:c03cffe402df 64 */
slowness 0:c03cffe402df 65 void call();
slowness 0:c03cffe402df 66
slowness 0:c03cffe402df 67 private:
slowness 0:c03cffe402df 68
slowness 0:c03cffe402df 69 template<typename T>
slowness 0:c03cffe402df 70 static void membercaller(void *object, char *member) {
slowness 0:c03cffe402df 71 T* o = static_cast<T*>(object);
slowness 0:c03cffe402df 72 void (T::*m)(void);
slowness 0:c03cffe402df 73 memcpy((char*)&m, member, sizeof(m));
slowness 0:c03cffe402df 74 (o->*m)();
slowness 0:c03cffe402df 75 }
slowness 0:c03cffe402df 76
slowness 0:c03cffe402df 77 void (*_function)(void); // static function pointer - 0 if none attached
slowness 0:c03cffe402df 78 void *_object; // object this pointer - 0 if none attached
slowness 0:c03cffe402df 79 char _member[16]; // raw member function pointer storage - converted back by registered _membercaller
slowness 0:c03cffe402df 80 void (*_membercaller)(void*, char*); // registered membercaller function to convert back and call _member on _object
slowness 0:c03cffe402df 81
slowness 0:c03cffe402df 82 };
slowness 0:c03cffe402df 83
slowness 0:c03cffe402df 84 } // namespace mbed
slowness 0:c03cffe402df 85
slowness 0:c03cffe402df 86 #endif