|
通用协议数据为0-26byte,27以后的附加字节貌似只和frskyX、frskyX2、hott几个协议有关。
byte0
前6bit功能尚未明确,有待分析
0b00000001 0x01 //协议编号(0-63)
0b00000010 0x02 //failsafe
byte1 √
0b10000000 0x80 //绑定标志
0b01000000 0x40 //check 自动绑定
0b00100000 0x20 //check range
0b00011111 0x1F //协议编号(0-31)
byte2 √
0b10000000 0x80 //功率 if rx_ok_buff[2]&0x80 ==1,power is low ,0-power high
0b01110000 //子协议编号(0-7)bits 4-6 //sub_protocol=(rx_ok_buff[2]>>4)& 0x07;
0b00001111 0x0F //rx_num编号(0-15)
byte3
//Option 频率调谐值,大多协议该值都为0
byte4...byte25
最难以理解的是通道数据,每通道11bit(0-2047),共占用22byte。
源码中的通道解码算法如下,相当晦涩难懂,那编码怎么弄呢?
volatile uint8_t *p=rx_ok_buff+3;
uint8_t dec=-3;
for(uint8_t i=0;i<NUM_CHN;i++)
{
dec+=3;
if(dec>=8)
{
dec-=8;
p++;
}
p++;
uint16_t temp=((*((uint32_t *)p))>>dec)&0x7FF;
}
好在编码方面可以利用共用体简单的实现,如下。
union {
unsigned byte raw[22];
struct {
uint32_t channel1:11;
uint32_t channel2:11;
.
.
.
uint32_t channel16:11;
};
}channels;
byte26
//末尾附加标志,第5-6bit功能尚未明确
0b11000000 0xC0 //协议编号(0-255)
0b00110000 0x30 //rx_num编号(0-63)
0b00000001 0x01 //DISABLE_TELEM
0b00000010 0x02 //DISABLE_CH_MAP
|
欢迎继续阅读楼主其他信息
|