private void HandleInquiry(BluetoothAddress address) { if (_FoundDevices.ContainsKey(address)) { _FoundDevices[address].LastSeen = DateTime.Now; } else { if (_NameRequested.Contains(address)) { if ((!_FoundDevices.ContainsKey(address)) && _LostDevices.ContainsKey(address)) { BluezDeviceInfo info = _LostDevices[address]; info.LastSeen = DateTime.Now; _LostDevices.Remove(address); _FoundDevices.Add(address, info); if (DeviceFound != null) { DeviceFound(this, new DeviceInfoEventArgs(_FoundDevices[address])); } FlushSocket(); } } else { _NameRequested.Add(address); RequestRemoteName(address); } } }
public IDevice Connect(IDeviceInfo deviceInfo) { BluezDeviceInfo info = deviceInfo as BluezDeviceInfo; if (info == null) { throw new ArgumentException("The specified IDeviceInfo does not belong to this DeviceProvider.", "deviceInfo"); } Stream bluezStream = new BluezStream(info.Address); IWiiDevice device = null; // determine the device type if (info.Name == "Nintendo RVL-WBC-01") { device = new ReportBalanceBoard(deviceInfo, bluezStream); } else if (info.Name == "Nintendo RVL-CNT-01") { device = new ReportWiimote(deviceInfo, bluezStream); } else { throw new ArgumentException("The specified deviceInfo with name '" + info.Name + "' is not supported.", "deviceInfo"); } try { device.Initialize(); } catch (Exception e) { throw new DeviceConnectException("Failed to connect to device", e); } _FoundDevices.Remove(info.Address); _LostDevices.Add(info.Address, info); if (DeviceLost != null) { DeviceLost(this, new DeviceInfoEventArgs(info)); } _ConnectedDevices.Add(device); device.Disconnected += DeviceDisconnectedHandler; if (DeviceConnected != null) { DeviceConnected(this, new DeviceEventArgs(device)); } return(device); }
private void ParseRemoteNameReqComplete(byte[] buffer, int offset, int count) { // parse the bytes //byte status = buffer[offset]; BluetoothAddress address = CreateAddress(buffer, offset + 1); int nameCount = count - 7; int endOfName = Array.IndexOf <byte>(buffer, 0, offset + 7, nameCount) - (offset + 7); if (endOfName < 0) { endOfName = nameCount; } string name = System.Text.Encoding.ASCII.GetString(buffer, offset + 7, endOfName); switch (name) { case "Nintendo RVL-WBC-01": case "Nintendo RVL-CNT-01": break; default: return; } if (_FoundDevices.ContainsKey(address) || IsConnected(address)) { return; } // create a new deviceinfo and throw a DeviceFound event BluezDeviceInfo info = new BluezDeviceInfo(address, name); _FoundDevices.Add(address, info); if (DeviceFound != null) { DeviceFound(this, new DeviceInfoEventArgs(info)); } FlushSocket(); }