/*******************************************************************************
* DISCLAIMER
* This software is supplied by Renesas Electronics Corporation and is only
* intended for use with Renesas products. No other uses are authorized. This
* software is owned by Renesas Electronics Corporation and is protected under
* all applicable laws, including copyright laws.
* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* Renesas reserves the right, without notice, to make changes to this software
* and to discontinue the availability of this software. By using this software,
* you agree to the additional terms and conditions found by accessing the
* following link:
* http://www.renesas.com/disclaimer
* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
*******************************************************************************/
/*******************************************************************************
* File Name    : usb0_function.h
* $Rev: 1116 $
* $Date:: 2014-07-09 16:29:19 +0900#$
* Description  : RZ/A1H R7S72100 USB Sample Program
*******************************************************************************/
#ifndef USB0_FUNCTION_H
#define USB0_FUNCTION_H


/*******************************************************************************
Includes   <System Includes> , "Project Includes"
*******************************************************************************/
#include "devdrv_usb_function_api.h"
#include "usb_function.h"


#ifdef __cplusplus
extern "C" {
#endif

/*******************************************************************************
Typedef definitions
*******************************************************************************/


/*******************************************************************************
Macro definitions
*******************************************************************************/


/*******************************************************************************
Imported global variables and functions (from other files)
*******************************************************************************/
extern const uint16_t       g_usb0_function_bit_set[];
extern uint32_t             g_usb0_function_data_count[USB_FUNCTION_MAX_PIPE_NO + 1];
extern uint8_t              *g_usb0_function_data_pointer[USB_FUNCTION_MAX_PIPE_NO + 1];

extern uint16_t             g_usb0_function_PipeIgnore[];
extern uint16_t             g_usb0_function_PipeTbl[];
extern uint16_t             g_usb0_function_pipe_status[];
extern uint32_t             g_usb0_function_PipeDataSize[];

extern USB_FUNCTION_DMA_t   g_usb0_function_DmaInfo[];
extern uint16_t             g_usb0_function_DmaPipe[];
extern uint16_t             g_usb0_function_DmaBval[];
extern uint16_t             g_usb0_function_DmaStatus[];

extern uint16_t             g_usb0_function_CtrZeroLengthFlag;

extern uint16_t             g_usb0_function_ConfigNum;
extern uint16_t             g_usb0_function_Alternate[USB_FUNCTION_ALT_NO];
extern uint16_t             g_usb0_function_RemoteWakeupFlag;
extern uint16_t             g_usb0_function_TestModeFlag;
extern uint16_t             g_usb0_function_TestModeSelectors;

extern uint16_t             g_usb0_function_ReqType;
extern uint16_t             g_usb0_function_ReqTypeType;
extern uint16_t             g_usb0_function_ReqTypeRecip;
extern uint16_t             g_usb0_function_ReqRequest;
extern uint16_t             g_usb0_function_ReqValue;
extern uint16_t             g_usb0_function_ReqIndex;
extern uint16_t             g_usb0_function_ReqLength;

extern uint16_t             g_usb0_function_EPTableIndex[USB_FUNCTION_MAX_EP_NO + 1];

extern uint16_t             g_usb0_function_pipecfg[USB_FUNCTION_MAX_PIPE_NO + 1];
extern uint16_t             g_usb0_function_pipebuf[USB_FUNCTION_MAX_PIPE_NO + 1];
extern uint16_t             g_usb0_function_pipemaxp[USB_FUNCTION_MAX_PIPE_NO + 1];
extern uint16_t             g_usb0_function_pipeperi[USB_FUNCTION_MAX_PIPE_NO + 1];


/*******************************************************************************
Exported global variables and functions (to be accessed by other files)
*******************************************************************************/
/* ==== common ==== */
void     usb0_function_dma_stop_d0(uint16_t pipe, uint32_t remain);
void     usb0_function_dma_stop_d1(uint16_t pipe, uint32_t remain);
uint16_t usb0_function_is_hispeed(void);
uint16_t usb0_function_is_hispeed_enable(void);
uint16_t usb0_function_start_send_transfer(uint16_t pipe, uint32_t size, uint8_t *data);
uint16_t usb0_function_write_buffer(uint16_t pipe);
uint16_t usb0_function_write_buffer_c(uint16_t pipe);
uint16_t usb0_function_write_buffer_d0(uint16_t pipe);
uint16_t usb0_function_write_buffer_d1(uint16_t pipe);
void     usb0_function_start_receive_transfer(uint16_t pipe, uint32_t size, uint8_t *data);
uint16_t usb0_function_read_buffer(uint16_t pipe);
uint16_t usb0_function_read_buffer_c(uint16_t pipe);
uint16_t usb0_function_read_buffer_d0(uint16_t pipe);
uint16_t usb0_function_read_buffer_d1(uint16_t pipe);
uint16_t usb0_function_change_fifo_port(uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw);
void     usb0_function_set_curpipe(uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw);
void     usb0_function_set_curpipe2(uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw, uint16_t dfacc);
uint16_t usb0_function_get_mbw(uint32_t trncount, uint32_t dtptr);
uint16_t usb0_function_read_dma(uint16_t pipe);
void     usb0_function_brdy_int(uint16_t status, uint16_t int_enb);
void     usb0_function_nrdy_int(uint16_t status, uint16_t int_enb);
void     usb0_function_bemp_int(uint16_t status, uint16_t int_enb);
void     usb0_function_setting_interrupt(uint8_t level);
void     usb0_function_reset_module(uint16_t clockmode);
uint16_t usb0_function_get_buf_size(uint16_t pipe);
uint16_t usb0_function_get_mxps(uint16_t pipe);
void     usb0_function_clear_brdy_sts(uint16_t pipe);
void     usb0_function_clear_bemp_sts(uint16_t pipe);
void     usb0_function_clear_nrdy_sts(uint16_t pipe);
void     usb0_function_set_pid_buf(uint16_t pipe);
void     usb0_function_set_pid_nak(uint16_t pipe);
void     usb0_function_set_pid_stall(uint16_t pipe);
void     usb0_function_clear_pid_stall(uint16_t pipe);
uint16_t usb0_function_get_pid(uint16_t pipe);
void     usb0_function_set_sqclr(uint16_t pipe);
void     usb0_function_set_sqset(uint16_t pipe);
void     usb0_function_set_csclr(uint16_t pipe);
void     usb0_function_aclrm(uint16_t pipe);
void     usb0_function_set_aclrm(uint16_t pipe);
void     usb0_function_clr_aclrm(uint16_t pipe);
uint16_t usb0_function_get_sqmon(uint16_t pipe);
uint16_t usb0_function_get_inbuf(uint16_t pipe);

/* ==== function ==== */
void     usb0_function_init_status(void);
void     usb0_function_InitModule(uint16_t mode);
uint16_t usb0_function_CheckVBUStaus(void);
void     usb0_function_USB_FUNCTION_Attach(void);
void     usb0_function_USB_FUNCTION_Detach(void);
void     usb0_function_USB_FUNCTION_BusReset(void);
void     usb0_function_USB_FUNCTION_Resume(void);
void     usb0_function_USB_FUNCTION_Suspend(void);
void     usb0_function_USB_FUNCTION_TestMode(void);
void     usb0_function_ResetDCP(void);
void     usb0_function_ResetEP(uint16_t num);
uint16_t usb0_function_EpToPipe(uint16_t ep);
void     usb0_function_InitEPTable(uint16_t Con_Num, uint16_t Int_Num, uint16_t Alt_Num);
uint16_t usb0_function_GetConfigNum(void);
uint16_t usb0_function_GetAltNum(uint16_t Con_Num, uint16_t Int_Num);
uint16_t usb0_function_CheckRemoteWakeup(void);
void     usb0_function_clear_alt(void);
void     usb0_function_clear_pipe_tbl(void);
void     usb0_function_clear_ep_table_index(void);
uint16_t usb0_function_GetInterfaceNum(uint16_t num);

#ifdef __cplusplus
}
#endif


#endif /* USB0_FUNCTION_H */

/* End of File */
