CCSDS 124.0-B-1 C 1.0.0
CCSDS 124.0-B-1 Lossless Compression
Loading...
Searching...
No Matches
Compression API

CCSDS Section 5.3: Packet compression. More...

Data Structures

struct  ccsds124_compressor
 Compressor state structure. More...
 

Functions

int ccsds124_compressor_init (ccsds124_compressor_t *comp, size_t F, const bitvector_t *initial_mask, uint8_t robustness, int pt_limit, int ft_limit, int rt_limit)
 Initialize compressor state.
 
void ccsds124_compressor_reset (ccsds124_compressor_t *comp)
 Reset compressor to initial state.
 
int ccsds124_compress_packet (ccsds124_compressor_t *comp, const bitvector_t *input, bitbuffer_t *output, const ccsds124_params_t *params)
 Compress a single input packet.
 
int ccsds124_compress (ccsds124_compressor_t *comp, const uint8_t *input_data, size_t input_size, uint8_t *output_buffer, size_t output_buffer_size, size_t *output_size)
 Compress entire input data stream.
 
void ccsds124_compute_robustness_window (bitvector_t *Xt, const ccsds124_compressor_t *comp, const bitvector_t *current_change)
 Compute robustness window Xₜ.
 
uint8_t ccsds124_compute_effective_robustness (const ccsds124_compressor_t *comp, const bitvector_t *current_change)
 Compute effective robustness Vₜ.
 
int ccsds124_has_positive_updates (const bitvector_t *Xt, const bitvector_t *mask)
 Check for positive mask updates (eₜ flag).
 
int ccsds124_compute_ct_flag (const ccsds124_compressor_t *comp, uint8_t Vt, int current_new_mask_flag)
 Compute cₜ flag for multiple mask updates.
 

Detailed Description

CCSDS Section 5.3: Packet compression.

High-level compression interface for processing packets.

Function Documentation

◆ ccsds124_compress()

int ccsds124_compress ( ccsds124_compressor_t comp,
const uint8_t *  input_data,
size_t  input_size,
uint8_t *  output_buffer,
size_t  output_buffer_size,
size_t *  output_size 
)

Compress entire input data stream.

High-level API that handles:

  • Splitting input into F-bit packets
  • Automatic ṗₜ/ḟₜ/ṙₜ parameter management
  • CCSDS init phase (first Rₜ+1 packets)
  • Output accumulation with byte padding
Parameters
[in,out]compCompressor state (must be initialized)
[in]input_dataRaw input byte array
[in]input_sizeInput size in bytes (multiple of F/8)
[out]output_bufferOutput buffer (caller-allocated)
[in]output_buffer_sizeSize of output buffer
[out]output_sizeActual bytes written
Returns
CCSDS124_OK on success, error code otherwise

Definition at line 518 of file compress.c.

References bitbuffer_init(), bitbuffer_to_bytes(), bitvector_from_bytes(), bitvector_init(), ccsds124_compress_packet(), ccsds124_compressor_reset(), CCSDS124_ERROR_INVALID_ARG, CCSDS124_ERROR_OVERFLOW, CCSDS124_MAX_OUTPUT_BYTES, CCSDS124_OK, ccsds124_compressor::F, ccsds124_compressor::ft_counter, ccsds124_compressor::ft_limit, ccsds124_params_t::min_robustness, ccsds124_params_t::new_mask_flag, ccsds124_compressor::pt_counter, ccsds124_compressor::pt_limit, ccsds124_compressor::robustness, ccsds124_compressor::rt_counter, ccsds124_compressor::rt_limit, ccsds124_params_t::send_mask_flag, and ccsds124_params_t::uncompressed_flag.

Referenced by do_compress().

◆ ccsds124_compress_packet()

int ccsds124_compress_packet ( ccsds124_compressor_t comp,
const bitvector_t input,
bitbuffer_t output,
const ccsds124_params_t params 
)

Compress a single input packet.

Compresses one F-bit packet according to CCSDS 124.0-B-1 Section 5.3. Updates compressor state for next packet.

Parameters
[in,out]compCompressor state (updated in place)
[in]inputInput packet Iₜ (must be length F)
[out]outputCompressed output buffer
[in]paramsCompression parameters (NULL = use automatic)
Returns
CCSDS124_OK on success, error code otherwise

Definition at line 330 of file compress.c.

References bitbuffer_append_bit(), bitbuffer_append_bitvector(), bitbuffer_clear(), bitvector_copy(), bitvector_hamming_weight(), bitvector_left_shift(), bitvector_not(), bitvector_or(), bitvector_xor(), ccsds124_compressor::build, ccsds124_bit_extract(), ccsds124_bit_extract_forward(), ccsds124_compute_change(), ccsds124_compute_ct_flag(), ccsds124_compute_effective_robustness(), ccsds124_compute_robustness_window(), ccsds124_count_encode(), CCSDS124_ERROR_INVALID_ARG, ccsds124_has_positive_updates(), CCSDS124_MAX_HISTORY, CCSDS124_MAX_VT_HISTORY, CCSDS124_OK, ccsds124_rle_encode(), ccsds124_update_build(), ccsds124_update_mask(), ccsds124_compressor::change_history, ccsds124_compressor::F, ccsds124_compressor::flag_history_index, get_default_params(), ccsds124_compressor::history_index, bitvector::length, ccsds124_compressor::mask, ccsds124_params_t::new_mask_flag, ccsds124_compressor::new_mask_flag_history, ccsds124_compressor::prev_input, ccsds124_compressor::prev_mask, ccsds124_params_t::send_mask_flag, ccsds124_compressor::t, ccsds124_params_t::uncompressed_flag, ccsds124_compressor::work_change, ccsds124_compressor::work_diff, ccsds124_compressor::work_inverted, ccsds124_compressor::work_prev_build, ccsds124_compressor::work_shifted, and ccsds124_compressor::work_Xt.

Referenced by ccsds124_compress().

◆ ccsds124_compressor_init()

int ccsds124_compressor_init ( ccsds124_compressor_t comp,
size_t  F,
const bitvector_t initial_mask,
uint8_t  robustness,
int  pt_limit,
int  ft_limit,
int  rt_limit 
)

Initialize compressor state.

Sets up the compressor for a new compression session. Use pt_limit/ft_limit/rt_limit > 0 for automatic parameter management, or 0 to control parameters manually via ccsds124_params_t.

Parameters
[out]compCompressor to initialize (caller-allocated)
[in]FInput vector length in bits
[in]initial_maskM₀ initial mask (NULL = all zeros)
[in]robustnessRₜ base robustness level (0-7)
[in]pt_limitNew mask period (0 = manual control)
[in]ft_limitSend mask period (0 = manual control)
[in]rt_limitUncompressed period (0 = manual control)
Returns
CCSDS124_OK on success, error code otherwise

Definition at line 36 of file compress.c.

References bitvector_copy(), bitvector_init(), bitvector_zero(), ccsds124_compressor::build, ccsds124_compressor_reset(), CCSDS124_ERROR_INVALID_ARG, CCSDS124_MAX_HISTORY, CCSDS124_MAX_PACKET_LENGTH, CCSDS124_MAX_ROBUSTNESS, CCSDS124_MAX_VT_HISTORY, CCSDS124_OK, ccsds124_compressor::change_history, ccsds124_compressor::F, ccsds124_compressor::flag_history_index, ccsds124_compressor::ft_limit, ccsds124_compressor::initial_mask, ccsds124_compressor::mask, ccsds124_compressor::new_mask_flag_history, ccsds124_compressor::prev_input, ccsds124_compressor::prev_mask, ccsds124_compressor::pt_limit, ccsds124_compressor::robustness, ccsds124_compressor::rt_limit, ccsds124_compressor::work_change, ccsds124_compressor::work_diff, ccsds124_compressor::work_inverted, ccsds124_compressor::work_prev_build, ccsds124_compressor::work_shifted, and ccsds124_compressor::work_Xt.

Referenced by do_compress().

◆ ccsds124_compressor_reset()

◆ ccsds124_compute_ct_flag()

int ccsds124_compute_ct_flag ( const ccsds124_compressor_t comp,
uint8_t  Vt,
int  current_new_mask_flag 
)

Compute cₜ flag for multiple mask updates.

Returns 1 if ṗₜ was set 2+ times in the last Vₜ iterations, indicating the kₜ component is needed in output.

Parameters
[in]compCompressor with flag history
[in]VtEffective robustness level
[in]current_new_mask_flagCurrent packet's ṗₜ value
Returns
1 if multiple updates, 0 otherwise

Definition at line 282 of file compress.c.

References CCSDS124_MAX_VT_HISTORY, ccsds124_compressor::flag_history_index, ccsds124_compressor::new_mask_flag_history, and ccsds124_compressor::t.

Referenced by ccsds124_compress_packet().

◆ ccsds124_compute_effective_robustness()

uint8_t ccsds124_compute_effective_robustness ( const ccsds124_compressor_t comp,
const bitvector_t current_change 
)

Compute effective robustness Vₜ.

Calculates Vₜ = Rₜ + Cₜ where Cₜ counts consecutive iterations without mask changes.

Parameters
[in]compCompressor with change history
[in]current_changeCurrent change vector Dₜ
Returns
Effective robustness Vₜ (0-15)

Definition at line 210 of file compress.c.

References bitvector_hamming_weight(), CCSDS124_MAX_HISTORY, ccsds124_compressor::change_history, ccsds124_compressor::history_index, ccsds124_compressor::robustness, and ccsds124_compressor::t.

Referenced by ccsds124_compress_packet().

◆ ccsds124_compute_robustness_window()

void ccsds124_compute_robustness_window ( bitvector_t Xt,
const ccsds124_compressor_t comp,
const bitvector_t current_change 
)

Compute robustness window Xₜ.

Computes the OR of recent change vectors for robustness encoding: Xₜ = <(Dₜ₋ᴿₜ OR ... OR Dₜ)> where denotes bit reversal.

Parameters
[out]XtRobustness window (reversed for RLE)
[in]compCompressor with change history
[in]current_changeCurrent change vector Dₜ

Definition at line 173 of file compress.c.

References bitvector_copy(), CCSDS124_MAX_HISTORY, ccsds124_compressor::change_history, bitvector::data, ccsds124_compressor::F, ccsds124_compressor::history_index, bitvector::length, bitvector::num_words, ccsds124_compressor::robustness, and ccsds124_compressor::t.

Referenced by ccsds124_compress_packet().

◆ ccsds124_has_positive_updates()

int ccsds124_has_positive_updates ( const bitvector_t Xt,
const bitvector_t mask 
)

Check for positive mask updates (eₜ flag).

Determines if any changed bits in Xₜ are predictable (have mask bit = 0), indicating positive updates.

Parameters
[in]XtRobustness window (reversed)
[in]maskCurrent mask Mₜ
Returns
1 if positive updates exist, 0 otherwise

Definition at line 254 of file compress.c.

References bitvector::data, and bitvector::num_words.

Referenced by ccsds124_compress_packet().