diff mbox series

[BlueZ,v1] isotest: Fix ISO send data rate

Message ID 20240606162903.620906-1-luiz.dentz@gmail.com
State New
Headers show
Series [BlueZ,v1] isotest: Fix ISO send data rate | expand

Commit Message

Luiz Augusto von Dentz June 6, 2024, 4:29 p.m. UTC
From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>

We are sending data to controller at wrong average rate not equal to
1 packet / SDU interval, if Transport_Latency is not an integer multiple
of SDU_Interval.  The calculation currently may also give zero, so no
data gets sent.
---
 tools/isotest.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

Comments

patchwork-bot+bluetooth@kernel.org June 7, 2024, 3:20 p.m. UTC | #1
Hello:

This patch was applied to bluetooth/bluez.git (master)
by Luiz Augusto von Dentz <luiz.von.dentz@intel.com>:

On Thu,  6 Jun 2024 12:29:03 -0400 you wrote:
> From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
> 
> We are sending data to controller at wrong average rate not equal to
> 1 packet / SDU interval, if Transport_Latency is not an integer multiple
> of SDU_Interval.  The calculation currently may also give zero, so no
> data gets sent.
> 
> [...]

Here is the summary with links:
  - [BlueZ,v1] isotest: Fix ISO send data rate
    https://git.kernel.org/pub/scm/bluetooth/bluez.git/?id=272d8e8c9599

You are awesome, thank you!
diff mbox series

Patch

diff --git a/tools/isotest.c b/tools/isotest.c
index 68154b19caa4..c1bb6abd29aa 100644
--- a/tools/isotest.c
+++ b/tools/isotest.c
@@ -46,6 +46,7 @@ 
 #define NSEC_USEC(_t) (_t / 1000L)
 #define SEC_USEC(_t)  (_t  * 1000000L)
 #define TS_USEC(_ts)  (SEC_USEC((_ts)->tv_sec) + NSEC_USEC((_ts)->tv_nsec))
+#define ROUND_CLOSEST(_x, _y) (((_x) + (_y / 2)) / (_y))
 
 #define DEFAULT_BIG_ID 0x01
 #define DEFAULT_BIS_ID 0x01
@@ -834,7 +835,9 @@  static void do_send(int sk, int fd, char *peer, bool repeat)
 	}
 
 	/* num of packets = latency (ms) / interval (us) */
-	num = (out->latency * 1000 / out->interval);
+	num = ROUND_CLOSEST(out->latency * 1000, out->interval);
+	if (!num)
+		num = 1;
 
 	syslog(LOG_INFO, "Number of packets: %d", num);
 
@@ -843,8 +846,7 @@  static void do_send(int sk, int fd, char *peer, bool repeat)
 		 * latency:
 		 * jitter buffer = 2 * (SDU * subevents)
 		 */
-		sndbuf = 2 * ((out->latency * 1000 / out->interval) *
-							out->sdu);
+		sndbuf = 2 * (num * out->sdu);
 
 	len = sizeof(sndbuf);
 	if (setsockopt(sk, SOL_SOCKET, SO_SNDBUF, &sndbuf, len) < 0) {