#
# 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: sys/console/full
pkg.description: Text-based IO interface.
pkg.author: "Apache Mynewt <dev@mynewt.apache.org>"
pkg.homepage: "http://mynewt.apache.org/"
pkg.keywords:

pkg.deps:
    - "@apache-mynewt-core/hw/hal"
    - "@apache-mynewt-core/kernel/os"
pkg.deps.CONSOLE_UART:
    - "@apache-mynewt-core/hw/drivers/uart"
pkg.deps.CONSOLE_RTT:
    - "@apache-mynewt-core/hw/drivers/rtt"
pkg.deps.CONSOLE_SEMIHOSTING:
    - "@apache-mynewt-core/hw/drivers/semihosting"
pkg.deps.CONSOLE_USB:
    - "@apache-mynewt-core/hw/usb/tinyusb/cdc_console"
pkg.deps.CONSOLE_TCP:
    - "@apache-mynewt-core/sys/console/full/tcp_console"
pkg.deps.'CONSOLE_HISTORY == "ram"':
    - "@apache-mynewt-core/sys/console/full/history_ram"
pkg.deps.'CONSOLE_HISTORY == "log"':
    - "@apache-mynewt-core/sys/console/full/history_log"
pkg.apis: console

pkg.init:
    console_pkg_init: 'MYNEWT_VAL(CONSOLE_SYSINIT_STAGE)'
