MAX6955 LED driver

Committer:
Kentaro Okuda
Date:
Sat Aug 11 15:27:43 2018 -0400
Revision:
3:fbcb79f6e0a8
Parent:
2:f6c4ed9cbf0e
refactoring. extract a method to generate printable char.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Kentaro Okuda 1:8936ddb97551 1 /**
Kentaro Okuda 1:8936ddb97551 2 * @file MAX6955.cpp
Kentaro Okuda 1:8936ddb97551 3 */
Kentaro Okuda 1:8936ddb97551 4
lonesometraveler 0:8c7de3096cac 5 #include "MAX6955.h"
lonesometraveler 0:8c7de3096cac 6
lonesometraveler 0:8c7de3096cac 7 MAX6955::MAX6955(PinName sda, PinName scl, char driver): i2c_(sda, scl), driver_(driver){}
lonesometraveler 0:8c7de3096cac 8
Kentaro Okuda 3:fbcb79f6e0a8 9 static char getPrintableChar(char c) {
Kentaro Okuda 3:fbcb79f6e0a8 10 if (c < 32 || c > 126) { // make sure its printable
Kentaro Okuda 3:fbcb79f6e0a8 11 return 32; // if not, replace it with "space"
Kentaro Okuda 3:fbcb79f6e0a8 12 }
Kentaro Okuda 3:fbcb79f6e0a8 13 return c;
Kentaro Okuda 3:fbcb79f6e0a8 14 }
Kentaro Okuda 3:fbcb79f6e0a8 15
Kentaro Okuda 3:fbcb79f6e0a8 16 static char* getString(char* buffer) {
Kentaro Okuda 3:fbcb79f6e0a8 17 static char i2cData[9];
Kentaro Okuda 3:fbcb79f6e0a8 18 i2cData[0] = 0x20; // first digit
Kentaro Okuda 2:f6c4ed9cbf0e 19 for (int i = 0; i < 8; i++) {
Kentaro Okuda 3:fbcb79f6e0a8 20 i2cData[i+1] = getPrintableChar(buffer[i]);
Kentaro Okuda 2:f6c4ed9cbf0e 21 }
Kentaro Okuda 3:fbcb79f6e0a8 22 return i2cData;
Kentaro Okuda 2:f6c4ed9cbf0e 23 }
Kentaro Okuda 1:8936ddb97551 24
Kentaro Okuda 1:8936ddb97551 25 int MAX6955::write(char command, char data) {
lonesometraveler 0:8c7de3096cac 26 char i2cData[2];
lonesometraveler 0:8c7de3096cac 27 i2cData[0] = command;
lonesometraveler 0:8c7de3096cac 28 i2cData[1] = data;
lonesometraveler 0:8c7de3096cac 29 int result = i2c_.write(driver_, i2cData, 2);
lonesometraveler 0:8c7de3096cac 30 wait(0.07);
lonesometraveler 0:8c7de3096cac 31 return result;
lonesometraveler 0:8c7de3096cac 32 }
lonesometraveler 0:8c7de3096cac 33
Kentaro Okuda 1:8936ddb97551 34 int MAX6955::writeS(char* buffer) {
Kentaro Okuda 3:fbcb79f6e0a8 35 char* i2cData;
Kentaro Okuda 3:fbcb79f6e0a8 36 i2cData = getString(buffer);
Kentaro Okuda 3:fbcb79f6e0a8 37 int result = i2c_.write(driver_, i2cData, 9);
lonesometraveler 0:8c7de3096cac 38 wait(0.07);
lonesometraveler 0:8c7de3096cac 39 return result;
lonesometraveler 0:8c7de3096cac 40 }
lonesometraveler 0:8c7de3096cac 41
Kentaro Okuda 1:8936ddb97551 42 int MAX6955::init(void) {
lonesometraveler 0:8c7de3096cac 43 int result = 0;
lonesometraveler 0:8c7de3096cac 44 result = result + write(reg_decodeMode, 0x00);
lonesometraveler 0:8c7de3096cac 45 result = result + write(reg_scanLimit, 0x07);
lonesometraveler 0:8c7de3096cac 46 result = result + write(reg_configuration, 0x21);
lonesometraveler 0:8c7de3096cac 47 result = result + write(reg_globalIntensity, 0x08);
lonesometraveler 0:8c7de3096cac 48 result = result + write(reg_digitType, 0xFF);
lonesometraveler 0:8c7de3096cac 49 result = result + write(reg_displayTest, 0x00);
lonesometraveler 0:8c7de3096cac 50 return result;
lonesometraveler 0:8c7de3096cac 51 }