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); }
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); }); }