Written by Ayrton Leyssens DMX library, bitbang method for LPC1768
DMX.cpp
- Committer:
- Ayrton_L
- Date:
- 2016-03-09
- Revision:
- 0:55edcc97ba17
- Child:
- 1:4eb21fcb621a
File content as of revision 0:55edcc97ba17:
#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]; } }