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