diff --git a/DMX_Interface.cpp b/DMX_Interface.cpp new file mode 100644 index 0000000..58d4230 --- /dev/null +++ b/DMX_Interface.cpp @@ -0,0 +1,21 @@ +#include +//#include "UART.h" +#include +#include "SPI_DMX.h" + +# define measure_length(type) ((char *)(&type+1)-(char*)(&type)) + +/* demo.c: My first C program on a Linux */ +int main(void) +{ + printf("Hello! This is a test prgoram.\n"); + SPI_DMX spi1(0); + spi1.nice(); + + unsigned char message[4] = {0x55,0x66,0x55,0x66}; + //uart.TX_Bytes(message,measure_length(message)); + + spi1.TX_Bytes(message,4); + + return 0; +} diff --git a/DMX_Interface_main b/DMX_Interface_main new file mode 100644 index 0000000..be9a483 Binary files /dev/null and b/DMX_Interface_main differ diff --git a/SPI_DMX.cpp b/SPI_DMX.cpp new file mode 100644 index 0000000..84803be --- /dev/null +++ b/SPI_DMX.cpp @@ -0,0 +1,77 @@ +#include "SPI_DMX.h" + +#define SPI_FREQHz (8.0*8.0e5) +#define SPI_BYTEus ((8.0e6/SPI_FREQHz)*1.6) //weird translation factor idk +#define DMX_BITus 4 +#define BREAKus (25*DMX_BITus) +#define MABus (3*DMX_BITus) +#define STARTus (DMX_BITus) +#define STOPus (2*DMX_BITus) + +#define BY_HIGH 0x00 +#define BY_LOW 0xFF + + + +SPI_DMX::SPI_DMX(unsigned char serial_port) +{ + this->serial_port = serial_port; + for(int i = 0; i < BREAKus/SPI_BYTEus; i++) + { + this->message[i] = BY_LOW; + } + for(int i = BREAKus/SPI_BYTEus; i < (BREAKus+MABus)/SPI_BYTEus; i++) + { + this->message[i] = BY_HIGH; + } + wiringPiSPISetup(serial_port,SPI_FREQHz); + printf("%f\n",SPI_FREQHz); +} + +SPI_DMX::~SPI_DMX() +{ + +} + +void SPI_DMX::TX_Bytes(unsigned char* tx_buffer, unsigned char tx_size) +{ + //unsigned int SPIbits = (BREAKus+MABus+(size*(STARTus+8*DMX_BITus+STOPus)))/SPI_BITus; + //unsigned char message[SPIbits]; + + int messind = (BREAKus+MABus)/SPI_BYTEus; + printf("%i\n",messind); + + for(int b = 0; b < tx_size; b++) + { + for(int i = 0; i < STARTus/SPI_BYTEus; i++) + { + message[messind++] = BY_LOW; + } + for(int i = 0; i < 8; i++) + { + unsigned char txbit = tx_buffer[b]; + txbit = ~((((txbit >> i) & 0x01) ^ 0x01) * 0xFF); //NEEDS TO BE ADJUSTED IF LOGIC LEVEL IS REVERSED + for(int i = 0; i < DMX_BITus/SPI_BYTEus; i++) + { + message[messind++] = txbit; + } + } + for(int i = 0; i < STOPus/SPI_BYTEus; i++) + { + message[messind++] = BY_HIGH; + } + } + printf("%i\n",messind); + /*messind = 0; + for(int i = 0; i < 8; i++) + { + unsigned char txbit = tx_buffer[0]; + txbit = ((txbit >> i) & 0x01) * 0xFF; + for(int i = 0; i < DMX_BITus/SPI_BYTEus; i++) + { + message[messind++] = txbit; + } + printf("%u %u %f %i \n",tx_buffer[0],txbit,DMX_BITus/SPI_BYTEus,messind); + } */ + wiringPiSPIDataRW(this->serial_port, message, messind-1); +} diff --git a/SPI_DMX.h b/SPI_DMX.h new file mode 100644 index 0000000..737175b --- /dev/null +++ b/SPI_DMX.h @@ -0,0 +1,16 @@ +#include +#include + + +class SPI_DMX +{ +private: + int uart_filestream; + unsigned char serial_port; + unsigned char message[5000]; +public: + SPI_DMX(unsigned char serial_port); + ~SPI_DMX(); + void TX_Bytes(unsigned char* tx_buffer, unsigned char tx_size); + void nice() {printf("nice\n");}; +}; diff --git a/blink.cpp b/blink.cpp new file mode 100644 index 0000000..b08fba5 --- /dev/null +++ b/blink.cpp @@ -0,0 +1,12 @@ +#include +int main (void) +{ + wiringPiSetup () ; + pinMode (0, OUTPUT) ; + for (;;) + { + digitalWrite (0, HIGH) ; delay (500) ; + digitalWrite (0, LOW) ; delay (500) ; + } + return 0 ; +}