J'ai créé un bloc source personnalisé qui lit les valeurs de commutation sur un zedboard. Il y accède via un pilote proc que j'ai écrit. Le fichier /var/log/kern.log signale une sortie correcte. Le débogage printf dans le bloc source signale une sortie correcte. Toutefois, en poussant les données vers un lien de fichier ainsi que vers un récepteur de numéro d'interface utilisateur graphique, seuls les zéros sont lus.source gnuradio ne produisant que des zéros
N'ai-je pas configuré le bloc correctement?
#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 */
Merci beaucoup, je vais passer par là. J'ai fait un bloc général de gr_modtool au lieu de spécifier la source ... J'ai suivi le guide sur la création du bloc ff_square mais cela ne m'a pas vraiment préparé à en créer trop. J'ai lutté avec cette source et un autre puits pendant un moment. Merci pour la contribution! – gutelfuldead
ouais, l'exemple 'square_ff' pourrait être une des choses que je n'aime pas vraiment sur le wiki de GNU Radio. Vraiment, les tutoriels guidés sont mieux adaptés pour vous donner une bonne introduction! :) –