PT6311 VFD driver lib. Initial version, supports VFDEM2 DVD player display.

Dependents:   mbed_PT6311

Committer:
wim
Date:
Wed Jan 20 19:05:43 2016 +0000
Revision:
0:43499fc489c6
Initial version, VFDEM2.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
wim 0:43499fc489c6 1 /* mbed PT6311 Library, for Princeton PT6311 VFD controller
wim 0:43499fc489c6 2 * Copyright (c) 2016, v01: WH, Initial version for VFDEM2
wim 0:43499fc489c6 3 *
wim 0:43499fc489c6 4 * Permission is hereby granted, free of charge, to any person obtaining a copy
wim 0:43499fc489c6 5 * of this software and associated documentation files (the "Software"), to deal
wim 0:43499fc489c6 6 * in the Software without restriction, including without limitation the rights
wim 0:43499fc489c6 7 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
wim 0:43499fc489c6 8 * copies of the Software, and to permit persons to whom the Software is
wim 0:43499fc489c6 9 * furnished to do so, subject to the following conditions:
wim 0:43499fc489c6 10 *
wim 0:43499fc489c6 11 * The above copyright notice and this permission notice shall be included in
wim 0:43499fc489c6 12 * all copies or substantial portions of the Software.
wim 0:43499fc489c6 13 *
wim 0:43499fc489c6 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
wim 0:43499fc489c6 15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
wim 0:43499fc489c6 16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
wim 0:43499fc489c6 17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
wim 0:43499fc489c6 18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
wim 0:43499fc489c6 19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
wim 0:43499fc489c6 20 * THE SOFTWARE.
wim 0:43499fc489c6 21 */
wim 0:43499fc489c6 22
wim 0:43499fc489c6 23 #ifndef PT6311_H
wim 0:43499fc489c6 24 #define PT6311_H
wim 0:43499fc489c6 25
wim 0:43499fc489c6 26 // Select one of the testboards for Princeton PT6311 VFD controller
wim 0:43499fc489c6 27 #include "PT6311_Config.h"
wim 0:43499fc489c6 28
wim 0:43499fc489c6 29 /** An interface for driving Princeton PT6311 VFD controller
wim 0:43499fc489c6 30 *
wim 0:43499fc489c6 31 * @code
wim 0:43499fc489c6 32 *
wim 0:43499fc489c6 33 * #if (PT6311_TEST == 1)
wim 0:43499fc489c6 34 * // Direct driving of PT6311 Test
wim 0:43499fc489c6 35 *
wim 0:43499fc489c6 36 * #include "mbed.h"
wim 0:43499fc489c6 37 * #include "PT6311.h"
wim 0:43499fc489c6 38 *
wim 0:43499fc489c6 39 * DisplayData_t size is 24 bytes (8 Grids @ 20 Segments) ... 48 bytes (16 Grids @ 12 Segments)
wim 0:43499fc489c6 40 * DisplayData_t size default is 48 bytes (16 Grids @ 12 Segments)
wim 0:43499fc489c6 41 * PT6311::DisplayData_t all_str = {0xFF,0x0F,0x00 0xFF,0x0F,0x00, 0xFF,0x0F,0x00, 0xFF,0x0F,0x00, 0xFF,0x0F,0x00, 0xFF,0x0F,0x00, 0xFF,0x0F,0x00, 0xFF,0x0F,0x00,
wim 0:43499fc489c6 42 * 0xFF,0x0F,0x00 0xFF,0x0F,0x00, 0xFF,0x0F,0x00, 0xFF,0x0F,0x00, 0xFF,0x0F,0x00, 0xFF,0x0F,0x00, 0xFF,0x0F,0x00, 0xFF,0x0F,0x00};
wim 0:43499fc489c6 43 *
wim 0:43499fc489c6 44 * // KeyData_t size is 6 bytes
wim 0:43499fc489c6 45 * PT6311::KeyData_t keydata;
wim 0:43499fc489c6 46 *
wim 0:43499fc489c6 47 * // PT6311 declaration, Default setting 16 Grids @ 12 Segments
wim 0:43499fc489c6 48 * PT6311 PT6311(p5,p6,p7, p8);
wim 0:43499fc489c6 49 *
wim 0:43499fc489c6 50 * int main() {
wim 0:43499fc489c6 51 * PT6311.cls();
wim 0:43499fc489c6 52 * PT6311.writeData(all_str);
wim 0:43499fc489c6 53 * wait(4);
wim 0:43499fc489c6 54 * PT6311.setBrightness(PT6311_BRT0);
wim 0:43499fc489c6 55 * wait(1);
wim 0:43499fc489c6 56 * PT6311.setBrightness(PT6311_BRT3);
wim 0:43499fc489c6 57 *
wim 0:43499fc489c6 58 * while (1) {
wim 0:43499fc489c6 59 * // Check and read keydata
wim 0:43499fc489c6 60 * if (PT6311.getKeys(&keydata)) {
wim 0:43499fc489c6 61 * pc.printf("Keydata 0..5 = 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x\r\n", keydata[0], keydata[1], keydata[2], keydata[3], keydata[4], keydata[5]);
wim 0:43499fc489c6 62 *
wim 0:43499fc489c6 63 * if (keydata[0] == 0x10) { //sw2
wim 0:43499fc489c6 64 * PT6311.cls();
wim 0:43499fc489c6 65 * wait(1);
wim 0:43499fc489c6 66 * PT6311.writeData(all_str);
wim 0:43499fc489c6 67 * }
wim 0:43499fc489c6 68 * }
wim 0:43499fc489c6 69 * }
wim 0:43499fc489c6 70 * }
wim 0:43499fc489c6 71 * #endif
wim 0:43499fc489c6 72 *
wim 0:43499fc489c6 73 * @endcode
wim 0:43499fc489c6 74 */
wim 0:43499fc489c6 75
wim 0:43499fc489c6 76 //PT6311 Display and Keymatrix data
wim 0:43499fc489c6 77 #define PT6311_MAX_NR_GRIDS 16
wim 0:43499fc489c6 78 #define PT6311_BYTES_PER_GRID 3
wim 0:43499fc489c6 79 //Significant bits Keymatrix data
wim 0:43499fc489c6 80 #define PT6311_KEY_MSK 0xFF
wim 0:43499fc489c6 81
wim 0:43499fc489c6 82 //Memory size in bytes for Display and Keymatrix
wim 0:43499fc489c6 83 #define PT6311_DISPLAY_MEM (PT6311_MAX_NR_GRIDS * PT6311_BYTES_PER_GRID)
wim 0:43499fc489c6 84 #define PT6311_KEY_MEM 6
wim 0:43499fc489c6 85
wim 0:43499fc489c6 86 //Reserved bits for commands
wim 0:43499fc489c6 87 #define PT6311_CMD_MSK 0xC0
wim 0:43499fc489c6 88
wim 0:43499fc489c6 89 //Mode setting command
wim 0:43499fc489c6 90 #define PT6311_MODE_SET_CMD 0x00
wim 0:43499fc489c6 91 #define PT6311_GR8_SEG20 0x00
wim 0:43499fc489c6 92 #define PT6311_GR9_SEG19 0x08
wim 0:43499fc489c6 93 #define PT6311_GR10_SEG18 0x09
wim 0:43499fc489c6 94 #define PT6311_GR11_SEG17 0x0A
wim 0:43499fc489c6 95 #define PT6311_GR12_SEG16 0x0B
wim 0:43499fc489c6 96 #define PT6311_GR13_SEG15 0x0C
wim 0:43499fc489c6 97 #define PT6311_GR14_SEG14 0x0D
wim 0:43499fc489c6 98 #define PT6311_GR15_SEG13 0x0E
wim 0:43499fc489c6 99 #define PT6311_GR16_SEG12 0x0F //default
wim 0:43499fc489c6 100
wim 0:43499fc489c6 101 //Data setting commands
wim 0:43499fc489c6 102 #define PT6311_DATA_SET_CMD 0x40
wim 0:43499fc489c6 103 #define PT6311_DATA_WR 0x00
wim 0:43499fc489c6 104 #define PT6311_LED_WR 0x01
wim 0:43499fc489c6 105 #define PT6311_KEY_RD 0x02
wim 0:43499fc489c6 106 #define PT6311_SW_RD 0x03
wim 0:43499fc489c6 107 #define PT6311_ADDR_INC 0x00
wim 0:43499fc489c6 108 #define PT6311_ADDR_FIXED 0x04
wim 0:43499fc489c6 109 #define PT6311_MODE_NORM 0x00
wim 0:43499fc489c6 110 #define PT6311_MODE_TEST 0x08
wim 0:43499fc489c6 111
wim 0:43499fc489c6 112 //LED settings data
wim 0:43499fc489c6 113 #define PT6311_LED_MSK 0x1F
wim 0:43499fc489c6 114 #define PT6311_LED1 0x01
wim 0:43499fc489c6 115 #define PT6311_LED2 0x02
wim 0:43499fc489c6 116 #define PT6311_LED3 0x04
wim 0:43499fc489c6 117 #define PT6311_LED4 0x08
wim 0:43499fc489c6 118 #define PT6311_LED5 0x10
wim 0:43499fc489c6 119
wim 0:43499fc489c6 120 //Switch settings data
wim 0:43499fc489c6 121 #define PT6311_SW_MSK 0x0F
wim 0:43499fc489c6 122 #define PT6311_SW1 0x01
wim 0:43499fc489c6 123 #define PT6311_SW2 0x02
wim 0:43499fc489c6 124 #define PT6311_SW3 0x04
wim 0:43499fc489c6 125 #define PT6311_SW4 0x08
wim 0:43499fc489c6 126
wim 0:43499fc489c6 127 //Address setting commands
wim 0:43499fc489c6 128 #define PT6311_ADDR_SET_CMD 0xC0
wim 0:43499fc489c6 129 #define PT6311_ADDR_MSK 0x3F
wim 0:43499fc489c6 130
wim 0:43499fc489c6 131 //Display control commands
wim 0:43499fc489c6 132 #define PT6311_DSP_CTRL_CMD 0x80
wim 0:43499fc489c6 133 #define PT6311_BRT_MSK 0x07
wim 0:43499fc489c6 134 #define PT6311_BRT0 0x00 //Pulsewidth 1/16, Default
wim 0:43499fc489c6 135 #define PT6311_BRT1 0x01
wim 0:43499fc489c6 136 #define PT6311_BRT2 0x02
wim 0:43499fc489c6 137 #define PT6311_BRT3 0x03
wim 0:43499fc489c6 138 #define PT6311_BRT4 0x04
wim 0:43499fc489c6 139 #define PT6311_BRT5 0x05
wim 0:43499fc489c6 140 #define PT6311_BRT6 0x06
wim 0:43499fc489c6 141 #define PT6311_BRT7 0x07 //Pulsewidth 14/16
wim 0:43499fc489c6 142
wim 0:43499fc489c6 143 #define PT6311_BRT_DEF PT6311_BRT3
wim 0:43499fc489c6 144
wim 0:43499fc489c6 145 #define PT6311_DSP_OFF 0x00 //Default
wim 0:43499fc489c6 146 #define PT6311_DSP_ON 0x08
wim 0:43499fc489c6 147
wim 0:43499fc489c6 148
wim 0:43499fc489c6 149 /** A class for driving Princeton PT6311 VFD controller
wim 0:43499fc489c6 150 *
wim 0:43499fc489c6 151 * @brief Supports 8 Grids of 20 Segments upto 16 Grids of 12 Segments. Also supports a scanned keyboard of upto 48 keys, 4 switches and 5 LEDs.
wim 0:43499fc489c6 152 * SPI bus interface device.
wim 0:43499fc489c6 153 */
wim 0:43499fc489c6 154 class PT6311 {
wim 0:43499fc489c6 155 public:
wim 0:43499fc489c6 156
wim 0:43499fc489c6 157 /** Enums for display mode */
wim 0:43499fc489c6 158 enum Mode {
wim 0:43499fc489c6 159 Grid8_Seg20 = PT6311_GR8_SEG20,
wim 0:43499fc489c6 160 Grid9_Seg19 = PT6311_GR9_SEG19,
wim 0:43499fc489c6 161 Grid10_Seg18 = PT6311_GR10_SEG18,
wim 0:43499fc489c6 162 Grid11_Seg17 = PT6311_GR11_SEG17,
wim 0:43499fc489c6 163 Grid12_Seg16 = PT6311_GR12_SEG16,
wim 0:43499fc489c6 164 Grid13_Seg15 = PT6311_GR13_SEG15,
wim 0:43499fc489c6 165 Grid14_Seg14 = PT6311_GR14_SEG14,
wim 0:43499fc489c6 166 Grid15_Seg13 = PT6311_GR15_SEG13,
wim 0:43499fc489c6 167 Grid16_Seg12 = PT6311_GR16_SEG12
wim 0:43499fc489c6 168 };
wim 0:43499fc489c6 169
wim 0:43499fc489c6 170 /** Datatypes for display and keymatrix data */
wim 0:43499fc489c6 171 typedef char DisplayData_t[PT6311_DISPLAY_MEM];
wim 0:43499fc489c6 172 typedef char KeyData_t[PT6311_KEY_MEM];
wim 0:43499fc489c6 173
wim 0:43499fc489c6 174 /** Constructor for class for driving Princeton PT6311 VFD controller
wim 0:43499fc489c6 175 *
wim 0:43499fc489c6 176 * @brief Supports 8 Grids of 20 Segments upto 16 Grids of 12 Segments. Also supports a scanned keyboard of upto 48 keys, 4 switches and 5 LEDs.
wim 0:43499fc489c6 177 * SPI bus interface device.
wim 0:43499fc489c6 178 * @param PinName mosi, miso, sclk, cs SPI bus pins
wim 0:43499fc489c6 179 * @param Mode selects either number of Grids and Segments (default 16 Grids, 12 Segments)
wim 0:43499fc489c6 180 */
wim 0:43499fc489c6 181 PT6311(PinName mosi, PinName miso, PinName sclk, PinName cs, Mode mode=Grid16_Seg12);
wim 0:43499fc489c6 182
wim 0:43499fc489c6 183 /** Clear the screen and locate to 0
wim 0:43499fc489c6 184 */
wim 0:43499fc489c6 185 void cls();
wim 0:43499fc489c6 186
wim 0:43499fc489c6 187 /** Write databyte to PT6311
wim 0:43499fc489c6 188 * @param int address display memory location to write byte
wim 0:43499fc489c6 189 * @param char data byte written at given address
wim 0:43499fc489c6 190 * @return none
wim 0:43499fc489c6 191 */
wim 0:43499fc489c6 192 void writeData(int address, char data);
wim 0:43499fc489c6 193
wim 0:43499fc489c6 194 /** Write Display datablock to PT6311
wim 0:43499fc489c6 195 * @param DisplayData_t data Array of PT6311_DISPLAY_MEM (=48) bytes for displaydata (starting at address 0)
wim 0:43499fc489c6 196 * @param length number bytes to write (valid range 0..PT6311_DISPLAY_MEM (=48), starting at address 0)
wim 0:43499fc489c6 197 * @return none
wim 0:43499fc489c6 198 */
wim 0:43499fc489c6 199 void writeData(DisplayData_t data, int length = PT6311_DISPLAY_MEM);
wim 0:43499fc489c6 200
wim 0:43499fc489c6 201
wim 0:43499fc489c6 202 /** Read keydata block from PT6311
wim 0:43499fc489c6 203 * @param *keydata Ptr to Array of PT6311_KEY_MEM (=6) bytes for keydata
wim 0:43499fc489c6 204 * @return bool keypress True when at least one key was pressed
wim 0:43499fc489c6 205 *
wim 0:43499fc489c6 206 * Note: Due to the hardware configuration the PT6311 key matrix scanner will detect multiple keys pressed at same time,
wim 0:43499fc489c6 207 * but this may result in some spurious keys also being set in keypress data array.
wim 0:43499fc489c6 208 * It may be best to ignore all keys in those situations. That option is implemented in this method depending on #define setting.
wim 0:43499fc489c6 209 */
wim 0:43499fc489c6 210 bool getKeys(KeyData_t *keydata);
wim 0:43499fc489c6 211
wim 0:43499fc489c6 212
wim 0:43499fc489c6 213 /** Read switches from PT6311
wim 0:43499fc489c6 214 *
wim 0:43499fc489c6 215 * @param none
wim 0:43499fc489c6 216 * @return char for switch data (4 least significant bits)
wim 0:43499fc489c6 217 *
wim 0:43499fc489c6 218 */
wim 0:43499fc489c6 219 char getSwitches();
wim 0:43499fc489c6 220
wim 0:43499fc489c6 221 /** Set LEDs
wim 0:43499fc489c6 222 *
wim 0:43499fc489c6 223 * @param char leds (5 least significant bits)
wim 0:43499fc489c6 224 * @return none
wim 0:43499fc489c6 225 */
wim 0:43499fc489c6 226 void setLED (char leds = 0);
wim 0:43499fc489c6 227
wim 0:43499fc489c6 228 /** Set Brightness
wim 0:43499fc489c6 229 *
wim 0:43499fc489c6 230 * @param char brightness (3 significant bits, valid range 0..7 (1/16 .. 14/16 dutycycle)
wim 0:43499fc489c6 231 * @return none
wim 0:43499fc489c6 232 */
wim 0:43499fc489c6 233 void setBrightness(char brightness = PT6311_BRT_DEF);
wim 0:43499fc489c6 234
wim 0:43499fc489c6 235 /** Set the Display mode On/off
wim 0:43499fc489c6 236 *
wim 0:43499fc489c6 237 * @param bool display mode
wim 0:43499fc489c6 238 */
wim 0:43499fc489c6 239 void setDisplay(bool on);
wim 0:43499fc489c6 240
wim 0:43499fc489c6 241 private:
wim 0:43499fc489c6 242 SPI _spi;
wim 0:43499fc489c6 243 DigitalOut _cs;
wim 0:43499fc489c6 244 Mode _mode;
wim 0:43499fc489c6 245 char _display;
wim 0:43499fc489c6 246 char _bright;
wim 0:43499fc489c6 247
wim 0:43499fc489c6 248 /** Init the SPI interface and the controller
wim 0:43499fc489c6 249 * @param none
wim 0:43499fc489c6 250 * @return none
wim 0:43499fc489c6 251 */
wim 0:43499fc489c6 252 void _init();
wim 0:43499fc489c6 253
wim 0:43499fc489c6 254 /** Helper to reverse all command or databits. The PT6311 expects LSB first, whereas SPI is MSB first
wim 0:43499fc489c6 255 * @param char data
wim 0:43499fc489c6 256 * @return bitreversed data
wim 0:43499fc489c6 257 */
wim 0:43499fc489c6 258 char _flip(char data);
wim 0:43499fc489c6 259
wim 0:43499fc489c6 260 /** Write command and parameter to PT6311
wim 0:43499fc489c6 261 * @param int cmd Command byte
wim 0:43499fc489c6 262 * &Param int data Parameters for command
wim 0:43499fc489c6 263 * @return none
wim 0:43499fc489c6 264 */
wim 0:43499fc489c6 265 void _writeCmd(int cmd, int data);
wim 0:43499fc489c6 266 };
wim 0:43499fc489c6 267
wim 0:43499fc489c6 268
wim 0:43499fc489c6 269
wim 0:43499fc489c6 270 #if (VFDEM2_TEST == 1)
wim 0:43499fc489c6 271 // Derived class for VFDEM2 front display unit
wim 0:43499fc489c6 272 // Grids 2-11 all display 14-Segment digits and several Icons.
wim 0:43499fc489c6 273 // Grid 1 and 12 display Icons.
wim 0:43499fc489c6 274
wim 0:43499fc489c6 275 //
wim 0:43499fc489c6 276 #include "Font_16Seg.h"
wim 0:43499fc489c6 277
wim 0:43499fc489c6 278 //VFDEM2 Display data
wim 0:43499fc489c6 279 #define VFDEM2_NR_GRIDS 12
wim 0:43499fc489c6 280 #define VFDEM2_NR_DIGITS 10
wim 0:43499fc489c6 281 #define VFDEM2_NR_UDC 8
wim 0:43499fc489c6 282
wim 0:43499fc489c6 283 //VFDEM2 Memory size in bytes for Display
wim 0:43499fc489c6 284 #define VFDEM2_DISPLAY_MEM (VFDEM2_NR_GRIDS * PT6311_BYTES_PER_GRID)
wim 0:43499fc489c6 285
wim 0:43499fc489c6 286
wim 0:43499fc489c6 287 /** Constructor for class for driving Princeton PT6311 VFD controller as used in VFDEM2
wim 0:43499fc489c6 288 *
wim 0:43499fc489c6 289 * @brief Supports 12 Grids of 16 Segments and Icons (10 digits of 14 segments plus some icons and another 2 Icon grids).
wim 0:43499fc489c6 290 * Also supports a scanned keyboard of 7 keys and 1 LED.
wim 0:43499fc489c6 291 *
wim 0:43499fc489c6 292 * @param PinName mosi, miso, sclk, cs SPI bus pins
wim 0:43499fc489c6 293 */
wim 0:43499fc489c6 294 class PT6311_VFDEM2 : public PT6311, public Stream {
wim 0:43499fc489c6 295 public:
wim 0:43499fc489c6 296
wim 0:43499fc489c6 297 /** Enums for Icons */
wim 0:43499fc489c6 298 // Grid encoded in 8 MSBs, Icon pattern encoded in 24 LSBs
wim 0:43499fc489c6 299 enum Icon {
wim 0:43499fc489c6 300 CIR = (1<<24) | S16_CIR,
wim 0:43499fc489c6 301 PIE_R = (1<<24) | S16_PIE_R,
wim 0:43499fc489c6 302 PIE_G = (1<<24) | S16_PIE_G,
wim 0:43499fc489c6 303 PIE_B = (1<<24) | S16_PIE_B,
wim 0:43499fc489c6 304 STP = (1<<24) | S16_STP,
wim 0:43499fc489c6 305 PSE = (1<<24) | S16_PSE,
wim 0:43499fc489c6 306 PLY = (1<<24) | S16_PLY,
wim 0:43499fc489c6 307 RR = (1<<24) | S16_RR,
wim 0:43499fc489c6 308 LL = (1<<24) | S16_LL,
wim 0:43499fc489c6 309 PCM = (1<<24) | S16_PCM,
wim 0:43499fc489c6 310 DTS = (1<<24) | S16_DTS,
wim 0:43499fc489c6 311 MIC = (1<<24) | S16_MIC,
wim 0:43499fc489c6 312 DLB = (1<<24) | S16_DLB,
wim 0:43499fc489c6 313
wim 0:43499fc489c6 314 REC = (2<<24) | S16_REC,
wim 0:43499fc489c6 315
wim 0:43499fc489c6 316 PRG = (3<<24) | S16_PRG,
wim 0:43499fc489c6 317 RND = (3<<24) | S16_RND,
wim 0:43499fc489c6 318
wim 0:43499fc489c6 319 DP8 = (4<<24) | S16_DP8,
wim 0:43499fc489c6 320 COL8 = (4<<24) | S16_COL8,
wim 0:43499fc489c6 321
wim 0:43499fc489c6 322 ANG = (5<<24) | S16_ANG,
wim 0:43499fc489c6 323 ZM = (5<<24) | S16_ZM,
wim 0:43499fc489c6 324
wim 0:43499fc489c6 325 PBC = (6<<24) | S16_PBC,
wim 0:43499fc489c6 326 COL6 = (6<<24) | S16_COL6,
wim 0:43499fc489c6 327
wim 0:43499fc489c6 328 MP3 = (12<<24) | S16_MP3,
wim 0:43499fc489c6 329 CDDA = (12<<24) | S16_CDDA,
wim 0:43499fc489c6 330 SS = (12<<24) | S16_SS,
wim 0:43499fc489c6 331 VCD = (12<<24) | S16_VCD,
wim 0:43499fc489c6 332 DVD = (12<<24) | S16_DVD,
wim 0:43499fc489c6 333 ARW = (12<<24) | S16_ARW,
wim 0:43499fc489c6 334 ONE = (12<<24) | S16_ONE,
wim 0:43499fc489c6 335 ALL = (12<<24) | S16_ALL,
wim 0:43499fc489c6 336 AA = (12<<24) | S16_AA,
wim 0:43499fc489c6 337 BB = (12<<24) | S16_BB,
wim 0:43499fc489c6 338 TTL = (12<<24) | S16_TTL,
wim 0:43499fc489c6 339 CHP = (12<<24) | S16_CHP
wim 0:43499fc489c6 340 };
wim 0:43499fc489c6 341
wim 0:43499fc489c6 342 typedef short UDCData_t[VFDEM2_NR_UDC];
wim 0:43499fc489c6 343
wim 0:43499fc489c6 344
wim 0:43499fc489c6 345 /** Constructor for class for driving Princeton PT6311 VFD controller as used in VFDEM2
wim 0:43499fc489c6 346 *
wim 0:43499fc489c6 347 * @brief Supports 12 Grids of 16 Segments and Icons (10 digits of 14 Segments plus some icons and another 2 Icon grids).
wim 0:43499fc489c6 348 * Also supports a scanned keyboard of 7 keys and 1 LED.
wim 0:43499fc489c6 349 *
wim 0:43499fc489c6 350 * @param PinName mosi, miso, sclk, cs SPI bus pins
wim 0:43499fc489c6 351 */
wim 0:43499fc489c6 352 PT6311_VFDEM2(PinName mosi, PinName miso, PinName sclk, PinName cs);
wim 0:43499fc489c6 353
wim 0:43499fc489c6 354 #if DOXYGEN_ONLY
wim 0:43499fc489c6 355 /** Write a character to the Display
wim 0:43499fc489c6 356 *
wim 0:43499fc489c6 357 * @param c The character to write to the display
wim 0:43499fc489c6 358 */
wim 0:43499fc489c6 359 int putc(int c);
wim 0:43499fc489c6 360
wim 0:43499fc489c6 361 /** Write a formatted string to the Display
wim 0:43499fc489c6 362 *
wim 0:43499fc489c6 363 * @param format A printf-style format string, followed by the
wim 0:43499fc489c6 364 * variables to use in formatting the string.
wim 0:43499fc489c6 365 */
wim 0:43499fc489c6 366 int printf(const char* format, ...);
wim 0:43499fc489c6 367 #endif
wim 0:43499fc489c6 368
wim 0:43499fc489c6 369 /** Locate cursor to a screen column
wim 0:43499fc489c6 370 *
wim 0:43499fc489c6 371 * @param column The horizontal position from the left, indexed from 0
wim 0:43499fc489c6 372 */
wim 0:43499fc489c6 373 void locate(int column);
wim 0:43499fc489c6 374
wim 0:43499fc489c6 375 /** Clear the screen and locate to 0
wim 0:43499fc489c6 376 * @param bool clrAll Clear Icons also (default = false)
wim 0:43499fc489c6 377 */
wim 0:43499fc489c6 378 void cls(bool clrAll = false);
wim 0:43499fc489c6 379
wim 0:43499fc489c6 380 /** Set Icon
wim 0:43499fc489c6 381 *
wim 0:43499fc489c6 382 * @param Icon icon Enums Icon has Grid position encoded in 8 MSBs, Icon pattern encoded in 16 LSBs
wim 0:43499fc489c6 383 * @return none
wim 0:43499fc489c6 384 */
wim 0:43499fc489c6 385 void setIcon(Icon icon);
wim 0:43499fc489c6 386
wim 0:43499fc489c6 387 /** Clr Icon
wim 0:43499fc489c6 388 *
wim 0:43499fc489c6 389 * @param Icon icon Enums Icon has Grid position encoded in 8 MSBs, Icon pattern encoded in 16 LSBs
wim 0:43499fc489c6 390 * @return none
wim 0:43499fc489c6 391 */
wim 0:43499fc489c6 392 void clrIcon(Icon icon);
wim 0:43499fc489c6 393
wim 0:43499fc489c6 394 /** Set User Defined Characters (UDC)
wim 0:43499fc489c6 395 *
wim 0:43499fc489c6 396 * @param unsigned char udc_idx The Index of the UDC (0..7)
wim 0:43499fc489c6 397 * @param int udc_data The bitpattern for the UDC (16 bits)
wim 0:43499fc489c6 398 */
wim 0:43499fc489c6 399 void setUDC(unsigned char udc_idx, int udc_data);
wim 0:43499fc489c6 400
wim 0:43499fc489c6 401
wim 0:43499fc489c6 402 /** Number of screen columns
wim 0:43499fc489c6 403 *
wim 0:43499fc489c6 404 * @param none
wim 0:43499fc489c6 405 * @return columns
wim 0:43499fc489c6 406 */
wim 0:43499fc489c6 407 int columns();
wim 0:43499fc489c6 408
wim 0:43499fc489c6 409 /** Write databyte to PT6311
wim 0:43499fc489c6 410 * @param int address display memory location to write byte
wim 0:43499fc489c6 411 * @param char data byte written at given address
wim 0:43499fc489c6 412 * @return none
wim 0:43499fc489c6 413 */
wim 0:43499fc489c6 414 void writeData(int address, char data){
wim 0:43499fc489c6 415 PT6311::writeData(address, data);
wim 0:43499fc489c6 416 }
wim 0:43499fc489c6 417
wim 0:43499fc489c6 418 /** Write Display datablock to PT6311
wim 0:43499fc489c6 419 * @param DisplayData_t data Array of PT6311_DISPLAY_MEM (=48) bytes for displaydata (starting at address 0)
wim 0:43499fc489c6 420 * @param length number bytes to write (valid range 0..(VFDEM2_NR_GRIDS * PT6311_BYTES_PER_GRID) == 36, starting at address 0)
wim 0:43499fc489c6 421 * @return none
wim 0:43499fc489c6 422 */
wim 0:43499fc489c6 423 void writeData(DisplayData_t data, int length = (VFDEM2_NR_GRIDS * PT6311_BYTES_PER_GRID)) {
wim 0:43499fc489c6 424 PT6311::writeData(data, length);
wim 0:43499fc489c6 425 }
wim 0:43499fc489c6 426
wim 0:43499fc489c6 427 protected:
wim 0:43499fc489c6 428 // Stream implementation functions
wim 0:43499fc489c6 429 virtual int _putc(int value);
wim 0:43499fc489c6 430 virtual int _getc();
wim 0:43499fc489c6 431
wim 0:43499fc489c6 432 private:
wim 0:43499fc489c6 433 int _column; // Current cursor location
wim 0:43499fc489c6 434 int _columns; // Max number of columns
wim 0:43499fc489c6 435
wim 0:43499fc489c6 436 DisplayData_t _displaybuffer; // Local mirror for all chars and icons
wim 0:43499fc489c6 437 UDCData_t _UDC_16S; // User Defined Character pattterns (UDC)
wim 0:43499fc489c6 438 };
wim 0:43499fc489c6 439 #endif
wim 0:43499fc489c6 440
wim 0:43499fc489c6 441 #endif