Programme d'utilisation des AX12 avec rajout de l'MX12

Fork of test_carteAToutFaire_PR by CRAC Team

Committer:
R66Y
Date:
Sat May 20 15:23:58 2017 +0000
Revision:
3:1bb26049bdd1
Parent:
1:f3f702086a30
Programme de contr?le des AX12 avec rajout de l'MX12;

Who changed what in which revision?

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