On Mon, Jul 25, 2016 at 9:13 PM, Vanhoy, Garrett M - (gvanhoy) <
gvan...@email.arizona.edu> wrote:

> Hello,
>
>
> I have sent this to the list once before, but I did not see it show up on
> the index so I am assuming it did not work after waiting some time.
>
>
> I am attempting to embed the liquid DSP
> <https://github.com/jgaeddert/liquid-dsp> flexframe protocol in a custom
> GNU Radio block. I am doing this by extending the out-of-tree module that Tom
> Rondeau recently worked on <https://github.com/trondeau/gr-liquiddsp>. I
> am writing a block that embeds the flexframegen and another that embeds a
> flexframesync. Since these blocks tend to produce a varying amount of
> symbols depending on the coding scheme or modulation, I wrote it as a
> general block. You can see the current version of the code at my own fork
> <https://github.com/gvanhoy/gr-liquiddsp>
>

Just a quick note. That work wasn't terribly "recent" and might have bit
rotted since I last hacked on it a number of years ago. No guarantee that
it will work against current GNU Radio without some updating. I stopped
working on it when I was disappointed by the performance of the library.

Tom



> I am currently having trouble with the generator and occasionally the sync
> block as well. However, for the generator, I am getting a return code -11
> (I assume a seg fault) when I attempt to copy a generated frame to the out
> buffer and run this in GNURadioCompanion. This often happens after
> attempting to copy ~16000 gr_complex items to the outbuffer. Is there a
> problems with that amount? Here is my work function code:
>
>
>     {
>         unsigned int buf_len = 1000;
>         unsigned int payload_len = 4096;
>         unsigned char header[14]; // Liquid hardcodes this as the length
> for the header
>         unsigned char payload[4096];
>
>         unsigned char *in = (unsigned char *) input_items[0];
>         unsigned char *inbuf = in;
>         gr_complex *out = (gr_complex *) output_items[0];
>         gr_complex *outbuf = (gr_complex *)
> malloc(buf_len*sizeof(gr_complex));
>         gr_complex *front = out;
>         int byte_count = 0;
>
>         unsigned char frame_count;
>         unsigned int total_items = 0;
>         int frame_complete = 0;
>
>         // Make header
>         for(int i = 1; i < 14; i++) header[i] = i;
>         while(byte_count < ((int) ninput_items[0]) - payload_len) {
>             header[0] = frame_count;
>             frame_count > 255 ? frame_count = 0 : frame_count++;
>             memcpy(payload, inbuf, payload_len);
>             inbuf += payload_len;
>             byte_count += payload_len;
>             // Assemble the frame
>             while (!flexframegen_is_assembled(d_fg)) {
>                 flexframegen_assemble(d_fg, header, payload, payload_len);
>             }
>
>             // Make the frame in blocks
>             frame_complete = 0;
>             while (!frame_complete){
>                 frame_complete = flexframegen_write_samples(d_fg, outbuf,
> buf_len);
>                 memcpy(front, outbuf, buf_len*sizeof(gr_complex));
>                 front += buf_len;
>                 total_items += buf_len;
>             }
>
>             // Get frame length
>         }
>
>         free(outbuf);
>         consume_each (total_items);
>
>       // Tell runtime system how many output items we produced.
>       return total_items;
>     }
>
>
> Any ideas? Thanks for any help.
>
>
>
> _______________________________________________
> Discuss-gnuradio mailing list
> Discuss-gnuradio@gnu.org
> https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
>
>
_______________________________________________
Discuss-gnuradio mailing list
Discuss-gnuradio@gnu.org
https://lists.gnu.org/mailman/listinfo/discuss-gnuradio

Reply via email to