mirror of
https://github.com/apache/nuttx.git
synced 2026-05-22 05:42:05 +08:00
arch/sim: fix incomplete HCI socket data reading in simulator interrupt handler
The sim_bthcisock_interrupt() handler for Bluetooth HCI sockets in the simulatorwas using an if statement to check for available data on the HCI socket. Thismeant that only a single packet would be read and processed per interrupt trigger,even if multiple packets were waiting in the socket buffer. This led to incomplete data processing: unread packets would remain in the bufferuntil the next interrupt tick, causing delayed handling of Bluetooth HCI events/commands,packet backlogs, or missed data in high-throughput scenarios. This fix replaces the if with a while loop to: 1. Continuously check for and read available data from the HCI socket until no more packets are present in the buffer. 2. Ensure all pending HCI packets are processed in a single interrupt handler invocation. 3. Eliminate packet backlogs and reduce latency in Bluetooth HCI communication. The change maintains the same core data reception logic (bthcisock_receive()) butensures it runs for all available packets, improving the reliability and responsivenessof the simulator's Bluetooth HCI socket implementation. Signed-off-by: chao an <anchao.archer@bytedance.com>
This commit is contained in:
committed by
Alan C. Assis
parent
e62e245f64
commit
e4ed6156ca
@@ -268,7 +268,7 @@ static void sim_bthcisock_interrupt(wdparm_t arg)
|
||||
{
|
||||
struct bthcisock_s *dev = (struct bthcisock_s *)arg;
|
||||
|
||||
if (host_bthcisock_avail(dev->fd))
|
||||
while (host_bthcisock_avail(dev->fd))
|
||||
{
|
||||
bthcisock_receive(&dev->drv);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user