<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://devzone.nordicsemi.com/cfs-file/__key/system/syndication/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Questions about Wi-Fi provisioning using Bluetooth LE</title><link>https://devzone.nordicsemi.com/f/nordic-q-a/119369/questions-about-wi-fi-provisioning-using-bluetooth-le</link><description>I am using the existing nRF Connect SDK (v2.9.0) example of Wi-Fi provisioning using Bluetooth LE ( https://github.com/nrfconnect/sdk-nrf/tree/main/samples/wifi/provisioning/ble) and it&amp;#39;s working fine. 
 I am using a Bluetooth sniffer (RFcreations mini</description><dc:language>en-US</dc:language><generator>Telligent Community 13</generator><lastBuildDate>Tue, 04 Mar 2025 13:16:14 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://devzone.nordicsemi.com/f/nordic-q-a/119369/questions-about-wi-fi-provisioning-using-bluetooth-le" /><item><title>RE: Questions about Wi-Fi provisioning using Bluetooth LE</title><link>https://devzone.nordicsemi.com/thread/525725?ContentTypeID=1</link><pubDate>Tue, 04 Mar 2025 13:16:14 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:66c8f90a-292c-4217-a9a2-63b1afe8ecd2</guid><dc:creator>Aleksander Nowakowski</dc:creator><description>&lt;p&gt;For example, when we have 0x0110, the first selected message:&lt;br /&gt;1. I think the data are 0x1001&amp;nbsp;&lt;br /&gt;2. 0x10 = 0001 0000 = 00010 | 000 = value 2, integer -&amp;gt; this is a Result type, so field 2 is Connection State&lt;br /&gt;3. 0x01 = integer value 1 -&amp;gt; AUTHENTICATION&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Questions about Wi-Fi provisioning using Bluetooth LE</title><link>https://devzone.nordicsemi.com/thread/525716?ContentTypeID=1</link><pubDate>Tue, 04 Mar 2025 13:04:33 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:716978ee-9411-487f-b1d2-9b8ad4e34f7b</guid><dc:creator>Aleksander Nowakowski</dc:creator><description>&lt;p&gt;Hello, nice to meet you! Let me answer all your questions.&lt;/p&gt;
&lt;p&gt;I&amp;#39;ll be pointing to the source code of Android app &amp;quot;nRF Wi-Fi Provisioner&amp;quot;.&lt;/p&gt;
&lt;p&gt;The Wi-Fi Provisioning service&amp;nbsp;has&amp;nbsp;3 characteristics:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/NordicSemiconductor/Android-nRF-Wi-Fi-Provisioner/blob/70ad27852ee6c77a5aac6453db0109ae0abcad6a/lib/ble/src/main/java/no/nordicsemi/android/wifi/provisioner/ble/internal/ProvisionerBleManager.kt#L67-L70"&gt;https://github.com/NordicSemiconductor/Android-nRF-Wi-Fi-Provisioner/blob/70ad27852ee6c77a5aac6453db0109ae0abcad6a/lib/ble/src/main/java/no/nordicsemi/android/wifi/provisioner/ble/internal/ProvisionerBleManager.kt#L67-L70&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The first one, Version,&amp;nbsp;can be read without security, other 2 require pairing.&lt;/p&gt;
&lt;p&gt;All the data are encoded as ProtoBuf using these files:&amp;nbsp;&lt;a id="" href="https://github.com/NordicSemiconductor/Android-nRF-Wi-Fi-Provisioner/tree/main/lib/ble/src/main/proto"&gt;https://github.com/NordicSemiconductor/Android-nRF-Wi-Fi-Provisioner/tree/main/lib/ble/src/main/proto&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Version charactersitic is encoding using version.proto (Version type)&lt;/p&gt;
&lt;p&gt;Control Point is using request.proto and response.proto (and common.proto) (Request and Response types)&lt;/p&gt;
&lt;p&gt;Data Out characteristic is using result.proto (Result type).&lt;/p&gt;
&lt;p&gt;Data Out is used to return Scan Results and&amp;nbsp;Connection States.&lt;/p&gt;
&lt;p&gt;Using my friend chat.gpt or &lt;a id="" href="https://www.protobufpal.com/"&gt;https://www.protobufpal.com/&lt;/a&gt; and providing the proto files I&amp;#39;m getting the following:&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-start="1370" data-end="1417"&gt;&lt;code data-start="1370" data-end="1378"&gt;0x0110&lt;/code&gt; represents a &lt;strong data-start="1392" data-end="1410"&gt;Result message&lt;/strong&gt; where:&lt;/p&gt;
&lt;ul data-start="1418" data-end="1486"&gt;
&lt;li data-start="1418" data-end="1448"&gt;&lt;strong data-start="1420" data-end="1448"&gt;Field 2 (&lt;code data-start="1431" data-end="1438"&gt;state&lt;/code&gt;) is set&lt;/strong&gt;&lt;/li&gt;
&lt;li data-start="1449" data-end="1486"&gt;&lt;strong data-start="1451" data-end="1486"&gt;Value is &lt;code data-start="1462" data-end="1465"&gt;1&lt;/code&gt; &amp;rarr; &lt;code data-start="1468" data-end="1484"&gt;AUTHENTICATION&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-start="808" data-end="855"&gt;&lt;code data-start="808" data-end="816"&gt;0x0210&lt;/code&gt; represents a &lt;strong data-start="830" data-end="848"&gt;Result message&lt;/strong&gt; where:&lt;/p&gt;
&lt;ul data-start="856" data-end="921"&gt;
&lt;li data-start="856" data-end="886"&gt;&lt;strong data-start="858" data-end="886"&gt;Field 2 (&lt;code data-start="869" data-end="876"&gt;state&lt;/code&gt;) is set&lt;/strong&gt;&lt;/li&gt;
&lt;li data-start="887" data-end="921"&gt;&lt;strong data-start="889" data-end="921"&gt;Value is &lt;code data-start="900" data-end="903"&gt;2&lt;/code&gt; &amp;rarr; &lt;code data-start="906" data-end="919"&gt;ASSOCIATION&lt;/code&gt;&lt;/strong&gt;&lt;strong data-start="889" data-end="921"&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You&amp;#39;ll find all staes here:&amp;nbsp;&lt;a href="https://github.com/NordicSemiconductor/Android-nRF-Wi-Fi-Provisioner/blob/70ad27852ee6c77a5aac6453db0109ae0abcad6a/lib/ble/src/main/proto/common.proto#L69-L77"&gt;https://github.com/NordicSemiconductor/Android-nRF-Wi-Fi-Provisioner/blob/70ad27852ee6c77a5aac6453db0109ae0abcad6a/lib/ble/src/main/proto/common.proto#L69-L77&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;0x0108 seems to be a Request GET_STATUS.&lt;/p&gt;
&lt;p&gt;Either&amp;nbsp;&lt;a id="" href="https://www.protobufpal.com/"&gt;https://www.protobufpal.com/&lt;/a&gt;&amp;nbsp;or your image has the data in other endianness, so you may need to revert bytes.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Questions about Wi-Fi provisioning using Bluetooth LE</title><link>https://devzone.nordicsemi.com/thread/525538?ContentTypeID=1</link><pubDate>Mon, 03 Mar 2025 14:15:15 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:5328c9dd-a773-4ace-9a75-75df3ed3704a</guid><dc:creator>Mohammad Afaneh</dc:creator><description>&lt;p&gt;Can someone explain how to figure out the values provided in the payloads of the packets based on the source code? or at least the values I highlighted in my sniffer capture screenshot?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Questions about Wi-Fi provisioning using Bluetooth LE</title><link>https://devzone.nordicsemi.com/thread/525265?ContentTypeID=1</link><pubDate>Fri, 28 Feb 2025 11:57:11 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:0cd2ab51-5e24-4805-bf3a-fb07e65eabca</guid><dc:creator>Mohammad Afaneh</dc:creator><description>&lt;p&gt;Yes, I did.&lt;/p&gt;
&lt;p&gt;I looked at that and the file referenced there (&lt;span&gt;.subsys/bluetooth/services/wifi_prov/proto/common.proto), but I still don&amp;#39;t quite understand how to parse the values shown in the sniffer capture (e.g., 0x0110, 0x0210, ..., 0x0108).&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;What do these values mean, and what do they correspond to? For example,&lt;/span&gt;&lt;span&gt;&amp;nbsp;what are the&amp;nbsp;RESULT values for SET_CONFIG (which I assume are the ones I highlighted in the sniffer capture image)? What do they correspond to?&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;It might be that I&amp;#39;m unfamiliar with the Protocol Buffers format.&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Questions about Wi-Fi provisioning using Bluetooth LE</title><link>https://devzone.nordicsemi.com/thread/525258?ContentTypeID=1</link><pubDate>Fri, 28 Feb 2025 11:39:04 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:4e727a05-be1e-4d91-833b-c5b17a00764b</guid><dc:creator>Charlie</dc:creator><description>&lt;p&gt;Hi Mohanmmad,&lt;/p&gt;
&lt;p&gt;I think following page covered the &lt;span&gt;Wi-Fi Provisioning Service&amp;nbsp;characteristics. Do you already read them or not?&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;a href="https://docs.nordicsemi.com/bundle/ncs-latest/page/nrf/libraries/bluetooth/services/wifi_prov.html"&gt;Wi-Fi Provisioning Service&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://docs.nordicsemi.com/bundle/ncs-latest/page/nrf/samples/wifi/provisioning/ble/README.html#features"&gt;Wi-Fi: Bluetooth LE based provision&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;Charlie&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Questions about Wi-Fi provisioning using Bluetooth LE</title><link>https://devzone.nordicsemi.com/thread/525248?ContentTypeID=1</link><pubDate>Fri, 28 Feb 2025 10:52:14 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:1d040cdc-1ff7-49e7-9de2-25e12c5676b1</guid><dc:creator>Mohammad Afaneh</dc:creator><description>&lt;p&gt;Hi Charlie,&lt;/p&gt;
&lt;p&gt;I&amp;#39;m very familiar with the Bluetooth specification, but&amp;nbsp;Wi-Fi provisioning over Bluetooth LE is not a standardized Bluetooth thing.&lt;/p&gt;
&lt;p&gt;It is also implemented as one of the nRF examples and not the Zephyr ones. So, there must be some documentation (or at least code comments) that explains the different values used in the packets. This shouldn&amp;#39;t have anything to do with the closed-source BLE controller.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Questions about Wi-Fi provisioning using Bluetooth LE</title><link>https://devzone.nordicsemi.com/thread/525056?ContentTypeID=1</link><pubDate>Thu, 27 Feb 2025 13:02:57 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:aa6e32e5-aaae-4242-b9a6-dbc9964a1e1b</guid><dc:creator>Charlie</dc:creator><description>&lt;p&gt;Hi Mohanmmad,&lt;/p&gt;
&lt;p&gt;Thanks for reaching out with your questions.&lt;/p&gt;
&lt;p&gt;For documentation or source code that explains the meanings of different values used, as well as the workflow and packet exchange process, I recommend referring to the Bluetooth Core Specification. This is the definitive source for understanding Bluetooth packet structures and payloads. While it is not specific to Nordic, it is essential for understanding the protocol.&lt;/p&gt;
&lt;p&gt;The &lt;a href="https://docs.nordicsemi.com/bundle/ncs-latest/page/nrf/protocols/bt/bt_stack_arch.html#controller"&gt;BLE controller&lt;/a&gt; is an implementation of the Bluetooth specification. Nordic&amp;#39;s SoftDevice Controller is our proprietary implementation of the BLE stack, but it is closed-source. However, you can refer to the open-source BLE controller from the Zephyr project to study its source code.&lt;/p&gt;
&lt;p&gt;Additionally, have you gone through &lt;a href="https://academy.nordicsemi.com/courses/bluetooth-low-energy-fundamentals/lessons/lesson-6-bluetooth-le-sniffer/"&gt;Lesson 6 - Bluetooth LE sniffer&lt;/a&gt;&amp;nbsp;course n the Nordic Developer Academy? It covers both sniffer usage and BLE GAP and GATT packet analysis in real practice, which could be a great starting point for your exploration.&lt;/p&gt;
&lt;p&gt;Let me know if you need further guidance!&lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;Charlie&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>