小工具知识网

当前位置: 首页 > 行业知识 > 蓝牙系列五:开源蓝牙协议BTStack框架代码阅读(1)

行业知识

蓝牙系列五:开源蓝牙协议BTStack框架代码阅读(1)

2026-11-15 15:10:31 来源:互联网转载

蓝���学习系列,借鉴卫东上老师的蓝牙视频教程。

()

BTStack协议栈学习。首先来看一下,对于硬件操作,它是如何来进行处理的。在上篇文章中曾说过,在main函数里面它会调用硬件相关的代码,调用操作系统相关的代码。在BTStack中,可以搜索一下main.c,将会发现有很多main.c,都是为于port目录下面。

Main.c (port\esp32\components\btstack)Main.c (port\ez430-rf2560\src)Main.c (port\libusb)Main.c (port\libusb-intel)Main.c (port\max32630-fthr\src)Main.c (port\msp-exp430f5438-cc2564b\src)Main.c (port\msp430f5229lp-cc2564b\src)Main.c (port\nrf5-zephyr)Main.c (port\nrf5x)Main.c (port\pic32-harmony\src)Main.c (port\posix-h4)Main.c (port\posix-h4-atwilc3000)Main.c (port\posix-h4-da14581)Main.c (port\posix-h4-da14585)Main.c (port\posix-h4-zephyr)Main.c (port\posix-h5)Main.c (port\posix-h5-bcm)Main.c (port\raspi)Main.c (port\samv71-xplained-atwilc3000)Main.c (port\stm32-f103rb-nucleo)Main.c (port\stm32-f4discovery-cc256x\eclipse-template\src)Main.c (port\stm32-l053r8-em9304\cubemx-l053r8-em9304\src)Main.c (port\wiced-h4)Main.c (port\wiced-h5)Main.c (port\windows-h4)Main.c (port\windows-h4-zephyr)Main.c (port\windows-winusb)Main.c (port\windows-winusb-intel)

看一下windows,有Main.c (port\windows-h4)、Main.c (port\windows-winusb),使用的是usb口的蓝牙模块。注意后h4表示5线串口的蓝牙模块。

()

分析Main.c 中的main函数,按照上一篇文章中总结出来的框架,首先找到硬件操作的相关代码,然后再看操作系统先关的代码

1. 硬件相关的代码:

a.使用usb口

分析Main.c (port\windows-winusb)

// setup USB Transport
transport = hci_transport_usb_instance();

const hci_transport_t * hci_transport_usb_instance(void) {
  return &hci_transport_usb;  //返回hci_transport_usb的结构体
}

hci_transport_usb的结构体定义如下:

// get usb singletonstatic const hci_transport_t hci_transport_usb = {  /* const char * name; */ "H2_WINUSB",  /* void (*init) (const void *transport_config); */ &usb_init,  /* int (*open)(void); */ &usb_open,  /* int (*close)(void); */ &usb_close,  /* void (*register_packet_handler)(void (*handler)(...); */ &usb_register_packet_handler,  /* int (*can_send_packet_now)(uint8_t packet_type); */ &usb_can_send_packet_now,  /* int (*send_packet)(...); */ &usb_send_packet,  /* int (*set_baudrate)(uint32_t baudrate); */ NULL,  /* void (*reset_link)(void); */ NULL,#ifdef ENABLE_SCO_OVER_HCI  /* void (*set_sco_config)(uint16_t voice_setting, int num_connections); */ usb_set_sco_config,#else  /* void (*set_sco_config)(uint16_t voice_setting, int num_connections); */ NULL,#endif};

在hci_transport

上一篇:PvZ2国际版下载指南

下一篇:熊皮之谜揭秘,探寻未知皮革的奥秘