/*******************************************************************************
* SDR Trunk
* Copyright (C) 2015 Dennis Sheirer
*
* This program 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 of the License, or
* (at your option) any later version.
*
* This program 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 this program. If not, see <http://www.gnu.org/licenses/>
******************************************************************************/
package module;
import java.util.concurrent.ScheduledExecutorService;
public abstract class Module
{
/**
* Defines the basic component level class for all processing, demodulation
* and decoding components that can operate within a processing chain.
*
* Modules can optionally implement any of the following interfaces:
*
* IAudioPacketListener consumes audio packets
* IAudioPacketProvider produces audio packets
* ICallEventListener consumes call events
* ICallEventProvider provides call events
* IChannelEventListener consumes channel events
* IChannelEventProvider provides channel events (reset, selection, start, etc)
* IComplexBufferListener consumes complex samples and normally
* produces demodulated real sample buffers
* IFrequencyCorrectionController provides tuned frequency error corrections
* IMessageProvider produces messages
* IRealBufferListener consumes demodulated real sample buffers
* IRealBufferListener produces demodulated real sample buffers
* ISquelchStateListener consumes squelch states
* ISquelchStateProvider provides squelch states
*/
public Module()
{
}
/**
* Initialize or reset all internal states to default - prepare to start
* processing or resume processing, potentially with a different source.
*
* This method is invoked after constructing a module, and following any stop()
* calls and before any start() calls. This allows the module to prior to
* starting a module and starting it again processing a newly tuned channel,
* like a traffic channel.
*/
public abstract void reset();
/**
* Start processing. Provides an executor to use for scheduling tasks
*/
public abstract void start( ScheduledExecutorService executor );
/**
* Stop processing
*/
public abstract void stop();
/**
* Dispose of all resources and listeners and prepare for garbage collection
*/
public abstract void dispose();
}