[ 
https://issues.apache.org/jira/browse/MYNEWT-287?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15797458#comment-15797458
 ] 

Johan Hedberg commented on MYNEWT-287:
--------------------------------------

In Zephyr we've gone for a different solution which doesn't require host flow 
control anymore: we're instead relying on the HCI transport provided flow 
control to stop the controller from sending data until we're ready to receive 
more. With H:4 (HW flow control based UART) this is easy since we just stop the 
flow using the RTS/CTS lines. With H:5 (3-Wire UART) we simply don't ack 
packets until we have free buffers to receive more. Also the other standard HCI 
transports (USB & SDIO, which we don't support however) provide flow control, 
so the same solution can be applied there.

The reason why taking advantage of the HCI transport flow control is essential, 
is that unlike for ACL data, HCI doesn't provide any flow control for HCI 
events. Almost all HCI events are considered critical (advertising reports are 
perhaps the only exception) so whatever solution is in place needs to cover 
them as well. There *may* be some value of implementing ACL HCI host flow 
control on top of the HCI transport control, but at least in Zephyr we don't 
see any need for it at the moment.

> Host Flow Control
> -----------------
>
>                 Key: MYNEWT-287
>                 URL: https://issues.apache.org/jira/browse/MYNEWT-287
>             Project: Mynewt
>          Issue Type: New Feature
>          Components: Nimble
>         Environment: Using nimble from an external host stack
>            Reporter: Johan Hedberg
>            Assignee: Christopher Collins
>             Fix For: v1_0_0_rel
>
>
> If the Nimble controller part is connected to an external host stack the host 
> may need to control the flow of ACL packets from the controller to the host. 
> This is particularly important for resource-constrained hosts that have a 
> limited amount of RX ACL data buffers.
> The Bluetooth core specification provides a standard feature to accomplish 
> this called Host Flow Control. (Vol 2, Part E, Section 4.2). To implement 
> this the controller needs to support the "Set Controller To Host Flow 
> Control", "Host Buffer Size" and "Host Number Of Completed Packets" HCI 
> commands.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to