#include "autocast.hh" #include "portaudio.hh" #include "wavfile.hh" #include "fsk.hh" #include "utils.hh" #include "pocsag.hh" #include #include #include using namespace sdr; static void __sigint_handler(int signo) { // On SIGINT -> stop queue properly Queue::get().stop(); } int main(int argc, char *argv[]) { if (2 != argc) { std::cerr << "Usage: sdr_posag FILENAME" << std::endl; return -1; } sdr::Logger::get().addHandler( new sdr::StreamLogHandler(std::cerr, sdr::LOG_DEBUG)); // Register handler: signal(SIGINT, __sigint_handler); PortAudio::init(); Queue &queue = Queue::get(); WavSource src(argv[1]); PortSink sink; AutoCast cast; ASKDetector detector(false); BitStream bits(1200, BitStream::NORMAL); POCSAGDump pocsag(std::cout); // Cast to int16 src.connect(&cast); // ASK detector cast.connect(&detector); // bit decoder detector.connect(&bits); // POCSAG decoder and print bits.connect(&pocsag); // on idle -> read next buffer from input file queue.addIdle(&src, &WavSource::next); // on end-of-file -> stop queue src.addEOS(&queue, &Queue::stop); // Start queue queue.start(); // wait for queue to exit queue.wait(); // terminate port audio system properly PortAudio::terminate(); // quit. return 0; }