# 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_MAX_RSP_LEN
    int "Maximum MCUmgr response len for log downloads"
    default 512
    help
      Limits the maximum response len for log downloads, in bytes.

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_CHUNK_LEN
    int "Maximum log chunk length"
    default 128
    help
      Limits the maximum length of log entry bodies chunks, so, every log entry gets
      read in chunks upto a point where the entire entry is read. Also, a buffer gets
      allocated on the stack with this size.

config LOG_MGMT_READ_WATERMARK_UPDATE
    bool "Enable reading of log watermark update"
    help
      Enables reading of log watermark update 

config LOG_GLOBAL_IDX
    bool "Enable global index over all logs"
    default false
    help
      Log entries indices are coming from same number space. Otherwise
      every log has their own indexing.

endif
