/// <summary> /// キーボードデバイス名を指定してオープンする /// </summary> /// <param name="friendlyName">キーボードデバイス名</param> public void Open(string friendlyName) { KeyboardDeviceInfo kdi = devices.Find(x => x.FriendlyName == friendlyName) ?? throw new NoKeyboardDeviceException(); // サーバを閉じる myClient?.Close(); myClient = null; // COMポートを閉じる myPort?.Close(); myPort = null; switch (kdi.DeviceType) { case KeyboardDeviceInfo.KeyboardDeviceType.COM: OpenCOMPort(kdi); break; case KeyboardDeviceInfo.KeyboardDeviceType.SERVER: OpenServer(kdi); break; default: break; } }
/// <summary> /// キーボードサーバに接続する /// </summary> /// <param name="kdi"></param> private void OpenServer(KeyboardDeviceInfo kdi) { myClient?.Close(); myClient = new TcpClient(kdi.DeviceName, this.serverPort); Task receive = ReceiveServer(); OnKeyboardDeviceConnected(new KeyboardDeviceEventArgs(kdi.FriendlyName)); Console.Out.WriteLine(String.Format("{0} に接続しました。", kdi.FriendlyName)); }
/// <summary> /// 発見したキーボードデバイスを追加する。 /// </summary> /// <param name="deviceName">キーボードデバイス名</param> private void AddDevice(KeyboardDeviceInfo kdi) { if (devices.Exists(x => x.FriendlyName == kdi.FriendlyName)) { return; } devices.Add(kdi); OnKeyboardDeviceFound(new KeyboardDeviceEventArgs(kdi.FriendlyName)); }
/// <summary> /// COMポートのオープン /// </summary> private void OpenCOMPort(KeyboardDeviceInfo kdi) { int BaudRate = 921600; Parity Parity = Parity.None; int DataBits = 8; StopBits StopBits = StopBits.One; myPort = new SerialPort(kdi.DeviceName, BaudRate, Parity, DataBits, StopBits) { Handshake = Handshake.XOnXOff }; myPort.Open(); myPort.DataReceived += new SerialDataReceivedEventHandler(ReceiveCOMPort); OnKeyboardDeviceConnected(new KeyboardDeviceEventArgs(kdi.FriendlyName)); COMSendEnable = true; Console.Out.WriteLine(String.Format("{0} をオープンしました。", kdi.FriendlyName)); }