%{ #ifdef SERVER #include "nortlib.h" #include "subbus.h" #include "msg.h" #include "da_cache.h" #include "status.h" #define RUNNUM_V1 #include "runnum.h" #include "dm5406.h" unsigned char SWStat1 = 0; void SetFlowVal( unsigned short channel, unsigned short bitval ) { if ( channel > 1 ) { msg( 2, "Invalid channel number %u in SetFlowPct", channel ); } else { bitval = (bitval > 4095 ) ? 4095 : bitval; DM_DAC_Write ( channel, bitval); cache_write( 0x100A + channel, bitval ); } } int srvr_runHasBegun(void) { return runHasBegun( SWStat1 ); } #ifdef RUNNUM_V1 void srvr_BeginRun( unsigned short runnum ) { #else void srvr_BeginRun( unsigned short runnum, run_params *rp ) { rp = rp; #endif cache_write( 0x1008, runnum ); SWStat1 |= RUNFLAG; SWStat1 &= ~ABORTFLAG; cache_write( 0x1000, SWStat1 ); } #endif %} &command : ADIO &ADIO_cmd : Data &data_cmd : Run &run_cmd : SetDefaults &set_type : &strb_cmd * { send_dascmd(DCT_SCDC, $1, 0 ); } : &set_cmd &on_off * { DigSelect( $1, $2 ); } : Soldrv Select Mode %d (Enter Mode Number) * { send_dascmd(DCT_SOLDRV_A, $4, 0); } : XS Flow &xs_cmd : Oxygen Flow &oxygen_cmd : Argon Flow &argon_cmd : Hydrogen Flow &hydrogen_cmd : Purge Flow &purge_cmd : Carrier Flow &carrier_cmd : NO2 Flow &no2_cmd : Ozone Set &flow_pct * { cache_write( 0xC60, $3 ); } ; &carrier_cmd : &on_off * { DigSelect( 0, $1 ); } : Set &flow_pct * { cache_write( 0xC62, $2/2 ); } ; &xs_cmd : &on_off * { DigSelect( 2, $1 ); } : Set &flow_pct * { SetFlowVal( 0, $2 ); } ; &no2_cmd : &on_off * { DigSelect( 11, $1 ); } : Set &flow_pct * { cache_write( 0xC6E, $2/2 ); } ; &oxygen_cmd : &on_off * { DigSelect( 3, $1 ); } : Set &flow_pct * { SetFlowVal( 1, $2 ); } ; &argon_cmd : &on_off * { DigSelect( 8, $1 ); } : Set &flow_pct * { cache_write( 0xC68, $2/2 ); } ; &hydrogen_cmd : &on_off * { DigSelect( 9, $1 ); } : Set &flow_pct * { cache_write( 0xC6A, $2/2 ); } ; &purge_cmd : &on_off * { DigSelect( 10, $1 ); } : Set &flow_pct * { cache_write( 0xC6C, $2/2 ); } ; &set_cmd : Top FCB Ch 1 Flow { $0 = 0; } : Top FCB Ch 3 Flow { $0 = 2; } : Top FCB Ch 4 Flow { $0 = 3; } : Bottom FCB Ch 1 Flow { $0 = 8; } : Bottom FCB Ch 2 Flow { $0 = 9; } : Bottom FCB Ch 3 Flow { $0 = 10; } : Bottom FCB Ch 4 Flow { $0 = 11; } ; &strb_cmd : &on_off_cmd &on_off { $0 = $1 + 1 - $2; } ; &on_off_cmd : Switch 0 { $0 = 16; } : Switch 1 { $0 = 18; } : Manifold Vacuum { $0 = 18; } : Switch 2 { $0 = 20; } : Manifold Nitrogen { $0 = 20; } : Switch 3 { $0 = 22; } : Manifold Dual { $0 = 22; } : Switch 4 { $0 = 24; } : Manifold Bulb 1 { $0 = 24; } : Switch 5 { $0 = 26; } : Manifold Bulb 2 { $0 = 26; } : Switch 6 { $0 = 28; } : Manifold Bulb 3 { $0 = 28; } : Switch 7 { $0 = 30; } : Manifold Main { $0 = 30; } : Switch 8 { $0 = 32; } : Switch 9 { $0 = 34; } : Switch 10 { $0 = 36; } : Switch 11 { $0 = 38; } : Switch 12 { $0 = 40; } : Switch 13 { $0 = 42; } : Switch 14 { $0 = 44; } : Switch 15 { $0 = 46; } ; &on_off : On { $0 = 1; } : Off { $0 = 0; } ; &data_cmd : Soft 1 Set %f * { cache_fwrite( 0x1003, $4 ); } : Soft 2 Set %f * { cache_fwrite( 0x1005, $4 ); } : Soft 3 Set %d * { cache_write( 0x1007, $4 ); } ; &ADIO_cmd : Channel %d set &flow_pct * { unsigned int channel = (0xC60 + 2 * $2); cache_write( channel, $4 ); msg( 0, "Setting channel %d to %d", channel, $4); } ; &run_cmd : Abort * { if ( SWStat1 & RUNFLAG ) { SWStat1 |= ABORTFLAG; SWStat1 &= ~RUNFLAG; cache_write( 0x1000, SWStat1 ); } else msg( 2, "Run Abort while Run not Active" ); } : &run_type : End * { if ( SWStat1 & RUNFLAG ) { cache_write( 0x1002, 0 ); /* scanningCycle */ SWStat1 &= ~RUNFLAG; cache_write( 0x1000, SWStat1 ); } else msg( 2, "Run End while Run not Active" ); } : Set Scan Cycle %d * { cache_write( 0x1002, $4 ); } ; &flow_pct : %f (percent full scale) { unsigned short ov; if ( $1 < 0 ) ov = 0; else if ( $1 >= 99.9 ) ov = 4095; else ov = $1 * 40.96; $0 = ov; } ; &command : Adjustable Gate Delay &adjv Width &adjv * { sbwr(0x64E, ($4 << 8) + $6); } ; &adjv : %d (Enter 0-255) { $0 = ($1 < 0) ? 0 : (($1 > 255) ? 255 : $1); } ;