TLIGHT_PRODUCTS / WS281X
Revision:
22:0846aefbeeae
Parent:
21:77275089d837
Child:
23:d4061c4b6238
--- a/WS281X.cpp	Fri Aug 26 17:02:02 2016 +0000
+++ b/WS281X.cpp	Fri Aug 26 17:09:32 2016 +0000
@@ -234,7 +234,7 @@
 static inline __attribute__((always_inline))
 void _delay(int value)
 {
-    do { __nop(); } while (--value);
+    do { _nop1(); } while (--value);
 }
 #endif
 
@@ -365,25 +365,27 @@
 // 指定位置のピクセルへ色配列を指定サイズ分をコピーする
 void WS281X::setColor(int index, RGBColor *color, int len)
 {
-    if (!_pixels || len < 1 || (uint16_t)index >= _numPixels)
-        return;
-    if (index + len > _numPixels)
-        len = _numPixels - index;
-    memcpy(&_pixels[index], color, len * sizeof(_pixels[0]));
+    if (_pixels && len > 0 && (uint16_t)index < _numPixels)
+    {
+        if (index + len > _numPixels)
+            len = _numPixels - index;
+        memcpy(&_pixels[index], color, len * sizeof(_pixels[0]));
+    }
 }
 
 void WS281X::setColor(int index, HSVColor *color, int len)
 {
-    if (!_pixels || len < 1 || (uint16_t)index >= _numPixels)
-        return;
-    if (index + len > _numPixels)
-        len = _numPixels - index;
-    do
+    if (_pixels && len > 0 && (uint16_t)index < _numPixels)
     {
-        _pixels[index] = *color;
-        ++index;
-        ++color;
-    } while (--len);
+        if (index + len > _numPixels)
+            len = _numPixels - index;
+        do
+        {
+            _pixels[index] = *color;
+            ++index;
+            ++color;
+        } while (--len);
+    }
 }
 
 // 指定位置のピクセルから指定色を指定サイズ分書き込む
@@ -403,19 +405,19 @@
 // 先頭から指定サイズ分のブロックをバッファの最後までコピーする
 void WS281X::repeatBlock(int block_size)
 {
-    if (!_pixels || block_size < 1 || block_size >= _numPixels)
-        return;
-
-    RGBColor *dest = _pixels + block_size;
-    int left = _numPixels - block_size;
-    while (left > block_size)
+    if (_pixels && block_size > 0 && block_size < _numPixels)
     {
-        memcpy(dest, _pixels, block_size * sizeof(_pixels[0]));
-        dest += block_size;
-        left -= block_size;
-        block_size <<= 1;       // 次回は2倍のサイズの転送
+        RGBColor *dest = _pixels + block_size;
+        int left = _numPixels - block_size;
+        while (left > block_size)
+        {
+            memcpy(dest, _pixels, block_size * sizeof(_pixels[0]));
+            dest += block_size;
+            left -= block_size;
+            block_size <<= 1;       // 次回は2倍のサイズの転送
+        }
+        memcpy(dest, _pixels, left * sizeof(_pixels[0]));
     }
-    memcpy(dest, _pixels, left * sizeof(_pixels[0]));
 }
 
 // 指定色でバッファを埋める