拼多多cms網(wǎng)站怎么做今天新聞?lì)^條最新消息
藍(lán)牙學(xué)習(xí)系列,借鑒衛(wèi)東上老師的藍(lán)牙視頻教程。
BTStack協(xié)議棧學(xué)習(xí)。首先來(lái)看一下,對(duì)于硬件操作,它是如何來(lái)進(jìn)行處理的。在上篇文章中曾說(shuō)過(guò),在main函數(shù)里面它會(huì)調(diào)用硬件相關(guān)的代碼,調(diào)用操作系統(tǒng)相關(guān)的代碼。在BTStack中,可以搜索一下main.c,將會(huì)發(fā)現(xiàn)有很多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口的藍(lán)牙模塊。注意后h4表示5線串口的藍(lán)牙模塊。
分析Main.c 中的main函數(shù),按照上一篇文章中總結(jié)出來(lái)的框架,首先找到硬件操作的相關(guān)代碼,然后再看操作系統(tǒng)先關(guān)的代碼
1. 硬件相關(guān)的代碼:
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的結(jié)構(gòu)體
}
hci_transport_usb的結(jié)構(gòu)體定義如下:
// 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