//private static List<UsbEndpointWriter> writers; //TODO: Implement multiple controller writers //private static List<UsbEndpointReader> readers; //TODO: Implement multiple controller writers public MainWindow() { System.Windows.Application.Current.MainWindow = this; InitializeComponent(); ValidateRegistrySettings(); jController = new JoystickController(); cController = new ChatpadController(); try { MyUsbFinder = new UsbDeviceFinder(1118, 1817); MyUsbDevice = UsbDevice.OpenUsbDevice(MyUsbFinder); if (MyUsbDevice == null) //support other product id (knock-off?) { ErrorLogging.WriteLogEntry("USB Device (1118,1817) not found: ", ErrorLogging.LogLevel.Fatal); MyUsbFinder = new UsbDeviceFinder(1118, 657); MyUsbDevice = UsbDevice.OpenUsbDevice(MyUsbFinder); if (MyUsbDevice == null) { ErrorLogging.WriteLogEntry("USB Device (1118,657) not found: ", ErrorLogging.LogLevel.Fatal); } } } catch (Exception e) { ErrorLogging.WriteLogEntry(String.Format("No USB Device found: {0}", e.InnerException), ErrorLogging.LogLevel.Fatal); } try { IUsbDevice wholeUsbDevice = MyUsbDevice as IUsbDevice; if (!ReferenceEquals(wholeUsbDevice, null)) { try { wholeUsbDevice.SetConfiguration(1); wholeUsbDevice.ClaimInterface(0); reader = MyUsbDevice.OpenEndpointReader(ReadEndpointID.Ep01); writer = MyUsbDevice.OpenEndpointWriter(WriteEndpointID.Ep01); reader.DataReceived += new EventHandler<EndpointDataEventArgs>(reader_DataReceived); reader.DataReceivedEnabled = true; } catch (Exception e) { ErrorLogging.WriteLogEntry(String.Format("Error opening endpoints: {0}", e.InnerException), ErrorLogging.LogLevel.Fatal); } } else { ErrorLogging.WriteLogEntry("Whole USB device is not implemented", ErrorLogging.LogLevel.Error); } } catch (Exception e) { ErrorLogging.WriteLogEntry(String.Format("Failure converting usb device to whole usb device: {0}", e.InnerException), ErrorLogging.LogLevel.Fatal); } try { timer.Start(); InitializeChatpad(); InitializeController(); } catch (Exception e) { ErrorLogging.WriteLogEntry(String.Format("Error in init of chatpad or controller: {0}", e.InnerException), ErrorLogging.LogLevel.Fatal); } timer.Tick += new EventHandler(dispatcherTimer_Tick); timer.Interval = new TimeSpan(0, 0, 0, 1, 0); ni.Icon = new Icon(@"Images\controller.ico"); ni.Visible = true; ni.Click += delegate(object sender, EventArgs args) { this.Show(); this.WindowState = WindowState.Normal; }; }
public static void OutputMappingForChatPad(byte[] response,ChatpadController cController, uint controllerIndex,MainWindow mw) { if (response[1] == 2 && response[3] == 240) { if (response[24] != 240) //Keep Alive for Chat pad with counting hex, no value in keeping { if (response[25] != 0) { switch (response[25]) { case 1: { if (!orangeModifier) { shiftModifier = true; } else { capsLockModifier = !capsLockModifier; mw.CapsLockModifier(); } break; } case 2: { greenModifier = !greenModifier; mw.GreenModifier(); break; } case 4: { orangeModifier = !orangeModifier; mw.OrangeModifier(); break; } case 8: { peopleModifier = !peopleModifier; mw.PeopleModifier(); break; } } } if (response[26] != 0) { string key = cController.GetChatPadKeyValue(response[26].ToString(), orangeModifier, greenModifier); if (key.Length != 0) { if (!SpecialKeyAssignment(key)) { if (!capsLockModifier && !shiftModifier) { SendKeys.SendWait(key); } else { SendKeys.SendWait(key.ToUpper()); } } } if (response[26] != response[27] && response[27] != 0) { if (key.Length != 0) { key = cController.GetChatPadKeyValue(response[27].ToString(), orangeModifier, greenModifier); if (!SpecialKeyAssignment(key)) { if (!capsLockModifier && !shiftModifier) { SendKeys.SendWait(key); } else { SendKeys.SendWait(key.ToUpper()); } } } } } } } shiftModifier = false; }