open-insight/LSL2/STPROC/RDS_LAYER_EVENTS.txt
Infineon\StieberD 7762b129af pre cutover push
2024-09-04 20:33:41 -07:00

422 lines
16 KiB
Plaintext

Compile function RDS_LAYER_EVENTS(CtrlEntId, Event, @PARAMS)
/***********************************************************************************************************************
This program is proprietary and is not to be used by or disclosed to others, nor is it to be copied without written
permission from Infineon.
Name : RDS_LAYER_EVENTS
Description : This function acts as a commuter module for all events related to this window.
Notes : Commuter Modules are automatically called from the Promoted_Events function which is called by the
application-specific promoted event handler. This makes it possible to add QuickEvents that need to
execute Basic+ logic without having use the Form Designer to make the association, although this is
limited to the events which are currently promoted.
If the form needs to call the commuter module directly then the QuickEvent parameters should be
formatted like this:
'@SELF','@EVENT',['@PARAM1','@PARAMx']
Parameters :
CtrlEntId [in] -- The fully qualified name of the control calling the promoted event
Event [in] -- The event being executed. See the Notes section regarding "PRE" events
Param1-15 [in] -- Additional event parameter holders
EventFlow [out] -- Set to 1 or 0 so the calling event knows whether or not to chain forward. See comments in
EVENT_SETUP insert
History : (Date, Initials, Notes)
10/04/18 djs Created initial commuter module.
10/12/18 djs Added a check to see if PSN and Reactor are set before attempting to set current run
parameters. If a Reactor has not yet been assigned to this RDS, then the code fetches
the scheduled reactor for this work order.
***********************************************************************************************************************/
#pragma precomp SRP_PreCompiler
#window RDS_LAYER
$Insert RDS_EQUATES
$Insert APP_INSERTS
$Insert RLIST_EQUATES
$Insert SECURITY_RIGHTS_EQU
$Insert DICT_EQUATES
EQU COL$MET_NO TO 1
EQU COL$ZONE TO 2
EQU COL$THICK_AVG TO 3
EQU COL$THICK_STDV TO 4
EQU COL$RES_AVG TO 5
EQU COL$RES_STDV TO 6
EQU COL$RES_UNITS TO 7
EQU COL$OUT_OF_SPEC TO 8
EQU HIDDEN$ TO 32
Declare subroutine Comm_RDS_Layer, Tool_Parms_Services, Set_Status, RList, Errmsg, Database_Services, Msg
Declare subroutine PlaceDialog, obj_RDS_Layer, Security_Err_Msg
Declare function Tool_Parms_Services, Get_Property, Database_Services, Security_Check, MemberOf
GoToEvent Event for CtrlEntId else
// Event not implemented
end
Return EventFlow or 1
//-----------------------------------------------------------------------------
// EVENT HANDLERS
//-----------------------------------------------------------------------------
Event WINDOW.CREATE(CreateParam)
RDSLayerID = CreateParam
RDSNo = Field(RDSLayerID, '*', 1, 1)
LayerID = Field(RDSLayerID, '*', 2, 1)
Set_Property(@Window:'.RDS_NO', 'TEXT', RDSNo)
Set_Property(@Window:'.LS_ID', 'TEXT', LayerID)
// Center window in middle of user's screen
PlaceDialog( -2, -2 )
Send_Event(@Window, 'READ')
GoSub Refresh
end event
Event WINDOW.READ()
CurrRecord = Get_Property(@WINDOW,'RECORD')
Set_Property(@WINDOW,'@ORG_RECORD',CurrRecord)
end event
Event WINDOW.WRITE()
CurrRecord = Get_Property(@WINDOW,'RECORD')
OrgRecord = Get_Property(@WINDOW,'@ORG_RECORD')
IF CurrRecord NE OrgRecord THEN
CurrDTM = OCONV(Date(),'D4/'):' ':OCONV(Time(),'MTS')
NewLine = @USER4:@VM:CurrDTM
Send_Message(@WINDOW:'.MODIFY_USER','INSERT',1,NewLine)
END
IOOptions = Get_Property(@Window, 'IOOPTIONS')
IOOptions<6> = 1
Set_Property(@Window, 'IOOPTIONS', IOOptions)
Set_Status(0)
Forward_Event()
errCode = ''
If Get_Status(errCode) then ErrMsg('Save failed. Error code: ':errCode)
Post_Event(@WINDOW,'CLOSE')
* end else
*
* MsgHead = 'Default Run Parameters'
* MsgText = 'Would you like to use these parameters as the default for future lots?'
*
* Response = Msg(@WINDOW,'','YESNO','',MsgHead:@FM:MsgText)
*
* IF Response EQ True$ THEN
*
* RDSNo = Get_Property(@Window : '.RDS_NO', 'TEXT')
* Database_Services('ActivateRecord', 'RDS', RDSNo)
* WorkOrder = {WO}
* ReactorNo = {REACTOR}
* PSN = {PROD_SPEC_ID}
* If PSN NE '' then
* If ReactorNo EQ '' then
* ReactorNo = {SCHED_REACTOR}
* If ReactorNo EQ '' then
* ErrorMsg = 'No scheduled reactor found for work order: ':WorkOrder:'. Could not apply current ':@SVM |
* : 'run parameters. Please assign a reactor to this RDS first.'
* ErrMsg(ErrorMsg)
* return
* end
* end
* // Create a new TOOL_PARMS record, which is the "master" parameter record.
* Tool_Parms_Services('CreateToolParmsRec', PSN, ReactorNo, RDSNo)
* If Error_Services('NoError') then
* Msg(@Window, '', 'SUCCESS', '', 'Run parameters have been set for reactor ':ReactorNo)
* end else
* Errmsg('Error setting run parameters. Error message: ':Error_Services('GetMessage'))
* end
* end else
* ErrorMsg = 'No PSN assigned to this RDS. Could not apply current ':@SVM |
* : 'run parameters. Please assign a PSN to this RDS first.'
* ErrMsg(ErrorMsg)
* return
* end
* end
* end
end event
* Event BTN_SET_CURR_RUN_PARMS.CLICK()
*
* // Use new RDS_LAYER parameters to create a new TOOL_PARMS record.
* // Then apply the new TOOL_PARMS to all RDS records in this work order on this reactor.
* // Note: If a reactor has not yet been assigned to an RDS in this work order, then
* // the TOOL_PARMS will be applied anyways as a convenience. Should the RDS be
* // reassigned to another reactor later, the appropriate TOOL_PARMS will be applied
* // by the RDS_ACTIONS MFS.
*
* Savewarn = Get_Property(@Window, 'SAVEWARN')
* Set_Property(@Window, '@SKIPSCRIPT', True$)
* If Savewarn EQ True$ then
* IOOptions = Get_Property(@Window, 'IOOPTIONS')
* IOOptions<6> = 1
* Set_Property(@Window, 'IOOPTIONS', IOOptions)
* Send_Event(@Window, 'WRITE')
* end
* RDSNo = Get_Property(@Window : '.RDS_NO', 'TEXT')
* Database_Services('ActivateRecord', 'RDS', RDSNo)
* WorkOrder = {WO}
* ReactorNo = {REACTOR}
* PSN = {PROD_SPEC_ID}
* If PSN NE '' then
* If ReactorNo EQ '' then
* ReactorNo = {SCHED_REACTOR}
* If ReactorNo EQ '' then
* ErrorMsg = 'No scheduled reactor found for work order: ':WorkOrder:'. Could not apply current ':@SVM |
* : 'run parameters. Please assign a reactor to this RDS first.'
* ErrMsg(ErrorMsg)
* return
* end
* end
* // Create a new TOOL_PARMS record, which is the "master" parameter record.
* Tool_Parms_Services('CreateToolParmsRec', PSN, ReactorNo, RDSNo)
* // Apply new TOOL_PARMS record to all RDS_LAYERS in this run without an unload signature.
* Tool_Parms_Services('ApplyCurrentRunParms', PSN, ReactorNo)
* If Error_Services('NoError') then
* Msg(@Window, '', 'SUCCESS', '', 'Run parameters have been set for reactor ':ReactorNo)
* end else
* Errmsg('Error setting run parameters. Error message: ':Error_Services('GetMessage'))
* end
* end else
* ErrorMsg = 'No PSN assigned to this RDS. Could not apply current ':@SVM |
* : 'run parameters. Please assign a PSN to this RDS first.'
* ErrMsg(ErrorMsg)
* return
* end
*
* end event
Event PUB_CONFIRM_PARMS.CLICK()
RDSNo = Get_Property(@Window:'.RDS_NO', 'TEXT')
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
RDSRec<RDS_RDS_LAYER_ACK$> = True$
Database_Services('WriteDataRow', 'RDS', RDSNo, RDSRec, True$, False$, True$)
Set_Property(@Window:'.PUB_CONFIRM_PARMS', 'ENABLED', False$)
Set_Property(@Window:'.PUB_CONFIRM_PARMS', 'HELPTEXT', 'Confirmation not required.')
Post_Event(@Window, 'CLOSE')
end event
Event PUB_UPDATE_LIMITS.CLICK()
IF Security_Check( 'Recipe', Write$ ) or MemberOf(@User4, 'ENGINEERING_LEAD') or MemberOf(@User4, 'ENGINEERING') THEN
RDSNo = Get_Property(@WINDOW:'.RDS_NO','DEFPROP')
LSId = Get_Property(@WINDOW:'.LS_ID','DEFPROP')
IF RDSNo EQ '' OR LSId EQ '' THEN RETURN
IOOptions = Get_Property(@Window, 'IOOPTIONS')
IOOptions<6> = 1
Set_Property(@Window, 'IOOPTIONS', IOOptions)
Send_Event(@WINDOW,'WRITE')
obj_RDS_Layer('UpdateLimits',RDSNo:@RM:LSId)
IF Get_Status(errCode) THEN ErrMsg(errCode)
Send_Event(@Window, 'READ')
END ELSE
Security_Err_Msg( 'Recipe', Write$ )
END
end event
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Internal GoSubs
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
ClearCursors:
For counter = 0 to 8
ClearSelect counter
Next counter
return
Refresh:
LSId = Get_Property(@WINDOW:'.LS_ID','TEXT')
BEGIN CASE
CASE LSId = 'L1'
Set_Property(@WINDOW:'.LS_ID','BACKCOLOR',RCV_BLUE$)
CASE LSId = 'L2'
Set_Property(@WINDOW:'.LS_ID','BACKCOLOR',PRE_BLUE$)
CASE LSId = '2'
Set_Property(@WINDOW:'.LS_ID','BACKCOLOR',INP_BLUE$)
CASE 1
Set_Property(@WINDOW:'.LS_ID','BACKCOLOR',KEY_YELLOW$)
END CASE
Set_Property(@WINDOW:'.OVERRIDE_LIMITS_GROUP','ENABLED',0)
RDSNo = Get_Property( @WINDOW:'.RDS_NO', 'DEFPROP' )
RDSRec = XLATE('RDS',RDSNo,'','X')
LayerSetID = Get_Property(@WINDOW:'.LS_ID','DEFPROP')
PSNId = RDSRec< RDS_PROD_SPEC_ID$ >
RecipeNo = Get_Property(@WINDOW:'.RECIPE_NO','DEFPROP')
RecipeParms = Get_Property(@WINDOW:'.RECIPE_PARMS','ARRAY') ;* Entered by user
RecipeLimits = Get_Property(@WINDOW:'.RECIPE_LIMITS','LIST')<1>
CONVERT @VM TO @FM IN RecipeLimits
ColCnt = COUNT(RecipeLimits,@FM) + (RecipeLimits NE '') ;* This is 16 columns as of the development of this window
RecipeParms = Get_Property(@WINDOW:'.RECIPE_PARMS','ARRAY')
ParameterStyles = Send_Message( @WINDOW:'.RECIPE_PARMS', "COLSTYLE", 0, '' )
LimitStyles = Send_Message( @WINDOW:'.RECIPE_LIMITS', "COLSTYLE", 0, '' )
CONVERT @VM TO '' IN RecipeParms
ColNames = Get_Property( @WINDOW:'.RECIPE_PARMS', 'COLUMN' )
OutOfSpecCols = ''
FOR Col = 1 TO ColCnt
IF RecipeLimits<Col> = '' AND RecipeParms<Col> = '' THEN
ParameterStyles<Col> = BitOr( ParameterStyles<Col>, HIDDEN$ ) ;* Column not used -> Hide
LimitStyles<Col> = BitOr( LimitStyles<Col>, HIDDEN$ )
END ELSE
ParameterStyles<Col> = BitAnd( ParameterStyles<Col>, BitNot(HIDDEN$) ) ;* Column used -> Show
LimitStyles<Col> = BitAnd( LimitStyles<Col>, BitNot(HIDDEN$) )
LimitData = RecipeLimits<Col>
ParamData = RecipeParms<Col>
ColName = ColNames<1,1,Col>
Conversion = XLATE('DICT.RDS_LAYER',ColName,DICT_CONV$,'X')
SWAP ' ~ ' WITH @VM IN LimitData
IF Conversion NE '' THEN
ParamData = ICONV(ParamData,Conversion)
LimitData = ICONV(LimitData,Conversion)
END
Minimum = LimitData<1,1>
Maximum = LimitData<1,2>
IF ParamData NE '' THEN
IF ParamData < Minimum OR ParamData > Maximum THEN
Send_Message(@WINDOW:'.RECIPE_PARMS','COLOR_BY_POS',Col,1,RED$)
OutOfSpecCols = INSERT(OutOfSpecCols,Col,0,0,1)
END ELSE
Send_Message(@WINDOW:'.RECIPE_PARMS','COLOR_BY_POS',Col,1,WHITE$)
END
END ELSE
Send_Message(@WINDOW:'.RECIPE_PARMS','COLOR_BY_POS',Col,1,WHITE$)
END
END
NEXT Col
LOCATE '1' IN OutOfSpecCols USING @FM SETTING Pos THEN
Set_Property(@WINDOW:'.OUT_OF_SPEC','CHECK',1)
END ELSE
Set_Property(@WINDOW:'.OUT_OF_SPEC','CHECK',0)
END
Parameter_Styles = Send_Message( @WINDOW:'.RECIPE_PARMS', "COLSTYLE", 0, ParameterStyles )
LimitStyles = Send_Message( @WINDOW:'.RECIPE_LIMITS', "COLSTYLE", 0, LimitStyles )
* Set_Property( @WINDOW:'.RECIPE_INFO', "AUTOSIZECOL", 16 )
* Set_Property( @WINDOW:'.RECIPE_LIMITS', "AUTOSIZECOL", 16 )
* QBF buttons
Ctrls = @WINDOW:'.QBF_FIRST_FIX':@RM ; Props = 'ENABLED':@RM
Ctrls := @WINDOW:'.QBF_PREV_FIX':@RM ; Props := 'ENABLED':@RM
Ctrls := @WINDOW:'.QBF_ABS_FIX':@RM ; Props := 'ENABLED':@RM
Ctrls := @WINDOW:'.QBF_NEXT_FIX':@RM ; Props := 'ENABLED':@RM
Ctrls := @WINDOW:'.QBF_LAST_FIX':@RM ; Props := 'ENABLED':@RM
Ctrls := @WINDOW:'.QBF_STOP_FIX' ; Props := 'ENABLED'
IF Get_Property(@WINDOW,'QBFLIST') = '' THEN
Vals = 0:@RM:0:@RM:0:@RM:0:@RM:0:@RM:0
END ELSE
Vals = 1:@RM:1:@RM:1:@RM:1:@RM:1:@RM:1
END
Set_Property(Ctrls,Props,Vals)
* Turn edit table symbolic column backgrounds to green
ETSymbolics = Get_Property(@WINDOW,'@ET_SYMBOLICS') ;* Loaded during 'Create' in obj_Appwindow
ETCtrls = ETSymbolics<1>
ETCols = ETSymbolics<2>
FOR I = 1 TO COUNT(ETCtrls,@VM) + (ETCtrls NE '')
ETCtrl = ETCtrls<1,I>
ETList = Get_Property(ETCtrl,'LIST')
FOR Line = 1 TO COUNT(ETList,@FM) + (ETList NE '')
IF ETList<Line,1> NE '' THEN
FOR N = 1 TO COUNT(ETCols<1,I>,@SVM) + (ETCols<1,I> NE '')
stat = Send_Message(ETCtrl,'COLOR_BY_POS',ETCols<1,I,N>,Line,GREEN$)
NEXT N
END
NEXT I
NEXT I
TestList = Get_Property(@WINDOW:'.RDS_TEST_KEYS','LIST')
FOR I = 1 TO COUNT(TestList,@FM) + (TestList NE '')
IF ICONV(TestList<I,COL$OUT_OF_SPEC>,'B') = 1 THEN
Send_Message(@WINDOW:'.RDS_TEST_KEYS','COLOR_BY_POS',0,I,RED$)
END ELSE
Send_Message(@WINDOW:'.RDS_TEST_KEYS','COLOR_BY_POS',0,I,WHITE$)
END
NEXT I
* RPCopy = RecipeParms
* Convert @FM to '' in RPCopy
* If RPCopy EQ '' then
* Set_Property(@Window : '.BTN_SET_CURR_RUN_PARMS', 'ENABLED', False$)
* end else
* Set_Property(@Window : '.BTN_SET_CURR_RUN_PARMS', 'ENABLED', True$)
* end
IsTestWafer = Xlate('RDS', RDSNo, 'ON_TW_FREQ', 'X')
RDSLayerAck = RDSRec<RDS_RDS_LAYER_ACK$>
If ( (IsTestWafer EQ True$) and ( (RDSLayerAck EQ False$) or (RDSLayerAck EQ '') ) ) then
Set_Property(@Window:'.PUB_CONFIRM_PARMS', 'ENABLED', True$)
end else
Set_Property(@Window:'.PUB_CONFIRM_PARMS', 'ENABLED', False$)
Set_Property(@Window:'.PUB_CONFIRM_PARMS', 'HELPTEXT', 'Confirmation not required.')
end
RETURN