Simple control for ST M5451 LED driver.

Sample usage

#include "mbed.h"
#include "M5451.h"

M5451 m5451(D8, D7);

void toggleOneByOne(){
    for(char i = 0; i < m5451.outputs(); i++){
        m5451.toggleBit(i);
        m5451.update();
        wait_ms(250);
        m5451.toggleBit(i);
    }
}

int main() {
    while(1) {
        m5451.setAllBits(0);
        toggleOneByOne();
        m5451.setAllBits(1);
        toggleOneByOne();
    }
}
Revision:
0:b21b3517a1d6
Child:
1:db1e69c22bc6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/M5451.cpp	Sun Mar 01 10:20:26 2020 +0000
@@ -0,0 +1,53 @@
+#include "M5451.h"
+#include "mbed.h"
+
+M5451::M5451(PinName dataPin, PinName clockPin):
+    _dataPin(dataPin), _clockPin(clockPin) {
+    _state = 0ULL;
+}
+
+int M5451::outputs() {
+    return JIRRICK_M5451_OUTPUTS;
+}
+
+void M5451::setState(uint64_t state){
+    _state = state;
+}
+
+void M5451::setBit(char position, char value){
+    if (position < JIRRICK_M5451_OUTPUTS)
+    {
+        uint64_t value64 = value;
+        _state = (_state & ~(1ULL << position)) | (value64 << position);
+    }
+}
+
+void M5451::setAllBits(char value){
+    for(char i = 0; i < JIRRICK_M5451_OUTPUTS; i++){
+        setBit(i, value);
+    }
+}
+
+void M5451::update() {
+    _send(1); //START BIT
+    uint64_t input = _state;
+    for(char i = 0; i < JIRRICK_M5451_OUTPUTS; i++){
+        char value = (input & 1ULL);
+        _send(value);
+        input = input >> 1;
+    }
+}
+
+uint64_t M5451::getState() {
+    return _state;
+}
+
+void M5451::_send(char bit) {
+    _dataPin = (bit % 2);
+    wait_us(JIRRICK_M5451_WAIT);
+    _clockPin = 1;
+    wait_us(JIRRICK_M5451_WAIT);
+    _clockPin = 0;
+    wait_us(JIRRICK_M5451_WAIT);
+}
+