#region License
/* Copyright (c) 2005 Leslie Sanford
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to
* deal in the Software without restriction, including without limitation the
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
* sell copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#endregion
#region Contact
/*
* Leslie Sanford
* Email: jabberdabber@hotmail.com
*/
#endregion
using System;
using System.ComponentModel;
using System.Diagnostics;
namespace Sanford.Multimedia.Midi
{
#region System Common Message Types
///
/// Defines constants representing the various system common message types.
///
public enum SysCommonType
{
///
/// Represents the MTC system common message type.
///
MidiTimeCode = 0xF1,
///
/// Represents the song position pointer type.
///
SongPositionPointer,
///
/// Represents the song select type.
///
SongSelect,
///
/// Represents the tune request type.
///
TuneRequest = 0xF6
}
#endregion
///
/// Represents MIDI system common messages.
///
[ImmutableObject(true)]
public sealed class SysCommonMessage : ShortMessage
{
#region SysCommonMessage Members
#region Construction
///
/// Initializes a new instance of the SysCommonMessage class with the
/// specified type.
///
///
/// The type of SysCommonMessage.
///
public SysCommonMessage(SysCommonType type)
{
msg = (int)type;
#region Ensure
Debug.Assert(SysCommonType == type);
#endregion
}
///
/// Initializes a new instance of the SysCommonMessage class with the
/// specified type and the first data value.
///
///
/// The type of SysCommonMessage.
///
///
/// The first data value.
///
///
/// If data1 is less than zero or greater than 127.
///
public SysCommonMessage(SysCommonType type, int data1)
{
msg = (int)type;
msg = PackData1(msg, data1);
#region Ensure
Debug.Assert(SysCommonType == type);
Debug.Assert(Data1 == data1);
#endregion
}
///
/// Initializes a new instance of the SysCommonMessage class with the
/// specified type, first data value, and second data value.
///
///
/// The type of SysCommonMessage.
///
///
/// The first data value.
///
///
/// The second data value.
///
///
/// If data1 or data2 is less than zero or greater than 127.
///
public SysCommonMessage(SysCommonType type, int data1, int data2)
{
msg = (int)type;
msg = PackData1(msg, data1);
msg = PackData2(msg, data2);
#region Ensure
Debug.Assert(SysCommonType == type);
Debug.Assert(Data1 == data1);
Debug.Assert(Data2 == data2);
#endregion
}
internal SysCommonMessage(int message)
{
this.msg = message;
}
#endregion
#region Methods
///
/// Returns a value for the current SysCommonMessage suitable for use
/// in hashing algorithms.
///
///
/// A hash code for the current SysCommonMessage.
///
public override int GetHashCode()
{
return msg;
}
///
/// Determines whether two SysCommonMessage instances are equal.
///
///
/// The SysCommonMessage to compare with the current SysCommonMessage.
///
///
/// true if the specified SysCommonMessage is equal to the
/// current SysCommonMessage; otherwise, false.
///
public override bool Equals(object obj)
{
#region Guard
if(!(obj is SysCommonMessage))
{
return false;
}
#endregion
SysCommonMessage message = (SysCommonMessage)obj;
return (this.SysCommonType == message.SysCommonType &&
this.Data1 == message.Data1 &&
this.Data2 == message.Data2);
}
#endregion
#region Properties
///
/// Gets the SysCommonType.
///
public SysCommonType SysCommonType
{
get
{
return (SysCommonType)UnpackStatus(msg);
}
}
///
/// Gets the first data value.
///
public int Data1
{
get
{
return UnpackData1(msg);
}
}
///
/// Gets the second data value.
///
public int Data2
{
get
{
return UnpackData2(msg);
}
}
///
/// Gets the MessageType.
///
public override MessageType MessageType
{
get
{
return MessageType.SystemCommon;
}
}
#endregion
#endregion
}
}