ST Expansion SW Team / X_NUCLEO_6180

Dependencies:   Vl6180

Dependents:   VL6180_MB2_1sensor_singleshot_poll VL6180_MB5_1sensor_singleshot_wait VL6180_MB2_4sensors_interrupts VL6180_MB515_4sensors_interrupts ... more

Committer:
charlesmn
Date:
Tue Nov 10 16:10:34 2020 +0000
Revision:
3:862286610dfd
Parent:
0:b39eeb155799
Used the correct version of RangeSensor.h which allows the program to build. We want the RangeSensor.h that includes get_distance().

Who changed what in which revision?

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