/*
 * Copyright (C) 2010 NXP Semiconductors
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */


/*!
* =========================================================================== *
*                                                                             *
*                                                                             *
* \file  phHciNfc_Sequence.h                                                  *
* \brief State Machine Management for the HCI and the Function Sequence       *
* for a particular State.                                                     *
*                                                                             *
*                                                                             *
* Project: NFC-FRI-1.1                                                        *
*                                                                             *
* $Date: Fri Aug 14 17:01:28 2009 $                                           *
* $Author: ing04880 $                                                         *
* $Revision: 1.12 $                                                            * 
* $Aliases: NFC_FRI1.1_WK934_R31_1,NFC_FRI1.1_WK941_PREP1,NFC_FRI1.1_WK941_PREP2,NFC_FRI1.1_WK941_1,NFC_FRI1.1_WK943_R32_1,NFC_FRI1.1_WK949_PREP1,NFC_FRI1.1_WK943_R32_10,NFC_FRI1.1_WK943_R32_13,NFC_FRI1.1_WK943_R32_14,NFC_FRI1.1_WK1007_R33_1,NFC_FRI1.1_WK1007_R33_4,NFC_FRI1.1_WK1017_PREP1,NFC_FRI1.1_WK1017_R34_1,NFC_FRI1.1_WK1017_R34_2,NFC_FRI1.1_WK1023_R35_1 $  
*                                                                             *
* =========================================================================== *
*/

/*@{*/
#ifndef PHHCINFC_SEQUENCE_H
#define PHHCINFC_SEQUENCE_H

/*@}*/


/**
 *  \name HCI
 *
 * File: \ref phHciNfc_Sequence.h
 *
 */

/*@{*/
#define PHHCINFC_SEQUENCE_FILEREVISION "$Revision: 1.12 $" /**< \ingroup grp_file_attributes */
#define PHHCINFC_SEQUENCE_FILEALIASES  "$Aliases: NFC_FRI1.1_WK934_R31_1,NFC_FRI1.1_WK941_PREP1,NFC_FRI1.1_WK941_PREP2,NFC_FRI1.1_WK941_1,NFC_FRI1.1_WK943_R32_1,NFC_FRI1.1_WK949_PREP1,NFC_FRI1.1_WK943_R32_10,NFC_FRI1.1_WK943_R32_13,NFC_FRI1.1_WK943_R32_14,NFC_FRI1.1_WK1007_R33_1,NFC_FRI1.1_WK1007_R33_4,NFC_FRI1.1_WK1017_PREP1,NFC_FRI1.1_WK1017_R34_1,NFC_FRI1.1_WK1017_R34_2,NFC_FRI1.1_WK1023_R35_1 $"    /**< \ingroup grp_file_attributes */
/*@}*/


/*
################################################################################
***************************** Header File Inclusion ****************************
################################################################################
*/

#include <phHciNfc_Generic.h>

/*
################################################################################
****************************** Macro Definitions *******************************
################################################################################
*/

/*
################################################################################
************************* Function Prototype Declaration ***********************
################################################################################
*/


/**
 * \ingroup grp_hci_nfc
 *
 *  The phHciNfc_FSM_Update function Validates the HCI State to
 *  the next operation ongoing.
 *
 *  \param[in]  psHciContext            psHciContext is the context of
 *                                      the HCI Layer.
 *  \param[in]  state                   state is the state to which the
 *                                      current HCI Layer state is validated.
 *  \param[in]  validate_type           validate the state by the type of the
 *                                      validation required.
 *
 *  \retval NFCSTATUS_SUCCESS           FSM Validated successfully .
 *  \retval NFCSTATUS_INVALID_STATE     The supplied state parameter is invalid.
 *
 */

extern 
NFCSTATUS 
phHciNfc_FSM_Validate(  
                        phHciNfc_sContext_t *psHciContext,  
                        phHciNfc_eState_t state,  
                        uint8_t validate_type
                    );

/**
 * \ingroup grp_hci_nfc
 *
 *  The phHciNfc_FSM_Update function Checks and Updates the HCI State to
 *  the next valid State.
 *
 *  \param[in]  psHciContext            psHciContext is the context of
 *                                      the HCI Layer.
 *  \param[in]  next_state              next_state is the state to which
 *                                      we the HCI Layer.
 *  \param[in]  transition              transiton of the state whether 
 *                                      ongoing or complete .
 *
 *  \retval NFCSTATUS_SUCCESS           FSM Updated successfully .
 *  \retval NFCSTATUS_INVALID_STATE     The supplied state parameter is invalid.
 *
 */

extern
NFCSTATUS
phHciNfc_FSM_Update(
                        phHciNfc_sContext_t *psHciContext,
                        phHciNfc_eState_t   next_state
                   );

/**
 * \ingroup grp_hci_nfc
 *
 *  The phHciNfc_FSM_Complete function completes the  ongoing state transition 
 *  from the current state to the next state.
 *
 *  \param[in]  psHciContext            psHciContext is the context of
 *                                      the HCI Layer.
 *
 *  \retval NFCSTATUS_SUCCESS           FSM Updated successfully .
 *  \retval NFCSTATUS_INVALID_STATE     The supplied state parameter is invalid.
 *
 */

extern
NFCSTATUS
phHciNfc_FSM_Complete(
                        phHciNfc_sContext_t *psHciContext
                    );


/**
 * \ingroup grp_hci_nfc
 *
 *  The phHciNfc_FSM_Rollback function rolls back to previous valid state 
 *  and abort the ongoing state transition. 
 *
 *  \param[in]  psHciContext            psHciContext is the context of
 *                                      the HCI Layer.
 *
 *  \retval NONE.
 *
 */

extern
void
phHciNfc_FSM_Rollback(
                        phHciNfc_sContext_t *psHciContext
                    );



/**
 * \ingroup grp_hci_nfc
 *
 *  The phHciNfc_Initialise_Sequence function sequence initialises the 
 *  HCI layer and the remote device by performing the operations required
 *  setup the reader and discovery functionality.
 *
 *  \param[in]  psHciContext            psHciContext is the context of
 *                                      the HCI Layer.
 *  \param[in]  pHwRef                  pHwRef is the Information of
 *                                      the Device Interface Link .
 *
 *  \retval NFCSTATUS_SUCCESS           HCI current initialise sequence successful.
 *  \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters
 *                                      could not be interpreted properly.
 *  \retval Other errors                Other related errors
 *
 */


extern
NFCSTATUS
phHciNfc_Initialise_Sequence(
                                phHciNfc_sContext_t     *psHciContext,
                                void                    *pHwRef
                             );

/**
 * \ingroup grp_hci_nfc
 *
 *  The phHciNfc_PollLoop_Sequence function sequence starts the  
 *  discovery sequence of device.
 *
 *  \param[in]  psHciContext            psHciContext is the context of
 *                                      the HCI Layer.
 *  \param[in]  pHwRef                  pHwRef is the Information of
 *                                      the Device Interface Link .
 *
 *  \retval NFCSTATUS_SUCCESS           HCI Discovery Configuration sequence successful.
 *  \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters
 *                                      could not be interpreted properly.
 *  \retval Other errors                Other related errors
 *
 */

extern
NFCSTATUS
phHciNfc_PollLoop_Sequence(
                            phHciNfc_sContext_t     *psHciContext,
                            void                    *pHwRef
                         );


/**
 * \ingroup grp_hci_nfc
 *
 *  The phHciNfc_EmulationCfg_Sequence function sequence configures the  
 *  device for different types of emulation supported.
 *
 *  \param[in]  psHciContext            psHciContext is the context of
 *                                      the HCI Layer.
 *  \param[in]  pHwRef                  pHwRef is the Information of
 *                                      the Device Interface Link .
 *
 *  \retval NFCSTATUS_SUCCESS           HCI Emulation Configuration 
 *                                      sequence successful.
 *  \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters
 *                                      could not be interpreted properly.
 *  \retval Other errors                    Other related errors
 *
 */

extern
NFCSTATUS
phHciNfc_EmulationCfg_Sequence(
                           phHciNfc_sContext_t      *psHciContext,
                           void                 *pHwRef
                           );


/**
 * \ingroup grp_hci_nfc
 *
 *  The phHciNfc_SmartMx_Mode_Sequence function sequence configures the  
 *  SmartMx device for different modes by enabling and disabling polling.
 *
 *  \param[in]  psHciContext            psHciContext is the context of
 *                                      the HCI Layer.
 *  \param[in]  pHwRef                  pHwRef is the Information of
 *                                      the Device Interface Link .
 *
 *  \retval NFCSTATUS_SUCCESS           HCI SmartMX Mode Configuration 
 *                                      sequence successful.
 *  \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters
 *                                      could not be interpreted properly.
 *  \retval Other errors                 Other related errors
 *
 */

extern
NFCSTATUS
phHciNfc_SmartMx_Mode_Sequence(
                           phHciNfc_sContext_t      *psHciContext,
                           void                     *pHwRef
                          );


/**
 * \ingroup grp_hci_nfc
 *
 *  The phHciNfc_Connect_Sequence function sequence selects the  
 *  discovered target for performing the transaction.
 *
 *  \param[in]  psHciContext            psHciContext is the context of
 *                                      the HCI Layer.
 *  \param[in]  pHwRef                  pHwRef is the Information of
 *                                      the Device Interface Link .
 *
 *  \retval NFCSTATUS_SUCCESS           HCI target selection sequence successful.
 *  \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters
 *                                      could not be interpreted properly.
 *  \retval Other errors                Other related errors
 *
 */

extern
NFCSTATUS
phHciNfc_Connect_Sequence(
                            phHciNfc_sContext_t     *psHciContext,
                            void                    *pHwRef
                         );


/**
 * \ingroup grp_hci_nfc
 *
 *  The phHciNfc_Disconnect_Sequence function sequence de-selects the  
 *  selected target .
 *
 *  \param[in]  psHciContext            psHciContext is the context of
 *                                      the HCI Layer.
 *  \param[in]  pHwRef                  pHwRef is the Information of
 *                                      the Device Interface Link .
 *
 *  \retval NFCSTATUS_SUCCESS           HCI target de-selection sequence successful.
 *  \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters
 *                                      could not be interpreted properly.
 *  \retval Other errors                Other related errors
 *
 */

extern
NFCSTATUS
phHciNfc_Disconnect_Sequence(
                            phHciNfc_sContext_t     *psHciContext,
                            void                    *pHwRef
                         );

/**
 * \ingroup grp_hci_nfc
 *
 *  The phHciNfc_Error_Sequence function sequence notifies the  
 *  error in the HCI sequence to the upper layer .
 *
 *  \param[in]  psHciContext            psHciContext is the context of
 *                                      the HCI Layer.
 *  \param[in]  pHwRef                  pHwRef is the Information of
 *                                      the Device Interface Link .
 *  \param[in]  status                  Notify status information from the 
 *                                      HCI layer to the Upper Layer.
 *                                      
 *
 *  \retval NFCSTATUS_SUCCESS           HCI Error sequence Notification successful.
 *  \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters
 *                                      could not be interpreted properly.
 *  \retval Other errors                Other related errors
 *
 */
extern
void
phHciNfc_Error_Sequence(
                                void            *psContext,
                                void            *pHwRef,
                                NFCSTATUS       error_status,
                                void            *pdata,
                                uint8_t         length
                        );


/**
 * \ingroup grp_hci_nfc
 *
 *  The phHciNfc_Resume_Sequence function sequence resumes the  
 *  previous pending sequence of HCI .
 *
 *  \param[in]  psHciContext            psHciContext is the context of
 *                                      the HCI Layer.
 *  \param[in]  pHwRef                  pHwRef is the Information of
 *                                      the Device Interface Link .
 *
 *  \retval NFCSTATUS_SUCCESS           HCI sequence resume successful.
 *  \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters
 *                                      could not be interpreted properly.
 *  \retval Other errors                Other related errors
 *
 */

extern
NFCSTATUS
phHciNfc_Resume_Sequence(
                                phHciNfc_sContext_t     *psHciContext,
                                void                    *pHwRef
                          );


/**
 * \ingroup grp_hci_nfc
 *
 *  The phHciNfc_Release_Sequence function sequence releases the 
 *  HCI layer and the remote device by performing the operations required
 *  release the reader and discovery functionality.
 *
 *  \param[in]  psHciContext            psHciContext is the context of
 *                                      the HCI Layer.
 *  \param[in]  pHwRef                  pHwRef is the Information of
 *                                      the Device Interface Link .
 *
 *  \retval NFCSTATUS_SUCCESS           HCI current release sequence successful.
 *  \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters
 *                                      could not be interpreted properly.
 *  \retval Other errors                Other related errors
 *
 */


extern
NFCSTATUS
phHciNfc_Release_Sequence(
                            phHciNfc_sContext_t     *psHciContext,
                            void                    *pHwRef
                         );


/*
################################################################################
***************************** Function Definitions *****************************
################################################################################
*/

#endif