Я реализую универсальное приложение на платформах Windows 8.1 и Windows Phone 8.1, которые должны подключаться к устройствам типа scale или монитору артериального давления по технологии Bluetooth. К сожалению, у меня есть трудности в процессе обнаружения, и в соответствии с этим у меня нет возможности соединиться и подключиться к устройству.Соединение Bluetooth между универсальным приложением и медицинским устройством - UUID и CODFilter
Об этой проблеме я нашел thread, но, к сожалению, это связано с Android.
Из вышеприведенного поста:
Описание медицинского устройства: Устройство использует Service Discovery Protocol (SDP) и Serial Port Profile (SPP). Он начинает запрос процедуры обнаружения (до 10) точек доступа с согласованным фильтром ХПК и именем службы. Затем он последовательно устанавливает соединение (используя процедуру страницы) с точкой доступа, установив PIN-код. После сопоставления ПИН данные загружаются. После загрузки данных устройство ждет подтверждения. Решением является мастер и инициирует сообщение.
Я также начал с Microsoft Bluetooth Rfcomm Sample.
Мои вопросы:
Я dobious о моей стандартной UUID номер 00001101-0000-1000-8000-00805F9B34FB. Пригодится ли в этих обстоятельствах?
// The Id of the Service Name SDP attribute protected const UInt16 SdpServiceNameAttributeId = 0x100; // The SDP Type of the Service Name SDP attribute. // The first byte in the SDP Attribute encodes the SDP Attribute Type as follows : // - the Attribute Type size in the least significant 3 bits, // - the SDP Attribute Type value in the most significant 5 bits. protected const byte SdpServiceNameAttributeType = (4 << 3) | 5; public async Task Start() { try { if (rfcommProvider == null) rfcommProvider = await RfcommServiceProvider.CreateAsync( RfcommServiceId.FromUuid(BluetoothServiceUuid)); if (rfcommProvider != null) { if (socketListener != null) { socketListener.Dispose(); socketListener = null; } // Create a listener for this service and start listening socketListener = new StreamSocketListener(); socketListener.ConnectionReceived += OnConnectionReceived; await socketListener.BindServiceNameAsync(rfcommProvider.ServiceId.AsString(), SocketProtectionLevel.BluetoothEncryptionAllowNullAuthentication); // Set the SDP attributes and start Bluetooth advertising DataWriter sdpWriter = new DataWriter(); // Write the Service Name Attribute. sdpWriter.WriteByte(SdpServiceNameAttributeType); // The length of the UTF-8 encoded Service Name SDP Attribute. sdpWriter.WriteByte((byte)BluetoothServiceDisplayName.Length); // The UTF-8 encoded Service Name value. sdpWriter.UnicodeEncoding = Windows.Storage.Streams.UnicodeEncoding.Utf8; sdpWriter.WriteString(BluetoothServiceDisplayName); // Set the SDP Attribute on the RFCOMM Service Provider. if (rfcommProvider.SdpRawAttributes.ContainsKey(SdpServiceNameAttributeId)) rfcommProvider.SdpRawAttributes.Remove(SdpServiceNameAttributeId); rfcommProvider.SdpRawAttributes.Add(SdpServiceNameAttributeId, sdpWriter.DetachBuffer()); // Start Bluetooth advertising //SetState(BluetoothServerState.Started); rfcommProvider.StartAdvertising(socketListener); } } catch (Exception e) { System.Diagnostics.Debug.WriteLine("ERROR: " + e.Message); } }
Я не уверен, если есть лучший способ установить Service Name? Может, я сделаю это неправильно? Я думаю, что это главная проблема.
насчет COD фильтр (в описании есть примечание, что оно должно равно [00000000] для правильного общения? Есть ли способ, чтобы установить его с помощью RfcommServiceProvider? Может быть, я должен также установить вручную номер PIN или если это требуется только в процессе спаривания
Я заметил, в Microsoft образцов -. Сервер поддерживается только для платформы Windows, это можно реализовать функциональные возможности сервера и для WP - устройство, которое будет прием данных из медицинского устройства должен быть ведомым.
Я также читал о протоколе Gatt, но он не предоставляет профили для всех устройств, которые мне нужны.
Заранее за вашу помощь.
спасибо за ваш ответ :) – damian131