非常奇怪的問題淹遵,發(fā)送MSP_IDENT继找,能收到飛控應(yīng)答數(shù)據(jù)遂跟。但是發(fā)送MSP_SET_RAW_RC,卻沒有任何回答婴渡。但是看MWC源代碼幻锁,它應(yīng)該回一個收到的消息啊。
一開始考慮是校驗碼不正確边臼,因為java的byte是帶符號的哄尔,懷疑是^操作結(jié)果和飛控的c代碼結(jié)果不同。但是寫代碼測了下是一樣的柠并。
沒辦法打算用arduino+另外一個BLE模塊搭建一個測試環(huán)境來測試岭接。忽然又想把MSP_SET_RAW_RC和MSP_IDENT換了下,就是發(fā)RC的時候不帶內(nèi)容臼予,這樣居然有回應(yīng)鸣戴。為了測試是不是真的是校驗碼錯誤。往RC里面只添加了1個short型數(shù)據(jù)粘拾,仍然有回應(yīng)窄锅。
這樣就太奇怪了,確實不是校驗碼有問題半哟。再往包里面多加了幾個數(shù)據(jù)酬滤,結(jié)果發(fā)現(xiàn)多加數(shù)據(jù)后,就沒有回應(yīng)了寓涨。
想來想去盯串,數(shù)據(jù)多了就無回應(yīng),因為校驗碼在數(shù)據(jù)包最后1Byte上戒良,難道是數(shù)據(jù)發(fā)送有長度限制体捏?
網(wǎng)上搜一下,果然糯崎,BLE一次只能發(fā)20個Byte几缭,難怪飛控認(rèn)為數(shù)據(jù)非法呢。長的數(shù)據(jù)都截掉了沃呢。
找到一個API年栓,requestMTU,滿懷信心的調(diào)大MTU試了下薄霜,卻發(fā)現(xiàn)我買的這藍牙模塊最大只能發(fā)送23個Byte某抓。
這就麻煩了纸兔,首先發(fā)送數(shù)據(jù)得等回應(yīng)成功了后才能再發(fā),其次還得拆包否副,果然用BLE就是個坑好嗎汉矿。我只能搞個消息發(fā)送隊列了。
另外吐槽一個备禀,MultiWiiConf的代碼寫得太爛了簡直洲拇。各種數(shù)組轉(zhuǎn)隊列,隊列轉(zhuǎn)鏈表曲尸,拆包封包赋续。