BLE HID控制手机相机或音乐

2024-02-29 07:50
文章标签 音乐 手机 控制 相机 hid ble

本文主要是介绍BLE HID控制手机相机或音乐,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

BLE HID涉及到设备管理。具体内容看<<设备管理>>部分。

BLE HID涉及到白名单。具体内容看<<白名单>>部分。

BLE HID涉及到定向广播。具体内容看<<定向广播>>部分。

硬件平台:官方52开发板

参考例程:C:..\nRF5_SDK_11.0.0_89a8197\examples\ble_peripheral\ble_app_hids_mouse\

移植可以把显示和电池服务去掉,只拷贝hid部分。

把UUID改为 BLE_UUID_HUMAN_INTERFACE_DEVICE_SERVICE 我们在手机设置--蓝牙功能界面可以手动搜索蓝牙HID设备并进行连接。添加了HID服务后绑定该设备后断开连接,手机还可以自动连接。

一、该 鼠标示例中 报告描述符 描述了 3 中报告

 

报告 1,描述鼠标 按键和滚轮数据如何组织的。

报告 2,描述鼠标 的移动数据是如何组织的。

报告 3, 描述了一个高级按键,其功能是控制音乐的播放等。

二、HID report map

 

 

 

2.1、下面只分析report 3,因为控制相机和音乐是使用report 3.

定义了 report size 为 1 即 1 bit 。report count 为 1,即 1 个 1bit。

因为 report size 和 report count 为 global 项目,应用到 usage 中,也就是 report 3 中的 8个 usage 都是 1bit,8 个即凑成了 1 个字

节。每个位表示一个功能,所以实际传送 1 字节,通过设置其中的位就能实现不同的控制了。

bit 0 (0x01)  :开始暂停

bit 1 (0x02 ) :一键启动应用

bit 2 (0x04 ) :下一首

bit 3 (0x08 ) :上一首

bit 4 (0x10 ) :音量 -

bit 5 (0x20 ) :音量 +

bit 6 (0x40 ) :应用控制

bit 7 (0x80 ) :返回键


三、最后创建 HID 服务

 

 

四、按键处理里添加相机或音乐控制程序

void media_player_control(uint8_t control)

{

uint32_t err_code;

uint8_t buffer[1];

buffer[0] = control;

err_code = ble_hids_inp_rep_send( &m_hids,

  INPUT_REP_MPLAYER_INDEX,

  1,

  buffer );

if(( err_code != NRF_SUCCESS ) &&

   ( err_code != NRF_ERROR_INVALID_STATE ) &&

   ( err_code != BLE_ERROR_NO_TX_PACKETS ) &&

   ( err_code != BLE_ERROR_GATTS_SYS_ATTR_MISSING ))

{

APP_ERROR_HANDLER( err_code );

}

buffer[0] = 0;

err_code = ble_hids_inp_rep_send( &m_hids,

 INPUT_REP_MPLAYER_INDEX,

1,

buffer );

if(( err_code != NRF_SUCCESS ) &&

   ( err_code != NRF_ERROR_INVALID_STATE ) &&

   ( err_code != BLE_ERROR_NO_TX_PACKETS ) &&

   ( err_code != BLE_ERROR_GATTS_SYS_ATTR_MISSING ))

   {

APP_ERROR_HANDLER( err_code );

   }

}

//PS: 需要再发送一个0,作用类似于释放按键。

//如果不发送这个“释放”,安卓系统有的是没问题,但苹果系统中,音量+发送后相当于一直按住音量+键。

//所以发送这个“释放”控制就能达到按一次只增加一次音量的作用。

 

工程默认使用了绑定和白名单的,所以如果连接了一个手机后再重启开发板, 开发板就是使用之前连接过的手机执行白名单过滤,导致其他手机搜不

到该设备了。所以可以直接修改代码让其每次启动时删除绑定信息。
————————————————
版权声明:本文为CSDN博主「pig10086」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/pig10086/article/details/72402066

这篇关于BLE HID控制手机相机或音乐的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/758053

相关文章

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

基于UE5和ROS2的激光雷达+深度RGBD相机小车的仿真指南(五):Blender锥桶建模

前言 本系列教程旨在使用UE5配置一个具备激光雷达+深度摄像机的仿真小车,并使用通过跨平台的方式进行ROS2和UE5仿真的通讯,达到小车自主导航的目的。本教程默认有ROS2导航及其gazebo仿真相关方面基础,Nav2相关的学习教程可以参考本人的其他博客Nav2代价地图实现和原理–Nav2源码解读之CostMap2D(上)-CSDN博客往期教程: 第一期:基于UE5和ROS2的激光雷达+深度RG

cell phone teardown 手机拆卸

tweezer 镊子 screwdriver 螺丝刀 opening tool 开口工具 repair 修理 battery 电池 rear panel 后盖 front and rear cameras 前后摄像头 volume button board 音量键线路板 headphone jack 耳机孔 a cracked screen 破裂屏 otherwise non-functiona

控制反转 的种类

之前对控制反转的定义和解释都不是很清晰。最近翻书发现在《Pro Spring 5》(免费电子版在文章最后)有一段非常不错的解释。记录一下,有道翻译贴出来方便查看。如有请直接跳过中文,看后面的原文。 控制反转的类型 控制反转的类型您可能想知道为什么有两种类型的IoC,以及为什么这些类型被进一步划分为不同的实现。这个问题似乎没有明确的答案;当然,不同的类型提供了一定程度的灵活性,但

深入解析秒杀业务中的核心问题 —— 从并发控制到事务管理

深入解析秒杀业务中的核心问题 —— 从并发控制到事务管理 秒杀系统是应对高并发、高压力下的典型业务场景,涉及到并发控制、库存管理、事务管理等多个关键技术点。本文将深入剖析秒杀商品业务中常见的几个核心问题,包括 AOP 事务管理、同步锁机制、乐观锁、CAS 操作,以及用户限购策略。通过这些技术的结合,确保秒杀系统在高并发场景下的稳定性和一致性。 1. AOP 代理对象与事务管理 在秒杀商品

PostgreSQL中的多版本并发控制(MVCC)深入解析

引言 PostgreSQL作为一款强大的开源关系数据库管理系统,以其高性能、高可靠性和丰富的功能特性而广受欢迎。在并发控制方面,PostgreSQL采用了多版本并发控制(MVCC)机制,该机制为数据库提供了高效的数据访问和更新能力,同时保证了数据的一致性和隔离性。本文将深入解析PostgreSQL中的MVCC功能,探讨其工作原理、使用场景,并通过具体SQL示例来展示其在实际应用中的表现。 一、

vue2实践:el-table实现由用户自己控制行数的动态表格

需求 项目中需要提供一个动态表单,如图: 当我点击添加时,便添加一行;点击右边的删除时,便删除这一行。 至少要有一行数据,但是没有上限。 思路 这种每一行的数据固定,但是不定行数的,很容易想到使用el-table来实现,它可以循环读取:data所绑定的数组,来生成行数据,不同的是: 1、table里面的每一个cell,需要放置一个input来支持用户编辑。 2、最后一列放置两个b

【电机控制】数字滤波算法(持续更新)

文章目录 前言1. 数字低通滤波 前言 各种数字滤波原理,离散化公式及代码。 1. 数字低通滤波 滤波器公式 一阶低通滤波器的输出 y [ n ] y[n] y[n] 可以通过以下公式计算得到: y [ n ] = α x [ n ] + ( 1 − α ) y [ n − 1 ] y[n] = \alpha x[n] + (1 - \alpha) y[n-1]

OpenStack离线Train版安装系列—3控制节点-Keystone认证服务组件

本系列文章包含从OpenStack离线源制作到完成OpenStack安装的全部过程。 在本系列教程中使用的OpenStack的安装版本为第20个版本Train(简称T版本),2020年5月13日,OpenStack社区发布了第21个版本Ussuri(简称U版本)。 OpenStack部署系列文章 OpenStack Victoria版 安装部署系列教程 OpenStack Ussuri版

OpenStack离线Train版安装系列—1控制节点-环境准备

本系列文章包含从OpenStack离线源制作到完成OpenStack安装的全部过程。 在本系列教程中使用的OpenStack的安装版本为第20个版本Train(简称T版本),2020年5月13日,OpenStack社区发布了第21个版本Ussuri(简称U版本)。 OpenStack部署系列文章 OpenStack Victoria版 安装部署系列教程 OpenStack Ussuri版