#
# 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.
#

pkg.name: hw/usb/tinyusb
pkg.description: >
    Package provides task for TinyUSB.
    This package requires API TINYUSB_HW_INIT that will
    provide function tinyusb_hardware_init().

pkg.author: "Apache Mynewt <dev@mynewt.apache.org>"
pkg.homepage: "http://mynewt.apache.org/"
pkg.keywords:
    - usb
    - tinyusb

pkg.deps:
    - "@apache-mynewt-core/kernel/os"
    - "@tinyusb/tinyusb"

pkg.init:
    tinyusb_start: 'MYNEWT_VAL(USBD_SYSINIT_STAGE)'

pkg.deps.USBD_STD_DESCRIPTORS:
    - "@apache-mynewt-core/hw/usb/tinyusb/std_descriptors"
pkg.deps.'MCU_TARGET == "nRF52840"':
    - "@apache-mynewt-core/hw/usb/tinyusb/nrf5x"
pkg.deps.'MCU_TARGET == "nRF5340_APP"':
    - "@apache-mynewt-core/hw/usb/tinyusb/nrf53"
pkg.deps.MCU_STM32F4:
    - "@apache-mynewt-core/hw/usb/tinyusb/synopsys"
pkg.deps.MCU_STM32F7:
    - "@apache-mynewt-core/hw/usb/tinyusb/synopsys"
pkg.deps.MCU_STM32L4:
    - "@apache-mynewt-core/hw/usb/tinyusb/synopsys"
pkg.deps.MCU_STM32F1:
    - "@apache-mynewt-core/hw/usb/tinyusb/stm32_fsdev"
pkg.deps.'(MCU_TARGET == "DA14691" || MCU_TARGET == "DA14695" || MCU_TARGET == "DA14697" || MCU_TARGET == "DA14699")':
    - "@apache-mynewt-core/hw/usb/tinyusb/da146xx"

pkg.req_apis:
    - TINYUSB_HW_INIT
