Пример #1
0
 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);
         }
     }
 }
Пример #2
0
        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);
        }
Пример #3
0
        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();
        }