id: blocks_complex_to_interleaved_short
label: Complex To IShort
flags: [ python, cpp ]

parameters:
-   id: scale_factor
    label: Scale Factor
    dtype: float
    default: '1.0'
-   id: vector_output
    label: Vector Output
    dtype: enum
    default: 'False'
    options: ['False', 'True']
    option_labels: ['No', 'Yes']
    option_attributes:
        vlen: [1, 2]

inputs:
-   domain: stream
    dtype: complex

outputs:
-   domain: stream
    dtype: short
    vlen: ${ vector_output.vlen }

templates:
    imports: from gnuradio import blocks
    make: blocks.complex_to_interleaved_short(${vector_output},${scale_factor})
    callbacks:
    - set_scale_factor(${scale_factor})

cpp_templates:
    includes: ['#include <gnuradio/blocks/complex_to_interleaved_short.h>']
    declarations: 'blocks::complex_to_interleaved_short::sptr ${id};'
    make: 'this->${id} = blocks::complex_to_interleaved_short::make(${vector_output});'
    callbacks:
    - set_scale_factor(${scale_factor})

documentation: |-
    This block converts a complex sample to interleaved IQ 16-bit values.  
    The default scale factor is 1.0 for backward compatibility, however if 
    the outputs should be signed voltage style, some care needs to be taken 
    with the scale factor.  For a 12-bit output (-2047 to 2047), the 
    scale factor should be 2047.0. For a full 16-bit output, the 
    scale factor should be 32767.0.
    
    Also note that this block can inherently cause a loss of precision as it
    maps the scaled inputs to integer outputs using an lrintf function.  So
    if you overlay a complex-to-ishort into a ishort-to-complex and overlay it
    on the original signal, you can notice variation due to the integer
    rounding.

file_format: 1
