#!/bin/sh  
# \
exec oagtclsh "$0" "$@"

set auto_path [linsert $auto_path 0  /usr/local/oag/apps/lib/$env(HOST_ARCH)]
set auto_path [linsert $auto_path 0 /usr/local/oag/lib_patch/$env(HOST_ARCH)]

APSStandardSetup

set tmpRoot /tmp/[APSTmpString]
set waveformDir /home/helios/oagData/sr/orbitControllaw/waveforms

foreach plane {h v} {
    if [catch {exec sddsconvert $waveformDir/${plane}corrInfo.sdds -pipe=out -del=par,WaveformPV \
                 -rename=par,FeedforwardWaveformPV=WaveformPV \
                 | sddsprocess -pipe=in $tmpRoot.waveform.$plane -edit=col,ControlName,DeviceName,i/SFB:/ei/:FFCurrentAO/ }  result] {
        puts stderr "Error1: $result"
        exit 1
    }
}

set RCtimeout 5
set RCPV SR:CorrectorFFTransferRC
#set RCPV OAG140RC
catch {APScavput -list=$RCPV.CLR=1}

if [catch {APSRunControlInit -pv $RCPV \
             -description "Transfer FF to Waveform" \
             -timeout [expr $RCtimeout * 1000]} result] {
    puts stderr $result
  #  exit 1
}
catch {exec medm -x -attach -macro RCPV=$RCPV \
         ./sr/psApp/APSRunControlSingle.adl &}

if [catch {APSRunControlPing} result] {
    puts stderr "SRTopupBucketAssignment3: APSRunControlPing \#1, Run control denied: $result"
   # exit 1
}

while {1} {
    if [catch {APSRunControlPing} result] {
        puts stderr "SRTopupBucketAssignment3: APSRunControlPing \#1, Run control denied: $result"
	exit 1
    }
    set startTime [clock seconds]
    set fileList ""
    foreach plane {h v} {
        if [catch {exec sddscasr -save $tmpRoot.waveform.$plane -pend=30 -pipe=out \
                     | sddsprocess -pipe=in -scan=col,Waveform,ValueString,%lf $tmpRoot.read.$plane } result] {
            puts stderr "Error reading scalar values: $result"
            exit 1
        }
        lappend fileList $tmpRoot.waveform.$plane
        lappend fileList $tmpRoot.read.$plane 
        if [catch {exec sddswput $tmpRoot.read.$plane } result] {
            puts stderr "Error setting waveform values: $result"
            continue
        }
        
    }
    eval file delete -force $fileList
    set endTime [clock seconds]
    set diff [expr 1 - ($endTime - $startTime)]
    if {$diff>0} {
        puts "Waiting $diff seconds..."
        after [expr $diff * 1000]
    }
}

exit 0
