A simple 128x32 graphical LCD program to quickstart with LCD on ARM mbed IoT Starter Kit. This requires mbed Applciation Shield with FRDM-K64F platform.

Dependencies:   C12832

Committer:
tushki7
Date:
Sun Apr 12 15:45:52 2015 +0000
Revision:
1:eb68c94a8ee5
Parent:
0:60d829a0353a
A simple 128x32 LCD program with ARM mbed IoT Starter Kit;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tushki7 0:60d829a0353a 1 /* mbed Microcontroller Library
tushki7 0:60d829a0353a 2 * Copyright (c) 2006-2013 ARM Limited
tushki7 0:60d829a0353a 3 *
tushki7 0:60d829a0353a 4 * Licensed under the Apache License, Version 2.0 (the "License");
tushki7 0:60d829a0353a 5 * you may not use this file except in compliance with the License.
tushki7 0:60d829a0353a 6 * You may obtain a copy of the License at
tushki7 0:60d829a0353a 7 *
tushki7 0:60d829a0353a 8 * http://www.apache.org/licenses/LICENSE-2.0
tushki7 0:60d829a0353a 9 *
tushki7 0:60d829a0353a 10 * Unless required by applicable law or agreed to in writing, software
tushki7 0:60d829a0353a 11 * distributed under the License is distributed on an "AS IS" BASIS,
tushki7 0:60d829a0353a 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
tushki7 0:60d829a0353a 13 * See the License for the specific language governing permissions and
tushki7 0:60d829a0353a 14 * limitations under the License.
tushki7 0:60d829a0353a 15 */
tushki7 0:60d829a0353a 16 #ifndef MBED_CALLCHAIN_H
tushki7 0:60d829a0353a 17 #define MBED_CALLCHAIN_H
tushki7 0:60d829a0353a 18
tushki7 0:60d829a0353a 19 #include "FunctionPointer.h"
tushki7 0:60d829a0353a 20 #include <string.h>
tushki7 0:60d829a0353a 21
tushki7 0:60d829a0353a 22 namespace mbed {
tushki7 0:60d829a0353a 23
tushki7 0:60d829a0353a 24 /** Group one or more functions in an instance of a CallChain, then call them in
tushki7 0:60d829a0353a 25 * sequence using CallChain::call(). Used mostly by the interrupt chaining code,
tushki7 0:60d829a0353a 26 * but can be used for other purposes.
tushki7 0:60d829a0353a 27 *
tushki7 0:60d829a0353a 28 * Example:
tushki7 0:60d829a0353a 29 * @code
tushki7 0:60d829a0353a 30 * #include "mbed.h"
tushki7 0:60d829a0353a 31 *
tushki7 0:60d829a0353a 32 * CallChain chain;
tushki7 0:60d829a0353a 33 *
tushki7 0:60d829a0353a 34 * void first(void) {
tushki7 0:60d829a0353a 35 * printf("'first' function.\n");
tushki7 0:60d829a0353a 36 * }
tushki7 0:60d829a0353a 37 *
tushki7 0:60d829a0353a 38 * void second(void) {
tushki7 0:60d829a0353a 39 * printf("'second' function.\n");
tushki7 0:60d829a0353a 40 * }
tushki7 0:60d829a0353a 41 *
tushki7 0:60d829a0353a 42 * class Test {
tushki7 0:60d829a0353a 43 * public:
tushki7 0:60d829a0353a 44 * void f(void) {
tushki7 0:60d829a0353a 45 * printf("A::f (class member).\n");
tushki7 0:60d829a0353a 46 * }
tushki7 0:60d829a0353a 47 * };
tushki7 0:60d829a0353a 48 *
tushki7 0:60d829a0353a 49 * int main() {
tushki7 0:60d829a0353a 50 * Test test;
tushki7 0:60d829a0353a 51 *
tushki7 0:60d829a0353a 52 * chain.add(second);
tushki7 0:60d829a0353a 53 * chain.add_front(first);
tushki7 0:60d829a0353a 54 * chain.add(&test, &Test::f);
tushki7 0:60d829a0353a 55 * chain.call();
tushki7 0:60d829a0353a 56 * }
tushki7 0:60d829a0353a 57 * @endcode
tushki7 0:60d829a0353a 58 */
tushki7 0:60d829a0353a 59
tushki7 0:60d829a0353a 60 typedef FunctionPointer* pFunctionPointer_t;
tushki7 0:60d829a0353a 61
tushki7 0:60d829a0353a 62 class CallChain {
tushki7 0:60d829a0353a 63 public:
tushki7 0:60d829a0353a 64 /** Create an empty chain
tushki7 0:60d829a0353a 65 *
tushki7 0:60d829a0353a 66 * @param size (optional) Initial size of the chain
tushki7 0:60d829a0353a 67 */
tushki7 0:60d829a0353a 68 CallChain(int size = 4);
tushki7 0:60d829a0353a 69 virtual ~CallChain();
tushki7 0:60d829a0353a 70
tushki7 0:60d829a0353a 71 /** Add a function at the end of the chain
tushki7 0:60d829a0353a 72 *
tushki7 0:60d829a0353a 73 * @param function A pointer to a void function
tushki7 0:60d829a0353a 74 *
tushki7 0:60d829a0353a 75 * @returns
tushki7 0:60d829a0353a 76 * The function object created for 'function'
tushki7 0:60d829a0353a 77 */
tushki7 0:60d829a0353a 78 pFunctionPointer_t add(void (*function)(void));
tushki7 0:60d829a0353a 79
tushki7 0:60d829a0353a 80 /** Add a function at the end of the chain
tushki7 0:60d829a0353a 81 *
tushki7 0:60d829a0353a 82 * @param tptr pointer to the object to call the member function on
tushki7 0:60d829a0353a 83 * @param mptr pointer to the member function to be called
tushki7 0:60d829a0353a 84 *
tushki7 0:60d829a0353a 85 * @returns
tushki7 0:60d829a0353a 86 * The function object created for 'tptr' and 'mptr'
tushki7 0:60d829a0353a 87 */
tushki7 0:60d829a0353a 88 template<typename T>
tushki7 0:60d829a0353a 89 pFunctionPointer_t add(T *tptr, void (T::*mptr)(void)) {
tushki7 0:60d829a0353a 90 return common_add(new FunctionPointer(tptr, mptr));
tushki7 0:60d829a0353a 91 }
tushki7 0:60d829a0353a 92
tushki7 0:60d829a0353a 93 /** Add a function at the beginning of the chain
tushki7 0:60d829a0353a 94 *
tushki7 0:60d829a0353a 95 * @param function A pointer to a void function
tushki7 0:60d829a0353a 96 *
tushki7 0:60d829a0353a 97 * @returns
tushki7 0:60d829a0353a 98 * The function object created for 'function'
tushki7 0:60d829a0353a 99 */
tushki7 0:60d829a0353a 100 pFunctionPointer_t add_front(void (*function)(void));
tushki7 0:60d829a0353a 101
tushki7 0:60d829a0353a 102 /** Add a function at the beginning of the chain
tushki7 0:60d829a0353a 103 *
tushki7 0:60d829a0353a 104 * @param tptr pointer to the object to call the member function on
tushki7 0:60d829a0353a 105 * @param mptr pointer to the member function to be called
tushki7 0:60d829a0353a 106 *
tushki7 0:60d829a0353a 107 * @returns
tushki7 0:60d829a0353a 108 * The function object created for 'tptr' and 'mptr'
tushki7 0:60d829a0353a 109 */
tushki7 0:60d829a0353a 110 template<typename T>
tushki7 0:60d829a0353a 111 pFunctionPointer_t add_front(T *tptr, void (T::*mptr)(void)) {
tushki7 0:60d829a0353a 112 return common_add_front(new FunctionPointer(tptr, mptr));
tushki7 0:60d829a0353a 113 }
tushki7 0:60d829a0353a 114
tushki7 0:60d829a0353a 115 /** Get the number of functions in the chain
tushki7 0:60d829a0353a 116 */
tushki7 0:60d829a0353a 117 int size() const;
tushki7 0:60d829a0353a 118
tushki7 0:60d829a0353a 119 /** Get a function object from the chain
tushki7 0:60d829a0353a 120 *
tushki7 0:60d829a0353a 121 * @param i function object index
tushki7 0:60d829a0353a 122 *
tushki7 0:60d829a0353a 123 * @returns
tushki7 0:60d829a0353a 124 * The function object at position 'i' in the chain
tushki7 0:60d829a0353a 125 */
tushki7 0:60d829a0353a 126 pFunctionPointer_t get(int i) const;
tushki7 0:60d829a0353a 127
tushki7 0:60d829a0353a 128 /** Look for a function object in the call chain
tushki7 0:60d829a0353a 129 *
tushki7 0:60d829a0353a 130 * @param f the function object to search
tushki7 0:60d829a0353a 131 *
tushki7 0:60d829a0353a 132 * @returns
tushki7 0:60d829a0353a 133 * The index of the function object if found, -1 otherwise.
tushki7 0:60d829a0353a 134 */
tushki7 0:60d829a0353a 135 int find(pFunctionPointer_t f) const;
tushki7 0:60d829a0353a 136
tushki7 0:60d829a0353a 137 /** Clear the call chain (remove all functions in the chain).
tushki7 0:60d829a0353a 138 */
tushki7 0:60d829a0353a 139 void clear();
tushki7 0:60d829a0353a 140
tushki7 0:60d829a0353a 141 /** Remove a function object from the chain
tushki7 0:60d829a0353a 142 *
tushki7 0:60d829a0353a 143 * @arg f the function object to remove
tushki7 0:60d829a0353a 144 *
tushki7 0:60d829a0353a 145 * @returns
tushki7 0:60d829a0353a 146 * true if the function object was found and removed, false otherwise.
tushki7 0:60d829a0353a 147 */
tushki7 0:60d829a0353a 148 bool remove(pFunctionPointer_t f);
tushki7 0:60d829a0353a 149
tushki7 0:60d829a0353a 150 /** Call all the functions in the chain in sequence
tushki7 0:60d829a0353a 151 */
tushki7 0:60d829a0353a 152 void call();
tushki7 0:60d829a0353a 153
tushki7 0:60d829a0353a 154 #ifdef MBED_OPERATORS
tushki7 0:60d829a0353a 155 void operator ()(void) {
tushki7 0:60d829a0353a 156 call();
tushki7 0:60d829a0353a 157 }
tushki7 0:60d829a0353a 158 pFunctionPointer_t operator [](int i) const {
tushki7 0:60d829a0353a 159 return get(i);
tushki7 0:60d829a0353a 160 }
tushki7 0:60d829a0353a 161 #endif
tushki7 0:60d829a0353a 162
tushki7 0:60d829a0353a 163 private:
tushki7 0:60d829a0353a 164 void _check_size();
tushki7 0:60d829a0353a 165 pFunctionPointer_t common_add(pFunctionPointer_t pf);
tushki7 0:60d829a0353a 166 pFunctionPointer_t common_add_front(pFunctionPointer_t pf);
tushki7 0:60d829a0353a 167
tushki7 0:60d829a0353a 168 pFunctionPointer_t* _chain;
tushki7 0:60d829a0353a 169 int _size;
tushki7 0:60d829a0353a 170 int _elements;
tushki7 0:60d829a0353a 171
tushki7 0:60d829a0353a 172 /* disallow copy constructor and assignment operators */
tushki7 0:60d829a0353a 173 private:
tushki7 0:60d829a0353a 174 CallChain(const CallChain&);
tushki7 0:60d829a0353a 175 CallChain & operator = (const CallChain&);
tushki7 0:60d829a0353a 176 };
tushki7 0:60d829a0353a 177
tushki7 0:60d829a0353a 178 } // namespace mbed
tushki7 0:60d829a0353a 179
tushki7 0:60d829a0353a 180 #endif
tushki7 0:60d829a0353a 181