/*============================================ GERTEC ==============================================

 File          : gedi_error_codes.h
 Project       : GEDI - Gertec Encrypted Device Interface
 Platform      : GEDI compatible platforms
 Device        : GEDI compatible devices
 Creation Date : 21/Aug/13
 Author        : Tiago Martines

 Description   : This file includes error codes that will be necessary so that external
                 developers can code with the GEDI.

                 Developer level: This file is parsed to generate gedi_developer_error_codes.h

                 Other level:  All GEDI_* functions must only return error codes defined here.

 ============================================ HISTORY =============================================
 When       Who               What
 ---------  ----------------  ---------------------------------------------------------------------
 21/Aug/13  Tiago Martines    - Initial version.
==================================================================================================*/

#ifndef _GEDI_PLATFORM_ERROR_CODES_H
#define _GEDI_PLATFORM_ERROR_CODES_H

/**
 * Results to be returned by all GEDI functions
 */
typedef enum GEDI_e_Ret_tag {
  //Generic GEDI-Level Errors
  GEDI_RET_OK = 0,
  GEDI_RET_FUNCTION_NOT_FOUND,
  GEDI_RET_TEST_FAIL,
  GEDI_RET_NULL_PARAMETER,
  GEDI_RET_INVALID_PARAMETER,
  GEDI_RET_TIMEOUT,
  GEDI_RET_CANCELLED,
  GEDI_RET_COULD_NOT_ALLOCATE_MEMORY,
  GEDI_RET_BUFFER_NOT_ENOUGH,
  GEDI_RET_OUT_OF_BOUNDS,           /**< Provided number is too big or to small. */
  GEDI_RET_END_OF_LIST,
  GEDI_RET_NOT_SUPPORTED,

  //Generic Platform-Level Errors
  GEDI_RET_PLATFORM_ERROR = 10000,
  GEDI_RET_MODULE_NOT_FOUND,
  GEDI_RET_NOT_AVAILABLE,
  GEDI_RET_LINUX_ERROR,

  //AUDIO
  GEDI_RET_AUDIO_ERROR = 10100,
  GEDI_RET_AUDIO_BUZZER_NOT_EXIST,

  //CLOCK
  GEDI_RET_CLOCK_ERROR = 10200,

  //CRYPT
  GEDI_RET_CRYPT_ERROR = 10300,
  GEDI_RET_RSA_GEN_FAIL,

  //FS
  GEDI_RET_FS_ERROR = 10400,
  GEDI_RET_FS_INVALID_HANDLE,
  GEDI_RET_FS_INVALID_NAME,
  GEDI_RET_FS_ACCESS_DENIED,
  GEDI_RET_FS_ALREADY_EXIST,
  GEDI_RET_FS_NOT_EXIST,
  GEDI_RET_FS_EOF,

  //INFO
  GEDI_RET_INFO_ERROR = 10500,

  //KBD
  GEDI_RET_KBD_ERROR = 10600,
  GEDI_RET_KBD_IN_USE,

  //LCD
  GEDI_RET_LCD_ERROR = 10700,
  GEDI_RET_LCD_FONT_ERROR,

  //LED
  GEDI_RET_LED_ERROR = 10800,
  GEDI_RET_LED_NOT_EXIST,
  GEDI_RET_LED_BACKLIGHT_ERROR,
  GEDI_RET_LED_BACKLIGHT_NOT_EXIST,

  //MSR
  GEDI_RET_MSR_ERROR = 10900,
  GEDI_RET_MSR_NO_SWIPE,
  GEDI_RET_MSR_TRACK_ERROR,

  //POWER
  GEDI_RET_POWER_ERROR = 11000,
  GEDI_RET_POWER_NO_BATTERY,
  GEDI_RET_POWER_NO_EXT_POWER,
  GEDI_RET_POWER_BATTERY_BUSY,

  //PRINTER
  GEDI_RET_PRNTR_ERROR = 11100,
  GEDI_RET_PRNTR_FONT_PATH_LEN,
  GEDI_RET_PRNTR_NOT_READY,
  GEDI_RET_PRNTR_OUT_OF_PAPER,

  //RS232
  GEDI_RET_RS232_ERROR = 11200,
  GEDI_RET_RS232_NOT_OPEN,
  GEDI_RET_RS232_BUSY,

  //SMART
  GEDI_RET_SMART_ERROR = 11300,
  GEDI_RET_SMART_ABSENT,
  GEDI_RET_SMART_COMM_ERROR,
  GEDI_RET_SMART_MUTE,
  GEDI_RET_SMART_PARITY_ERROR,
  GEDI_RET_SMART_EDC_ERROR,
  GEDI_RET_SMART_DEACTIVATED_PROTOCOL,
  GEDI_RET_SMART_BAD_TS,
  GEDI_RET_SMART_ATR_TOO_LONG,
  GEDI_RET_SMART_INVALID_ATR,
  GEDI_RET_SMART_TA1_NOT_SUPPORTED,
  GEDI_RET_SMART_PTS_RESPONSE_ERROR,
  GEDI_RET_SMART_PROCEDURE_BYTE_CONFLICT,
  GEDI_RET_SMART_POWER_FAILED,
  GEDI_RET_SMART_NOT_ACTIVATED,

  //SYS
  GEDI_RET_SYS_ERROR = 11400,

  //USB
  GEDI_RET_USB_ERROR = 11500,
  GEDI_RET_USB_NOT_OPEN,
  GEDI_RET_USB_BUSY,
  GEDI_RET_USB_ALREADY_OPEN,

  //CL
  GEDI_RET_CL_ERROR = 11600,         /**< Contactless generic error. */
  GEDI_RET_CL_NO_RESPONSE,           /**< No response from PICC. */
  GEDI_RET_CL_COLLISION,             /**< More than one PICC is detected on the field. */
  GEDI_RET_CL_PROTOCOL_ERROR,        /**< Protocol error. */
  GEDI_RET_CL_BYTE_ERROR,            /**< Receive unexpected byte number. */
  GEDI_RET_CL_SN,                    /**< Error with card serial number. */
  GEDI_RET_CL_CRC_ERROR,             /**< Error with transmitted CRC. */
  // CL_MF
  GEDI_RET_CL_MF_ERROR = 11610,      /**< MIFARE generic error. */
  GEDI_RET_CL_MF_AUTHENTICATE,       /**< MIFARE authentication error. */
  GEDI_RET_CL_MF_KEY_INVALID_TYPE,   /**< MIFARE Key type is invalid. */
  GEDI_RET_CL_MF_TYPE_ERROR,         /**< Card is not MIFARE. */

  //BT
  GEDI_RET_BT_ERROR = 11700,
  GEDI_RET_BT_PROCESSING,
  GEDI_RET_BT_SCAN_FAILED,
  GEDI_RET_BT_CONNECT_FAILED,
  GEDI_RET_BT_INVALID_CONFIG,
  GEDI_RET_BT_ALREADY_OPEN,
  GEDI_RET_BT_CMD_FAIL,
  GEDI_RET_BT_NOT_INITIALIZED,
  GEDI_RET_BT_NOT_CONNECTED,
  GEDI_RET_BT_NOT_PARIED,

  //ETH
  GEDI_RET_ETH_ERROR = 11800,
  GEDI_RET_ETH_NOT_OPEN,
  GEDI_RET_ETH_NOT_ONLINE,
  GEDI_RET_ETH_ALREADY_OPEN,
  GEDI_RET_ETH_TX_BUSY,
  GEDI_RET_ETH_CMD_FAIL,
  GEDI_RET_ETH_DNS_ERROR,
  GEDI_RET_ETH_FTP_ERROR,

  //GSM
  GEDI_RET_GSM_ERROR = 11900,
  GEDI_RET_GSM_NOT_OPEN,
  GEDI_RET_GSM_PROCESSING,
  GEDI_RET_GSM_CONNECT_FAILED,
  GEDI_RET_GSM_AUTH_FAIL,
  GEDI_RET_GSM_SIGNAL_FAIL,
  GEDI_RET_GSM_CMD_FAIL,
  GEDI_RET_GSM_NO_NETWORK,
  GEDI_RET_GSM_SIM_FAIL = 11910,
  GEDI_RET_GSM_SIM_NOT_INITIALIZED,
  GEDI_RET_GSM_SIM_ALREADY_INITIALIZED,
  GEDI_RET_GSM_GPRS_ERROR = 11920,
  GEDI_RET_GSM_SIM_NOT_INSERTED = 11930,
  GEDI_RET_GSM_SIM_PIN_REQUIRED,
  GEDI_RET_GSM_SIM_BUSY,
  GEDI_RET_GSM_NETWORK_TIMEOUT,
  GEDI_RET_GSM_NETWORK_NOT_ALLOWED,
  GEDI_RET_GSM_OPERATION_NOT_ALLOWED,
  GEDI_RET_GSM_SIM_BLOCKED,
  GEDI_RET_GSM_PLMN_NOT_ALLOWED,
  GEDI_RET_GSM_GPRS_NOT_ALLOWED,
  GEDI_RET_GSM_GPRS_UNKNOWN_ERROR,
  GEDI_RET_GSM_PROTOCOL_ERROR = 11940,
  GEDI_RET_GSM_REGISTERED,
  GEDI_RET_GSM_NOT_REGISTERED,
  GEDI_RET_GSM_GPRS_NOT_ATTACHED,
  GEDI_RET_GSM_GPRS_ATTACHED,
  GEDI_RET_GSM_GPRS_PDP_NOT_ACTIVATED,
  GEDI_RET_GSM_GPRS_PDP_ACTIVATED,
  GEDI_RET_GSM_GPRS_PPP_STOPPED,
  GEDI_RET_GSM_GPRS_PPP_STARTED,
  GEDI_RET_GSM_GPRS_PPP_FAILED,
  GEDI_RET_GSM_SERIAL_OPEN_FAILED = 11950,
  GEDI_RET_GSM_CSD_CONNECTED,
  GEDI_RET_GSM_CSD_NOT_CONNECTED,
  GEDI_RET_GSM_ALREADY_INITIALIZED,
  GEDI_RET_GSM_NOT_INITIALIZED,
  GEDI_RET_GSM_INFO_NOT_FOUND,
  GEDI_RET_GSM_STANDBY,
  GEDI_RET_GSM_SMS_CONNECTED,
  GEDI_RET_GSM_SMS_NOT_CONNECTED,
  GEDI_RET_GSM_SMS_SEND_FAILED,
  GEDI_RET_GSM_SMS_RECEIVED_FAILED = 11960,
  GEDI_RET_GSM_USSD_NOT_CONNECTED,
  GEDI_RET_GSM_USSD_CONNECTED,
  GEDI_RET_GSM_USSD_NOT_OPEN,
  GEDI_RET_GSM_USSD_OPEN,
  GEDI_RET_GSM_USSD_FAILED,
  GEDI_RET_GSM_GPRS_NOT_SUPPORTED,
  GEDI_RET_GSM_GPRS_NOT_SUBSCRIBED,
  GEDI_RET_GSM_GPRS_TEMP_OUT,
  GEDI_RET_GSM_NO_CARRIER,
  GEDI_RET_GSM_NO_ANSWER = 11970,
  GEDI_RET_GSM_LINE_BUSY,
  GEDI_RET_GSM_SIM_PUK_REQUIRED,

  //MODEM
  GEDI_RET_MODEM_ERROR = 12000,
  GEDI_RET_MODEM_NOT_OPEN,
  GEDI_RET_MODEM_NOT_ONLINE,
  GEDI_RET_MODEM_ALREADY_OPEN,
  GEDI_RET_MODEM_TX_BUSY,
  GEDI_RET_MODEM_CMD_FAIL,

  //PM
  GEDI_RET_PM_ERROR = 12100,
  GEDI_RET_PM_INVALID_AP,
  GEDI_RET_PM_FULL,
  GEDI_RET_PM_INVALID_FILE,
  GEDI_RET_PM_ULD_FAIL,
  GEDI_RET_PM_SEAL_ERROR,
  GEDI_RET_PM_SIGN_ERROR,
  GEDI_RET_PM_NOT_SEALED,
  GEDI_RET_PM_ALREADY_SEALED,
  GEDI_RET_PM_AP_NAME_REPEATED,
  GEDI_RET_PM_INVALID_ULDKEYS,
  GEDI_RET_PM_INVALID_MBR,
  GEDI_RET_PM_INVALID_ADDRESS,
  GEDI_RET_PM_INVALID_MEMORY_LAYOUT,
  GEDI_RET_PM_INVALID_MODULE,
  GEDI_RET_PM_PERMISSION_DENIED,
  GEDI_RET_PM_INVALID_ENTRY_TYPE,
  GEDI_RET_PM_INVALID_CAP_HASH,
  GEDI_RET_PM_INVALID_CAP_HEADER,
  GEDI_RET_PM_OPEN_FILE_ERROR,
  GEDI_RET_PM_PROTOCOL_ERROR,
  GEDI_RET_PM_NO_ERROR,

  //KMS
  GEDI_RET_KMS_ERROR = 12200,
  GEDI_RET_KMS_INVALID_OPERATION,
  GEDI_RET_KMS_INVALID_KEY,
  GEDI_RET_KMS_INVALID_LENGTH,
  GEDI_RET_KMS_INVALID_PURPOSE,
  GEDI_RET_KMS_INVALID_TYPE,
  GEDI_RET_KMS_INVALID_INDEX,
  GEDI_RET_KMS_INVALID_MODE,
  GEDI_RET_KMS_INVALID_KCV,
  GEDI_RET_KMS_INVALID_CERTIFICATE,
  GEDI_RET_KMS_INVALID_HASH,
  GEDI_RET_KMS_KEY_NOT_UNIQUE,
  GEDI_RET_KMS_KEY_ON_COOLDOWN,
  GEDI_RET_KMS_KEY_EXPIRED,
  GEDI_RET_KMS_USER_CANCELLED,
  GEDI_RET_KMS_NULL_PIN,
  GEDI_RET_KMS_INVALID_PIN_LEN,
  GEDI_RET_KMS_PINMODE_ACTIVE,
  GEDI_RET_KMS_PINMODE_INACTIVE,
  GEDI_RET_KMS_PINMODE_NO_KEY,
  GEDI_RET_KMS_INVALID_KEK,
  GEDI_RET_KMS_FULL,

  //WIFI
  GEDI_RET_WIFI_ERROR = 12300,
  GEDI_RET_WIFI_PROCESSING,
  GEDI_RET_WIFI_SCAN_FAILED,
  GEDI_RET_WIFI_CONNECT_FAILED,
  GEDI_RET_WIFI_INVALID_CONFIG,
  GEDI_RET_WIFI_CMD_FAIL,
  GEDI_RET_WIFI_NOT_OPEN,

  // NET
  GEDI_RET_NET_ERROR = 12400,
  GEDI_RET_NET_URL_NOT_FOUND,               /**< Given URL was not found */
  GEDI_RET_NET_PING_FAILED,                 /**< Ping command was not possible */
  GEDI_RET_NET_BINDTODEVICE_FAILED,         /**< Could not bind to specified interface */
  GEDI_RET_NET_SELECTDEFAULTDEVICE_FAILED,  /**< Could not select default interface */

  //I2C
  GEDI_RET_I2C_ERROR = 12500,
  GEDI_RET_I2C_OPEN_ERROR,
  GEDI_RET_I2C_ADDRESS_ERROR,
  GEDI_RET_I2C_REGISTER_ERROR,

  //AUTH
  GEDI_RET_AUTH_ERROR = 12600,
  GEDI_RET_AUTH_SRED_DISABLED,
  GEDI_RET_AUTH_KEY_EXPIRED,
  GEDI_RET_AUTH_HASH_MISMATCH,

  //PKI
  GEDI_RET_PKI_ERROR = 12700,
  GEDI_RET_PKI_INVALID_CERTIFICATE,
  GEDI_RET_PKI_INVALID_KEY,
  GEDI_RET_PKI_NO_CA_FOUND,
  GEDI_RET_PKI_DATE_NOT_FOUND,
  GEDI_RET_PKI_DERIVATION_ERROR,
  GEDI_RET_PKI_CMAC_ERROR,
  GEDI_RET_PKI_INVALID_CMAC,
  GEDI_RET_PKI_INVALID_DATE,
  GEDI_RET_PKI_TR31_BLOCK_ERROR,
  GEDI_RET_PKI_INVALID_CHALLENGE,
  GEDI_RET_PKI_NO_DEV_KEY_FOUND,
  GEDI_RET_PKI_NO_CUST_KEY_FOUND,
  GEDI_RET_PKI_NO_CERTIFICATE_FOUND,
  GEDI_RET_PKI_KBPK_MISSING,
  GEDI_RET_PKI_CSR_NOT_SIGNED,

  //PENALTY
  GEDI_RET_PENALTY_ERROR = 12800,
  GEDI_RET_PENALTY_ACTIVE,

  //Generic Implementation-Level Errors
  GEDI_RET_IMPLEMENTATION_ERROR = 20000,

  //UTIL
  GEDI_RET_UTIL_ERROR = 20100,

  //MIFARE
  GEDI_RET_MIFARE_ERROR = 20200,
  GEDI_RET_MIFARE_PROTECTED,          /**< MIFARE region is protected*/
  GEDI_RET_MIFARE_NOT_FORMATTED,      /**< MIFARE block is not properly formatted*/
  GEDI_RET_MIFARE_KEYA_REQUIRED,      /**< MIFARE key A is required for this operation*/ // TODO add Key change and configuration setup
  GEDI_RET_MIFARE_KEYB_REQUIRED,      /**< MIFARE key B is required for this operation*/ // TODO add Key change and configuration setup

  //MENU
  GEDI_RET_MENU_NOT_INITIALIZED = 20300, /**< Menu was not initialized. Call GEDI_MENU_Init */

  //PCM
  GEDI_RET_PCM_NOT_OPEN = 20400,      /**< PCM wav file not open */
  GEDI_RET_PCM_HEADER_LENGTH_ERROR,   /**< PCM wav file header lenght error*/
  GEDI_RET_PCM_CHANNEL_ERROR,         /**< PCM wav file channel error*/
  GEDI_RET_PCM_HEADER_SIZE_ERROR,     /**< PCM wav file header size error*/
  GEDI_RET_PCM_FORMAT_ERROR,          /**< PCM wav file audio format error*/
  GEDI_RET_PCM_PARAMETERS_ERROR,      /**< PCM wav file parameters error*/
  GEDI_RET_PCM_PLAYING,               /**< PCM wav file is already playing*/
  GEDI_RET_PCM_PAUSED,                /**< PCM wav file is already paused*/
  
  //STAR - Telemetry
  GEDI_RET_STAR_VERSION=20500,        /**< Aplication and libStar are incompatible*/
  GEDI_RET_STAR_INVPARAM,             /**< Invalid Value for Tag*/
  GEDI_RET_STAR_UNKNOWN,              /**< Unknown Tag*/
  GEDI_RET_STAR_DLL,                  /**< Dynamic library not found*/
  GEDI_RET_STAR_INTERR,               /**< Intern Error*/
  GEDI_RET_STAR_INVSEQ,               /**< Invalid sequence (finalization tag without respective start)*/
  GEDI_RET_STAR_INIT,                 /**< Library not initialized*/

  //Eng
  GEDI_RET_ENG_ERROR = 30000
} GEDI_e_Ret;


#endif //# _GEDI_PLATFORM_ERROR_CODES_H #//
