public static void sendMsg(System.IO.Ports.SerialPort port, DMXProMsgLabel label, byte[] data) { if (!port.IsOpen) { return; } List <byte> temp = new List <byte>(); temp.Add(msgStart); temp.Add((byte)label); temp.Add((byte)(data.Length & 0xff)); temp.Add((byte)(data.Length >> 8)); temp.AddRange(data); temp.Add(msgEnd); port.Write(temp.ToArray(), 0, temp.Count); }
/// <summary> /// construct any message /// this is a helper function and should not be called directly unless implementing a new type of message /// </summary> /// <param name="label">the enumeration label of the message you are sending</param> /// <param name="data">and pertinent data the message type requires</param> public void sendMsg(DMXProMsgLabel label, byte [] data) { if (!m_port.IsOpen) { return; } List <byte> temp = new List <byte>(); temp.Add(msgStart); temp.Add((byte)label); temp.Add((byte)(data.Length & 0xff)); temp.Add((byte)(data.Length >> 8)); temp.AddRange(data); temp.Add(msgEnd); m_port.Write(temp.ToArray(), 0, temp.Count); }
public DMXMessage(DMXProMsgLabel t, byte[] m) { message = m; type = t; }
public void decodeMessage(DMXProMsgLabel label, byte [] msg) { int len; switch (label) { case DMXProMsgLabel.GET_WIDGET_PARAMETERS_REPLY: //3 if (msg.Length < 5) { return; } UInt16 Firmware = (UInt16)(msg[0] | (msg[1] << 8)); double DMXOutBreakTime = 10.67 * msg[2]; double DMXOutMarkTime = 10.67 * msg[3]; int DMXOutRate = msg[4]; len = msg.Length - 5; byte[] UserConfigData = new byte[len]; Array.Copy(msg, 5, UserConfigData, 0, len); if (WidgetParametersReceived != null) { WidgetParametersReceived(this, new WidgetParameterArgs(Firmware, DMXOutBreakTime, DMXOutMarkTime, DMXOutRate, UserConfigData)); } break; case DMXProMsgLabel.GET_WIDGET_SERIAL_NUMBER_REPLY: //10 UInt32 SerialNumber; SerialNumber = (UInt32)(msg[0] | (msg[1] << 8) | (msg[2] << 16) | (msg[3] << 24)); if (SerialNumberReceived != null) { SerialNumberReceived(this, new SerialNumberArgs(SerialNumber)); } break; case DMXProMsgLabel.PROGRAM_FLASH_PAGE_REPLY: bool success; string result = Encoding.UTF8.GetString(msg, 0, 4); if (result == "TRUE") { success = true; } else if (result == "FALSE") { success = false; } else { throw new Exception(string.Format("Program Flash Page Responded with neither TRUE nor FALSE({0})", result)); } if (FlashReplyRecieved != null) { FlashReplyRecieved(this, new FlashReplyArgs(success)); } break; case DMXProMsgLabel.RECEIVED_DMX_CHANGE_OF_STATE_PACKET: throw new NotImplementedException("Received DMX Change of State Packet is more effort than i want to put in at 12:26"); //break; case DMXProMsgLabel.RECEIVED_DMX_PACKET: /*The Widget sends this message to the PC unsolicited, * whenever the Widget receives a DMX or * RDM packet from the DMX port, * and the Receive DMX on Change mode is 'Send always'.*/ bool valid = (bool)((msg[0] & 0x01) == 1); len = msg.Length - 1; byte[] levels = new byte[len]; Array.Copy(msg, 1, levels, 0, len); if (DMXLevelsRecieved != null) { DMXLevelsRecieved(this, new DMXLevelArgs(valid, levels)); } break; } }
/// <summary> /// construct any message /// this is a helper function and should not be called directly unless implementing a new type of message /// </summary> /// <param name="label">the enumeration label of the message you are sending</param> /// <param name="data">and pertinent data the message type requires</param> public void sendMsg(DMXProMsgLabel label,byte []data) { if (!m_port.IsOpen) return; List<byte> temp = new List<byte>(); temp.Add(msgStart); temp.Add((byte)label); temp.Add((byte)(data.Length & 0xff)); temp.Add((byte)(data.Length >>8)); temp.AddRange(data); temp.Add(msgEnd); m_port.Write(temp.ToArray(), 0, temp.Count); }
public void decodeMessage(DMXProMsgLabel label, byte [] msg) { int len; switch (label) { case DMXProMsgLabel.GET_WIDGET_PARAMETERS_REPLY: //3 if (msg.Length < 5) return; UInt16 Firmware = (UInt16)(msg[0] | (msg[1] << 8)); double DMXOutBreakTime = 10.67 * msg[2]; double DMXOutMarkTime = 10.67 * msg[3]; int DMXOutRate = msg[4]; len = msg.Length - 5; byte[] UserConfigData = new byte[len]; Array.Copy(msg, 5, UserConfigData, 0, len); if (WidgetParametersReceived != null) WidgetParametersReceived(this, new WidgetParameterArgs(Firmware, DMXOutBreakTime, DMXOutMarkTime,DMXOutRate, UserConfigData)); break; case DMXProMsgLabel.GET_WIDGET_SERIAL_NUMBER_REPLY: //10 UInt32 SerialNumber; SerialNumber = (UInt32)(msg[0] | (msg[1] << 8) | (msg[2] << 16) | (msg[3] << 24)); if (SerialNumberReceived != null) SerialNumberReceived(this, new SerialNumberArgs(SerialNumber)); break; case DMXProMsgLabel.PROGRAM_FLASH_PAGE_REPLY: bool success; string result = Encoding.UTF8.GetString(msg, 0, 4); if (result == "TRUE") success = true; else if (result == "FALSE") success = false; else throw new Exception(string.Format("Program Flash Page Responded with neither TRUE nor FALSE({0})",result )); if (FlashReplyRecieved != null) FlashReplyRecieved(this, new FlashReplyArgs(success)); break; case DMXProMsgLabel.RECEIVED_DMX_CHANGE_OF_STATE_PACKET: throw new NotImplementedException("Received DMX Change of State Packet is more effort than i want to put in at 12:26"); //break; case DMXProMsgLabel.RECEIVED_DMX_PACKET: /*The Widget sends this message to the PC unsolicited, * whenever the Widget receives a DMX or * RDM packet from the DMX port, * and the Receive DMX on Change mode is 'Send always'.*/ bool valid = (bool)((msg[0] & 0x01) == 1); len = msg.Length - 1; byte[] levels = new byte[len]; Array.Copy(msg, 1, levels, 0, len); if (DMXLevelsRecieved != null) DMXLevelsRecieved(this, new DMXLevelArgs(valid, levels)); break; } }
public static void sendMsg(System.IO.Ports.SerialPort port, DMXProMsgLabel label, byte[] data) { if (!port.IsOpen) return; List<byte> temp = new List<byte>(); temp.Add(msgStart); temp.Add((byte)label); temp.Add((byte)(data.Length & 0xff)); temp.Add((byte)(data.Length >> 8)); temp.AddRange(data); temp.Add(msgEnd); port.Write(temp.ToArray(), 0, temp.Count); }