|
|
|
@ -57,7 +57,8 @@ const char* decode_states[] = {"UNSYNCED",
@@ -57,7 +57,8 @@ const char* decode_states[] = {"UNSYNCED",
|
|
|
|
|
"GOT_STX2", |
|
|
|
|
"GOT_LEN", |
|
|
|
|
"GOT_TYPE", |
|
|
|
|
"GOT_DATA"}; |
|
|
|
|
"GOT_DATA" |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
/* define range mapping here, -+100% -> 1000..2000 */ |
|
|
|
|
#define ST24_RANGE_MIN 0.0f |
|
|
|
@ -102,7 +103,8 @@ uint8_t st24_common_crc8(uint8_t *ptr, uint8_t len)
@@ -102,7 +103,8 @@ uint8_t st24_common_crc8(uint8_t *ptr, uint8_t len)
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
uint8_t st24_decode(uint8_t byte, uint8_t *rssi, uint8_t* rx_count, uint16_t *channel_count, uint16_t *channels, uint16_t max_chan_count) |
|
|
|
|
uint8_t st24_decode(uint8_t byte, uint8_t *rssi, uint8_t *rx_count, uint16_t *channel_count, uint16_t *channels, |
|
|
|
|
uint16_t max_chan_count) |
|
|
|
|
{ |
|
|
|
|
|
|
|
|
|
bool ret = false; |
|
|
|
@ -112,25 +114,31 @@ uint8_t st24_decode(uint8_t byte, uint8_t *rssi, uint8_t* rx_count, uint16_t *ch
@@ -112,25 +114,31 @@ uint8_t st24_decode(uint8_t byte, uint8_t *rssi, uint8_t* rx_count, uint16_t *ch
|
|
|
|
|
if (byte == ST24_STX1) { |
|
|
|
|
_decode_state = ST24_DECODE_STATE_GOT_STX1; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
|
|
case ST24_DECODE_STATE_GOT_STX1: |
|
|
|
|
if (byte == ST24_STX2) { |
|
|
|
|
_decode_state = ST24_DECODE_STATE_GOT_STX2; |
|
|
|
|
|
|
|
|
|
} else { |
|
|
|
|
_decode_state = ST24_DECODE_STATE_UNSYNCED; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
|
|
case ST24_DECODE_STATE_GOT_STX2: |
|
|
|
|
|
|
|
|
|
/* ensure no data overflow failure or hack is possible */ |
|
|
|
|
if ((unsigned)byte <= sizeof(_rxpacket.length) + sizeof(_rxpacket.type) + sizeof(_rxpacket.st24_data)) { |
|
|
|
|
_rxpacket.length = byte; |
|
|
|
|
_rxlen = 0; |
|
|
|
|
_decode_state = ST24_DECODE_STATE_GOT_LEN; |
|
|
|
|
|
|
|
|
|
} else { |
|
|
|
|
_decode_state = ST24_DECODE_STATE_UNSYNCED; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
|
|
case ST24_DECODE_STATE_GOT_LEN: |
|
|
|
@ -142,9 +150,11 @@ uint8_t st24_decode(uint8_t byte, uint8_t *rssi, uint8_t* rx_count, uint16_t *ch
@@ -142,9 +150,11 @@ uint8_t st24_decode(uint8_t byte, uint8_t *rssi, uint8_t* rx_count, uint16_t *ch
|
|
|
|
|
case ST24_DECODE_STATE_GOT_TYPE: |
|
|
|
|
_rxpacket.st24_data[_rxlen - 1] = byte; |
|
|
|
|
_rxlen++; |
|
|
|
|
|
|
|
|
|
if (_rxlen == (_rxpacket.length - 1)) { |
|
|
|
|
_decode_state = ST24_DECODE_STATE_GOT_DATA; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
|
|
case ST24_DECODE_STATE_GOT_DATA: |
|
|
|
@ -159,8 +169,7 @@ uint8_t st24_decode(uint8_t byte, uint8_t *rssi, uint8_t* rx_count, uint16_t *ch
@@ -159,8 +169,7 @@ uint8_t st24_decode(uint8_t byte, uint8_t *rssi, uint8_t* rx_count, uint16_t *ch
|
|
|
|
|
|
|
|
|
|
switch (_rxpacket.type) { |
|
|
|
|
|
|
|
|
|
case ST24_PACKET_TYPE_CHANNELDATA12: |
|
|
|
|
{ |
|
|
|
|
case ST24_PACKET_TYPE_CHANNELDATA12: { |
|
|
|
|
ChannelData12 *d = (ChannelData12 *)_rxpacket.st24_data; |
|
|
|
|
|
|
|
|
|
*rssi = d->rssi; |
|
|
|
@ -186,8 +195,7 @@ uint8_t st24_decode(uint8_t byte, uint8_t *rssi, uint8_t* rx_count, uint16_t *ch
@@ -186,8 +195,7 @@ uint8_t st24_decode(uint8_t byte, uint8_t *rssi, uint8_t* rx_count, uint16_t *ch
|
|
|
|
|
} |
|
|
|
|
break; |
|
|
|
|
|
|
|
|
|
case ST24_PACKET_TYPE_CHANNELDATA24: |
|
|
|
|
{ |
|
|
|
|
case ST24_PACKET_TYPE_CHANNELDATA24: { |
|
|
|
|
ChannelData24 *d = (ChannelData24 *)&_rxpacket.st24_data; |
|
|
|
|
|
|
|
|
|
*rssi = d->rssi; |
|
|
|
@ -213,11 +221,10 @@ uint8_t st24_decode(uint8_t byte, uint8_t *rssi, uint8_t* rx_count, uint16_t *ch
@@ -213,11 +221,10 @@ uint8_t st24_decode(uint8_t byte, uint8_t *rssi, uint8_t* rx_count, uint16_t *ch
|
|
|
|
|
} |
|
|
|
|
break; |
|
|
|
|
|
|
|
|
|
case ST24_PACKET_TYPE_TRANSMITTERGPSDATA: |
|
|
|
|
{ |
|
|
|
|
case ST24_PACKET_TYPE_TRANSMITTERGPSDATA: { |
|
|
|
|
|
|
|
|
|
ReceiverFcPacket* d = (ReceiverFcPacket*)&_rxpacket; |
|
|
|
|
/* we silently ignore this data for now, as its not classic TX data */ |
|
|
|
|
// ReceiverFcPacket* d = (ReceiverFcPacket*)&_rxpacket.st24_data;
|
|
|
|
|
/* we silently ignore this data for now, as it is unused */ |
|
|
|
|
ret = false; |
|
|
|
|
} |
|
|
|
|
break; |
|
|
|
@ -231,6 +238,7 @@ uint8_t st24_decode(uint8_t byte, uint8_t *rssi, uint8_t* rx_count, uint16_t *ch
@@ -231,6 +238,7 @@ uint8_t st24_decode(uint8_t byte, uint8_t *rssi, uint8_t* rx_count, uint16_t *ch
|
|
|
|
|
/* decoding failed */ |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
_decode_state = ST24_DECODE_STATE_UNSYNCED; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|