一 往事
 
 寒冬腊月,在一个寂静的天空飘着碎银雪花的夜晚。我接到这么一个电话:"朋友,能否帮忙开发一个游戏手柄的案子?我们遇到了一些问题,迟迟无法解决。",喔,这边我陷入了沉思,团队已经满负荷在运行了,不能再接新的项目了。我回答道:“目前我们抽不出人手啊“。对方一下子沉默了。本以为这样的事情就结束了。没想到的是,在后面的几天时间里,天天接到这个朋友的电话,目的只有一个,帮忙解决一下问题。谁能拒绝一个百折不挠的人呢?就这样,在那个为数不多的春节假期里。注定团队有些人要再接再厉了。
 
 没有颗粒无收的假期,在经历了假期的加班和节后的几轮测试之后,让人欣慰的是,总算顺利的把客户的项目交付了。
 
二 源码解析
 
 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. P4149 [IOI2011] Race 题解

    题目链接:Race 点分治基本题,从这题简单阐述点分治如何思考问题的.点分治常见的解决一类问题,就是树里面的一些路径类问题.比如一些计数是最常见的. 点分治的一个核心计数思想: 如图所见,对于某个点而 ...

  2. 打开PDB报错ORA-30013

    多租户架构,之前还在做运维的时期接触也不多.遇到多租户问题,第一反应是有些发虚的. 但实际很多问题很简单,也容易解决.本文就是一个例子. 问题:RAC节点2打开所有PDB时,报错ORA-30013. ...

  3. 基于keras的文本情感识别

    情感识别是一个典型的分类问题,可以使用Keras来实现,本文是之前整理的笔记,分享出来大家一起学习.   流程描述 Keras文本情感分类基于机器学习算法,会根据大量数据训练出分类模型,然后使用训练好 ...

  4. PAC主成分分析__784手写特征案例

    from sklearn.neighbors import KNeighborsClassifier as KNN from sklearn.decomposition import PCA from ...

  5. 将CH340G的USB2TTL扩展出RTS, DTR口

    关于 要测试串口中的RTS和DTR, 最常见的USB2TTL基于CH340G, 并没有引出RTS, 然而这个IC是支持这些信号的, 只是PCB上将这些pin留空了. 这块板子的PCB 电路 详细信息可 ...

  6. Ubuntu下使用PlatformIO开发STC89/STC12/Arduino

    安装VSCode 从 https://code.visualstudio.com/Download 下载最新的 deb 版, 通过命令行安装 sudo apt install ./code_1.59. ...

  7. linux删除目录下指定文件方法

    1.删除当前目录下文件名含有2013的文件 ls | grep  2013 | xargs rm --To be continue...

  8. pikachu sql inject header 注入

    使用admin登录 显示以下内容 朋友,你好,你的信息已经被记录了:点击退出 你的ip地址:172.17.0.1 你的user agent:Mozilla/5.0 (X11; Ubuntu; Linu ...

  9. pikachu SQL-inject insert/update注入

    insert 注入 (修改信息处是update注入,和此处同理) 注册页面,用户处输入 1' 发现报错信息 You have an error in your SQL syntax; check th ...

  10. 【LeetCode剑指offer#05】回文链表的两种解法+删除链表中间节点(链表的基本操作)

    回文链表 给你一个单链表的头节点 head ,请你判断该链表是否为回文链表.如果是,返回 true :否则,返回 false . 示例 1: 输入:head = [1,2,2,1] 输出:true 示 ...