Skip to content

Commit

Permalink
blocks: added gr::blocks::uchar_to_float
Browse files Browse the repository at this point in the history
  • Loading branch information
jmcorgan committed Jun 28, 2012
1 parent 9482c89 commit a3b74a2
Show file tree
Hide file tree
Showing 11 changed files with 265 additions and 0 deletions.
1 change: 1 addition & 0 deletions gr-blocks/grc/blocks_block_tree.xml
Expand Up @@ -57,5 +57,6 @@
<block>blocks_interleaved_short_to_complex</block>
<block>blocks_short_to_char</block>
<block>blocks_short_to_float</block>
<block>blocks_uchar_to_float</block>
</cat>
</cat>
20 changes: 20 additions & 0 deletions gr-blocks/grc/blocks_uchar_to_float.xml
@@ -0,0 +1,20 @@
<?xml version="1.0"?>
<!--
###################################################
##Unsigned Char to Float:
###################################################
-->
<block>
<name>UChar To Float</name>
<key>blocks_uchar_to_float</key>
<import>from gnuradio import blocks</import>
<make>blocks.uchar_to_float()</make>
<sink>
<name>in</name>
<type>byte</type>
</sink>
<source>
<name>out</name>
<type>float</type>
</source>
</block>
1 change: 1 addition & 0 deletions gr-blocks/include/blocks/CMakeLists.txt
Expand Up @@ -106,6 +106,7 @@ install(FILES
multiply_const_ff.h
short_to_char.h
short_to_float.h
uchar_to_float.h
DESTINATION ${GR_INCLUDE_DIR}/gnuradio/blocks
COMPONENT "blocks_devel"
)
49 changes: 49 additions & 0 deletions gr-blocks/include/blocks/uchar_to_float.h
@@ -0,0 +1,49 @@
/* -*- c++ -*- */
/*
* Copyright 2012 Free Software Foundation, Inc.
*
* This file is part of GNU Radio
*
* GNU Radio is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3, or (at your option)
* any later version.
*
* GNU Radio is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with GNU Radio; see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 51 Franklin Street,
* Boston, MA 02110-1301, USA.
*/

#ifndef INCLUDED_BLOCKS_UCHAR_TO_FLOAT_H
#define INCLUDED_BLOCKS_UCHAR_TO_FLOAT_H

#include <blocks/api.h>
#include <gr_sync_block.h>

namespace gr {
namespace blocks {

/*!
* \brief Convert stream of unsigned chars to a stream of floats
* \ingroup converter_blk
*/
class BLOCKS_API uchar_to_float : virtual public gr_sync_block
{
public:

// gr::blocks::uchar_to_float_ff::sptr
typedef boost::shared_ptr<uchar_to_float> sptr;

static sptr make();
};

} /* namespace blocks */
} /* namespace gr */

#endif /* INCLUDED_BLOCKS_UCHAR_TO_FLOAT_H */
2 changes: 2 additions & 0 deletions gr-blocks/lib/CMakeLists.txt
Expand Up @@ -143,6 +143,8 @@ list(APPEND gr_blocks_sources
multiply_const_ff_impl.cc
short_to_char_impl.cc
short_to_float_impl.cc
uchar_array_to_float.cc
uchar_to_float_impl.cc
)

list(APPEND blocks_libs
Expand Down
40 changes: 40 additions & 0 deletions gr-blocks/lib/uchar_array_to_float.cc
@@ -0,0 +1,40 @@
/* -*- c++ -*- */
/*
* Copyright 2005,2012 Free Software Foundation, Inc.
*
* This file is part of GNU Radio
*
* GNU Radio is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3, or (at your option)
* any later version.
*
* GNU Radio is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with GNU Radio; see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 51 Franklin Street,
* Boston, MA 02110-1301, USA.
*/

#include <uchar_array_to_float.h>

void
uchar_array_to_float (const unsigned char *in, float *out, int nsamples)
{
while (nsamples >= 4){
out[0] = in[0];
out[1] = in[1];
out[2] = in[2];
out[3] = in[3];
out += 4;
in += 4;
nsamples -= 4;
}

while (nsamples-- > 0)
*out++ = *in++;
}
34 changes: 34 additions & 0 deletions gr-blocks/lib/uchar_array_to_float.h
@@ -0,0 +1,34 @@
/* -*- c++ -*- */
/*
* Copyright 2005, 2012 Free Software Foundation, Inc.
*
* This file is part of GNU Radio
*
* GNU Radio is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3, or (at your option)
* any later version.
*
* GNU Radio is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with GNU Radio; see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 51 Franklin Street,
* Boston, MA 02110-1301, USA.
*/

#ifndef INCLUDED_UCHAR_ARRAY_TO_FLOAT_H
#define INCLUDED_UCHAR_ARRAY_TO_FLOAT_H

#include <blocks/api.h>

/*
* convert array of unsigned chars to floats
*/
BLOCKS_API void uchar_array_to_float (const unsigned char *in, float *out, int nsamples);


#endif /* INCLUDED_UCHAR_ARRAY_TO_FLOAT_H */
60 changes: 60 additions & 0 deletions gr-blocks/lib/uchar_to_float_impl.cc
@@ -0,0 +1,60 @@
/* -*- c++ -*- */
/*
* Copyright 2012 Free Software Foundation, Inc.
*
* This file is part of GNU Radio
*
* GNU Radio is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3, or (at your option)
* any later version.
*
* GNU Radio is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with GNU Radio; see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 51 Franklin Street,
* Boston, MA 02110-1301, USA.
*/

#ifdef HAVE_CONFIG_H
#include "config.h"
#endif

#include "uchar_to_float_impl.h"
#include "uchar_array_to_float.h"
#include <gr_io_signature.h>

namespace gr {
namespace blocks {

uchar_to_float::sptr uchar_to_float::make()
{
return gnuradio::get_initial_sptr(new uchar_to_float_impl());
}

uchar_to_float_impl::uchar_to_float_impl()
: gr_sync_block("uchar_to_float",
gr_make_io_signature (1, 1, sizeof(unsigned char)),
gr_make_io_signature (1, 1, sizeof(float)))
{
}

int
uchar_to_float_impl::work(int noutput_items,
gr_vector_const_void_star &input_items,
gr_vector_void_star &output_items)
{
const unsigned char *in = (const unsigned char *) input_items[0];
float *out = (float *) output_items[0];

uchar_array_to_float (in, out, noutput_items);

return noutput_items;
}

} /* namespace blocks */
}/* namespace gr */
45 changes: 45 additions & 0 deletions gr-blocks/lib/uchar_to_float_impl.h
@@ -0,0 +1,45 @@
/* -*- c++ -*- */
/*
* Copyright 2012 Free Software Foundation, Inc.
*
* This file is part of GNU Radio
*
* GNU Radio is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3, or (at your option)
* any later version.
*
* GNU Radio is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with GNU Radio; see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 51 Franklin Street,
* Boston, MA 02110-1301, USA.
*/

#ifndef INCLUDED_UCHAR_TO_FLOAT_IMPL_H
#define INCLUDED_UCHAR_TO_FLOAT_IMPL_H

#include <blocks/uchar_to_float.h>

namespace gr {
namespace blocks {

class BLOCKS_API uchar_to_float_impl : public uchar_to_float
{
public:
uchar_to_float_impl();

int work(int noutput_items,
gr_vector_const_void_star &input_items,
gr_vector_void_star &output_items);
};

} /* namespace blocks */
} /* namespace gr */


#endif /* INCLUDED_UCHAR_TO_FLOAT_IMPL_H */
10 changes: 10 additions & 0 deletions gr-blocks/python/qa_type_conversions.py
Expand Up @@ -301,6 +301,16 @@ def test_short_to_float_scale(self):
self.tb.run()
self.assertEqual(expected_data, dst.data())

def test_uchar_to_float(self):
src_data = (1, 2, 3, 4, 5)
expected_data = (1.0, 2.0, 3.0, 4.0, 5.0)
src = gr.vector_source_b(src_data)
op = blocks_swig.uchar_to_float()
dst = gr.vector_sink_f()
self.tb.connect(src, op, dst)
self.tb.run()
self.assertEqual(expected_data, dst.data())


if __name__ == '__main__':
gr_unittest.run(test_type_conversions, "test_type_conversions.xml")
3 changes: 3 additions & 0 deletions gr-blocks/swig/blocks_swig.i
Expand Up @@ -78,6 +78,7 @@
#include "blocks/sub_ss.h"
#include "blocks/sub_ii.h"
#include "blocks/sub_cc.h"
#include "blocks/uchar_to_float.h"
%}

%include "blocks/add_ff.h"
Expand Down Expand Up @@ -130,6 +131,7 @@
%include "blocks/sub_ss.h"
%include "blocks/sub_ii.h"
%include "blocks/sub_cc.h"
%include "blocks/uchar_to_float.h"

GR_SWIG_BLOCK_MAGIC2(blocks, add_ff);
GR_SWIG_BLOCK_MAGIC2(blocks, add_ss);
Expand Down Expand Up @@ -181,3 +183,4 @@ GR_SWIG_BLOCK_MAGIC2(blocks, sub_ff);
GR_SWIG_BLOCK_MAGIC2(blocks, sub_ss);
GR_SWIG_BLOCK_MAGIC2(blocks, sub_ii);
GR_SWIG_BLOCK_MAGIC2(blocks, sub_cc);
GR_SWIG_BLOCK_MAGIC2(blocks, uchar_to_float);

0 comments on commit a3b74a2

Please sign in to comment.