一 往事
 
 寒冬腊月,在一个寂静的天空飘着碎银雪花的夜晚。我接到这么一个电话:"朋友,能否帮忙开发一个游戏手柄的案子?我们遇到了一些问题,迟迟无法解决。",喔,这边我陷入了沉思,团队已经满负荷在运行了,不能再接新的项目了。我回答道:“目前我们抽不出人手啊“。对方一下子沉默了。本以为这样的事情就结束了。没想到的是,在后面的几天时间里,天天接到这个朋友的电话,目的只有一个,帮忙解决一下问题。谁能拒绝一个百折不挠的人呢?就这样,在那个为数不多的春节假期里。注定团队有些人要再接再厉了。
 
 没有颗粒无收的假期,在经历了假期的加班和节后的几轮测试之后,让人欣慰的是,总算顺利的把客户的项目交付了。
 
二 源码解析
 
 ble协议: bes2500的ble协议代码开放程度比较高,基本可以完成所有ble的协议特殊定制需求。放开程度高的特点也决定了该部分代码量比较大,需要开发者深入去思考和开发。 这里ble的协议代码都在:service/ble_app目录下面。 这里有几个文件需要深入的去研究:app_batt.c 设备电池电量上报的service,找到接口映射到获取电池电量函数即可。 针对按键的ble映射和数据传输部分,这没有详细的代码,需要自己写的,这个参考文件:app_ble_key.cpp 针对ble的数据接收部分,可以直接从函数:app_ble_rx_handler_thread里面查找。 针对ble的service类型部分,在下面这个结构体中查看。

 传感器接口: ble游戏手柄一般需要使用震动传感器和六轴传感器,震动传感器一般使用GPIO接口接口搞定,这部分源码比较简单,请查看文件hal_gpio_v2.c并做修改即可: 六轴传感器部分一般使用的是I2C接口,这部分bes2500上面例子不多,但是接口是有的,需要在hal_i2c.c文件基础上做修改。
 按键: 按键部分流程都在:app_keyhandle.cpp里面,把这个流程搞清楚,做修改即可。
 灯光: 该芯片支持pwm灯光效果,例子和架构基本完善,只需要在文件:app_status_ind.c 做修改即可。
 
三 总结
 
 技术难度: 做基于ble的无线遥控手柄的技术难度不算高,可是工作量却不少,因为这里涉及到的东西很多。比如,BLE协议栈,I2C接口,GPIO控制,PWM接口等,这些都是很琐碎的,非常浪费时间的。

基于BES2500芯片的低功耗蓝牙BLE游戏手柄解决方案源码解析的更多相关文章

  1. 低功耗蓝牙BLE外围模式(peripheral)-使用BLE作为服务端

    低功耗蓝牙BLE外围模式(peripheral)-使用BLE作为服务端 Android对外模模式(peripheral)的支持 从Android5.0开始才支持 关键术语和概念 以下是关键BLE术语和 ...

  2. 深入浅出低功耗蓝牙(BLE)协议栈

    深入浅出低功耗蓝牙(BLE)协议栈 BLE协议栈为什么要分层?怎么理解蓝牙"连接"?如果蓝牙协议只有ATT没有GATT会发生什么? 协议栈框架 一般而言,我们把某个协议的实现代码称 ...

  3. 深入浅出讲解低功耗蓝牙(BLE)协议栈

    详解BLE连接建立过程https://www.cnblogs.com/iini/p/8972635.html 详解BLE 空中包格式—兼BLE Link layer协议解析https://www.cn ...

  4. 使用BleLib的轻松搞定Android低功耗蓝牙Ble 4.0开发具体解释

    转载请注明来源: http://blog.csdn.net/kjunchen/article/details/50909410 使用BleLib的轻松搞定Android低功耗蓝牙Ble 4.0开发具体 ...

  5. Android BLE 总结-源码篇(BluetoothLeAdvertiser)

    在做Android BLE的应用程序时,我们发出广播数据是调用BluetoothLeAdvertiser的startAdvertising方法,如下所示: mBluetoothLeAdvertiser ...

  6. String,StringBuffer和StringBuilder源码解析[基于JDK6]

    最近指导几位新人,学习了一下String,StringBuffer和StringBuilder类,从反馈的结果来看,总体感觉学习的深度不够,没有读出东西.其实,JDK的源码是越读越有味的.下面总结一下 ...

  7. 基于Zlib算法的流压缩、字符串压缩源码

    原文:基于Zlib算法的流压缩.字符串压缩源码 Zlib.net官方源码demo中提供了压缩文件的源码算法.处于项目研发的需要,我需要对内存流进行压缩,由于zlib.net并无相关文字帮助只能自己看源 ...

  8. 基于Docker的TensorFlow机器学习框架搭建和实例源码解读

    概述:基于Docker的TensorFlow机器学习框架搭建和实例源码解读,TensorFlow作为最火热的机器学习框架之一,Docker是的容器,可以很好的结合起来,为机器学习或者科研人员提供便捷的 ...

  9. Java集合类源码解析:HashMap (基于JDK1.8)

    目录 前言 HashMap的数据结构 深入源码 两个参数 成员变量 四个构造方法 插入数据的方法:put() 哈希函数:hash() 动态扩容:resize() 节点树化.红黑树的拆分 节点树化 红黑 ...

  10. 基于Ubuntu 14.04 LTS编译Android4.4.2源码

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/gobitan/article/details/24367439 基于Ubuntu 14.04 LTS ...

随机推荐

  1. 【奶奶看了都会】ComfyUI+SVD制作AI视频教程,附效果演示

    AI一天,人间一年 大家好啊,我是小卷,最近AI绘画又发展出一些新玩意了,小卷因为工作的关系有一个月没关注AI的发展了,都有点跟不上版本节奏了... 1.comfyui的使用效果 今天给大家介绍下AI ...

  2. Python-wxauto微信自动发送消息或文件

    1.安装wxauto和pyautogui库,pip安装即可. pip install wxauto pip install pyautogui 2.登录电脑微信客户端 这里有两个注意点:(1)不能将客 ...

  3. ABC 332

    ABCDF 都赛时做出来了. E \(\displaystyle\dfrac{1}{D}\sum_{i=1}^D (x_i-\overline{x})^2=\dfrac{1}{D}(\sum_{i=1 ...

  4. NC200195 区区区间

    题目链接 题目 题目描述 \(Keven\) 特别喜欢线段树,他给你一个长度为 \(n\) 的序列,对序列进行 \(m\) 次操作. 操作有两种: 1 \(1\ l\ r\ k\) :表示将下标在 \ ...

  5. SpringBoot+Shiro+LayUI权限管理系统项目-9.核心知识点总结

    1.说明 本篇讲一下本项目几个重要的知识点,详细看源码,文章下方捐赠或QQ联系捐赠获取. 2.Shiro如何设置密码加密算法 1.在shiro配置文件中添加: @Bean public HashedC ...

  6. Python之读取Excel

    介绍 现在交给你一份2010年美国各州县人口普查表:censuspopdata.xlsx.共72864条记录. 每一行代表一个县某统计区的人口数. 需要你统计出:各县统计区数量和人口数. 表格内容长这 ...

  7. Java集合框架学习(四) LinkedHashSet详解

    LinkedHashSet介绍 前面我们介绍了HashSet和TreeSet. LinkedHashSet也是Set接口的一个实现类,同时还继承了HashSet public class Linked ...

  8. win32 - 在进程之间获取事件通知(CreateEvent)

    只需要记住使用OpenEvent来同步Event对象. Project A: #define _CRT_SECURE_NO_WARNINGS #include <Windows.h> #i ...

  9. 2021-07-20 JavaScript中关于eval()方法

    eval()常见用途 1.使用ajax获取到后台返回的json数据时,使用 eval 这个方法将json字符串转换成对象数组 let jsonString = JSON.stringify({fang ...

  10. 【LeetCode二叉树#09】路径总和I+II,以及求根节点到叶节点数字之和(回溯回溯,还是™的回溯)

    路径总和 力扣题目链接(opens new window) 给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和. 说明: 叶子节点是指没有子节点的 ...