11#include "CRSF.h"
22#include "targets.h"
33
4+ //#define DEBUG_RX_UART_IN
5+
6+ #if defined(TARGET_RX_GHOST_ATTO_V1 ) /* !TARGET_RX_GHOST_ATTO_V1 */
7+ #define CRSF_RX_SERIAL CrsfRxSerial
8+ HardwareSerial CrsfRxSerial (USART1 , HALF_DUPLEX_ENABLED );
9+ #elif defined(TARGET_R9SLIMPLUS_RX ) /* !TARGET_R9SLIMPLUS_RX */
10+ #define CRSF_RX_SERIAL CrsfRxSerial
11+ HardwareSerial CrsfRxSerial (USART3 );
12+ #else
13+ #define CRSF_RX_SERIAL Serial
14+ #endif
15+
416extern CRSF crsf ;
17+ extern GENERIC_CRC8 crsf_crc ;
518
619uint8_t UARTinPacketPtr ;
720uint8_t UARTinPacketLen ;
@@ -16,7 +29,9 @@ void RX_UARTinProcessPacket()
1629 if (UARTinBuffer [2 ] == CRSF_FRAMETYPE_COMMAND )
1730 {
1831#ifdef PLATFORM_STM32
32+ #ifdef DEBUG_RX_UART_IN
1933 Serial .println ("Got CMD Packet" );
34+ #endif
2035 if (UARTinBuffer [3 ] == 0x62 && UARTinBuffer [4 ] == 0x6c )
2136 {
2237 delay (100 );
@@ -27,22 +42,26 @@ void RX_UARTinProcessPacket()
2742#endif
2843 }
2944
30- if (UARTinBuffer [2 ] == CRSF_FRAMETYPE_BATTERY_SENSOR )
45+ switch (UARTinBuffer [2 ])
3146 {
47+ case CRSF_FRAMETYPE_BATTERY_SENSOR :
3248 crsf .TLMbattSensor .voltage = (UARTinBuffer [3 ] << 8 ) + UARTinBuffer [4 ];
3349 crsf .TLMbattSensor .current = (UARTinBuffer [5 ] << 8 ) + UARTinBuffer [6 ];
3450 crsf .TLMbattSensor .capacity = (UARTinBuffer [7 ] << 16 ) + (UARTinBuffer [8 ] << 8 ) + UARTinBuffer [9 ];
3551 crsf .TLMbattSensor .remaining = UARTinBuffer [9 ];
36- }
37-
38- if (UARTinBuffer [2 ] == CRSF_FRAMETYPE_GPS )
39- {
52+ break ;
53+
54+ case CRSF_FRAMETYPE_GPS :
4055 crsf .TLMGPSsensor .latitude = (UARTinBuffer [3 ] << 24 ) + (UARTinBuffer [4 ] << 16 ) + (UARTinBuffer [5 ] << 8 ) + (UARTinBuffer [6 ] << 0 );
4156 crsf .TLMGPSsensor .longitude = (UARTinBuffer [7 ] << 24 ) + (UARTinBuffer [8 ] << 16 ) + (UARTinBuffer [9 ] << 8 ) + (UARTinBuffer [10 ] << 0 );
4257 crsf .TLMGPSsensor .speed = (UARTinBuffer [11 ] << 8 ) + (UARTinBuffer [12 ] << 0 );
4358 crsf .TLMGPSsensor .headng = (UARTinBuffer [13 ] << 8 ) + (UARTinBuffer [14 ] << 0 );
4459 crsf .TLMGPSsensor .alt = (UARTinBuffer [15 ] << 8 ) + (UARTinBuffer [16 ] << 0 );
4560 crsf .TLMGPSsensor .sats = (UARTinBuffer [17 ]);
61+ break ;
62+
63+ default :
64+ break ;
4665 }
4766}
4867
@@ -96,7 +115,7 @@ void RX_UARTinHandle()
96115
97116 if (UARTinPacketPtr == UARTinPacketLen + 2 ) // plus 2 because the packlen is referenced from the start of the 'type' flag, IE there are an extra 2 bytes.
98117 {
99- char CalculatedCRC = CalcCRC ((uint8_t * )UARTinBuffer + 2 , UARTinPacketPtr - 3 );
118+ uint8_t CalculatedCRC = crsf_crc . calc ((uint8_t * )UARTinBuffer + 2 , UARTinPacketPtr - 3 );
100119
101120 if (CalculatedCRC == inChar )
102121 {
@@ -111,7 +130,9 @@ void RX_UARTinHandle()
111130 UARTinPacketPtr = 0 ;
112131 UARTinPacketLen = 0 ;
113132 UARTframeActive = false;
133+ #ifdef DEBUG_RX_UART_IN
114134 Serial .println ("UART in CRC failure" );
135+ #endif
115136 while (Serial .available ())
116137 {
117138 Serial .read (); // empty the read buffer
0 commit comments