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

外贸自建站如何收款国内免费可商用图片素材网站

外贸自建站如何收款,国内免费可商用图片素材网站,网页制作三大软件,抖音代运营方案计划书文章目录 蓝牙框架HCI接口蓝牙VENDORLIBvendorlib是什么 代码层面解读vendorlib1、 vendorlib实现#xff0c;协议栈调用2、协议栈实现#xff0c;vendorlib调用#xff08;回调函数#xff09;2.1、 init函数2.2、BT_VND_OP_POWER_CTRL对应处理2.3、BT_VND_OP_USERIAL_OPE… 文章目录 蓝牙框架HCI接口蓝牙VENDORLIBvendorlib是什么 代码层面解读vendorlib1、 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?hlzh-cn https://android.googlesource.com/platform/hardware/interfaces//master/bluetooth/ 蓝牙框架 HCI接口 蓝牙整体硬件架构上分为主机计算机或MCU和主机控制器实际蓝牙芯片组两部分主机和控制器之间的通信遵循主机控制器接口HCI如下所示 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 (idx0; 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://www.hkea.cn/news/14308888/

相关文章:

  • 哪个网站做logo网站个人备案需要什么资料
  • 车辆年检查询系统官方网站最基本的网络营销站点
  • 北京平台网站建设公司互联网官网入口
  • 网站的内部链接如何做网站建设直通车关键词设置
  • 广西网站建设产品介绍软件开发主要是干什么的
  • 企业网站开发需要蓝色 网站
  • 做照片的网站网站建设_聊城
  • 云建站app免费推广网站平台
  • 网站会员功能新万网站建设
  • 怎么在网站添加paypal贵阳大数据论坛
  • 河北港网站建设网站建设推广服务合同范本
  • 网站变灰是什么事网站怎样被百度收录
  • 毕节网站网站建设军事天地最新消息
  • 快三竞猜网站建设下载网站cms
  • 企业的外币收入外管局网站做啥视频号直播推广二维码
  • 天津手机网站建设制作申请自媒体账号入口
  • 介绍自己做的电影网站wordpress上传Flickr
  • 权威的广州h5网站网站建设策划书附录
  • 抚州网站推广人社局网站建设步骤
  • 网站建设泽宇深圳高端电商网站建设者
  • 海南住房与城乡建设网站惠州市网站建设
  • wordpress 游戏网站网站免费注册
  • 室内设计素材网站推荐网站出现用户名密码提示
  • 网站做关键词搜索要好多钱微网站不能分享朋友圈
  • 网站建设方案怎么写阳江seo网站推广
  • 网站开发对数据库的要求网站空间多大合适
  • 漳州正规网站建设价格西山区城市建设局网站
  • 阳谷网站建设网络推广郑州网站建设三猫网络
  • 龙岗网站建设szaow防止域名失效 请牢记
  • 学校校园网站推广分享