非常奇怪的问题,发送MSP_IDENT,能收到飞控应答数据。但是发送MSP_SET_RAW_RC,却没有任何回答。但是看MWC源代码,它应该回一个收到的消息啊。
一开始考虑是校验码不正确,因为java的byte是带符号的,怀疑是^操作结果和飞控的c代码结果不同。但是写代码测了下是一样的。
没办法打算用arduino+另外一个BLE模块搭建一个测试环境来测试。忽然又想把MSP_SET_RAW_RC和MSP_IDENT换了下,就是发RC的时候不带内容,这样居然有回应。为了测试是不是真的是校验码错误。往RC里面只添加了1个short型数据,仍然有回应。
这样就太奇怪了,确实不是校验码有问题。再往包里面多加了几个数据,结果发现多加数据后,就没有回应了。
想来想去,数据多了就无回应,因为校验码在数据包最后1Byte上,难道是数据发送有长度限制?
网上搜一下,果然,BLE一次只能发20个Byte,难怪飞控认为数据非法呢。长的数据都截掉了。
找到一个API,requestMTU,满怀信心的调大MTU试了下,却发现我买的这蓝牙模块最大只能发送23个Byte。
这就麻烦了,首先发送数据得等回应成功了后才能再发,其次还得拆包,果然用BLE就是个坑好吗。我只能搞个消息发送队列了。
另外吐槽一个,MultiWiiConf的代码写得太烂了简直。各种数组转队列,队列转链表,拆包封包。