44 IfcInstrumentStatus ,
55 IfcPVWSMessage ,
66 IfcPVWSRequest ,
7+ PVWSRequestType ,
78 targetStation ,
89} from "@/app/types" ;
910import useWebSocket from "react-use-websocket" ;
@@ -12,6 +13,7 @@ import { instListFromBytes } from "@/app/components/dehex_and_decompress";
1213import {
1314 updateInstrumentRunstate ,
1415 updateInstrumentRunstatePV ,
16+ updateTargetStationBeamCurrent ,
1517} from "@/app/wall/utils" ;
1618import TargetStation from "@/app/components/TargetStation" ;
1719import ScienceGroup from "@/app/components/ScienceGroup" ;
@@ -52,6 +54,7 @@ export default function InstrumentsDisplay({
5254 const [ data , setData ] = useState < Array < targetStation > > ( [
5355 {
5456 targetStation : "Target Station 1" ,
57+ beamCurrentPv : "AC:TS1:BEAM:CURR" ,
5558 instruments : [
5659 { name : "ALF" } ,
5760 { name : "ARGUS" } ,
@@ -86,6 +89,7 @@ export default function InstrumentsDisplay({
8689 } ,
8790 {
8891 targetStation : "Target Station 2" ,
92+ beamCurrentPv : "AC:TS2:BEAM:CURR" ,
8993 instruments : [
9094 { name : "CHIPIR" } ,
9195 { name : "IMAT" } ,
@@ -146,10 +150,16 @@ export default function InstrumentsDisplay({
146150 shouldReconnect : ( closeEvent ) => true ,
147151 } ) ;
148152
153+ const targetStationCurrentPvs = data . map ( ( ts ) => ts . beamCurrentPv ) . filter ( ( pv ) => pv !== undefined ) ;
154+
149155 useEffect ( ( ) => {
150156 // On page load, subscribe to the instrument list as it's required to get each instrument's PV prefix.
151157 sendJsonMessage ( instListSubscription ) ;
152- } , [ sendJsonMessage ] ) ;
158+ sendJsonMessage ( {
159+ type : PVWSRequestType . subscribe ,
160+ pvs : targetStationCurrentPvs ,
161+ } )
162+ } , [ sendJsonMessage , targetStationCurrentPvs ] ) ;
153163
154164 useEffect ( ( ) => {
155165 // This is a PV update, it could be either the instlist or an instrument's runstate that has changed
@@ -161,25 +171,30 @@ export default function InstrumentsDisplay({
161171 const updatedPVName : string = updatedPV . pv ;
162172 const updatedPVbytes : string | null | undefined = updatedPV . b64byt ;
163173 let updatedPVvalue : string | null | undefined = updatedPV . text ;
174+ let updatedPVnum : number | null | undefined = updatedPV . value ;
164175
165176 if ( updatedPVName == instListPV && updatedPVbytes != null ) {
166177 const instListDict = instListFromBytes ( updatedPVbytes ) ;
167178 for ( const instrument of instListDict ) {
168179 setData ( ( prev ) => {
169180 return updateInstrumentRunstatePV (
170- prev ,
171- instrument ,
172- runstatePV ,
173- sendJsonMessage ,
181+ prev ,
182+ instrument ,
183+ runstatePV ,
184+ sendJsonMessage ,
174185 ) ;
175186 } ) ;
176187 }
188+ } else if ( targetStationCurrentPvs . includes ( updatedPVName ) ) {
189+ setData ( ( prev ) => {
190+ return updateTargetStationBeamCurrent ( prev , updatedPVName , updatedPVnum ) ;
191+ } ) ;
177192 } else if ( updatedPVvalue ) {
178193 setData ( ( prev ) => {
179194 return updateInstrumentRunstate ( prev , updatedPVName , updatedPVvalue ) ;
180195 } ) ;
181196 }
182- } , [ lastJsonMessage , sendJsonMessage ] ) ;
197+ } , [ lastJsonMessage , sendJsonMessage , targetStationCurrentPvs ] ) ;
183198
184199 return (
185200 < div >
@@ -198,6 +213,7 @@ export default function InstrumentsDisplay({
198213 key = { targetStation . targetStation }
199214 name = { targetStation . targetStation }
200215 instruments = { targetStation . instruments }
216+ beamCurrent = { targetStation . beamCurrent }
201217 />
202218 ) ;
203219 } ) }
0 commit comments