Regen 3He SC driver

This commit is contained in:
Douglas Clowes
2014-10-27 14:35:37 +11:00
parent 62481b76c5
commit fa2eb775ac

View File

@ -58,7 +58,7 @@ proc ::scobj::he3_polanal::chkWrite {tc_root} {
set catch_status [ catch { set catch_status [ catch {
debug_log ${tc_root} 1 "chkWrite tc_root=${tc_root} sct=[sct] resp=[sct result]" debug_log ${tc_root} 1 "chkWrite tc_root=${tc_root} sct=[sct] resp=[sct result]"
# chkWrite hook code starts # chkWrite hook code starts
rdValue ${tc_root} [namespace current]::rdValue ${tc_root}
# chkWrite hook code ends # chkWrite hook code ends
return "idle" return "idle"
} catch_message ] } catch_message ]
@ -83,6 +83,16 @@ proc ::scobj::he3_polanal::getValue {tc_root nextState cmd_str} {
handle_exception ${catch_status} ${catch_message} handle_exception ${catch_status} ${catch_message}
} }
# function to check the write parameter on a device
proc ::scobj::he3_polanal::noResponse {tc_root} {
set catch_status [ catch {
debug_log ${tc_root} 1 "noResponse tc_root=${tc_root} sct=[sct] resp=[sct result]"
# noResponse hook code goes here
return "idle"
} catch_message ]
handle_exception ${catch_status} ${catch_message}
}
# function to parse the read of a parameter on a device # function to parse the read of a parameter on a device
proc ::scobj::he3_polanal::rdValue {tc_root} { proc ::scobj::he3_polanal::rdValue {tc_root} {
set catch_status [ catch { set catch_status [ catch {
@ -105,7 +115,7 @@ proc ::scobj::he3_polanal::rdValue {tc_root} {
} }
set my_name [basename [pathname [sct]]] set my_name [basename [pathname [sct]]]
if {![string equal -nocase "[lindex ${dlist} 0]" "${my_name}"]} { if {![string equal -nocase "[lindex ${dlist} 0]" "${my_name}"]} {
error "[lindex ${dlist} 0] is not ${my_name}" error "[lindex ${dlist} 0] is not my name (${my_name})"
} }
if {[string match "*Not Active*" "${data}"]} { if {[string match "*Not Active*" "${data}"]} {
set data 0 set data 0
@ -115,6 +125,26 @@ proc ::scobj::he3_polanal::rdValue {tc_root} {
} else { } else {
set data [lindex ${dlist} 1] set data [lindex ${dlist} 1]
} }
set path [pathname [sct]]
if {[llength ${dlist}] > 2} {
set new_value [lindex ${dlist} 2]
if { "${new_value}" == "NaN" } {
set new_value 0
}
hupdateif ${path}/Amplitude "${new_value}"
}
if {[llength ${dlist}] > 3} {
hupdateif ${path}/Freq "[lindex ${dlist} 3]"
}
if {[llength ${dlist}] > 4} {
hupdateif ${path}/Phase "[lindex ${dlist} 4]"
}
if {[llength ${dlist}] > 5} {
hupdateif ${path}/Time2 "[lindex ${dlist} 5]"
}
if {[llength ${dlist}] > 6} {
hupdateif ${path}/Field "[lindex ${dlist} 6]"
}
# rdValue hook code ends # rdValue hook code ends
if { [hpropexists [sct] geterror] } { if { [hpropexists [sct] geterror] } {
debug_log ${tc_root} 9 "[sct] error: [sct geterror]" debug_log ${tc_root} 9 "[sct] error: [sct geterror]"
@ -193,6 +223,65 @@ proc ::scobj::he3_polanal::mkDriver { sct_controller name device_class simulatio
hsetprop ${scobj_hpath}/analyser klass "@none" hsetprop ${scobj_hpath}/analyser klass "@none"
hsetprop ${scobj_hpath}/analyser type "part" hsetprop ${scobj_hpath}/analyser type "part"
hfactory ${scobj_hpath}/analyser/Amplitude plain user text
hsetprop ${scobj_hpath}/analyser/Amplitude control true
hsetprop ${scobj_hpath}/analyser/Amplitude data true
hsetprop ${scobj_hpath}/analyser/Amplitude mutable true
hsetprop ${scobj_hpath}/analyser/Amplitude nxsave true
hsetprop ${scobj_hpath}/analyser/Amplitude oldval UNKNOWN
hsetprop ${scobj_hpath}/analyser/Amplitude klass "parameter"
hsetprop ${scobj_hpath}/analyser/Amplitude sdsinfo "::nexus::scobj::sdsinfo"
hsetprop ${scobj_hpath}/analyser/Amplitude type "part"
hsetprop ${scobj_hpath}/analyser/Amplitude nxalias "${name}_analyser_Amplitude"
hfactory ${scobj_hpath}/analyser/Field plain user text
hsetprop ${scobj_hpath}/analyser/Field control true
hsetprop ${scobj_hpath}/analyser/Field data true
hsetprop ${scobj_hpath}/analyser/Field mutable true
hsetprop ${scobj_hpath}/analyser/Field nxsave true
hsetprop ${scobj_hpath}/analyser/Field units Oersted
hsetprop ${scobj_hpath}/analyser/Field oldval UNKNOWN
hsetprop ${scobj_hpath}/analyser/Field klass "parameter"
hsetprop ${scobj_hpath}/analyser/Field sdsinfo "::nexus::scobj::sdsinfo"
hsetprop ${scobj_hpath}/analyser/Field type "part"
hsetprop ${scobj_hpath}/analyser/Field nxalias "${name}_analyser_Field"
hfactory ${scobj_hpath}/analyser/Freq plain user text
hsetprop ${scobj_hpath}/analyser/Freq control true
hsetprop ${scobj_hpath}/analyser/Freq data true
hsetprop ${scobj_hpath}/analyser/Freq mutable true
hsetprop ${scobj_hpath}/analyser/Freq nxsave true
hsetprop ${scobj_hpath}/analyser/Freq units Hertz
hsetprop ${scobj_hpath}/analyser/Freq oldval UNKNOWN
hsetprop ${scobj_hpath}/analyser/Freq klass "parameter"
hsetprop ${scobj_hpath}/analyser/Freq sdsinfo "::nexus::scobj::sdsinfo"
hsetprop ${scobj_hpath}/analyser/Freq type "part"
hsetprop ${scobj_hpath}/analyser/Freq nxalias "${name}_analyser_Freq"
hfactory ${scobj_hpath}/analyser/Phase plain user text
hsetprop ${scobj_hpath}/analyser/Phase control true
hsetprop ${scobj_hpath}/analyser/Phase data true
hsetprop ${scobj_hpath}/analyser/Phase mutable true
hsetprop ${scobj_hpath}/analyser/Phase nxsave true
hsetprop ${scobj_hpath}/analyser/Phase units Degree
hsetprop ${scobj_hpath}/analyser/Phase oldval UNKNOWN
hsetprop ${scobj_hpath}/analyser/Phase klass "parameter"
hsetprop ${scobj_hpath}/analyser/Phase sdsinfo "::nexus::scobj::sdsinfo"
hsetprop ${scobj_hpath}/analyser/Phase type "part"
hsetprop ${scobj_hpath}/analyser/Phase nxalias "${name}_analyser_Phase"
hfactory ${scobj_hpath}/analyser/Time2 plain user text
hsetprop ${scobj_hpath}/analyser/Time2 control true
hsetprop ${scobj_hpath}/analyser/Time2 data true
hsetprop ${scobj_hpath}/analyser/Time2 mutable true
hsetprop ${scobj_hpath}/analyser/Time2 nxsave true
hsetprop ${scobj_hpath}/analyser/Time2 units Second
hsetprop ${scobj_hpath}/analyser/Time2 oldval UNKNOWN
hsetprop ${scobj_hpath}/analyser/Time2 klass "parameter"
hsetprop ${scobj_hpath}/analyser/Time2 sdsinfo "::nexus::scobj::sdsinfo"
hsetprop ${scobj_hpath}/analyser/Time2 type "part"
hsetprop ${scobj_hpath}/analyser/Time2 nxalias "${name}_analyser_Time2"
hfactory ${scobj_hpath}/analyser/spin plain user text hfactory ${scobj_hpath}/analyser/spin plain user text
hsetprop ${scobj_hpath}/analyser/spin read ${ns}::getValue ${scobj_hpath} rdValue {analyser} hsetprop ${scobj_hpath}/analyser/spin read ${ns}::getValue ${scobj_hpath} rdValue {analyser}
hsetprop ${scobj_hpath}/analyser/spin rdValue ${ns}::rdValue ${scobj_hpath} hsetprop ${scobj_hpath}/analyser/spin rdValue ${ns}::rdValue ${scobj_hpath}
@ -203,7 +292,7 @@ proc ::scobj::he3_polanal::mkDriver { sct_controller name device_class simulatio
hsetprop ${scobj_hpath}/analyser/spin data true hsetprop ${scobj_hpath}/analyser/spin data true
hsetprop ${scobj_hpath}/analyser/spin mutable true hsetprop ${scobj_hpath}/analyser/spin mutable true
hsetprop ${scobj_hpath}/analyser/spin nxsave true hsetprop ${scobj_hpath}/analyser/spin nxsave true
hsetprop ${scobj_hpath}/analyser/spin values -1,+1 hsetprop ${scobj_hpath}/analyser/spin values +,-,0
hsetprop ${scobj_hpath}/analyser/spin oldval UNKNOWN hsetprop ${scobj_hpath}/analyser/spin oldval UNKNOWN
hsetprop ${scobj_hpath}/analyser/spin klass "parameter" hsetprop ${scobj_hpath}/analyser/spin klass "parameter"
hsetprop ${scobj_hpath}/analyser/spin sdsinfo "::nexus::scobj::sdsinfo" hsetprop ${scobj_hpath}/analyser/spin sdsinfo "::nexus::scobj::sdsinfo"
@ -222,6 +311,65 @@ proc ::scobj::he3_polanal::mkDriver { sct_controller name device_class simulatio
hsetprop ${scobj_hpath}/polariser klass "@none" hsetprop ${scobj_hpath}/polariser klass "@none"
hsetprop ${scobj_hpath}/polariser type "part" hsetprop ${scobj_hpath}/polariser type "part"
hfactory ${scobj_hpath}/polariser/Amplitude plain user text
hsetprop ${scobj_hpath}/polariser/Amplitude control true
hsetprop ${scobj_hpath}/polariser/Amplitude data true
hsetprop ${scobj_hpath}/polariser/Amplitude mutable true
hsetprop ${scobj_hpath}/polariser/Amplitude nxsave true
hsetprop ${scobj_hpath}/polariser/Amplitude oldval UNKNOWN
hsetprop ${scobj_hpath}/polariser/Amplitude klass "parameter"
hsetprop ${scobj_hpath}/polariser/Amplitude sdsinfo "::nexus::scobj::sdsinfo"
hsetprop ${scobj_hpath}/polariser/Amplitude type "part"
hsetprop ${scobj_hpath}/polariser/Amplitude nxalias "${name}_polariser_Amplitude"
hfactory ${scobj_hpath}/polariser/Field plain user text
hsetprop ${scobj_hpath}/polariser/Field control true
hsetprop ${scobj_hpath}/polariser/Field data true
hsetprop ${scobj_hpath}/polariser/Field mutable true
hsetprop ${scobj_hpath}/polariser/Field nxsave true
hsetprop ${scobj_hpath}/polariser/Field units Oersted
hsetprop ${scobj_hpath}/polariser/Field oldval UNKNOWN
hsetprop ${scobj_hpath}/polariser/Field klass "parameter"
hsetprop ${scobj_hpath}/polariser/Field sdsinfo "::nexus::scobj::sdsinfo"
hsetprop ${scobj_hpath}/polariser/Field type "part"
hsetprop ${scobj_hpath}/polariser/Field nxalias "${name}_polariser_Field"
hfactory ${scobj_hpath}/polariser/Freq plain user text
hsetprop ${scobj_hpath}/polariser/Freq control true
hsetprop ${scobj_hpath}/polariser/Freq data true
hsetprop ${scobj_hpath}/polariser/Freq mutable true
hsetprop ${scobj_hpath}/polariser/Freq nxsave true
hsetprop ${scobj_hpath}/polariser/Freq units Hertz
hsetprop ${scobj_hpath}/polariser/Freq oldval UNKNOWN
hsetprop ${scobj_hpath}/polariser/Freq klass "parameter"
hsetprop ${scobj_hpath}/polariser/Freq sdsinfo "::nexus::scobj::sdsinfo"
hsetprop ${scobj_hpath}/polariser/Freq type "part"
hsetprop ${scobj_hpath}/polariser/Freq nxalias "${name}_polariser_Freq"
hfactory ${scobj_hpath}/polariser/Phase plain user text
hsetprop ${scobj_hpath}/polariser/Phase control true
hsetprop ${scobj_hpath}/polariser/Phase data true
hsetprop ${scobj_hpath}/polariser/Phase mutable true
hsetprop ${scobj_hpath}/polariser/Phase nxsave true
hsetprop ${scobj_hpath}/polariser/Phase units Degree
hsetprop ${scobj_hpath}/polariser/Phase oldval UNKNOWN
hsetprop ${scobj_hpath}/polariser/Phase klass "parameter"
hsetprop ${scobj_hpath}/polariser/Phase sdsinfo "::nexus::scobj::sdsinfo"
hsetprop ${scobj_hpath}/polariser/Phase type "part"
hsetprop ${scobj_hpath}/polariser/Phase nxalias "${name}_polariser_Phase"
hfactory ${scobj_hpath}/polariser/Time2 plain user text
hsetprop ${scobj_hpath}/polariser/Time2 control true
hsetprop ${scobj_hpath}/polariser/Time2 data true
hsetprop ${scobj_hpath}/polariser/Time2 mutable true
hsetprop ${scobj_hpath}/polariser/Time2 nxsave true
hsetprop ${scobj_hpath}/polariser/Time2 units Second
hsetprop ${scobj_hpath}/polariser/Time2 oldval UNKNOWN
hsetprop ${scobj_hpath}/polariser/Time2 klass "parameter"
hsetprop ${scobj_hpath}/polariser/Time2 sdsinfo "::nexus::scobj::sdsinfo"
hsetprop ${scobj_hpath}/polariser/Time2 type "part"
hsetprop ${scobj_hpath}/polariser/Time2 nxalias "${name}_polariser_Time2"
hfactory ${scobj_hpath}/polariser/spin plain user text hfactory ${scobj_hpath}/polariser/spin plain user text
hsetprop ${scobj_hpath}/polariser/spin read ${ns}::getValue ${scobj_hpath} rdValue {polariser} hsetprop ${scobj_hpath}/polariser/spin read ${ns}::getValue ${scobj_hpath} rdValue {polariser}
hsetprop ${scobj_hpath}/polariser/spin rdValue ${ns}::rdValue ${scobj_hpath} hsetprop ${scobj_hpath}/polariser/spin rdValue ${ns}::rdValue ${scobj_hpath}
@ -232,7 +380,7 @@ proc ::scobj::he3_polanal::mkDriver { sct_controller name device_class simulatio
hsetprop ${scobj_hpath}/polariser/spin data true hsetprop ${scobj_hpath}/polariser/spin data true
hsetprop ${scobj_hpath}/polariser/spin mutable true hsetprop ${scobj_hpath}/polariser/spin mutable true
hsetprop ${scobj_hpath}/polariser/spin nxsave true hsetprop ${scobj_hpath}/polariser/spin nxsave true
hsetprop ${scobj_hpath}/polariser/spin values -1,+1 hsetprop ${scobj_hpath}/polariser/spin values +,-,0
hsetprop ${scobj_hpath}/polariser/spin oldval UNKNOWN hsetprop ${scobj_hpath}/polariser/spin oldval UNKNOWN
hsetprop ${scobj_hpath}/polariser/spin klass "parameter" hsetprop ${scobj_hpath}/polariser/spin klass "parameter"
hsetprop ${scobj_hpath}/polariser/spin sdsinfo "::nexus::scobj::sdsinfo" hsetprop ${scobj_hpath}/polariser/spin sdsinfo "::nexus::scobj::sdsinfo"