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

2024-03-07 1772阅读

温馨提示:这篇文章已超过417天没有更新,请注意相关的内容是否还可用!

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

蓝牙系列五:开源蓝牙协议BTStack框架代码阅读(1)
(图片来源网络,侵删)

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 singleton
static 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

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]