Skip to content
/ Yacd Public

Yet Another Ccsds Decoder : Fast TM Frame and Packet decoder in Perl

Notifications You must be signed in to change notification settings

architek/Yacd

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

39 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Build Status

This library allows decoding of CCSDS frames and packets as defined in the PSS/ECSS standards. As the underlying library (Convert::Binary::C) is written in C, performance is greatly improved compared to Ccsds framework.

On an Intel(R) Core(TM) i3 CPU M 350 @ 2.27GHz, decoding was observed at a speed of 60MB/s.

Easy Install (in Windows, simply do not put sudo)

cpan Module::Install   <------ used by Makefile.PL

perl Makefile.PL

sudo make              <------ the sudo here is required as this will install all dependencies

sudo make install

Example of use:

use Yacd::File::FrameLog qw/frames_loop/;
use Data::Dumper;
use Convert::Binary::C;

#User defined callbacks
sub pkt_tm_decode{
    my ($pkt,$raw,$rec_head)=@_;
    print Dumper($pkt);
}
sub tmfe_decode{
    my ($frame,$raw,$rec_head)=@_;
    print Dumper($frame);
}

#Load Customization of protocol
my $c = eval {
Convert::Binary::C->new(
    IntSize=>4, ShortSize=>2,
    Alignment=>1, CompoundAlignment=>1,
    ByteOrder=>'BigEndian',
    UnsignedChars=>1, UnsignedBitfields=>1,
    #OrderMembers=>1,   # requires Tie::Hash::Indexed (huge performance loss)
    ) ->parse_file('custo.h')
};

if ($@) {
    die "The structure definition was not parsed properly:\n$@";
}

#Prepare config to module. Callbacks are called for each frame or packet found
my $config={
    coderefs_packet=>[ \&main::pkt_tm_decode, ], #callbacks for packets
    coderefs_frame=>[\&main::tmfe_record],       #callbacks for frames
    idle_frames=>1,                              #also pass idle frames to callback
    idle_packets=>1,                             #also pass idle packets to callback
    c=>$c,                                       #protocol definition
    skip=>13000,                                 #skip n frames (until the next packet)
    frame_nr=>20042,                             #decode n frames (until the last packet is finished)
};

#Launch loop on logfile
read_frames($ARGV[0],$config);

About

Yet Another Ccsds Decoder : Fast TM Frame and Packet decoder in Perl

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published