1 /*---------------------------------------------------------------------------* 2 3 Copyright (C) 2009-2014 Nintendo. All rights reserved. 4 5 These coded instructions, statements, and computer programs contain 6 proprietary information of Nintendo of America Inc. and/or Nintendo 7 Company Ltd., and are protected by Federal copyright law. They may 8 not be disclosed to third parties or copied or duplicated in any form, 9 in whole or in part, without the prior written consent of Nintendo. 10 11 *---------------------------------------------------------------------------*/ 12 13 /************************************************************************************\ 14 * CatLog - An SDSG Production * 15 \************************************************************************************/ 16 17 /*! \file CatLog.cs 18 * \author Andrew Shurney 19 * \brief Main application. Presents simple interface and chooses default port. 20 */ 21 22 using System; 23 using System.Collections.Generic; 24 using System.ComponentModel; 25 using System.Data; 26 using System.Drawing; 27 using System.Linq; 28 using System.Text; 29 using System.Windows.Forms; 30 using System.IO; 31 using System.IO.Ports; 32 33 namespace CatLog 34 { 35 public partial class CatLog : Form 36 { 37 SerialLog logger; 38 39 public class LogItem 40 { 41 public String Text 42 { 43 get 44 { 45 StringBuilder logLine = new StringBuilder(); 46 DateTime time = Date.ToLocalTime(); 47 logLine.AppendFormat("[{0,2,D2}:{1,2,D2}:{2,2,D2}] {3}", time.Hour, time.Minute, time.Second, Line); 48 49 return logLine.ToString(); 50 } 51 } 52 53 public DateTime Date { get; set; } 54 public String Line { get; set; } 55 ToString()56 public override string ToString() 57 { 58 return Text; 59 } 60 } 61 CatLog()62 public CatLog() 63 { 64 InitializeComponent(); 65 66 Dictionary<String, String> ports = SelectPortDialog.BuildPortNameHash(SerialPort.GetPortNames()); 67 String defaultPort = null; 68 String defaultPortDesc = null; 69 foreach (KeyValuePair<String, String> port in ports) 70 { 71 if (port.Value.Contains("Prolific")) 72 { 73 defaultPort = port.Key; 74 defaultPortDesc = port.Value; 75 76 break; 77 } 78 } 79 80 if (defaultPort == null) 81 { 82 foreach (KeyValuePair<String, String> port in ports) 83 { 84 if (port.Value.Contains("USB")) 85 { 86 defaultPort = port.Key; 87 defaultPortDesc = port.Value; 88 break; 89 } 90 } 91 92 if (defaultPort == null) 93 { 94 if (ports.Count() > 0) 95 { 96 KeyValuePair<String, String> port = ports.First(); 97 defaultPort = port.Key; 98 defaultPortDesc = port.Value; 99 } 100 else 101 { 102 MessageBox.Show("Please attach ensure your computer has a serial port or a USB to serial converter attached before running this program.", 103 "No Serial Port Found", MessageBoxButtons.OK, MessageBoxIcon.Error); 104 } 105 } 106 } 107 108 Text = "Cat Logger: " + defaultPortDesc; 109 110 logger = new SerialLog(defaultPort); 111 logger.Clear += new SerialLog.ClearHandler(logger_Clear); 112 logger.NewData += new SerialLog.NewDataHandler(logger_NewData); 113 logger.Start(); 114 } 115 logger_NewData(String data)116 void logger_NewData(String data) 117 { 118 if(InvokeRequired) 119 { 120 Invoke(new Action(() => logger_NewData(data))); 121 return; 122 } 123 124 txtLog.AppendText(data.Replace("\r", "\r\n")); 125 } 126 logger_Clear()127 void logger_Clear() 128 { 129 if(InvokeRequired) 130 { 131 Invoke(new Action(() => logger_Clear())); 132 return; 133 } 134 135 txtLog.Text = ""; 136 } 137 btnReset_Click(object sender, EventArgs e)138 private void btnReset_Click(object sender, EventArgs e) 139 { 140 logger.Reset(); 141 } 142 resetToolStripMenuItem1_Click(object sender, EventArgs e)143 private void resetToolStripMenuItem1_Click(object sender, EventArgs e) 144 { 145 logger.Reset(); 146 } 147 exitToolStripMenuItem_Click(object sender, EventArgs e)148 private void exitToolStripMenuItem_Click(object sender, EventArgs e) 149 { 150 logger.Stop(); 151 152 Close(); 153 } 154 CatLog_FormClosing(object sender, FormClosingEventArgs e)155 private void CatLog_FormClosing(object sender, FormClosingEventArgs e) 156 { 157 logger.Stop(); 158 } 159 btnSave_Click(object sender, EventArgs e)160 private void btnSave_Click(object sender, EventArgs e) 161 { 162 Save(0, Int32.MaxValue); 163 } 164 saveToolStripMenuItem_Click(object sender, EventArgs e)165 private void saveToolStripMenuItem_Click(object sender, EventArgs e) 166 { 167 Save(0, Int32.MaxValue); 168 } 169 choosePortToolStripMenuItem_Click(object sender, EventArgs e)170 private void choosePortToolStripMenuItem_Click(object sender, EventArgs e) 171 { 172 SelectPortDialog selectPort = new SelectPortDialog(logger.portName); 173 if (selectPort.ShowDialog() == DialogResult.OK) 174 { 175 logger.Stop(); 176 177 logger.portName = selectPort.Port; 178 Text = "Cat Logger: " + selectPort.PortDesc; 179 180 logger.Start(); 181 } 182 } 183 Save(Int32 startIdx, Int32 endIdx)184 void Save(Int32 startIdx, Int32 endIdx) 185 { 186 SaveFileDialog saveDialog = new SaveFileDialog(); 187 saveDialog.AddExtension = true; 188 saveDialog.CheckPathExists = true; 189 saveDialog.DefaultExt = ".log"; 190 191 DateTime now = DateTime.Now; 192 193 saveDialog.FileName = String.Format("{0} {1}, {2} {3}.{4}.log", now.ToString("MMM"), now.Day, now.Year, now.Hour, now.Minute); 194 saveDialog.Title = "Save"; 195 saveDialog.Filter = "Log files (*.log)|*.log|Text files (*.txt)|*.txt|All files (*.*)|*.*"; 196 saveDialog.RestoreDirectory = true; 197 198 if (saveDialog.ShowDialog() == DialogResult.OK) 199 { 200 Stream fileStream = saveDialog.OpenFile(); 201 202 if (fileStream != null) 203 { 204 UTF8Encoding unicode = new UTF8Encoding(); 205 206 Byte[] bytes = unicode.GetBytes(txtLog.Text); 207 fileStream.Write(bytes, 0, bytes.Length); 208 209 fileStream.Close(); 210 } 211 } 212 } 213 } 214 } 215