@ -17,6 +17,7 @@
*/
# include <gtest/gtest.h>
# include <cstring>
# include "../../SlowDataEncoder.h"
# include "../../DStarDefines.h"
@ -27,6 +28,510 @@ namespace SlowDataEncoderTests
} ;
TEST_F ( SlowDataEncoder_interleavedData , gpsAndHeaderData )
{
// Header is never interleaved, text and header are sent as two blocks
CHeaderData header ;
unsigned char headerData [ RADIO_HEADER_LENGTH_BYTES ] ;
: : memset ( headerData , ' H ' , RADIO_HEADER_LENGTH_BYTES ) ;
header . setData ( headerData , RADIO_HEADER_LENGTH_BYTES , false ) ;
//here we only test for correct interleaving
CSlowDataEncoder encoder ;
encoder . setGPSData ( " GGGGGGGG " ) ; // 8 times G
encoder . setHeaderData ( header ) ;
for ( unsigned int i = 0U ; i < 2U ; i + + ) {
unsigned char buffer [ 6U ] ;
encoder . getInterleavedData ( buffer ) ;
encoder . getInterleavedData ( buffer + 3 ) ;
EXPECT_EQ ( buffer [ 0 ] ^ SCRAMBLER_BYTE1 , SLOW_DATA_TYPE_GPS | 0x5U ) ;
EXPECT_EQ ( buffer [ 1 ] ^ SCRAMBLER_BYTE2 , ' G ' ) ;
EXPECT_EQ ( buffer [ 2 ] ^ SCRAMBLER_BYTE3 , ' G ' ) ;
EXPECT_EQ ( buffer [ 3 ] ^ SCRAMBLER_BYTE1 , ' G ' ) ;
EXPECT_EQ ( buffer [ 4 ] ^ SCRAMBLER_BYTE2 , ' G ' ) ;
EXPECT_EQ ( buffer [ 5 ] ^ SCRAMBLER_BYTE3 , ' G ' ) ;
encoder . getInterleavedData ( buffer ) ;
encoder . getInterleavedData ( buffer + 3 ) ;
EXPECT_EQ ( buffer [ 0 ] ^ SCRAMBLER_BYTE1 , SLOW_DATA_TYPE_GPS | 0x3U ) ;
EXPECT_EQ ( buffer [ 1 ] ^ SCRAMBLER_BYTE2 , ' G ' ) ;
EXPECT_EQ ( buffer [ 2 ] ^ SCRAMBLER_BYTE3 , ' G ' ) ;
EXPECT_EQ ( buffer [ 3 ] ^ SCRAMBLER_BYTE1 , ' G ' ) ;
EXPECT_EQ ( buffer [ 4 ] ^ SCRAMBLER_BYTE2 , ' f ' ) ;
EXPECT_EQ ( buffer [ 5 ] ^ SCRAMBLER_BYTE3 , ' f ' ) ;
// all the remaining data shall be filled with 'f' until next block
for ( unsigned int j = 12 ; j < 60U ; j + = 6U ) {
encoder . getInterleavedData ( buffer ) ;
encoder . getInterleavedData ( buffer + 3 ) ;
EXPECT_EQ ( buffer [ 0 ] ^ SCRAMBLER_BYTE1 , ' f ' ) ;
EXPECT_EQ ( buffer [ 1 ] ^ SCRAMBLER_BYTE2 , ' f ' ) ;
EXPECT_EQ ( buffer [ 2 ] ^ SCRAMBLER_BYTE3 , ' f ' ) ;
EXPECT_EQ ( buffer [ 3 ] ^ SCRAMBLER_BYTE1 , ' f ' ) ;
EXPECT_EQ ( buffer [ 4 ] ^ SCRAMBLER_BYTE2 , ' f ' ) ;
EXPECT_EQ ( buffer [ 5 ] ^ SCRAMBLER_BYTE3 , ' f ' ) ;
}
encoder . getInterleavedData ( buffer ) ;
encoder . getInterleavedData ( buffer + 3 ) ;
EXPECT_EQ ( buffer [ 0 ] ^ SCRAMBLER_BYTE1 , SLOW_DATA_TYPE_HEADER | 0x5U ) ;
EXPECT_EQ ( buffer [ 1 ] ^ SCRAMBLER_BYTE2 , ' H ' ) ;
EXPECT_EQ ( buffer [ 2 ] ^ SCRAMBLER_BYTE3 , ' H ' ) ;
EXPECT_EQ ( buffer [ 3 ] ^ SCRAMBLER_BYTE1 , ' H ' ) ;
EXPECT_EQ ( buffer [ 4 ] ^ SCRAMBLER_BYTE2 , ' H ' ) ;
EXPECT_EQ ( buffer [ 5 ] ^ SCRAMBLER_BYTE3 , ' H ' ) ;
encoder . getInterleavedData ( buffer ) ;
encoder . getInterleavedData ( buffer + 3 ) ;
EXPECT_EQ ( buffer [ 0 ] ^ SCRAMBLER_BYTE1 , SLOW_DATA_TYPE_HEADER | 0x5U ) ;
EXPECT_EQ ( buffer [ 1 ] ^ SCRAMBLER_BYTE2 , ' H ' ) ;
EXPECT_EQ ( buffer [ 2 ] ^ SCRAMBLER_BYTE3 , ' H ' ) ;
EXPECT_EQ ( buffer [ 3 ] ^ SCRAMBLER_BYTE1 , ' H ' ) ;
EXPECT_EQ ( buffer [ 4 ] ^ SCRAMBLER_BYTE2 , ' H ' ) ;
EXPECT_EQ ( buffer [ 5 ] ^ SCRAMBLER_BYTE3 , ' H ' ) ;
encoder . getInterleavedData ( buffer ) ;
encoder . getInterleavedData ( buffer + 3 ) ;
EXPECT_EQ ( buffer [ 0 ] ^ SCRAMBLER_BYTE1 , SLOW_DATA_TYPE_HEADER | 0x5U ) ;
EXPECT_EQ ( buffer [ 1 ] ^ SCRAMBLER_BYTE2 , ' H ' ) ;
EXPECT_EQ ( buffer [ 2 ] ^ SCRAMBLER_BYTE3 , ' H ' ) ;
EXPECT_EQ ( buffer [ 3 ] ^ SCRAMBLER_BYTE1 , ' H ' ) ;
EXPECT_EQ ( buffer [ 4 ] ^ SCRAMBLER_BYTE2 , ' H ' ) ;
EXPECT_EQ ( buffer [ 5 ] ^ SCRAMBLER_BYTE3 , ' H ' ) ;
encoder . getInterleavedData ( buffer ) ;
encoder . getInterleavedData ( buffer + 3 ) ;
EXPECT_EQ ( buffer [ 0 ] ^ SCRAMBLER_BYTE1 , SLOW_DATA_TYPE_HEADER | 0x5U ) ;
EXPECT_EQ ( buffer [ 1 ] ^ SCRAMBLER_BYTE2 , ' H ' ) ;
EXPECT_EQ ( buffer [ 2 ] ^ SCRAMBLER_BYTE3 , ' H ' ) ;
EXPECT_EQ ( buffer [ 3 ] ^ SCRAMBLER_BYTE1 , ' H ' ) ;
EXPECT_EQ ( buffer [ 4 ] ^ SCRAMBLER_BYTE2 , ' H ' ) ;
EXPECT_EQ ( buffer [ 5 ] ^ SCRAMBLER_BYTE3 , ' H ' ) ;
encoder . getInterleavedData ( buffer ) ;
encoder . getInterleavedData ( buffer + 3 ) ;
EXPECT_EQ ( buffer [ 0 ] ^ SCRAMBLER_BYTE1 , SLOW_DATA_TYPE_HEADER | 0x5U ) ;
EXPECT_EQ ( buffer [ 1 ] ^ SCRAMBLER_BYTE2 , ' H ' ) ;
EXPECT_EQ ( buffer [ 2 ] ^ SCRAMBLER_BYTE3 , ' H ' ) ;
EXPECT_EQ ( buffer [ 3 ] ^ SCRAMBLER_BYTE1 , ' H ' ) ;
EXPECT_EQ ( buffer [ 4 ] ^ SCRAMBLER_BYTE2 , ' H ' ) ;
EXPECT_EQ ( buffer [ 5 ] ^ SCRAMBLER_BYTE3 , ' H ' ) ;
encoder . getInterleavedData ( buffer ) ;
encoder . getInterleavedData ( buffer + 3 ) ;
EXPECT_EQ ( buffer [ 0 ] ^ SCRAMBLER_BYTE1 , SLOW_DATA_TYPE_HEADER | 0x5U ) ;
EXPECT_EQ ( buffer [ 1 ] ^ SCRAMBLER_BYTE2 , ' H ' ) ;
EXPECT_EQ ( buffer [ 2 ] ^ SCRAMBLER_BYTE3 , ' H ' ) ;
EXPECT_EQ ( buffer [ 3 ] ^ SCRAMBLER_BYTE1 , ' H ' ) ;
EXPECT_EQ ( buffer [ 4 ] ^ SCRAMBLER_BYTE2 , ' H ' ) ;
EXPECT_EQ ( buffer [ 5 ] ^ SCRAMBLER_BYTE3 , ' H ' ) ;
encoder . getInterleavedData ( buffer ) ;
encoder . getInterleavedData ( buffer + 3 ) ;
EXPECT_EQ ( buffer [ 0 ] ^ SCRAMBLER_BYTE1 , SLOW_DATA_TYPE_HEADER | 0x5U ) ;
EXPECT_EQ ( buffer [ 1 ] ^ SCRAMBLER_BYTE2 , ' H ' ) ;
EXPECT_EQ ( buffer [ 2 ] ^ SCRAMBLER_BYTE3 , ' H ' ) ;
EXPECT_EQ ( buffer [ 3 ] ^ SCRAMBLER_BYTE1 , ' H ' ) ;
EXPECT_EQ ( buffer [ 4 ] ^ SCRAMBLER_BYTE2 , ' H ' ) ;
EXPECT_EQ ( buffer [ 5 ] ^ SCRAMBLER_BYTE3 , ' H ' ) ;
encoder . getInterleavedData ( buffer ) ;
encoder . getInterleavedData ( buffer + 3 ) ;
EXPECT_EQ ( buffer [ 0 ] ^ SCRAMBLER_BYTE1 , SLOW_DATA_TYPE_HEADER | 0x5U ) ;
EXPECT_EQ ( buffer [ 1 ] ^ SCRAMBLER_BYTE2 , ' H ' ) ;
EXPECT_EQ ( buffer [ 2 ] ^ SCRAMBLER_BYTE3 , ' H ' ) ;
EXPECT_EQ ( buffer [ 3 ] ^ SCRAMBLER_BYTE1 , ' H ' ) ;
EXPECT_EQ ( buffer [ 4 ] ^ SCRAMBLER_BYTE2 , ' H ' ) ;
EXPECT_NE ( buffer [ 5 ] ^ SCRAMBLER_BYTE3 , ' f ' ) ; // this is checksum byte, just make sure is is not 'f'
encoder . getInterleavedData ( buffer ) ;
encoder . getInterleavedData ( buffer + 3 ) ;
EXPECT_EQ ( buffer [ 0 ] ^ SCRAMBLER_BYTE1 , SLOW_DATA_TYPE_HEADER | 0x1U ) ;
EXPECT_NE ( buffer [ 1 ] ^ SCRAMBLER_BYTE2 , ' f ' ) ; // this is checksum byte, just make sure is is not 'f'
EXPECT_EQ ( buffer [ 2 ] ^ SCRAMBLER_BYTE3 , ' f ' ) ;
EXPECT_EQ ( buffer [ 3 ] ^ SCRAMBLER_BYTE1 , ' f ' ) ;
EXPECT_EQ ( buffer [ 4 ] ^ SCRAMBLER_BYTE2 , ' f ' ) ;
EXPECT_EQ ( buffer [ 5 ] ^ SCRAMBLER_BYTE3 , ' f ' ) ;
//remaining data is only 'f'
encoder . getInterleavedData ( buffer ) ;
encoder . getInterleavedData ( buffer + 3 ) ;
EXPECT_EQ ( buffer [ 0 ] ^ SCRAMBLER_BYTE1 , ' f ' ) ;
EXPECT_EQ ( buffer [ 1 ] ^ SCRAMBLER_BYTE2 , ' f ' ) ;
EXPECT_EQ ( buffer [ 2 ] ^ SCRAMBLER_BYTE3 , ' f ' ) ;
EXPECT_EQ ( buffer [ 3 ] ^ SCRAMBLER_BYTE1 , ' f ' ) ;
EXPECT_EQ ( buffer [ 4 ] ^ SCRAMBLER_BYTE2 , ' f ' ) ;
EXPECT_EQ ( buffer [ 5 ] ^ SCRAMBLER_BYTE3 , ' f ' ) ;
}
}
TEST_F ( SlowDataEncoder_interleavedData , textAndHeaderData )
{
// Header is never interleaved, text and header are sent as two blocks
CHeaderData header ;
unsigned char headerData [ RADIO_HEADER_LENGTH_BYTES ] ;
: : memset ( headerData , ' H ' , RADIO_HEADER_LENGTH_BYTES ) ;
header . setData ( headerData , RADIO_HEADER_LENGTH_BYTES , false ) ;
//here we only test for correct interleaving
CSlowDataEncoder encoder ;
encoder . setTextData ( " TTTTTT " ) ; // 6 times T
encoder . setHeaderData ( header ) ;
auto dataLen = encoder . getInterleavedDataLength ( ) ;
EXPECT_EQ ( dataLen , 120 ) ; //2* 60
for ( unsigned int testCount = 0U ; testCount < 2U ; testCount + + ) {
unsigned char buffer [ 6U ] ;
encoder . getInterleavedData ( buffer ) ;
encoder . getInterleavedData ( buffer + 3 ) ;
EXPECT_EQ ( buffer [ 0 ] ^ SCRAMBLER_BYTE1 , SLOW_DATA_TYPE_TEXT | 0x0U ) ;
EXPECT_EQ ( buffer [ 1 ] ^ SCRAMBLER_BYTE2 , ' T ' ) ;
EXPECT_EQ ( buffer [ 2 ] ^ SCRAMBLER_BYTE3 , ' T ' ) ;
EXPECT_EQ ( buffer [ 3 ] ^ SCRAMBLER_BYTE1 , ' T ' ) ;
EXPECT_EQ ( buffer [ 4 ] ^ SCRAMBLER_BYTE2 , ' T ' ) ;
EXPECT_EQ ( buffer [ 5 ] ^ SCRAMBLER_BYTE3 , ' T ' ) ;
encoder . getInterleavedData ( buffer ) ;
encoder . getInterleavedData ( buffer + 3 ) ;
EXPECT_EQ ( buffer [ 0 ] ^ SCRAMBLER_BYTE1 , SLOW_DATA_TYPE_TEXT | 0x1U ) ;
EXPECT_EQ ( buffer [ 1 ] ^ SCRAMBLER_BYTE2 , ' T ' ) ;
EXPECT_EQ ( buffer [ 2 ] ^ SCRAMBLER_BYTE3 , ' ' ) ;
EXPECT_EQ ( buffer [ 3 ] ^ SCRAMBLER_BYTE1 , ' ' ) ;
EXPECT_EQ ( buffer [ 4 ] ^ SCRAMBLER_BYTE2 , ' ' ) ;
EXPECT_EQ ( buffer [ 5 ] ^ SCRAMBLER_BYTE3 , ' ' ) ;
encoder . getInterleavedData ( buffer ) ;
encoder . getInterleavedData ( buffer + 3 ) ;
EXPECT_EQ ( buffer [ 0 ] ^ SCRAMBLER_BYTE1 , SLOW_DATA_TYPE_TEXT | 0x2U ) ;
EXPECT_EQ ( buffer [ 1 ] ^ SCRAMBLER_BYTE2 , ' ' ) ;
EXPECT_EQ ( buffer [ 2 ] ^ SCRAMBLER_BYTE3 , ' ' ) ;
EXPECT_EQ ( buffer [ 3 ] ^ SCRAMBLER_BYTE1 , ' ' ) ;
EXPECT_EQ ( buffer [ 4 ] ^ SCRAMBLER_BYTE2 , ' ' ) ;
EXPECT_EQ ( buffer [ 5 ] ^ SCRAMBLER_BYTE3 , ' ' ) ;
encoder . getInterleavedData ( buffer ) ;
encoder . getInterleavedData ( buffer + 3 ) ;
EXPECT_EQ ( buffer [ 0 ] ^ SCRAMBLER_BYTE1 , SLOW_DATA_TYPE_TEXT | 0x3U ) ;
EXPECT_EQ ( buffer [ 1 ] ^ SCRAMBLER_BYTE2 , ' ' ) ;
EXPECT_EQ ( buffer [ 2 ] ^ SCRAMBLER_BYTE3 , ' ' ) ;
EXPECT_EQ ( buffer [ 3 ] ^ SCRAMBLER_BYTE1 , ' ' ) ;
EXPECT_EQ ( buffer [ 4 ] ^ SCRAMBLER_BYTE2 , ' ' ) ;
EXPECT_EQ ( buffer [ 5 ] ^ SCRAMBLER_BYTE3 , ' ' ) ;
// all the remaining data shall be filled with 'f' until next block
for ( unsigned int j = 24 ; j < 60U ; j + = 6U ) {
encoder . getInterleavedData ( buffer ) ;
encoder . getInterleavedData ( buffer + 3 ) ;
EXPECT_EQ ( buffer [ 0 ] ^ SCRAMBLER_BYTE1 , ' f ' ) ;
EXPECT_EQ ( buffer [ 1 ] ^ SCRAMBLER_BYTE2 , ' f ' ) ;
EXPECT_EQ ( buffer [ 2 ] ^ SCRAMBLER_BYTE3 , ' f ' ) ;
EXPECT_EQ ( buffer [ 3 ] ^ SCRAMBLER_BYTE1 , ' f ' ) ;
EXPECT_EQ ( buffer [ 4 ] ^ SCRAMBLER_BYTE2 , ' f ' ) ;
EXPECT_EQ ( buffer [ 5 ] ^ SCRAMBLER_BYTE3 , ' f ' ) ;
}
encoder . getInterleavedData ( buffer ) ;
encoder . getInterleavedData ( buffer + 3 ) ;
EXPECT_EQ ( buffer [ 0 ] ^ SCRAMBLER_BYTE1 , SLOW_DATA_TYPE_HEADER | 0x5U ) ;
EXPECT_EQ ( buffer [ 1 ] ^ SCRAMBLER_BYTE2 , ' H ' ) ;
EXPECT_EQ ( buffer [ 2 ] ^ SCRAMBLER_BYTE3 , ' H ' ) ;
EXPECT_EQ ( buffer [ 3 ] ^ SCRAMBLER_BYTE1 , ' H ' ) ;
EXPECT_EQ ( buffer [ 4 ] ^ SCRAMBLER_BYTE2 , ' H ' ) ;
EXPECT_EQ ( buffer [ 5 ] ^ SCRAMBLER_BYTE3 , ' H ' ) ;
encoder . getInterleavedData ( buffer ) ;
encoder . getInterleavedData ( buffer + 3 ) ;
EXPECT_EQ ( buffer [ 0 ] ^ SCRAMBLER_BYTE1 , SLOW_DATA_TYPE_HEADER | 0x5U ) ;
EXPECT_EQ ( buffer [ 1 ] ^ SCRAMBLER_BYTE2 , ' H ' ) ;
EXPECT_EQ ( buffer [ 2 ] ^ SCRAMBLER_BYTE3 , ' H ' ) ;
EXPECT_EQ ( buffer [ 3 ] ^ SCRAMBLER_BYTE1 , ' H ' ) ;
EXPECT_EQ ( buffer [ 4 ] ^ SCRAMBLER_BYTE2 , ' H ' ) ;
EXPECT_EQ ( buffer [ 5 ] ^ SCRAMBLER_BYTE3 , ' H ' ) ;
encoder . getInterleavedData ( buffer ) ;
encoder . getInterleavedData ( buffer + 3 ) ;
EXPECT_EQ ( buffer [ 0 ] ^ SCRAMBLER_BYTE1 , SLOW_DATA_TYPE_HEADER | 0x5U ) ;
EXPECT_EQ ( buffer [ 1 ] ^ SCRAMBLER_BYTE2 , ' H ' ) ;
EXPECT_EQ ( buffer [ 2 ] ^ SCRAMBLER_BYTE3 , ' H ' ) ;
EXPECT_EQ ( buffer [ 3 ] ^ SCRAMBLER_BYTE1 , ' H ' ) ;
EXPECT_EQ ( buffer [ 4 ] ^ SCRAMBLER_BYTE2 , ' H ' ) ;
EXPECT_EQ ( buffer [ 5 ] ^ SCRAMBLER_BYTE3 , ' H ' ) ;
encoder . getInterleavedData ( buffer ) ;
encoder . getInterleavedData ( buffer + 3 ) ;
EXPECT_EQ ( buffer [ 0 ] ^ SCRAMBLER_BYTE1 , SLOW_DATA_TYPE_HEADER | 0x5U ) ;
EXPECT_EQ ( buffer [ 1 ] ^ SCRAMBLER_BYTE2 , ' H ' ) ;
EXPECT_EQ ( buffer [ 2 ] ^ SCRAMBLER_BYTE3 , ' H ' ) ;
EXPECT_EQ ( buffer [ 3 ] ^ SCRAMBLER_BYTE1 , ' H ' ) ;
EXPECT_EQ ( buffer [ 4 ] ^ SCRAMBLER_BYTE2 , ' H ' ) ;
EXPECT_EQ ( buffer [ 5 ] ^ SCRAMBLER_BYTE3 , ' H ' ) ;
encoder . getInterleavedData ( buffer ) ;
encoder . getInterleavedData ( buffer + 3 ) ;
EXPECT_EQ ( buffer [ 0 ] ^ SCRAMBLER_BYTE1 , SLOW_DATA_TYPE_HEADER | 0x5U ) ;
EXPECT_EQ ( buffer [ 1 ] ^ SCRAMBLER_BYTE2 , ' H ' ) ;
EXPECT_EQ ( buffer [ 2 ] ^ SCRAMBLER_BYTE3 , ' H ' ) ;
EXPECT_EQ ( buffer [ 3 ] ^ SCRAMBLER_BYTE1 , ' H ' ) ;
EXPECT_EQ ( buffer [ 4 ] ^ SCRAMBLER_BYTE2 , ' H ' ) ;
EXPECT_EQ ( buffer [ 5 ] ^ SCRAMBLER_BYTE3 , ' H ' ) ;
encoder . getInterleavedData ( buffer ) ;
encoder . getInterleavedData ( buffer + 3 ) ;
EXPECT_EQ ( buffer [ 0 ] ^ SCRAMBLER_BYTE1 , SLOW_DATA_TYPE_HEADER | 0x5U ) ;
EXPECT_EQ ( buffer [ 1 ] ^ SCRAMBLER_BYTE2 , ' H ' ) ;
EXPECT_EQ ( buffer [ 2 ] ^ SCRAMBLER_BYTE3 , ' H ' ) ;
EXPECT_EQ ( buffer [ 3 ] ^ SCRAMBLER_BYTE1 , ' H ' ) ;
EXPECT_EQ ( buffer [ 4 ] ^ SCRAMBLER_BYTE2 , ' H ' ) ;
EXPECT_EQ ( buffer [ 5 ] ^ SCRAMBLER_BYTE3 , ' H ' ) ;
encoder . getInterleavedData ( buffer ) ;
encoder . getInterleavedData ( buffer + 3 ) ;
EXPECT_EQ ( buffer [ 0 ] ^ SCRAMBLER_BYTE1 , SLOW_DATA_TYPE_HEADER | 0x5U ) ;
EXPECT_EQ ( buffer [ 1 ] ^ SCRAMBLER_BYTE2 , ' H ' ) ;
EXPECT_EQ ( buffer [ 2 ] ^ SCRAMBLER_BYTE3 , ' H ' ) ;
EXPECT_EQ ( buffer [ 3 ] ^ SCRAMBLER_BYTE1 , ' H ' ) ;
EXPECT_EQ ( buffer [ 4 ] ^ SCRAMBLER_BYTE2 , ' H ' ) ;
EXPECT_EQ ( buffer [ 5 ] ^ SCRAMBLER_BYTE3 , ' H ' ) ;
encoder . getInterleavedData ( buffer ) ;
encoder . getInterleavedData ( buffer + 3 ) ;
EXPECT_EQ ( buffer [ 0 ] ^ SCRAMBLER_BYTE1 , SLOW_DATA_TYPE_HEADER | 0x5U ) ;
EXPECT_EQ ( buffer [ 1 ] ^ SCRAMBLER_BYTE2 , ' H ' ) ;
EXPECT_EQ ( buffer [ 2 ] ^ SCRAMBLER_BYTE3 , ' H ' ) ;
EXPECT_EQ ( buffer [ 3 ] ^ SCRAMBLER_BYTE1 , ' H ' ) ;
EXPECT_EQ ( buffer [ 4 ] ^ SCRAMBLER_BYTE2 , ' H ' ) ;
EXPECT_NE ( buffer [ 5 ] ^ SCRAMBLER_BYTE3 , ' f ' ) ; // this is checksum byte, just make sure is is not 'f'
encoder . getInterleavedData ( buffer ) ;
encoder . getInterleavedData ( buffer + 3 ) ;
EXPECT_EQ ( buffer [ 0 ] ^ SCRAMBLER_BYTE1 , SLOW_DATA_TYPE_HEADER | 0x1U ) ;
EXPECT_NE ( buffer [ 1 ] ^ SCRAMBLER_BYTE2 , ' f ' ) ; // this is checksum byte, just make sure is is not 'f'
EXPECT_EQ ( buffer [ 2 ] ^ SCRAMBLER_BYTE3 , ' f ' ) ;
EXPECT_EQ ( buffer [ 3 ] ^ SCRAMBLER_BYTE1 , ' f ' ) ;
EXPECT_EQ ( buffer [ 4 ] ^ SCRAMBLER_BYTE2 , ' f ' ) ;
EXPECT_EQ ( buffer [ 5 ] ^ SCRAMBLER_BYTE3 , ' f ' ) ;
//remaining data is only 'f'
encoder . getInterleavedData ( buffer ) ;
encoder . getInterleavedData ( buffer + 3 ) ;
EXPECT_EQ ( buffer [ 0 ] ^ SCRAMBLER_BYTE1 , ' f ' ) ;
EXPECT_EQ ( buffer [ 1 ] ^ SCRAMBLER_BYTE2 , ' f ' ) ;
EXPECT_EQ ( buffer [ 2 ] ^ SCRAMBLER_BYTE3 , ' f ' ) ;
EXPECT_EQ ( buffer [ 3 ] ^ SCRAMBLER_BYTE1 , ' f ' ) ;
EXPECT_EQ ( buffer [ 4 ] ^ SCRAMBLER_BYTE2 , ' f ' ) ;
EXPECT_EQ ( buffer [ 5 ] ^ SCRAMBLER_BYTE3 , ' f ' ) ;
}
}
TEST_F ( SlowDataEncoder_interleavedData , gpsTextAndHeaderData )
{
CHeaderData header ;
unsigned char headerData [ RADIO_HEADER_LENGTH_BYTES ] ;
: : memset ( headerData , ' H ' , RADIO_HEADER_LENGTH_BYTES ) ;
header . setData ( headerData , RADIO_HEADER_LENGTH_BYTES , false ) ;
//here we only test for correct interleaving
CSlowDataEncoder encoder ;
encoder . setTextData ( " TTTTTT " ) ; // 6 times T
encoder . setGPSData ( " GGGGGGGGGGGGGGGGGGGGGG " ) ; // 22 times G
encoder . setHeaderData ( header ) ;
auto dataLen = encoder . getInterleavedDataLength ( ) ;
EXPECT_EQ ( dataLen , 120 ) ; // including data type bytes we need 54 (20 + 5 + 22 + 6) bytes, this shall be rounded up to next block size multiple, in this case 60
for ( unsigned int testCount = 0U ; testCount < 2U ; testCount + + ) {
unsigned char buffer [ 6U ] ;
encoder . getInterleavedData ( buffer ) ;
encoder . getInterleavedData ( buffer + 3 ) ;
EXPECT_EQ ( buffer [ 0 ] ^ SCRAMBLER_BYTE1 , SLOW_DATA_TYPE_TEXT | 0x0U ) ;
EXPECT_EQ ( buffer [ 1 ] ^ SCRAMBLER_BYTE2 , ' T ' ) ;
EXPECT_EQ ( buffer [ 2 ] ^ SCRAMBLER_BYTE3 , ' T ' ) ;
EXPECT_EQ ( buffer [ 3 ] ^ SCRAMBLER_BYTE1 , ' T ' ) ;
EXPECT_EQ ( buffer [ 4 ] ^ SCRAMBLER_BYTE2 , ' T ' ) ;
EXPECT_EQ ( buffer [ 5 ] ^ SCRAMBLER_BYTE3 , ' T ' ) ;
encoder . getInterleavedData ( buffer ) ;
encoder . getInterleavedData ( buffer + 3 ) ;
EXPECT_EQ ( buffer [ 0 ] ^ SCRAMBLER_BYTE1 , SLOW_DATA_TYPE_GPS | 0x5U ) ;
EXPECT_EQ ( buffer [ 1 ] ^ SCRAMBLER_BYTE2 , ' G ' ) ;
EXPECT_EQ ( buffer [ 2 ] ^ SCRAMBLER_BYTE3 , ' G ' ) ;
EXPECT_EQ ( buffer [ 3 ] ^ SCRAMBLER_BYTE1 , ' G ' ) ;
EXPECT_EQ ( buffer [ 4 ] ^ SCRAMBLER_BYTE2 , ' G ' ) ;
EXPECT_EQ ( buffer [ 5 ] ^ SCRAMBLER_BYTE3 , ' G ' ) ;
encoder . getInterleavedData ( buffer ) ;
encoder . getInterleavedData ( buffer + 3 ) ;
EXPECT_EQ ( buffer [ 0 ] ^ SCRAMBLER_BYTE1 , SLOW_DATA_TYPE_TEXT | 0x1U ) ;
EXPECT_EQ ( buffer [ 1 ] ^ SCRAMBLER_BYTE2 , ' T ' ) ;
EXPECT_EQ ( buffer [ 2 ] ^ SCRAMBLER_BYTE3 , ' ' ) ;
EXPECT_EQ ( buffer [ 3 ] ^ SCRAMBLER_BYTE1 , ' ' ) ;
EXPECT_EQ ( buffer [ 4 ] ^ SCRAMBLER_BYTE2 , ' ' ) ;
EXPECT_EQ ( buffer [ 5 ] ^ SCRAMBLER_BYTE3 , ' ' ) ;
encoder . getInterleavedData ( buffer ) ;
encoder . getInterleavedData ( buffer + 3 ) ;
EXPECT_EQ ( buffer [ 0 ] ^ SCRAMBLER_BYTE1 , SLOW_DATA_TYPE_GPS | 0x5U ) ;
EXPECT_EQ ( buffer [ 1 ] ^ SCRAMBLER_BYTE2 , ' G ' ) ;
EXPECT_EQ ( buffer [ 2 ] ^ SCRAMBLER_BYTE3 , ' G ' ) ;
EXPECT_EQ ( buffer [ 3 ] ^ SCRAMBLER_BYTE1 , ' G ' ) ;
EXPECT_EQ ( buffer [ 4 ] ^ SCRAMBLER_BYTE2 , ' G ' ) ;
EXPECT_EQ ( buffer [ 5 ] ^ SCRAMBLER_BYTE3 , ' G ' ) ;
encoder . getInterleavedData ( buffer ) ;
encoder . getInterleavedData ( buffer + 3 ) ;
EXPECT_EQ ( buffer [ 0 ] ^ SCRAMBLER_BYTE1 , SLOW_DATA_TYPE_TEXT | 0x2U ) ;
EXPECT_EQ ( buffer [ 1 ] ^ SCRAMBLER_BYTE2 , ' ' ) ;
EXPECT_EQ ( buffer [ 2 ] ^ SCRAMBLER_BYTE3 , ' ' ) ;
EXPECT_EQ ( buffer [ 3 ] ^ SCRAMBLER_BYTE1 , ' ' ) ;
EXPECT_EQ ( buffer [ 4 ] ^ SCRAMBLER_BYTE2 , ' ' ) ;
EXPECT_EQ ( buffer [ 5 ] ^ SCRAMBLER_BYTE3 , ' ' ) ;
encoder . getInterleavedData ( buffer ) ;
encoder . getInterleavedData ( buffer + 3 ) ;
EXPECT_EQ ( buffer [ 0 ] ^ SCRAMBLER_BYTE1 , SLOW_DATA_TYPE_GPS | 0x5U ) ;
EXPECT_EQ ( buffer [ 1 ] ^ SCRAMBLER_BYTE2 , ' G ' ) ;
EXPECT_EQ ( buffer [ 2 ] ^ SCRAMBLER_BYTE3 , ' G ' ) ;
EXPECT_EQ ( buffer [ 3 ] ^ SCRAMBLER_BYTE1 , ' G ' ) ;
EXPECT_EQ ( buffer [ 4 ] ^ SCRAMBLER_BYTE2 , ' G ' ) ;
EXPECT_EQ ( buffer [ 5 ] ^ SCRAMBLER_BYTE3 , ' G ' ) ;
encoder . getInterleavedData ( buffer ) ;
encoder . getInterleavedData ( buffer + 3 ) ;
EXPECT_EQ ( buffer [ 0 ] ^ SCRAMBLER_BYTE1 , SLOW_DATA_TYPE_TEXT | 0x3U ) ;
EXPECT_EQ ( buffer [ 1 ] ^ SCRAMBLER_BYTE2 , ' ' ) ;
EXPECT_EQ ( buffer [ 2 ] ^ SCRAMBLER_BYTE3 , ' ' ) ;
EXPECT_EQ ( buffer [ 3 ] ^ SCRAMBLER_BYTE1 , ' ' ) ;
EXPECT_EQ ( buffer [ 4 ] ^ SCRAMBLER_BYTE2 , ' ' ) ;
EXPECT_EQ ( buffer [ 5 ] ^ SCRAMBLER_BYTE3 , ' ' ) ;
encoder . getInterleavedData ( buffer ) ;
encoder . getInterleavedData ( buffer + 3 ) ;
EXPECT_EQ ( buffer [ 0 ] ^ SCRAMBLER_BYTE1 , SLOW_DATA_TYPE_GPS | 0x5U ) ;
EXPECT_EQ ( buffer [ 1 ] ^ SCRAMBLER_BYTE2 , ' G ' ) ;
EXPECT_EQ ( buffer [ 2 ] ^ SCRAMBLER_BYTE3 , ' G ' ) ;
EXPECT_EQ ( buffer [ 3 ] ^ SCRAMBLER_BYTE1 , ' G ' ) ;
EXPECT_EQ ( buffer [ 4 ] ^ SCRAMBLER_BYTE2 , ' G ' ) ;
EXPECT_EQ ( buffer [ 5 ] ^ SCRAMBLER_BYTE3 , ' G ' ) ;
encoder . getInterleavedData ( buffer ) ;
encoder . getInterleavedData ( buffer + 3 ) ;
EXPECT_EQ ( buffer [ 0 ] ^ SCRAMBLER_BYTE1 , SLOW_DATA_TYPE_GPS | 0x2U ) ;
EXPECT_EQ ( buffer [ 1 ] ^ SCRAMBLER_BYTE2 , ' G ' ) ;
EXPECT_EQ ( buffer [ 2 ] ^ SCRAMBLER_BYTE3 , ' G ' ) ;
EXPECT_EQ ( buffer [ 3 ] ^ SCRAMBLER_BYTE1 , ' f ' ) ;
EXPECT_EQ ( buffer [ 4 ] ^ SCRAMBLER_BYTE2 , ' f ' ) ;
EXPECT_EQ ( buffer [ 5 ] ^ SCRAMBLER_BYTE3 , ' f ' ) ;
// header is not interleaved, attached as one contiguous block, but it only starts at the nex block
encoder . getInterleavedData ( buffer ) ;
encoder . getInterleavedData ( buffer + 3 ) ;
EXPECT_EQ ( buffer [ 0 ] ^ SCRAMBLER_BYTE1 , ' f ' ) ;
EXPECT_EQ ( buffer [ 1 ] ^ SCRAMBLER_BYTE2 , ' f ' ) ;
EXPECT_EQ ( buffer [ 2 ] ^ SCRAMBLER_BYTE3 , ' f ' ) ;
EXPECT_EQ ( buffer [ 3 ] ^ SCRAMBLER_BYTE1 , ' f ' ) ;
EXPECT_EQ ( buffer [ 4 ] ^ SCRAMBLER_BYTE2 , ' f ' ) ;
EXPECT_EQ ( buffer [ 5 ] ^ SCRAMBLER_BYTE3 , ' f ' ) ;
encoder . getInterleavedData ( buffer ) ;
encoder . getInterleavedData ( buffer + 3 ) ;
EXPECT_EQ ( buffer [ 0 ] ^ SCRAMBLER_BYTE1 , SLOW_DATA_TYPE_HEADER | 0x5U ) ;
EXPECT_EQ ( buffer [ 1 ] ^ SCRAMBLER_BYTE2 , ' H ' ) ;
EXPECT_EQ ( buffer [ 2 ] ^ SCRAMBLER_BYTE3 , ' H ' ) ;
EXPECT_EQ ( buffer [ 3 ] ^ SCRAMBLER_BYTE1 , ' H ' ) ;
EXPECT_EQ ( buffer [ 4 ] ^ SCRAMBLER_BYTE2 , ' H ' ) ;
EXPECT_EQ ( buffer [ 5 ] ^ SCRAMBLER_BYTE3 , ' H ' ) ;
encoder . getInterleavedData ( buffer ) ;
encoder . getInterleavedData ( buffer + 3 ) ;
EXPECT_EQ ( buffer [ 0 ] ^ SCRAMBLER_BYTE1 , SLOW_DATA_TYPE_HEADER | 0x5U ) ;
EXPECT_EQ ( buffer [ 1 ] ^ SCRAMBLER_BYTE2 , ' H ' ) ;
EXPECT_EQ ( buffer [ 2 ] ^ SCRAMBLER_BYTE3 , ' H ' ) ;
EXPECT_EQ ( buffer [ 3 ] ^ SCRAMBLER_BYTE1 , ' H ' ) ;
EXPECT_EQ ( buffer [ 4 ] ^ SCRAMBLER_BYTE2 , ' H ' ) ;
EXPECT_EQ ( buffer [ 5 ] ^ SCRAMBLER_BYTE3 , ' H ' ) ;
encoder . getInterleavedData ( buffer ) ;
encoder . getInterleavedData ( buffer + 3 ) ;
EXPECT_EQ ( buffer [ 0 ] ^ SCRAMBLER_BYTE1 , SLOW_DATA_TYPE_HEADER | 0x5U ) ;
EXPECT_EQ ( buffer [ 1 ] ^ SCRAMBLER_BYTE2 , ' H ' ) ;
EXPECT_EQ ( buffer [ 2 ] ^ SCRAMBLER_BYTE3 , ' H ' ) ;
EXPECT_EQ ( buffer [ 3 ] ^ SCRAMBLER_BYTE1 , ' H ' ) ;
EXPECT_EQ ( buffer [ 4 ] ^ SCRAMBLER_BYTE2 , ' H ' ) ;
EXPECT_EQ ( buffer [ 5 ] ^ SCRAMBLER_BYTE3 , ' H ' ) ;
encoder . getInterleavedData ( buffer ) ;
encoder . getInterleavedData ( buffer + 3 ) ;
EXPECT_EQ ( buffer [ 0 ] ^ SCRAMBLER_BYTE1 , SLOW_DATA_TYPE_HEADER | 0x5U ) ;
EXPECT_EQ ( buffer [ 1 ] ^ SCRAMBLER_BYTE2 , ' H ' ) ;
EXPECT_EQ ( buffer [ 2 ] ^ SCRAMBLER_BYTE3 , ' H ' ) ;
EXPECT_EQ ( buffer [ 3 ] ^ SCRAMBLER_BYTE1 , ' H ' ) ;
EXPECT_EQ ( buffer [ 4 ] ^ SCRAMBLER_BYTE2 , ' H ' ) ;
EXPECT_EQ ( buffer [ 5 ] ^ SCRAMBLER_BYTE3 , ' H ' ) ;
encoder . getInterleavedData ( buffer ) ;
encoder . getInterleavedData ( buffer + 3 ) ;
EXPECT_EQ ( buffer [ 0 ] ^ SCRAMBLER_BYTE1 , SLOW_DATA_TYPE_HEADER | 0x5U ) ;
EXPECT_EQ ( buffer [ 1 ] ^ SCRAMBLER_BYTE2 , ' H ' ) ;
EXPECT_EQ ( buffer [ 2 ] ^ SCRAMBLER_BYTE3 , ' H ' ) ;
EXPECT_EQ ( buffer [ 3 ] ^ SCRAMBLER_BYTE1 , ' H ' ) ;
EXPECT_EQ ( buffer [ 4 ] ^ SCRAMBLER_BYTE2 , ' H ' ) ;
EXPECT_EQ ( buffer [ 5 ] ^ SCRAMBLER_BYTE3 , ' H ' ) ;
encoder . getInterleavedData ( buffer ) ;
encoder . getInterleavedData ( buffer + 3 ) ;
EXPECT_EQ ( buffer [ 0 ] ^ SCRAMBLER_BYTE1 , SLOW_DATA_TYPE_HEADER | 0x5U ) ;
EXPECT_EQ ( buffer [ 1 ] ^ SCRAMBLER_BYTE2 , ' H ' ) ;
EXPECT_EQ ( buffer [ 2 ] ^ SCRAMBLER_BYTE3 , ' H ' ) ;
EXPECT_EQ ( buffer [ 3 ] ^ SCRAMBLER_BYTE1 , ' H ' ) ;
EXPECT_EQ ( buffer [ 4 ] ^ SCRAMBLER_BYTE2 , ' H ' ) ;
EXPECT_EQ ( buffer [ 5 ] ^ SCRAMBLER_BYTE3 , ' H ' ) ;
encoder . getInterleavedData ( buffer ) ;
encoder . getInterleavedData ( buffer + 3 ) ;
EXPECT_EQ ( buffer [ 0 ] ^ SCRAMBLER_BYTE1 , SLOW_DATA_TYPE_HEADER | 0x5U ) ;
EXPECT_EQ ( buffer [ 1 ] ^ SCRAMBLER_BYTE2 , ' H ' ) ;
EXPECT_EQ ( buffer [ 2 ] ^ SCRAMBLER_BYTE3 , ' H ' ) ;
EXPECT_EQ ( buffer [ 3 ] ^ SCRAMBLER_BYTE1 , ' H ' ) ;
EXPECT_EQ ( buffer [ 4 ] ^ SCRAMBLER_BYTE2 , ' H ' ) ;
EXPECT_EQ ( buffer [ 5 ] ^ SCRAMBLER_BYTE3 , ' H ' ) ;
encoder . getInterleavedData ( buffer ) ;
encoder . getInterleavedData ( buffer + 3 ) ;
EXPECT_EQ ( buffer [ 0 ] ^ SCRAMBLER_BYTE1 , SLOW_DATA_TYPE_HEADER | 0x5U ) ;
EXPECT_EQ ( buffer [ 1 ] ^ SCRAMBLER_BYTE2 , ' H ' ) ;
EXPECT_EQ ( buffer [ 2 ] ^ SCRAMBLER_BYTE3 , ' H ' ) ;
EXPECT_EQ ( buffer [ 3 ] ^ SCRAMBLER_BYTE1 , ' H ' ) ;
EXPECT_EQ ( buffer [ 4 ] ^ SCRAMBLER_BYTE2 , ' H ' ) ;
EXPECT_NE ( buffer [ 5 ] ^ SCRAMBLER_BYTE3 , ' f ' ) ; // this is checksum byte, just make sure is is not 'f'
encoder . getInterleavedData ( buffer ) ;
encoder . getInterleavedData ( buffer + 3 ) ;
EXPECT_EQ ( buffer [ 0 ] ^ SCRAMBLER_BYTE1 , SLOW_DATA_TYPE_HEADER | 0x1U ) ;
EXPECT_NE ( buffer [ 1 ] ^ SCRAMBLER_BYTE2 , ' f ' ) ; // this is checksum byte, just make sure is is not 'f'
EXPECT_EQ ( buffer [ 2 ] ^ SCRAMBLER_BYTE3 , ' f ' ) ;
EXPECT_EQ ( buffer [ 3 ] ^ SCRAMBLER_BYTE1 , ' f ' ) ;
EXPECT_EQ ( buffer [ 4 ] ^ SCRAMBLER_BYTE2 , ' f ' ) ;
EXPECT_EQ ( buffer [ 5 ] ^ SCRAMBLER_BYTE3 , ' f ' ) ;
//remaining data is only 'f'
encoder . getInterleavedData ( buffer ) ;
encoder . getInterleavedData ( buffer + 3 ) ;
EXPECT_EQ ( buffer [ 0 ] ^ SCRAMBLER_BYTE1 , ' f ' ) ;
EXPECT_EQ ( buffer [ 1 ] ^ SCRAMBLER_BYTE2 , ' f ' ) ;
EXPECT_EQ ( buffer [ 2 ] ^ SCRAMBLER_BYTE3 , ' f ' ) ;
EXPECT_EQ ( buffer [ 3 ] ^ SCRAMBLER_BYTE1 , ' f ' ) ;
EXPECT_EQ ( buffer [ 4 ] ^ SCRAMBLER_BYTE2 , ' f ' ) ;
EXPECT_EQ ( buffer [ 5 ] ^ SCRAMBLER_BYTE3 , ' f ' ) ;
}
}
TEST_F ( SlowDataEncoder_interleavedData , gpsAndTextData )
{
//here we only test for correct interleaving
@ -139,6 +644,9 @@ namespace SlowDataEncoderTests
{
CSlowDataEncoder encoder ;
encoder . setGPSData ( " ABCDEFGHIJKLMN " ) ;
auto dataLen = encoder . getInterleavedDataLength ( ) ;
EXPECT_EQ ( dataLen , 60 ) ;
for ( unsigned int testCount = 0U ; testCount < 2U ; testCount + + ) {
unsigned char buffer [ 6U ] ;
@ -188,6 +696,9 @@ namespace SlowDataEncoderTests
{
CSlowDataEncoder encoder ;
encoder . setTextData ( " ABCDEFG " ) ;
auto dataLen = encoder . getInterleavedDataLength ( ) ;
EXPECT_EQ ( dataLen , 60 ) ;
for ( unsigned int testCount = 0U ; testCount < 2U ; testCount + + ) {
unsigned char buffer [ 6U ] ;