RTC auf true

Committer:
kevman
Date:
Wed Mar 13 11:03:24 2019 +0000
Revision:
2:7aab896b1a3b
Parent:
0:38ceb79fef03
2019-03-13

Who changed what in which revision?

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