This is FlexLEDTapeLibrary

Dependents:   LedVerTcpIp

Fork of ws2801 by Thomas Olsson

Committer:
hototogisu
Date:
Fri Dec 28 10:27:10 2012 +0000
Revision:
8:28d3f6703e22
This is FlexLEDTapeLibrary

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hototogisu 8:28d3f6703e22 1 #include "a101.h"
hototogisu 8:28d3f6703e22 2 #include "mbed.h"
hototogisu 8:28d3f6703e22 3
hototogisu 8:28d3f6703e22 4 int padding;
hototogisu 8:28d3f6703e22 5
hototogisu 8:28d3f6703e22 6 a101::a101(PinName CKI, PinName SDI, int ledLength, int tapeLength) : _CKI(CKI), _SDI(SDI), _ledLength(ledLength), _tapeLength(tapeLength) {
hototogisu 8:28d3f6703e22 7 clear();
hototogisu 8:28d3f6703e22 8 }
hototogisu 8:28d3f6703e22 9
hototogisu 8:28d3f6703e22 10 void a101::post(int *strip_colors) {
hototogisu 8:28d3f6703e22 11 for (int i = 0; i < 32; i++) {
hototogisu 8:28d3f6703e22 12 padding0();
hototogisu 8:28d3f6703e22 13 }
hototogisu 8:28d3f6703e22 14
hototogisu 8:28d3f6703e22 15 wait_us(RESET_DERAY);
hototogisu 8:28d3f6703e22 16
hototogisu 8:28d3f6703e22 17 for (int tapeNum = 0; tapeNum < _tapeLength; tapeNum++) {
hototogisu 8:28d3f6703e22 18 for(int ledNum = 0; ledNum < _ledLength; ledNum++) {
hototogisu 8:28d3f6703e22 19 operate();
hototogisu 8:28d3f6703e22 20 for (int color = 0; color <= 2; color++) {
hototogisu 8:28d3f6703e22 21 int color_level = (strip_colors[tapeNum*24+ledNum] & (0xff << (8*color))) >> (8*color);
hototogisu 8:28d3f6703e22 22 for (int color_bit = 7; color_bit >= 0; color_bit--) {
hototogisu 8:28d3f6703e22 23 if (color_level & (1 << color_bit)) padding1();
hototogisu 8:28d3f6703e22 24 else padding0();
hototogisu 8:28d3f6703e22 25 }
hototogisu 8:28d3f6703e22 26 }
hototogisu 8:28d3f6703e22 27 }
hototogisu 8:28d3f6703e22 28 }
hototogisu 8:28d3f6703e22 29 for (padding = 0; padding < 12*_ledLength*_tapeLength; padding++) {
hototogisu 8:28d3f6703e22 30 padding1();
hototogisu 8:28d3f6703e22 31 }
hototogisu 8:28d3f6703e22 32 }
hototogisu 8:28d3f6703e22 33
hototogisu 8:28d3f6703e22 34 void a101::padding1() {
hototogisu 8:28d3f6703e22 35 _CKI = 0;
hototogisu 8:28d3f6703e22 36 _SDI = 1;
hototogisu 8:28d3f6703e22 37 _CKI = 1;
hototogisu 8:28d3f6703e22 38 }
hototogisu 8:28d3f6703e22 39
hototogisu 8:28d3f6703e22 40 void a101::padding0() {
hototogisu 8:28d3f6703e22 41 _CKI = 0;
hototogisu 8:28d3f6703e22 42 _SDI = 0;
hototogisu 8:28d3f6703e22 43 _CKI = 1;
hototogisu 8:28d3f6703e22 44 }
hototogisu 8:28d3f6703e22 45
hototogisu 8:28d3f6703e22 46 void a101::operate() {
hototogisu 8:28d3f6703e22 47 for (int i = 0; i < 8; i++) {
hototogisu 8:28d3f6703e22 48 padding1();
hototogisu 8:28d3f6703e22 49 }
hototogisu 8:28d3f6703e22 50 }
hototogisu 8:28d3f6703e22 51
hototogisu 8:28d3f6703e22 52 void a101::clear() {
hototogisu 8:28d3f6703e22 53 for (int i = 0; i < 32; i++) {
hototogisu 8:28d3f6703e22 54 padding0();
hototogisu 8:28d3f6703e22 55 }
hototogisu 8:28d3f6703e22 56
hototogisu 8:28d3f6703e22 57 wait_us(RESET_DERAY);
hototogisu 8:28d3f6703e22 58
hototogisu 8:28d3f6703e22 59 for (int tape = 0; tape < _tapeLength; tape++) {
hototogisu 8:28d3f6703e22 60 for (int led = 0; led < _ledLength; led++) {
hototogisu 8:28d3f6703e22 61 operate();
hototogisu 8:28d3f6703e22 62 for (int bit = 0; bit < 24; bit++) {
hototogisu 8:28d3f6703e22 63 padding0();
hototogisu 8:28d3f6703e22 64 }
hototogisu 8:28d3f6703e22 65 }
hototogisu 8:28d3f6703e22 66 }
hototogisu 8:28d3f6703e22 67 for (padding = 0; padding < 12*_ledLength*_tapeLength; padding++) {
hototogisu 8:28d3f6703e22 68 padding1();
hototogisu 8:28d3f6703e22 69 }
hototogisu 8:28d3f6703e22 70 }
hototogisu 8:28d3f6703e22 71