基于BES2500芯片的低功耗蓝牙BLE游戏手柄解决方案源码解析
2023-09-11 14:17:10 时间
一 往事
寒冬腊月,在一个寂静的天空飘着碎银雪花的夜晚。我接到这么一个电话:"朋友,能否帮忙开发一个游戏手柄的案子?我们遇到了一些问题,迟迟无法解决。",喔,这边我陷入了沉思,团队已经满负荷在运行了,不能再接新的项目了。我回答道:“目前我们抽不出人手啊“。对方一下子沉默了。本以为这样的事情就结束了。没想到的是,在后面的几天时间里,天天接到这个朋友的电话,目的只有一个,帮忙解决一下问题。谁能拒绝一个百折不挠的人呢?就这样,在那个为数不多的春节假期里。注定团队有些人要再接再厉了。
没有颗粒无收的假期,在经历了假期的加班和节后的几轮测试之后,让人欣慰的是,总算顺利的把客户的项目交付了。
二 源码解析
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类型部分,在下面这个结构体中查看。
![](https://img2022.cnblogs.com/blog/1003156/202204/1003156-20220424111904088-683806947.png)
传感器接口: ble游戏手柄一般需要使用震动传感器和六轴传感器,震动传感器一般使用GPIO接口接口搞定,这部分源码比较简单,请查看文件hal_gpio_v2.c并做修改即可: 六轴传感器部分一般使用的是I2C接口,这部分bes2500上面例子不多,但是接口是有的,需要在hal_i2c.c文件基础上做修改。
按键: 按键部分流程都在:app_keyhandle.cpp里面,把这个流程搞清楚,做修改即可。
灯光: 该芯片支持pwm灯光效果,例子和架构基本完善,只需要在文件:app_status_ind.c 做修改即可。
三 总结
技术难度: 做基于ble的无线遥控手柄的技术难度不算高,可是工作量却不少,因为这里涉及到的东西很多。比如,BLE协议栈,I2C接口,GPIO控制,PWM接口等,这些都是很琐碎的,非常浪费时间的。
相关文章
- 网易正式发布 Pomelo 开源游戏服务端框架
- Unity3D研究院之在把代码混淆过的游戏返混淆回来
- 2013编程之美全国挑战赛第一场-传话游戏
- python应用-21根火柴游戏
- Java实现蓝桥杯VIP算法训练 石子游戏
- 【刷题】面筋-游戏测试-对二次元游戏的认识
- 【ANDROID游戏开发二十二】(图文详解)游戏中灵活实现动画播放!简述J2ME的游戏类库与ANDROID游戏开发!
- 或许您还不知道的八款Android开源游戏引擎
- 【53.90】【BZOJ 3875】 [Ahoi2014]骑士游戏
- 什么是游戏运维?
- Unity3D根据游戏的发展Terrain Toolkit地形生产
- 游戏制作之路(55)模拟风
- 使用codeblock开发图形化游戏