Revert "Merge pull request #22 from sticilface/Fork-In-Eye-UART"

This reverts commit da5a8b9213, reversing
changes made to 36cb67dac9.
This commit is contained in:
Makuna
2015-09-03 14:23:56 -07:00
parent 2652a9db21
commit db86f7dd6f
5 changed files with 13 additions and 214 deletions

View File

@@ -32,31 +32,12 @@ License along with NeoPixel. If not, see
#include "NeoPixelBus.h" #include "NeoPixelBus.h"
#if defined(ESP8266) #if defined(ESP8266)
// due to linker overriding the ICACHE_RAM_ATTR for cpp files, these methods are
#ifdef ESPUARTWS2812 // moved into a C file so the attribute will be applied correctly
extern "C" { extern "C" void ICACHE_RAM_ATTR send_pixels_800(uint8_t* pixels, uint8_t* end, uint8_t pin);
#include "eagle_soc.h" extern "C" void ICACHE_RAM_ATTR send_pixels_400(uint8_t* pixels, uint8_t* end, uint8_t pin);
#include "uart_register.h"
#include <Arduino.h>
}
#define UART_INV_MASK (0x3f<<19)
#define UART 1
extern void ICACHE_RAM_ATTR send_pixels_UART(uint8_t* pixels, uint8_t* end, bool force);
#else
// due to linker overriding the ICACHE_RAM_ATTR for cpp files, these methods are
// moved into a C file so the attribute will be applied correctly
extern "C" void ICACHE_RAM_ATTR send_pixels_800(uint8_t* pixels, uint8_t* end, uint8_t pin);
extern "C" void ICACHE_RAM_ATTR send_pixels_400(uint8_t* pixels, uint8_t* end, uint8_t pin);
#endif
#endif #endif
NeoPixelBus::NeoPixelBus(uint16_t n, uint8_t p, uint8_t t) : NeoPixelBus::NeoPixelBus(uint16_t n, uint8_t p, uint8_t t) :
_countPixels(n), _countPixels(n),
_sizePixels(n * 3), _sizePixels(n * 3),
@@ -65,11 +46,7 @@ NeoPixelBus::NeoPixelBus(uint16_t n, uint8_t p, uint8_t t) :
_activeAnimations(0), _activeAnimations(0),
_flagsPixels(t) _flagsPixels(t)
{ {
#ifndef ESPUARTWS2812
setPin(p); setPin(p);
#endif
_pixels = (uint8_t *)malloc(_sizePixels); _pixels = (uint8_t *)malloc(_sizePixels);
if (_pixels) if (_pixels)
@@ -92,57 +69,16 @@ NeoPixelBus::~NeoPixelBus()
if (_animations) if (_animations)
free(_animations); free(_animations);
#ifndef ESPUARTWS2812
pinMode(_pin, INPUT); pinMode(_pin, INPUT);
#endif
} }
void NeoPixelBus::Begin(void)
void NeoPixelBus::FillUart(void) { {
uint8_t* p = _pixels;
uint8_t* end = p + _sizePixels;
send_pixels_UART(p, end, false);
}
void NeoPixelBus::Begin(void)
{
#ifdef ESPUARTWS2812
/* Serial rate is 4x 800KHz for WS2811 */
#ifdef INCLUDE_NEO_KHZ400_SUPPORT
if ((_flagsPixels & NEO_SPDMASK) == NEO_KHZ800)
{
// 800 Support
Serial1.begin(3200000, SERIAL_6N1, SERIAL_TX_ONLY);
} else {
// 400 Support
Serial1.begin(1600000, SERIAL_6N1, SERIAL_TX_ONLY);
}
#else
Serial1.begin(3200000, SERIAL_6N1, SERIAL_TX_ONLY);
#endif
CLEAR_PERI_REG_MASK(UART_CONF0(UART), UART_INV_MASK);
//SET_PERI_REG_MASK(UART_CONF0(UART), UART_TXD_INV);
SET_PERI_REG_MASK(UART_CONF0(UART), (BIT(22)));
#else
pinMode(_pin, OUTPUT); pinMode(_pin, OUTPUT);
digitalWrite(_pin, LOW); digitalWrite(_pin, LOW);
#endif
Dirty();
}
Dirty();
}
void NeoPixelBus::Show(void) void NeoPixelBus::Show(void)
{ {
@@ -175,9 +111,7 @@ void NeoPixelBus::Show(void)
// state, computes 'pin high' and 'pin low' values, and writes these back // state, computes 'pin high' and 'pin low' values, and writes these back
// to the PORT register as needed. // to the PORT register as needed.
#ifndef ESPUARTWS2812
noInterrupts(); // Need 100% focus on instruction timing noInterrupts(); // Need 100% focus on instruction timing
#endif
#ifdef __AVR__ #ifdef __AVR__
@@ -790,55 +724,15 @@ void NeoPixelBus::Show(void)
if ((_flagsPixels & NEO_SPDMASK) == NEO_KHZ800) if ((_flagsPixels & NEO_SPDMASK) == NEO_KHZ800)
{ {
#endif #endif
#ifndef ESPUARTWS2812
// 800 KHz bitstream // 800 KHz bitstream
send_pixels_800(p, end, _pin); send_pixels_800(p, end, _pin);
#else
send_pixels_UART(p, end, true);
// char buff[4];
// do
// {
// uint8_t subpix = *p++;
// buff[0] = data[(subpix >> 6) & 3];
// buff[1] = data[(subpix >> 4) & 3];
// buff[2] = data[(subpix >> 2) & 3];
// buff[3] = data[subpix & 3];
// Serial1.write(buff, sizeof(buff));
// } while (p < end);
#endif
#ifdef INCLUDE_NEO_KHZ400_SUPPORT #ifdef INCLUDE_NEO_KHZ400_SUPPORT
} }
else else
{ {
// 400 kHz bitstream
#ifndef ESPUARTWS2812
// 800 KHz bitstream
send_pixels_400(p, end, _pin); send_pixels_400(p, end, _pin);
#else
char buff[4];
do
{
uint8_t subpix = *p++;
buff[0] = data[(subpix >> 6) & 3];
buff[1] = data[(subpix >> 4) & 3];
buff[2] = data[(subpix >> 2) & 3];
buff[3] = data[subpix & 3];
Serial1.write(buff, sizeof(buff));
} while (p < end);
#endif
} }
#endif #endif
@@ -1079,10 +973,7 @@ void NeoPixelBus::Show(void)
#endif // end Architecture select #endif // end Architecture select
#ifndef ESPUARTWS2812
interrupts(); interrupts();
#endif
ResetDirty(); ResetDirty();
_endTime = micros(); // Save EOD time for latch on next call _endTime = micros(); // Save EOD time for latch on next call
} }

View File

@@ -20,8 +20,6 @@ License along with NeoPixel. If not, see
#include <Arduino.h> #include <Arduino.h>
#include "RgbColor.h" #include "RgbColor.h"
#define ESPUARTWS2812 // drive neopixels by UART on GPIO2 on ESP8266 thanks to Forkineye. https://github.com/forkineye/ESPixelStick
// '_flagsPixels' flags for LED _pixels (third parameter to constructor): // '_flagsPixels' flags for LED _pixels (third parameter to constructor):
#define NEO_RGB 0x00 // Wired for RGB data order #define NEO_RGB 0x00 // Wired for RGB data order
#define NEO_GRB 0x01 // Wired for GRB data order #define NEO_GRB 0x01 // Wired for GRB data order
@@ -37,7 +35,6 @@ License along with NeoPixel. If not, see
// NeoPixelBus library include to support the slower bus speeds // NeoPixelBus library include to support the slower bus speeds
//#define INCLUDE_NEO_KHZ400_SUPPORT //#define INCLUDE_NEO_KHZ400_SUPPORT
class NeoPixelBus class NeoPixelBus
{ {
public: public:
@@ -61,7 +58,7 @@ public:
{ {
ClearTo(c.R, c.G, c.B); ClearTo(c.R, c.G, c.B);
} }
void FillUart();
bool IsDirty() bool IsDirty()
{ {
return (_flagsPixels & NEO_DIRTY); return (_flagsPixels & NEO_DIRTY);
@@ -123,12 +120,6 @@ private:
uint8_t _pinMask; // Output PORT bitmask uint8_t _pinMask; // Output PORT bitmask
#endif #endif
#ifdef ESPUARTWS2812
/* 6 bit UART lookup table, first 2 bits ignored. Start and stop bits are part of the pixel stream. */
const char data[4] = { 0b00110111, 0b00000111, 0b00110100, 0b00000100 };
#endif
struct FadeAnimation struct FadeAnimation
{ {
uint16_t time; uint16_t time;

View File

@@ -36,12 +36,6 @@ inline uint32_t _getCycleCount()
#define CYCLES_400_T1H (F_CPU / 833333) #define CYCLES_400_T1H (F_CPU / 833333)
#define CYCLES_400 (F_CPU / 400000) #define CYCLES_400 (F_CPU / 400000)
#include "eagle_soc.h"
#include "uart_register.h"
void ICACHE_RAM_ATTR send_pixels_800(uint8_t* pixels, uint8_t* end, uint8_t pin) void ICACHE_RAM_ATTR send_pixels_800(uint8_t* pixels, uint8_t* end, uint8_t pin)
{ {
const uint32_t pinRegister = _BV(pin); const uint32_t pinRegister = _BV(pin);

View File

@@ -1,64 +0,0 @@
/*
NeoPixelEsp8266.h - NeoPixel library helper functions for Esp8266 using cycle count
Copyright (c) 2015 Michael C. Miller. All right reserved.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include <Arduino.h>
#include <eagle_soc.h>
#include "uart_register.h"
#if defined(ESP8266)
#define UART_INV_MASK (0x3f<<19)
#define UART 1
const char data[4] = { 0b00110111, 0b00000111, 0b00110100, 0b00000100 };
void ICACHE_RAM_ATTR send_pixels_UART(uint8_t* pixels, uint8_t* end, bool force)
{
char buff[4];
//uint8_t count = 0;
// static uint8_t* position = NULL;
// if (position != NULL && !force ) {
// pixels = position;
// } else if (position == NULL && !force ) {
// return;
// }
do
{
uint8_t subpix = *pixels++;
// position = pixels;
// count++;
buff[0] = data[(subpix >> 6) & 3];
buff[1] = data[(subpix >> 4) & 3];
buff[2] = data[(subpix >> 2) & 3];
buff[3] = data[subpix & 3];
Serial1.write(buff, sizeof(buff));
} while (pixels < end );
// if ( pixels == end) { position = NULL; }
}
#endif

View File

@@ -1,8 +1,8 @@
#include <NeoPixelBus.h> #include <NeoPixelBus.h>
#define pixelCount 300 #define pixelCount 4
NeoPixelBus strip = NeoPixelBus(pixelCount, 2); NeoPixelBus strip = NeoPixelBus(pixelCount, 8);
uint16_t effectState = 0; uint16_t effectState = 0;
@@ -13,7 +13,6 @@ void setup()
SetRandomSeed(); SetRandomSeed();
} }
uint32_t update_strip_time;
void loop() void loop()
{ {
@@ -35,18 +34,6 @@ void loop()
delay(31); // ~30hz change cycle delay(31); // ~30hz change cycle
} }
if ( (millis() - update_strip_time > 30) ) {
strip.UpdateAnimations();
strip.Show(); // takes 6ms with 200, take 12ms with 400 ----> so 100 takes 3ms.
// one LED takes 30uS of nointeruppts, 100 takes 3ms.
update_strip_time = millis();
}
strip.FillUart();
} }
void FadeInFadeOutRinseRepeat(uint8_t peak) void FadeInFadeOutRinseRepeat(uint8_t peak)