From: <an...@us...> - 2008-01-28 11:55:37
|
Revision: 1317 http://mp-plugins.svn.sourceforge.net/mp-plugins/?rev=1317&view=rev Author: and-81 Date: 2008-01-28 03:55:35 -0800 (Mon, 28 Jan 2008) Log Message: ----------- Modified Paths: -------------- trunk/plugins/IR Server Suite/Applications/Translator/CopyDataWM.cs trunk/plugins/IR Server Suite/Applications/Translator/Forms/MainForm.Designer.cs trunk/plugins/IR Server Suite/Applications/Translator/Forms/MainForm.cs trunk/plugins/IR Server Suite/Applications/Translator/Forms/MainForm.resx trunk/plugins/IR Server Suite/Applications/Translator/Properties/Resources.Designer.cs trunk/plugins/IR Server Suite/Applications/Translator/Properties/Resources.resx trunk/plugins/IR Server Suite/Applications/Translator/Translator.csproj trunk/plugins/IR Server Suite/Applications/Virtual Remote Skin Editor/MainForm.Designer.cs trunk/plugins/IR Server Suite/Applications/Virtual Remote Skin Editor/MainForm.cs trunk/plugins/IR Server Suite/Common/IrssUtils/Forms/SmsKeyboard.Designer.cs trunk/plugins/IR Server Suite/Common/IrssUtils/Forms/VirtualKeyboard.Designer.cs trunk/plugins/IR Server Suite/Common/IrssUtils/Win32.cs trunk/plugins/IR Server Suite/Documentation/Input Service/index.html trunk/plugins/IR Server Suite/Documentation/legal.html trunk/plugins/IR Server Suite/Documentation/new.html trunk/plugins/IR Server Suite/Documentation/troubleshooting.html trunk/plugins/IR Server Suite/IR Server Suite - Debug.nsi trunk/plugins/IR Server Suite/IR Server Suite - Release.nsi trunk/plugins/IR Server Suite/IR Server Suite.sln trunk/plugins/IR Server Suite/Input Service/Input Service/InputService.cs trunk/plugins/IR Server Suite/MediaPortal Plugins/MP Control Plugin/MPControlPlugin.cs Added Paths: ----------- trunk/plugins/IR Server Suite/Applications/IR File Tool/ trunk/plugins/IR Server Suite/Applications/IR File Tool/FormMain.Designer.cs trunk/plugins/IR Server Suite/Applications/IR File Tool/FormMain.cs trunk/plugins/IR Server Suite/Applications/IR File Tool/FormMain.resx trunk/plugins/IR Server Suite/Applications/IR File Tool/IR File Tool.csproj trunk/plugins/IR Server Suite/Applications/IR File Tool/Icon.ico trunk/plugins/IR Server Suite/Applications/IR File Tool/IrCode.cs trunk/plugins/IR Server Suite/Applications/IR File Tool/IrDecoder.cs trunk/plugins/IR Server Suite/Applications/IR File Tool/MceDetectionData.cs trunk/plugins/IR Server Suite/Applications/IR File Tool/Program.cs trunk/plugins/IR Server Suite/Applications/IR File Tool/Pronto.cs trunk/plugins/IR Server Suite/Applications/IR File Tool/Properties/ trunk/plugins/IR Server Suite/Applications/IR File Tool/Properties/AssemblyInfo.cs trunk/plugins/IR Server Suite/Applications/IR File Tool/RemoteDetectionData.cs trunk/plugins/IR Server Suite/Applications/Translator/Graphics/Shortcut.png trunk/plugins/IR Server Suite/Common/ShellLink/ trunk/plugins/IR Server Suite/Common/ShellLink/AssemblyInfo.cs trunk/plugins/IR Server Suite/Common/ShellLink/ShellLink.csproj trunk/plugins/IR Server Suite/Common/ShellLink/ShellLinkNative.cs trunk/plugins/IR Server Suite/Common/ShellLink/ShellShortcut.cs Removed Paths: ------------- trunk/plugins/IR Server Suite/Util Apps/IR File Tool/ Property changes on: trunk/plugins/IR Server Suite/Applications/IR File Tool ___________________________________________________________________ Name: svn:ignore + bin obj Added: trunk/plugins/IR Server Suite/Applications/IR File Tool/FormMain.Designer.cs =================================================================== --- trunk/plugins/IR Server Suite/Applications/IR File Tool/FormMain.Designer.cs (rev 0) +++ trunk/plugins/IR Server Suite/Applications/IR File Tool/FormMain.Designer.cs 2008-01-28 11:55:35 UTC (rev 1317) @@ -0,0 +1,341 @@ +namespace IrFileTool +{ + partial class FormMain + { + /// <summary> + /// Required designer variable. + /// </summary> + private System.ComponentModel.IContainer components = null; + + /// <summary> + /// Clean up any resources being used. + /// </summary> + /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// <summary> + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// </summary> + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormMain)); + this.menuStrip = new System.Windows.Forms.MenuStrip(); + this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.newToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.openToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.saveToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.saveasToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); + this.quitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.serverToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.connectToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.disconnectToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.changeServerToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.textBoxPronto = new System.Windows.Forms.TextBox(); + this.toolTips = new System.Windows.Forms.ToolTip(this.components); + this.buttonSetCarrier = new System.Windows.Forms.Button(); + this.checkBoxStoreBinary = new System.Windows.Forms.CheckBox(); + this.buttonAttemptDecode = new System.Windows.Forms.Button(); + this.buttonBlast = new System.Windows.Forms.Button(); + this.buttonLearn = new System.Windows.Forms.Button(); + this.textBoxCarrier = new System.Windows.Forms.TextBox(); + this.openFileDialog = new System.Windows.Forms.OpenFileDialog(); + this.saveFileDialog = new System.Windows.Forms.SaveFileDialog(); + this.groupBoxCarrier = new System.Windows.Forms.GroupBox(); + this.groupBoxTestBlast = new System.Windows.Forms.GroupBox(); + this.comboBoxPort = new System.Windows.Forms.ComboBox(); + this.menuStrip.SuspendLayout(); + this.groupBoxCarrier.SuspendLayout(); + this.groupBoxTestBlast.SuspendLayout(); + this.SuspendLayout(); + // + // menuStrip + // + this.menuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.fileToolStripMenuItem, + this.serverToolStripMenuItem}); + this.menuStrip.Location = new System.Drawing.Point(0, 0); + this.menuStrip.Name = "menuStrip"; + this.menuStrip.Size = new System.Drawing.Size(504, 24); + this.menuStrip.TabIndex = 0; + this.menuStrip.Text = "menuStrip"; + // + // fileToolStripMenuItem + // + this.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.newToolStripMenuItem, + this.openToolStripMenuItem, + this.saveToolStripMenuItem, + this.saveasToolStripMenuItem, + this.toolStripSeparator1, + this.quitToolStripMenuItem}); + this.fileToolStripMenuItem.Name = "fileToolStripMenuItem"; + this.fileToolStripMenuItem.Size = new System.Drawing.Size(35, 20); + this.fileToolStripMenuItem.Text = "&File"; + // + // newToolStripMenuItem + // + this.newToolStripMenuItem.Name = "newToolStripMenuItem"; + this.newToolStripMenuItem.Size = new System.Drawing.Size(138, 22); + this.newToolStripMenuItem.Text = "&New"; + this.newToolStripMenuItem.Click += new System.EventHandler(this.newToolStripMenuItem_Click); + // + // openToolStripMenuItem + // + this.openToolStripMenuItem.Name = "openToolStripMenuItem"; + this.openToolStripMenuItem.Size = new System.Drawing.Size(138, 22); + this.openToolStripMenuItem.Text = "&Open ..."; + this.openToolStripMenuItem.Click += new System.EventHandler(this.openToolStripMenuItem_Click); + // + // saveToolStripMenuItem + // + this.saveToolStripMenuItem.Name = "saveToolStripMenuItem"; + this.saveToolStripMenuItem.Size = new System.Drawing.Size(138, 22); + this.saveToolStripMenuItem.Text = "&Save"; + this.saveToolStripMenuItem.Click += new System.EventHandler(this.saveToolStripMenuItem_Click); + // + // saveasToolStripMenuItem + // + this.saveasToolStripMenuItem.Name = "saveasToolStripMenuItem"; + this.saveasToolStripMenuItem.Size = new System.Drawing.Size(138, 22); + this.saveasToolStripMenuItem.Text = "Save &as ..."; + this.saveasToolStripMenuItem.Click += new System.EventHandler(this.saveasToolStripMenuItem_Click); + // + // toolStripSeparator1 + // + this.toolStripSeparator1.Name = "toolStripSeparator1"; + this.toolStripSeparator1.Size = new System.Drawing.Size(135, 6); + // + // quitToolStripMenuItem + // + this.quitToolStripMenuItem.Name = "quitToolStripMenuItem"; + this.quitToolStripMenuItem.Size = new System.Drawing.Size(138, 22); + this.quitToolStripMenuItem.Text = "&Quit"; + this.quitToolStripMenuItem.Click += new System.EventHandler(this.quitToolStripMenuItem_Click); + // + // serverToolStripMenuItem + // + this.serverToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.connectToolStripMenuItem, + this.disconnectToolStripMenuItem, + this.changeServerToolStripMenuItem}); + this.serverToolStripMenuItem.Name = "serverToolStripMenuItem"; + this.serverToolStripMenuItem.Size = new System.Drawing.Size(51, 20); + this.serverToolStripMenuItem.Text = "&Server"; + // + // connectToolStripMenuItem + // + this.connectToolStripMenuItem.Name = "connectToolStripMenuItem"; + this.connectToolStripMenuItem.Size = new System.Drawing.Size(156, 22); + this.connectToolStripMenuItem.Text = "&Connect"; + this.connectToolStripMenuItem.Click += new System.EventHandler(this.connectToolStripMenuItem_Click); + // + // disconnectToolStripMenuItem + // + this.disconnectToolStripMenuItem.Name = "disconnectToolStripMenuItem"; + this.disconnectToolStripMenuItem.Size = new System.Drawing.Size(156, 22); + this.disconnectToolStripMenuItem.Text = "&Disconnect"; + this.disconnectToolStripMenuItem.Click += new System.EventHandler(this.disconnectToolStripMenuItem_Click); + // + // changeServerToolStripMenuItem + // + this.changeServerToolStripMenuItem.Name = "changeServerToolStripMenuItem"; + this.changeServerToolStripMenuItem.Size = new System.Drawing.Size(156, 22); + this.changeServerToolStripMenuItem.Text = "Change &server"; + this.changeServerToolStripMenuItem.Click += new System.EventHandler(this.changeServerToolStripMenuItem_Click); + // + // textBoxPronto + // + this.textBoxPronto.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBoxPronto.Font = new System.Drawing.Font("Courier New", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.textBoxPronto.Location = new System.Drawing.Point(8, 32); + this.textBoxPronto.Multiline = true; + this.textBoxPronto.Name = "textBoxPronto"; + this.textBoxPronto.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.textBoxPronto.Size = new System.Drawing.Size(312, 264); + this.textBoxPronto.TabIndex = 1; + // + // buttonSetCarrier + // + this.buttonSetCarrier.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonSetCarrier.Location = new System.Drawing.Point(112, 24); + this.buttonSetCarrier.Name = "buttonSetCarrier"; + this.buttonSetCarrier.Size = new System.Drawing.Size(48, 24); + this.buttonSetCarrier.TabIndex = 1; + this.buttonSetCarrier.Text = "&Set"; + this.toolTips.SetToolTip(this.buttonSetCarrier, "Change the carrier frequency"); + this.buttonSetCarrier.UseVisualStyleBackColor = true; + this.buttonSetCarrier.Click += new System.EventHandler(this.buttonSetCarrier_Click); + // + // checkBoxStoreBinary + // + this.checkBoxStoreBinary.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.checkBoxStoreBinary.Location = new System.Drawing.Point(336, 272); + this.checkBoxStoreBinary.Name = "checkBoxStoreBinary"; + this.checkBoxStoreBinary.Size = new System.Drawing.Size(160, 24); + this.checkBoxStoreBinary.TabIndex = 6; + this.checkBoxStoreBinary.Text = "Store &mceir.dll compatible"; + this.toolTips.SetToolTip(this.checkBoxStoreBinary, "Store this IR Code in an MceIr.dll compatible form"); + this.checkBoxStoreBinary.UseVisualStyleBackColor = true; + // + // buttonAttemptDecode + // + this.buttonAttemptDecode.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonAttemptDecode.Location = new System.Drawing.Point(360, 208); + this.buttonAttemptDecode.Name = "buttonAttemptDecode"; + this.buttonAttemptDecode.Size = new System.Drawing.Size(112, 24); + this.buttonAttemptDecode.TabIndex = 5; + this.buttonAttemptDecode.Text = "&Attempt Decode"; + this.toolTips.SetToolTip(this.buttonAttemptDecode, "Try to decode the IR signal into a recognised format"); + this.buttonAttemptDecode.UseVisualStyleBackColor = true; + this.buttonAttemptDecode.Click += new System.EventHandler(this.buttonAttemptDecode_Click); + // + // buttonBlast + // + this.buttonBlast.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonBlast.Location = new System.Drawing.Point(112, 24); + this.buttonBlast.Name = "buttonBlast"; + this.buttonBlast.Size = new System.Drawing.Size(51, 24); + this.buttonBlast.TabIndex = 1; + this.buttonBlast.Text = "&Blast"; + this.toolTips.SetToolTip(this.buttonBlast, "Blast the current IR command for testing"); + this.buttonBlast.UseVisualStyleBackColor = true; + this.buttonBlast.Click += new System.EventHandler(this.buttonBlast_Click); + // + // buttonLearn + // + this.buttonLearn.Enabled = false; + this.buttonLearn.Location = new System.Drawing.Point(360, 168); + this.buttonLearn.Name = "buttonLearn"; + this.buttonLearn.Size = new System.Drawing.Size(112, 24); + this.buttonLearn.TabIndex = 4; + this.buttonLearn.Text = "&Learn IR"; + this.toolTips.SetToolTip(this.buttonLearn, "Learn a new IR command"); + this.buttonLearn.UseVisualStyleBackColor = true; + this.buttonLearn.Click += new System.EventHandler(this.buttonLearn_Click); + // + // textBoxCarrier + // + this.textBoxCarrier.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBoxCarrier.Location = new System.Drawing.Point(8, 24); + this.textBoxCarrier.Name = "textBoxCarrier"; + this.textBoxCarrier.Size = new System.Drawing.Size(96, 20); + this.textBoxCarrier.TabIndex = 0; + // + // openFileDialog + // + this.openFileDialog.DefaultExt = "IR"; + this.openFileDialog.Filter = "IR Files|*.IR"; + this.openFileDialog.Title = "Open an IR file ..."; + // + // saveFileDialog + // + this.saveFileDialog.DefaultExt = "IR"; + this.saveFileDialog.Filter = "IR Files|*.IR"; + this.saveFileDialog.Title = "Save an IR file ..."; + // + // groupBoxCarrier + // + this.groupBoxCarrier.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.groupBoxCarrier.Controls.Add(this.textBoxCarrier); + this.groupBoxCarrier.Controls.Add(this.buttonSetCarrier); + this.groupBoxCarrier.Location = new System.Drawing.Point(328, 32); + this.groupBoxCarrier.Name = "groupBoxCarrier"; + this.groupBoxCarrier.Size = new System.Drawing.Size(168, 56); + this.groupBoxCarrier.TabIndex = 2; + this.groupBoxCarrier.TabStop = false; + this.groupBoxCarrier.Text = "Carrier frequency"; + // + // groupBoxTestBlast + // + this.groupBoxTestBlast.Controls.Add(this.buttonBlast); + this.groupBoxTestBlast.Controls.Add(this.comboBoxPort); + this.groupBoxTestBlast.Enabled = false; + this.groupBoxTestBlast.Location = new System.Drawing.Point(328, 96); + this.groupBoxTestBlast.Name = "groupBoxTestBlast"; + this.groupBoxTestBlast.Size = new System.Drawing.Size(168, 56); + this.groupBoxTestBlast.TabIndex = 3; + this.groupBoxTestBlast.TabStop = false; + this.groupBoxTestBlast.Text = "Test blast"; + // + // comboBoxPort + // + this.comboBoxPort.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.comboBoxPort.FormattingEnabled = true; + this.comboBoxPort.Location = new System.Drawing.Point(8, 24); + this.comboBoxPort.Name = "comboBoxPort"; + this.comboBoxPort.Size = new System.Drawing.Size(96, 21); + this.comboBoxPort.TabIndex = 0; + // + // FormMain + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(504, 305); + this.Controls.Add(this.buttonLearn); + this.Controls.Add(this.groupBoxTestBlast); + this.Controls.Add(this.groupBoxCarrier); + this.Controls.Add(this.buttonAttemptDecode); + this.Controls.Add(this.checkBoxStoreBinary); + this.Controls.Add(this.textBoxPronto); + this.Controls.Add(this.menuStrip); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MainMenuStrip = this.menuStrip; + this.MinimumSize = new System.Drawing.Size(512, 332); + this.Name = "FormMain"; + this.Text = "IR File Tool"; + this.menuStrip.ResumeLayout(false); + this.menuStrip.PerformLayout(); + this.groupBoxCarrier.ResumeLayout(false); + this.groupBoxCarrier.PerformLayout(); + this.groupBoxTestBlast.ResumeLayout(false); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.MenuStrip menuStrip; + private System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem newToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem openToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem saveToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem saveasToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; + private System.Windows.Forms.ToolStripMenuItem quitToolStripMenuItem; + private System.Windows.Forms.TextBox textBoxPronto; + private System.Windows.Forms.ToolTip toolTips; + private System.Windows.Forms.TextBox textBoxCarrier; + private System.Windows.Forms.Button buttonSetCarrier; + private System.Windows.Forms.CheckBox checkBoxStoreBinary; + private System.Windows.Forms.Button buttonAttemptDecode; + private System.Windows.Forms.OpenFileDialog openFileDialog; + private System.Windows.Forms.SaveFileDialog saveFileDialog; + private System.Windows.Forms.ToolStripMenuItem serverToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem connectToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem disconnectToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem changeServerToolStripMenuItem; + private System.Windows.Forms.GroupBox groupBoxCarrier; + private System.Windows.Forms.GroupBox groupBoxTestBlast; + private System.Windows.Forms.Button buttonBlast; + private System.Windows.Forms.ComboBox comboBoxPort; + private System.Windows.Forms.Button buttonLearn; + } +} + Added: trunk/plugins/IR Server Suite/Applications/IR File Tool/FormMain.cs =================================================================== --- trunk/plugins/IR Server Suite/Applications/IR File Tool/FormMain.cs (rev 0) +++ trunk/plugins/IR Server Suite/Applications/IR File Tool/FormMain.cs 2008-01-28 11:55:35 UTC (rev 1317) @@ -0,0 +1,468 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.IO; +using System.Net; +using System.Net.Sockets; +using System.Text; +using System.Threading; +using System.Windows.Forms; +using System.Xml; + +using IrssComms; +using IrssUtils; +using IrssUtils.Forms; + +namespace IrFileTool +{ + + /// <summary> + /// IR File Tool Main Form. + /// </summary> + partial class FormMain : Form + { + + #region Constants + + static readonly string ConfigurationFile = Common.FolderAppData + "IR File Tool\\IR File Tool.xml"; + + #endregion Constants + + #region Variables + + string _fileName = String.Empty; + + IrCode _code = new IrCode(); + + + Client _client; + + bool _registered; + + string _serverHost = String.Empty; + + + #endregion Variables + + #region Constructor + + /// <summary> + /// Initializes a new instance of the <see cref="FormMain"/> class. + /// </summary> + public FormMain() + { + InitializeComponent(); + + LoadSettings(); + } + + #endregion Constructor + + + void RefreshForm() + { + if (String.IsNullOrEmpty(_fileName)) + this.Text = "IR File Tool"; + else + this.Text = "IR File Tool - " + _fileName; + + textBoxPronto.Text = Encoding.ASCII.GetString(_code.ToByteArray(true)); + + switch (_code.Carrier) + { + case IrCode.CarrierFrequencyDCMode: + textBoxCarrier.Text = "DC Mode"; + break; + + case IrCode.CarrierFrequencyUnknown: + textBoxCarrier.Text = "Unknown"; + break; + + default: + textBoxCarrier.Text = _code.Carrier.ToString(); + break; + } + } + + void Save() + { + if (!checkBoxStoreBinary.Checked) + { + Pronto.WriteProntoFile(_fileName, Pronto.ConvertIrCodeToProntoRaw(_code)); + } + else + { + using (FileStream file = File.OpenWrite(_fileName)) + { + byte[] fileBytes = DataPacket(_code); + + file.Write(fileBytes, 0, fileBytes.Length); + } + } + } + + + void LoadSettings() + { + try + { + XmlDocument doc = new XmlDocument(); + doc.Load(ConfigurationFile); + + _serverHost = doc.DocumentElement.Attributes["ServerHost"].Value; + } + catch (Exception ex) + { + IrssLog.Error(ex); + + _serverHost = "localhost"; + } + } + void SaveSettings() + { + try + { + using (XmlTextWriter writer = new XmlTextWriter(ConfigurationFile, Encoding.UTF8)) + { + writer.Formatting = Formatting.Indented; + writer.Indentation = 1; + writer.IndentChar = (char)9; + writer.WriteStartDocument(true); + writer.WriteStartElement("settings"); // <settings> + + writer.WriteAttributeString("ServerHost", _serverHost); + + writer.WriteEndElement(); // </settings> + writer.WriteEndDocument(); + } + } + catch (Exception ex) + { + IrssLog.Error(ex); + } + } + + + + void CommsFailure(object obj) + { + Exception ex = obj as Exception; + + if (ex != null) + IrssLog.Error("Communications failure: {0}", ex.Message); + else + IrssLog.Error("Communications failure"); + + StopClient(); + + MessageBox.Show(this, "Please report this error.", "IR File Tool - Communications failure", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + void Connected(object obj) + { + IrssLog.Info("Connected to server"); + + IrssMessage message = new IrssMessage(MessageType.RegisterClient, MessageFlags.Request); + _client.Send(message); + } + void Disconnected(object obj) + { + IrssLog.Warn("Communications with server has been lost"); + + Thread.Sleep(1000); + } + + bool StartClient(IPEndPoint endPoint) + { + if (_client != null) + return false; + + ClientMessageSink sink = new ClientMessageSink(ReceivedMessage); + + _client = new Client(endPoint, sink); + _client.CommsFailureCallback = new WaitCallback(CommsFailure); + _client.ConnectCallback = new WaitCallback(Connected); + _client.DisconnectCallback = new WaitCallback(Disconnected); + + if (_client.Start()) + { + return true; + } + else + { + _client = null; + return false; + } + } + void StopClient() + { + if (_client == null) + return; + + _client.Dispose(); + _client = null; + } + + void ReceivedMessage(IrssMessage received) + { + IrssLog.Debug("Received Message \"{0}\"", received.Type); + + try + { + switch (received.Type) + { + case MessageType.RegisterClient: + if ((received.Flags & MessageFlags.Success) == MessageFlags.Success) + { + _registered = true; + + groupBoxTestBlast.Enabled = true; + buttonLearn.Enabled = true; + } + else if ((received.Flags & MessageFlags.Failure) == MessageFlags.Failure) + { + _registered = false; + + groupBoxTestBlast.Enabled = false; + buttonLearn.Enabled = false; + + MessageBox.Show(this, "Failed to register with server", "IR File Tool Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + return; + + case MessageType.ServerShutdown: + MessageBox.Show(this, "Server has been shut down", "IR File Tool Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + + case MessageType.Error: + MessageBox.Show(this, received.GetDataAsString(), "IR File Tool Error from Server", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + } + catch (Exception ex) + { + IrssLog.Error(ex); + MessageBox.Show(this, ex.Message, "IR File Tool Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + + + + + + + + + private void newToolStripMenuItem_Click(object sender, EventArgs e) + { + _code = new IrCode(); + _fileName = "New File.IR"; + + RefreshForm(); + } + private void openToolStripMenuItem_Click(object sender, EventArgs e) + { + if (openFileDialog.ShowDialog(this) != DialogResult.OK) + return; + + if (String.IsNullOrEmpty(openFileDialog.InitialDirectory)) + openFileDialog.InitialDirectory = Common.FolderIRCommands; + + using (FileStream file = File.OpenRead(openFileDialog.FileName)) + { + if (file.Length == 0) + { + MessageBox.Show(this, "The selected file is empty", "Empty file", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + + byte[] fileData = new byte[file.Length]; + + file.Read(fileData, 0, (int)file.Length); + + _code = IrCode.FromByteArray(fileData); + } + + _fileName = openFileDialog.FileName; + + RefreshForm(); + } + private void saveToolStripMenuItem_Click(object sender, EventArgs e) + { + Save(); + } + private void saveasToolStripMenuItem_Click(object sender, EventArgs e) + { + if (String.IsNullOrEmpty(saveFileDialog.InitialDirectory)) + saveFileDialog.InitialDirectory = Common.FolderIRCommands; + + if (saveFileDialog.ShowDialog(this) != DialogResult.OK) + return; + + _fileName = saveFileDialog.FileName; + + Save(); + } + private void quitToolStripMenuItem_Click(object sender, EventArgs e) + { + this.Close(); + } + private void buttonAttemptDecode_Click(object sender, EventArgs e) + { + IrDecoder.DecodeIR(_code.TimingData, new RemoteCallback(RemoteEvent), new KeyboardCallback(KeyboardEvent), new MouseCallback(MouseEvent)); + } + + static byte[] DataPacket(IrCode code) + { + if (code.TimingData.Length == 0) + return null; + + // Construct data bytes into "packet" ... + List<byte> packet = new List<byte>(); + + for (int index = 0; index < code.TimingData.Length; index++) + { + double time = (double)code.TimingData[index]; + + byte duration = (byte)Math.Abs(Math.Round(time / 50)); + bool pulse = (time > 0); + + while (duration > 0x7F) + { + packet.Add((byte)(pulse ? 0xFF : 0x7F)); + + duration -= 0x7F; + } + + packet.Add((byte)(pulse ? 0x80 | duration : duration)); + } + + // Insert byte count markers into packet data bytes ... + int subpackets = (int)Math.Ceiling(packet.Count / (double)4); + + byte[] output = new byte[packet.Count + subpackets + 1]; + + int outputPos = 0; + + for (int packetPos = 0; packetPos < packet.Count; ) + { + byte copyCount = (byte)(packet.Count - packetPos < 4 ? packet.Count - packetPos : 0x04); + + output[outputPos++] = (byte)(0x80 | copyCount); + + for (int index = 0; index < copyCount; index++) + output[outputPos++] = packet[packetPos++]; + } + + output[outputPos] = 0x80; + + return output; + } + + void RemoteEvent(IrProtocol codeType, uint keyCode, bool firstPress) + { + MessageBox.Show(this, String.Format("Remote: {0}, {1}", Enum.GetName(typeof(IrProtocol), codeType), keyCode), "Decode IR", MessageBoxButtons.OK, MessageBoxIcon.Information); + + if (textBoxCarrier.Text.Equals("Unknown", StringComparison.OrdinalIgnoreCase)) + { + switch (codeType) + { + case IrProtocol.Daewoo: textBoxCarrier.Text = "38000"; break; + case IrProtocol.JVC: textBoxCarrier.Text = "38000"; break; + case IrProtocol.Matsushita: textBoxCarrier.Text = "56800"; break; + case IrProtocol.Mitsubishi: textBoxCarrier.Text = "40000"; break; + case IrProtocol.NEC: textBoxCarrier.Text = "38000"; break; + case IrProtocol.NRC17: textBoxCarrier.Text = "38000"; break; + case IrProtocol.Panasonic: textBoxCarrier.Text = "38000"; break; + case IrProtocol.RC5: textBoxCarrier.Text = "36000"; break; + case IrProtocol.RC5X: textBoxCarrier.Text = "36000"; break; + case IrProtocol.RC6: textBoxCarrier.Text = "36000"; break; + case IrProtocol.RC6A: textBoxCarrier.Text = "36000"; break; + case IrProtocol.RC6_MCE: textBoxCarrier.Text = "36000"; break; + case IrProtocol.RC6_Foxtel: textBoxCarrier.Text = "36000"; break; + case IrProtocol.RCA: textBoxCarrier.Text = "56000"; break; + case IrProtocol.RCMM: textBoxCarrier.Text = "36000"; break; + case IrProtocol.RECS80: textBoxCarrier.Text = "38000"; break; + case IrProtocol.Sharp: textBoxCarrier.Text = "38000"; break; + case IrProtocol.SIRC: textBoxCarrier.Text = "40000"; break; + case IrProtocol.Toshiba: textBoxCarrier.Text = "38000"; break; + case IrProtocol.XSAT: textBoxCarrier.Text = "38000"; break; + + default: + return; + } + + _code.Carrier = int.Parse(textBoxCarrier.Text); + + RefreshForm(); + } + } + void KeyboardEvent(uint keyCode, uint modifiers) + { + MessageBox.Show(this, String.Format("Keyboard: {0}, {1}", keyCode, modifiers), "Decode IR", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + void MouseEvent(int deltaX, int deltaY, bool right, bool left) + { + MessageBox.Show(this, String.Format("Mouse: DX {0}, DY {1}, Right: {2}, Left: {3}", deltaX, deltaY, right, left), "Decode IR", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + + private void buttonSetCarrier_Click(object sender, EventArgs e) + { + if (textBoxCarrier.Text == "Unknown") + return; + + if (textBoxCarrier.Text == "DC Mode") + _code.Carrier = IrCode.CarrierFrequencyDCMode; + + _code.Carrier = int.Parse(textBoxCarrier.Text); + + RefreshForm(); + } + + private void connectToolStripMenuItem_Click(object sender, EventArgs e) + { + IPAddress serverIP = Client.GetIPFromName(_serverHost); + IPEndPoint endPoint = new IPEndPoint(serverIP, IrssComms.Server.DefaultPort); + + StartClient(endPoint); + } + private void disconnectToolStripMenuItem_Click(object sender, EventArgs e) + { + if (_registered) + { + IrssMessage message = new IrssMessage(MessageType.UnregisterClient, MessageFlags.Request); + _client.Send(message); + + _registered = false; + } + + groupBoxTestBlast.Enabled = false; + buttonLearn.Enabled = false; + + StopClient(); + } + private void changeServerToolStripMenuItem_Click(object sender, EventArgs e) + { + ServerAddress serverAddress = new ServerAddress(_serverHost); + serverAddress.ShowDialog(this); + + _serverHost = serverAddress.ServerHost; + + SaveSettings(); + } + + private void buttonBlast_Click(object sender, EventArgs e) + { + + } + + private void buttonLearn_Click(object sender, EventArgs e) + { + + } + + + } + +} Added: trunk/plugins/IR Server Suite/Applications/IR File Tool/FormMain.resx =================================================================== --- trunk/plugins/IR Server Suite/Applications/IR File Tool/FormMain.resx (rev 0) +++ trunk/plugins/IR Server Suite/Applications/IR File Tool/FormMain.resx 2008-01-28 11:55:35 UTC (rev 1317) @@ -0,0 +1,228 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <metadata name="menuStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> + <value>17, 17</value> + </metadata> + <metadata name="toolTips.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> + <value>119, 17</value> + </metadata> + <metadata name="openFileDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> + <value>209, 17</value> + </metadata> + <metadata name="saveFileDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> + <value>333, 17</value> + </metadata> + <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + AAABAAIAICAAAAEAIACoEAAAJgAAABAQAAABACAAaAQAAM4QAAAoAAAAIAAAAEAAAAABACAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAn4cp/52FKf+ehin/noYp/56GKf+ehin/nYUp/56GKf+fhyn/noYp/56G + Kf+dhSn/nYUp/56GKf+ehin/noYp/52FKf+fhyn/noYp/56GKf+ehin/nYUp/56GKf+ehin/noYp/5yE + KP+bhCj/noYp/56GKf+ehin/noYp/52FKf+ehin/n4cp/52FKf+fhyn/noYp/56GKf+dhSn/noYp/52F + Kf+ehin/noYp/56GKf+fhyn/nYUp/5+HKf+ehin/noYp/52FKf+ehin/noYp/52FKf+ehin/moMo/6CI + Kf+skiz/u54v/6CIKf+agyj/ookq/6OKKv+ehin/nYUp/56GKf+dhSn/noYp/52FKf+ehin/noYp/56G + Kf+dhSn/noYp/52FKf+ehin/n4cp/52FKf+fhyn/noYp/56GKf+dhSn/noYp/52FKf+fhyn/nYUp/5uE + KP+jiir/n4cp/3ZkIf9dUBz/rJIs/6mQK/+bhCj/noYp/56GKf+dhSn/nYUp/56GKf+ehin/nYUp/56G + Kf+dhSn/noYp/56GKf+ehin/nYUp/52FKf+ehin/noYp/56GKf+ehin/nYUp/5+HKf+dhSn/noYp/56G + Kf+dhSn/n4cp/6eNKv+DcCT/FxUH/wEBAP93ZSH/sJUt/6SLKv+dhSn/nYUp/52FKf+dhSn/n4cp/52F + Kf+dhSn/nYUp/52FKf+fhyn/noYp/5+HKf+dhSn/nYUp/52FKf+dhSn/n4cp/56GKf+dhSn/noYp/52F + Kf+ehin/nYUp/56GKf+dhSn/p40q/4RxJP8UEwb/AAAA/x0aCv+PeSb/t5su/6CIKf+bhCj/nYUp/5+H + Kf+dhSn/noYp/56GKf+fhyn/noYp/56GKf+dhSn/noYp/56GKf+ehin/n4cp/52FKf+ehin/nYUp/56G + Kf+ehin/noYp/5+HKf+iiSr/noYp/5uEKP+njSr/qZAr/2tbH/8QDwT/AAAA/1tOG/+skiz/pIsq/5uE + KP+dhSn/n4cp/52FKf+ehin/noYp/56GKf+dhSn/noYp/5+HKf+dhSn/noYp/56GKf+ehin/n4cp/56G + Kf+ehin/nYUp/52FKf+giCn/qI4r/6KJKv+jiir/pYwq/5+HKf+iiSr/loAn/zQtEf8BAQD/KiUP/5V/ + J/+tkyz/nYUp/52FKf+dhSn/nYUp/56GKf+ehin/noYp/56GKf+fhyn/nYUp/56GKf+ehin/noYp/5+H + Kf+dhSn/n4cp/56GKf+giCn/pYwq/5eBJ/9MQRj/IR0M/5qDKP+0mC3/nYUp/6OKKv+wlS3/fGki/wIC + AP8AAAD/cmIg/7GWLf+giCn/noYp/52FKf+ehin/noYp/56GKf+dhSn/nYUp/5+HKf+dhSn/nYUp/52F + Kf+dhSn/nYUp/56GKf+bhCj/noYp/52FKf+njSr/eWch/woJAv8BAQD/TUIY/6KJKv+pkCv/noYp/6SL + Kv+skiz/GBYI/wAAAP9OQxj/up0u/6OKKv+dhSn/nYUp/56GKf+ehin/nYUp/56GKf+dhSn/nYUp/56G + Kf+ehin/noYp/52FKf+bhCj/pIsq/6ySLP+jiir/oIgp/6mQK/+KdSX/KCQO/wICAP8NDAP/fmwi/7qd + Lv+giCn/moMo/76gL/9IPhf/AAAA/yMfDf+hiCn/p40q/52FKf+ehin/noYp/56GKf+dhSn/nYUp/5uE + KP+fhyn/nYUp/52FKf+bhCj/noYp/6SLKv+njir/iHQk/5F7Jv+iiSr/rJIs/6ySLP98aSL/EA8E/wAA + AP9WShr/rJIs/6KJKv+fhyn/tJgt/35sIv8JCQL/AAAA/21dH/+1mS3/noYp/52FKf+fhyn/nYUp/56G + Kv+dhiz/oIgu/6WNL/+dhiz/nYUq/56GKf+iiSr/pYwq/3RjIP8XFQf/SD4X/56GKf+qkSv/qZAr/6WM + Kv8vKRD/AAAA/zAqEP+Zgij/pYwq/52FKf+ljCr/ookq/zMsEf8AAAD/SD4X/8OmMf+giCn/n4cp/52F + Kf+WgCz/m4M3/6KJRf+chE3/k3xL/5eAQv+bgzb/nYUs/6SLKv+Vfyf/MSsR/wEBAP8hHQz/h3Mk/62T + LP+pkCv/rpQs/01CGP8AAAD/ERAF/4h0Jf+yly3/nYUp/6SLKv+0mC3/PTYV/wAAAP9AOBX/vJ8v/5qD + KP+dhSn/l4Es/5uEPv9yYVn/MSpw/xQSfP8WE3r/RDtt/39rUv+bgzb/powr/6CIKf9kVh3/CwsC/wAA + AP9pWh7/rZMs/6CIKf+ljCr/g3Ak/wkJAv8AAAD/b14f/7qdLv+dhSn/p40q/7CVLf9EOxb/AAAA/zEr + Ef+ulCz/ookq/52FKf+ZgTb/gW5b/yUgh/8AAK7/AADB/wAAv/8CAqL/NC1x/4p1Rv+jii7/qpEr/6WM + Kv8YFgj/AAAA/05DGP+tkyz/pIsq/6OKKv+giCn/HBkK/wAAAP9XSxr/t5su/52FKf+ehin/r5Us/1pN + G/8AAAD/JSAN/6OKKv+ljCr/mYIp/6KJQP9SRm3/AwOo/wAA0/8AAN7/AADc/wAAx/8KCY3/YlRV/5uD + NP+ulCz/v6Ev/ysmD/8AAAD/ODET/6KJKv+ljCr/o4oq/6iOK/8nIg7/AAAA/0tAF/+8ny//noYp/56G + Kf+wlS3/YFIc/wAAAP8hHQz/oIgp/6KJKv+dhSr/qo9C/0E4bf8BAa3/AADX/wAA4f8AAN//AADO/wUE + lv9YS1v/noc4/6ySLf++oC//LigQ/wAAAP81LhL/nYUp/6WMKv+kiyr/rpQs/yIeDP8AAAD/TkMY/7+h + MP+ehin/pIsq/7KXLf9dUBz/AAAA/yMfDf+giCn/nYUp/6CIKf+njTr/aVle/w8Nl/8AAMr/AADb/wAA + 1/8AALr/FxSB/3ZlUP+ojjb/qpEr/7aaLv8cGQr/AAAA/0Q7Fv+ojiv/p40q/6OKKv+qkSv/FxUH/wAA + AP9WShr/tZkt/56GKf+kiyr/spct/11QHP8AAAD/Ix8N/6GIKf+giCn/nYUp/6CIMP+YgEr/Ni9z/wAA + of8AALn/AACu/wcHhf9NQlz/kHs7/56GLP+ojiv/kXwm/xMSBv8AAAD/Vkoa/6mQK/+giCn/pYwq/5J8 + Jv8eGwv/AAAA/1hMG/+2mi7/noYp/52FKf+wlS3/WEwb/wAAAP8mIQ7/p40q/6SLKv+ehin/nIQq/5Z/ + Nf96aFD/RTxs/zApev85MXD/Y1VY/455Pv+agy3/p40q/6SLKv9WShr/BwcC/wAAAP9rWx//qpEr/6KJ + Kv+ljCr/emgh/w0MA/8AAAD/aFke/7ueL/+dhSn/o4oq/7ueL/9HPRb/AAAA/zcwEv+1mS3/nYUp/56G + Kf+fhyn/nIQs/5iANv+PeUD/hnJF/4p2Qf+YgTf/noYu/56GKf+iiSr/lX8n/0c9Fv8GBQH/Ix8N/4t2 + Jf+ulCz/pIsq/62TLP9SRxn/AAAA/xEQBf+HcyT/qpEr/52FKf+jiir/tZkt/zUuEv8AAAD/QzoW/8Cj + MP+agyj/noYp/56GKf+ehin/moMp/52GLP+giC7/n4ct/52FKv+ehin/nYUp/5+HKf+agyj/j3km/1dL + Gv9xYSD/o4oq/6qRK/+qkSv/noYp/ygkDv8AAAD/OzQU/6OKKv+kiyr/noYp/6ySLP+Vfyf/HhsL/wAA + AP9bThv/waQw/5qDKP+dhSn/noYp/52FKf+dhSn/noYp/56GKf+fhyn/noYp/52FKf+dhSn/nYUp/6OK + Kv+wlS3/oIgp/6KJKv+giCn/pYwq/6CIKf9cTxv/BwcC/wAAAP9lVh3/sZYt/6SLKv+bhCj/vJ8v/2RW + Hf8AAAD/Dw4E/39tI/+0mC3/nYUp/52FKf+dhSn/nYUp/52FKf+dhSn/noYp/52FKf+ehin/nYUp/52F + Kf+ehin/nYUp/5yEKP+iiSr/n4cp/56GKf+ljCr/jXgl/ysmD/8AAAD/HRoK/5B6Jv+xli3/noYp/56G + Kf+6nS7/NC0R/wAAAP81LhL/n4cp/6eNKv+dhSn/nYUp/5+HKf+dhSn/noYp/56GKf+dhSn/n4cp/52F + Kf+ehin/noYp/56GKf+ehin/noYp/52FKf+ehin/nYUp/6WMKv+KdSX/OzQU/wkJAv9VSRr/o4oq/6WM + Kv+ehin/pYwq/5iBJ/8eGwv/AAAA/1VJGv+yly3/p40q/52FKf+dhSn/noYp/56GKf+ehin/nYUp/5+H + Kf+ehin/n4cp/52FKf+ehin/noYp/52FKf+ehin/noYp/56GKf+ehin/noYp/5+HKf+Qeib/XVAc/5aA + J/+vlSz/n4cp/6WMKv+1mS3/Zlcd/wkJAv8CAgD/dWQh/7ebLv+bhCj/nYUp/52FKf+ehin/noYp/52F + Kf+fhyn/noYp/56GKf+ehin/noYp/52FKf+fhyn/noYp/52FKf+ehin/nYUp/56GKf+ehin/oIgp/6KJ + Kv+hiCn/powq/6CIKf+giCn/p40q/5J8Jv8vKRD/AAAA/ysmD/+dhSn/rJIs/5qDKP+dhSn/oIgp/5+H + Kf+dhSn/nYUp/56GKf+ehin/noYp/5+HKf+dhSn/noYp/56GKf+dhSn/noYp/52FKf+ehin/nYUp/52F + Kf+dhSn/noYp/6iOK/+ehin/moMo/6KJKv+WgCf/TEEY/wEBAP8BAQD/dGMg/7SYLf+ehin/nYUp/52F + Kf+jiir/noYp/52FKf+ehin/noYp/56GKf+fhyn/nYUp/5+HKf+dhSn/noYp/52FKf+ehin/nYUp/56G + Kf+ehin/nYUp/56GKf+ehin/noYp/52FKf+fhyn/o4oq/5F7Jv9DOhb/AgIA/zw1FP+ljCr/sZYt/5iB + J/+ehin/nYUp/52FKf+dhSn/n4cp/56GKf+ehin/noYp/52FKf+fhyn/nYUp/56GKf+ehin/noYp/52F + Kf+fhyn/nYUp/56GKf+ehin/noYp/56GKf+dhSn/n4cp/52FKf+giCn/n4cp/4NwJP9YTBv/lH4n/6iO + K/+jiir/m4Qo/52FKf+dhSn/nYUp/5+HKf+dhSn/noYp/5+HKf+dhSn/n4cp/52FKf+fhyn/noYp/56G + Kf+ehin/n4cp/52FKf+dhSn/nYUp/52FKf+dhSn/nYUp/5+HKf+dhSn/noYp/56GKf+fhyn/ookq/6SL + Kv+ojiv/ookq/5uEKP+ehin/nYUp/5+HKf+ehin/noYp/56GKf+dhSn/noYp/56GKf+ehin/nYUp/56G + Kf+ehir/nYUp/56GKf+ehin/noYp/56GKf+dhSn/noYp/52FKf+ehin/nYUp/52FKf+dhSn/noYp/56G + Kf+dhSn/n4cp/5uEKP+ehin/noYp/56GKf+ehin/nYUp/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAABAAAAAgAAAAAQAgAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ6GKf+dhSn/noYp/52FKf+ehin/nYUp/52FKf+ehin/nYUp/56G + Kf+dhSn/nYUo/6iOKv+chSj/oIcp/52FKf+dhSn/nYUp/52FKf+dhSn/nYUp/52FKf+dhSn/nYUp/52F + Kf+dhSn/nYUo/5uDKP86MhH/noYp/56GKf+dhSn/noYp/52FKf+dhSn/nYUp/52FKf+dhSn/nYUp/52F + Kf+dhSn/noYp/52FKP+ehij/Ix8K/0E4Ev+pjyv/nIQo/52FKf+ehin/nYUp/56GKf+dhSn/noYp/56G + Kf+ehin/noYo/21dHv+ljCr/oIcp/31qIf8LCQP/mYIn/52FKf+dhSn/nYUp/52FKf+dhSn/nYUp/5yE + KP+iiSn/n4cp/5R+Jv8NCwT/XlAZ/6iOKv+qkCv/GBUH/3JhHv+hiCn/nYUp/5qCLf+SfDf/lX42/5qD + K/+iiSn/bl4d/4ZxI/+qkSv/V0sY/yEdCv+iiir/pYwq/1dKF/8tJg3/rZMs/5uDKv97aFf/Ni+N/zoy + iv+FcEv/noYq/ygjDP9EOhP/qI8r/4h0JP8GBgH/mIEn/6GIKf95ZyH/HBgJ/6mPK/+bhDL/LiiF/wAA + 0/8AAMz/PDNu/6SMLv9pWhv/IR0K/6WMKv+jiir/EA4G/4VxI/+dhSn/hnIj/xEPBv+iiSn/powx/ygi + df8AAM7/AADD/zUtYv+ojy//b14d/x4aCv+kiir/p44q/w4MBP+GcSP/oYgp/4dzJP8RDwb/n4cp/56F + Kv95Zkn/GBV9/yMebP+Dbzv/pYsp/0A3Ev8wKQ7/pYwq/5V/Jv8KCQP/jHcl/56GKf+CbiP/FxQI/6eN + Kv+ehin/nIQs/5Z+Nv+YgTL/nYUq/5uEKP9MQRX/cGAe/6mQKv9xYB7/ExEG/56GKP+iiSr/Z1gc/yci + DP+tkyz/nYUp/52FKf+dhSn/noYp/52FKf+ehin/o4op/5+HKf+dhij/Ix4L/0Q6E/+pjyv/q5Er/yYg + C/9YTBj/pYsq/52FKf+dhSn/nYUp/56GKf+dhSn/nYUp/52FKf+dhSn/moMo/0xBFv+PeSX/oYkp/5Z/ + Jv8KCQP/jHcl/5+GKf+ehin/nYUp/56GKf+ehin/nYUp/52FKf+dhSn/nYUp/52FKf+iiSn/n4co/5+H + KP9DORP/JyIL/6aNKv+chCj/noYp/56GKf+ehin/noYp/52FKf+dhSn/nYUp/52FKf+dhSn/nYUp/56G + Kf+chSj/SD4V/4dzI/+hiSn/nYUp/52FKf+dhSn/nYUp/52FKf+dhSr/nYUp/52FKf+dhSn/nYUp/52F + Kf+dhSn/noYp/6CIKf+giCn/nYUo/52FKf8AAJxBAACcQQAAnEEAAJxBAACcQQAAnEEAAJxBAACcQQAA + nEEAAJxBAACcQQAAnEEAAJxBAACcQQAAnEEAAJxB +</value> + </data> +</root> \ No newline at end of file Added: trunk/plugins/IR Server Suite/Applications/IR File Tool/IR File Tool.csproj =================================================================== --- trunk/plugins/IR Server Suite/Applications/IR File Tool/IR File Tool.csproj (rev 0) +++ trunk/plugins/IR Server Suite/Applications/IR File Tool/IR File Tool.csproj 2008-01-28 11:55:35 UTC (rev 1317) @@ -0,0 +1,105 @@ +<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <PropertyGroup> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <ProductVersion>8.0.50727</ProductVersion> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{B5E711A2-E6D0-4BEA-B66B-7A8B0BCA6A4D}</ProjectGuid> + <OutputType>WinExe</OutputType> + <AppDesignerFolder>Properties</AppDesignerFolder> + <RootNamespace>IRFileTool</RootNamespace> + <AssemblyName>IRFileTool</AssemblyName> + <RunPostBuildEvent>OnOutputUpdated</RunPostBuildEvent> + <StartupObject>IrFileTool.Program</StartupObject> + <ApplicationIcon>Icon.ico</ApplicationIcon> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> + <DebugSymbols>true</DebugSymbols> + <DebugType>full</DebugType> + <Optimize>false</Optimize> + <OutputPath>bin\Debug\</OutputPath> + <DefineConstants>DEBUG;TRACE</DefineConstants> + <ErrorReport>prompt</ErrorReport> + <WarningLevel>4</WarningLevel> + <TreatWarningsAsErrors>true</TreatWarningsAsErrors> + <UseVSHostingProcess>false</UseVSHostingProcess> + <DocumentationFile>bin\Debug\IRFileTool.xml</DocumentationFile> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> + <DebugType>none</DebugType> + <Optimize>true</Optimize> + <OutputPath>bin\Release\</OutputPath> + <DefineConstants> + </DefineConstants> + <ErrorReport>prompt</ErrorReport> + <WarningLevel>4</WarningLevel> + <TreatWarningsAsErrors>true</TreatWarningsAsErrors> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' "> + <DebugSymbols>true</DebugSymbols> + <OutputPath>bin\x86\Debug\</OutputPath> + <DefineConstants>DEBUG;TRACE</DefineConstants> + <DebugType>full</DebugType> + <PlatformTarget>x86</PlatformTarget> + <ErrorReport>prompt</ErrorReport> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' "> + <OutputPath>bin\x86\Release\</OutputPath> + <DefineConstants> + </DefineConstants> + <Optimize>true</Optimize> + <DebugType>pdbonly</DebugType> + <PlatformTarget>x86</PlatformTarget> + <ErrorReport>prompt</ErrorReport> + <UseVSHostingProcess>false</UseVSHostingProcess> + <TreatWarningsAsErrors>true</TreatWarningsAsErrors> + </PropertyGroup> + <ItemGroup> + <Reference Include="System" /> + <Reference Include="System.Drawing" /> + <Reference Include="System.Windows.Forms" /> + <Reference Include="System.Xml" /> + </ItemGroup> + <ItemGroup> + <Compile Include="FormMain.cs"> + <SubType>Form</SubType> + </Compile> + <Compile Include="FormMain.Designer.cs"> + <DependentUpon>FormMain.cs</DependentUpon> + </Compile> + <Compile Include="IrCode.cs" /> + <Compile Include="IrDecoder.cs" /> + <Compile Include="MceDetectionData.cs" /> + <Compile Include="Program.cs" /> + <Compile Include="Pronto.cs" /> + <Compile Include="Properties\AssemblyInfo.cs" /> + <Compile Include="RemoteDetectionData.cs" /> + </ItemGroup> + <ItemGroup> + <EmbeddedResource Include="FormMain.resx"> + <SubType>Designer</SubType> + <DependentUpon>FormMain.cs</DependentUpon> + </EmbeddedResource> + </ItemGroup> + <ItemGroup> + <ProjectReference Include="..\..\Common\IrssComms\IrssComms.csproj"> + <Project>{BCAFDF45-70DD-46FD-8B98-880DDA585AD2}</Project> + <Name>IrssComms</Name> + </ProjectReference> + <ProjectReference Include="..\..\Common\IrssUtils\IrssUtils.csproj"> + <Project>{CA15769C-232E-4CA7-94FD-206A06CA3ABB}</Project> + <Name>IrssUtils</Name> + </ProjectReference> + </ItemGroup> + <ItemGroup> + <Content Include="Icon.ico" /> + </ItemGroup> + <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> + <!-- To modify your build process, add your task inside one of the targets below and uncomment it. + Other similar extension points exist, see Microsoft.Common.targets. + <Target Name="BeforeBuild"> + </Target> + <Target Name="AfterBuild"> + </Target> + --> +</Project> \ No newline at end of file Added: trunk/plugins/IR Server Suite/Applications/IR File Tool/Icon.ico =================================================================== (Binary files differ) Property changes on: trunk/plugins/IR Server Suite/Applications/IR File Tool/Icon.ico ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/plugins/IR Server Suite/Applications/IR File Tool/IrCode.cs =================================================================== --- trunk/plugins/IR Server Suite/Applications/IR File Tool/IrCode.cs (rev 0) +++ trunk/plugins/IR Server Suite/Applications/IR File Tool/IrCode.cs 2008-01-28 11:55:35 UTC (rev 1317) @@ -0,0 +1,291 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; + +// Remember: Pulse is Positive, Space is Negative. + +namespace IrFileTool +{ + + /// <summary> + /// Encapsulates an MCE compatible IR Code. + /// </summary> + class IrCode + { + + #region Constants + + /// <summary> + /// The carrier frequency for this code is Unknown. + /// </summary> + public const int CarrierFrequencyUnknown = -1; + /// <summary> + /// This code does not use a carrier wave. + /// </summary> + public const int CarrierFrequencyDCMode = 0; + /// <summary> + /// Default carrier frequency, 36kHz (the carrier frequency for RC5, RC6 and RC-MM). + /// </summary> + public const int CarrierFrequencyDefault = 36000; + + /// <summary> + /// How long the longest IR Code space should be (microseconds). + /// </summary> + const int LongestSpace = -100000; + + #endregion Constants + + #region Member Variables + + int _carrier; + int[] _timingData; + + #endregion Member Variables + + #region Properties + + /// <summary> + /// Gets or Sets the IR carrier frequency. + /// </summary> + public int Carrier + { + get { return _carrier; } + set { _carrier = value; } + } + + /// <summary> + /// Gets or Sets the IR timing data. + /// </summary> + public int[] TimingData + { + get { return _timingData; } + set { _timingData = value; } + } + + #endregion Properties + + #region Constructors + + public IrCode() : this(CarrierFrequencyUnknown, new int[] { }) { } + public IrCode(int carrier) : this(carrier, new int[] { }) { } + public IrCode(int[] timingData) : this(CarrierFrequencyUnknown, timingData) { } + public IrCode(int carrier, int[] timingData) + { + _carrier = carrier; + _timingData = timingData; + } + + #endregion Constructors + + #region Methods + + /// <summary> + /// Locates the gap between button presses and reduces the data down to just the first press. + /// </summary> + /// <returns><c>true</c> if successful, otherwise <c>false</c>.</returns> + public bool FinalizeData() + { + if (_timingData.Length == 0) + return false; + + List<int> newData = new List<int>(); + + foreach (int time in _timingData) + { + if (time <= LongestSpace) + { + newData.Add(LongestSpace); + break; + } + else + { + newData.Add(time); + } + } + + _timingData = newData.ToArray(); + return true; + } + + /// <summary> + /// Add timing data to this IR Code. + /// </summary> + /// <param name="timingData">Addition timing data.</param> + public void AddTimingData(int[] timingData) + { + List<int> newTimingData = new List<int>(); + + int index = 0; + + if (_timingData.Length > 1) + { + for (index = 0; index < _timingData.Length - 1; index++) + newTimingData.Add(_timingData[index]); + } + else if (_timingData.Length == 0) + { + _timingData = new int[timingData.Length]; + timingData.CopyTo(_timingData, 0); + return; + } + + if (timingData.Length == 0 || index >= _timingData.Length) + return; + + if (Math.Sign(timingData[0]) == Math.Sign(_timingData[index])) + { + newTimingData.Add(_timingData[index] + timingData[0]); + + for (index = 1; index < timingData.Length; index++) + newTimingData.Add(timingData[index]); + } + else + { + newTimingData.Add(_timingData[index]); + newTimingData.AddRange(timingData); + } + + _timingData = newTimingData.ToArray(); + } + + /// <summary> + /// Creates a byte array representation of this IR Code. + /// </summary> + /// <param name="asPronto">Set this parameter true to convert the IR Code into Pronto format.</param> + /// <returns>Byte array representation.</returns> + public byte[] ToByteArray(bool asPronto) + { + StringBuilder output = new StringBuilder(); + + if (asPronto) + { + ushort[] prontoData = Pronto.ConvertIrCodeToProntoRaw(this); + + for (int index = 0; index < prontoData.Length; index++) + { + output.Append(prontoData[index].ToString("X4")); + if (index != prontoData.Length - 1) + output.Append(' '); + } + } + else // Native format (only benefit is a slightly more accurate Carrier Frequency) + { + output.Append("MCE,"); + output.AppendFormat("{0},", _carrier); + + for (int ... [truncated message content] |