Written by Ayrton Leyssens DMX library, bitbang method for LPC1768

Dependents:   ArtnetDMX

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];
+    }
+}