Программирование Bluetooth - доступные устройства - PullRequest
1 голос
/ 09 апреля 2011

Я использовал следующую функцию, полученную от Microsoft:

        public List<Device> DiscoverAllDevices()
        {
            List<Device> devices = new List<Device>();

            // Initialize WinSock
            WsaData wsadata = new WsaData();

            int result =
                BluetoothHelper.WSAStartup(BluetoothHelper.MakeWord(2, 2),
                                           ref wsadata);
            if (result != 0)
                BluetoothHelper.GetError();

            // Scan for bluetooth devices
            QuerySet wsaq = new QuerySet();
            //Initialize queryset structure with device specific 
            //information.
            wsaq.Size = Marshal.SizeOf(typeof(QuerySet));
            wsaq.NameSpace = BluetoothHelper.NS_BTH;
            IntPtr lookup = IntPtr.Zero;
            uint flags = BluetoothHelper.LUP_RETURN_NAME
                           | BluetoothHelper.LUP_CONTAINERS
                           | BluetoothHelper.LUP_RETURN_ADDR
                           | BluetoothHelper.LUP_FLUSHCACHE
                           | BluetoothHelper.LUP_RETURN_TYPE
                           | BluetoothHelper.LUP_RETURN_BLOB
                           | BluetoothHelper.LUP_RES_SERVICE;

            //Initiates a client query that is constrained by the 
            //information contained within a queryset structure.

            result = BluetoothHelper.WSALookupServiceBegin(wsaq,
                                                           flags,
                                                           ref lookup);
            if (result != 0)
                BluetoothHelper.GetError();

            while (0 == result)
            {
                int buffer = 0x10000;

                IntPtr bufferPtr = Marshal.AllocHGlobal(buffer);
                QuerySet qsResult = new QuerySet();

                //Retrieves the requested device information.
                result = BluetoothHelper.WSALookupServiceNext(lookup,
                                                         flags,
                                                         ref buffer,
                                                         bufferPtr);
                if (0 == result)
                {
                    Marshal.PtrToStructure(bufferPtr, qsResult);
                    devices.Add(new Device(qsResult));
                }
                else
                {
                    BluetoothHelper.GetError();
                }
            }
            //end device-lookup
            result = BluetoothHelper.WSALookupServiceEnd(lookup);
            if (result != 0)
                BluetoothHelper.GetError();

            // cleanup winsock
            result = BluetoothHelper.WSACleanup();

            if (result != 0)
                BluetoothHelper.GetError();

            return devices;
        }

, но мне нужно знать фактические данные, если устройство находится в диапазоне или нет.Этот код всегда находит устройство, если оно было найдено ранее, даже если это устройство выключено.Почему и как решить эту проблему?Я потратил почти целый день, чтобы найти решение. Спасибо

1 Ответ

0 голосов
/ 12 апреля 2011

К сожалению, прямого API для этого не существует. :-( Это серьезный пробел в API стека Microsoft Bluetooth на Win32.

Однако это возможно путем объединения нескольких API. Я исследовал и реализовал это для моего моего общего источника .NET Bluetooth, http://32feet.codeplex.com Если ваша программа может быть написана в управляемом коде, это сэкономит вам много времени при использовании Bluetooth. : -)

В любом случае, мой способ получения списка устройств «только для обнаружения» задокументирован на http://32feetnetdev.wordpress.com/2010/11/15/device-discovery-improvements-on-msftwin32/ Так что для использования обнаруженных устройств нужно использовать API-интерфейс событий Bluetooth и одновременно выполнять обычное обнаружение. *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...