void InitRadios() { if (_radioPrimary != null) { return; } // int idPrimary = NativeMethods.hci_get_route(IntPtr.Zero); /////////////////////////////// BluezUtils.CheckAndThrow((BluezError)idPrimary, "hci_get_route"); var dd = NativeMethods.hci_open_dev(idPrimary); Console.WriteLine("InitRadios idPrimary: {0}, dd: {1}", idPrimary, dd); _radioPrimary = new BluezRadio(this, dd); // int maxToTry = 10; var list = new List <IBluetoothRadio>(); for (int curId = 0; curId < maxToTry; ++curId) { var curDd = NativeMethods.hci_open_dev(curId); var ret = (BluezError)curDd; if (BluezUtils.IsSuccess(ret)) { Console.WriteLine("InitRadios curDd: {0}", curDd); var curR = new BluezRadio(this, curDd); list.Add(curR); } } _radioList = list; Debug.Assert(_radioList.Count >= 1); }
//---- internal BluezRadio(BluezFactory fcty, int dd) { _dd = dd; Debug.Assert(fcty != null, "ArgNull"); _fcty = fcty; BluezError ret; var bdaddr = BluezUtils.FromBluetoothAddress(BluetoothAddress.None); ret = NativeMethods.hci_read_bd_addr(_dd, bdaddr, _fcty.StackTimeout); //TODO BluezUtils.CheckAndThrow(ret, "hci_read_bd_addr"); BluezUtils.Assert(ret, "hci_read_bd_addr"); if (BluezUtils.IsSuccess(ret)) { _addr = BluezUtils.ToBluetoothAddress(bdaddr); Console.WriteLine("Radio SUCCESS, addr: " + _addr); } else { // NEVER used EXCEPT in the debugger if we skip the CheckandThrow above. _addr = BluetoothAddress.None; Console.WriteLine("Radio FAIL, addr: " + _addr); } _nameTmp = new byte[250]; // // First find _objectPath. In the future we'll be passed this. var ax = _fcty.BluezDbus.FindAdapter(_addr, out _objectPath); Debug.Assert(_objectPath != null, "BluezRadio..ctor NOT _objectPath!=null"); //-- // Set Adapter. _adapter = GetAdapter(_objectPath); Console.WriteLine("Got adapter at .ctor.3."); // var prop = GetProperties(); string addrDt = (string)prop[PropertyName.Address]; var addrD = BluetoothAddress.Parse(addrDt); Utils.MiscUtils.AssertEquals(addrD, _addr); Console.WriteLine("Check DONE Radio..ctor. " + addrD + " vs " + _addr); }
//-- void ReadVersions() { if (_doneVersions) { return; } var vers = new Structs.hci_version(HciVersion.Unknown); var ret = NativeMethods.hci_read_local_version(_dd, ref vers, _fcty.StackTimeout); BluezUtils.Assert(ret, "hci_read_local_version"); if (BluezUtils.IsSuccess(ret)) { _versions = vers; } _doneVersions = true; // Always set, as unlikely to work second time if failed first time. // var arr = new byte[8]; ret = NativeMethods.hci_read_local_features(_dd, arr, _fcty.StackTimeout); if (BluezUtils.IsSuccess(ret)) { _lmpFeatures = (LmpFeatures)BitConverter.ToInt64(arr, 0); } }