diff options
-rwxr-xr-x | host/lib/transport/gen_convert_types.py | 31 |
1 files changed, 16 insertions, 15 deletions
diff --git a/host/lib/transport/gen_convert_types.py b/host/lib/transport/gen_convert_types.py index 1b6b71e00..af2bcc7cb 100755 --- a/host/lib/transport/gen_convert_types.py +++ b/host/lib/transport/gen_convert_types.py @@ -56,30 +56,29 @@ static const float floats_per_short = float(1.0/shorts_per_float); /*********************************************************************** * Single-sample converters **********************************************************************/ -template<typename outptr_type, typename inptr_type> -static UHD_INLINE outptr_type conv_ptr(inptr_type inptr){ - return reinterpret_cast<outptr_type>(inptr); -} - static UHD_INLINE item32_t sc16_to_item32(sc16_t num){ - return *conv_ptr<item32_t*>(&num); + boost::uint16_t real = boost::int16_t(num.real()); + boost::uint16_t imag = boost::int16_t(num.imag()); + return (item32_t(real) << 16) | (item32_t(imag) << 0); } static UHD_INLINE sc16_t item32_to_sc16(item32_t item){ - return *conv_ptr<sc16_t*>(&item); + return sc16_t( + boost::uint16_t(item >> 16), + boost::uint16_t(item >> 0) + ); } static UHD_INLINE item32_t fc32_to_item32(fc32_t num){ - return sc16_to_item32(sc16_t( - boost::int16_t(num.real()*shorts_per_float), - boost::int16_t(num.imag()*shorts_per_float) - )); + boost::uint16_t real = boost::int16_t(num.real()*shorts_per_float); + boost::uint16_t imag = boost::int16_t(num.imag()*shorts_per_float); + return (item32_t(real) << 16) | (item32_t(imag) << 0); } static UHD_INLINE fc32_t item32_to_fc32(item32_t item){ - sc16_t num = item32_to_sc16(item); return fc32_t( - float(num.real()*floats_per_short), - float(num.imag()*floats_per_short) + return fc32_t( + float(boost::int16_t(item >> 16)*floats_per_short), + float(boost::int16_t(item >> 0)*floats_per_short) ); } @@ -120,7 +119,7 @@ void transport::convert_io_type_to_otw_type( size_t num_samps ){ switch(get_pred(io_type, otw_type)){ - #for $pred in range(4) + #for $pred in range(2**$ph.nbits) case $pred: #set $out_type = $ph.get_dev_type($pred) #set $in_type = $ph.get_host_type($pred) @@ -167,6 +166,8 @@ class ph: sc16_p = 0b00010 fc32_p = 0b00000 + nbits = 2 #see above + @staticmethod def get_xe_macro(pred): if (pred & ph.be_p) == ph.be_p: return 'BE_MACRO' |