using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace Fron { public partial class Main : Form { #region Declarations private List _devices; #endregion #region Constructors / Teardown public Main() { InitializeComponent(); _devices = new List(); } #endregion #region Public Methods public DirectUSB.TIDevice SelectedDevice { get { DirectUSB.TIDevice ret = null; if (lstDevices.SelectedItem != null) ret = lstDevices.SelectedItem as DirectUSB.TIDevice; return ret; } } #endregion #region Form Event Handlers private void Main_Load(object sender, EventArgs e) { mniRefreshDeviceList.PerformClick(); } private void Main_FormClosing(object sender, FormClosingEventArgs e) { try { _DisconnectAllDevices(); } catch { //Eat it, we're going down... } } private void mniRefreshDeviceList_Click(object sender, EventArgs e) { _devices = DirectUSB.TIDevice.GetAttachedDevices(new int[] { 0x0451 }); lstDevices.DataSource = _devices; } private void mniAbout_Click(object sender, EventArgs e) { var asm = System.Reflection.Assembly.GetExecutingAssembly(); var info = asm.GetName(); MessageBox.Show(String.Format("{0} v{1}\r\n{2}\r\n\r\nJust a little test program for the Direct USB library.", info.Name, info.Version.ToString(3), "Brandon Wilson"), "About", MessageBoxButtons.OK, MessageBoxIcon.Information); } private void mniExit_Click(object sender, EventArgs e) { this.Close(); } private void mniRequestAllParameters_Click(object sender, EventArgs e) { if (this.SelectedDevice != null) { bool wasEnabled = this.Enabled; this.Enabled = false; mniRequestScreenshot.PerformClick(); this.SelectedDevice.Connect(); var parameters = new List(); parameters.Add(DirectUSB.Parameters.Parameter.ParameterType.ProductNumber); parameters.Add(DirectUSB.Parameters.Parameter.ParameterType.ProductName); parameters.Add(DirectUSB.Parameters.Parameter.ParameterType.CalculatorID); parameters.Add(DirectUSB.Parameters.Parameter.ParameterType.HardwareVersion); parameters.Add(DirectUSB.Parameters.Parameter.ParameterType.LanguageId); parameters.Add(DirectUSB.Parameters.Parameter.ParameterType.SubLanguageId); parameters.Add(DirectUSB.Parameters.Parameter.ParameterType.DeviceType); parameters.Add(DirectUSB.Parameters.Parameter.ParameterType.BootVersion); parameters.Add(DirectUSB.Parameters.Parameter.ParameterType.OSLoaded); parameters.Add(DirectUSB.Parameters.Parameter.ParameterType.OSVersion); parameters.Add(DirectUSB.Parameters.Parameter.ParameterType.RAMPresent); parameters.Add(DirectUSB.Parameters.Parameter.ParameterType.RAMAvailable); parameters.Add(DirectUSB.Parameters.Parameter.ParameterType.RAMFree); parameters.Add(DirectUSB.Parameters.Parameter.ParameterType.FlashROMPresent); parameters.Add(DirectUSB.Parameters.Parameter.ParameterType.FlashROMAvailable); parameters.Add(DirectUSB.Parameters.Parameter.ParameterType.FlashROMFree); parameters.Add(DirectUSB.Parameters.Parameter.ParameterType.ApplicationPagesAvailable); parameters.Add(DirectUSB.Parameters.Parameter.ParameterType.ApplicationPagesFree); parameters.Add(DirectUSB.Parameters.Parameter.ParameterType.LCDWidth); parameters.Add(DirectUSB.Parameters.Parameter.ParameterType.LCDHeight); parameters.Add(DirectUSB.Parameters.Parameter.ParameterType.LCDContents); parameters.Add(DirectUSB.Parameters.Parameter.ParameterType.ClockOn); parameters.Add(DirectUSB.Parameters.Parameter.ParameterType.Time); parameters.Add(DirectUSB.Parameters.Parameter.ParameterType.DateFormat); parameters.Add(DirectUSB.Parameters.Parameter.ParameterType.HourMode); parameters.Add(DirectUSB.Parameters.Parameter.ParameterType.BatteriesGood); parameters.Add(DirectUSB.Parameters.Parameter.ParameterType.FullCalculatorID); parameters.Add(DirectUSB.Parameters.Parameter.ParameterType.AtHomescreen); parameters.Add(DirectUSB.Parameters.Parameter.ParameterType.ScreenSplit); var calcInfo = this.SelectedDevice.SendParameterRequest(parameters); mniRequestDirectoryListing.PerformClick(); this.Enabled = wasEnabled; } } private void mniRequestDirectoryListing_Click(object sender, EventArgs e) { if (this.SelectedDevice != null) { bool wasEnabled = this.Enabled; this.Enabled = false; this.SelectedDevice.Connect(); int size = this.SelectedDevice.SendNegotiateBufferSize(0x400); this.SelectedDevice.SendPingSetMode(DirectUSB.VirtualPackets.PingSetModePacket.CalculatorMode.Normal, 0x07D0); var attributes = new List(); attributes.Add(DirectUSB.Attributes.Attribute.AttributeType.VariableSize); attributes.Add(DirectUSB.Attributes.Attribute.AttributeType.VariableType); attributes.Add(DirectUSB.Attributes.Attribute.AttributeType.ArchivedStatus); var vars = this.SelectedDevice.SendDirectoryListing(attributes); if (vars.Count > 0) { txtOutput.AppendText("Variables on device:\r\n"); foreach (var info in vars) { txtOutput.AppendText("\r\n\tVariable Name: " + info.VariableName + "\r\n"); foreach (var attrib in info.Attributes) { switch (attrib.Type) { case DirectUSB.Attributes.Attribute.AttributeType.VariableType: { var a = attrib as DirectUSB.Attributes.VariableTypeAttribute; txtOutput.AppendText("\t\tVariable Type: " + a.VariableType.ToString("X2") + "\r\n"); break; } case DirectUSB.Attributes.Attribute.AttributeType.VariableSize: { var a = attrib as DirectUSB.Attributes.VariableSizeAttribute; txtOutput.AppendText("\t\tVariable Size: " + a.Size.ToString() + " bytes\r\n"); break; } case DirectUSB.Attributes.Attribute.AttributeType.ArchivedStatus: { var a = attrib as DirectUSB.Attributes.ArchivedStatusAttribute; txtOutput.AppendText("\t\tArchived?: " + (a.IsArchived ? "Yes" : "No") + "\r\n"); break; } default: { txtOutput.AppendText("\t\tUnknown Attribute, Type " + ((short)attrib.Type).ToString("X4") + ": "); foreach (byte b in attrib.Data) { txtOutput.AppendText(b.ToString() + " "); } txtOutput.AppendText("\r\n"); break; } } } } txtOutput.AppendText("\r\n"); } this.Enabled = wasEnabled; } } private void mniRequestScreenshot_Click(object sender, EventArgs e) { if (this.SelectedDevice != null) { bool wasEnabled = this.Enabled; this.Enabled = false; this.SelectedDevice.Connect(); int size = this.SelectedDevice.SendNegotiateBufferSize(0x400); this.SelectedDevice.SendPingSetMode(DirectUSB.VirtualPackets.PingSetModePacket.CalculatorMode.Normal, 0x07D0); var parameters = new List(); parameters.Add(DirectUSB.Parameters.Parameter.ParameterType.LCDContents); var pic = this.SelectedDevice.SendParameterRequest(parameters); var p = pic[0] as DirectUSB.Parameters.LCDContentsParameter; picDevice.Image = p.LCDContents; txtOutput.AppendText("Screenshot updated.\r\n\r\n"); this.Enabled = wasEnabled; } } private void mniRequestBatteryStatus_Click(object sender, EventArgs e) { _RequestParameter(DirectUSB.Parameters.Parameter.ParameterType.BatteriesGood); } private void _RequestParameter(DirectUSB.Parameters.Parameter.ParameterType type) { if (this.SelectedDevice != null) { bool wasEnabled = this.Enabled; this.Enabled = false; this.SelectedDevice.Connect(); int size = this.SelectedDevice.SendNegotiateBufferSize(0x400); this.SelectedDevice.SendPingSetMode(DirectUSB.VirtualPackets.PingSetModePacket.CalculatorMode.Normal, 0x07D0); var parameters = new List(); parameters.Add(type); var items = this.SelectedDevice.SendParameterRequest(parameters); prgParameterInfo.SelectedObject = items[0]; txtOutput.AppendText(String.Format("Parameter '{0}' retrieved. See grid to the right for details.\r\n\r\n", Enum.GetName(typeof(DirectUSB.Parameters.Parameter.ParameterType), type))); this.Enabled = wasEnabled; } } private void mniRequestProductNumber_Click(object sender, EventArgs e) { _RequestParameter(DirectUSB.Parameters.Parameter.ParameterType.ProductNumber); } private void mniRequestProductName_Click(object sender, EventArgs e) { _RequestParameter(DirectUSB.Parameters.Parameter.ParameterType.ProductName); } private void mniRequestCalcIDPartial_Click(object sender, EventArgs e) { _RequestParameter(DirectUSB.Parameters.Parameter.ParameterType.CalculatorID); } private void mniRequestCalcIDFull_Click(object sender, EventArgs e) { _RequestParameter(DirectUSB.Parameters.Parameter.ParameterType.FullCalculatorID); } private void mniRequestHWVersion_Click(object sender, EventArgs e) { _RequestParameter(DirectUSB.Parameters.Parameter.ParameterType.HardwareVersion); } private void mniRequestLanguageID_Click(object sender, EventArgs e) { _RequestParameter(DirectUSB.Parameters.Parameter.ParameterType.LanguageId); } private void mniRequestSubLanguageID_Click(object sender, EventArgs e) { _RequestParameter(DirectUSB.Parameters.Parameter.ParameterType.SubLanguageId); } private void mniRequestDeviceType_Click(object sender, EventArgs e) { _RequestParameter(DirectUSB.Parameters.Parameter.ParameterType.DeviceType); } private void mniRequestBootVersion_Click(object sender, EventArgs e) { _RequestParameter(DirectUSB.Parameters.Parameter.ParameterType.BootVersion); } private void mniRequestOSLoaded_Click(object sender, EventArgs e) { _RequestParameter(DirectUSB.Parameters.Parameter.ParameterType.OSLoaded); } private void mniRequestOSVersion_Click(object sender, EventArgs e) { _RequestParameter(DirectUSB.Parameters.Parameter.ParameterType.OSVersion); } private void mniRequestRAMPresent_Click(object sender, EventArgs e) { _RequestParameter(DirectUSB.Parameters.Parameter.ParameterType.RAMPresent); } private void mniRequestRAMAvailable_Click(object sender, EventArgs e) { _RequestParameter(DirectUSB.Parameters.Parameter.ParameterType.RAMAvailable); } private void mniRequestRAMFree_Click(object sender, EventArgs e) { _RequestParameter(DirectUSB.Parameters.Parameter.ParameterType.RAMFree); } private void mniRequestFlashROMPresent_Click(object sender, EventArgs e) { _RequestParameter(DirectUSB.Parameters.Parameter.ParameterType.FlashROMPresent); } private void mniRequestFlashROMAvailable_Click(object sender, EventArgs e) { _RequestParameter(DirectUSB.Parameters.Parameter.ParameterType.FlashROMAvailable); } private void mniRequestFlashROMFree_Click(object sender, EventArgs e) { _RequestParameter(DirectUSB.Parameters.Parameter.ParameterType.FlashROMFree); } private void mniRequestAppPagesAvailable_Click(object sender, EventArgs e) { _RequestParameter(DirectUSB.Parameters.Parameter.ParameterType.ApplicationPagesAvailable); } private void mniRequestAppPagesFree_Click(object sender, EventArgs e) { _RequestParameter(DirectUSB.Parameters.Parameter.ParameterType.ApplicationPagesFree); } private void mniRequestLCDWidth_Click(object sender, EventArgs e) { _RequestParameter(DirectUSB.Parameters.Parameter.ParameterType.LCDWidth); } private void mniRequestLCDHeight_Click(object sender, EventArgs e) { _RequestParameter(DirectUSB.Parameters.Parameter.ParameterType.LCDHeight); } private void mniRequestClockOn_Click(object sender, EventArgs e) { _RequestParameter(DirectUSB.Parameters.Parameter.ParameterType.ClockOn); } private void mniRequestTime_Click(object sender, EventArgs e) { _RequestParameter(DirectUSB.Parameters.Parameter.ParameterType.Time); } private void mniRequestDateFormat_Click(object sender, EventArgs e) { _RequestParameter(DirectUSB.Parameters.Parameter.ParameterType.DateFormat); } private void mniRequestHourMode_Click(object sender, EventArgs e) { _RequestParameter(DirectUSB.Parameters.Parameter.ParameterType.HourMode); } private void mniRequestAtHomescreen_Click(object sender, EventArgs e) { _RequestParameter(DirectUSB.Parameters.Parameter.ParameterType.AtHomescreen); } private void mniRequestSplitScreen_Click(object sender, EventArgs e) { _RequestParameter(DirectUSB.Parameters.Parameter.ParameterType.ScreenSplit); } private void mniRequestVariable_Click(object sender, EventArgs e) { bool wasEnabled = this.Enabled; this.Enabled = false; if (this.SelectedDevice != null) { var frm = new SelectVariable(this.SelectedDevice); if (frm.ShowDialog() == DialogResult.OK && frm.SelectedVariable != null) { this.SelectedDevice.Connect(); int size = this.SelectedDevice.SendNegotiateBufferSize(0x400); this.SelectedDevice.SendPingSetMode(DirectUSB.VirtualPackets.PingSetModePacket.CalculatorMode.Normal, 0x07D0); var specifiedAttributes = new List(); specifiedAttributes.Add(new DirectUSB.Attributes.VariableTypeSpecifiedAttribute(frm.SelectedVariable.RawVariableType.Value)); var requestedAttributes = new List(); requestedAttributes.Add(DirectUSB.Attributes.Attribute.AttributeType.VariableSize); requestedAttributes.Add(DirectUSB.Attributes.Attribute.AttributeType.VariableType); requestedAttributes.Add(DirectUSB.Attributes.Attribute.AttributeType.ArchivedStatus); var v = this.SelectedDevice.SendVariableRequest(frm.SelectedVariable.VariableName, requestedAttributes, specifiedAttributes); prgParameterInfo.SelectedObject = v; txtOutput.AppendText("Variable retrieved. See data on the right for details.\r\n\r\n"); } } this.Enabled = wasEnabled; } private void mniDeleteVariable_Click(object sender, EventArgs e) { bool wasEnabled = this.Enabled; this.Enabled = false; if (this.SelectedDevice != null) { var frm = new SelectVariable(this.SelectedDevice); if (frm.ShowDialog() == DialogResult.OK && frm.SelectedVariable != null) { this.SelectedDevice.Connect(); int size = this.SelectedDevice.SendNegotiateBufferSize(0x400); this.SelectedDevice.SendPingSetMode(DirectUSB.VirtualPackets.PingSetModePacket.CalculatorMode.Normal, 0x07D0); var specifiedAttributes = new List(); specifiedAttributes.Add(new DirectUSB.Attributes.VariableTypeSpecifiedAttribute(frm.SelectedVariable.RawVariableType.Value)); this.SelectedDevice.SendVariableDeleteRequest(frm.SelectedVariable.VariableName, specifiedAttributes); txtOutput.AppendText("Variable deleted.\r\n\r\n"); } } this.Enabled = wasEnabled; } private void mniSetClock_Click(object sender, EventArgs e) { bool wasEnabled = this.Enabled; this.Enabled = false; this.SelectedDevice.Connect(); int size = this.SelectedDevice.SendNegotiateBufferSize(0x400); this.SelectedDevice.SendPingSetMode(DirectUSB.VirtualPackets.PingSetModePacket.CalculatorMode.Normal, 0x07D0); this.SelectedDevice.SendSetClockRequest(DateTime.Now); txtOutput.AppendText("Clock set to PC time.\r\n\r\n"); this.Enabled = wasEnabled; } private void mniRemotelyExecuteProgram_Click(object sender, EventArgs e) { bool wasEnabled = this.Enabled; this.Enabled = false; if (this.SelectedDevice != null) { var filter = new List(); filter.Add(0x05); filter.Add(0x06); var frm = new SelectVariable(this.SelectedDevice, filter); if (frm.ShowDialog() == DialogResult.OK && frm.SelectedVariable != null) { this.SelectedDevice.Connect(); int size = this.SelectedDevice.SendNegotiateBufferSize(0x400); this.SelectedDevice.SendPingSetMode(DirectUSB.VirtualPackets.PingSetModePacket.CalculatorMode.Normal, 0x07D0); this.SelectedDevice.RemotelyExecuteProgram(frm.SelectedVariable.VariableName); txtOutput.AppendText("Program executed.\r\n\r\n"); } } this.Enabled = wasEnabled; } private void mniRemotelyExecuteApp_Click(object sender, EventArgs e) { bool wasEnabled = this.Enabled; this.Enabled = false; if (this.SelectedDevice != null) { var filter = new List(); filter.Add(0x24); var frm = new SelectVariable(this.SelectedDevice, filter); if (frm.ShowDialog() == DialogResult.OK && frm.SelectedVariable != null) { this.SelectedDevice.Connect(); int size = this.SelectedDevice.SendNegotiateBufferSize(0x400); this.SelectedDevice.SendPingSetMode(DirectUSB.VirtualPackets.PingSetModePacket.CalculatorMode.Normal, 0x07D0); this.SelectedDevice.RemotelyExecuteFlashApplication(frm.SelectedVariable.VariableName); txtOutput.AppendText("Flash application executed.\r\n\r\n"); } } this.Enabled = wasEnabled; } private void mniSendRemoteKeypress_Click(object sender, EventArgs e) { bool wasEnabled = this.Enabled; this.Enabled = false; if (this.SelectedDevice != null) { var filter = new List(); filter.Add(0x24); var frm = new SelectKeypress(); if (frm.ShowDialog() == DialogResult.OK) { this.SelectedDevice.Connect(); int size = this.SelectedDevice.SendNegotiateBufferSize(0x400); this.SelectedDevice.SendPingSetMode(DirectUSB.VirtualPackets.PingSetModePacket.CalculatorMode.Normal, 0x07D0); this.SelectedDevice.SendRemoteKeypress(frm.SelectedKeypress.KeyCode, frm.SelectedKeypress.KeyExtend); txtOutput.AppendText("Keypress sent.\r\n\r\n"); } } this.Enabled = wasEnabled; } #endregion #region Local Methods private void _DisconnectAllDevices() { foreach (var device in _devices) { if (device != null) device.Disconnect(); } } #endregion } }