Patrick McFadden
Patrick McFadden

Reputation: 31

Cannot find ID for bluetooth device

I am trying to connect to an Arduino via bluetooth using visual studio 2013, windows phone app...

I can find the devices without any issues get an error saying "Element not found" when I use the following code:

await socket.ConnectAsync(MakeBlock.HostName, "5",
                        SocketProtectionLevel.BluetoothEncryptionAllowNullAuthentication);

I tried to modify the code to use RfcommDeviceService to get the service name, but the Id from the PeerFinder object is "" and fails to set the connectService.

connectService = RfcommDeviceService.FromIdAsync(MakeBlock.Id);

This is my complete code for trying to connect:

 #region App to Device....
            PeerFinder.AlternateIdentities["Bluetooth:SDP"] = "{00001101-0000-1000-8000-00805F9B34FB}";
            var pairedDevices = await PeerFinder.FindAllPeersAsync();
            tbLogger.Text = "Seaching for Connections...";

            if (pairedDevices.Count == 0)
            {
                tbLogger.Text = "Makeblock is not found...";
            }
            else
            {
                tbLogger.Text = pairedDevices.Count.ToString() + " connections found!";

                for (int i = 0; i < pairedDevices.Count; i++)
                {
                    PeerInformation selectedPeer = pairedDevices[i];
                    tbLogger.Text = tbLogger.Text + "\r\n" + selectedPeer.DisplayName;
                    if (selectedPeer.DisplayName == "Makeblock")
                    {
                        MakeBlock = pairedDevices[i];
                    }
                }

                tbLogger.Text = tbLogger.Text + "\r\n" + "---------------------------";

                try
                {
                    StreamSocket socket = new StreamSocket();
                    IAsyncOperation<RfcommDeviceService> connectService;
                    connectService = RfcommDeviceService.FromIdAsync(MakeBlock.Id);
                    RfcommDeviceService rfcommService = await connectService;
                    await socket.ConnectAsync(rfcommService.ConnectionHostName, rfcommService.ConnectionServiceName,
                        SocketProtectionLevel.BluetoothEncryptionAllowNullAuthentication);
                    tbLogger.Text = tbLogger.Text + "\r\n" + "Connection to MakeBlock has been made...";
                }
                catch (Exception ex)
                {
                    tbLogger.Text = tbLogger.Text + "\r\n" + "Could not connect to " + MakeBlock.DisplayName;
                    tbLogger.Text = tbLogger.Text + "\r\n" + ex.Message;
                }
            }
            #endregion

The code fails because the MakeBlock.Id = ""

Any suggestions?

Upvotes: 2

Views: 828

Answers (1)

Patrick McFadden
Patrick McFadden

Reputation: 31

Okay... I figured it out. :)

I just added the GUID into the serviceName directly...

            StreamSocket socket = new StreamSocket();
            await socket.ConnectAsync(MakeBlock.HostName, "{00001101-0000-1000-8000-00805F9B34FB}",
                SocketProtectionLevel.PlainSocket);
            tbLogger.Text = tbLogger.Text + "\r\n" + "Connection to MakeBlock has been made...";

This works!! No onto sending message to control the robot.

Upvotes: 1

Related Questions