与任何其他通信堆栈一样,BTstack是一组相互交互的状态机。每个协议和服务都有一个或多个状态机。该架构的其余部分遵循以下基本设计准则:
-
单线程设计 - BTstack不使用或需要多线程来处理数据源和定时器。相反,它使用单个运行循环。
-
无阻塞 - 如果需要蓝牙处理,其结果将通过注册的数据包处理程序作为事件传递。
-
没有人为限制的缓冲区/池 - 传入和传出的数据包不会排队。
-
静态有界内存(可选) - 可以配置最大连接数/通道数/服务数。
图下方示出了一个基于BTstack-单线程应用程序,包括BTstack运行循环的一般架构。主应用程序包含应用程序逻辑,例如,读取传感器值并通过通信逻辑将其作为SPP服务器提供。通信逻辑通常被建模为有限状态机,其中事件和数据来自主应用程序或来自BTstack经由注册的分组处理程序(PH)。BTstack的Run Loop负责提供定时器和处理传入数据。
单螺纹设计
BTstack不使用或需要多线程。它使用单个运行循环来处理数据源和计时器。数据源代表通信接口,如UART或USB驱动程序。BTstack使用定时器来实现各种与蓝牙相关的超时。例如,在20秒后断开蓝牙基带信道而没有活动的L2CAP信道。它们还可用于处理定期事件。在运行循环周期期间,将