#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#  *  http://www.apache.org/licenses/LICENSE-2.0
#  * Unless required by applicable law or agreed to in writing,
#  software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.
#

NIMBLE_CFLAGS += \
	-DNIMBLE_CFG_CONTROLLER=1 \

NIMBLE_INCLUDE += \
	$(NIMBLE_ROOT)/nimble/transport/ram/include \
	$(NIMBLE_ROOT)/nimble/controller/include \
	$(NIMBLE_ROOT)/nimble/drivers/nrf52/include \

NIMBLE_SRC += \
	$(NIMBLE_ROOT)/nimble/transport/ram/src/ble_hci_ram.c \
	$(NIMBLE_ROOT)/nimble/controller/src/ble_ll_sched.c \
	$(NIMBLE_ROOT)/nimble/controller/src/ble_ll_xcvr.c \
	$(NIMBLE_ROOT)/nimble/controller/src/ble_ll_whitelist.c \
	$(NIMBLE_ROOT)/nimble/controller/src/ble_ll_ctrl.c \
	$(NIMBLE_ROOT)/nimble/controller/src/ble_ll_hci.c \
	$(NIMBLE_ROOT)/nimble/controller/src/ble_ll_supp_cmd.c \
	$(NIMBLE_ROOT)/nimble/controller/src/ble_ll_adv.c \
	$(NIMBLE_ROOT)/nimble/controller/src/ble_ll_conn.c \
	$(NIMBLE_ROOT)/nimble/controller/src/ble_ll_resolv.c \
	$(NIMBLE_ROOT)/nimble/controller/src/ble_ll_conn_hci.c \
	$(NIMBLE_ROOT)/nimble/controller/src/ble_ll_rand.c \
	$(NIMBLE_ROOT)/nimble/controller/src/ble_ll.c \
	$(NIMBLE_ROOT)/nimble/controller/src/ble_ll_scan.c \
	$(NIMBLE_ROOT)/nimble/controller/src/ble_ll_dtm.c \
	$(NIMBLE_ROOT)/nimble/controller/src/ble_ll_hci_ev.c \
	$(NIMBLE_ROOT)/nimble/drivers/nrf52/src/ble_hw.c \
	$(NIMBLE_ROOT)/nimble/drivers/nrf52/src/ble_phy.c \
	$(NIMBLE_ROOT)/porting/nimble/src/os_cputime.c \
	$(NIMBLE_ROOT)/porting/nimble/src/os_cputime_pwr2.c \
	$(NIMBLE_ROOT)/porting/nimble/src/hal_timer.c \
