Home | History | Annotate | Download | only in src
      1 /*
      2  * Copyright (C) 2010 NXP Semiconductors
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 /**
     18  * \file  phFriNfc_LlcpTransport_Connection.h
     19  * \brief
     20  *
     21  * Project: NFC-FRI
     22  *
     23  */
     24 #ifndef PHFRINFC_LLCP_TRANSPORT_CONNECTION_H
     25 #define PHFRINFC_LLCP_TRANSPORT_CONNECTION_H
     26 /*include files*/
     27 #include <phNfcTypes.h>
     28 #include <phNfcStatus.h>
     29 #include <phFriNfc.h>
     30 
     31 #include <phFriNfc_Llcp.h>
     32 
     33 void Handle_ConnectionOriented_IncommingFrame(phFriNfc_LlcpTransport_t      *pLlcpTransport,
     34                                               phNfc_sData_t                 *psData,
     35                                               uint8_t                       dsap,
     36                                               uint8_t                       ptype,
     37                                               uint8_t                       ssap);
     38 
     39 NFCSTATUS phFriNfc_LlcpTransport_ConnectionOriented_HandlePendingOperations(phFriNfc_LlcpTransport_Socket_t *pSocket);
     40 
     41 /**
     42 * \ingroup grp_lib_nfc
     43 * \brief <b>Get the local options of a socket</b>.
     44 *
     45 * This function returns the local options (maximum packet size and receive window size) used
     46 * for a given connection-oriented socket. This function shall not be used with connectionless
     47 * sockets.
     48 *
     49 * \param[out] pLlcpSocket           A pointer to a phFriNfc_LlcpTransport_Socket_t.
     50 * \param[in]  psLocalOptions        A pointer to be filled with the local options of the socket.
     51 *
     52 * \retval NFCSTATUS_SUCCESS                  Operation successful.
     53 * \retval NFCSTATUS_INVALID_PARAMETER        One or more of the supplied parameters
     54 *                                            could not be properly interpreted.
     55 * \retval NFCSTATUS_INVALID_STATE            The socket is not in a valid state, or not of
     56 *                                            a valid type to perform the requsted operation.
     57 * \retval NFCSTATUS_NOT_INITIALISED          Indicates stack is not yet initialized.
     58 * \retval NFCSTATUS_SHUTDOWN                 Shutdown in progress.
     59 * \retval NFCSTATUS_FAILED                   Operation failed.
     60 */
     61 NFCSTATUS phFriNfc_LlcpTransport_ConnectionOriented_SocketGetLocalOptions(phFriNfc_LlcpTransport_Socket_t  *pLlcpSocket,
     62                                                                           phLibNfc_Llcp_sSocketOptions_t   *psLocalOptions);
     63 
     64 /**
     65 * \ingroup grp_lib_nfc
     66 * \brief <b>Get the local options of a socket</b>.
     67 *
     68 * This function returns the remote options (maximum packet size and receive window size) used
     69 * for a given connection-oriented socket. This function shall not be used with connectionless
     70 * sockets.
     71 *
     72 * \param[out] pLlcpSocket           A pointer to a phFriNfc_LlcpTransport_Socket_t.
     73 * \param[in]  psRemoteOptions       A pointer to be filled with the remote options of the socket.
     74 *
     75 * \retval NFCSTATUS_SUCCESS                  Operation successful.
     76 * \retval NFCSTATUS_INVALID_PARAMETER        One or more of the supplied parameters
     77 *                                            could not be properly interpreted.
     78 * \retval NFCSTATUS_INVALID_STATE            The socket is not in a valid state, or not of
     79 *                                            a valid type to perform the requsted operation.
     80 * \retval NFCSTATUS_NOT_INITIALISED          Indicates stack is not yet initialized.
     81 * \retval NFCSTATUS_SHUTDOWN                 Shutdown in progress.
     82 * \retval NFCSTATUS_FAILED                   Operation failed.
     83 */
     84 NFCSTATUS phFriNfc_LlcpTransport_ConnectionOriented_SocketGetRemoteOptions(phFriNfc_LlcpTransport_Socket_t*   pLlcpSocket,
     85                                                                            phLibNfc_Llcp_sSocketOptions_t*    psRemoteOptions);
     86 
     87 /**
     88 * \ingroup grp_fri_nfc
     89 * \brief <b>Close a socket on a LLCP-connected device</b>.
     90 *
     91 * This function closes a LLCP socket previously created using phFriNfc_LlcpTransport_Socket.
     92 * If the socket was connected, it is first disconnected, and then closed.
     93 *
     94 * \param[in]  pLlcpSocket                    A pointer to a phFriNfc_LlcpTransport_Socket_t.
     95 
     96 * \retval NFCSTATUS_SUCCESS                  Operation successful.
     97 * \retval NFCSTATUS_INVALID_PARAMETER        One or more of the supplied parameters
     98 *                                            could not be properly interpreted.
     99 * \retval NFCSTATUS_FAILED                   Operation failed.
    100 */
    101 NFCSTATUS phFriNfc_LlcpTransport_ConnectionOriented_Close(phFriNfc_LlcpTransport_Socket_t*   pLlcpSocket);
    102 
    103 /**
    104 * \ingroup grp_fri_nfc
    105 * \brief <b>Listen for incoming connection requests on a socket</b>.
    106 *
    107 * This function switches a socket into a listening state and registers a callback on
    108 * incoming connection requests. In this state, the socket is not able to communicate
    109 * directly. The listening state is only available for connection-oriented sockets
    110 * which are still not connected. The socket keeps listening until it is closed, and
    111 * thus can trigger several times the pListen_Cb callback.
    112 *
    113 *
    114 * \param[in]  pLlcpSocket        A pointer to a phFriNfc_LlcpTransport_Socket_t.
    115 * \param[in]  pListen_Cb         The callback to be called each time the
    116 *                                socket receive a connection request.
    117 * \param[in]  pContext           Upper layer context to be returned in
    118 *                                the callback.
    119 *
    120 * \retval NFCSTATUS_SUCCESS                  Operation successful.
    121 * \retval NFCSTATUS_INVALID_PARAMETER        One or more of the supplied parameters
    122 *                                            could not be properly interpreted.
    123 * \retval NFCSTATUS_INVALID_STATE            The socket is not in a valid state to switch
    124 *                                            to listening state.
    125 * \retval NFCSTATUS_FAILED                   Operation failed.
    126 */
    127 NFCSTATUS phFriNfc_LlcpTransport_ConnectionOriented_Listen(phFriNfc_LlcpTransport_Socket_t*          pLlcpSocket,
    128                                                            pphFriNfc_LlcpTransportSocketListenCb_t   pListen_Cb,
    129                                                            void*                                     pContext);
    130 
    131 
    132 /**
    133 * \ingroup grp_fri_nfc
    134 * \brief <b>Accept an incoming connection request for a socket</b>.
    135 *
    136 * This functions allows the client to accept an incoming connection request.
    137 * It must be used with the socket provided within the listen callback. The socket
    138 * is implicitly switched to the connected state when the function is called.
    139 *
    140 * \param[in]  pLlcpSocket           A pointer to a phFriNfc_LlcpTransport_Socket_t.
    141 * \param[in]  psOptions             The options to be used with the socket.
    142 * \param[in]  psWorkingBuffer       A working buffer to be used by the library.
    143 * \param[in]  pErr_Cb               The callback to be called each time the accepted socket
    144 *                                   is in error.
    145 * \param[in]  pAccept_RspCb         The callback to be called when the Accept operation is completed
    146 * \param[in]  pContext              Upper layer context to be returned in the callback.
    147 *
    148 * \retval NFCSTATUS_SUCCESS                  Operation successful.
    149 * \retval NFCSTATUS_INVALID_PARAMETER        One or more of the supplied parameters
    150 *                                            could not be properly interpreted.
    151 * \retval NFCSTATUS_BUFFER_TOO_SMALL         The working buffer is too small for the MIU and RW
    152 *                                            declared in the options.
    153 * \retval NFCSTATUS_FAILED                   Operation failed.
    154 */
    155 NFCSTATUS phFriNfc_LlcpTransport_ConnectionOriented_Accept(phFriNfc_LlcpTransport_Socket_t*             pLlcpSocket,
    156                                                            phFriNfc_LlcpTransport_sSocketOptions_t*     psOptions,
    157                                                            phNfc_sData_t*                               psWorkingBuffer,
    158                                                            pphFriNfc_LlcpTransportSocketErrCb_t         pErr_Cb,
    159                                                            pphFriNfc_LlcpTransportSocketAcceptCb_t      pAccept_RspCb,
    160                                                            void*                                        pContext);
    161 
    162 
    163  /**
    164 * \ingroup grp_fri_nfc
    165 * \brief <b>Reject an incoming connection request for a socket</b>.
    166 *
    167 * This functions allows the client to reject an incoming connection request.
    168 * It must be used with the socket provided within the listen callback. The socket
    169 * is implicitly closed when the function is called.
    170 *
    171 * \param[in]  pLlcpSocket           A pointer to a phFriNfc_LlcpTransport_Socket_t.
    172 * \param[in]  pReject_RspCb         The callback to be called when the Reject operation is completed
    173 * \param[in]  pContext              Upper layer context to be returned in the callback.
    174 *
    175 * \retval NFCSTATUS_SUCCESS                  Operation successful.
    176 * \retval NFCSTATUS_INVALID_PARAMETER        One or more of the supplied parameters
    177 *                                            could not be properly interpreted.
    178 * \retval NFCSTATUS_FAILED                   Operation failed.
    179 */
    180 NFCSTATUS phLibNfc_LlcpTransport_ConnectionOriented_Reject( phFriNfc_LlcpTransport_Socket_t*           pLlcpSocket,
    181                                                             pphFriNfc_LlcpTransportSocketRejectCb_t   pReject_RspCb,
    182                                                             void                                      *pContext);
    183 
    184 /**
    185 * \ingroup grp_fri_nfc
    186 * \brief <b>Try to establish connection with a socket on a remote SAP</b>.
    187 *
    188 * This function tries to connect to a given SAP on the remote peer. If the
    189 * socket is not bound to a local SAP, it is implicitly bound to a free SAP.
    190 *
    191 * \param[in]  pLlcpSocket        A pointer to a phFriNfc_LlcpTransport_Socket_t.
    192 * \param[in]  nSap               The destination SAP to connect to.
    193 * \param[in]  psUri              The URI corresponding to the destination SAP to connect to.
    194 * \param[in]  pConnect_RspCb     The callback to be called when the connection
    195 *                                operation is completed.
    196 * \param[in]  pContext           Upper layer context to be returned in
    197 *                                the callback.
    198 *
    199 * \retval NFCSTATUS_SUCCESS                  Operation successful.
    200 * \retval NFCSTATUS_INVALID_PARAMETER        One or more of the supplied parameters
    201 *                                            could not be properly interpreted.
    202 * \retval NFCSTATUS_PENDING                  Connection operation is in progress,
    203 *                                            pConnect_RspCb will be called upon completion.
    204 * \retval NFCSTATUS_INVALID_STATE            The socket is not in a valid state, or not of
    205 *                                            a valid type to perform the requsted operation.
    206 * \retval NFCSTATUS_FAILED                   Operation failed.
    207 */
    208 NFCSTATUS phFriNfc_LlcpTransport_ConnectionOriented_Connect( phFriNfc_LlcpTransport_Socket_t*           pLlcpSocket,
    209                                                              uint8_t                                    nSap,
    210                                                              phNfc_sData_t*                             psUri,
    211                                                              pphFriNfc_LlcpTransportSocketConnectCb_t   pConnect_RspCb,
    212                                                              void*                                      pContext);
    213 
    214 /**
    215 * \ingroup grp_lib_nfc
    216 * \brief <b>Disconnect a currently connected socket</b>.
    217 *
    218 * This function initiates the disconnection of a previously connected socket.
    219 *
    220 * \param[in]  pLlcpSocket        A pointer to a phFriNfc_LlcpTransport_Socket_t.
    221 * \param[in]  pDisconnect_RspCb  The callback to be called when the
    222 *                                operation is completed.
    223 * \param[in]  pContext           Upper layer context to be returned in
    224 *                                the callback.
    225 *
    226 * \retval NFCSTATUS_SUCCESS                  Operation successful.
    227 * \retval NFCSTATUS_INVALID_PARAMETER        One or more of the supplied parameters
    228 *                                            could not be properly interpreted.
    229 * \retval NFCSTATUS_PENDING                  Disconnection operation is in progress,
    230 *                                            pDisconnect_RspCb will be called upon completion.
    231 * \retval NFCSTATUS_INVALID_STATE            The socket is not in a valid state, or not of
    232 *                                            a valid type to perform the requsted operation.
    233 * \retval NFCSTATUS_NOT_INITIALISED          Indicates stack is not yet initialized.
    234 * \retval NFCSTATUS_SHUTDOWN                 Shutdown in progress.
    235 * \retval NFCSTATUS_FAILED                   Operation failed.
    236 */
    237 NFCSTATUS phLibNfc_LlcpTransport_ConnectionOriented_Disconnect(phFriNfc_LlcpTransport_Socket_t*           pLlcpSocket,
    238                                                                pphLibNfc_LlcpSocketDisconnectCb_t         pDisconnect_RspCb,
    239                                                                void*                                      pContext);
    240 
    241 /**
    242 * \ingroup grp_fri_nfc
    243 * \brief <b>Send data on a socket</b>.
    244 *
    245 * This function is used to write data on a socket. This function
    246 * can only be called on a connection-oriented socket which is already
    247 * in a connected state.
    248 *
    249 *
    250 * \param[in]  pLlcpSocket        A pointer to a phFriNfc_LlcpTransport_Socket_t.
    251 * \param[in]  psBuffer           The buffer containing the data to send.
    252 * \param[in]  pSend_RspCb        The callback to be called when the
    253 *                                operation is completed.
    254 * \param[in]  pContext           Upper layer context to be returned in
    255 *                                the callback.
    256 *
    257 * \retval NFCSTATUS_SUCCESS                  Operation successful.
    258 * \retval NFCSTATUS_INVALID_PARAMETER        One or more of the supplied parameters
    259 *                                            could not be properly interpreted.
    260 * \retval NFCSTATUS_PENDING                  Reception operation is in progress,
    261 *                                            pSend_RspCb will be called upon completion.
    262 * \retval NFCSTATUS_INVALID_STATE            The socket is not in a valid state, or not of
    263 *                                            a valid type to perform the requsted operation.
    264 * \retval NFCSTATUS_FAILED                   Operation failed.
    265 */
    266 NFCSTATUS phFriNfc_LlcpTransport_ConnectionOriented_Send(phFriNfc_LlcpTransport_Socket_t*             pLlcpSocket,
    267                                                          phNfc_sData_t*                               psBuffer,
    268                                                          pphFriNfc_LlcpTransportSocketSendCb_t        pSend_RspCb,
    269                                                          void*                                        pContext);
    270 
    271  /**
    272 * \ingroup grp_fri_nfc
    273 * \brief <b>Read data on a socket</b>.
    274 *
    275 * This function is used to read data from a socket. It reads at most the
    276 * size of the reception buffer, but can also return less bytes if less bytes
    277 * are available. If no data is available, the function will be pending until
    278 * more data comes, and the response will be sent by the callback. This function
    279 * can only be called on a connection-oriented socket.
    280 *
    281 *
    282 * \param[in]  pLlcpSocket        A pointer to a phFriNfc_LlcpTransport_Socket_t.
    283 * \param[in]  psBuffer           The buffer receiving the data.
    284 * \param[in]  pRecv_RspCb        The callback to be called when the
    285 *                                operation is completed.
    286 * \param[in]  pContext           Upper layer context to be returned in
    287 *                                the callback.
    288 *
    289 * \retval NFCSTATUS_SUCCESS                  Operation successful.
    290 * \retval NFCSTATUS_INVALID_PARAMETER        One or more of the supplied parameters
    291 *                                            could not be properly interpreted.
    292 * \retval NFCSTATUS_PENDING                  Reception operation is in progress,
    293 *                                            pRecv_RspCb will be called upon completion.
    294 * \retval NFCSTATUS_INVALID_STATE            The socket is not in a valid state, or not of
    295 *                                            a valid type to perform the requsted operation.
    296 * \retval NFCSTATUS_FAILED                   Operation failed.
    297 */
    298 NFCSTATUS phFriNfc_LlcpTransport_ConnectionOriented_Recv( phFriNfc_LlcpTransport_Socket_t*             pLlcpSocket,
    299                                                           phNfc_sData_t*                               psBuffer,
    300                                                           pphFriNfc_LlcpTransportSocketRecvCb_t        pRecv_RspCb,
    301                                                           void*                                        pContext);
    302 #endif /* PHFRINFC_LLCP_TRANSPORT_CONNECTION_H */
    303