#if 0 #include "Particle.h" #include "../Input.h" #include "../colors.h" #include "../Static.h" volatile uint8_t DmxRxField[8]; volatile uint16_t DmxAddress; enum { IDLE, BREAK, STARTB, STARTADR }; volatile uint8_t gDmxState; class DMXInput: public InputSource { public: void init() { UCSR1B = (1<= sizeof(DmxRxField)) { gDmxState = IDLE; } } } virtual void update() override { bool hasUpdate = false; if (gDmxState == IDLE) { for(int i = 0; i < 8; i++) { if (m_lastReadFields[i] != DmxRxField[i]) { hasUpdate = true; m_lastReadFields[i] = DmxRxField[i]; } } } if (hasUpdate) { m_lastReadEvent = InputEvent(InputEvent::SetColor, {m_lastReadFields[0], m_lastReadFields[1], m_lastReadFields[2]}); } m_lastEvent = m_lastReadEvent; m_lastReadEvent = InputEvent(); } virtual InputEvent read() const override { return m_lastEvent; } private: InputEvent m_lastEvent; InputEvent m_lastReadEvent; uint8_t m_lastReadFields[8]; }; ISR(USART1_RX_vect) { DMXInput::handleInterrupt(); } #endif