
/*********************************************************************
*                                                                     
*       OnProjectLoad                                                 
*                                                                     
* Function description                                                
*   Project load routine. Required.                                   
*                                                                     
**********************************************************************
*/                                                                    
void OnProjectLoad (void) {
  //
  // Dialog-generated settings
  //
  Project.SetDevice ("STM32F407VG");
  Project.SetHostIF ("USB", "");
  Project.SetTargetIF ("SWD");
  Project.SetTIFSpeed ("50 MHz");
  Project.AddSvdFile ("$(InstallDir)/Config/CPU/Cortex-M4F.svd");
  Project.AddPathSubstitute ("/Projects/btstack/port/stm32-f4discovery-cc256x/cubemx-f4discovery-cc256x", "$(ProjectDir)");
  Project.AddPathSubstitute ("/projects/btstack/port/stm32-f4discovery-cc256x/cubemx-f4discovery-cc256x", "$(ProjectDir)");
  //
  // User settings
  //
  File.Open ("$(ProjectDir)/EXAMPLE.elf");
}

/*********************************************************************
*                                                                     
*      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;                                     
//                                                                    
//  Exec.Reset();                                                     
//                                                                    
//  VectorTableAddr = Elf.GetBaseAddr();                              
//                                                                    
//  if (VectorTableAddr != 0xFFFFFFFF) {                              
//                                                                    
//    Util.Log("Resetting Program.");                               
//                                                                    
//    SP = Target.ReadU32(VectorTableAddr);                           
//    Target.SetReg("SP", SP);                                      
//                                                                    
//    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) {                            
    Util.Log("Project file error: failed to get program base"); 
  } else {                                                        
    SP = Target.ReadU32(VectorTableAddr);                         
    Target.SetReg("SP", SP);                                    
                                                                  
    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) {                            
    Util.Log("Project file error: failed to get program base"); 
  } else {                                                        
    SP = Target.ReadU32(VectorTableAddr);                         
    Target.SetReg("SP", SP);                                    
                                                                  
    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) {                                       
//}                                                                   
