Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
DMXPacket.c
00001 /* DMX Packet Library 00002 * Nathan Lasseter (User_4574) 2011 00003 * Released unlicenced 00004 * http://www.dmx512-online.com/packt.html 00005 */ 00006 00007 #include "mbed.h" 00008 #include "DMXPacket.h" 00009 00010 void init(DigitalOut* dmx) { 00011 /* initialise */ 00012 *dmx = MARK; 00013 return; 00014 } 00015 00016 void sendBreak(DigitalOut* dmx) { 00017 /* BREAK */ 00018 *dmx = BREAK; 00019 wait_us(30 * PW); 00020 return; 00021 } 00022 00023 void sendMarkAfterBreak(DigitalOut* dmx) { 00024 /* MARK AFTER BREAK */ 00025 *dmx = MARK; 00026 wait_us(3 * PW); 00027 return; 00028 } 00029 00030 void sendStartCode(DigitalOut* dmx) { 00031 /* 1 START 8 DATA */ 00032 *dmx = BREAK; 00033 wait_us(9 * PW); 00034 00035 /* 2 STOP */ 00036 *dmx = MARK; 00037 wait_us(2 * PW); 00038 return; 00039 } 00040 00041 void sendChannelData(DigitalOut* dmx, char* channelData) { 00042 char i, data = *channelData; 00043 /* 1 START */ 00044 *dmx = BREAK; 00045 wait_us(PW); 00046 00047 /* 8 DATA */ 00048 for(i = 0xF0; i; i >>= 1) { 00049 *dmx = ((data & i) ? MARK : BREAK); 00050 wait_us(PW); 00051 } 00052 00053 /* 2 STOP */ 00054 *dmx = MARK; 00055 wait_us(2 * PW); 00056 return; 00057 } 00058 00059 void writePacket(DigitalOut* dmx, char* channelData, int channelCount) { 00060 int i; 00061 00062 /* BREAK */ 00063 sendBreak(dmx); 00064 00065 /* MARK AFTER BREAK */ 00066 sendMarkAfterBreak(dmx); 00067 00068 /* START CODE */ 00069 sendStartCode(dmx); 00070 00071 /* CHANNEL DATA */ 00072 for(i=0; i<channelCount; i++) { 00073 00074 /* MARK TIME BETWEEN FRAMES */ 00075 *dmx = MARK; 00076 wait_us(MTBF * PW); 00077 00078 /* CHANNEL DATA */ 00079 sendChannelData(dmx, channelData + i); 00080 } 00081 00082 /* MARK TIME BETWEEN PACKETS */ 00083 /* AND RETURN TO IDLE */ 00084 *dmx = MARK; 00085 wait_us(MTBP * PW); 00086 return; 00087 }
Generated on Thu Jul 14 2022 01:01:12 by
1.7.2