## @file
# Standardized Error Handling infrastructures.
#
# Copyright (c) 2011 - 2018, Intel Corporation. All rights reserved.<BR>
#
# SPDX-License-Identifier: BSD-2-Clause-Patent
#

'''
ToolError
'''

import Logger.StringTable as ST

FILE_OPEN_FAILURE = 1
FILE_WRITE_FAILURE = 2
FILE_PARSE_FAILURE = 3
FILE_READ_FAILURE = 4
FILE_CREATE_FAILURE = 5
FILE_CHECKSUM_FAILURE = 6
FILE_COMPRESS_FAILURE = 7
FILE_DECOMPRESS_FAILURE = 8
FILE_MOVE_FAILURE = 9
FILE_DELETE_FAILURE = 10
FILE_COPY_FAILURE = 11
FILE_POSITIONING_FAILURE = 12
FILE_ALREADY_EXIST = 13
FILE_NOT_FOUND = 14
FILE_TYPE_MISMATCH = 15
FILE_CASE_MISMATCH = 16
FILE_DUPLICATED = 17
FILE_UNKNOWN_ERROR = 0x0FFF

OPTION_UNKNOWN = 0x1000
OPTION_MISSING = 0x1001
OPTION_CONFLICT = 0x1002
OPTION_VALUE_INVALID = 0x1003
OPTION_DEPRECATED = 0x1004
OPTION_NOT_SUPPORTED = 0x1005
OPTION_UNKNOWN_ERROR = 0x1FFF

PARAMETER_INVALID = 0x2000
PARAMETER_MISSING = 0x2001
PARAMETER_UNKNOWN_ERROR = 0x2FFF

FORMAT_INVALID = 0x3000
FORMAT_NOT_SUPPORTED = 0x3001
FORMAT_UNKNOWN = 0x3002
FORMAT_UNKNOWN_ERROR = 0x3FFF

RESOURCE_NOT_AVAILABLE = 0x4000
RESOURCE_ALLOCATE_FAILURE = 0x4001
RESOURCE_FULL = 0x4002
RESOURCE_OVERFLOW = 0x4003
RESOURCE_UNDERRUN = 0x4004
RESOURCE_UNKNOWN_ERROR = 0x4FFF

ATTRIBUTE_NOT_AVAILABLE = 0x5000
ATTRIBUTE_GET_FAILURE = 0x5001
ATTRIBUTE_SET_FAILURE = 0x5002
ATTRIBUTE_UPDATE_FAILURE = 0x5003
ATTRIBUTE_ACCESS_DENIED = 0x5004
ATTRIBUTE_RETRIEVE_FAILURE = 0x5005
ATTRIBUTE_UNKNOWN_ERROR = 0x5FFF
ATTRIBUTE_RETRIEVE_FAILURE = 0x5F00

IO_NOT_READY = 0x6000
IO_BUSY = 0x6001
IO_TIMEOUT = 0x6002
IO_UNKNOWN_ERROR = 0x6FFF

COMMAND_FAILURE = 0x7000

CODE_ERROR = 0xC0DE

AUTOGEN_ERROR = 0xF000
PARSER_ERROR = 0xF001
BUILD_ERROR = 0xF002
GENFDS_ERROR = 0xF003
ECC_ERROR = 0xF004
EOT_ERROR = 0xF005
DDC_ERROR = 0xF009
WARNING_AS_ERROR = 0xF006
MIGRATION_ERROR = 0xF010
EDK1_INF_ERROR = 0xF011
ABORT_ERROR = 0xFFFE
UNKNOWN_ERROR = 0xFFFF

UPT_ALREADY_INSTALLED_ERROR = 0xD000
UPT_ENVIRON_MISSING_ERROR = 0xD001
UPT_REPKG_ERROR = 0xD002
UPT_ALREADY_RUNNING_ERROR = 0xD003
UPT_MUL_DEC_ERROR = 0xD004
UPT_DB_UPDATE_ERROR = 0xD005
UPT_INI_PARSE_ERROR = 0xE000

## Error message of each error code
#
gERROR_MESSAGE = {
    FILE_NOT_FOUND          :   ST.ERR_FILE_NOT_FOUND,
    FILE_OPEN_FAILURE       :   ST.ERR_FILE_OPEN_FAILURE,
    FILE_WRITE_FAILURE      :   ST.ERR_FILE_WRITE_FAILURE,
    FILE_PARSE_FAILURE      :   ST.ERR_FILE_PARSE_FAILURE,
    FILE_READ_FAILURE       :   ST.ERR_FILE_READ_FAILURE,
    FILE_CREATE_FAILURE     :   ST.ERR_FILE_CREATE_FAILURE,
    FILE_CHECKSUM_FAILURE   :   ST.ERR_FILE_CHECKSUM_FAILURE,
    FILE_COMPRESS_FAILURE   :   ST.ERR_FILE_COMPRESS_FAILURE,
    FILE_DECOMPRESS_FAILURE :   ST.ERR_FILE_DECOMPRESS_FAILURE,
    FILE_MOVE_FAILURE       :   ST.ERR_FILE_MOVE_FAILURE,
    FILE_DELETE_FAILURE     :   ST.ERR_FILE_DELETE_FAILURE,
    FILE_COPY_FAILURE       :   ST.ERR_FILE_COPY_FAILURE,
    FILE_POSITIONING_FAILURE:   ST.ERR_FILE_POSITIONING_FAILURE,
    FILE_ALREADY_EXIST      :   ST.ERR_FILE_ALREADY_EXIST,
    FILE_TYPE_MISMATCH      :   ST.ERR_FILE_TYPE_MISMATCH ,
    FILE_CASE_MISMATCH      :   ST.ERR_FILE_CASE_MISMATCH,
    FILE_DUPLICATED         :   ST.ERR_FILE_DUPLICATED,
    FILE_UNKNOWN_ERROR      :   ST.ERR_FILE_UNKNOWN_ERROR,

    OPTION_UNKNOWN          :   ST.ERR_OPTION_UNKNOWN,
    OPTION_MISSING          :   ST.ERR_OPTION_MISSING,
    OPTION_CONFLICT         :   ST.ERR_OPTION_CONFLICT,
    OPTION_VALUE_INVALID    :   ST.ERR_OPTION_VALUE_INVALID,
    OPTION_DEPRECATED       :   ST.ERR_OPTION_DEPRECATED,
    OPTION_NOT_SUPPORTED    :   ST.ERR_OPTION_NOT_SUPPORTED,
    OPTION_UNKNOWN_ERROR    :   ST.ERR_OPTION_UNKNOWN_ERROR,

    PARAMETER_INVALID       :   ST.ERR_PARAMETER_INVALID,
    PARAMETER_MISSING       :   ST.ERR_PARAMETER_MISSING,
    PARAMETER_UNKNOWN_ERROR :   ST.ERR_PARAMETER_UNKNOWN_ERROR,

    FORMAT_INVALID          :   ST.ERR_FORMAT_INVALID,
    FORMAT_NOT_SUPPORTED    :   ST.ERR_FORMAT_NOT_SUPPORTED,
    FORMAT_UNKNOWN          :   ST.ERR_FORMAT_UNKNOWN,
    FORMAT_UNKNOWN_ERROR    :   ST.ERR_FORMAT_UNKNOWN_ERROR,

    RESOURCE_NOT_AVAILABLE  :   ST.ERR_RESOURCE_NOT_AVAILABLE,
    RESOURCE_ALLOCATE_FAILURE : ST.ERR_RESOURCE_ALLOCATE_FAILURE,
    RESOURCE_FULL           :   ST.ERR_RESOURCE_FULL,
    RESOURCE_OVERFLOW       :   ST.ERR_RESOURCE_OVERFLOW,
    RESOURCE_UNDERRUN       :   ST.ERR_RESOURCE_UNDERRUN,
    RESOURCE_UNKNOWN_ERROR  :   ST.ERR_RESOURCE_UNKNOWN_ERROR,

    ATTRIBUTE_NOT_AVAILABLE :   ST.ERR_ATTRIBUTE_NOT_AVAILABLE,
    ATTRIBUTE_RETRIEVE_FAILURE : ST.ERR_ATTRIBUTE_RETRIEVE_FAILURE,
    ATTRIBUTE_SET_FAILURE   :   ST.ERR_ATTRIBUTE_SET_FAILURE,
    ATTRIBUTE_UPDATE_FAILURE:   ST.ERR_ATTRIBUTE_UPDATE_FAILURE,
    ATTRIBUTE_ACCESS_DENIED :   ST.ERR_ATTRIBUTE_ACCESS_DENIED,
    ATTRIBUTE_UNKNOWN_ERROR :   ST.ERR_ATTRIBUTE_UNKNOWN_ERROR,

    COMMAND_FAILURE         :   ST.ERR_COMMAND_FAILURE,

    IO_NOT_READY            :   ST.ERR_IO_NOT_READY,
    IO_BUSY                 :   ST.ERR_IO_BUSY,
    IO_TIMEOUT              :   ST.ERR_IO_TIMEOUT,
    IO_UNKNOWN_ERROR        :   ST.ERR_IO_UNKNOWN_ERROR,

    UNKNOWN_ERROR           :   ST.ERR_UNKNOWN_ERROR,

    UPT_ALREADY_INSTALLED_ERROR : ST.ERR_UPT_ALREADY_INSTALLED_ERROR,
    UPT_ENVIRON_MISSING_ERROR   : ST.ERR_UPT_ENVIRON_MISSING_ERROR,
    UPT_REPKG_ERROR             : ST.ERR_UPT_REPKG_ERROR,
    UPT_ALREADY_RUNNING_ERROR   : ST.ERR_UPT_ALREADY_RUNNING_ERROR,
    UPT_MUL_DEC_ERROR           : ST.ERR_MUL_DEC_ERROR,
    UPT_INI_PARSE_ERROR     :   ST.ERR_UPT_INI_PARSE_ERROR,
}

## Exception indicating a fatal error
#
class FatalError(Exception):
    pass

