# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE log
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this log
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this log 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.

menuconfig MCUMGR_CMD_LOG_MGMT
    bool "Enable mcumgr handlers for log management"
    help
      Enables mcumgr handlers for log management

if MCUMGR_CMD_LOG_MGMT
config LOG_MGMT_CHUNK_SIZE
    int "Maximum chunk size for log downloads"
    default 512
    help
      Limits the maximum chunk size for log downloads, in bytes.  A buffer of
      this size gets allocated on the stack during handling of the log show command.

config LOG_MGMT_NAME_LEN
    int "Maximum log name length"
    default 64
    help
      Limits the maximum length of log names, in bytes.  If a log's name length
      exceeds this number, it gets truncated in management responses.  A buffer
      of this size gets allocated on the stack during handling of all log
      management commands.

config LOG_MGMT_BODY_LEN
    int "Maximum log body length"
    default 128
    help
      Limits the maximum length of log entry bodies, in bytes.  If a log
      entry's body length exceeds this number, it gets truncated in management
      responses.  A buffer of this size gets allocated on the stack during
      handling of the log show command.
endif
