# This list of files to ignore includes common, tool- or user-specific files that
# are typically not checked into a version control system (VCS). It is a superset
# of such files. You may want to add others, especially if you use a tool not listed
# here. You can remove those that do not apply to you.
#
# The .gitignore file is intended for the git VCS. For another VCS you would specify
# which files to ignore in whatever form your VCS requires. If you do not check your
# code into a VCS, you can ignore the .gitignore file.

# ModusToolbox library repos or information about library dependencies
libs/

# Eclipse IDE for ModusToolbox files
.metadata/
# .cyignore
# .settings/
# .cproject
# .project
# .mtbLaunchConfigs/

# ModusToolbox Configurator generated code
GeneratedSource/

# ModusToolbox build system output
build/
Debug/
Release/
*_build/

# Visual Studio Code
openocd.tcl
.vscode/
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json

# IAR Embedded Workbench files

# IAR Project file.
# *.ewp

# IAR Settings
/settings/

# Uncomment this if not using project connections
# *.ipcf

# Comment this out if using custom argument variables
*.custom_argvars

# IAR Debugger Settings
# *.ewd

# Comment this out if you use C-Stat or C-Run to compile/analyze your project
*.ewt

# IAR Workspace files
# *.eww

# IAR Debug Exe
/Debug/Exe/

# IAR Debug List
/Debug/List

# IAR Debug Obj
/Obj/*.pbd
/Obj/*.pbd.*
/Obj/*.pbi
/Obj/*.pbi.*

# Log files
*.log

# IAR backup files
Backup*

# IAR dependency files
*.dep

# Compiled Binaries
*.bin
*.elf
*.hex
*.map

# Trash files
*.bak


# Keil uVision files

# Project and package description files
*.cpdsc
*.gpdsc

# uVision Project file (generated by uVision). Uncomment this if do not want to track the Keil uVision project file
# *.uvprojx (is used to build the project from scratch)

# Project options file (contains information about the debugger and trace configuration)
# *.uvoptx

# Project file for multi-project workspaces
# *.uvmpw

# Project screen layout file
*.uvguix.*

# Configuration files for the run-time environment
# RTE/

# Generated output files
*.lst
*.map

# Eclipse workspace/user-specific files/settings/caches
.metadata/
# .settings/

# Vi and Emacs backup files
*~
\#*\#
[._]*.s[a-v][a-z]
[._]*.sw[a-p]
[._]s[a-rt-v][a-z]
[._]ss[a-gi-z]
[._]sw[a-p]

# Created by git when using merge tools for conflicts
*.BACKUP.*
*.BASE.*
*.LOCAL.*
*.REMOTE.*
*_BACKUP_*.txt
*_BASE_*.txt
*_LOCAL_*.txt
*_REMOTE_*.txt

# macOS Finder incidental files
.DS_Store

# Windows Explorer incidental files
Thumbs.db
Thumbs.db:encryptable
ehthumbs.db
ehthumbs_vista.db
[Dd]esktop.ini
