@@ -12,7 +12,7 @@ internal class DataServer : IThread
1212 private readonly IPAddress address ;
1313 private readonly int port ;
1414 private readonly ICaptureBufferManagerReader captureBufferManager ;
15- private readonly ScpiServer scpi ;
15+ private readonly Action < uint > onSequenceUpdate ;
1616
1717 private CancellationTokenSource ? listenerCancelTokenSource ;
1818 private Task ? taskListener ;
@@ -28,14 +28,14 @@ public DataServer(
2828 IPAddress address ,
2929 int port ,
3030 ICaptureBufferManagerReader captureBuffer ,
31- ScpiServer scpi )
31+ Action < uint > onSequenceUpdate )
3232 {
3333 this . logger = logger ;
3434 this . settings = settings ;
3535 this . address = address ;
3636 this . port = port ;
3737 this . captureBufferManager = captureBuffer ;
38- this . scpi = scpi ;
38+ this . onSequenceUpdate = onSequenceUpdate ;
3939 }
4040
4141 public void Start ( SemaphoreSlim startSemaphore )
@@ -169,7 +169,7 @@ private void LoopSession(ILogger logger, Socket socket, CancellationToken cancel
169169 {
170170 SendScopehal ( socket , cancelToken ) ;
171171 //logger.LogInformation($"Sending waveform (seq={sequenceNumber})");
172- scpi . OnUpdateSequence ( sequenceNumber ) ;
172+ onSequenceUpdate ( sequenceNumber ) ;
173173 }
174174 }
175175
@@ -184,9 +184,6 @@ private void LoopSession(ILogger logger, Socket socket, CancellationToken cancel
184184 byte cmd = cmdBuf [ 0 ] ;
185185 switch ( cmd )
186186 {
187- case ( byte ) 'K' :
188- SendScopehalOld ( socket , cancelToken ) ;
189- break ;
190187 case ( byte ) 'S' :
191188 SendScopehal ( socket , cancelToken ) ;
192189 break ;
@@ -216,83 +213,6 @@ private void LoopSession(ILogger logger, Socket socket, CancellationToken cancel
216213 }
217214
218215 private uint sequenceNumber = 0 ;
219- private void SendScopehalOld ( Socket socket , CancellationToken cancelToken )
220- {
221- while ( true )
222- {
223- cancelToken . ThrowIfCancellationRequested ( ) ;
224- bool noCapturesAvailable = false ;
225-
226- if ( captureBufferManager . TryStartRead ( out var buffer ) )
227- {
228- ulong femtosecondsPerSample = 1000000000000000 / buffer ! . Metadata . HardwareConfig . Acquisition . SampleRateHz ;
229- WaveformHeaderOld header = new ( )
230- {
231- seqnum = sequenceNumber ,
232- numChannels = ( ushort ) BitOperations . PopCount ( buffer . Metadata . HardwareConfig . Acquisition . EnabledChannels ) ,
233- fsPerSample = femtosecondsPerSample ,
234- triggerFs = ( long ) buffer . Metadata . ProcessingConfig . TriggerDelayFs ,
235- hwWaveformsPerSec = 0
236- } ;
237- ChannelHeaderOld chHeader = new ( )
238- {
239- depth = ( ulong ) buffer . Metadata . ProcessingConfig . ChannelDataLength ,
240- clipping = 0
241- } ;
242- if ( buffer . Metadata . Triggered && buffer . Metadata . ProcessingConfig . TriggerInterpolation )
243- {
244- ReadOnlySpan < sbyte > triggerChannelBuffer = buffer . GetChannelReadBuffer < sbyte > ( buffer . Metadata . TriggerChannelCaptureIndex ) ;
245- int triggerIndex = ( int ) ( buffer . Metadata . ProcessingConfig . TriggerDelayFs / femtosecondsPerSample ) ;
246- if ( triggerIndex > 0 && triggerIndex < triggerChannelBuffer . Length )
247- {
248- int channelIndex = buffer . Metadata . HardwareConfig . Acquisition . GetChannelIndexByCaptureBufferIndex ( buffer . Metadata . TriggerChannelCaptureIndex ) ;
249- ThunderscopeChannelFrontend triggerChannelFrontend = buffer . Metadata . HardwareConfig . Frontend [ channelIndex ] ;
250- var channelScale = ( float ) ( triggerChannelFrontend . ActualVoltFullScale / 256.0 ) ;
251- var channelOffset = ( float ) triggerChannelFrontend . ActualVoltOffset ;
252- float fa = channelScale * triggerChannelBuffer [ triggerIndex - 1 ] - channelOffset ;
253- float fb = channelScale * triggerChannelBuffer [ triggerIndex ] - channelOffset ;
254- float triggerLevel = buffer . Metadata . ProcessingConfig . EdgeTriggerParameters . LevelV + channelOffset ;
255- float slope = fb - fa ;
256- float delta = triggerLevel - fa ;
257- float trigphase = delta / slope ;
258- chHeader . trigphase = femtosecondsPerSample * ( 1 - trigphase ) ;
259- if ( ! double . IsFinite ( chHeader . trigphase ) )
260- chHeader . trigphase = 0 ;
261- var delay = buffer . Metadata . ProcessingConfig . TriggerDelayFs - ( ulong ) triggerIndex * femtosecondsPerSample ;
262- chHeader . trigphase += delay ;
263- }
264- }
265- unsafe
266- {
267- socket . Send ( new ReadOnlySpan < byte > ( & header , sizeof ( WaveformHeaderOld ) ) ) ;
268- for ( byte captureBufferIndex = 0 ; captureBufferIndex < buffer . ChannelCount ; captureBufferIndex ++ )
269- {
270- int channelIndex = buffer . Metadata . HardwareConfig . Acquisition . GetChannelIndexByCaptureBufferIndex ( captureBufferIndex ) ;
271- ThunderscopeChannelFrontend thunderscopeChannel = buffer . Metadata . HardwareConfig . Frontend [ channelIndex ] ;
272- chHeader . channelIndex = ( byte ) channelIndex ;
273- chHeader . scale = ( float ) ( thunderscopeChannel . ActualVoltFullScale / 256.0 ) ;
274- chHeader . offset = ( float ) thunderscopeChannel . ActualVoltOffset ;
275- socket . Send ( new ReadOnlySpan < byte > ( & chHeader , sizeof ( ChannelHeaderOld ) ) ) ;
276- var channelBuffer = buffer . GetChannelReadByteBuffer ( captureBufferIndex ) ;
277- socket . Send ( channelBuffer ) ;
278- }
279- }
280- sequenceNumber ++ ;
281- captureBufferManager . FinishRead ( ) ;
282- break ;
283- }
284- else
285- {
286- noCapturesAvailable = true ;
287- }
288-
289- if ( noCapturesAvailable )
290- {
291- Thread . Sleep ( 10 ) ;
292- }
293- }
294- }
295-
296216 private void SendScopehal ( Socket socket , CancellationToken cancelToken )
297217 {
298218 bool noCapturesAvailable = false ;
0 commit comments