Biomimetics MBED Library w/ Added Support for CAN3

Dependents:   CAN_TEST SPIne_Plus_DYNO_SENSORS SPIne_Plus_v2 SPIne_Plus_Dyno_v2

Committer:
saloutos
Date:
Thu Nov 26 04:08:56 2020 +0000
Revision:
0:083111ae2a11
first commit of leaned mbed dev lib

Who changed what in which revision?

UserRevisionLine numberNew contents of line
saloutos 0:083111ae2a11 1 /* mbed Microcontroller Library
saloutos 0:083111ae2a11 2 * Copyright (c) 2006-2015 ARM Limited
saloutos 0:083111ae2a11 3 *
saloutos 0:083111ae2a11 4 * Licensed under the Apache License, Version 2.0 (the "License");
saloutos 0:083111ae2a11 5 * you may not use this file except in compliance with the License.
saloutos 0:083111ae2a11 6 * You may obtain a copy of the License at
saloutos 0:083111ae2a11 7 *
saloutos 0:083111ae2a11 8 * http://www.apache.org/licenses/LICENSE-2.0
saloutos 0:083111ae2a11 9 *
saloutos 0:083111ae2a11 10 * Unless required by applicable law or agreed to in writing, software
saloutos 0:083111ae2a11 11 * distributed under the License is distributed on an "AS IS" BASIS,
saloutos 0:083111ae2a11 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
saloutos 0:083111ae2a11 13 * See the License for the specific language governing permissions and
saloutos 0:083111ae2a11 14 * limitations under the License.
saloutos 0:083111ae2a11 15 */
saloutos 0:083111ae2a11 16 #ifndef MBED_FUNCTIONPOINTER_H
saloutos 0:083111ae2a11 17 #define MBED_FUNCTIONPOINTER_H
saloutos 0:083111ae2a11 18
saloutos 0:083111ae2a11 19 #include "platform/Callback.h"
saloutos 0:083111ae2a11 20 #include "platform/mbed_toolchain.h"
saloutos 0:083111ae2a11 21 #include <string.h>
saloutos 0:083111ae2a11 22 #include <stdint.h>
saloutos 0:083111ae2a11 23
saloutos 0:083111ae2a11 24 namespace mbed {
saloutos 0:083111ae2a11 25 /** \addtogroup platform */
saloutos 0:083111ae2a11 26
saloutos 0:083111ae2a11 27
saloutos 0:083111ae2a11 28 // Declarations for backwards compatibility
saloutos 0:083111ae2a11 29 // To be foward compatible, code should adopt the Callback class
saloutos 0:083111ae2a11 30 /**
saloutos 0:083111ae2a11 31 * @ingroup platform
saloutos 0:083111ae2a11 32 */
saloutos 0:083111ae2a11 33 template <typename R, typename A1>
saloutos 0:083111ae2a11 34 class FunctionPointerArg1 : public Callback<R(A1)> {
saloutos 0:083111ae2a11 35 public:
saloutos 0:083111ae2a11 36 MBED_DEPRECATED_SINCE("mbed-os-5.1",
saloutos 0:083111ae2a11 37 "FunctionPointerArg1<R, A> has been replaced by Callback<R(A)>")
saloutos 0:083111ae2a11 38 FunctionPointerArg1(R (*function)(A1) = 0)
saloutos 0:083111ae2a11 39 : Callback<R(A1)>(function) {}
saloutos 0:083111ae2a11 40
saloutos 0:083111ae2a11 41 template<typename T>
saloutos 0:083111ae2a11 42 MBED_DEPRECATED_SINCE("mbed-os-5.1",
saloutos 0:083111ae2a11 43 "FunctionPointerArg1<R, A> has been replaced by Callback<R(A)>")
saloutos 0:083111ae2a11 44 FunctionPointerArg1(T *object, R (T::*member)(A1))
saloutos 0:083111ae2a11 45 : Callback<R(A1)>(object, member) {}
saloutos 0:083111ae2a11 46
saloutos 0:083111ae2a11 47 R (*get_function())(A1) {
saloutos 0:083111ae2a11 48 return *reinterpret_cast<R (**)(A1)>(this);
saloutos 0:083111ae2a11 49 }
saloutos 0:083111ae2a11 50
saloutos 0:083111ae2a11 51 R call(A1 a1) const {
saloutos 0:083111ae2a11 52 if (!Callback<R(A1)>::operator bool()) {
saloutos 0:083111ae2a11 53 return (R)0;
saloutos 0:083111ae2a11 54 }
saloutos 0:083111ae2a11 55
saloutos 0:083111ae2a11 56 return Callback<R(A1)>::call(a1);
saloutos 0:083111ae2a11 57 }
saloutos 0:083111ae2a11 58
saloutos 0:083111ae2a11 59 R operator()(A1 a1) const {
saloutos 0:083111ae2a11 60 return Callback<R(A1)>::call(a1);
saloutos 0:083111ae2a11 61 }
saloutos 0:083111ae2a11 62 };
saloutos 0:083111ae2a11 63
saloutos 0:083111ae2a11 64 /**
saloutos 0:083111ae2a11 65 * @ingroup platform
saloutos 0:083111ae2a11 66 */
saloutos 0:083111ae2a11 67 template <typename R>
saloutos 0:083111ae2a11 68 class FunctionPointerArg1<R, void> : public Callback<R()> {
saloutos 0:083111ae2a11 69 public:
saloutos 0:083111ae2a11 70 MBED_DEPRECATED_SINCE("mbed-os-5.1",
saloutos 0:083111ae2a11 71 "FunctionPointer has been replaced by Callback<void()>")
saloutos 0:083111ae2a11 72 FunctionPointerArg1(R (*function)() = 0)
saloutos 0:083111ae2a11 73 : Callback<R()>(function) {}
saloutos 0:083111ae2a11 74
saloutos 0:083111ae2a11 75 template<typename T>
saloutos 0:083111ae2a11 76 MBED_DEPRECATED_SINCE("mbed-os-5.1",
saloutos 0:083111ae2a11 77 "FunctionPointer has been replaced by Callback<void()>")
saloutos 0:083111ae2a11 78 FunctionPointerArg1(T *object, R (T::*member)())
saloutos 0:083111ae2a11 79 : Callback<R()>(object, member) {}
saloutos 0:083111ae2a11 80
saloutos 0:083111ae2a11 81 R (*get_function())() {
saloutos 0:083111ae2a11 82 return *reinterpret_cast<R (**)()>(this);
saloutos 0:083111ae2a11 83 }
saloutos 0:083111ae2a11 84
saloutos 0:083111ae2a11 85 R call() const {
saloutos 0:083111ae2a11 86 if (!Callback<R()>::operator bool()) {
saloutos 0:083111ae2a11 87 return (R)0;
saloutos 0:083111ae2a11 88 }
saloutos 0:083111ae2a11 89
saloutos 0:083111ae2a11 90 return Callback<R()>::call();
saloutos 0:083111ae2a11 91 }
saloutos 0:083111ae2a11 92
saloutos 0:083111ae2a11 93 R operator()() const {
saloutos 0:083111ae2a11 94 return Callback<R()>::call();
saloutos 0:083111ae2a11 95 }
saloutos 0:083111ae2a11 96 };
saloutos 0:083111ae2a11 97
saloutos 0:083111ae2a11 98 typedef FunctionPointerArg1<void, void> FunctionPointer;
saloutos 0:083111ae2a11 99
saloutos 0:083111ae2a11 100
saloutos 0:083111ae2a11 101 } // namespace mbed
saloutos 0:083111ae2a11 102
saloutos 0:083111ae2a11 103 #endif