leo hendrickson / Mbed OS example-Ethernet-mbed-Cloud-connect
Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers arm_uc_pal_filesystem_utils.c Source File

arm_uc_pal_filesystem_utils.c

00001 // ----------------------------------------------------------------------------
00002 // Copyright 2016-2017 ARM Ltd.
00003 //
00004 // SPDX-License-Identifier: Apache-2.0
00005 //
00006 // Licensed under the Apache License, Version 2.0 (the "License");
00007 // you may not use this file except in compliance with the License.
00008 // You may obtain a copy of the License at
00009 //
00010 //     http://www.apache.org/licenses/LICENSE-2.0
00011 //
00012 // Unless required by applicable law or agreed to in writing, software
00013 // distributed under the License is distributed on an "AS IS" BASIS,
00014 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
00015 // See the License for the specific language governing permissions and
00016 // limitations under the License.
00017 // ----------------------------------------------------------------------------
00018 
00019 #include "arm_uc_config.h"
00020 #if defined(ARM_UC_FEATURE_PAL_FILESYSTEM) && (ARM_UC_FEATURE_PAL_FILESYSTEM == 1)
00021 
00022 #include "arm_uc_pal_filesystem_utils.h"
00023 #include "update-client-metadata-header/arm_uc_buffer_utilities.h"
00024 
00025 #include "pal.h"
00026 
00027 #include "mbed-trace/mbed_trace.h"
00028 #define TRACE_GROUP "UCPI"
00029 
00030 #include <stdio.h>
00031 
00032 /**
00033  * @brief Get the path of the specified item (header or file) for a firmware image
00034  * @details This call populates the passed details struct with information
00035  *          about the firmware image in the slot passed. Only the fields
00036  *          marked as supported in the capabilities bitmap will have valid
00037  *          values.
00038  *
00039  * @param location Index of the firmware image in storage.
00040  * @param what 'FIRMWARE_IMAGE_ITEM_HEADER' to return the path to the image
00041  *        header, or 'FIRMWARE_IMAGE_ITEM_DATA' to return the path to the
00042  *        actual image data.
00043  * @param dest Where to write the path.
00044  * @param dest_size Size of the 'dest' array above. It should be at least
00045  *        PAL_MAX_FILE_AND_FOLDER_LENGTH.
00046  * @return ERR_INVALID_PARAMETER if an error occured, ERR_NONE otherwise.
00047  */
00048 arm_uc_error_t arm_uc_pal_filesystem_get_path(uint32_t location,
00049                                               firmwareImageItemType what,
00050                                               char *dest,
00051                                               uint32_t dest_size)
00052 {
00053     arm_uc_error_t result = { .code = ERR_INVALID_PARAMETER };
00054 
00055     if (dest && dest_size > 0) {
00056         /* copy the base directory of firmware into dest */
00057         int length = snprintf(dest, dest_size, "%s", pal_imageGetFolder());
00058 
00059         if (length > 0) {
00060             /* add missing slash at end if needed */
00061             if (((uint32_t)length < dest_size) && (dest[length - 1] != '/')) {
00062                 dest[length] = '/';
00063                 length++;
00064             }
00065 
00066             /* start snprintf after the mount point name and add length */
00067             length += snprintf(&dest[length],
00068                                dest_size - length,
00069                                "%s_%" PRIu32 ".bin",
00070                                what == FIRMWARE_IMAGE_ITEM_HEADER ? "header" : "image",
00071                                location);
00072 
00073             /* check that file path didn't overrun */
00074             if ((uint32_t)length < dest_size) {
00075                 result.code = ERR_NONE;
00076             }
00077         }
00078     }
00079 
00080     return result;
00081 }
00082 
00083 #endif /* ARM_UC_FEATURE_PAL_FILESYSTEM */