java.lang.Object
pl.polsl.rtsa.api.SignalAnalyzerApiImpl
- All Implemented Interfaces:
SignalAnalyzerApi,DataListener
Production implementation of the SignalAnalyzerApi.
This class bridges the low-level hardware communication with the high-level API used by the JavaFX frontend. It handles:
- Connection lifecycle management
- State tracking and synchronization
- Data transformation from raw to DTOs
- Callback dispatch to UI layer
Thread Safety:
This implementation is fully thread-safe. All state is protected by atomic references and the underlying DeviceClient handles its own threading.-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final AtomicBooleanprivate final AtomicReference<AvailablePorts> private final AppConfigprivate final AtomicBooleanprivate final AtomicReference<String> private final AtomicReference<Consumer<ConnectionStatus>> private final AtomicReference<Double> private final AtomicReference<Consumer<SignalData>> private final DeviceClientprivate final AtomicReference<String> private final AtomicReference<Consumer<String>> private final AtomicReference<SignalData> private static final org.slf4j.Loggerprivate final SignalProcessingServiceprivate final AtomicBoolean -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprivate voidprivate voiddouble[]computeFFT(double[] voltageData, double sampleRate) Computes FFT for the given voltage data.computeStatistics(double[] voltageData, double[] freqData, double sampleRate) Computes signal statistics for the given data.voidConnects to a device on the specified port.double[]convertToVoltage(int[] rawData) Converts raw ADC values to voltage.voidDisconnects from the currently connected device.Gets the current acquisition configuration.Gets the list of available serial ports.Gets the current connection status.doubleGets the current sample rate.Gets the last received signal data.booleanChecks if acquisition is currently active.booleanChecks if a device is currently connected.booleanChecks if the API has been shut down.private voidvoidCalled when an error occurs within the device client.voidonNewData(SignalResult result) Called when a new batch of signal data is available.Refreshes the list of available serial ports.voidsetConnectionCallback(Consumer<ConnectionStatus> callback) Sets the callback for connection state changes.voidsetDataCallback(Consumer<SignalData> callback) Sets the callback for receiving signal data updates.voidsetErrorCallback(Consumer<String> callback) Sets the callback for receiving error notifications.private voidsetSampleRate(DeviceCommand command, double rate) voidSets the sample rate to 10 kHz.voidSets the sample rate to 1 kHz.voidSets the sample rate to 20 kHz (Turbo Mode).voidshutdown()Shuts down the API and releases all resources.voidStarts data acquisition.voidStops data acquisition.
-
Field Details
-
logger
private static final org.slf4j.Logger logger -
deviceClient
-
processingService
-
config
-
connected
-
acquiring
-
shutdown
-
connectedPort
-
deviceInfo
-
currentSampleRate
-
lastSignalData
-
dataCallback
-
errorCallback
-
connectionCallback
-
cachedPorts
-
-
Constructor Details
-
SignalAnalyzerApiImpl
public SignalAnalyzerApiImpl(boolean useMock) Creates a new API implementation.- Parameters:
useMock- If true, uses MockDeviceClient for testing.
-
-
Method Details
-
getAvailablePorts
Description copied from interface:SignalAnalyzerApiGets the list of available serial ports.- Specified by:
getAvailablePortsin interfaceSignalAnalyzerApi- Returns:
- AvailablePorts containing port names and metadata.
-
refreshPorts
Description copied from interface:SignalAnalyzerApiRefreshes the list of available serial ports. Useful after plugging/unplugging devices.- Specified by:
refreshPortsin interfaceSignalAnalyzerApi- Returns:
- Updated AvailablePorts.
-
connect
Description copied from interface:SignalAnalyzerApiConnects to a device on the specified port.This method performs handshake validation and will throw if the device does not respond correctly.
- Specified by:
connectin interfaceSignalAnalyzerApi- Parameters:
portName- The system port name (e.g., "COM3", "/dev/ttyACM0").
-
disconnect
public void disconnect()Description copied from interface:SignalAnalyzerApiDisconnects from the currently connected device. Safe to call even if not connected.- Specified by:
disconnectin interfaceSignalAnalyzerApi
-
getConnectionStatus
Description copied from interface:SignalAnalyzerApiGets the current connection status.- Specified by:
getConnectionStatusin interfaceSignalAnalyzerApi- Returns:
- ConnectionStatus with connection details.
-
isConnected
public boolean isConnected()Description copied from interface:SignalAnalyzerApiChecks if a device is currently connected.- Specified by:
isConnectedin interfaceSignalAnalyzerApi- Returns:
- true if connected, false otherwise.
-
startAcquisition
public void startAcquisition()Description copied from interface:SignalAnalyzerApiStarts data acquisition. Must be connected first.- Specified by:
startAcquisitionin interfaceSignalAnalyzerApi
-
stopAcquisition
public void stopAcquisition()Description copied from interface:SignalAnalyzerApiStops data acquisition. Safe to call even if not acquiring.- Specified by:
stopAcquisitionin interfaceSignalAnalyzerApi
-
isAcquiring
public boolean isAcquiring()Description copied from interface:SignalAnalyzerApiChecks if acquisition is currently active.- Specified by:
isAcquiringin interfaceSignalAnalyzerApi- Returns:
- true if acquiring data, false otherwise.
-
getAcquisitionConfig
Description copied from interface:SignalAnalyzerApiGets the current acquisition configuration.- Specified by:
getAcquisitionConfigin interfaceSignalAnalyzerApi- Returns:
- AcquisitionConfig with current settings.
-
setSampleRate1kHz
public void setSampleRate1kHz()Description copied from interface:SignalAnalyzerApiSets the sample rate to 1 kHz.- Specified by:
setSampleRate1kHzin interfaceSignalAnalyzerApi
-
setSampleRate10kHz
public void setSampleRate10kHz()Description copied from interface:SignalAnalyzerApiSets the sample rate to 10 kHz.- Specified by:
setSampleRate10kHzin interfaceSignalAnalyzerApi
-
setSampleRate20kHz
public void setSampleRate20kHz()Description copied from interface:SignalAnalyzerApiSets the sample rate to 20 kHz (Turbo Mode).Note: Turbo mode may have reduced impedance tolerance.
- Specified by:
setSampleRate20kHzin interfaceSignalAnalyzerApi
-
setSampleRate
-
getCurrentSampleRate
public double getCurrentSampleRate()Description copied from interface:SignalAnalyzerApiGets the current sample rate.- Specified by:
getCurrentSampleRatein interfaceSignalAnalyzerApi- Returns:
- Sample rate in Hz.
-
setDataCallback
Description copied from interface:SignalAnalyzerApiSets the callback for receiving signal data updates.The callback is invoked on a background thread. Use
Platform.runLater()for UI updates.- Specified by:
setDataCallbackin interfaceSignalAnalyzerApi- Parameters:
callback- Consumer that receives SignalData updates, or null to clear.
-
setErrorCallback
Description copied from interface:SignalAnalyzerApiSets the callback for receiving error notifications.The callback is invoked on a background thread.
- Specified by:
setErrorCallbackin interfaceSignalAnalyzerApi- Parameters:
callback- Consumer that receives error messages, or null to clear.
-
setConnectionCallback
Description copied from interface:SignalAnalyzerApiSets the callback for connection state changes.- Specified by:
setConnectionCallbackin interfaceSignalAnalyzerApi- Parameters:
callback- Consumer that receives ConnectionStatus updates, or null to clear.
-
getLastSignalData
Description copied from interface:SignalAnalyzerApiGets the last received signal data. Returns null if no data has been received yet.- Specified by:
getLastSignalDatain interfaceSignalAnalyzerApi- Returns:
- The most recent SignalData, or null.
-
computeFFT
public double[] computeFFT(double[] voltageData, double sampleRate) Description copied from interface:SignalAnalyzerApiComputes FFT for the given voltage data. Useful for processing external data.- Specified by:
computeFFTin interfaceSignalAnalyzerApi- Parameters:
voltageData- Time-domain voltage samples.sampleRate- Sample rate used to capture the data.- Returns:
- FFT magnitude spectrum.
-
convertToVoltage
public double[] convertToVoltage(int[] rawData) Description copied from interface:SignalAnalyzerApiConverts raw ADC values to voltage.- Specified by:
convertToVoltagein interfaceSignalAnalyzerApi- Parameters:
rawData- Raw 10-bit ADC values (0-1023).- Returns:
- Voltage values (0.0-5.0V).
-
computeStatistics
public SignalStatistics computeStatistics(double[] voltageData, double[] freqData, double sampleRate) Description copied from interface:SignalAnalyzerApiComputes signal statistics for the given data.- Specified by:
computeStatisticsin interfaceSignalAnalyzerApi- Parameters:
voltageData- Time-domain voltage samples.freqData- Frequency-domain magnitude data.sampleRate- Sample rate in Hz.- Returns:
- Computed SignalStatistics.
-
shutdown
public void shutdown()Description copied from interface:SignalAnalyzerApiShuts down the API and releases all resources.This method should be called when the application is closing. It stops acquisition, disconnects, and shuts down all background threads.
- Specified by:
shutdownin interfaceSignalAnalyzerApi
-
isShutdown
public boolean isShutdown()Description copied from interface:SignalAnalyzerApiChecks if the API has been shut down.- Specified by:
isShutdownin interfaceSignalAnalyzerApi- Returns:
- true if shutdown() has been called.
-
onNewData
Description copied from interface:DataListenerCalled when a new batch of signal data is available.- Specified by:
onNewDatain interfaceDataListener- Parameters:
result- TheSignalResultcontaining time and frequency domain data.
-
onError
Description copied from interface:DataListenerCalled when an error occurs within the device client.- Specified by:
onErrorin interfaceDataListener- Parameters:
message- A descriptive error message.
-
checkNotShutdown
private void checkNotShutdown() -
checkConnected
private void checkConnected() -
notifyConnectionChange
private void notifyConnectionChange()
-