1

Я реализую универсальное приложение на платформах 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.

Мои вопросы:

  1. Я 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); 
        } 
    } 
    
  2. Я не уверен, если есть лучший способ установить Service Name? Может, я сделаю это неправильно? Я думаю, что это главная проблема.

  3. насчет COD фильтр (в описании есть примечание, что оно должно равно [00000000] для правильного общения? Есть ли способ, чтобы установить его с помощью RfcommServiceProvider? Может быть, я должен также установить вручную номер PIN или если это требуется только в процессе спаривания

  4. Я заметил, в Microsoft образцов -. Сервер поддерживается только для платформы Windows, это можно реализовать функциональные возможности сервера и для WP - устройство, которое будет прием данных из медицинского устройства должен быть ведомым.

Я также читал о протоколе Gatt, но он не предоставляет профили для всех устройств, которые мне нужны.

Заранее за вашу помощь.

ответ

1

Ключ к решению моей проблемы в том, чтобы объявить соединение через последовательный порт в приложении файл манифеста вместо декларирования соединения по указанным UUID номер:

<Capabilities> 
    <DeviceCapability Name="proximity" /> 
    <m2:DeviceCapability Name="bluetooth.rfcomm"> 
     <m2:Device Id="any"> 
     <m2:Function Type="name:serialPort" /> 
     </m2:Device> 
    </m2:DeviceCapability> 
    </Capabilities> 

И использовать RfcommServiceId.SerialPort в качестве аргумента RfcommServiceProvider.

0

Я в очень похожей лодке; Я пытаюсь подключиться к медицинскому устройству с помощью WinJS/HTML для устройства RT, и я нашел эту статью, чтобы быть очень хорошим:

http://blogs.windows.com/windows/b/buildingapps/archive/2014/05/07/talking-to-robots-or-other-devices-using-bluetooth-from-a-windows-runtime-app.aspx

Похоже, вы используете C#, но вы можете получить идею от javascript в статье. Создайте селектор, который ищет устройства последовательного типа, затем запросите список всех этих устройств. Вот некоторые из javascript из статьи, чтобы проиллюстрировать идею

var selector = Windows.Devices.Bluetooth.Rfcomm.RfcommDeviceService.getDeviceSelector (Windows.Devices.Bluetooth.Rfcomm.RfcommServiceId.serialPort);

var devices = Windows.Devices.Enumeration.DeviceInformation.findAllAsync (selector, null);

var device = devices [0];

возврат Windows.Devices.Bluetooth.Rfcomm.RfcommDeviceService.fromIdAsync (device.id);

Я все еще работаю над разбором байтов, которые я получаю с устройства, но с использованием вышеуказанного кода WinRT запрашивает подключение к устройству, и мое устройство начинает передавать данные, что было самым большим препятствием. Удачи!

+0

спасибо за ваш ответ :) – damian131

 Смежные вопросы

  • Нет связанных вопросов^_^