Written by Ayrton Leyssens DMX library, bitbang method for LPC1768
Diff: DMX.cpp
- Revision:
- 0:55edcc97ba17
- Child:
- 1:4eb21fcb621a
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/DMX.cpp Wed Mar 09 03:58:29 2016 +0000 @@ -0,0 +1,121 @@ +#include "DMX.h" + +DMX::DMX(PinName pin) : _pin(pin) +{ + this->I32_m_BreakTime = 88; + this->I32_m_MABTime = 8; + this->I32_m_StartCodeTime = 44; + this->I32_m_BitTime = 4; + this->I32_m_ChannelCounter = 0; + this->I32_m_BitCounter = 0; + uint32_t i; + for(i = 0; i < 512; i++) + { + this->I8_m_Data[i] = 0; + } + this->_pin = 0; + return; +} + +DMX::~DMX() +{ + delete[] &I32_m_BreakTime; + delete[] &I32_m_MABTime; + delete[] &I32_m_StartCodeTime; + delete[] &I32_m_BitTime; + delete[] &_pin; + delete[] &I8_m_Data; + return; +} + +void DMX::V_SendDMX() +{ + _pin = 0; + t.attach_us(this, &DMX::V_SendMAB, 88); +} + +void DMX::V_SendMAB() +{ + _pin = 1; + t.detach(); + t.attach_us(this, &DMX::V_SendSC, 8); +} + +void DMX::V_SendSC() +{ + _pin = 0; + t.detach(); + t.attach_us(this, &DMX::V_SendData, 44); +} + +void DMX::V_SendData() +{ + if(I32_m_BitCounter == 0) + { + _pin = 0; + I32_m_BitCounter++; + t.detach(); + t.attach_us(this, &DMX::V_SendData, 4); + } + else if(I32_m_BitCounter == 9 ) + { + _pin = 1; + I32_m_BitCounter = 0; + I32_m_ChannelCounter++; + t.detach(); + t.attach_us(this, &DMX::V_SendData, 8); + } + else + { + if(I32_m_ChannelCounter < 511) + { + if(I8_m_Data[I32_m_ChannelCounter] & 0x01 == 0x01) + { + _pin = 1; + } + else if(I8_m_Data[I32_m_ChannelCounter] & 0x01 == 0x00) + { + _pin =0; + } + I8_m_Data[I32_m_ChannelCounter] = I8_m_Data[I32_m_ChannelCounter] >> 1; + } + else + { + I32_m_ChannelCounter = 0; + I32_m_BitCounter = 0; + DMX::V_SendDMX(); + } + I32_m_BitCounter++; + t.detach(); + t.attach_us(this, &DMX::V_SendData, 4); + } +} + +void DMX::V_SetBreak(uint32_t I32_BreakTime) +{ + I32_m_BreakTime = I32_BreakTime; +} + +void DMX::V_SetMAB(uint32_t I32_MABTime) +{ + I32_m_MABTime = I32_MABTime; +} + +void DMX::V_SetSC(uint32_t I32_StartCodeTime) +{ + I32_m_StartCodeTime = I32_StartCodeTime; +} + +void DMX::V_SetBitTime(uint32_t I32_BitTime) +{ + I32_m_BitTime = I32_BitTime; +} + +void DMX::V_SetData(uint8_t I8_Data[512]) +{ + uint32_t i; + for(i = 0; i < 512; i++) + { + I8_m_Data[i] = I8_Data[i]; + } +}