[D
	
	
	/PowerUPDlg [P
		[A ]
		
		/PowerUPDlg 'Power UP' 368 140 Create:Form def
		'PowerUPLbl' '' 'Please power cycle the controller, then press OK!' 92 19 PowerUPDlg.AddLabel
		% add ok button
		75 25 PowerUPDlg.SetButtonSize
		'Ok' '' 'Ok' 1 146 70 PowerUPDlg.AddButton
		PowerUPDlg.Execute
		[A ]
	] 
	
	/RebootWithoutStart [P
		[A counts ]
		1 RebootDevice
		2000 wait
		/Stopped #0 def
		counts [B 
			PIVar:TalkIntf.StopProgram
			PIVar:TalkIntf.GetResult 0 eq PIVar:TalkIntf.GetResult $DA eq or [B 
				/Stopped #1 def
				ExitLoop 
			] if
		] repeat 
		Stopped not [B
			'StopProgram' '' PIVar:TalkIntf.GetResult PackInst:_RaiseTalkError           
		] if
		[A ]   
	]
	
	
	/LoadSW [P
		[A LoadFlag ]	% LoadFlag = False -> Check only if Files exist 	
		/OSSWFileName 'UPOS_' def
		
		/Result #1 def
		/MissingFile '' def
		
		/SWFile FilePath OSDir add '\' add OSSWFileName add EloTypeExt add '_V' add OSSWVersion cvs add 'S' add OSSWSubVersion cvs add def 
		OSSWBetaInfo '' ne [B
			/SWFile SWFile '_' add OSSWBetaInfo add def
		] if
		
		PIVar:TalkVersion $20 eq [B
			/SWFile SWFile '.HX2' add def		
		] 
		[B
			PIVar:TalkVersion $40 eq [B
				ProgFlag [B
				     /SWFile SWFile '.HX2' add def 
				] [B
					'Installation error 0x012 occurred. Please contact support.' raisese 
				] ifelse
			]
			[B
				/SWFile SWFile '.HX3' add def		
			] ifelse  
		] ifelse
		
		/TreeFile FilePath OSDir add '\' add OSTreeFileName add EloTypeExt add '_V' add OSTreeVersion cvs add 'S' add OSTreeSubVersion cvs add def 
		OSTreeBetaInfo '' ne [B
			/TreeFile TreeFile '_' add OSTreeBetaInfo add def
		] if
		/TreeFile TreeFile '.HX2' add def
		
		/DefaultParFile FilePath OSDir add '\' add OSTreeFileName add EloTypeExt add '_V' add OSTreeVersion cvs add 'S' add OSTreeSubVersion cvs add def
		OSTreeBetaInfo '' ne [B
			/DefaultParFile DefaultParFile '_' add OSTreeBetaInfo add def
		] if
		/DefaultParFile DefaultParFile '.Gr3' add def				
		
		Result [B
			SWFile FileExist not [B
				/Result #0 def 
				/MissingFile SWFile def
			] if
		] if
		
		Result [B
			TreeFile FileExist not [B
				/Result #0 def 
				/MissingFile TreeFile def
			] if
		] if
		
		Result [B
			DefaultParFile FileExist not [B
				/Result #0 def 
				/MissingFile DefaultParFile def
			] if
		] if
		
		
		Result LoadFlag and [B
			
			PIVar:TalkVersion $F0 and [B
				% B1100
				$40 [B
					%ResetDevice
					PIVar:PortType 'CAN' eq [B
						/MACIDSourceSel MACIDSourceSelAddr ReadMemory def
						/MACIDValue MACIDValueAddr ReadMemory def
					] if	
					
					
					PackInst:StopProgram	
					
					'Erasing firmware sectors...' log     
					$C04000 PackInst:EraseFlash
					$C06000 PackInst:EraseFlash
					$C08000 PackInst:EraseFlash
					$C10000 PackInst:EraseFlash
					
					'Downloading OS...' log
					
					ProgFlag PIVar:TalkVersion $0F and $00 eq and [B
						SWFile dup loadobj exch PackInst:DownloadHX2File		
					] [B
						SWFile dup loadobj exch PackInst:DownloadHX3File
					] ifelse
					
					MCInstallValidAddr InstallationValid WriteWordToElo
					
					%PIVar:TalkVersion $0F and $00 eq [B
					%SWFile dup loadobj exch PackInst:DownloadHX2File		
					%] [B
					%SWFile dup loadobj exch PackInst:DownloadHX3File		
					%] ifelse
					
					'Resetting Device...'log     			
					ResetDevice
					1000 Wait
					PackInst:StopProgram	
					
					$0 StartProgram
					%'Waiting for OS reply...' log     
					%[B
					%		2000 Wait      
					%		$0 ReadMemory 0 eq [B 
					%      '...OS started...' log
					%      exitloop 
					%   ] if	     
					%] loop 
					
					
					'Waiting until OS is ready...' log
					15000 wait
					PackInst:StopProgram
					
					MCInstallValidAddr InstallationInvalid WriteWordToElo
					
					%PackInst:StopProgram		
					'Erasing OS updater ...' log     
					$C08000 PackInst:EraseFlash		
					%5000 wait						  
					$C10000 PackInst:EraseFlash		
					%5000 wait						  
					
					'Downloading OS default parameters ...' log    
					DefaultParFile dup loadobj exch PackInst:DownloadGR3File
					
					
					PIVar:PortType 'CAN' eq [B
						MACIDSourceSelAddr MACIDSourceSel WriteWordToElo
						MACIDValueAddr MACIDValue WriteWordToElo
					] if	
					
					'Resetting Device...' log
					ResetDevice                                                                                            
					1000 Wait
					
					'Clearing Parameter Sections...' log
					/ClearFile FilePath OSDir add '\' add 'B1100_ParaClear.HX2' add def
					ClearFile dup loadobj exch PackInst:DownloadHX2File			

					'Resetting Device...' log
					ResetDevice                                                                                            
					1000 Wait
					
				]
				
				% E1250 / E1450 / B8050
				$30 [B
					/OSInstallCommandAddress	$D000181E	def
					PIVar:PortType 'ETH' eq ProgFlag not and [B
						/IPConfigMode IPConfigModeAddr ReadMemory def
						/DefGWConfigMode DefGWConfigModeAddr ReadMemory def
						% read the static IP address, network mask and gateway
						/IPAddressLo IPAddressAddr ReadMemory def
						/IPAddressHi IPAddressAddr 2 add ReadMemory def
						/NetMaskLo NetMaskAddr ReadMemory def
						/NetMaskHi NetMaskAddr 2 add ReadMemory def		
						/DefaultGatewayLo DefaultGatewayAddr ReadMemory def
						/DefaultGatewayHi DefaultGatewayAddr 2 add ReadMemory def										    																			
						% read the working IP address, network mask and gateway
						/IPAddressWorkLo IPAddressAddrWorking ReadMemory def
						/IPAddressWorkHi IPAddressAddrWorking 2 add ReadMemory def
						/NetMaskWorkLo NetMaskAddrWorking ReadMemory def
						/NetMaskWorkHi NetMaskAddrWorking 2 add ReadMemory def		
						/DefaultGatewayWorkLo DefaultGatewayAddrWorking ReadMemory def
						/DefaultGatewayWorkHi DefaultGatewayAddrWorking 2 add ReadMemory def										    
					] if	
					
					PIVar:PortType 'ETH' eq ProgFlag not and [B
						IPAddressAddr IPAddressWorkLo WriteWordToElo
						IPAddressAddr 2 add IPAddressWorkHi WriteWordToElo
						NetMaskAddr NetMaskWorkLo WriteWordToElo
						NetMaskAddr 2 add NetMaskWorkHi WriteWordToElo
						DefaultGatewayAddr DefaultGatewayWorkLo WriteWordToElo
						DefaultGatewayAddr 2 add DefaultGatewayWorkHi WriteWordToElo
						% set the config mode to static
						IPConfigModeAddr 2 WriteWordToElo
						DefGWConfigModeAddr 1 WriteWordToElo
					] if		
					
					20 OSLoader:RebootWithoutStart
					
					'Erasing firmware sectors...' log     
					$AFE00000 PackInst:EraseFlash % CURVE
					$AFE10000 PackInst:EraseFlash % CT		 
					$A0020000 PackInst:EraseFlash % MC and INTF Tree		
					$A0040000 PackInst:EraseFlash % INTF
					$A0180000 PackInst:EraseFlash % APPL
					$A0100000 PackInst:EraseFlash % MCSW			
					
					'Downloading OS...' log
					
					SWFile dup loadobj exch PackInst:DownloadHX3File % Load OS Updater 
									
					MCInstallValidAddr InstallationValid WriteWordToElo
					
					ResetDevice % AutoStart OS Updater after reset
					
					'Waiting for OS reply...' log     
					50000 wait	% to be modified
					
					'Downloading OS default parameters ...' log    
					DefaultParFile dup loadobj exch PackInst:DownloadGR3File
					
					PIVar:PortType 'ETH' eq ProgFlag not and [B
						IPAddressAddr IPAddressLo WriteWordToElo
						IPAddressAddr 2 add IPAddressHi WriteWordToElo
						NetMaskAddr NetMaskLo WriteWordToElo
						NetMaskAddr 2 add NetMaskHi WriteWordToElo
						DefaultGatewayAddr DefaultGatewayLo WriteWordToElo
						DefaultGatewayAddr 2 add DefaultGatewayHi WriteWordToElo
						% set the config modes to the old values
						IPConfigModeAddr IPConfigMode WriteWordToElo
						DefGWConfigModeAddr DefGWConfigMode WriteWordToElo
					] if																				
					
					MCInstallValidAddr InstallationInvalid WriteWordToElo
					
					'Clearing Parameter Sections...' log
					2 PIVar:TalkIntf.ClearInstancePar
					3 PIVar:TalkIntf.ClearInstancePar
					4 PIVar:TalkIntf.ClearInstancePar	
					
					% Write new Firmware message to controller
					/OSInstallCommand OSInstallCommandAddress ReadMemory def
					/OSInstallCommand OSInstallCommand $0001 or def
					OSInstallCommandAddress OSInstallCommand WriteWordToElo				
					
				]
				
				
				% E1100
				$20 [B
					ResetDevice
					15000 wait
					ResetDevice
					1000 wait
					PackInst:StopProgram		
					
					'Erasing firmware sectors...' log     
					$10000 PackInst:EraseFlash		
					$30000 PackInst:EraseFlash		
					$40000 PackInst:EraseFlash						
					$D0000 PackInst:EraseFlash		
					$E0000 PackInst:EraseFlash		
					$F0000 PackInst:EraseFlash		
					
					'Downloading OS...' log
					PIVar:TalkVersion $0F and $00 eq [B
						SWFile dup loadobj exch PackInst:DownloadHX2File		
					] [B
						SWFile dup loadobj exch PackInst:DownloadHX3File		
					] ifelse
					
					MCInstallValidAddr InstallationValid WriteWordToElo
					
					%PIVar:TalkVersion $0F and $00 eq [B
					%SWFile dup loadobj exch PackInst:DownloadHX2File
					%] [B
					%SWFile dup loadobj exch PackInst:DownloadHX3File
					%] ifelse
					'Resetting Device...'log     			
					ResetDevice
					15000 Wait
					
					'Starting OS...' log
					$10000 StartProgram
					'Waiting for OS reply...' log     
					[B
						2000 Wait      
						0 ReadMemory 0 eq [B 
							'...OS started...' log
							exitloop 
						] if	     
					] loop 
					'Waiting until OS is ready...' log
					5000 wait
					
					[B
						2000 Wait
						$A2FE ReadMemory 0 eq  [B 
							'...OS is ready' log
							exitloop 
						] if	     
					] loop
					
					MCInstallValidAddr InstallationInvalid WriteWordToElo
					
					'Erasing OS parameter sector...' log     
					$C0000 PackInst:EraseFlash		
					'Downloading OS parameter tree...' log    
					TreeFile dup loadobj exch PackInst:DownloadHX2File                
					
					ResetDevice
					8000 Wait
					
					'Downloading OS default parameters ...' log    
					DefaultParFile dup loadobj exch PackInst:DownloadGR3File
					
					'Resetting Device...' log
					ResetDevice                                                                                            
					
					[B
						3000 Wait
						$A2FE ReadMemory 0 eq  [B 
							'...OS is ready' log
							exitloop 
						] if	     
					] loop     

					'Clearing Parameter Sections...' log
					2 PIVar:TalkIntf.ClearInstancePar
					3 PIVar:TalkIntf.ClearInstancePar
					4 PIVar:TalkIntf.ClearInstancePar					
				]
			]
			[B
				%				
			] case
			
			
		] if
		[A /MissingFile /Result]
	]
	
]