public NintendoController(HidDevice device) { this.device = device; CommandInterface command = GetCommands(); try { command.SendCommand(0x80, new byte[] { 0x01 }); // throws exception on Bluetooth connection (is the controller throwing it?) // use this to detect if it's USB or Bluetooth connectionType = ConnectionType.USB; // command accepted, must be USB // command itself returns info like MAC address and info about connected controllers (joycon grip) } catch (Exception) { connectionType = ConnectionType.Bluetooth; } if (connectionType == ConnectionType.USB) { // rest of USB handshake command.SendCommand(0x80, new byte[] { 0x02 }); command.SendCommand(0x80, new byte[] { 0x03 }); command.SendCommand(0x80, new byte[] { 0x02 }); command.SendCommand(0x80, new byte[] { 0x04 }); // freezes entire joycon if sent again (for example, if the program inits, then is restarted. better detection needed) } }