Changeset 5532

Show
Ignore:
Timestamp:
10/26/07 16:07:17 (6 years ago)
Author:
jgaeddert
Message:

PACKET_RS_512 can now create/extract packets of variable length input data (up to 512); output is still always 1024

Location:
experimental/components/Packetizer/trunk/Packetizer-metadata
Files:
3 modified

Legend:

Unmodified
Added
Removed
  • experimental/components/Packetizer/trunk/Packetizer-metadata/src/PacketizerDSP.cpp

    r5520 r5532  
    189189        packet_subheader_length = 21; 
    190190        packet_data_length = 400; 
     191        packet_data_length_trunc = 400; 
    191192        packet_data_length_encoded = 400; 
    192193        break; 
     
    196197        packet_subheader_length = 213; 
    197198        packet_data_length = 512; 
     199        packet_data_length_trunc = 512; 
    198200        packet_data_length_encoded = 720; 
    199201        fec_inner = RS_4_15_11; 
     
    221223        packet_subheader_length = 21; 
    222224        packet_data_length = 400; 
     225        packet_data_length_trunc = 400; 
    223226        packet_data_length_encoded = 400; 
    224227        break; 
     
    227230        packet_subheader_length = 213; 
    228231        packet_data_length = 512; 
     232        packet_data_length_trunc = 512; 
    229233        packet_data_length_encoded = 720; 
    230234        fec_inner = RS_4_15_11; 
     
    255259    unsigned int encoded_packet_length; 
    256260    unsigned int nr; 
     261 
     262    if (input_length != packet_data_length) { 
     263        packet_data_length_trunc = input_length; 
     264    } 
     265 
    257266    EncodePacketData( 
    258267        input, 
     
    414423         
    415424        op_mode = FIND_HEADER; 
     425 
     426        // truncate output appropriately 
     427        num_written = packet_data_length_trunc; 
    416428 
    417429        if ( success ) { 
     
    574586    buf1[7] = (port_id >> 0 ) & 0xFF; 
    575587 
    576     buf1[8] = (packet_data_length >> 0 ) & 0xFF; 
    577     buf1[9] = (packet_data_length >> 8 ) & 0xFF; 
     588    buf1[8] = (packet_data_length_trunc >> 0 ) & 0xFF; 
     589    buf1[9] = (packet_data_length_trunc >> 8 ) & 0xFF; 
    578590 
    579591    buf1[10] = 7; 
     
    840852    port_id |= buf2[7]; 
    841853 
    842     packet_data_length = 0; 
    843     packet_data_length |= buf2[8]; 
    844     packet_data_length |= buf2[9]; 
     854    packet_data_length_trunc = 0; 
     855    packet_data_length_trunc |= (buf2[8] << 0); 
     856    packet_data_length_trunc |= (buf2[9] << 8); 
     857 
     858    // packet_data_length_trunk is at maximum packet_data_length 
     859    packet_data_length_trunc =  
     860        (packet_data_length_trunc > packet_data_length) ?  
     861         packet_data_length : packet_data_length_trunc; 
    845862 
    846863    return true; 
     
    972989    unsigned int nw; 
    973990 
     991    // check input 
     992    if (input_length > packet_data_length) { 
     993        std::cerr << "WARNING! PacketEncoder::EncodePacketData_PACKET_RS_512() " << std::endl 
     994                  << "  => input data length (" << input_length << ") exceeds maximum (512)" << std::endl; 
     995        return false; 
     996    } 
     997 
    974998    // 1. pack data into symbols 
    975999    // 512 1-bit symbols -> 128 4-bit symbols 
    976     SigProc::repack_bytes(input, 1, 512, buf2, 4, buf_len, &nw); 
     1000    SigProc::repack_bytes(input, 1, input_length, buf2, 4, buf_len, &nw); 
     1001    // pad buffer to be 512 bits long 
     1002    for (unsigned int i=nw; i<packet_data_length; i++) 
     1003        buf2[i] = rand() & 0x01; 
    9771004 
    9781005    // 2. add crc/checksum: 16-bit checksum 
     
    10071034    // 4. unpack data: move 4-bit symbols from buf1 to 1-bit symbols in output 
    10081035    SigProc::repack_bytes(buf1, 4, nw, output, 1, output_length, &num_written); 
    1009     num_read = 512; 
     1036    num_read = input_length; 
    10101037 
    10111038    return true; 
  • experimental/components/Packetizer/trunk/Packetizer-metadata/src/PacketizerDSP.h

    r5520 r5532  
    145145 
    146146    // Application layer definitions 
    147     unsigned long app_id;       ///< port identifier 
     147    unsigned long app_id;       ///< application identifier 
    148148 
    149149  protected: 
     
    151151 
    152152    bool dynamic_packet_size; 
    153     unsigned int packet_header_length; 
    154     unsigned int packet_subheader_length; 
    155     unsigned int packet_data_length; 
    156     unsigned int packet_data_length_encoded; 
     153    unsigned int packet_header_length;          ///< num bits in packet header 
     154    unsigned int packet_subheader_length;       ///< num bits in packet subheader 
     155    unsigned int packet_data_length;            ///< num uncoded data bits in packet 
     156    unsigned int packet_data_length_trunc;      ///< num uncoded data bits in packet (truncated) 
     157    unsigned int packet_data_length_encoded;    ///< num total encoded data bits 
    157158 
    158159    // Physical layer definitions 
  • experimental/components/Packetizer/trunk/Packetizer-metadata/tests/CreateExtract_testsuite.h

    r5519 r5532  
    151151    } 
    152152 
     153    // 
     154    // Test for creating and extracting a truncated packet of type PACKET_RS_512 
     155    //  
     156    void test_CreateExtract_PACKET_RS_512_02() { 
     157        PacketEncoder p; 
     158        PacketDecoder d; 
     159 
     160        // generate truncated input buffer 
     161        unsigned char input[147]; 
     162        for (unsigned int i=0; i<147; i++) 
     163            input[i] = rand() & 0x01; 
     164 
     165        // generate packet buffer 
     166        unsigned char packet[2048]; 
     167        memset( packet, 0x01, 2048*sizeof(char) ); 
     168        unsigned int nr; 
     169        unsigned int nw; 
     170 
     171        // generate output buffer 
     172        unsigned char output[2048]; 
     173        memset( output, 0xFF, 2048*sizeof(char) ); 
     174 
     175        // Initialize properties 
     176        p.packet_id = 32768; 
     177        p.src_id = 247; 
     178        p.dst_id = 129; 
     179        p.port_id = 189; 
     180        p.app_id = 10; 
     181        p.ConfigurePacketType( PACKET_RS_512 ); 
     182 
     183        // encode packet data 
     184         
     185        p.CreatePacket( input, 147, nr, &packet[0], 2048, nw ); 
     186        TS_ASSERT_EQUALS( nr, 147 ); 
     187        TS_ASSERT_EQUALS( nw, 1024 ); 
     188 
     189        // extract and decode packet data 
     190 
     191        bool packet_extracted; 
     192        d.packet_id = 0; 
     193        d.src_id = 0; 
     194        d.dst_id = 0; 
     195        d.port_id = 0; 
     196        d.app_id = 0; 
     197        packet_extracted = d.ExtractPacket(packet, 2048, nr, output, 2048, nw); 
     198 
     199        TS_ASSERT_EQUALS( packet_extracted, true ); 
     200        TS_ASSERT_EQUALS( d.packet_id, p.packet_id ); 
     201        TS_ASSERT_EQUALS( d.src_id, p.src_id ); 
     202        TS_ASSERT_EQUALS( d.dst_id, p.dst_id ); 
     203        TS_ASSERT_EQUALS( d.port_id, p.port_id ); 
     204        TS_ASSERT_EQUALS( d.app_id, p.app_id ); 
     205        TS_ASSERT_EQUALS( nr, 1024 ); 
     206        TS_ASSERT_EQUALS( nw, 147 ); 
     207        TS_ASSERT_SAME_DATA( input, output, 147 ); 
     208 
     209    } 
     210 
    153211}; 
    154212