# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE image
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this image
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this image 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_IMG_MGMT
    bool "Enable mcumgr handlers for image management"
    select FLASH
    select MPU_ALLOW_FLASH_WRITE if CPU_HAS_MPU
    select IMG_MANAGER
    help
      Enables mcumgr handlers for image management

if MCUMGR_CMD_IMG_MGMT
config IMG_MGMT_UL_CHUNK_SIZE
    int "Maximum chunk size for image uploads"
    default 512
    help
      Limits the maximum chunk size for image uploads, in bytes.  A buffer of
      this size gets allocated on the stack during handling of a image upload
      command.
endif
