TLIGHT_PRODUCTS / WS281X
Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers WS281X.h Source File

WS281X.h

00001 /* WS281X.h (for LPC82X/STM32F0x/STM32F446/STM32F746xx)
00002  * mbed Microcontroller Library
00003  * Copyright (c) 2016 muetch, t.kuroki
00004  * Allrights reserved.
00005  *
00006  * Rev 0.97 2016-09-07
00007  * Rev 0.98 2016-09-08
00008  */
00009 
00010 #pragma once
00011 
00012 #ifndef WS281X_H
00013 #define WS281X_H
00014 
00015 //#include "mbed.h"
00016 #include "PixelBuffer.h"
00017 
00018 //----------------------------------------------------------------------------
00019 /**
00020  * WS281X
00021  */
00022 class WS281X : public RGBPixels
00023 {
00024 public:
00025     /**
00026         Order of r, g and b bytes
00027     */
00028     enum RGBOrder
00029     {
00030         RGB = 0, RBG, GRB, GBR, BRG, BGR
00031     };
00032 
00033     /**
00034     *   Initializes the addressable led bus
00035     *
00036     *   @param txPin - The output pin on wich the addressable leds are connected
00037     *   @param pinMode - The output pin mode PullUp, PullDown, PullNone, OpenDrain
00038     *   @param maxPixels - Number of the addressable leds
00039     *   @param RGBOrder - The order in wich the r, g and b bytes are expected
00040     */
00041     WS281X(PinName txPin, PinMode pinMode = PullNone, int maxPixels = MAX_PIXELS, RGBOrder rgbOrder = WS281X::RGB);
00042     WS281X(PinName txPin, PinMode pinMode = PullNone, RGBColor *buffer = 0, int maxPixels = 0, RGBOrder rgbOrder = WS281X::RGB);
00043 
00044     RGBOrder rgbOrder() { return _rgb_order; }
00045     RGBOrder rgbOrder(RGBOrder order);
00046 
00047     void show();
00048     void show(const RGBColor color);
00049 
00050     RGBColor operator[](int index) const
00051     {
00052         if (_pixels && (uint16_t)index < _num_pixels)
00053             return _pixels[index];
00054         return _dummy_pixel;
00055     }
00056 
00057     RGBColor& operator[](int index)
00058     {
00059         if (_pixels && (uint16_t)index < _num_pixels)
00060             return _pixels[index];
00061         return _dummy_pixel;
00062     }
00063 
00064     operator RGBColor*() const { return _pixels; }
00065 
00066 protected:
00067 
00068 private:
00069     PinName  _txPin;
00070     gpio_t   _gpio;
00071     RGBOrder _rgb_order;
00072     int _1st, _2nd, _3rd;
00073 
00074 #if defined(TARGET_NXP)
00075     typedef uint32_t regsize_t;
00076 #elif defined(TARGET_STM32F0) || defined(TARGET_STM32F1)
00077     typedef uint32_t regsize_t;
00078 #elif defined(TARGET_STM)
00079     typedef uint16_t regsize_t;
00080 #else
00081 #error "not supported CPU!!"
00082 #endif
00083 #if defined(TARGET_STM)
00084     void pin_mode_ex(PinName pin, PinMode mode);
00085 #endif
00086     void pin_init(PinName txPin, PinMode pinMode);
00087     void writeByte(__IO regsize_t *reg_set, __IO regsize_t *reg_clr, regsize_t *mask, uint8_t value);
00088 };
00089 
00090 //----------------------------------------------------------------------------
00091 #endif      // end of WS281X_H