Color Oled(SSD1331) connect to STMicroelectronics Nucleo-F466

Dependencies:   ssd1331

Committer:
kadonotakashi
Date:
Thu Oct 11 02:27:46 2018 +0000
Revision:
3:f3764f852aa8
Parent:
0:8fdf9a60065b
Nucreo 446 + SSD1331 test version;

Who changed what in which revision?

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