示例#1
0
        private void ReadName()
        {
            byte[] arr = new byte[StackConsts.MAX_NAME_LENGTH];
            var    ret = _fcty.Api.GAP_Query_Local_Device_Name(_fcty.StackId,
                                                               arr.Length, arr);

            BluetopiaUtils.CheckAndThrow(ret, "GAP_Query_Local_Device_Name");
            _name = BluetopiaUtils.FromNameString(arr);
        }
示例#2
0
        void HandleNameLookup2(uint BluetoothStackID,
                               ref Structs.GAP_Event_Data GAP_Event_Data, uint CallbackParameter)
        {
            Debug.Assert(GAP_Event_Data.Event_Data_Type == StackConsts.GAP_Event_Type.Remote_Name_Result,
                         "Unexpected event type: " + GAP_Event_Data.Event_Data_Type);
            //
            Structs.GAP_Remote_Name_Event_Data data;
            //
            data = (Structs.GAP_Remote_Name_Event_Data)Marshal.PtrToStructure(
                GAP_Event_Data.pData, typeof(Structs.GAP_Remote_Name_Event_Data));
            var addr = BluetopiaUtils.ToBluetoothAddress(data._Remote_Device);

            Debug.WriteLine("GAP_Remote_Name_Event_Data: status: " + data._Remote_Name_Status
                            + ", addr: " + addr);
            if (data._Remote_Name_Status != 0)
            {
                return;
            }
            // TODO ThreadPool??? but need to marshal data._Remote_Name first.
            List <BluetopiaDeviceInfo> queryList;

            lock (_lockDevices) {
                var got  = _nameQueryList.TryGetValue(addr, out queryList);
                var gotR = _nameQueryList.Remove(addr);
            }
            // TO-DO  if (list == null) return;
            var arr  = Widcomm.WidcommUtils.GetByteArrayNullTerminated(data._Remote_Name, 250);
            var name = BluetopiaUtils.FromNameString(arr);

            Debug.WriteLine("  name: " + name);
            if (queryList == null)
            {
                return;                    // duplicate above exit.
            }
            ThreadPool.QueueUserWorkItem(
                delegate {
                foreach (var cur in queryList)
                {
                    cur.SetName(name);
                }
                //_inquiryHandler.GotNameManually(addr, name);
                AddNamedKnownDevice(addr, name);
            });
        }