Rahul Dahiya / Mbed OS STM32F7 Ethernet
Committer:
rahul_dahiya
Date:
Wed Jan 15 15:57:15 2020 +0530
Revision:
0:fb8047b156bb
STM32F7 LWIP

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rahul_dahiya 0:fb8047b156bb 1
rahul_dahiya 0:fb8047b156bb 2 // Suppress deprecation warnings since this whole
rahul_dahiya 0:fb8047b156bb 3 // class is deprecated already
rahul_dahiya 0:fb8047b156bb 4 #include "mbed_toolchain.h"
rahul_dahiya 0:fb8047b156bb 5 #undef MBED_DEPRECATED_SINCE
rahul_dahiya 0:fb8047b156bb 6 #define MBED_DEPRECATED_SINCE(...)
rahul_dahiya 0:fb8047b156bb 7
rahul_dahiya 0:fb8047b156bb 8 #include "platform/CallChain.h"
rahul_dahiya 0:fb8047b156bb 9 #include "cmsis.h"
rahul_dahiya 0:fb8047b156bb 10 #include "platform/mbed_critical.h"
rahul_dahiya 0:fb8047b156bb 11
rahul_dahiya 0:fb8047b156bb 12 namespace mbed {
rahul_dahiya 0:fb8047b156bb 13
rahul_dahiya 0:fb8047b156bb 14 class CallChainLink {
rahul_dahiya 0:fb8047b156bb 15 public:
rahul_dahiya 0:fb8047b156bb 16 CallChainLink(): cb(), next(NULL) {
rahul_dahiya 0:fb8047b156bb 17 // No work to do
rahul_dahiya 0:fb8047b156bb 18 }
rahul_dahiya 0:fb8047b156bb 19
rahul_dahiya 0:fb8047b156bb 20 CallChainLink(Callback<void()> &callback): cb(callback), next(NULL) {
rahul_dahiya 0:fb8047b156bb 21 // No work to do
rahul_dahiya 0:fb8047b156bb 22 }
rahul_dahiya 0:fb8047b156bb 23 Callback<void()> cb;
rahul_dahiya 0:fb8047b156bb 24 CallChainLink * next;
rahul_dahiya 0:fb8047b156bb 25 };
rahul_dahiya 0:fb8047b156bb 26
rahul_dahiya 0:fb8047b156bb 27 CallChain::CallChain(int size) : _chain(NULL) {
rahul_dahiya 0:fb8047b156bb 28 // No work to do
rahul_dahiya 0:fb8047b156bb 29 }
rahul_dahiya 0:fb8047b156bb 30
rahul_dahiya 0:fb8047b156bb 31 CallChain::~CallChain() {
rahul_dahiya 0:fb8047b156bb 32 clear();
rahul_dahiya 0:fb8047b156bb 33 }
rahul_dahiya 0:fb8047b156bb 34
rahul_dahiya 0:fb8047b156bb 35 pFunctionPointer_t CallChain::add(Callback<void()> func) {
rahul_dahiya 0:fb8047b156bb 36 CallChainLink *new_link = new CallChainLink(func);
rahul_dahiya 0:fb8047b156bb 37 if (NULL == _chain) {
rahul_dahiya 0:fb8047b156bb 38 _chain = new_link;
rahul_dahiya 0:fb8047b156bb 39 return &new_link->cb;
rahul_dahiya 0:fb8047b156bb 40 }
rahul_dahiya 0:fb8047b156bb 41
rahul_dahiya 0:fb8047b156bb 42 CallChainLink *link = _chain;
rahul_dahiya 0:fb8047b156bb 43 while (true) {
rahul_dahiya 0:fb8047b156bb 44 if (NULL == link->next) {
rahul_dahiya 0:fb8047b156bb 45 link->next = new_link;
rahul_dahiya 0:fb8047b156bb 46 return &new_link->cb;
rahul_dahiya 0:fb8047b156bb 47 }
rahul_dahiya 0:fb8047b156bb 48 link = link->next;
rahul_dahiya 0:fb8047b156bb 49 }
rahul_dahiya 0:fb8047b156bb 50 }
rahul_dahiya 0:fb8047b156bb 51
rahul_dahiya 0:fb8047b156bb 52 pFunctionPointer_t CallChain::add_front(Callback<void()> func) {
rahul_dahiya 0:fb8047b156bb 53 CallChainLink *link = new CallChainLink(func);
rahul_dahiya 0:fb8047b156bb 54 link->next = _chain;
rahul_dahiya 0:fb8047b156bb 55 _chain = link;
rahul_dahiya 0:fb8047b156bb 56 return &link->cb;
rahul_dahiya 0:fb8047b156bb 57 }
rahul_dahiya 0:fb8047b156bb 58
rahul_dahiya 0:fb8047b156bb 59 int CallChain::size() const {
rahul_dahiya 0:fb8047b156bb 60 CallChainLink *link = _chain;
rahul_dahiya 0:fb8047b156bb 61 int elements = 0;
rahul_dahiya 0:fb8047b156bb 62 while (link != NULL) {
rahul_dahiya 0:fb8047b156bb 63 elements++;
rahul_dahiya 0:fb8047b156bb 64 link = link->next;
rahul_dahiya 0:fb8047b156bb 65 }
rahul_dahiya 0:fb8047b156bb 66 return elements;
rahul_dahiya 0:fb8047b156bb 67 }
rahul_dahiya 0:fb8047b156bb 68
rahul_dahiya 0:fb8047b156bb 69 pFunctionPointer_t CallChain::get(int idx) const {
rahul_dahiya 0:fb8047b156bb 70 CallChainLink *link = _chain;
rahul_dahiya 0:fb8047b156bb 71 for (int i = 0; i < idx; i++) {
rahul_dahiya 0:fb8047b156bb 72 if (NULL == link) {
rahul_dahiya 0:fb8047b156bb 73 break;
rahul_dahiya 0:fb8047b156bb 74 }
rahul_dahiya 0:fb8047b156bb 75 link = link->next;
rahul_dahiya 0:fb8047b156bb 76 }
rahul_dahiya 0:fb8047b156bb 77 return &link->cb;
rahul_dahiya 0:fb8047b156bb 78 }
rahul_dahiya 0:fb8047b156bb 79
rahul_dahiya 0:fb8047b156bb 80 int CallChain::find(pFunctionPointer_t f) const {
rahul_dahiya 0:fb8047b156bb 81 CallChainLink *link = _chain;
rahul_dahiya 0:fb8047b156bb 82 int i = 0;
rahul_dahiya 0:fb8047b156bb 83 while (link != NULL) {
rahul_dahiya 0:fb8047b156bb 84 if (f == &link->cb) {
rahul_dahiya 0:fb8047b156bb 85 return i;
rahul_dahiya 0:fb8047b156bb 86 }
rahul_dahiya 0:fb8047b156bb 87 i++;
rahul_dahiya 0:fb8047b156bb 88 link = link->next;
rahul_dahiya 0:fb8047b156bb 89 }
rahul_dahiya 0:fb8047b156bb 90 return -1;
rahul_dahiya 0:fb8047b156bb 91 }
rahul_dahiya 0:fb8047b156bb 92
rahul_dahiya 0:fb8047b156bb 93 void CallChain::clear() {
rahul_dahiya 0:fb8047b156bb 94 CallChainLink *link = _chain;
rahul_dahiya 0:fb8047b156bb 95 _chain = NULL;
rahul_dahiya 0:fb8047b156bb 96 while (link != NULL) {
rahul_dahiya 0:fb8047b156bb 97 CallChainLink *temp = link->next;
rahul_dahiya 0:fb8047b156bb 98 delete link;
rahul_dahiya 0:fb8047b156bb 99 link = temp;
rahul_dahiya 0:fb8047b156bb 100 }
rahul_dahiya 0:fb8047b156bb 101 }
rahul_dahiya 0:fb8047b156bb 102
rahul_dahiya 0:fb8047b156bb 103 bool CallChain::remove(pFunctionPointer_t f) {
rahul_dahiya 0:fb8047b156bb 104 CallChainLink *link = _chain;
rahul_dahiya 0:fb8047b156bb 105 while (link != NULL) {
rahul_dahiya 0:fb8047b156bb 106 if (f == &link->cb) {
rahul_dahiya 0:fb8047b156bb 107 delete link;
rahul_dahiya 0:fb8047b156bb 108 return true;
rahul_dahiya 0:fb8047b156bb 109 }
rahul_dahiya 0:fb8047b156bb 110 link = link->next;
rahul_dahiya 0:fb8047b156bb 111 }
rahul_dahiya 0:fb8047b156bb 112 return false;
rahul_dahiya 0:fb8047b156bb 113 }
rahul_dahiya 0:fb8047b156bb 114
rahul_dahiya 0:fb8047b156bb 115 void CallChain::call() {
rahul_dahiya 0:fb8047b156bb 116 CallChainLink *link = _chain;
rahul_dahiya 0:fb8047b156bb 117 while (link != NULL) {
rahul_dahiya 0:fb8047b156bb 118 link->cb.call();
rahul_dahiya 0:fb8047b156bb 119 link = link->next;
rahul_dahiya 0:fb8047b156bb 120 }
rahul_dahiya 0:fb8047b156bb 121 }
rahul_dahiya 0:fb8047b156bb 122
rahul_dahiya 0:fb8047b156bb 123 } // namespace mbed