Written by Ayrton Leyssens DMX library, bitbang method for LPC1768
DMX.cpp
- Committer:
- Ayrton_L
- Date:
- 2016-03-18
- Revision:
- 5:256845339155
- Parent:
- 4:54754f9736f1
- Child:
- 6:622a294f70ab
File content as of revision 5:256845339155:
#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] = 60; } 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; wait_us(88); DMX::V_SendMAB(); } void DMX::V_SendMAB() { _pin = 1; wait_us(8); DMX::V_SendSC(); } void DMX::V_SendSC() { _pin = 0; wait_us(44); DMX::V_SendData();; } void DMX::V_SendData() { if(I32_m_BitCounter == 0) { _pin = 0; I32_m_BitCounter++; wait_us(4); DMX::V_SendData(); } else if(I32_m_BitCounter == 9 ) { _pin = 1; I32_m_BitCounter = 0; I32_m_ChannelCounter++; wait_us(8); DMX::V_SendData(); } else { if(I32_m_ChannelCounter < 512) { 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; I32_m_BitCounter++; wait_us(4); DMX::V_SendData(); } else { I32_m_ChannelCounter = 0; I32_m_BitCounter = 0; } } } 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]; } }