<?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>nRF52 sending large bulk data</title><link>https://devzone.nordicsemi.com/f/nordic-q-a/17534/nrf52-sending-large-bulk-data</link><description>I have read these the following posts: 
 devzone.nordicsemi.com/.../ 
 devzone.nordicsemi.com/.../ 
 But, most of the answers are quite old. I am wondering if the solution to send multiple notifications is still an valid answer. 
 Thank you.</description><dc:language>en-US</dc:language><generator>Telligent Community 13</generator><lastBuildDate>Sat, 12 Nov 2016 18:19:47 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://devzone.nordicsemi.com/f/nordic-q-a/17534/nrf52-sending-large-bulk-data" /><item><title>RE: nRF52 sending large bulk data</title><link>https://devzone.nordicsemi.com/thread/67422?ContentTypeID=1</link><pubDate>Sat, 12 Nov 2016 18:19:47 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:b8fe1702-5465-47a2-b58f-4bfdb24d521c</guid><dc:creator>endnode</dc:creator><description>&lt;p&gt;The post you mention is solving the basic problem &amp;quot;how to cut longer message into 20-byte fragments, stack them to BLE Stack - aka Nordic Soft Device - to go out as Tx packets, manage overflow of internal Soft Device buffers and continue once some buffer is empty until all data go out&amp;quot;. Now it&amp;#39;s question if you need some &amp;quot;session&amp;quot; management on top of it (e.g. which side can talk when, how you find out that whole &amp;quot;long message&amp;quot; has arrived and you can process it etc,) In principle you can define per message or per fragment but there are countless ways how to define all the details...&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: nRF52 sending large bulk data</title><link>https://devzone.nordicsemi.com/thread/67421?ContentTypeID=1</link><pubDate>Sat, 12 Nov 2016 18:19:36 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:fdf31e36-d3bf-4a39-bd6e-1387ef3350db</guid><dc:creator>endnode</dc:creator><description>&lt;p&gt;Well there is this &amp;quot;Nordic UART Service&amp;quot; aka &amp;quot;NUS&amp;quot; available in nRF5 SDK examples and it is one example how to solve &amp;quot;ATT MTU fragmentation and reassembly&amp;quot; problem. You probably can just &lt;a href="http://infocenter.nordicsemi.com/topic/com.nordic.infocenter.sdk5.v12.0.0/ble_sdk_app_nus_eval.html"&gt;use it out of the box&lt;/a&gt; without big investigation of details.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: nRF52 sending large bulk data</title><link>https://devzone.nordicsemi.com/thread/67420?ContentTypeID=1</link><pubDate>Sat, 12 Nov 2016 00:15:35 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:58e74cb0-95b9-480b-83b0-b40d15a84f83</guid><dc:creator>kmorris</dc:creator><description>&lt;p&gt;I just implemented mine following this example &lt;a href="https://devzone.nordicsemi.com/question/1741/dealing-large-data-packets-through-ble/?answer=1755#post-id-1755"&gt;devzone.nordicsemi.com/.../&lt;/a&gt;
Jack - have you tried this one?&lt;/p&gt;
&lt;p&gt;I don&amp;#39;t update my &amp;#39;last synchronized&amp;#39; pointer until it all goes through, that way it ends up starting over if it gets interrupted. (I may change that and have it start where it left off, idk yet) I will probably also implement a way for the app/client to ask for prior data, just in case something goes awry on the app side.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: nRF52 sending large bulk data</title><link>https://devzone.nordicsemi.com/thread/67419?ContentTypeID=1</link><pubDate>Fri, 11 Nov 2016 23:45:06 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:4d66b333-23d7-44d3-b1c2-5ff948891969</guid><dc:creator>endnode</dc:creator><description>&lt;p&gt;(continuation...) define some &amp;quot;ACK&amp;quot; messages (they can even contain number of bytes received or hash - but that would be probably too heavy). In the end pretty anything will do the job, it&amp;#39;s just a question how difficult for implementation you make it, how efficient you want it (in terms of computation power/time and overhead inside GATT data which lowers your effective bandwidth) and what error/recovery mechanisms you need for session management...&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: nRF52 sending large bulk data</title><link>https://devzone.nordicsemi.com/thread/67418?ContentTypeID=1</link><pubDate>Fri, 11 Nov 2016 23:42:50 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:fcad5a0e-bd4b-4f29-9a73-2b61c5e89444</guid><dc:creator>endnode</dc:creator><description>&lt;p&gt;TCP/IP, like srsly???:) I assume you will be using some &amp;quot;self-consistent&amp;quot; protocol on top of GATT anyway (e.g. there will be some length indicators or even integrity checks based on some CRC/hash/crypto signature scheme). But if you are sure that data formatting is completely free and up to you, then simply use some light-weight protocol used in other embedded systems. E.g. Host Control Protocol (HCP) or something even simpler: dedicate part of each &amp;quot;fragment&amp;quot; to &amp;quot;header&amp;quot; and indicate if this is last fragment or not. If there will be any issue it will anyway break the link so you don&amp;#39;t need to care about anything else then case where receiver would be processing incomplete data. If your use case has no natural &amp;quot;session&amp;quot; management (e.g. that one side would be sending commands and then waiting for response) then you can (to be continued...)&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: nRF52 sending large bulk data</title><link>https://devzone.nordicsemi.com/thread/67417?ContentTypeID=1</link><pubDate>Fri, 11 Nov 2016 23:33:14 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:0df573f2-c919-4cae-89b5-f503806cbdb8</guid><dc:creator>jackbauerctu</dc:creator><description>&lt;p&gt;I was also thinking about how to do implement this.&lt;/p&gt;
&lt;p&gt;Perhaps I can try to mimic the windowing mechanism from TCP/IP?  Maybe the initial window will be 10 items.  Then you would get DATA OK for each of those items.  Once you get the DATA OK for item 0, then move the window up.&lt;/p&gt;
&lt;p&gt;You can even go further and dynamically adjust the window size when the BLE connection isn&amp;#39;t that stable too.&lt;/p&gt;
&lt;p&gt;Am I over thinking this?  Or maybe the simple send one item and expect DATA OK; then send the next item?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: nRF52 sending large bulk data</title><link>https://devzone.nordicsemi.com/thread/67413?ContentTypeID=1</link><pubDate>Thu, 10 Nov 2016 17:10:03 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:146fda50-35e0-445f-9176-150ec75526c0</guid><dc:creator>kmorris</dc:creator><description>&lt;p&gt;Thanks. That makes sense.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: nRF52 sending large bulk data</title><link>https://devzone.nordicsemi.com/thread/67416?ContentTypeID=1</link><pubDate>Thu, 10 Nov 2016 12:04:48 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:2a5093b6-2b51-4f64-8f97-c33410822224</guid><dc:creator>endnode</dc:creator><description>&lt;p&gt;Hi kmorris,&lt;/p&gt;
&lt;p&gt;I guess there is slight misunderstanding of how BT LE Logical Link layer works (and why we all love BLE - including you;): LL makes sure that there is automatic packet re-transmission so a) you don&amp;#39;t have any problem with missing packets in the middle and b) if connection fails then you know (at least on LL level) which was the last packet transferred. If you read BT SIG Core specification then unacknowledged or acknowledged WRITE/READ/NOTIFY/INDICATE methods are simply because implementation specifics can cause overflow or other issues on GATT and APP layers so even some PDUs are delivered by LL layer the data might be discarded (and the way to ensure 100% certainty is to use proper &amp;quot;with Response&amp;quot; types of ATT/GATT methods). However in reality this is very unlikely and it&amp;#39;s much easier to implement final ACK on top of GATT/APP protocol (your app will just say &amp;quot;DATA OK&amp;quot;).&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: nRF52 sending large bulk data</title><link>https://devzone.nordicsemi.com/thread/67415?ContentTypeID=1</link><pubDate>Thu, 10 Nov 2016 11:10:01 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:5981295d-29ae-428b-b765-3bc3d96bd43c</guid><dc:creator>Petter Myhre</dc:creator><description>&lt;p&gt;Notifications are acknowledged at the link layer, so you will not lose any.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: nRF52 sending large bulk data</title><link>https://devzone.nordicsemi.com/thread/67414?ContentTypeID=1</link><pubDate>Wed, 09 Nov 2016 23:33:21 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:733ecadd-7959-4e42-bb1f-8bf2de289985</guid><dc:creator>kmorris</dc:creator><description>&lt;p&gt;Hi Jack &amp;amp; Jan -&lt;/p&gt;
&lt;p&gt;As a follow-up, I understand when transferring large amounts of data it has always been recommended to use notifications to optimize throughput - because you don&amp;#39;t have to get a response. However, what if you DO care that all the data gets received?
Is it still better to send it all quickly through notifications and then have the client request a re-send of any missing data?
Say I have a 20-byte datapoint for every minute and I&amp;#39;ve been storing them for the last 30 minutes or so, and I send all 30 of them as notifications, if the client doesn&amp;#39;t receive datapoints 11-15, I could request a re-send?
Or, is there an example where the acknowledgement is received per packet sent? And would you be able to point me to it, since most examples (and what I have used previously) was the notifications?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: nRF52 sending large bulk data</title><link>https://devzone.nordicsemi.com/thread/67412?ContentTypeID=1</link><pubDate>Sat, 05 Nov 2016 23:15:36 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:dfec131d-8f9c-4baa-bd95-0ed6f3a2bbbe</guid><dc:creator>endnode</dc:creator><description>&lt;p&gt;Hi Jack,&lt;/p&gt;
&lt;p&gt;Short answer is YES.&lt;/p&gt;
&lt;p&gt;Long answer follows:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If you want to use BT LE and at the same time being interoperable with platforms such as Android, iOS, Windows etc. then you have almost no other choice then to deploy application on top of GATT layer (so it will be using GATT Server or GATT Client role).&lt;/li&gt;
&lt;li&gt;Then to optimize throughput you want to use WRITE without response method from GATT Client side and VALUE NOTIFICATION (HVX) from GATT Server side.&lt;/li&gt;
&lt;li&gt;And in case that your data could be in principal larger then (ATT_MTU - 3) size you will need to develop some kind of fragmentation/reassembly protocol on top of these GATT methods (note that default ATT_MTU size is 23 bytes).&lt;/li&gt;
&lt;li&gt;If you want to see some practical examples and throughput numbers then please download latest &lt;a href="http://infocenter.nordicsemi.com/topic/com.nordic.infocenter.s132.sds/dita/softdevices/s130/s130sds.html"&gt;S13x SoftDevice Specification v3.0&lt;/a&gt; and refer to chapter 18 (there aren&amp;#39;t all possible combinations but these values illustrate both &amp;quot;theoretical&amp;quot; and &amp;quot;practical&amp;quot; limits very well).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cheers Jan&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>