Repostiory containing DAPLink source code with Reset Pin workaround for HANI_IOT board.
Upstream: https://github.com/ARMmbed/DAPLink
Diff: source/daplink/error.c
- Revision:
- 0:01f31e923fe2
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/source/daplink/error.c Tue Apr 07 12:55:42 2020 +0200 @@ -0,0 +1,252 @@ +/** + * @file error.c + * @brief Implementation of error.h + * + * DAPLink Interface Firmware + * Copyright (c) 2009-2016, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed 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. + */ + +#include "error.h" +#include "util.h" +#include "compiler.h" + +static const char *const error_message[] = { + + /* Shared errors */ + + // ERROR_SUCCESS + "Operation was successful", + // ERROR_FAILURE + "An error has occurred", + // ERROR_INTERNAL + "An internal error has occurred", + + /* VFS user errors */ + + // ERROR_ERROR_DURING_TRANSFER + "An error occurred during the transfer", + // ERROR_TRANSFER_TIMEOUT + "The transfer timed out.", + // ERROR_FILE_BOUNDS + "Possible mismatch between file size and size programmed", + // ERROR_OOO_SECTOR + "File sent out of order by PC. Target might not be programmed correctly.", + + /* Target flash errors */ + + // ERROR_RESET + "The interface firmware FAILED to reset/halt the target MCU", + // ERROR_ALGO_DL + "The interface firmware FAILED to download the flash programming algorithms to the target MCU", + //ERROR_ALGO_MISSING + "The flash algo missing for a region", + // ERROR_ALGO_DATA_SEQ + "The interface firmware FAILED to download the flash data contents to be programmed", + // ERROR_INIT + "The interface firmware FAILED to initialize the target MCU", + // ERROR_UNINIT + "The interface firmware FAILED to uninitialize the target MCU", + // ERROR_SECURITY_BITS + "The interface firmware ABORTED programming. Image is trying to set security bits", + // ERROR_UNLOCK + "The interface firmware FAILED to unlock the target for programming", + // ERROR_ERASE_SECTOR + "Flash algorithm erase sector command FAILURE", + // ERROR_ERASE_ALL + "Flash algorithm erase all command FAILURE", + // ERROR_WRITE + "Flash algorithm write command FAILURE", + // ERROR_WRITE_VERIFY + "Flash algorithm write verify command FAILURE", + + /* File stream errors */ + + // ERROR_SUCCESS_DONE + "End of stream has been reached", + // ERROR_SUCCESS_DONE_OR_CONTINUE + "End of stream is unknown", + // ERROR_HEX_CKSUM + "The hex file cannot be decoded. Checksum calculation failure occurred.", + // ERROR_HEX_PARSER + "The hex file cannot be decoded. Parser logic failure occurred.", + // ERROR_HEX_PROGRAM + "The hex file cannot be programmed. Logic failure occurred.", + // ERROR_HEX_INVALID_ADDRESS + "The hex file you dropped isn't compatible with this mode or device. Are you in MAINTENANCE mode? See HELP FAQ.HTM", + // ERROR_HEX_INVALID_APP_OFFSET + "The hex file offset load address is not correct.", + + /* Flash decoder errors */ + + // ERROR_FD_BL_UPDT_ADDR_WRONG + "The starting address for the bootloader update is wrong.", + // ERROR_FD_INTF_UPDT_ADDR_WRONG + "The starting address for the interface update is wrong.", + // ERROR_FD_UNSUPPORTED_UPDATE + "The application file format is unknown and cannot be parsed and/or processed.", + + /* Flash IAP interface */ + + // ERROR_IAP_INIT + "In application programming initialization failed.", + // ERROR_IAP_UNINIT + "In application programming uninit failed.", + // ERROR_IAP_WRITE + "In application programming write failed.", + // ERROR_IAP_ERASE_SECTOR + "In application programming sector erase failed.", + // ERROR_IAP_ERASE_ALL + "In application programming mass erase failed.", + // ERROR_IAP_OUT_OF_BOUNDS + "In application programming aborted due to an out of bounds address.", + // ERROR_IAP_UPDT_NOT_SUPPORTED + "In application programming not supported on this device.", + // ERROR_IAP_UPDT_INCOMPLETE + "In application programming failed because the update sent was incomplete.", + // ERROR_IAP_NO_INTERCEPT + "", + // ERROR_BL_UPDT_BAD_CRC + "The bootloader CRC did not pass.", + +}; + +static error_type_t error_type[] = { + + /* These should always stay the same for each error type. */ + + // ERROR_SUCCESS + 0, + // ERROR_FAILURE + ERROR_TYPE_INTERNAL, + // ERROR_INTERNAL + ERROR_TYPE_INTERNAL, + + /* VFS user errors */ + + // ERROR_ERROR_DURING_TRANSFER + ERROR_TYPE_TRANSIENT, + // ERROR_TRANSFER_TIMEOUT + ERROR_TYPE_USER | ERROR_TYPE_TRANSIENT, + // ERROR_FILE_BOUNDS + ERROR_TYPE_TRANSIENT, + // ERROR_OOO_SECTOR + ERROR_TYPE_TRANSIENT, + + /* Target flash errors */ + + // ERROR_RESET + ERROR_TYPE_TARGET, + // ERROR_ALGO_DL + ERROR_TYPE_TARGET, + //ERROR_ALGO_MISSING + ERROR_TYPE_TARGET, + // ERROR_ALGO_DATA_SEQ + ERROR_TYPE_TARGET, + // ERROR_INIT + ERROR_TYPE_TARGET, + // ERROR_UNINIT + ERROR_TYPE_TARGET, + // ERROR_SECURITY_BITS + ERROR_TYPE_USER, + // ERROR_UNLOCK + ERROR_TYPE_TARGET, + // ERROR_ERASE_SECTOR + ERROR_TYPE_TARGET, + // ERROR_ERASE_ALL + ERROR_TYPE_TARGET, + // ERROR_WRITE + ERROR_TYPE_TARGET, + // ERROR_WRITE_VERIFY + ERROR_TYPE_TARGET, + + /* File stream errors */ + + // ERROR_SUCCESS_DONE + ERROR_TYPE_INTERNAL, + // ERROR_SUCCESS_DONE_OR_CONTINUE + ERROR_TYPE_INTERNAL, + // ERROR_HEX_CKSUM + ERROR_TYPE_USER | ERROR_TYPE_TRANSIENT, + // ERROR_HEX_PARSER + ERROR_TYPE_USER | ERROR_TYPE_TRANSIENT, + // ERROR_HEX_PROGRAM + ERROR_TYPE_USER | ERROR_TYPE_TRANSIENT, + // ERROR_HEX_INVALID_ADDRESS + ERROR_TYPE_USER, + // ERROR_HEX_INVALID_APP_OFFSET + ERROR_TYPE_USER, + + /* Flash decoder errors */ + + // ERROR_FD_BL_UPDT_ADDR_WRONG + ERROR_TYPE_USER, + // ERROR_FD_INTF_UPDT_ADDR_WRONG + ERROR_TYPE_USER, + // ERROR_FD_UNSUPPORTED_UPDATE + ERROR_TYPE_USER, + + /* Flash IAP interface */ + + // ERROR_IAP_INIT + ERROR_TYPE_INTERFACE, + // ERROR_IAP_UNINIT + ERROR_TYPE_INTERFACE, + // ERROR_IAP_WRITE + ERROR_TYPE_INTERFACE, + // ERROR_IAP_ERASE_SECTOR + ERROR_TYPE_INTERFACE, + // ERROR_IAP_ERASE_ALL + ERROR_TYPE_INTERFACE, + // ERROR_IAP_OUT_OF_BOUNDS + ERROR_TYPE_INTERFACE, + // ERROR_IAP_UPDT_NOT_SUPPORTED + ERROR_TYPE_INTERFACE, + // ERROR_IAP_UPDT_INCOMPLETE + ERROR_TYPE_INTERFACE, + // ERROR_IAP_NO_INTERCEPT + ERROR_TYPE_INTERFACE, + // ERROR_BL_UPDT_BAD_CRC + ERROR_TYPE_INTERFACE, +}; + +COMPILER_ASSERT(ERROR_COUNT == ARRAY_SIZE(error_message)); + +const char *error_get_string(error_t error) +{ + const char *msg = 0; + + if (error < ERROR_COUNT) { + msg = error_message[error]; + } + + if (0 == msg) { + util_assert(0); + msg = ""; + } + + return msg; +} + +error_type_t error_get_type(error_t error) +{ + error_type_t type = ERROR_TYPE_INTERNAL; + + if (error < ERROR_COUNT) { + type = error_type[error]; + } + + return type; +}