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