/*********************************************************************
*               (c) SEGGER Microcontroller GmbH                      *
*                        The Embedded Experts                        *
*                           www.segger.com                           *
**********************************************************************
                                                                      
File          :                                                     
Created       : 17 Feb 2020  16:41                                                    
Ozone Version : V3.10c                                                    
*/

/*********************************************************************
*                                                                     
*       OnProjectLoad                                                 
*                                                                     
* Function description                                                
*   Project load routine. Required.                                   
*                                                                     
**********************************************************************
*/                                                                    
void OnProjectLoad (void) {
  //
  // Dialog-generated settings
  //
  Project.SetDevice ("R7FS1JA78");
  Project.SetHostIF ("USB", "831004110");
  Project.SetTargetIF ("SWD");
  Project.SetTIFSpeed ("50 MHz");
  Project.AddPathSubstitute ("/Volumes/[C] Windows 10.hidden/Users/mringwal/e2_studio/workspace/btstack_port", "$(ProjectDir)");
  Project.AddPathSubstitute ("C:/Users/mringwal/e2_studio/workspace/btstack_port", "$(ProjectDir)");
  Project.AddSvdFile ("$(InstallDir)/Config/CPU/Cortex-M23.svd");
  //
  // User settings
  //
  File.Open ("$(ProjectDir)/Debug/btstack_example.elf");
}

/*********************************************************************
*                                                                     
*       OnSnapshotLoad                                                
*                                                                     
* Function description                                                
*   Called upon loading a snapshot. Optional.                         
*                                                                     
* Additional information                                              
*   This function is used to restore the target state in cases        
*   where values cannot simply be written to the target.              
*   Typical use: GPIO clock needs to be enabled, before               
*   GPIO is configured.                                               
*                                                                     
**********************************************************************
*/                                                                    
//void OnSnapshotLoad (void) {                                        
//}                                                                   

/*********************************************************************
*                                                                     
*       OnSnapshotSave                                                
*                                                                     
* Function description                                                
*   Called upon saving a snapshot. Optional.                          
*                                                                     
* Additional information                                              
*   This function is usually used to save values of the target        
*   state which can either not be trivially read,                     
*   or need to be restored in a specific way or order.                
*   Typically use: Memory Mapped Registers,                           
*   such as PLL and GPIO configuration.                               
*                                                                     
**********************************************************************
*/                                                                    
//void OnSnapshotSave (void) {                                        
//}                                                                   

/*********************************************************************
*                                                                     
*       OnError                                                       
*                                                                     
* Function description                                                
*   Called when an error or unexpected condition ocurred. Optional.   
*                                                                     
**********************************************************************
*/                                                                    
//void OnError (const char* sErrorMsg) {                              
//}                                                                   

/*********************************************************************
*                                                                     
*      TargetReset                                                    
*                                                                     
* Function description                                                
*   Replaces the default target device reset routine. Optional.       
*                                                                     
* Notes                                                               
*   This example demonstrates the usage when                          
*   debugging a RAM program on a Cortex-M target device               
*                                                                     
**********************************************************************
*/                                                                    
//void TargetReset (void) {                                           
//                                                                    
//  unsigned int SP;                                                  
//  unsigned int PC;                                                  
//  unsigned int VectorTableAddr;                                     
//                                                                    
//  VectorTableAddr = Program.GetBaseAddr();                          
//                                                                    
//  if (VectorTableAddr != 0xFFFFFFFF) {                              
//    SP = Target.ReadU32(VectorTableAddr);                           
//    Target.SetReg("SP", SP);                                      
//  } else {                                                          
//    Util.Log("Project file error: failed to get program base");   
//  }                                                                 
//                                                                    
//  PC = Elf.GetEntryPointPC();                                       
//                                                                    
//  if (PC != 0xFFFFFFFF) {                                           
//    Target.SetReg("PC", PC);                                      
//  } else if (VectorTableAddr != 0xFFFFFFFF) {                       
//    PC = Target.ReadU32(VectorTableAddr + 4);                       
//    Target.SetReg("PC", PC);                                      
//}
/*********************************************************************
*                                                                     
*       BeforeTargetReset                                             
*                                                                     
* Function description                                                
*   Event handler routine. Optional.                                  
*                                                                     
**********************************************************************
*/                                                                    
//void BeforeTargetReset (void) {                                     
//}                                                                   

/*********************************************************************
*                                                                     
*       AfterTargetReset                                              
*                                                                     
* Function description                                                
*   Event handler routine.                                            
*    - Sets the PC register to program reset value.                   
*    - Sets the SP register to program reset value on Cortex-M.       
*                                                                     
**********************************************************************
*/                                                                    
void AfterTargetReset (void) {
  unsigned int SP;                                                
  unsigned int PC;                                                
  unsigned int VectorTableAddr;                                   
                                                                  
  VectorTableAddr = Elf.GetBaseAddr();                            
                                                                  
  if (VectorTableAddr != 0xFFFFFFFF) {                            
    SP = Target.ReadU32(VectorTableAddr);                         
    Target.SetReg("SP", SP);                                    
  } else {                                                        
    Util.Log("Project file error: failed to get program base"); 
  }                                                               
                                                                  
  PC = Elf.GetEntryPointPC();                                     
                                                                  
  if (PC != 0xFFFFFFFF) {                                         
    Target.SetReg("PC", PC);                                    
  } else if (VectorTableAddr != 0xFFFFFFFF) {                     
    PC = Target.ReadU32(VectorTableAddr + 4);                     
    Target.SetReg("PC", PC);                                    
  }
}

/*********************************************************************
*                                                                     
*       DebugStart                                                    
*                                                                     
* Function description                                                
*   Replaces the default debug session startup routine. Optional.     
*                                                                     
**********************************************************************
*/                                                                    
//void DebugStart (void) {                                            
//}                                                                   

/*********************************************************************
*                                                                     
*       TargetConnect                                                 
*                                                                     
* Function description                                                
*   Replaces the default target IF connection routine. Optional.      
*                                                                     
**********************************************************************
*/                                                                    
//void TargetConnect (void) {                                         
//}                                                                   

/*********************************************************************
*                                                                     
*       BeforeTargetConnect                                           
*                                                                     
* Function description                                                
*   Event handler routine. Optional.                                  
*                                                                     
**********************************************************************
*/                                                                    
//void BeforeTargetConnect (void) {                                   
//}                                                                   

/*********************************************************************
*                                                                     
*       AfterTargetConnect                                            
*                                                                     
* Function description                                                
*   Event handler routine. Optional.                                  
*                                                                     
**********************************************************************
*/                                                                    
//void AfterTargetConnect (void) {                                    
//}                                                                   

/*********************************************************************
*                                                                     
*       TargetDownload                                                
*                                                                     
* Function description                                                
*   Replaces the default program download routine. Optional.          
*                                                                     
**********************************************************************
*/                                                                    
//void TargetDownload (void) {                                        
//}                                                                   

/*********************************************************************
*                                                                     
*       BeforeTargetDownload                                          
*                                                                     
* Function description                                                
*   Event handler routine. Optional.                                  
*                                                                     
**********************************************************************
*/                                                                    
//void BeforeTargetDownload (void) {                                  
//}                                                                   

/*********************************************************************
*                                                                     
*      AfterTargetDownload                                            
*                                                                     
* Function description                                                
*   Event handler routine.                                            
*    - Sets the PC register to program reset value.                   
*    - Sets the SP register to program reset value on Cortex-M.       
*                                                                     
**********************************************************************
*/                                                                    
void AfterTargetDownload (void) {
  unsigned int SP;                                                
  unsigned int PC;                                                
  unsigned int VectorTableAddr;                                   
                                                                  
  VectorTableAddr = Elf.GetBaseAddr();                            
                                                                  
  if (VectorTableAddr != 0xFFFFFFFF) {                            
    SP = Target.ReadU32(VectorTableAddr);                         
    Target.SetReg("SP", SP);                                    
  } else {                                                        
    Util.Log("Project file error: failed to get program base"); 
  }                                                               
                                                                  
  PC = Elf.GetEntryPointPC();                                     
                                                                  
  if (PC != 0xFFFFFFFF) {                                         
    Target.SetReg("PC", PC);                                    
  } else if (VectorTableAddr != 0xFFFFFFFF) {                     
    PC = Target.ReadU32(VectorTableAddr + 4);                     
    Target.SetReg("PC", PC);                                    
  }
}

/*********************************************************************
*                                                                     
*       BeforeTargetDisconnect                                        
*                                                                     
* Function description                                                
*   Event handler routine. Optional.                                  
*                                                                     
**********************************************************************
*/                                                                    
//void BeforeTargetDisconnect (void) {                                
//}                                                                   

/*********************************************************************
*                                                                     
*       AfterTargetDisconnect                                         
*                                                                     
* Function description                                                
*   Event handler routine. Optional.                                  
*                                                                     
**********************************************************************
*/                                                                    
//void AfterTargetDisconnect (void) {                                 
//}                                                                   

/*********************************************************************
*                                                                     
*       AfterTargetHalt                                               
*                                                                     
* Function description                                                
*   Event handler routine. Optional.                                  
*                                                                     
**********************************************************************
*/                                                                    
//void AfterTargetHalt (void) {                                       
//}