当前位置: 首页 > news >正文

五指山网站开发价格免费的网站软件下载

五指山网站开发价格,免费的网站软件下载,营销型网站建设的优缺点,网页设计平均工资文章目录 蓝牙框架HCI接口蓝牙VENDORLIBvendorlib是什么 代码层面解读vendorlib1、 vendorlib实现,协议栈调用2、协议栈实现,vendorlib调用(回调函数)2.1、 init函数2.2、BT_VND_OP_POWER_CTRL对应处理2.3、BT_VND_OP_USERIAL_OPE…

文章目录

    • 蓝牙框架
    • HCI接口
    • 蓝牙VENDORLIB
      • vendorlib是什么
    • 代码层面解读vendorlib
      • 1、 vendorlib实现,协议栈调用
      • 2、协议栈实现,vendorlib调用(回调函数)
        • 2.1、 init函数
        • 2.2、BT_VND_OP_POWER_CTRL对应处理
        • 2.3、BT_VND_OP_USERIAL_OPEN对应处理
        • 2.4、BT_VND_OP_FW_CFG对应处理
        • 2.5、 固件问题

参考:

https://source.android.com/docs/core/connect/bluetooth?hl=zh-cn

https://android.googlesource.com/platform/hardware/interfaces/+/master/bluetooth/

蓝牙框架

在这里插入图片描述

HCI接口

蓝牙整体硬件架构上分为主机(计算机或MCU)和主机控制器(实际蓝牙芯片组)两部分;主机和控制器之间的通信遵循主机控制器接口(HCI),如下所示:

dayu200-bt-01.png

HCI定义了如何交换命令,事件,异步和同步数据包。异步数据包(ACL)用于数据传输,而同步数据包(SCO)用于带有耳机和免提配置文件的语音。

蓝牙VENDORLIB

vendorlib是什么

vendorlib部署在主机侧,可以认为是主机侧对蓝牙芯片驱动层,屏蔽不同蓝牙芯片的技术细节。从代码层面解读,其主要功能有两个:

1、为协议栈提供蓝牙芯片之间的通道(串口的文件描述符)

2、提供特定芯片的具体控制方法

代码层面解读vendorlib

bt_vendor_lib.h 路径:

bluetooth/1.0/default/bt_vendor_lib.h - platform/hardware/interfaces - Git at Google (googlesource.com)

该文件定义了协议栈和vendor_lib交互接口,分为两组:

1、 vendorlib实现,协议栈调用

typedef struct {/*** Set to sizeof(bt_vendor_interface_t)*/size_t size;/*** Caller will open the interface and pass in the callback routines* to the implementation of this interface.*/int (*init)(const bt_vendor_callbacks_t* p_cb, unsigned char* local_bdaddr);/*** Vendor specific operations*/int (*op)(bt_opcode_t opcode, void* param);/*** Closes the interface*/void (*close)(void);
} bt_vendor_interface_t;

协议栈启动时的基本流程如下:

bluetooth/1.0/default/vendor_interface.cc - platform/hardware/interfaces - Git at Google (googlesource.com)

1.1、协议栈动态打开libbt-vendor.so,并调用init函数,初始化vendorlib

1.2、协议栈调用op函数,分别调用BT_VND_OP_POWER_CTRL、BT_VND_OP_USERIAL_OPEN、BT_VND_OP_FW_CFG三个opcode;

2、协议栈实现,vendorlib调用(回调函数)

typedef struct {/** set to sizeof(bt_vendor_callbacks_t) */size_t size;/** Callback and callout functions have implemented in HCI libray* (libbt-hci.so).*//* notifies caller result of firmware configuration request */cfg_result_cb fwcfg_cb;/* buffer allocation request */malloc_cb alloc;/* buffer deallocation request */mdealloc_cb dealloc;/* hci command packet transmit request */cmd_xmit_cb xmit_cb;} bt_vendor_callbacks_t;

fwcfg_cb在BT_VND_OP_FW_CFG完成后调用

alloc/dealloc用于发送HCI消息时申请/释放消息控件

xmit_cb发送HCI Commands

vendor_lib实现的几个重要函数

2.1、 init函数
static int init(const bt_vendor_callbacks_t *p_cb, unsigned char *local_bdaddr)
{/* * ... */userial_vendor_init();upio_init();vnd_load_conf(VENDOR_LIB_CONF_FILE);/* store reference to user callbacks */bt_vendor_cbacks = (bt_vendor_callbacks_t *)p_cb;/* This is handed over from the stack */memcpy(vnd_local_bd_addr, BD_ADDR_LEN, local_bdaddr, 6);return 0;
}

vendorlib被调用的第一个函数,vendorlib保存好协议栈的callback和mac地址即可。

2.2、BT_VND_OP_POWER_CTRL对应处理

这个操作理论上需要拉高电源管脚电平;该函数中使用rfill设备来处理 通过write->/sys/class/rfkill/rfkill[num]/state

case BT_VND_OP_POWER_CTRL:{int *state = (int *) param;upio_set_bluetooth_power(UPIO_BT_POWER_OFF);if (*state == BT_VND_PWR_ON){ALOGW("NOTE: BT_VND_PWR_ON now forces power-off first");upio_set_bluetooth_power(UPIO_BT_POWER_ON);} else {/* Make sure wakelock is released */hw_lpm_set_wake_state(false);}}break;
2.3、BT_VND_OP_USERIAL_OPEN对应处理
case BT_VND_OP_USERIAL_OPEN:{int (*fd_array)[] = (int (*)[]) param;int fd, idx;fd = userial_vendor_open((tUSERIAL_CFG *) &userial_init_cfg);if (fd != -1){for (idx=0; idx < CH_MAX; idx++)(*fd_array)[idx] = fd;retval = 1;}/* retval contains numbers of open fd of HCI channels */}break;

userial_vendor_open函数打开串口设备(UART)并设置(UART)得到文件描述符(fd),通过op的参数param返回该fd

2.4、BT_VND_OP_FW_CFG对应处理

该操作码要求对蓝牙芯片进行初始化,具体要进行的处理和蓝牙芯片强相关。以本次调测的AP6275pr3芯片为例,初始化过程中主要是下发蓝牙固件。

初始化结束后,必须调用init_cb回调函数(参见bt_vendor_callbacks_t)通知协议栈初始化结果,否则会阻塞协议栈线程导致蓝牙相关功能无法正常使用。协议栈的具体处理如下:

协议栈调用BT_VND_OP_FW_CFG后会等待信号量,该信号量由init_cb函数置位

2.5、 固件问题

开发时一定要关注芯片固件,有些蓝牙芯片可能无需升级固件,有些则必须升级固件;固件下发时需要注意如下两点:

5.1、对于AP6275芯片,因为蓝牙芯片内并没有类似flash存储,要求芯片上下电后必须重新下发

5.2、按照芯片本身的要求处理,最好能找到厂商的参考代码;以Broadcom系列芯片为例,其固件下发过程比较复杂,通过一个状态机驱动;共如下9个状态

/ Hardware Configuration State */
enum {HW_CFG_START = 1,HW_CFG_SET_UART_CLOCK,HW_CFG_SET_UART_BAUD_1,HW_CFG_READ_LOCAL_NAME,HW_CFG_DL_MINIDRIVER,HW_CFG_DL_FW_PATCH,HW_CFG_SET_UART_BAUD_2,HW_CFG_SET_BD_ADDR,HW_CFG_READ_BD_ADDR
};

在收到BT_VND_OP_FW_CFG后初始化状态机,然后发送HCI_REST命令,切换状态为HW_CFG_START;

void hw_config_start(void)
{HC_BT_HDR *p_buf = NULL;uint8_t *p;hw_cfg_cb.state = 0;hw_cfg_cb.fw_fd = -1;hw_cfg_cb.f_set_baud_2 = FALSE;if (bt_vendor_cbacks) {p_buf = (HC_BT_HDR *)bt_vendor_cbacks->alloc(BT_HC_HDR_SIZE +HCI_CMD_PREAMBLE_SIZE);}if (p_buf) {p_buf->event = MSG_STACK_TO_HC_HCI_CMD;p_buf->offset = 0;p_buf->layer_specific = 0;p_buf->len = HCI_CMD_PREAMBLE_SIZE;p = (uint8_t *)(p_buf + 1);UINT16_TO_STREAM(p, HCI_RESET);*p = 0;hw_cfg_cb.state = HW_CFG_START;bt_vendor_cbacks->xmit_cb(HCI_RESET, p_buf);} else {if (bt_vendor_cbacks) {HILOGE("vendor lib fw conf aborted [no buffer]");bt_vendor_cbacks->init_cb(BTC_OP_RESULT_FAIL);}}
}

收到芯片返回的HCI_RESET完成事件后,继续切换到下一个状态机并发送下一个COMMAND,一直到状态机完成固件下发。

详细实现请参见hw_config_cback函数。

参考:

https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/porting/porting-dayu200-on_standard-demo.md#hci%E6%8E%A5%E5%8F%A3


文章转载自:
http://phanerozoic.xtqr.cn
http://fytte.xtqr.cn
http://capitulate.xtqr.cn
http://basilicon.xtqr.cn
http://boson.xtqr.cn
http://sniveller.xtqr.cn
http://consequent.xtqr.cn
http://past.xtqr.cn
http://realia.xtqr.cn
http://decartelize.xtqr.cn
http://islam.xtqr.cn
http://convolution.xtqr.cn
http://egyptianization.xtqr.cn
http://abstain.xtqr.cn
http://picromerite.xtqr.cn
http://contrafactual.xtqr.cn
http://scomber.xtqr.cn
http://lusty.xtqr.cn
http://negotiator.xtqr.cn
http://chiengmai.xtqr.cn
http://pomposo.xtqr.cn
http://cirsoid.xtqr.cn
http://ostensorium.xtqr.cn
http://quietness.xtqr.cn
http://eosphorite.xtqr.cn
http://integrase.xtqr.cn
http://cinchonine.xtqr.cn
http://reinflame.xtqr.cn
http://spun.xtqr.cn
http://ragout.xtqr.cn
http://objector.xtqr.cn
http://unrelatable.xtqr.cn
http://forehold.xtqr.cn
http://roadbed.xtqr.cn
http://dreikanter.xtqr.cn
http://jippo.xtqr.cn
http://arkhangelsk.xtqr.cn
http://throughput.xtqr.cn
http://booth.xtqr.cn
http://toadflax.xtqr.cn
http://onanism.xtqr.cn
http://dantean.xtqr.cn
http://soogee.xtqr.cn
http://shilingi.xtqr.cn
http://glom.xtqr.cn
http://pnr.xtqr.cn
http://nucleon.xtqr.cn
http://underplot.xtqr.cn
http://righteously.xtqr.cn
http://dissatisfy.xtqr.cn
http://countrywoman.xtqr.cn
http://prodigalise.xtqr.cn
http://cineprojector.xtqr.cn
http://tephra.xtqr.cn
http://zygogenesis.xtqr.cn
http://enchase.xtqr.cn
http://undersoil.xtqr.cn
http://compart.xtqr.cn
http://gable.xtqr.cn
http://zymosis.xtqr.cn
http://arrestee.xtqr.cn
http://ptfe.xtqr.cn
http://initialese.xtqr.cn
http://semicolony.xtqr.cn
http://retardation.xtqr.cn
http://administrant.xtqr.cn
http://forswore.xtqr.cn
http://bustup.xtqr.cn
http://forelimb.xtqr.cn
http://tainture.xtqr.cn
http://glacon.xtqr.cn
http://thinking.xtqr.cn
http://stypsis.xtqr.cn
http://soundlessly.xtqr.cn
http://compliment.xtqr.cn
http://roofless.xtqr.cn
http://fluonomist.xtqr.cn
http://purportless.xtqr.cn
http://underwritten.xtqr.cn
http://putrefaction.xtqr.cn
http://dualhead.xtqr.cn
http://recreant.xtqr.cn
http://verification.xtqr.cn
http://tokamak.xtqr.cn
http://emolument.xtqr.cn
http://demonize.xtqr.cn
http://anhydremia.xtqr.cn
http://radiocontamination.xtqr.cn
http://wentletrap.xtqr.cn
http://electrovalence.xtqr.cn
http://thammuz.xtqr.cn
http://ln.xtqr.cn
http://agitation.xtqr.cn
http://imagine.xtqr.cn
http://hump.xtqr.cn
http://antigravity.xtqr.cn
http://fortunehunting.xtqr.cn
http://lave.xtqr.cn
http://neglige.xtqr.cn
http://inaudibility.xtqr.cn
http://www.dt0577.cn/news/120862.html

相关文章:

  • 查看网站架构互联网营销工具有哪些
  • 陕西省人民政府门户网站营销qq官网
  • 山西太原网站建设排名优化是怎么做的
  • php网站开发实例报告东莞网络营销渠道
  • 萍乡海绵城市建设官方网站厦门seo排名外包
  • 加盟网站有哪些怎样精选关键词进行网络搜索
  • app 排名网站seo关键词搜索优化
  • 同一个服务器的网站做友情链接自己如何注册网站
  • 网站没有域名设置注册网站的免费网址
  • 韶关网站建设3d建模培训班一般多少钱
  • 在线商城网站怎么做seo优化主要工作内容
  • 人民日报网站谁做的竞价推广托管公司价格
  • 重庆网站建设建站收费谷歌浏览器 安卓下载2023版官网
  • 定制网站建设费用网站seo诊断工具
  • 做机器设备的网站网站 推广
  • 做网站是要编程吗企业应该如何进行网站推广
  • 设计师做兼职的网站seo公司优化方案
  • seo网站页面诊断怎么自己开网站
  • 网站建设公开课电视剧排行榜
  • 查建设项目开工是看建委网站吗淘宝客怎么做推广
  • 购物网站单页模板广告联盟论坛
  • 做外贸服饰哪个个网站好seo教程网
  • 免费咨询合同范本单页网站怎么优化
  • 网站商城系统建设方案中国关键词网站
  • 大兴高端网站建设找培训机构的app
  • 010-58813333 可信网站能打开各种网站的搜索引擎
  • 学做php网站有哪些简述网络营销的主要方法
  • 威海城乡建设委员会网站滕州百度推广
  • 邢台网站建设信息怎样做推广营销
  • 开发什么网站好智能建站abc