This module provides a simple API to the Maxim MAX7456 on-screen display chip

Committer:
AjK
Date:
Tue Nov 16 10:47:25 2010 +0000
Revision:
0:d7cd54ad4c3d
1.7

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AjK 0:d7cd54ad4c3d 1 /*
AjK 0:d7cd54ad4c3d 2 Copyright (c) 2010 Andy Kirkham
AjK 0:d7cd54ad4c3d 3
AjK 0:d7cd54ad4c3d 4 Permission is hereby granted, free of charge, to any person obtaining a copy
AjK 0:d7cd54ad4c3d 5 of this software and associated documentation files (the "Software"), to deal
AjK 0:d7cd54ad4c3d 6 in the Software without restriction, including without limitation the rights
AjK 0:d7cd54ad4c3d 7 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
AjK 0:d7cd54ad4c3d 8 copies of the Software, and to permit persons to whom the Software is
AjK 0:d7cd54ad4c3d 9 furnished to do so, subject to the following conditions:
AjK 0:d7cd54ad4c3d 10
AjK 0:d7cd54ad4c3d 11 The above copyright notice and this permission notice shall be included in
AjK 0:d7cd54ad4c3d 12 all copies or substantial portions of the Software.
AjK 0:d7cd54ad4c3d 13
AjK 0:d7cd54ad4c3d 14 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
AjK 0:d7cd54ad4c3d 15 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
AjK 0:d7cd54ad4c3d 16 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AjK 0:d7cd54ad4c3d 17 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
AjK 0:d7cd54ad4c3d 18 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
AjK 0:d7cd54ad4c3d 19 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
AjK 0:d7cd54ad4c3d 20 THE SOFTWARE.
AjK 0:d7cd54ad4c3d 21 */
AjK 0:d7cd54ad4c3d 22
AjK 0:d7cd54ad4c3d 23 #ifndef MODMAX7456_H
AjK 0:d7cd54ad4c3d 24 #define MODMAX7456_H
AjK 0:d7cd54ad4c3d 25
AjK 0:d7cd54ad4c3d 26 #include "mbed.h"
AjK 0:d7cd54ad4c3d 27
AjK 0:d7cd54ad4c3d 28 /** @defgroup MAX7456_API */
AjK 0:d7cd54ad4c3d 29 /** @defgroup MAX7456_REGISTER_API */
AjK 0:d7cd54ad4c3d 30
AjK 0:d7cd54ad4c3d 31 /** MAX7456 module
AjK 0:d7cd54ad4c3d 32 *
AjK 0:d7cd54ad4c3d 33 * @see http://mbed.org/cookbook/
AjK 0:d7cd54ad4c3d 34 * @see example1.cpp
AjK 0:d7cd54ad4c3d 35 *
AjK 0:d7cd54ad4c3d 36 * Example:
AjK 0:d7cd54ad4c3d 37 * @code
AjK 0:d7cd54ad4c3d 38 * #include "mbed.h"
AjK 0:d7cd54ad4c3d 39 * #include "MAX7456.h"
AjK 0:d7cd54ad4c3d 40 *
AjK 0:d7cd54ad4c3d 41 * DigitalOut led1(LED1);
AjK 0:d7cd54ad4c3d 42 *
AjK 0:d7cd54ad4c3d 43 * MAX7456 *max7456;
AjK 0:d7cd54ad4c3d 44 *
AjK 0:d7cd54ad4c3d 45 * int main() {
AjK 0:d7cd54ad4c3d 46 *
AjK 0:d7cd54ad4c3d 47 * max7456 = new MAX7456(p5, p6, p7, p8, p20, p15);
AjK 0:d7cd54ad4c3d 48 *
AjK 0:d7cd54ad4c3d 49 * max7456->stringxy(1, 1, "Hello World");
AjK 0:d7cd54ad4c3d 50 *
AjK 0:d7cd54ad4c3d 51 * while(1) {
AjK 0:d7cd54ad4c3d 52 * led1 = 1;
AjK 0:d7cd54ad4c3d 53 * wait(0.5);
AjK 0:d7cd54ad4c3d 54 * led1 = 0;
AjK 0:d7cd54ad4c3d 55 * wait(0.5);
AjK 0:d7cd54ad4c3d 56 * }
AjK 0:d7cd54ad4c3d 57 * }
AjK 0:d7cd54ad4c3d 58 * @endcode
AjK 0:d7cd54ad4c3d 59 */
AjK 0:d7cd54ad4c3d 60
AjK 0:d7cd54ad4c3d 61 class MAX7456
AjK 0:d7cd54ad4c3d 62 {
AjK 0:d7cd54ad4c3d 63 public:
AjK 0:d7cd54ad4c3d 64
AjK 0:d7cd54ad4c3d 65 //! MAX7456 register definitions
AjK 0:d7cd54ad4c3d 66 enum Registers {
AjK 0:d7cd54ad4c3d 67 VM0 = 0, VM1, HOS, VOS, DMM, DMAH, DMAL, DMDI, CMM, CMAH, CMAL, CMDI, OSDM,
AjK 0:d7cd54ad4c3d 68 OSDBL = 0x6C
AjK 0:d7cd54ad4c3d 69 };
AjK 0:d7cd54ad4c3d 70
AjK 0:d7cd54ad4c3d 71 //! MAX7456 Row brightness register definitions.
AjK 0:d7cd54ad4c3d 72 enum RowBrightnessReg {
AjK 0:d7cd54ad4c3d 73 RB0 = 16, RB1, RB2, RB3, RB4, RB5, RB6, RB7, RB8, RB9, RB10, RB11, RB12, RB13, RB14, RB15,
AjK 0:d7cd54ad4c3d 74 };
AjK 0:d7cd54ad4c3d 75
AjK 0:d7cd54ad4c3d 76 //! Character attributes.
AjK 0:d7cd54ad4c3d 77 enum Attributes {
AjK 0:d7cd54ad4c3d 78 //! Inverse background
AjK 0:d7cd54ad4c3d 79 Inverse = (1 << 5),
AjK 0:d7cd54ad4c3d 80 //! Character blinks
AjK 0:d7cd54ad4c3d 81 Blink = (1 << 6),
AjK 0:d7cd54ad4c3d 82 //! Use "local background"
AjK 0:d7cd54ad4c3d 83 LocalBG = (1 << 7)
AjK 0:d7cd54ad4c3d 84 };
AjK 0:d7cd54ad4c3d 85
AjK 0:d7cd54ad4c3d 86 //! Background brightness levels (see register VM1)
AjK 0:d7cd54ad4c3d 87 enum BGbrightness {
AjK 0:d7cd54ad4c3d 88 //! 0%
AjK 0:d7cd54ad4c3d 89 Percent_0 = (0 << 4),
AjK 0:d7cd54ad4c3d 90 //! 7%
AjK 0:d7cd54ad4c3d 91 Percent_7 = (1 << 4),
AjK 0:d7cd54ad4c3d 92 //! 14%
AjK 0:d7cd54ad4c3d 93 Percent_14 = (2 << 4),
AjK 0:d7cd54ad4c3d 94 //! 21%
AjK 0:d7cd54ad4c3d 95 Percent_21 = (3 << 4),
AjK 0:d7cd54ad4c3d 96 //! 28%
AjK 0:d7cd54ad4c3d 97 Percent_28 = (4 << 4),
AjK 0:d7cd54ad4c3d 98 //! 35%
AjK 0:d7cd54ad4c3d 99 Percent_35 = (5 << 4),
AjK 0:d7cd54ad4c3d 100 //! 42%
AjK 0:d7cd54ad4c3d 101 Percent_42 = (6 << 4),
AjK 0:d7cd54ad4c3d 102 //! 49%
AjK 0:d7cd54ad4c3d 103 Percent_49 = (7 << 4)
AjK 0:d7cd54ad4c3d 104 };
AjK 0:d7cd54ad4c3d 105
AjK 0:d7cd54ad4c3d 106 //! Character blink time.
AjK 0:d7cd54ad4c3d 107 enum BlinkTime {
AjK 0:d7cd54ad4c3d 108 //! 33milliseconds
AjK 0:d7cd54ad4c3d 109 ms_33 = (0 << 2),
AjK 0:d7cd54ad4c3d 110 //! 67milliseconds
AjK 0:d7cd54ad4c3d 111 ms_67 = (1 << 2),
AjK 0:d7cd54ad4c3d 112 //! 100milliseconds
AjK 0:d7cd54ad4c3d 113 ms_100 = (2 << 2),
AjK 0:d7cd54ad4c3d 114 //! 133milliseconds
AjK 0:d7cd54ad4c3d 115 ms_133 = (3 << 2)
AjK 0:d7cd54ad4c3d 116 };
AjK 0:d7cd54ad4c3d 117
AjK 0:d7cd54ad4c3d 118 // Blink Time duty cycle.
AjK 0:d7cd54ad4c3d 119 enum BlinkingDutyCycle {
AjK 0:d7cd54ad4c3d 120 //! 1:1 duty cycle
AjK 0:d7cd54ad4c3d 121 BT_BT = (0 << 0),
AjK 0:d7cd54ad4c3d 122 //! 1:2 duty cycle
AjK 0:d7cd54ad4c3d 123 BT_BT2 = (1 << 0),
AjK 0:d7cd54ad4c3d 124 //! 1:3 duty cycle
AjK 0:d7cd54ad4c3d 125 BT_BT3 = (2 << 0),
AjK 0:d7cd54ad4c3d 126 //! 3:1 duty cycle
AjK 0:d7cd54ad4c3d 127 BT3_BT = (3 << 0)
AjK 0:d7cd54ad4c3d 128 };
AjK 0:d7cd54ad4c3d 129
AjK 0:d7cd54ad4c3d 130 //! MAX7456 constructor.
AjK 0:d7cd54ad4c3d 131 /**
AjK 0:d7cd54ad4c3d 132 * The MAX7456 constructor is used to initialise the MAX7456 object.
AjK 0:d7cd54ad4c3d 133 *
AjK 0:d7cd54ad4c3d 134 * Example 1
AjK 0:d7cd54ad4c3d 135 * @code
AjK 0:d7cd54ad4c3d 136 * #include "mbed.h"
AjK 0:d7cd54ad4c3d 137 * #include "MAX7456.h"
AjK 0:d7cd54ad4c3d 138 *
AjK 0:d7cd54ad4c3d 139 * MAX7456 max(p5, p6, p7, NULL, p8, p20, p15);
AjK 0:d7cd54ad4c3d 140 *
AjK 0:d7cd54ad4c3d 141 * int main() {
AjK 0:d7cd54ad4c3d 142 *
AjK 0:d7cd54ad4c3d 143 * max.stringxy(1, 1, "Hello World");
AjK 0:d7cd54ad4c3d 144 *
AjK 0:d7cd54ad4c3d 145 * while(1);
AjK 0:d7cd54ad4c3d 146 * }
AjK 0:d7cd54ad4c3d 147 * @endcode
AjK 0:d7cd54ad4c3d 148 *
AjK 0:d7cd54ad4c3d 149 * Example 2
AjK 0:d7cd54ad4c3d 150 * @code
AjK 0:d7cd54ad4c3d 151 * #include "mbed.h"
AjK 0:d7cd54ad4c3d 152 * #include "MAX7456.h"
AjK 0:d7cd54ad4c3d 153 *
AjK 0:d7cd54ad4c3d 154 * int main() {
AjK 0:d7cd54ad4c3d 155 *
AjK 0:d7cd54ad4c3d 156 * MAX7456 max = new MAX7456(p5, p6, p7, NULL, p8, p20, p15);
AjK 0:d7cd54ad4c3d 157 *
AjK 0:d7cd54ad4c3d 158 * max->stringxy(1, 1, "Hello World");
AjK 0:d7cd54ad4c3d 159 *
AjK 0:d7cd54ad4c3d 160 * while(1);
AjK 0:d7cd54ad4c3d 161 * }
AjK 0:d7cd54ad4c3d 162 * @endcode
AjK 0:d7cd54ad4c3d 163 *
AjK 0:d7cd54ad4c3d 164 * @ingroup MAX7456_API
AjK 0:d7cd54ad4c3d 165 * @param miso PinName p5 or p11
AjK 0:d7cd54ad4c3d 166 * @param mosi PinName p6 or p12
AjK 0:d7cd54ad4c3d 167 * @param sclk PinName p7 pr p13
AjK 0:d7cd54ad4c3d 168 * @param name Optional const char * SSP object name
AjK 0:d7cd54ad4c3d 169 * @param cs PinName CS signal
AjK 0:d7cd54ad4c3d 170 * @param rst PinName RESET signal
AjK 0:d7cd54ad4c3d 171 * @param vsync PinName Vertical sync signal
AjK 0:d7cd54ad4c3d 172 */
AjK 0:d7cd54ad4c3d 173 MAX7456(PinName mosi, PinName miso, PinName sclk, const char *name, PinName cs, PinName rst, PinName vsync);
AjK 0:d7cd54ad4c3d 174
AjK 0:d7cd54ad4c3d 175 //! MAX7456 constructor.
AjK 0:d7cd54ad4c3d 176 /**
AjK 0:d7cd54ad4c3d 177 * The MAX7456 constructor is used to initialise the MAX7456 object.
AjK 0:d7cd54ad4c3d 178 *
AjK 0:d7cd54ad4c3d 179 * Example 1
AjK 0:d7cd54ad4c3d 180 * @code
AjK 0:d7cd54ad4c3d 181 * #include "mbed.h"
AjK 0:d7cd54ad4c3d 182 * #include "MAX7456.h"
AjK 0:d7cd54ad4c3d 183 *
AjK 0:d7cd54ad4c3d 184 * MAX7456 max(p5, p6, p7, p8, p20, p15);
AjK 0:d7cd54ad4c3d 185 *
AjK 0:d7cd54ad4c3d 186 * int main() {
AjK 0:d7cd54ad4c3d 187 *
AjK 0:d7cd54ad4c3d 188 * max.stringxy(1, 1, "Hello World");
AjK 0:d7cd54ad4c3d 189 *
AjK 0:d7cd54ad4c3d 190 * while(1);
AjK 0:d7cd54ad4c3d 191 * }
AjK 0:d7cd54ad4c3d 192 * @endcode
AjK 0:d7cd54ad4c3d 193 *
AjK 0:d7cd54ad4c3d 194 * Example 2
AjK 0:d7cd54ad4c3d 195 * @code
AjK 0:d7cd54ad4c3d 196 * #include "mbed.h"
AjK 0:d7cd54ad4c3d 197 * #include "MAX7456.h"
AjK 0:d7cd54ad4c3d 198 *
AjK 0:d7cd54ad4c3d 199 * int main() {
AjK 0:d7cd54ad4c3d 200 *
AjK 0:d7cd54ad4c3d 201 * MAX7456 max = new MAX7456(p5, p6, p7, p8, p20, p15);
AjK 0:d7cd54ad4c3d 202 *
AjK 0:d7cd54ad4c3d 203 * max->stringxy(1, 1, "Hello World");
AjK 0:d7cd54ad4c3d 204 *
AjK 0:d7cd54ad4c3d 205 * while(1);
AjK 0:d7cd54ad4c3d 206 * }
AjK 0:d7cd54ad4c3d 207 * @endcode
AjK 0:d7cd54ad4c3d 208 *
AjK 0:d7cd54ad4c3d 209 * @ingroup MAX7456_API
AjK 0:d7cd54ad4c3d 210 * @param miso PinName p5 or p11
AjK 0:d7cd54ad4c3d 211 * @param mosi PinName p6 or p12
AjK 0:d7cd54ad4c3d 212 * @param sclk PinName p7 pr p13
AjK 0:d7cd54ad4c3d 213 * @param cs PinName CS signal
AjK 0:d7cd54ad4c3d 214 * @param rst PinName RESET signal
AjK 0:d7cd54ad4c3d 215 * @param vsync PinName Vertical sync signal
AjK 0:d7cd54ad4c3d 216 */
AjK 0:d7cd54ad4c3d 217 MAX7456(PinName mosi, PinName miso, PinName sclk, PinName cs, PinName rst, PinName vsync);
AjK 0:d7cd54ad4c3d 218
AjK 0:d7cd54ad4c3d 219 ~MAX7456();
AjK 0:d7cd54ad4c3d 220
AjK 0:d7cd54ad4c3d 221 //! reset()
AjK 0:d7cd54ad4c3d 222 /**
AjK 0:d7cd54ad4c3d 223 * Resets the MAX7456 device.
AjK 0:d7cd54ad4c3d 224 *
AjK 0:d7cd54ad4c3d 225 * @ingroup MAX7456_API
AjK 0:d7cd54ad4c3d 226 */
AjK 0:d7cd54ad4c3d 227 void reset(void);
AjK 0:d7cd54ad4c3d 228
AjK 0:d7cd54ad4c3d 229 //! clear_display()
AjK 0:d7cd54ad4c3d 230 /**
AjK 0:d7cd54ad4c3d 231 * Cleasr the entire display area.
AjK 0:d7cd54ad4c3d 232 *
AjK 0:d7cd54ad4c3d 233 * @ingroup MAX7456_API
AjK 0:d7cd54ad4c3d 234 */
AjK 0:d7cd54ad4c3d 235 void clear_display(void);
AjK 0:d7cd54ad4c3d 236
AjK 0:d7cd54ad4c3d 237 //! cursor(x,y)
AjK 0:d7cd54ad4c3d 238 /**
AjK 0:d7cd54ad4c3d 239 * Moves the "cursor" to the screen X,Y position. Future writes to the
AjK 0:d7cd54ad4c3d 240 * screen ram will occur at this position.
AjK 0:d7cd54ad4c3d 241 *
AjK 0:d7cd54ad4c3d 242 * @ingroup MAX7456_API
AjK 0:d7cd54ad4c3d 243 * @param x The X position
AjK 0:d7cd54ad4c3d 244 * @param y The Y position
AjK 0:d7cd54ad4c3d 245 */
AjK 0:d7cd54ad4c3d 246 void cursor(int x, int y);
AjK 0:d7cd54ad4c3d 247
AjK 0:d7cd54ad4c3d 248 //! convert_string(*s)
AjK 0:d7cd54ad4c3d 249 /**
AjK 0:d7cd54ad4c3d 250 * Takes a pointer to an ascii string and converts it to chars that will
AjK 0:d7cd54ad4c3d 251 * display via teh MAX7456 character set. Note, the string is converted.
AjK 0:d7cd54ad4c3d 252 *
AjK 0:d7cd54ad4c3d 253 * @param s A char * pointer to the NULL terminated string to convert.
AjK 0:d7cd54ad4c3d 254 */
AjK 0:d7cd54ad4c3d 255 void convert_string(char *s);
AjK 0:d7cd54ad4c3d 256
AjK 0:d7cd54ad4c3d 257 //! string(*s)
AjK 0:d7cd54ad4c3d 258 /**
AjK 0:d7cd54ad4c3d 259 * Print the string pointed to by s at the current cursor position.
AjK 0:d7cd54ad4c3d 260 * The string should be an ASCII NULL terminated string.
AjK 0:d7cd54ad4c3d 261 *
AjK 0:d7cd54ad4c3d 262 * @ingroup MAX7456_API
AjK 0:d7cd54ad4c3d 263 * @param s A char * pointer to the NULL terminated string to print.
AjK 0:d7cd54ad4c3d 264 */
AjK 0:d7cd54ad4c3d 265 int string(char *s);
AjK 0:d7cd54ad4c3d 266
AjK 0:d7cd54ad4c3d 267 //! stringxy(x,y,s)
AjK 0:d7cd54ad4c3d 268 /**
AjK 0:d7cd54ad4c3d 269 * Print the string pointed to by s at the position supplied by x,y.
AjK 0:d7cd54ad4c3d 270 * The string should be an ASCII NULL terminated string.
AjK 0:d7cd54ad4c3d 271 *
AjK 0:d7cd54ad4c3d 272 * @ingroup MAX7456_API
AjK 0:d7cd54ad4c3d 273 * @param x The X position
AjK 0:d7cd54ad4c3d 274 * @param y The Y position
AjK 0:d7cd54ad4c3d 275 * @param s A char * pointer to the NULL terminated string to print.
AjK 0:d7cd54ad4c3d 276 * @return int The length of the string written.
AjK 0:d7cd54ad4c3d 277 */
AjK 0:d7cd54ad4c3d 278 int stringxy(int x, int y, char *s);
AjK 0:d7cd54ad4c3d 279
AjK 0:d7cd54ad4c3d 280 //! stringxy(x,y,s,a)
AjK 0:d7cd54ad4c3d 281 /**
AjK 0:d7cd54ad4c3d 282 * Print the string pointed to by s at the position supplied by x,y.
AjK 0:d7cd54ad4c3d 283 * The string should be an ASCII NULL terminated string.
AjK 0:d7cd54ad4c3d 284 *
AjK 0:d7cd54ad4c3d 285 * @ingroup MAX7456_API
AjK 0:d7cd54ad4c3d 286 * @param x The X position
AjK 0:d7cd54ad4c3d 287 * @param y The Y position
AjK 0:d7cd54ad4c3d 288 * @param s A char * pointer to the NULL terminated string to print.
AjK 0:d7cd54ad4c3d 289 * @param a An attribute byte to appply to the string.
AjK 0:d7cd54ad4c3d 290 * @return int The length of the string written.
AjK 0:d7cd54ad4c3d 291 */
AjK 0:d7cd54ad4c3d 292 int stringxy(int x, int y, char *s, uint8_t a);
AjK 0:d7cd54ad4c3d 293
AjK 0:d7cd54ad4c3d 294 //! stringxy(x,y,s,a)
AjK 0:d7cd54ad4c3d 295 /**
AjK 0:d7cd54ad4c3d 296 * Print the string pointed to by s at the position supplied by x,y.
AjK 0:d7cd54ad4c3d 297 * The string should be an ASCII NULL terminated string.
AjK 0:d7cd54ad4c3d 298 *
AjK 0:d7cd54ad4c3d 299 * @ingroup MAX7456_API
AjK 0:d7cd54ad4c3d 300 * @param x The X position
AjK 0:d7cd54ad4c3d 301 * @param y The Y position
AjK 0:d7cd54ad4c3d 302 * @param s A char * pointer to the NULL terminated string to print.
AjK 0:d7cd54ad4c3d 303 * @param a A char * pointer to the 30byte attribute string.
AjK 0:d7cd54ad4c3d 304 * @return int The length of the string written.
AjK 0:d7cd54ad4c3d 305 */
AjK 0:d7cd54ad4c3d 306 int stringxy(int x, int y, char *s, char *a);
AjK 0:d7cd54ad4c3d 307
AjK 0:d7cd54ad4c3d 308 //! stringxy(x,y,s,len)
AjK 0:d7cd54ad4c3d 309 /**
AjK 0:d7cd54ad4c3d 310 * Print the string pointed to by s at the position supplied by x,y.
AjK 0:d7cd54ad4c3d 311 * The string should be an ASCII terminated string.
AjK 0:d7cd54ad4c3d 312 * len determines the length of the string to print (not the term NULL).
AjK 0:d7cd54ad4c3d 313 *
AjK 0:d7cd54ad4c3d 314 * @ingroup MAX7456_API
AjK 0:d7cd54ad4c3d 315 * @param x The X position
AjK 0:d7cd54ad4c3d 316 * @param y The Y position
AjK 0:d7cd54ad4c3d 317 * @param s A char * pointer to the NULL terminated string to print.
AjK 0:d7cd54ad4c3d 318 * @param len The length of teh string to print.
AjK 0:d7cd54ad4c3d 319 */
AjK 0:d7cd54ad4c3d 320 void stringl(int x, int y, char *s, int len);
AjK 0:d7cd54ad4c3d 321
AjK 0:d7cd54ad4c3d 322 //! attribute_xyl(x,y,s,len)
AjK 0:d7cd54ad4c3d 323 /**
AjK 0:d7cd54ad4c3d 324 * Write the character attribute bytes at x,y
AjK 0:d7cd54ad4c3d 325 * Since attributes can be zero (NULL), the string length
AjK 0:d7cd54ad4c3d 326 * must be provided.
AjK 0:d7cd54ad4c3d 327 *
AjK 0:d7cd54ad4c3d 328 * @ingroup MAX7456_API
AjK 0:d7cd54ad4c3d 329 * @param x The X position
AjK 0:d7cd54ad4c3d 330 * @param y The Y position
AjK 0:d7cd54ad4c3d 331 * @param s A char * pointer to the NULL terminated string of attributes.
AjK 0:d7cd54ad4c3d 332 * @param len The length of the string of attributes.
AjK 0:d7cd54ad4c3d 333 */
AjK 0:d7cd54ad4c3d 334 void attributes_xyl(int x, int y, char *s, int len);
AjK 0:d7cd54ad4c3d 335
AjK 0:d7cd54ad4c3d 336 /**
AjK 0:d7cd54ad4c3d 337 * Set the background brightness
AjK 0:d7cd54ad4c3d 338 *
AjK 0:d7cd54ad4c3d 339 * @see BGbrightness
AjK 0:d7cd54ad4c3d 340 * @ingroup MAX7456_API
AjK 0:d7cd54ad4c3d 341 * @param i The brightness level
AjK 0:d7cd54ad4c3d 342 */
AjK 0:d7cd54ad4c3d 343 void backGround(BGbrightness i) { vm1((vm1() & ~(7 << 4)) | i); }
AjK 0:d7cd54ad4c3d 344
AjK 0:d7cd54ad4c3d 345 /**
AjK 0:d7cd54ad4c3d 346 * Set the character blink rate
AjK 0:d7cd54ad4c3d 347 *
AjK 0:d7cd54ad4c3d 348 * @see BlinkTime
AjK 0:d7cd54ad4c3d 349 * @see BlinkingDutyCycle
AjK 0:d7cd54ad4c3d 350 * @ingroup MAX7456_API
AjK 0:d7cd54ad4c3d 351 * @param bt The blink time
AjK 0:d7cd54ad4c3d 352 * @param dc The duty cycle
AjK 0:d7cd54ad4c3d 353 */
AjK 0:d7cd54ad4c3d 354 void blinkRate(BlinkTime bt, BlinkingDutyCycle dc) { vm1((vm1() & ~(0xf)) | (bt | dc)); }
AjK 0:d7cd54ad4c3d 355
AjK 0:d7cd54ad4c3d 356 //! read_char_map(address,data54)
AjK 0:d7cd54ad4c3d 357 /**
AjK 0:d7cd54ad4c3d 358 * Read the 54byte character map from MAX7456 ROM.
AjK 0:d7cd54ad4c3d 359 *
AjK 0:d7cd54ad4c3d 360 * @ingroup MAX7456_API
AjK 0:d7cd54ad4c3d 361 * @param address The uchar address to read from (which character)
AjK 0:d7cd54ad4c3d 362 * @param data54 A char * pointer to a buffer where to write to.
AjK 0:d7cd54ad4c3d 363 */
AjK 0:d7cd54ad4c3d 364 void read_char_map(unsigned char address, unsigned char *data54);
AjK 0:d7cd54ad4c3d 365
AjK 0:d7cd54ad4c3d 366 //! write_char_map(address,data54)
AjK 0:d7cd54ad4c3d 367 /**
AjK 0:d7cd54ad4c3d 368 * Write the 54byte character map to the MAX7456 ROM.
AjK 0:d7cd54ad4c3d 369 *
AjK 0:d7cd54ad4c3d 370 * @ingroup MAX7456_API
AjK 0:d7cd54ad4c3d 371 * @param address The uchar address to write to
AjK 0:d7cd54ad4c3d 372 * @param data54 A char * pointer to a buffer where to read from.
AjK 0:d7cd54ad4c3d 373 */
AjK 0:d7cd54ad4c3d 374 void write_char_map(unsigned char address, const unsigned char *data54);
AjK 0:d7cd54ad4c3d 375
AjK 0:d7cd54ad4c3d 376 //! attach(tptr,mptr)
AjK 0:d7cd54ad4c3d 377 /**
AjK 0:d7cd54ad4c3d 378 * Attach a callback method to teh vertical sync interrupt.
AjK 0:d7cd54ad4c3d 379 *
AjK 0:d7cd54ad4c3d 380 * @ingroup MAX7456_API
AjK 0:d7cd54ad4c3d 381 * @param tptr The class object pointer conatining the method.
AjK 0:d7cd54ad4c3d 382 * @param mptr The method within the object to invoke.
AjK 0:d7cd54ad4c3d 383 */
AjK 0:d7cd54ad4c3d 384 template<typename T>
AjK 0:d7cd54ad4c3d 385 void vsync_set_callback(T* tptr, void (T::*mptr)(void)) {
AjK 0:d7cd54ad4c3d 386 _vsync_callback.attach(tptr, mptr);
AjK 0:d7cd54ad4c3d 387 }
AjK 0:d7cd54ad4c3d 388
AjK 0:d7cd54ad4c3d 389 //! attach(tptr,mptr)
AjK 0:d7cd54ad4c3d 390 /**
AjK 0:d7cd54ad4c3d 391 * Attach a callback function to the vertical sync interrupt.
AjK 0:d7cd54ad4c3d 392 *
AjK 0:d7cd54ad4c3d 393 * @ingroup MAX7456_API
AjK 0:d7cd54ad4c3d 394 * @param fptr A function pointer to call on vertical sync irq.
AjK 0:d7cd54ad4c3d 395 */
AjK 0:d7cd54ad4c3d 396 void vsync_set_callback(void (*fptr)(void)) { _vsync_callback.attach(fptr); }
AjK 0:d7cd54ad4c3d 397
AjK 0:d7cd54ad4c3d 398 // Must be reimplemented by the child class.
AjK 0:d7cd54ad4c3d 399 virtual void vsync_isr(void) { _vsync_callback.call(); };
AjK 0:d7cd54ad4c3d 400
AjK 0:d7cd54ad4c3d 401 // Register level API.
AjK 0:d7cd54ad4c3d 402
AjK 0:d7cd54ad4c3d 403 /** @ingroup MAX7456_REGISTER_API */
AjK 0:d7cd54ad4c3d 404 __INLINE void vm0(uint8_t i) { write(VM0, i); }
AjK 0:d7cd54ad4c3d 405 /** @ingroup MAX7456_REGISTER_API */
AjK 0:d7cd54ad4c3d 406 __INLINE uint8_t vm0(void) { return (uint8_t)read(VM0); }
AjK 0:d7cd54ad4c3d 407 /** @ingroup MAX7456_REGISTER_API */
AjK 0:d7cd54ad4c3d 408 __INLINE void vm1(uint8_t i) { write(VM1, i); }
AjK 0:d7cd54ad4c3d 409 /** @ingroup MAX7456_REGISTER_API */
AjK 0:d7cd54ad4c3d 410 __INLINE uint8_t vm1(void) { return (uint8_t)read(VM1); }
AjK 0:d7cd54ad4c3d 411 /** @ingroup MAX7456_REGISTER_API */
AjK 0:d7cd54ad4c3d 412 __INLINE void hos(uint8_t i) { write(HOS, i); }
AjK 0:d7cd54ad4c3d 413 /** @ingroup MAX7456_REGISTER_API */
AjK 0:d7cd54ad4c3d 414 __INLINE uint8_t hos(void) { return (uint8_t)read(HOS); }
AjK 0:d7cd54ad4c3d 415 /** @ingroup MAX7456_REGISTER_API */
AjK 0:d7cd54ad4c3d 416 __INLINE void vos(uint8_t i) { write(VOS, i); }
AjK 0:d7cd54ad4c3d 417 /** @ingroup MAX7456_REGISTER_API */
AjK 0:d7cd54ad4c3d 418 __INLINE uint8_t vos(void) { return (uint8_t)read(VOS); }
AjK 0:d7cd54ad4c3d 419 /** @ingroup MAX7456_REGISTER_API */
AjK 0:d7cd54ad4c3d 420 __INLINE void dmm(uint8_t i) { write(DMM, i); }
AjK 0:d7cd54ad4c3d 421 /** @ingroup MAX7456_REGISTER_API */
AjK 0:d7cd54ad4c3d 422 __INLINE uint8_t dmm(void) { return (uint8_t)read(DMM); }
AjK 0:d7cd54ad4c3d 423 /** @ingroup MAX7456_REGISTER_API */
AjK 0:d7cd54ad4c3d 424 __INLINE void dmah(uint8_t i) { write(DMAH, i); }
AjK 0:d7cd54ad4c3d 425 /** @ingroup MAX7456_REGISTER_API */
AjK 0:d7cd54ad4c3d 426 __INLINE uint8_t dmah(void) { return (uint8_t)read(DMAH); }
AjK 0:d7cd54ad4c3d 427 /** @ingroup MAX7456_REGISTER_API */
AjK 0:d7cd54ad4c3d 428 __INLINE void dmal(uint8_t i) { write(DMAL, i); }
AjK 0:d7cd54ad4c3d 429 /** @ingroup MAX7456_REGISTER_API */
AjK 0:d7cd54ad4c3d 430 __INLINE uint8_t dmal(void) { return (uint8_t)read(DMAL); }
AjK 0:d7cd54ad4c3d 431 /** @ingroup MAX7456_REGISTER_API */
AjK 0:d7cd54ad4c3d 432 __INLINE void dmdi(uint8_t i) { write(DMDI, i); }
AjK 0:d7cd54ad4c3d 433 /** @ingroup MAX7456_REGISTER_API */
AjK 0:d7cd54ad4c3d 434 __INLINE uint8_t dmai(void) { return (uint8_t)read(DMDI); }
AjK 0:d7cd54ad4c3d 435 /** @ingroup MAX7456_REGISTER_API */
AjK 0:d7cd54ad4c3d 436 __INLINE void cmm(uint8_t i) { write(CMM, i); }
AjK 0:d7cd54ad4c3d 437 /** @ingroup MAX7456_REGISTER_API */
AjK 0:d7cd54ad4c3d 438 __INLINE uint8_t cmm(void) { return (uint8_t)read(CMM); }
AjK 0:d7cd54ad4c3d 439 /** @ingroup MAX7456_REGISTER_API */
AjK 0:d7cd54ad4c3d 440 __INLINE void cmah(uint8_t i) { write(CMAH, i); }
AjK 0:d7cd54ad4c3d 441 /** @ingroup MAX7456_REGISTER_API */
AjK 0:d7cd54ad4c3d 442 __INLINE uint8_t cmah(void) { return (uint8_t)read(CMAH); }
AjK 0:d7cd54ad4c3d 443 /** @ingroup MAX7456_REGISTER_API */
AjK 0:d7cd54ad4c3d 444 __INLINE void cmal(uint8_t i) { write(CMAL, i); }
AjK 0:d7cd54ad4c3d 445 /** @ingroup MAX7456_REGISTER_API */
AjK 0:d7cd54ad4c3d 446 __INLINE uint8_t cmal(void) { return (uint8_t)read(CMAL); }
AjK 0:d7cd54ad4c3d 447 /** @ingroup MAX7456_REGISTER_API */
AjK 0:d7cd54ad4c3d 448 __INLINE void cmdi(uint8_t i) { write(CMDI, i); }
AjK 0:d7cd54ad4c3d 449 /** @ingroup MAX7456_REGISTER_API */
AjK 0:d7cd54ad4c3d 450 __INLINE uint8_t cmai(void) { return (uint8_t)read(CMDI); }
AjK 0:d7cd54ad4c3d 451 /** @ingroup MAX7456_REGISTER_API */
AjK 0:d7cd54ad4c3d 452 __INLINE void osdm(uint8_t i) { write(OSDM, i); }
AjK 0:d7cd54ad4c3d 453 /** @ingroup MAX7456_REGISTER_API */
AjK 0:d7cd54ad4c3d 454 __INLINE uint8_t osdm(void) { return (uint8_t)read(OSDM); }
AjK 0:d7cd54ad4c3d 455 /** @ingroup MAX7456_REGISTER_API */
AjK 0:d7cd54ad4c3d 456
AjK 0:d7cd54ad4c3d 457 /** @ingroup MAX7456_REGISTER_API */
AjK 0:d7cd54ad4c3d 458 __INLINE uint8_t stat(void) { return read(0xA0); }
AjK 0:d7cd54ad4c3d 459
AjK 0:d7cd54ad4c3d 460 /** @ingroup MAX7456_REGISTER_API */
AjK 0:d7cd54ad4c3d 461 __INLINE bool los(void) { return (bool)!(stat() & (1 << 2)); }
AjK 0:d7cd54ad4c3d 462
AjK 0:d7cd54ad4c3d 463 /** @ingroup MAX7456_REGISTER_API */
AjK 0:d7cd54ad4c3d 464 __INLINE uint8_t osdbl(void) { return (uint8_t)read(OSDBL); }
AjK 0:d7cd54ad4c3d 465 /** @ingroup MAX7456_REGISTER_API */
AjK 0:d7cd54ad4c3d 466 __INLINE void osdbl(bool b) { uint8_t t = osdbl(); if (b) osdbl(t & ~(1 << 4)); else osdbl(t | (1 << 4)); }
AjK 0:d7cd54ad4c3d 467
AjK 0:d7cd54ad4c3d 468 /** @ingroup MAX7456_REGISTER_API */
AjK 0:d7cd54ad4c3d 469 __INLINE void RowBrightness(RowBrightnessReg r, uint8_t i) { write(r, i); }
AjK 0:d7cd54ad4c3d 470 /** @ingroup MAX7456_REGISTER_API */
AjK 0:d7cd54ad4c3d 471 __INLINE uint8_t RowBrightness(RowBrightnessReg r) { return read (r); }
AjK 0:d7cd54ad4c3d 472
AjK 0:d7cd54ad4c3d 473 protected:
AjK 0:d7cd54ad4c3d 474 void init(PinName mosi, PinName miso, PinName sclk, const char *name, PinName cs, PinName rst, PinName vsync = NC);
AjK 0:d7cd54ad4c3d 475 void write(unsigned char address, unsigned char byte);
AjK 0:d7cd54ad4c3d 476 int read(unsigned char address);
AjK 0:d7cd54ad4c3d 477
AjK 0:d7cd54ad4c3d 478 SPI *_ssp;
AjK 0:d7cd54ad4c3d 479 DigitalOut *_cs;
AjK 0:d7cd54ad4c3d 480 DigitalOut *_rst;
AjK 0:d7cd54ad4c3d 481 InterruptIn *_vsync;
AjK 0:d7cd54ad4c3d 482 FunctionPointer _vsync_callback;
AjK 0:d7cd54ad4c3d 483 };
AjK 0:d7cd54ad4c3d 484
AjK 0:d7cd54ad4c3d 485 #endif