# Can't easily add license to rat-excludes file.
.rat-excludes

# Temporary user files.
.gdb_history
.gdb_out
tags

# Non-source files
RELEASE_NOTES.md
repository.yml
.gitignore
00readme.txt
uncrustify.cfg
README.md
.mailmap
version.txt

# unit tests executables
bin

# CRC16 - BSD License.
crc16.*

# Nordic nRF51 SDK - BSD License.
nrf51dk_no_boot.ld
system_nrf51.c
gcc_startup_nrf51.s
nrf51dk-16kbram_no_boot.ld
boot-nrf51xxaa.ld
nrf51xxaa.ld
boot-nrf51xxac.ld
nrf51xxac.ld
split-nrf51dk.ld
boot-nrf51xxac.ld
nrf51xxac.ld
split-nrf51dk.ld
split-nrf51dk-16kbram.ld
nrf51.ld
nrf51.h
nrf51_bitfields.h
nrf51_deprecated.h
system_nrf51.h
gcc_startup_nrf51_split.s

# Nordic nRF52 SDK - BSD License.
nrf52dk_no_boot.ld
bmd300eval_no_boot.ld
boot-nrf52xxaa.ld
nrf52xxaa.ld
primo_no_boot.ld
split-primo.ld
split-bmd300eval.ld
split-nrf52dk.ld
rb-nano2_no_boot.ld
split-rb-nano2.ld
nrf52.ld
ada_feather_nrf52_no_boot.ld
split_ada_feather_nrf52.ld
split-microbit.ld
system_nrf52.c
gcc_startup_nrf52.s
nrf51_to_nrf52.h
nrf52.h
nrf52_bitfields.h
system_nrf52.h
gcc_startup_nrf52_split.s
gcc_startup_nrf52840.s
nrf51_to_nrf52840.h
nrf52840.h
nrf52840_bitfields.h
nrf52840_peripherals.h
nrf52_to_nrf52840.h
system_nrf52840.c
system_nrf52840.h

# Nordic nRF51 SDK - BSD License.
# Nordic nRF52 SDK - BSD License.
compiler_abstraction.h
nrf.h
nrf52_name_change.h
system_nrf51422.c
arm_startup_nrf51.s
arm_startup_nrf52.s
uicr_config.h
iar_startup_nrf51.s
iar_startup_nrf52.s

# Nordic BLE400 SDK - BSD License
ble400_no_boot.ld
split-ble400.ld

# Nordic nRF52 Thingy SDK - BSD License
nrf52-thingy_no_boot.ld
split-nrf52-thingy.ld

# RedBear Blend2 SDK - BSD License
rb-blend2_no_boot.ld
split-rb-blend2.ld

# Telenor ee02 SDK - BSD License
split-telee02.ld
telee02_no_boot.ld

# VBLUno51 board - BSD License
split-vbluno51.ld
vbluno51_no_boot.ld

# VBLUno52 board - BSD License
split-vbluno52.ld
vbluno52_no_boot.ld

# STM32 HAL - BSD License
stm32_driver_mod_i2c_v1.c
stm32_driver_mod_i2c_v2.c
stm32_driver_mod_spi.c
stm32_driver_mod_timer.c

# STM32CubeF4  - BSD License.
stm32f4xx_hal_conf.h
system_stm32f4xx.c
startup_STM32F40x.s
stm32f407xx.h
stm32f4xx.h
stm32f4xx_hal.h
stm32f4xx_hal_adc.h
stm32f4xx_hal_adc_ex.h
stm32f4xx_hal_can.h
stm32f4xx_hal_cec.h
stm32f4xx_hal_cortex.h
stm32f4xx_hal_crc.h
stm32f4xx_hal_cryp.h
stm32f4xx_hal_cryp_ex.h
stm32f4xx_hal_dac.h
stm32f4xx_hal_dac_ex.h
stm32f4xx_hal_dcmi.h
stm32f4xx_hal_dcmi_ex.h
stm32f4xx_hal_def.h
stm32f4xx_hal_dma.h
stm32f4xx_hal_dma2d.h
stm32f4xx_hal_dma_ex.h
stm32f4xx_hal_eth.h
stm32f4xx_hal_flash.h
stm32f4xx_hal_flash_ex.h
stm32f4xx_hal_flash_ramfunc.h
stm32f4xx_hal_fmpi2c.h
stm32f4xx_hal_fmpi2c_ex.h
stm32f4xx_hal_gpio.h
stm32f4xx_hal_gpio_ex.h
stm32f4xx_hal_hash.h
stm32f4xx_hal_hash_ex.h
stm32f4xx_hal_hcd.h
stm32f4xx_hal_i2c.h
stm32f4xx_hal_i2c_ex.h
stm32f4xx_hal_i2s.h
stm32f4xx_hal_i2s_ex.h
stm32f4xx_hal_irda.h
stm32f4xx_hal_iwdg.h
stm32f4xx_hal_ltdc.h
stm32f4xx_hal_nand.h
stm32f4xx_hal_nor.h
stm32f4xx_hal_pccard.h
stm32f4xx_hal_pcd.h
stm32f4xx_hal_pcd_ex.h
stm32f4xx_hal_pwr.h
stm32f4xx_hal_pwr_ex.h
stm32f4xx_hal_qspi.h
stm32f4xx_hal_rcc.h
stm32f4xx_hal_rcc_ex.h
stm32f4xx_hal_rng.h
stm32f4xx_hal_rtc.h
stm32f4xx_hal_rtc_ex.h
stm32f4xx_hal_sai.h
stm32f4xx_hal_sai_ex.h
stm32f4xx_hal_sd.h
stm32f4xx_hal_sdram.h
stm32f4xx_hal_smartcard.h
stm32f4xx_hal_spdifrx.h
stm32f4xx_hal_spi.h
stm32f4xx_hal_sram.h
stm32f4xx_hal_tim.h
stm32f4xx_hal_tim_ex.h
stm32f4xx_hal_uart.h
stm32f4xx_hal_usart.h
stm32f4xx_hal_wwdg.h
stm32f4xx_ll_fmc.h
stm32f4xx_ll_fsmc.h
stm32f4xx_ll_sdmmc.h
stm32f4xx_ll_usb.h
system_stm32f4xx.h
stm32f4xx_hal_flash.c
stm32f4xx_hal_flash_ex.c
stm32f4xx_hal_gpio.c
stm32f4xx_hal_rcc.c
stm32f4xx_hal_uart.c

# baselibc - BSD License.
# tinyprintf - BSD License.
# klibc - MIT License.
baselibc

# CMSIS-CORE - BSD License.
core_ca9.h
core_caFunc.h
core_caInstr.h
core_ca_mmu.h
core_cm0.h
core_cm0plus.h
core_cm3.h
core_cm4.h
core_cm4_simd.h
core_cmFunc.h
core_cmInstr.h
cmsis_nvic.c
cmsis_nvic.h
HAL_CM0.s
HAL_CM3.s
HAL_CM4.s
SVC_Table.s
arm_common_tables.h
arm_const_structs.h
arm_math.h
cmsis_armcc.h
cmsis_armcc_V6.h
cmsis_gcc.h
core_cm7.h
core_cmSimd.h
core_sc000.h
core_sc300.h
HAL_CM7.s

# microjson - BSD License.
MSJSON_COPYING
json_decode.c
json_encode.c

# queue.h - BSD License.
queue.h

# FreeBSD - BSD License.
os_mbuf.c
base64.c

# tinycrypt - BSD License.
tinycrypt

# frdm-k64f clock configuration - BSD License.
clock_config.c
clock_config.h

# CMSIS Cortex-M4, STM32f4 - BSD License.
STM32F4xx
STM32F4xx_HAL_Driver

# NXP SDK - BSD License.
sdk-2.0-frdm-k64f_b160321
MK64FN1M0xxx12_flash.ld
boot-MK64FN1M0xxx12_flash.ld
startup_MK64F12.S

# LWIP - BSD License.
lwip_base

# OIC - BSD License.
oic

# FATFS ChaN License
diskio.h
ff.h
ffconf.h
integer.h
ff.c
unicode.c
00history.txt

#Codesoucery License
split-nrf52840pdk.ld
nrf52840pdk_no_boot.ld

# Freescale Semiconductor License
boot-mkw41z512.ld
mkw41z512.ld
no-boot-mkw41z512.ld
gcc_startup_mkw41z.s
MKW41Z4.h
fsl_device_registers.h
system_MKW41Z4.h
MKW41Z4_features.h
system_MKW41Z4.c

# Imagination Technologies - BSD License
mips-hal
ctx.S
excpt_isr.S
uhi32.ld
abiflags.S

# Cygnus Support - MIT like License
gcc_startup_mips.S

# HiFive1 - Apache License 2.0
sifive

# MQTT - Eclipse Public License
mqtt

# CMSIS Cortex-M7, STM32f7 - BSD License.
STM32F7xx
STM32F7xx_HAL_Driver

# LORA - BSD License
lora

# loraping - BSD License (main.c only)
loraping

# SEGGER Sysview - BSD License
sysview

# SEGGER RTT - BSD License
rtt

# Adafruit TSL2561 Sensor - BSD License
tsl2561

# pic32mx470f512h - BSD License
pic32mx470f512h

# Sensorhub board - BSD License
startup_STM32F427xx.s

# STM32F7 Discovery BSP - BSD License
stm32f7xx_hal_conf.h
system_stm32f7xx.c
startup_stm32f746xx.s

# STM32F3 Discovery BSP - BSD License
startup_stm32f303xc.s

# STM32F429 BSP - BSD License
startup_STM32F429x.s

# STM32L152C BSP - BSD License
stm32l1xx_hal_conf.h
system_stm32l1xx.c
startup_stm32l152xc.s

# NUCLEO-F767 BSP - BSD License
startup_stm32f767xx.s

# NUCLEO-F413ZH BSP - BSD License
nucleo-f413zh

# NUCLEO-L467rg BSP - BSD License
nucleo-l476rg

# Microchip PIC32 SDK - BSD License
p32mz2048efg100.h
pic32_init_cache.S
pic32_init_tlb_ebi_sqi.S
cache-err-exception.S
cp0defs.h
simple-tlb-refill-exception.S
crt0.S

# Calliope SDK - BSD Licence
split-calliope_mini.ld

# Bluetooth Mesh - Apache 2.0 License
mesh

# pic32mx470_6lp_clicker BSP - one BSD licensed file (other are Apache):
# /hw/bsp/pic32mx470_6lp_clicker/src/sbrk.c
pic32mx470_6lp_clicker

# pic32mz2048_wi-fire BSP - one BSD licensed file (other are Apache):
# ./hw/bsp/pic32mz2048_wi-fire/src/sbrk.c
pic32mz2048_wi-fire

# SDK for Apollo2 - MIT/BSD/Apache License
# hw/bsp/apollo2_evb/src/arch/cortex_m4/gcc_startup.s
apollo2_evb

# BSP for Apollo2 - BSD License
AmbiqSuite
apollo2.h
system_apollo2.h
system_apollo2.c
apollo_nvic.h

# Apollo2 linker script - MIT License
apollo2.ld

# CMSIS Cortex-M4, STM32f3 - BSD License.
STM32F3xx
STM32F3xx_HAL_Driver

# Nucleo-F303K8, Nucleo-F303RE - BSD License.
system_stm32f3xx.c
startup_stm32f303x8.s
startup_stm32f303xe.s
stm32f3xx_hal_conf.h

# Ignore documentation folder
docs

# nrfX - BSD License
nrfx
nrfx_glue.h
nrf52xxx
nrf52xxx-compat

# cmsis-core - Apache License
cmsis-core

# stm32l1xx - BSD License
stm32l1xx

# stm32f1xx - BSD License
stm32f1xx

# ARC - BSD License
arc
embarc_emsk

# DWM1001 - BSD Licence
dwm1001-dev_no_boot.ld
split-dwm1001-dev.ld

# olimex-p103 - BSD and APL 2.0 License
olimex-p103

# puckjs - BSD License
puckjs_no_boot.ld
split_puckjs.ld

# STM32L0xx SDK - BSD License
stm32l0xx

# STM32L4xx SDK - BSD License
stm32l4xx

# Fanstel EVBT840 BSP linker scripts - BSD License
fanstel-ev-bt840_no_boot.ld
split-fanstel-ev-bt840.ld

# B-L072Z-LRWAN1 BSP - BSD License
b-l072z-lrwan1
