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

    npm view webpack versions npm view webpack versions

  2. Spring一套全通6—注解编程

    百知教育 --- Spring系列课程 --- 注解编程 第一章.注解基础概念 1. 什么是注解编程 指的是在类或者方法上加入特定的注解(@XXX),完成特定功能的开发. @Component pub ...

  3. 699元 光威推出神武RGB系列DDR5 6400内存:海力士精选颗粒

    光威推出了神武RGB系列DDR5 6400台式机内存条,售价为699元. 据了解,新款内存条采用了海力士M-die特挑颗粒,拥有CL-32-39-39-102低时序. 散热方面,这款内存条采用显卡级散 ...

  4. 求助:Docker怎么连接mongoDB?

    首先 在playwithDocker中通过docker pull mongo引入mongo 然后创建容器 docker run -it --name mymongo -p 27017:27017 -v ...

  5. JuiceFS 新手必知 24 问

    JuiceFS 是一个创新性的软件产品,很多初次尝试的小伙伴对产品和用法感到很多疑惑,所以为了帮助大家快速理解并上手 JuiceFS,我们整理了24个关于 JuiceFS 经典的问题答案,相信经过这 ...

  6. 安装Electron时卡在install.js不动的解决方案

    问题来源,发现即使 源切换成淘宝的之后,安装 electron的时候还是慢死,郁闷,后来百度才发现,原来,还需要设置一个地方!!! 经过试验,果然快了 爽.... 之前在安装Electron的时候,经 ...

  7. 【Unity3D】相机

    1 简介 ​ 相机用于渲染游戏对象,每个场景中可以有多个相机,每个相机独立成像,每个成像都是一个图层,最后渲染的图层在最前面显示. ​ 相机的属性面板如下: Clear Flags:设置清屏颜色,Sk ...

  8. 【Lua】ToLua逻辑热更新

    1 前言 ​ Lua基础语法 中系统介绍了 Lua 的语法体系,xLua逻辑热更新 中介绍了 xLua 的应用,本文将进一步介绍 Unity3D 中基于 ToLua 实现逻辑热更新. ​ 逻辑热更新是 ...

  9. SpringBoot+Shiro+LayUI权限管理系统项目-6.实现角色管理

    1.说明 只讲解关键部分,详细看源码,文章下方捐赠或QQ联系捐赠获取. 2.功能展示 3.业务模型 @Data @EqualsAndHashCode(callSuper = false) @Acces ...

  10. SpringBoot+Shiro+LayUI权限管理系统项目-4.实现部门管理

    1.说明 只讲解关键部分,详细看源码,文章下方捐赠或QQ联系捐赠获取. 2.功能展示 3.业务模型 @Data @EqualsAndHashCode(callSuper = false) @Acces ...