Library for the MAX7219 LED display driver

Dependents:   MAXREFDES99_demo MAXREFDES99_RTC_Display nucleo_spi_max7219_led8x8 max7219 ... more

Committer:
j3
Date:
Thu May 12 20:06:28 2016 +0000
Revision:
4:b5e4379a3d90
Parent:
2:9150a0dc77a3
A little more autodoc cleanup

Who changed what in which revision?

UserRevisionLine numberNew contents of line
j3 0:798fb343e022 1 /******************************************************************//**
j3 0:798fb343e022 2 * @file max7219.cpp
j3 0:798fb343e022 3 * Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved.
j3 0:798fb343e022 4 *
j3 0:798fb343e022 5 * Permission is hereby granted, free of charge, to any person obtaining a
j3 0:798fb343e022 6 * copy of this software and associated documentation files (the "Software"),
j3 0:798fb343e022 7 * to deal in the Software without restriction, including without limitation
j3 0:798fb343e022 8 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
j3 0:798fb343e022 9 * and/or sell copies of the Software, and to permit persons to whom the
j3 0:798fb343e022 10 * Software is furnished to do so, subject to the following conditions:
j3 0:798fb343e022 11 *
j3 0:798fb343e022 12 * The above copyright notice and this permission notice shall be included
j3 0:798fb343e022 13 * in all copies or substantial portions of the Software.
j3 0:798fb343e022 14 *
j3 0:798fb343e022 15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
j3 0:798fb343e022 16 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
j3 0:798fb343e022 17 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
j3 0:798fb343e022 18 * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
j3 0:798fb343e022 19 * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
j3 0:798fb343e022 20 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
j3 0:798fb343e022 21 * OTHER DEALINGS IN THE SOFTWARE.
j3 0:798fb343e022 22 *
j3 0:798fb343e022 23 * Except as contained in this notice, the name of Maxim Integrated
j3 0:798fb343e022 24 * Products, Inc. shall not be used except as stated in the Maxim Integrated
j3 0:798fb343e022 25 * Products, Inc. Branding Policy.
j3 0:798fb343e022 26 *
j3 0:798fb343e022 27 * The mere transfer of this software does not imply any licenses
j3 0:798fb343e022 28 * of trade secrets, proprietary technology, copyrights, patents,
j3 0:798fb343e022 29 * trademarks, maskwork rights, or any other form of intellectual
j3 0:798fb343e022 30 * property whatsoever. Maxim Integrated Products, Inc. retains all
j3 0:798fb343e022 31 * ownership rights.
j3 0:798fb343e022 32 **********************************************************************/
j3 0:798fb343e022 33
j3 0:798fb343e022 34
j3 0:798fb343e022 35 #include "max7219.h"
j3 0:798fb343e022 36
j3 0:798fb343e022 37
j3 0:798fb343e022 38 //*********************************************************************
j3 0:798fb343e022 39 Max7219::Max7219(SPI *spi_bus, PinName cs): _p_spi(spi_bus)
j3 0:798fb343e022 40 {
j3 0:798fb343e022 41 _num_devices = 1;
j3 0:798fb343e022 42
j3 0:798fb343e022 43 _p_cs = new DigitalOut(cs, 1);
j3 0:798fb343e022 44 _spi_owner = false;
j3 0:798fb343e022 45 }
j3 0:798fb343e022 46
j3 0:798fb343e022 47
j3 0:798fb343e022 48 //*********************************************************************
j3 0:798fb343e022 49 Max7219::Max7219(PinName mosi, PinName miso, PinName sclk, PinName cs)
j3 0:798fb343e022 50 {
j3 0:798fb343e022 51 _num_devices = 1;
j3 0:798fb343e022 52
j3 0:798fb343e022 53 _p_spi = new SPI(mosi, miso, sclk);
j3 0:798fb343e022 54 _p_cs = new DigitalOut(cs, 1);
j3 0:798fb343e022 55
j3 0:798fb343e022 56 _spi_owner = true;
j3 0:798fb343e022 57 }
j3 0:798fb343e022 58
j3 0:798fb343e022 59
j3 0:798fb343e022 60 //*********************************************************************
j3 0:798fb343e022 61 Max7219::~Max7219()
j3 0:798fb343e022 62 {
j3 0:798fb343e022 63 delete _p_cs;
j3 0:798fb343e022 64
j3 0:798fb343e022 65 if(_spi_owner)
j3 0:798fb343e022 66 {
j3 0:798fb343e022 67 delete _p_spi;
j3 0:798fb343e022 68 }
j3 0:798fb343e022 69 }
j3 0:798fb343e022 70
j3 0:798fb343e022 71
j3 0:798fb343e022 72 //*********************************************************************
j3 0:798fb343e022 73 int32_t Max7219::set_num_devices(uint8_t num_devices)
j3 0:798fb343e022 74 {
j3 0:798fb343e022 75 int32_t rtn_val = -1;
j3 0:798fb343e022 76
j3 0:798fb343e022 77 if(num_devices > 0)
j3 0:798fb343e022 78 {
j3 0:798fb343e022 79 _num_devices = num_devices;
j3 0:798fb343e022 80 rtn_val = _num_devices;
j3 0:798fb343e022 81 }
j3 0:798fb343e022 82
j3 0:798fb343e022 83 return(rtn_val);
j3 0:798fb343e022 84 }
j3 0:798fb343e022 85
j3 0:798fb343e022 86
j3 0:798fb343e022 87 //*********************************************************************
j3 0:798fb343e022 88 void Max7219::set_display_test(void)
j3 0:798fb343e022 89 {
j3 0:798fb343e022 90 uint8_t idx = 0;
j3 0:798fb343e022 91
j3 0:798fb343e022 92 _p_cs->write(0);
j3 0:798fb343e022 93 for(idx = 0; idx < _num_devices; idx++)
j3 0:798fb343e022 94 {
j3 0:798fb343e022 95 _p_spi->write(MAX7219_DISPLAY_TEST);
j3 0:798fb343e022 96 _p_spi->write(1);
j3 0:798fb343e022 97 }
j3 0:798fb343e022 98 _p_cs->write(1);
j3 0:798fb343e022 99 }
j3 0:798fb343e022 100
j3 0:798fb343e022 101
j3 0:798fb343e022 102 //*********************************************************************
j3 0:798fb343e022 103 void Max7219::clear_display_test(void)
j3 0:798fb343e022 104 {
j3 0:798fb343e022 105 uint8_t idx = 0;
j3 0:798fb343e022 106
j3 0:798fb343e022 107 _p_cs->write(0);
j3 0:798fb343e022 108 for(idx = 0; idx < _num_devices; idx++)
j3 0:798fb343e022 109 {
j3 0:798fb343e022 110 _p_spi->write(MAX7219_DISPLAY_TEST);
j3 0:798fb343e022 111 _p_spi->write(0);
j3 0:798fb343e022 112 }
j3 0:798fb343e022 113 _p_cs->write(1);
j3 0:798fb343e022 114 }
j3 0:798fb343e022 115
j3 0:798fb343e022 116
j3 0:798fb343e022 117 //*********************************************************************
j3 1:90a7cf4e7d26 118 int32_t Max7219::init_device(max7219_configuration_t config)
j3 0:798fb343e022 119 {
j3 0:798fb343e022 120 int32_t rtn_val = -1;
j3 0:798fb343e022 121 uint8_t idx = 0;
j3 0:798fb343e022 122
j3 0:798fb343e022 123 if(config.device_number > _num_devices)
j3 0:798fb343e022 124 {
j3 0:798fb343e022 125 rtn_val = -1;
j3 0:798fb343e022 126 }
j3 0:798fb343e022 127 else if(config.device_number == 0)
j3 0:798fb343e022 128 {
j3 0:798fb343e022 129 //device numbering starts with index 1
j3 0:798fb343e022 130 rtn_val = -2;
j3 0:798fb343e022 131 }
j3 0:798fb343e022 132 else
j3 0:798fb343e022 133 {
j3 0:798fb343e022 134 //write DECODE_MODE register of device
j3 0:798fb343e022 135 _p_cs->write(0);
j3 0:798fb343e022 136 for(idx = _num_devices; idx > 0; idx--)
j3 0:798fb343e022 137 {
j3 0:798fb343e022 138 if(config.device_number == idx)
j3 0:798fb343e022 139 {
j3 0:798fb343e022 140 _p_spi->write(MAX7219_DECODE_MODE);
j3 0:798fb343e022 141 _p_spi->write(config.decode_mode);
j3 0:798fb343e022 142 }
j3 0:798fb343e022 143 else
j3 0:798fb343e022 144 {
j3 0:798fb343e022 145 _p_spi->write(MAX7219_NO_OP);
j3 0:798fb343e022 146 _p_spi->write(0);
j3 0:798fb343e022 147 }
j3 0:798fb343e022 148 }
j3 0:798fb343e022 149 _p_cs->write(1);
j3 0:798fb343e022 150
j3 0:798fb343e022 151 wait_us(1);
j3 0:798fb343e022 152
j3 0:798fb343e022 153 //write INTENSITY register of device
j3 0:798fb343e022 154 _p_cs->write(0);
j3 0:798fb343e022 155 for(idx = _num_devices; idx > 0; idx--)
j3 0:798fb343e022 156 {
j3 0:798fb343e022 157 if(config.device_number == idx)
j3 0:798fb343e022 158 {
j3 0:798fb343e022 159 _p_spi->write(MAX7219_INTENSITY);
j3 0:798fb343e022 160 _p_spi->write(config.intensity);
j3 0:798fb343e022 161 }
j3 0:798fb343e022 162 else
j3 0:798fb343e022 163 {
j3 0:798fb343e022 164 _p_spi->write(MAX7219_NO_OP);
j3 0:798fb343e022 165 _p_spi->write(0);
j3 0:798fb343e022 166 }
j3 0:798fb343e022 167 }
j3 0:798fb343e022 168 _p_cs->write(1);
j3 0:798fb343e022 169
j3 0:798fb343e022 170 wait_us(1);
j3 0:798fb343e022 171
j3 0:798fb343e022 172 //write SCAN_LIMT register of device
j3 0:798fb343e022 173 _p_cs->write(0);
j3 0:798fb343e022 174 for(idx = _num_devices; idx > 0; idx--)
j3 0:798fb343e022 175 {
j3 0:798fb343e022 176 if(config.device_number == idx)
j3 0:798fb343e022 177 {
j3 0:798fb343e022 178 _p_spi->write(MAX7219_SCAN_LIMIT);
j3 0:798fb343e022 179 _p_spi->write(config.scan_limit);
j3 0:798fb343e022 180 }
j3 0:798fb343e022 181 else
j3 0:798fb343e022 182 {
j3 0:798fb343e022 183 _p_spi->write(MAX7219_NO_OP);
j3 0:798fb343e022 184 _p_spi->write(0);
j3 0:798fb343e022 185 }
j3 0:798fb343e022 186 }
j3 0:798fb343e022 187 _p_cs->write(1);
j3 0:798fb343e022 188
j3 0:798fb343e022 189 wait_us(1);
j3 0:798fb343e022 190
j3 0:798fb343e022 191 rtn_val = 0;
j3 0:798fb343e022 192 }
j3 0:798fb343e022 193
j3 0:798fb343e022 194 return(rtn_val);
j3 0:798fb343e022 195 }
j3 0:798fb343e022 196
j3 0:798fb343e022 197
j3 0:798fb343e022 198 //*********************************************************************
j3 0:798fb343e022 199 void Max7219::init_display(max7219_configuration_t config)
j3 0:798fb343e022 200 {
j3 0:798fb343e022 201 uint8_t idx = 0;
j3 0:798fb343e022 202
j3 0:798fb343e022 203 //write DECODE_MODE register of all devices
j3 0:798fb343e022 204 _p_cs->write(0);
j3 0:798fb343e022 205 for(idx = 0; idx < _num_devices; idx++)
j3 0:798fb343e022 206 {
j3 0:798fb343e022 207 _p_spi->write(MAX7219_DECODE_MODE);
j3 0:798fb343e022 208 _p_spi->write(config.decode_mode);
j3 0:798fb343e022 209 }
j3 0:798fb343e022 210 _p_cs->write(1);
j3 0:798fb343e022 211
j3 0:798fb343e022 212 wait_us(1);
j3 0:798fb343e022 213
j3 0:798fb343e022 214 //write INTENSITY register of all devices
j3 0:798fb343e022 215 _p_cs->write(0);
j3 0:798fb343e022 216 for(idx = 0; idx < _num_devices; idx++)
j3 0:798fb343e022 217 {
j3 0:798fb343e022 218 _p_spi->write(MAX7219_INTENSITY);
j3 0:798fb343e022 219 _p_spi->write(config.intensity);
j3 0:798fb343e022 220 }
j3 0:798fb343e022 221 _p_cs->write(1);
j3 0:798fb343e022 222
j3 0:798fb343e022 223 wait_us(1);
j3 0:798fb343e022 224
j3 0:798fb343e022 225 //write SCAN_LIMT register of all devices
j3 0:798fb343e022 226 _p_cs->write(0);
j3 0:798fb343e022 227 for(idx = 0; idx < _num_devices; idx++)
j3 0:798fb343e022 228 {
j3 0:798fb343e022 229 _p_spi->write(MAX7219_SCAN_LIMIT);
j3 0:798fb343e022 230 _p_spi->write(config.scan_limit);
j3 0:798fb343e022 231 }
j3 0:798fb343e022 232 _p_cs->write(1);
j3 0:798fb343e022 233
j3 0:798fb343e022 234 wait_us(1);
j3 0:798fb343e022 235 }
j3 0:798fb343e022 236
j3 0:798fb343e022 237
j3 0:798fb343e022 238 //*********************************************************************
j3 0:798fb343e022 239 int32_t Max7219::enable_device(uint8_t device_number)
j3 0:798fb343e022 240 {
j3 0:798fb343e022 241 int32_t rtn_val = -1;
j3 0:798fb343e022 242 uint8_t idx = 0;
j3 0:798fb343e022 243
j3 0:798fb343e022 244 if(device_number > _num_devices)
j3 0:798fb343e022 245 {
j3 0:798fb343e022 246 rtn_val = -1;
j3 0:798fb343e022 247 }
j3 0:798fb343e022 248 else if(device_number == 0)
j3 0:798fb343e022 249 {
j3 0:798fb343e022 250 //device numbering starts with index 1
j3 0:798fb343e022 251 rtn_val = -2;
j3 0:798fb343e022 252 }
j3 0:798fb343e022 253 else
j3 0:798fb343e022 254 {
j3 0:798fb343e022 255 _p_cs->write(0);
j3 0:798fb343e022 256 for(idx = _num_devices; idx > 0; idx--)
j3 0:798fb343e022 257 {
j3 0:798fb343e022 258 if(device_number == idx)
j3 0:798fb343e022 259 {
j3 0:798fb343e022 260 _p_spi->write(MAX7219_SHUTDOWN);
j3 0:798fb343e022 261 _p_spi->write(1);
j3 0:798fb343e022 262 }
j3 0:798fb343e022 263 else
j3 0:798fb343e022 264 {
j3 0:798fb343e022 265 _p_spi->write(MAX7219_NO_OP);
j3 0:798fb343e022 266 _p_spi->write(0);
j3 0:798fb343e022 267 }
j3 0:798fb343e022 268 }
j3 0:798fb343e022 269 _p_cs->write(1);
j3 0:798fb343e022 270
j3 0:798fb343e022 271 rtn_val = 0;
j3 0:798fb343e022 272 }
j3 0:798fb343e022 273
j3 0:798fb343e022 274 return(rtn_val);
j3 0:798fb343e022 275 }
j3 0:798fb343e022 276
j3 0:798fb343e022 277
j3 0:798fb343e022 278 //*********************************************************************
j3 0:798fb343e022 279 void Max7219::enable_display(void)
j3 0:798fb343e022 280 {
j3 0:798fb343e022 281 uint8_t idx = 0;
j3 0:798fb343e022 282
j3 0:798fb343e022 283 _p_cs->write(0);
j3 0:798fb343e022 284 for(idx = 0; idx < _num_devices; idx++)
j3 0:798fb343e022 285 {
j3 0:798fb343e022 286 _p_spi->write(MAX7219_SHUTDOWN);
j3 0:798fb343e022 287 _p_spi->write(1);
j3 0:798fb343e022 288 }
j3 0:798fb343e022 289 _p_cs->write(1);
j3 0:798fb343e022 290 }
j3 0:798fb343e022 291
j3 0:798fb343e022 292
j3 0:798fb343e022 293 //*********************************************************************
j3 0:798fb343e022 294 int32_t Max7219::disable_device(uint8_t device_number)
j3 0:798fb343e022 295 {
j3 0:798fb343e022 296 int32_t rtn_val = -1;
j3 0:798fb343e022 297 uint8_t idx = 0;
j3 0:798fb343e022 298
j3 0:798fb343e022 299 if(device_number > _num_devices)
j3 0:798fb343e022 300 {
j3 0:798fb343e022 301 rtn_val = -1;
j3 0:798fb343e022 302 }
j3 0:798fb343e022 303 else if(device_number == 0)
j3 0:798fb343e022 304 {
j3 0:798fb343e022 305 //device numbering starts with index 1
j3 0:798fb343e022 306 rtn_val = -2;
j3 0:798fb343e022 307 }
j3 0:798fb343e022 308 else
j3 0:798fb343e022 309 {
j3 0:798fb343e022 310 _p_cs->write(0);
j3 0:798fb343e022 311 for(idx = _num_devices; idx > 0; idx--)
j3 0:798fb343e022 312 {
j3 0:798fb343e022 313 if(device_number == idx)
j3 0:798fb343e022 314 {
j3 0:798fb343e022 315 _p_spi->write(MAX7219_SHUTDOWN);
j3 0:798fb343e022 316 _p_spi->write(0);
j3 0:798fb343e022 317 }
j3 0:798fb343e022 318 else
j3 0:798fb343e022 319 {
j3 0:798fb343e022 320 _p_spi->write(MAX7219_NO_OP);
j3 0:798fb343e022 321 _p_spi->write(0);
j3 0:798fb343e022 322 }
j3 0:798fb343e022 323 }
j3 0:798fb343e022 324 _p_cs->write(1);
j3 0:798fb343e022 325
j3 0:798fb343e022 326 rtn_val = 0;
j3 0:798fb343e022 327 }
j3 0:798fb343e022 328
j3 0:798fb343e022 329 return(rtn_val);
j3 0:798fb343e022 330 }
j3 0:798fb343e022 331
j3 0:798fb343e022 332
j3 0:798fb343e022 333 //*********************************************************************
j3 0:798fb343e022 334 void Max7219::disable_display(void)
j3 0:798fb343e022 335 {
j3 0:798fb343e022 336 uint8_t idx = 0;
j3 0:798fb343e022 337
j3 0:798fb343e022 338 _p_cs->write(0);
j3 0:798fb343e022 339 for(idx = 0; idx < _num_devices; idx++)
j3 0:798fb343e022 340 {
j3 0:798fb343e022 341 _p_spi->write(MAX7219_SHUTDOWN);
j3 0:798fb343e022 342 _p_spi->write(0);
j3 0:798fb343e022 343 }
j3 0:798fb343e022 344 _p_cs->write(1);
j3 0:798fb343e022 345 }
j3 0:798fb343e022 346
j3 0:798fb343e022 347
j3 0:798fb343e022 348
j3 0:798fb343e022 349 //*********************************************************************
j3 0:798fb343e022 350 int32_t Max7219::write_digit(uint8_t device_number, uint8_t digit, uint8_t data)
j3 0:798fb343e022 351 {
j3 0:798fb343e022 352 int32_t rtn_val = -1;
j3 0:798fb343e022 353 uint8_t idx = 0;
j3 0:798fb343e022 354
j3 0:798fb343e022 355 if(digit > MAX7219_DIGIT_7)
j3 0:798fb343e022 356 {
j3 0:798fb343e022 357 rtn_val = -3;
j3 0:798fb343e022 358 }
j3 0:798fb343e022 359 else if(digit < MAX7219_DIGIT_0)
j3 0:798fb343e022 360 {
j3 0:798fb343e022 361 rtn_val = -4;
j3 0:798fb343e022 362 }
j3 0:798fb343e022 363 else
j3 0:798fb343e022 364 {
j3 0:798fb343e022 365 if(device_number > _num_devices)
j3 0:798fb343e022 366 {
j3 0:798fb343e022 367 rtn_val = -1;
j3 0:798fb343e022 368 }
j3 0:798fb343e022 369 else if(device_number == 0)
j3 0:798fb343e022 370 {
j3 0:798fb343e022 371 rtn_val = -2;
j3 0:798fb343e022 372 }
j3 0:798fb343e022 373 else
j3 0:798fb343e022 374 {
j3 0:798fb343e022 375 _p_cs->write(0);
j3 0:798fb343e022 376 for(idx = _num_devices; idx > 0; idx--)
j3 0:798fb343e022 377 {
j3 0:798fb343e022 378 if(idx == device_number)
j3 0:798fb343e022 379 {
j3 0:798fb343e022 380 _p_spi->write(digit);
j3 0:798fb343e022 381 _p_spi->write(data);
j3 0:798fb343e022 382 }
j3 0:798fb343e022 383 else
j3 0:798fb343e022 384 {
j3 0:798fb343e022 385 _p_spi->write(MAX7219_NO_OP);
j3 0:798fb343e022 386 _p_spi->write(0);
j3 0:798fb343e022 387 }
j3 0:798fb343e022 388 }
j3 0:798fb343e022 389 _p_cs->write(1);
j3 0:798fb343e022 390
j3 0:798fb343e022 391 rtn_val = 0;
j3 0:798fb343e022 392 }
j3 0:798fb343e022 393 }
j3 0:798fb343e022 394
j3 0:798fb343e022 395 return(rtn_val);
j3 0:798fb343e022 396 }
j3 0:798fb343e022 397
j3 0:798fb343e022 398
j3 0:798fb343e022 399 //*********************************************************************
j3 0:798fb343e022 400 int32_t Max7219::clear_digit(uint8_t device_number, uint8_t digit)
j3 0:798fb343e022 401 {
j3 0:798fb343e022 402 int32_t rtn_val = -1;
j3 0:798fb343e022 403 uint8_t idx = 0;
j3 0:798fb343e022 404
j3 0:798fb343e022 405 if(digit > MAX7219_DIGIT_7)
j3 0:798fb343e022 406 {
j3 0:798fb343e022 407 rtn_val = -3;
j3 0:798fb343e022 408 }
j3 0:798fb343e022 409 else if(digit < MAX7219_DIGIT_0)
j3 0:798fb343e022 410 {
j3 0:798fb343e022 411 rtn_val = -4;
j3 0:798fb343e022 412 }
j3 0:798fb343e022 413 else
j3 0:798fb343e022 414 {
j3 0:798fb343e022 415 if(device_number > _num_devices)
j3 0:798fb343e022 416 {
j3 0:798fb343e022 417 rtn_val = -1;
j3 0:798fb343e022 418 }
j3 0:798fb343e022 419 else if(device_number == 0)
j3 0:798fb343e022 420 {
j3 0:798fb343e022 421 rtn_val = -2;
j3 0:798fb343e022 422 }
j3 0:798fb343e022 423 else
j3 0:798fb343e022 424 {
j3 0:798fb343e022 425 _p_cs->write(0);
j3 0:798fb343e022 426 for(idx = _num_devices; idx > 0; idx--)
j3 0:798fb343e022 427 {
j3 0:798fb343e022 428 if(idx == device_number)
j3 0:798fb343e022 429 {
j3 0:798fb343e022 430 _p_spi->write(digit);
j3 0:798fb343e022 431 _p_spi->write(0);
j3 0:798fb343e022 432 }
j3 0:798fb343e022 433 else
j3 0:798fb343e022 434 {
j3 0:798fb343e022 435 _p_spi->write(MAX7219_NO_OP);
j3 0:798fb343e022 436 _p_spi->write(0);
j3 0:798fb343e022 437 }
j3 0:798fb343e022 438 }
j3 0:798fb343e022 439 _p_cs->write(1);
j3 0:798fb343e022 440
j3 0:798fb343e022 441 rtn_val = 0;
j3 0:798fb343e022 442 }
j3 0:798fb343e022 443 }
j3 0:798fb343e022 444
j3 0:798fb343e022 445 return(rtn_val);
j3 0:798fb343e022 446 }
j3 0:798fb343e022 447
j3 0:798fb343e022 448
j3 0:798fb343e022 449 //*********************************************************************
j3 0:798fb343e022 450 int32_t Max7219::device_all_on(uint8_t device_number)
j3 0:798fb343e022 451 {
j3 0:798fb343e022 452 int32_t rtn_val = -1;
j3 0:798fb343e022 453 uint8_t idx = 0;
j3 0:798fb343e022 454
j3 0:798fb343e022 455 if(device_number > _num_devices)
j3 0:798fb343e022 456 {
j3 0:798fb343e022 457 rtn_val = -1;
j3 0:798fb343e022 458 }
j3 0:798fb343e022 459 else if(device_number == 0)
j3 0:798fb343e022 460 {
j3 0:798fb343e022 461 rtn_val = -2;
j3 0:798fb343e022 462 }
j3 0:798fb343e022 463 else
j3 0:798fb343e022 464 {
j3 0:798fb343e022 465 rtn_val = 0;
j3 0:798fb343e022 466
j3 0:798fb343e022 467 //writes every digit of given device to 0xFF
j3 0:798fb343e022 468 for(idx = 0; idx < 8; idx++)
j3 0:798fb343e022 469 {
j3 0:798fb343e022 470 if(rtn_val == 0)
j3 0:798fb343e022 471 {
j3 0:798fb343e022 472 rtn_val = write_digit(device_number, (idx + 1), 0xFF);
j3 0:798fb343e022 473 }
j3 0:798fb343e022 474 }
j3 0:798fb343e022 475 }
j3 0:798fb343e022 476
j3 0:798fb343e022 477 return(rtn_val);
j3 0:798fb343e022 478 }
j3 0:798fb343e022 479
j3 0:798fb343e022 480
j3 0:798fb343e022 481 //*********************************************************************
j3 0:798fb343e022 482 int32_t Max7219::device_all_off(uint8_t device_number)
j3 0:798fb343e022 483 {
j3 0:798fb343e022 484 int32_t rtn_val = -1;
j3 0:798fb343e022 485 uint8_t idx = 0;
j3 0:798fb343e022 486
j3 0:798fb343e022 487 if(device_number > _num_devices)
j3 0:798fb343e022 488 {
j3 0:798fb343e022 489 rtn_val = -1;
j3 0:798fb343e022 490 }
j3 0:798fb343e022 491 else if(device_number == 0)
j3 0:798fb343e022 492 {
j3 0:798fb343e022 493 rtn_val = -2;
j3 0:798fb343e022 494 }
j3 0:798fb343e022 495 else
j3 0:798fb343e022 496 {
j3 0:798fb343e022 497 rtn_val = 0;
j3 0:798fb343e022 498
j3 0:798fb343e022 499 //writes every digit of given device to 0
j3 0:798fb343e022 500 for(idx = 0; idx < 8; idx++)
j3 0:798fb343e022 501 {
j3 0:798fb343e022 502 if(rtn_val == 0)
j3 0:798fb343e022 503 {
j3 0:798fb343e022 504 rtn_val = write_digit(device_number, (idx + 1), 0);
j3 0:798fb343e022 505 }
j3 0:798fb343e022 506 }
j3 0:798fb343e022 507 }
j3 0:798fb343e022 508
j3 0:798fb343e022 509 return(rtn_val);
j3 0:798fb343e022 510 }
j3 0:798fb343e022 511
j3 0:798fb343e022 512
j3 0:798fb343e022 513 void Max7219::display_all_on(void)
j3 0:798fb343e022 514 {
j3 0:798fb343e022 515 uint8_t idx, idy;
j3 0:798fb343e022 516
j3 0:798fb343e022 517 //writes every digit of every device to 0xFF
j3 0:798fb343e022 518 for(idx = 0; idx < _num_devices; idx++)
j3 0:798fb343e022 519 {
j3 0:798fb343e022 520 for(idy = 0; idy < MAX7219_DIGIT_7; idy++)
j3 0:798fb343e022 521 {
j3 0:798fb343e022 522 write_digit((idx + 1), (idy + 1), 0xFF);
j3 0:798fb343e022 523 }
j3 0:798fb343e022 524 }
j3 0:798fb343e022 525 }
j3 0:798fb343e022 526
j3 0:798fb343e022 527
j3 0:798fb343e022 528 void Max7219::display_all_off(void)
j3 0:798fb343e022 529 {
j3 0:798fb343e022 530 uint8_t idx, idy;
j3 0:798fb343e022 531
j3 0:798fb343e022 532 //writes every digit of every device to 0
j3 0:798fb343e022 533 for(idx = 0; idx < _num_devices; idx++)
j3 0:798fb343e022 534 {
j3 0:798fb343e022 535 for(idy = 0; idy < MAX7219_DIGIT_7; idy++)
j3 0:798fb343e022 536 {
j3 0:798fb343e022 537 write_digit((idx + 1), (idy + 1), 0);
j3 0:798fb343e022 538 }
j3 0:798fb343e022 539 }
j3 0:798fb343e022 540 }
j3 0:798fb343e022 541