/**
 * @brief           GVD Error Header
 * @author          AXELL CORPORATION
 * @description     GVD エラー定義
 * @note            none
 * @history         2017_02_22  初版
 * @history         2017_10_26  Ver2.0
 * @history         2020_07_22  [SDK3.1] GVDの強制停止APIを追加 (#2964)
*/
/* DOM-IGNORE-BEGIN */
/*
 * This program was created by AXELL CORPORATION.
 * Copyright (C) 2017-2020 AXELL CORPORATION, all rights reserved.
 */

#ifndef GVD_ERROR_H
#define GVD_ERROR_H
/* DOM-IGNORE-END */

#include <stdint.h>

#ifndef GVD_MAX_ENUM
/** eunmのsentinel値 (INT_MAX) */
#define GVD_MAX_ENUM 0x7FFFFFFF
#endif


/** @brief GVD API 関数群共通の戻り値の定義 */
typedef enum {
    GVD_ERR_SUCCESS                             =  0,  /** 正常終了 */
    GVD_ERR_RESOURCE_NOT_ENOUGH                 = -1,  /** リソース不足<p>メモリ確保失敗などで発生 */
    GVD_ERR_BAD_PARAMETER                       = -2,  /** 引数不正 */
    GVD_ERR_INVALID_STREAM                      = -3,  /** 不正なストリーム */
    GVD_ERR_INVALID_STREAM_SE                   = -4,  /** 不正なストリーム [シーケンスデータ入力中] */
    GVD_ERR_FILE_OPERATION_FAILURE              = -5,  /** ファイル操作エラー */
    GVD_ERR_INVALID_STATE                       = -6,  /** ステートエラー[当該API関数の呼び出し禁止状態] */
    GVD_ERR_STREAMDATA_NOT_ENOUGH               = -7,  /** ストリーム不十分 */
    GVD_ERR_STREAMDATA_NOT_ENOUGH_SE            = -8,  /** ストリーム終端到達[シーケンスデータ入力中] */
    GVD_ERR_INVALID_CALL                        = -9,  /** API関数不適切使用<p>内蔵ストリーマ使用時 GVD_PutInputBuffer などで発生 */
    GVD_ERR_FATAL                               = -10, /** 致命的エラー */
    GVD_ERR_NOT_SUPPORTED                       = -11, /** サポート外ストリーム */
    GVD_ERR_NOT_SUPPORTED_SE                    = -12, /** サポート外ストリーム[シーケンスデータの入力中] */
    GVD_ERR_OUTPUT_CONCEALED                    = -13, /** 出力フレームが不完全 */
    GVD_ERR_DECODER_INIT_ERROR                  = -14, /** デコーダモジュール初期化エラー */
    GVD_ERR_DECODER_ERROR_STATE                 = -15, /** デコーダモジュールエラー状態検出 */
    GVD_ERR_FILE_OPERATION_TIMEDOUT             = -20, /** ファイル操作タイムアウト<p>gvdFileRead で返すとリトライさせることができます */
    GVD_ERR_UNKNOWN                             = -99, /** 未知のエラー */
    GVD_ERR_FORCE_SIZE                          = GVD_MAX_ENUM /** sentinel */
} gvdError;


/**
 * @brief           致命的エラー通知用構造体
 * @description     致命的エラー情報<p>
 *                  要因の値とエラー内容は以下の通り<p>
 *                  <table>
 *                  <tr><th>要因</th><th>内容</th></tr>
 *                  <tr><td>-0</td><td>致命的エラー未発生</td></tr>
 *                  <tr><td>-1,-2</td><td>ヒープメモリの枯渇</td></tr>
 *                  <tr><td>-4</td><td>Mutex操作の失敗</td></tr>
 *                  <tr><td>-5</td><td>ファイル操作の失敗</td></tr>
 *                  <tr><td>-6,-7,-8,-9,-10,-15</td><td>ワークメモリの枯渇</td></tr>
 *                  <tr><td>-11,-12</td><td>入力バッファの枯渇</td></tr>
 *                  <tr><td>-13,-14</td><td>出力バッファの枯渇</td></tr>
 *                  <tr><td>-18</td><td>位置情報バッファ初期化失敗</td></tr>
 *                  <tr><td>-80</td><td>ユーザによる強制停止</td></tr>
 *                  <tr><td>その他</td><td>内部エラー</td></tr>
 *                  </table>
 */
typedef struct {
    int32_t cause;			/** 致命的エラー要因 */
    uint8_t context_id;		/** コンテキストID */
} gvdFatalErrorInfo;

#endif /* GVD_ERROR_H */
