/*---------------------------------------------------------------------------* Copyright (C) Nintendo. All rights reserved. These coded instructions, statements, and computer programs contain proprietary information of Nintendo of America Inc. and/or Nintendo Company Ltd., and are protected by Federal copyright law. They may not be disclosed to third parties or copied or duplicated in any form, in whole or in part, without the prior written consent of Nintendo. *---------------------------------------------------------------------------*/ /************************************************************************************\ * CatLog - An SDSG Production * \************************************************************************************/ /*! \file CatLog.cs * \author Andrew Shurney * \brief Main application. Presents simple interface and chooses default port. */ using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO; using System.IO.Ports; namespace CatLog { public partial class CatLog : Form { SerialLog logger; public class LogItem { public String Text { get { StringBuilder logLine = new StringBuilder(); DateTime time = Date.ToLocalTime(); logLine.AppendFormat("[{0,2,D2}:{1,2,D2}:{2,2,D2}] {3}", time.Hour, time.Minute, time.Second, Line); return logLine.ToString(); } } public DateTime Date { get; set; } public String Line { get; set; } public override string ToString() { return Text; } } public CatLog() { InitializeComponent(); Dictionary ports = SelectPortDialog.BuildPortNameHash(SerialPort.GetPortNames()); String defaultPort = null; String defaultPortDesc = null; foreach (KeyValuePair port in ports) { if (port.Value.Contains("Prolific")) { defaultPort = port.Key; defaultPortDesc = port.Value; break; } } if (defaultPort == null) { foreach (KeyValuePair port in ports) { if (port.Value.Contains("USB")) { defaultPort = port.Key; defaultPortDesc = port.Value; break; } } if (defaultPort == null) { if (ports.Count() > 0) { KeyValuePair port = ports.First(); defaultPort = port.Key; defaultPortDesc = port.Value; } else { MessageBox.Show("Please attach ensure your computer has a serial port or a USB to serial converter attached before running this program.", "No Serial Port Found", MessageBoxButtons.OK, MessageBoxIcon.Error); } } } Text = "Cat Logger: " + defaultPortDesc; logger = new SerialLog(defaultPort); logger.Clear += new SerialLog.ClearHandler(logger_Clear); logger.NewData += new SerialLog.NewDataHandler(logger_NewData); logger.Start(); } void logger_NewData(String data) { if(InvokeRequired) { Invoke(new Action(() => logger_NewData(data))); return; } txtLog.AppendText(data.Replace("\r", "\r\n")); } void logger_Clear() { if(InvokeRequired) { Invoke(new Action(() => logger_Clear())); return; } txtLog.Text = ""; } private void btnReset_Click(object sender, EventArgs e) { logger.Reset(); } private void resetToolStripMenuItem1_Click(object sender, EventArgs e) { logger.Reset(); } private void exitToolStripMenuItem_Click(object sender, EventArgs e) { logger.Stop(); Close(); } private void CatLog_FormClosing(object sender, FormClosingEventArgs e) { logger.Stop(); } private void btnSave_Click(object sender, EventArgs e) { Save(0, Int32.MaxValue); } private void saveToolStripMenuItem_Click(object sender, EventArgs e) { Save(0, Int32.MaxValue); } private void choosePortToolStripMenuItem_Click(object sender, EventArgs e) { SelectPortDialog selectPort = new SelectPortDialog(logger.portName); if (selectPort.ShowDialog() == DialogResult.OK) { logger.Stop(); logger.portName = selectPort.Port; Text = "Cat Logger: " + selectPort.PortDesc; logger.Start(); } } void Save(Int32 startIdx, Int32 endIdx) { SaveFileDialog saveDialog = new SaveFileDialog(); saveDialog.AddExtension = true; saveDialog.CheckPathExists = true; saveDialog.DefaultExt = ".log"; DateTime now = DateTime.Now; saveDialog.FileName = String.Format("{0} {1}, {2} {3}.{4}.log", now.ToString("MMM"), now.Day, now.Year, now.Hour, now.Minute); saveDialog.Title = "Save"; saveDialog.Filter = "Log files (*.log)|*.log|Text files (*.txt)|*.txt|All files (*.*)|*.*"; saveDialog.RestoreDirectory = true; if (saveDialog.ShowDialog() == DialogResult.OK) { Stream fileStream = saveDialog.OpenFile(); if (fileStream != null) { UTF8Encoding unicode = new UTF8Encoding(); Byte[] bytes = unicode.GetBytes(txtLog.Text); fileStream.Write(bytes, 0, bytes.Length); fileStream.Close(); } } } } }