Ich habe einen benutzerdefinierten Quellblock erstellt, der die Schalterwerte auf einem Zedboard liest. Es greift auf sie über einen Proc-Treiber zu, den ich geschrieben habe. Das Verzeichnis /var/log/kern.log meldet die korrekte Ausgabe. Das Debug-Printf im Quellblock meldet die korrekte Ausgabe.gnuradio Quelle gibt nur Nullen aus
Das Verschieben der Daten in einen Filesink sowie eine GUI-Senke liest jedoch nur Nullen. Habe ich den Block nicht richtig eingerichtet?
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include <gnuradio/io_signature.h>
#include "switches_impl.h"
#include <stdio.h>
#include <stdlib.h>
#include <uinstd.h>
namespace gr {
namespace zedboard {
switches::sptr
switches::make()
{
return gnuradio::get_initial_sptr
(new switches_impl());
}
/*
* The private constructor
*/
switches_impl::switches_impl()
: gr::block("switches",
gr::io_signature::make(0,0,0),
gr::io_signature::make(1, 1, sizeof(unsigned int *)))
{}
/*
* Our virtual destructor.
*/
switches_impl::~switches_impl()
{
}
void
switches_impl::forecast (int noutput_items, gr_vector_int &ninput_items_required)
{
/* <+forecast+> e.g. ninput_items_required[0] = noutput_items */
}
int
switches_impl::general_work (int noutput_items,
gr_vector_int &ninput_items,
gr_vector_const_void_star &input_items,
gr_vector_void_star &output_items)
{
//const <+ITYPE+> *in = (const <+ITYPE+> *) input_items[0];
unsigned int *out = (unsigned int *) output_items[0];
// Do <+signal processing+>
// Tell runtime system how many input items we consumed on
// each input stream.
char buffer[5];
size_t size = 1;
size_t nitems = 5;
FILE* fp;
fp = fopen("/proc/zedSwitches","r");
if (fp == NULL)
{
printf("Cannot open for read\n");
return -1;
}
/*
Expect return format:
0x00
*/
fread(buffer, size, nitems, fp);
fclose(fp);
out=(unsigned int *)strtoul(buffer,NULL,0);
printf("read: 0x%02x",out);
consume_each (noutput_items);
// Tell runtime system how many output items we produced.
return noutput_items;
}
} /* namespace zedboard */
} /* namespace gr */
Vielen Dank werde ich durchgehen. Ich habe einen allgemeinen Block von gr_modtool gemacht, anstatt Quelle anzugeben ... Ich folgte der Anleitung beim Erstellen des ff_square Blocks, aber es hat mich nicht wirklich darauf vorbereitet, dies zu sehr zu erstellen. Ich habe mit dieser Quelle und einer anderen Senke für eine Weile gekämpft. Danke für die Eingabe! – gutelfuldead
yeah, das 'square_ff' Beispiel könnte eines der Dinge sein, die ich nicht wirklich mag über das GNU Radio Wiki. Wirklich, die geführten Tutorials sind besser geeignet, um Ihnen ein gutes Intro zu geben! :) –