/**
 * @brief           USBH CDC Log Header
 * @author          AXELL CORPORATION
 * @description     USBH CDC Log Header
 * @note            none
 * @history         2017_02_22  初版
 * @history         2017_10_26  Ver2.0
*/
/* DOM-IGNORE-BEGIN */
/*
 * This program was created by AXELL CORPORATION.
 * Copyright (C) 2017 AXELL CORPORATION, all rights reserved.
 */


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

/*****************************************************************************/
/*     include files                                                         */
/*****************************************************************************/
#include "uhs_type.h"

/*****************************************************************************/
/*     define value                                                          */
/*****************************************************************************/

/*****************************************************************************/
/*     enum data                                                             */
/*****************************************************************************/
/* ログ値の定義 */
typedef enum {
	USBCDC_LOG_SUCCESS,							/* 成功 */
	USBCDC_LOG_BASE = 0x200,					/* エラーコードの基準値 */
	USBCDC_LOG_HALT_PIPE,						/* PipeがHALTしている */
	USBCDC_LOG_ALREADY_INIT,					/* ドライバが既に初期化済 */
	USBCDC_LOG_NOT_INIT,						/* ドライバ未初期化 */
	USBCDC_LOG_NO_CDC,							/* コミュニケーションデバイス未接続 */
	USBCDC_LOG_NOT_USE,							/* コミュニケーションデバイス未初期化 */
	USBCDC_LOG_NO_SUPPORT,						/* 非対応のコミュニケーションデバイスが接続されている */
	USBCDC_LOG_ALREADY_REGIST,					/* CallBack 登録処理が既に実施済み */
	USBCDC_LOG_ALREADY_OPEN,					/* Open 処理が既に実施済み */
	USBCDC_LOG_ALREADY_CLOSE,					/* Close 処理が既に実施済み */
	USBCDC_LOG_NOT_OPEN,						/* Open 処理が未実施 */
	USBCDC_LOG_ALREADY_START_BULKIN,			/* Bulk IN 要求が既に発行済み */
	USBCDC_LOG_ALREADY_STOP_BULKIN,				/* Bulk IN 要求が既に停止済み */
	USBCDC_LOG_BUFF_FULL_BULKIN,				/* Bulk IN バッファフル */
    USBCDC_LOG_FAILED_CBI_INIT,					/* Control Bulk Interrupt 層の初期化に失敗 */
    USBCDC_LOG_FAILED_CBI_EXIT,					/* Control Bulk Interrupt 層の終了処理に失敗 */
    
    USBCDC_LOG_FAILED_CRE_CDCD,					/* CommunicationDeviceClassDriverの作成に失敗 */
    USBCDC_LOG_FAILED_DEL_CDCD,					/* CommunicationDeviceClassDriverの削除に失敗 */
    USBCDC_LOG_FAILED_BULK,						/* バルク転送に失敗 */
    USBCDC_LOG_FAILED_CTRL,						/* コントロール転送に失敗 */
    USBCDC_LOG_FAILED_INTERRUPT,				/* インターラプト転送に失敗 */
    USBCDC_LOG_FAILED_STDREQ,					/* 標準リクエストに失敗 */
    USBCDC_LOG_FAILED_CLSREQ,					/* クラスリクエストに失敗 */
	USBCDC_LOG_FAILED_CRE_CDD,					/* CdcDeviceの作成に失敗 */
	USBCDC_LOG_FAILED_ADD_CDD,					/* CdcDeviceの追加に失敗 */
    USBCDC_LOG_FAILED_REMOVE_CDD,				/* CdcDeviceの開放に失敗 */
	USBCDC_LOG_FAILED_CRE_CPIPE,				/* ControlPIPEの作成に失敗 */
	USBCDC_LOG_FAILED_OPEN_CPIPE,				/* ControlPIPEのOpenに失敗 */
	USBCDC_LOG_FAILED_CRE_BPIPE,				/* BulkPIPEの作成に失敗 */
	USBCDC_LOG_FAILED_OPEN_BPIPE,				/* BulkPIPEのOpenに失敗 */
	USBCDC_LOG_FAILED_CRE_IPIPE,				/* InterruptPIPEの作成に失敗 */
	USBCDC_LOG_FAILED_OPEN_IPIPE,				/* InterruptPIPEのOpenに失敗 */
    
    USBCDC_LOG_INTERNAL_FAILED_CORE,			/* コアからエラーが報告された */
    USBCDC_LOG_INTERNAL_FAILED_CDC,				/* ドライバ内部エラーが発生した */
    USBCDC_LOG_SYS_SYSTEM_ERROR,				/* システムエラーが発生した */
    USBCDC_LOG_SYS_OUT_OF_RESOURCE,				/* システムリソース(セマフォ、フラグ、メモリ)のアクセスでエラーが発生した */
    USBCDC_LOG_SYS_PARAM_ERROR,					/* パラメータ指定に誤りがあった */
	USBCDC_LOG_ALREADY_START_INTIN,				/* Interrupt IN 要求が既に発行済み */
	USBCDC_LOG_ALREADY_STOP_INTIN				/* Interrupt IN 要求が既に停止済み */
} USB_CDC_LOG;

/* 警告コード */
typedef enum {
	USBCDC_WARNCODE_BASE = 0x0400,
	USBCDC_WARNING_OVERCONN
} USB_CDC_WARNING;

/* Milestone 値の定義 */
typedef enum {
	USBCDC_CHECKPOINT_BASE = 0x1000,
	USBCDC_CHKPOINTS_API_INITIALIZE,			/* Usbh_Cdc_Init APIがコールされた */
	USBCDC_CHKPOINTS_API_INITIALIZE_FINISH,		/* Usbh_Cdc_Init APIがコールされ、正常終了した */
	USBCDC_CHKPOINTS_API_FINALIZE,				/* Usbh_Cdc_Exit APIがコールされた */
	USBCDC_CHKPOINTS_API_FINALIZE_FINISH,		/* Usbh_Cdc_Exit APIがコールされ、正常終了した */
	USBCDC_CHKPOINTS_API_REGIST,				/* Usbh_Cdc_RegistCallBack APIがコールされた */
	USBCDC_CHKPOINTS_API_REGIST_FINISH,			/* Usbh_Cdc_RegistCallBack APIがコールされ、正常終了した */
	USBCDC_CHKPOINTS_API_OPEN,					/* Usbh_Cdc_Open APIがコールされた */
	USBCDC_CHKPOINTS_API_OPEN_FINISH,			/* Usbh_Cdc_Open APIがコールされ、正常終了した */
	USBCDC_CHKPOINTS_API_CLOSE,					/* Usbh_Cdc_Close APIがコールされた */
	USBCDC_CHKPOINTS_API_CLOSE_FINISH,			/* Usbh_Cdc_Close APIがコールされ、正常終了した */
	USBCDC_CHKPOINTS_EVNT_ATTACH_DEVICE,		/* USB Host Coreからコミュニケーションデバイスの接続通知を受信した */
	USBCDC_CHKPOINTS_EVNT_DETACH_DEVICE			/* USB Host Coreからコミュニケーションデバイスの切断通知を受信した */
} USB_CDC_MILESTONE;

/*****************************************************************************/
/*     typedef                                                               */
/*****************************************************************************/

/*****************************************************************************/
/*     extern function                                                       */
/*****************************************************************************/
void Usbh_Cdc_Log_ReportError(const char *pFunctionName, uhs_ubit32_t nLine, uhs_ubit16_t nError, uhs_ubit8_t *pMesg, uhs_ubit16_t u16Length);
void Usbh_Cdc_Log_ReportWarning(const char *pFunctionName, uhs_ubit32_t nLine, uhs_ubit16_t nWarning, uhs_ubit8_t *pMesg, uhs_ubit16_t u16Length);
void Usbh_Cdc_Log_ReportMilestone(uhs_ubit16_t u16CheckPointNum);
void Usbh_Cdc_Log_ReportDummy(uhs_ubit16_t nError);

/*****************************************************************************/
/*     extern variable                                                       */
/*****************************************************************************/

/*****************************************************************************/
/*     define macro                                                          */
/*****************************************************************************/

/*****************************************************************************/
/*     const value                                                           */
/*****************************************************************************/

/*****************************************************************************/
/*     global variable                                                       */
/*****************************************************************************/


#endif /* __USB_CDC_LOG_H__ */
