Bloxy.USBBluetoothAdapter.hci_DataReceived C# (CSharp) Метод

hci_DataReceived() приватный Метод

private hci_DataReceived ( object sender, EndpointDataEventArgs e ) : void
sender object
e LibUsbDotNet.Main.EndpointDataEventArgs
Результат void
        private void hci_DataReceived(object sender, EndpointDataEventArgs e)
        {
            switch ((HCIEvent)e.Buffer[0])
              {
            case HCIEvent.InquiryComplete:
              {
            lock (_completedCommands)
            {
              _completedCommands.Add(new Opcode(OpcodeGroupField.LinkControl, OpcodeCommandField.Inquiry));
            }

            break;
              }
            case HCIEvent.InquiryResult:
              {
            var opcode = new Opcode(OpcodeGroupField.LinkControl, OpcodeCommandField.Inquiry);
            if (!_commandData.ContainsKey(opcode)) _commandData.Add(opcode, new List<InquiryResult>());
            var list = _commandData[opcode] as List<InquiryResult>;

            int responses = Convert.ToInt32(e.Buffer[2]);
            int offset = 3;
            for (int i = 0; i < responses; i++)
            {
              list.Add(new InquiryResult(Utilities.GetLEULong(e.Buffer, offset + 0, 6), e.Buffer[offset + 6],
                e.Buffer[offset + 7], e.Buffer[offset + 8], (uint)Utilities.GetLEULong(e.Buffer, offset + 9, 3),
                (ushort)Utilities.GetLEULong(e.Buffer, offset + 12, 2)));
              offset += 14;
            }

            break;
              }
            case HCIEvent.ConnectionComplete:
              {
            Logger.WriteLine("Connection Complete, Status: " + e.Buffer[2].ToString("X2"));
            ushort connectionHandle = (ushort)(e.Buffer[3] | (e.Buffer[4] << 8));
            ulong bdAddr = Utilities.GetLEULong(e.Buffer, 5, 6);

            //Raise event out
            if (ConnectionComplete != null)
              ConnectionComplete(this, new HCIEventEventArgs(e.Buffer, e.Count));

            break;
              }
            case HCIEvent.DisconnectionComplete:
              {
            Logger.WriteLine("Disconnection Complete, Status: " + e.Buffer[2].ToString("X2"));

            break;
              }
            case HCIEvent.ConnectionRequest:
              {
            var bdAddr = Utilities.GetLEULong(e.Buffer, 2, 6);
            var deviceClass = Utilities.GetLEULong(e.Buffer, 8, 3);
            byte linkType = e.Buffer[11];
            Logger.WriteLine(String.Format("Connection Request Received, BD_ADDR {0}, class {1}, link type {2}",
              bdAddr.ToString("X12"), deviceClass.ToString("X6"), linkType.ToString("X2")));

            //Accept this request (or do whatever with it)
            if (ConnectionRequestReceived != null)
              ConnectionRequestReceived(this, new HCIEventEventArgs(e.Buffer, e.Count));

            break;
              }
            case HCIEvent.RemoteNameRequestComplete:
              {
            var opcode = new Opcode(OpcodeGroupField.LinkControl, OpcodeCommandField.RemoteNameRequest);
            if (!_commandData.ContainsKey(opcode))
              _commandData.Add(opcode, ASCIIEncoding.ASCII.GetString(e.Buffer, 9, 248).Trim(new char[] {'\0'} ));

            lock (_completedCommands)
            {
              _completedCommands.Add(opcode);
            }

            break;
              }
            case HCIEvent.QoSSetupComplete:
              {
            Logger.WriteLine("QoS Setup Complete");

            break;
              }
            case HCIEvent.Complete:
              {
            var command = new Opcode(e.Buffer, 3);

            lock (_completedCommands)
            {
              _completedCommands.Add(command);
            }

            break;
              }
            case HCIEvent.Status:
              {
            var command = new Opcode(e.Buffer, 4);

            break;
              }
            case HCIEvent.PINCodeRequestEvent:
              {
            var bdAddr = Utilities.GetLEULong(e.Buffer, 2, 6);

            //Send the reply
            SendPINCodeReply(bdAddr, String.Empty);

            break;
              }
            default:
              {
            //Uh?
            Logger.WriteLine("Unknown HCI event: " + e.Buffer[0].ToString("X2"));

            break;
              }
              }
        }