John Alexander / X_NUCLEO_53L3A2

Dependencies:   VL53L3CX

Dependents:   J_53L3_shield_single_polling_Mb515

Committer:
johnAlexander
Date:
Tue Nov 03 15:09:55 2020 +0000
Revision:
5:6020b7ced569
Parent:
0:293607457a02
Remove NoShield classes.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
charlesmn 0:293607457a02 1 /**
charlesmn 0:293607457a02 2 ******************************************************************************
charlesmn 0:293607457a02 3 * @file Display.h
charlesmn 0:293607457a02 4 * @author AST / EST
charlesmn 0:293607457a02 5 * @version V0.0.1
charlesmn 0:293607457a02 6 * @date 14-April-2015
charlesmn 0:293607457a02 7 * @brief Header file for display
charlesmn 0:293607457a02 8 ******************************************************************************
charlesmn 0:293607457a02 9 * @attention
charlesmn 0:293607457a02 10 *
charlesmn 0:293607457a02 11 * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
charlesmn 0:293607457a02 12 *
charlesmn 0:293607457a02 13 * Redistribution and use in source and binary forms, with or without modification,
charlesmn 0:293607457a02 14 * are permitted provided that the following conditions are met:
charlesmn 0:293607457a02 15 * 1. Redistributions of source code must retain the above copyright notice,
charlesmn 0:293607457a02 16 * this list of conditions and the following disclaimer.
charlesmn 0:293607457a02 17 * 2. Redistributions in binary form must reproduce the above copyright notice,
charlesmn 0:293607457a02 18 * this list of conditions and the following disclaimer in the documentation
charlesmn 0:293607457a02 19 * and/or other materials provided with the distribution.
charlesmn 0:293607457a02 20 * 3. Neither the name of STMicroelectronics nor the names of its contributors
charlesmn 0:293607457a02 21 * may be used to endorse or promote products derived from this software
charlesmn 0:293607457a02 22 * without specific prior written permission.
charlesmn 0:293607457a02 23 *
charlesmn 0:293607457a02 24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
charlesmn 0:293607457a02 25 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
charlesmn 0:293607457a02 26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
charlesmn 0:293607457a02 27 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
charlesmn 0:293607457a02 28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
charlesmn 0:293607457a02 29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
charlesmn 0:293607457a02 30 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
charlesmn 0:293607457a02 31 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
charlesmn 0:293607457a02 32 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
charlesmn 0:293607457a02 33 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
charlesmn 0:293607457a02 34 *
charlesmn 0:293607457a02 35 ******************************************************************************
charlesmn 0:293607457a02 36 */
charlesmn 0:293607457a02 37
charlesmn 0:293607457a02 38 #ifndef __DISPLAY_H
charlesmn 0:293607457a02 39 #define __DISPLAY_H
charlesmn 0:293607457a02 40
charlesmn 0:293607457a02 41 /* Includes ------------------------------------------------------------------*/
charlesmn 0:293607457a02 42 #include "mbed.h"
charlesmn 0:293607457a02 43 #include "Stmpe1600.h"
charlesmn 0:293607457a02 44 #include "DevI2C.h"
charlesmn 0:293607457a02 45
charlesmn 0:293607457a02 46 #ifdef __cplusplus
charlesmn 0:293607457a02 47 extern "C" {
charlesmn 0:293607457a02 48 #endif
charlesmn 0:293607457a02 49
charlesmn 0:293607457a02 50 /**
charlesmn 0:293607457a02 51 * GPIO monitor pin state register
charlesmn 0:293607457a02 52 * 16 bit register LSB at lowest offset (little endian)
charlesmn 0:293607457a02 53 */
charlesmn 0:293607457a02 54 #define GPMR 0x10
charlesmn 0:293607457a02 55 /**
charlesmn 0:293607457a02 56 * STMPE1600 GPIO set pin state register
charlesmn 0:293607457a02 57 * 16 bit register LSB at lowest offset (little endian)
charlesmn 0:293607457a02 58 */
charlesmn 0:293607457a02 59 #define GPSR 0x12
charlesmn 0:293607457a02 60 /**
charlesmn 0:293607457a02 61 * STMPE1600 GPIO set pin direction register
charlesmn 0:293607457a02 62 * 16 bit register LSB at lowest offset
charlesmn 0:293607457a02 63 */
charlesmn 0:293607457a02 64 #define GPDR 0x14
charlesmn 0:293607457a02 65
charlesmn 0:293607457a02 66
charlesmn 0:293607457a02 67 /**
charlesmn 0:293607457a02 68 * cache the full set of expanded GPIO values to avoid i2c reading
charlesmn 0:293607457a02 69 */
charlesmn 0:293607457a02 70 static union CurIOVal_u {
charlesmn 0:293607457a02 71 uint8_t bytes[4]; /*!< 4 bytes array i/o view */
charlesmn 0:293607457a02 72 uint32_t u32; /*!< single dword i/o view */
charlesmn 0:293607457a02 73 }
charlesmn 0:293607457a02 74 /** cache the extended IO values */
charlesmn 0:293607457a02 75 cur_io_val;
charlesmn 0:293607457a02 76
charlesmn 0:293607457a02 77 /**
charlesmn 0:293607457a02 78 * lookup table for digit to bit position
charlesmn 0:293607457a02 79 */
charlesmn 0:293607457a02 80 static int display_bit_posn[4] = {0, 7, 16, 16 + 7};
charlesmn 0:293607457a02 81
charlesmn 0:293607457a02 82 /**
charlesmn 0:293607457a02 83 * @defgroup XNUCLEO53L0A1_7Segment 7 segment display
charlesmn 0:293607457a02 84 *
charlesmn 0:293607457a02 85 * macro use for human readable segment building
charlesmn 0:293607457a02 86 * @code
charlesmn 0:293607457a02 87 * --s0--
charlesmn 0:293607457a02 88 * s s
charlesmn 0:293607457a02 89 * 5 1
charlesmn 0:293607457a02 90 * --s6--
charlesmn 0:293607457a02 91 * s s
charlesmn 0:293607457a02 92 * 4 2
charlesmn 0:293607457a02 93 * --s3-- . s7 (dp)
charlesmn 0:293607457a02 94 * @endcode
charlesmn 0:293607457a02 95 *
charlesmn 0:293607457a02 96 * @{
charlesmn 0:293607457a02 97 */
charlesmn 0:293607457a02 98 /** decimal point bit mapping* */
charlesmn 0:293607457a02 99 #define DP (1 << 7)
charlesmn 0:293607457a02 100
charlesmn 0:293607457a02 101 /** sgement s0 bit mapping*/
charlesmn 0:293607457a02 102 #define S0 (1 << 3)
charlesmn 0:293607457a02 103 /** sgement s1 bit mapping*/
charlesmn 0:293607457a02 104 #define S1 (1 << 5)
charlesmn 0:293607457a02 105 /** sgement s2 bit mapping*/
charlesmn 0:293607457a02 106 #define S2 (1 << 6)
charlesmn 0:293607457a02 107 /** sgement s3 bit mapping*/
charlesmn 0:293607457a02 108 #define S3 (1 << 4)
charlesmn 0:293607457a02 109 /** sgement s4 bit mapping*/
charlesmn 0:293607457a02 110 #define S4 (1 << 0)
charlesmn 0:293607457a02 111 /** sgement s5 bit mapping*/
charlesmn 0:293607457a02 112 #define S5 (1 << 1)
charlesmn 0:293607457a02 113 /** sgement s6 bit mapping*/
charlesmn 0:293607457a02 114 #define S6 (1 << 2)
charlesmn 0:293607457a02 115
charlesmn 0:293607457a02 116 /**
charlesmn 0:293607457a02 117 * build a character by defining the non lighted segment (not one and no DP)
charlesmn 0:293607457a02 118 *
charlesmn 0:293607457a02 119 * @param ... literal sum and or combine of any macro to define any segment #S0 .. #S6
charlesmn 0:293607457a02 120 *
charlesmn 0:293607457a02 121 * example '9' is all segment on but S4
charlesmn 0:293607457a02 122 * @code
charlesmn 0:293607457a02 123 * ['9']= NOT_7_NO_DP(S4),
charlesmn 0:293607457a02 124 * @endcode
charlesmn 0:293607457a02 125 */
charlesmn 0:293607457a02 126 #define NOT_7_NO_DP( ... ) (uint8_t) ~( __VA_ARGS__ + DP )
charlesmn 0:293607457a02 127
charlesmn 0:293607457a02 128 /**
charlesmn 0:293607457a02 129 * Ascii to 7 segment lookup table
charlesmn 0:293607457a02 130 *
charlesmn 0:293607457a02 131 * Most common character are supported and follow http://www.twyman.org.uk/Fonts/
charlesmn 0:293607457a02 132 * few extra special \@ ^~ ... etc are present for specific demo purpose
charlesmn 0:293607457a02 133 */
charlesmn 0:293607457a02 134 #ifndef __cpluplus
charlesmn 0:293607457a02 135 /* refer to http://www.twyman.org.uk/Fonts/ */
charlesmn 0:293607457a02 136 static const uint8_t ascii_to_display_lut[256] = {
charlesmn 0:293607457a02 137 0, 0, 0, 0, 0, 0, 0, 0,
charlesmn 0:293607457a02 138 0, 0, 0, 0, 0, 0, 0, 0,
charlesmn 0:293607457a02 139 0, 0, 0, 0, 0, 0, 0, 0,
charlesmn 0:293607457a02 140 0, 0, 0, 0, 0, 0, 0, 0,
charlesmn 0:293607457a02 141 [32] = 0,
charlesmn 0:293607457a02 142 0, 0, 0, 0, 0, 0, 0, 0,
charlesmn 0:293607457a02 143 0,
charlesmn 0:293607457a02 144 [42] = NOT_7_NO_DP(),
charlesmn 0:293607457a02 145 0, 0,
charlesmn 0:293607457a02 146 [45] = S6,
charlesmn 0:293607457a02 147 0, 0,
charlesmn 0:293607457a02 148 [48] = NOT_7_NO_DP(S6),
charlesmn 0:293607457a02 149 [49] = S1 + S2,
charlesmn 0:293607457a02 150 [50] = S0 + S1 + S6 + S4 + S3,
charlesmn 0:293607457a02 151 [51] = NOT_7_NO_DP(S4 + S5),
charlesmn 0:293607457a02 152 [52] = S5 + S1 + S6 + S2,
charlesmn 0:293607457a02 153 [53] = NOT_7_NO_DP(S1 + S4),
charlesmn 0:293607457a02 154 [54] = NOT_7_NO_DP(S1),
charlesmn 0:293607457a02 155 [55] = S0 + S1 + S2,
charlesmn 0:293607457a02 156 [56] = NOT_7_NO_DP(0),
charlesmn 0:293607457a02 157 [57] = NOT_7_NO_DP(S4),
charlesmn 0:293607457a02 158 0, 0, 0,
charlesmn 0:293607457a02 159 [61] = S3 + S6,
charlesmn 0:293607457a02 160 0,
charlesmn 0:293607457a02 161 [63] = NOT_7_NO_DP(S5 + S3 + S2),
charlesmn 0:293607457a02 162 [64] = S0 + S3,
charlesmn 0:293607457a02 163 [65] = NOT_7_NO_DP(S3),
charlesmn 0:293607457a02 164 [66] = NOT_7_NO_DP(S0 + S1), /* as b */
charlesmn 0:293607457a02 165 [67] = S0 + S3 + S4 + S5, // same as [
charlesmn 0:293607457a02 166 [68] = S0 + S3 + S4 + S5, // same as [ DUMMY
charlesmn 0:293607457a02 167 [69] = NOT_7_NO_DP(S1 + S2),
charlesmn 0:293607457a02 168 [70] = S6 + S5 + S4 + S0,
charlesmn 0:293607457a02 169 [71] = NOT_7_NO_DP(S4), /* same as 9 */
charlesmn 0:293607457a02 170 [72] = NOT_7_NO_DP(S0 + S3),
charlesmn 0:293607457a02 171 [73] = S1 + S2,
charlesmn 0:293607457a02 172 [74] = S1 + S2 + S3 + S4,
charlesmn 0:293607457a02 173 [75] = NOT_7_NO_DP(S0 + S3), /* same as H */
charlesmn 0:293607457a02 174 [76] = S3 + S4 + S5,
charlesmn 0:293607457a02 175 [77] = S0 + S4 + S2, /* same as m*/
charlesmn 0:293607457a02 176 [78] = S2 + S4 + S6, /* same as n*/
charlesmn 0:293607457a02 177 [79] = NOT_7_NO_DP(S6),
charlesmn 0:293607457a02 178 [80] = S0 + S1 + S2 + S5 + S6, // sames as 'q'
charlesmn 0:293607457a02 179 [81] = NOT_7_NO_DP(S3 + S2),
charlesmn 0:293607457a02 180 [82] = S4 + S6,
charlesmn 0:293607457a02 181 [83] = NOT_7_NO_DP(S1 + S4), /* sasme as 5 */
charlesmn 0:293607457a02 182 [84] = NOT_7_NO_DP(S0 + S1 + S2), /* sasme as t */
charlesmn 0:293607457a02 183 [85] = NOT_7_NO_DP(S6 + S0),
charlesmn 0:293607457a02 184 [86] = S4 + S3 + S2, // is u but u use U
charlesmn 0:293607457a02 185 [87] = S1 + S3 + S5,
charlesmn 0:293607457a02 186 [88] = NOT_7_NO_DP(S0 + S3), // similar to H
charlesmn 0:293607457a02 187 [89] = NOT_7_NO_DP(S0 + S4),
charlesmn 0:293607457a02 188 [90] = S0 + S1 + S6 + S4 + S3, // same as 2
charlesmn 0:293607457a02 189 [91] = S0 + S3 + S4 + S5,
charlesmn 0:293607457a02 190 0,
charlesmn 0:293607457a02 191 [93] = S0 + S3 + S2 + S1,
charlesmn 0:293607457a02 192 [94] = S0, /* use as top bar */
charlesmn 0:293607457a02 193 [95] = S3,
charlesmn 0:293607457a02 194 0,
charlesmn 0:293607457a02 195 [97] = S2 + S3 + S4 + S6,
charlesmn 0:293607457a02 196 [98] = NOT_7_NO_DP(S0 + S1),
charlesmn 0:293607457a02 197 [99] = S6 + S4 + S3,
charlesmn 0:293607457a02 198 [100] = NOT_7_NO_DP(S0 + S5),
charlesmn 0:293607457a02 199 [101] = NOT_7_NO_DP(S2),
charlesmn 0:293607457a02 200 [102] = S6 + S5 + S4 + S0, /* same as F */
charlesmn 0:293607457a02 201 [103] = NOT_7_NO_DP(S4), /* same as 9 */
charlesmn 0:293607457a02 202 [104] = S6 + S5 + S4 + S2,
charlesmn 0:293607457a02 203 [105] = S4,
charlesmn 0:293607457a02 204 [106] = S1 + S2 + S3 + S4,
charlesmn 0:293607457a02 205 [107] = S6 + S5 + S4 + S2, /* a h */
charlesmn 0:293607457a02 206 [108] = S3 + S4,
charlesmn 0:293607457a02 207 [109] = S0 + S4 + S2, /* same as */
charlesmn 0:293607457a02 208 [110] = S2 + S4 + S6,
charlesmn 0:293607457a02 209 [111] = S6 + S4 + S3 + S2,
charlesmn 0:293607457a02 210 [112] = NOT_7_NO_DP(S3 + S2), // same as P
charlesmn 0:293607457a02 211 [113] = S0 + S1 + S2 + S5 + S6,
charlesmn 0:293607457a02 212 [114] = S4 + S6,
charlesmn 0:293607457a02 213 [115] = NOT_7_NO_DP(S1 + S4),
charlesmn 0:293607457a02 214 [116] = NOT_7_NO_DP(S0 + S1 + S2),
charlesmn 0:293607457a02 215 [117] = S4 + S3 + S2 + S5 + S1, // U
charlesmn 0:293607457a02 216 [118] = S4 + S3 + S2, // is u but u use U
charlesmn 0:293607457a02 217 [119] = S1 + S3 + S5,
charlesmn 0:293607457a02 218 [120] = NOT_7_NO_DP(S0 + S3), // similar to H
charlesmn 0:293607457a02 219 [121] = NOT_7_NO_DP(S0 + S4),
charlesmn 0:293607457a02 220 [122] = S0 + S1 + S6 + S4 + S3, // same as 2
charlesmn 0:293607457a02 221 0, 0, 0,
charlesmn 0:293607457a02 222 [126] = S0 + S3 + S6 /* 3 h bar */
charlesmn 0:293607457a02 223 };
charlesmn 0:293607457a02 224 #else
charlesmn 0:293607457a02 225 /* refer to http://www.twyman.org.uk/Fonts/ */
charlesmn 0:293607457a02 226 static const uint8_t ascii_to_display_lut[256] = {
charlesmn 0:293607457a02 227 [' '] = 0,
charlesmn 0:293607457a02 228 ['-'] = S6,
charlesmn 0:293607457a02 229 ['_'] = S3,
charlesmn 0:293607457a02 230 ['='] = S3 + S6,
charlesmn 0:293607457a02 231 ['~'] = S0 + S3 + S6, /* 3 h bar */
charlesmn 0:293607457a02 232 ['^'] = S0, /* use as top bar */
charlesmn 0:293607457a02 233
charlesmn 0:293607457a02 234 ['?'] = NOT_7_NO_DP(S5 + S3 + S2),
charlesmn 0:293607457a02 235 ['*'] = NOT_7_NO_DP(),
charlesmn 0:293607457a02 236 ['['] = S0 + S3 + S4 + S5,
charlesmn 0:293607457a02 237 [']'] = S0 + S3 + S2 + S1,
charlesmn 0:293607457a02 238 ['@'] = S0 + S3,
charlesmn 0:293607457a02 239
charlesmn 0:293607457a02 240 ['0'] = NOT_7_NO_DP(S6),
charlesmn 0:293607457a02 241 ['1'] = S1 + S2,
charlesmn 0:293607457a02 242 ['2'] = S0 + S1 + S6 + S4 + S3,
charlesmn 0:293607457a02 243 ['3'] = NOT_7_NO_DP(S4 + S5),
charlesmn 0:293607457a02 244 ['4'] = S5 + S1 + S6 + S2,
charlesmn 0:293607457a02 245 ['5'] = NOT_7_NO_DP(S1 + S4),
charlesmn 0:293607457a02 246 ['6'] = NOT_7_NO_DP(S1),
charlesmn 0:293607457a02 247 ['7'] = S0 + S1 + S2,
charlesmn 0:293607457a02 248 ['8'] = NOT_7_NO_DP(0),
charlesmn 0:293607457a02 249 ['9'] = NOT_7_NO_DP(S4),
charlesmn 0:293607457a02 250
charlesmn 0:293607457a02 251 ['a'] = S2 + S3 + S4 + S6,
charlesmn 0:293607457a02 252 ['b'] = NOT_7_NO_DP(S0 + S1),
charlesmn 0:293607457a02 253 ['c'] = S6 + S4 + S3,
charlesmn 0:293607457a02 254 ['d'] = NOT_7_NO_DP(S0 + S5),
charlesmn 0:293607457a02 255 ['e'] = NOT_7_NO_DP(S2),
charlesmn 0:293607457a02 256 ['f'] = S6 + S5 + S4 + S0, /* same as F */
charlesmn 0:293607457a02 257 ['g'] = NOT_7_NO_DP(S4), /* same as 9 */
charlesmn 0:293607457a02 258 ['h'] = S6 + S5 + S4 + S2,
charlesmn 0:293607457a02 259 ['i'] = S4,
charlesmn 0:293607457a02 260 ['j'] = S1 + S2 + S3 + S4,
charlesmn 0:293607457a02 261 ['k'] = S6 + S5 + S4 + S2, /* a h */
charlesmn 0:293607457a02 262 ['l'] = S3 + S4,
charlesmn 0:293607457a02 263 ['m'] = S0 + S4 + S2, /* same as */
charlesmn 0:293607457a02 264 ['n'] = S2 + S4 + S6,
charlesmn 0:293607457a02 265 ['o'] = S6 + S4 + S3 + S2,
charlesmn 0:293607457a02 266 ['p'] = NOT_7_NO_DP(S3 + S2), // same as P
charlesmn 0:293607457a02 267 ['q'] = S0 + S1 + S2 + S5 + S6,
charlesmn 0:293607457a02 268 ['r'] = S4 + S6,
charlesmn 0:293607457a02 269 ['s'] = NOT_7_NO_DP(S1 + S4),
charlesmn 0:293607457a02 270 ['t'] = NOT_7_NO_DP(S0 + S1 + S2),
charlesmn 0:293607457a02 271 ['u'] = S4 + S3 + S2 + S5 + S1, // U
charlesmn 0:293607457a02 272 ['v'] = S4 + S3 + S2, // is u but u use U
charlesmn 0:293607457a02 273 ['w'] = S1 + S3 + S5,
charlesmn 0:293607457a02 274 ['x'] = NOT_7_NO_DP(S0 + S3), // similar to H
charlesmn 0:293607457a02 275 ['y'] = NOT_7_NO_DP(S0 + S4),
charlesmn 0:293607457a02 276 ['z'] = S0 + S1 + S6 + S4 + S3, // same as 2
charlesmn 0:293607457a02 277
charlesmn 0:293607457a02 278 ['A'] = NOT_7_NO_DP(S3),
charlesmn 0:293607457a02 279 ['B'] = NOT_7_NO_DP(S0 + S1), /* as b */
charlesmn 0:293607457a02 280 ['C'] = S0 + S3 + S4 + S5, // same as [
charlesmn 0:293607457a02 281 ['E'] = NOT_7_NO_DP(S1 + S2),
charlesmn 0:293607457a02 282 ['F'] = S6 + S5 + S4 + S0,
charlesmn 0:293607457a02 283 ['G'] = NOT_7_NO_DP(S4), /* same as 9 */
charlesmn 0:293607457a02 284 ['H'] = NOT_7_NO_DP(S0 + S3),
charlesmn 0:293607457a02 285 ['I'] = S1 + S2,
charlesmn 0:293607457a02 286 ['J'] = S1 + S2 + S3 + S4,
charlesmn 0:293607457a02 287 ['K'] = NOT_7_NO_DP(S0 + S3), /* same as H */
charlesmn 0:293607457a02 288 ['L'] = S3 + S4 + S5,
charlesmn 0:293607457a02 289 ['M'] = S0 + S4 + S2, /* same as m*/
charlesmn 0:293607457a02 290 ['N'] = S2 + S4 + S6, /* same as n*/
charlesmn 0:293607457a02 291 ['O'] = NOT_7_NO_DP(S6),
charlesmn 0:293607457a02 292 ['P'] = S0 + S1 + S2 + S5 + S6, // sames as 'q'
charlesmn 0:293607457a02 293 ['Q'] = NOT_7_NO_DP(S3 + S2),
charlesmn 0:293607457a02 294 ['R'] = S4 + S6,
charlesmn 0:293607457a02 295 ['S'] = NOT_7_NO_DP(S1 + S4), /* sasme as 5 */
charlesmn 0:293607457a02 296 ['T'] = NOT_7_NO_DP(S0 + S1 + S2), /* sasme as t */
charlesmn 0:293607457a02 297 ['U'] = NOT_7_NO_DP(S6 + S0),
charlesmn 0:293607457a02 298 ['V'] = S4 + S3 + S2, // is u but u use U
charlesmn 0:293607457a02 299 ['W'] = S1 + S3 + S5,
charlesmn 0:293607457a02 300 ['X'] = NOT_7_NO_DP(S0 + S3), // similar to H
charlesmn 0:293607457a02 301 ['Y'] = NOT_7_NO_DP(S0 + S4),
charlesmn 0:293607457a02 302 ['Z'] = S0 + S1 + S6 + S4 + S3 // same as 2
charlesmn 0:293607457a02 303 };
charlesmn 0:293607457a02 304 #endif
charlesmn 0:293607457a02 305
charlesmn 0:293607457a02 306
charlesmn 0:293607457a02 307 #undef S0
charlesmn 0:293607457a02 308 #undef S1
charlesmn 0:293607457a02 309 #undef S2
charlesmn 0:293607457a02 310 #undef S3
charlesmn 0:293607457a02 311 #undef S4
charlesmn 0:293607457a02 312 #undef S5
charlesmn 0:293607457a02 313 #undef S6
charlesmn 0:293607457a02 314 #undef DP
charlesmn 0:293607457a02 315
charlesmn 0:293607457a02 316 /** @} */
charlesmn 0:293607457a02 317
charlesmn 0:293607457a02 318 //#define DISPLAY_DELAY 1 // in mSec
charlesmn 0:293607457a02 319
charlesmn 0:293607457a02 320 /* Classes -------------------------------------------------------------------*/
charlesmn 0:293607457a02 321 /** Class representing Display
charlesmn 0:293607457a02 322 */
charlesmn 0:293607457a02 323
charlesmn 0:293607457a02 324 class Display
charlesmn 0:293607457a02 325 {
charlesmn 0:293607457a02 326 private:
charlesmn 0:293607457a02 327 Stmpe1600 *stmpe1600_exp0;
charlesmn 0:293607457a02 328 Stmpe1600 *stmpe1600_exp1;
charlesmn 0:293607457a02 329 public:
charlesmn 0:293607457a02 330 /** Constructor
charlesmn 0:293607457a02 331 * @param[in] &stmpe_1600 device handler to be used for display control
charlesmn 0:293607457a02 332 */
charlesmn 0:293607457a02 333 //<<<<<<< local
charlesmn 0:293607457a02 334 Display(Stmpe1600 *stmpe_1600_exp0, Stmpe1600 *stmpe_1600_exp1) : stmpe1600_exp0(stmpe_1600_exp0),
charlesmn 0:293607457a02 335 stmpe1600_exp1(stmpe_1600_exp1)
charlesmn 0:293607457a02 336 //=======
charlesmn 0:293607457a02 337 // Display(Stmpe1600 &stmpe_1600_exp0, Stmpe1600 &stmpe_1600_exp1) : stmpe1600_exp0(&stmpe_1600_exp0),
charlesmn 0:293607457a02 338 // stmpe1600_exp1(&stmpe_1600_exp1)
charlesmn 0:293607457a02 339 //>>>>>>> other
charlesmn 0:293607457a02 340 {
charlesmn 0:293607457a02 341 uint16_t expander_data;
charlesmn 0:293607457a02 342
charlesmn 0:293607457a02 343 // detect the extenders
charlesmn 0:293607457a02 344 stmpe1600_exp0->read_16bit_reg(0x00, &expander_data);
charlesmn 0:293607457a02 345 // if (ExpanderData != 0x1600) {/* log - failed to find expander exp0 */ }
charlesmn 0:293607457a02 346 stmpe1600_exp1->read_16bit_reg(0x00, &expander_data);
charlesmn 0:293607457a02 347 // if (ExpanderData != 0x1600) {/* log - failed to find expander exp1 */ }
charlesmn 0:293607457a02 348
charlesmn 0:293607457a02 349 // configure all necessary GPIO pins as outputs
charlesmn 0:293607457a02 350 expander_data = 0xFFFF;
charlesmn 0:293607457a02 351 stmpe1600_exp0->write_16bit_reg(GPDR, &expander_data);
charlesmn 0:293607457a02 352 expander_data = 0xBFFF; // leave bit 14 as an input, for the pushbutton, PB1.
charlesmn 0:293607457a02 353 stmpe1600_exp1->write_16bit_reg(GPDR, &expander_data);
charlesmn 0:293607457a02 354
charlesmn 0:293607457a02 355 // shut down all segment and all device
charlesmn 0:293607457a02 356 expander_data = 0x7F + (0x7F << 7);
charlesmn 0:293607457a02 357 stmpe1600_exp0->write_16bit_reg(GPSR, &expander_data);
charlesmn 0:293607457a02 358 stmpe1600_exp1->write_16bit_reg(GPSR, &expander_data);
charlesmn 0:293607457a02 359 }
charlesmn 0:293607457a02 360
charlesmn 0:293607457a02 361 /*** Interface Methods ***/
charlesmn 0:293607457a02 362 /**
charlesmn 0:293607457a02 363 * @brief Print the string on display
charlesmn 0:293607457a02 364 * @param[in] String to be printed
charlesmn 0:293607457a02 365 * @param[in] String lenght [min 1, max 4]
charlesmn 0:293607457a02 366 * @return void
charlesmn 0:293607457a02 367 */
charlesmn 0:293607457a02 368 void display_string(const char *str)
charlesmn 0:293607457a02 369 {
charlesmn 0:293607457a02 370 uint16_t expander_data;
charlesmn 0:293607457a02 371 uint32_t segments;
charlesmn 0:293607457a02 372 int bit_posn;
charlesmn 0:293607457a02 373 int i;
charlesmn 0:293607457a02 374
charlesmn 0:293607457a02 375 for (i = 0; (i < 4 && str[i] != 0); i++) {
charlesmn 0:293607457a02 376 segments = (uint32_t) ascii_to_display_lut[(uint8_t) str[i]];
charlesmn 0:293607457a02 377 segments = (~segments) & 0x7F;
charlesmn 0:293607457a02 378 bit_posn = display_bit_posn[i];
charlesmn 0:293607457a02 379 cur_io_val.u32 &= ~(0x7F << bit_posn);
charlesmn 0:293607457a02 380 cur_io_val.u32 |= segments << bit_posn;
charlesmn 0:293607457a02 381 }
charlesmn 0:293607457a02 382 /* clear unused digit */
charlesmn 0:293607457a02 383 for (; i < 4; i++) {
charlesmn 0:293607457a02 384 bit_posn = display_bit_posn[i];
charlesmn 0:293607457a02 385 cur_io_val.u32 |= 0x7F << bit_posn;
charlesmn 0:293607457a02 386 }
charlesmn 0:293607457a02 387
charlesmn 0:293607457a02 388 // stmpe1600_exp0.write16bitReg(GPSR, (uint16_t *)&CurIOVal.bytes[0]);
charlesmn 0:293607457a02 389 // stmpe1600_exp1.write16bitReg(GPSR, (uint16_t *)&CurIOVal.bytes[2]);
charlesmn 0:293607457a02 390
charlesmn 0:293607457a02 391 // ordered low-byte/high-byte!
charlesmn 0:293607457a02 392 cur_io_val.bytes[1] |= 0xC0; // ensure highest bits are high, as these are xshutdown pins for left & right sensors!
charlesmn 0:293607457a02 393 expander_data = (cur_io_val.bytes[1] << 8) + cur_io_val.bytes[0];
charlesmn 0:293607457a02 394 stmpe1600_exp0->write_16bit_reg(GPSR, &expander_data);
charlesmn 0:293607457a02 395 cur_io_val.bytes[3] |= 0x80; // ensure highest bit is high, as this is xshutdown pin on central sensor!
charlesmn 0:293607457a02 396 expander_data = (cur_io_val.bytes[3] << 8) + cur_io_val.bytes[2];
charlesmn 0:293607457a02 397 stmpe1600_exp1->write_16bit_reg(GPSR, &expander_data);
charlesmn 0:293607457a02 398
charlesmn 0:293607457a02 399 }
charlesmn 0:293607457a02 400
charlesmn 0:293607457a02 401 void clear_display(void)
charlesmn 0:293607457a02 402 {
charlesmn 0:293607457a02 403 uint16_t expander_data;
charlesmn 0:293607457a02 404
charlesmn 0:293607457a02 405 expander_data = 0x7F + (0x7F << 7);
charlesmn 0:293607457a02 406 stmpe1600_exp0->write_16bit_reg(GPSR, &expander_data);
charlesmn 0:293607457a02 407 stmpe1600_exp1->write_16bit_reg(GPSR, &expander_data);
charlesmn 0:293607457a02 408 }
charlesmn 0:293607457a02 409
charlesmn 0:293607457a02 410 };
charlesmn 0:293607457a02 411
charlesmn 0:293607457a02 412 #ifdef __cplusplus
charlesmn 0:293607457a02 413 }
charlesmn 0:293607457a02 414 #endif
charlesmn 0:293607457a02 415 #endif // __DISPLAY_H