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  phLlcNfc_DataTypes.h
     19 * \brief Contains the structure information.
     20 *
     21 * Project: NFC-FRI-1.1
     22 *
     23 * $Date: Fri Apr 30 10:03:36 2010 $
     24 * $Author: ing02260 $
     25 * $Revision: 1.43 $
     26 * $Aliases: NFC_FRI1.1_WK1017_R34_1,NFC_FRI1.1_WK1017_R34_2,NFC_FRI1.1_WK1023_R35_1 $
     27 *
     28 */
     29 
     30 #ifndef PHLLCNFC_DATATYPES_H
     31 #define PHLLCNFC_DATATYPES_H
     32 
     33 /**
     34 *  \name LLC NFC frame creation, deletion and processing
     35 *
     36 * File: \ref phLlcNfc_DataTypes.h
     37 *
     38 */
     39 /*@{*/
     40 #define PH_LLCNFC_DATATYPES_FILEREVISION "$Revision: 1.43 $" /**< \ingroup grp_hal_nfc_llc */
     41 #define PH_LLCNFC_DATATYPES_FILEALIASES  "$Aliases: NFC_FRI1.1_WK1017_R34_1,NFC_FRI1.1_WK1017_R34_2,NFC_FRI1.1_WK1023_R35_1 $"     /**< \ingroup grp_hal_nfc_llc */
     42 /*@}*/
     43 /*************************** Includes *******************************/
     44 #include <phNfcCompId.h>
     45 /*********************** End of includes ****************************/
     46 /***************************** Macros *******************************/
     47 
     48 /* Trace buffer declaration */
     49 #if defined (LLC_TRACE)
     50     #include <phOsalNfc.h>
     51     #include <stdio.h>
     52 
     53     extern char                 phOsalNfc_DbgTraceBuffer[];
     54     #define trace_buffer        phOsalNfc_DbgTraceBuffer
     55 
     56     #define MAX_TRACE_BUFFER    150
     57     #define PH_LLCNFC_PRINT( str )  phOsalNfc_DbgString(str)
     58     #define PH_LLCNFC_PRINT_DATA(buf,len)
     59     #define PH_LLCNFC_STRING( str )
     60     #define PH_LLCNFC_DEBUG(str, arg) \
     61     {                                       \
     62         snprintf(trace_buffer,MAX_TRACE_BUFFER,str,arg);   \
     63         phOsalNfc_DbgString(trace_buffer);                 \
     64     }
     65     #define PH_LLCNFC_PRINT_BUFFER(buf,len)     \
     66     {                                       \
     67         /* uint16_t i = 0;                  \
     68         char        trace_buffer[MAX_TRACE_BUFFER];                    \
     69         snprintf(trace_buffer,MAX_TRACE_BUFFER,"\n\t %s:",msg);    \
     70         phOsalNfc_DbgString(trace);                 */\
     71         phOsalNfc_DbgTrace(buf,len);            \
     72         phOsalNfc_DbgString("\r");              \
     73     }
     74 #endif /* #if defined (LLC_TRACE) */
     75 
     76 
     77 #if (!defined (LLC_TRACE) && defined (LLC_DATA_BYTES))
     78     #include <phOsalNfc.h>
     79 
     80     extern char                 phOsalNfc_DbgTraceBuffer[];
     81     #define trace_buffer        phOsalNfc_DbgTraceBuffer
     82 
     83     #define PH_LLCNFC_PRINT( str )
     84     #define PH_LLCNFC_PRINT_BUFFER(buf, len)
     85     #define PH_LLCNFC_DEBUG(str, arg1)
     86     #define PH_LLCNFC_STRING( str )  phOsalNfc_DbgString(str)
     87     #define PH_LLCNFC_PRINT_DATA(buf,len)     \
     88     {                                       \
     89         /* uint16_t i = 0;                  \
     90         char        trace_buffer[MAX_TRACE_BUFFER];                    \
     91         snprintf(trace_buffer,MAX_TRACE_BUFFER,"\n\t %s:",msg);    \
     92         phOsalNfc_DbgString(trace_buffer);                 */\
     93         phOsalNfc_DbgTrace(buf,len);            \
     94     }
     95 #endif /* #if (!defined (LLC_TRACE) && defined (LLC_DATA_BYTES)) */
     96 
     97 
     98 #if (!defined (LLC_TRACE) && !defined (LLC_DATA_BYTES))
     99     /** To disable prints */
    100     #define PH_LLCNFC_PRINT(str)
    101     #define PH_LLCNFC_PRINT_BUFFER(buf, len)
    102     #define PH_LLCNFC_DEBUG(str, arg1)
    103     #define PH_LLCNFC_PRINT_DATA(buf,len)
    104     #define PH_LLCNFC_STRING( str )
    105 #endif /* #if (!defined (LLC_TRACE) && !defined (LLC_DATA_BYTES)) */
    106 
    107 
    108 /* If the below MACRO (RECV_NR_CHECK_ENABLE) is
    109 DEFINED : then check for the NR frame received from PN544 in the I frame is
    110     added. This shall be greater than sent NS from the HOST.
    111     This is used to stop the timer
    112 COMMENTED : dont check the N(R) frame received from the PN544
    113 */
    114 /* #define RECV_NR_CHECK_ENABLE */
    115 
    116 /* If the below MACRO (LLC_UPP_LAYER_NTFY_WRITE_RSP_CB) is
    117 DEFINED : then if an I frame is received and the
    118         upper layer response callback (before another READ is pended) is called
    119         only after sending S frame and wait for the callback and then notify the
    120         upper layer
    121 COMMENTED : then if an I frame is received and the
    122             upper layer response callback (before another READ is pended) is called
    123             immediately after sending S frame (not waiting for the sent S frame
    124             callback)
    125 */
    126 /* #define LLC_UPP_LAYER_NTFY_WRITE_RSP_CB */
    127 
    128 /* PN544 continuously sends an incorrect I frames to the HOST,
    129     even after the REJ frame from HOST to PN544
    130 If the below MACRO (LLC_RR_INSTEAD_OF_REJ) is
    131 DEFINED : then if the received NS = (expected NR - 1) then instead of REJ
    132         RR frame is sent
    133 COMMENTED : then REJ frame is sent
    134 */
    135 // #define LLC_RR_INSTEAD_OF_REJ
    136 
    137 #define SEND_UFRAME
    138 
    139 /* If the below MACRO (CTRL_WIN_SIZE_COUNT) is
    140 DEFINED : then window size will be maximum
    141 COMMENTED : then window size is 1
    142 */
    143 #define CTRL_WIN_SIZE_COUNT
    144 
    145 /*
    146 If the below MACRO (LLC_URSET_NO_DELAY) is
    147 DEFINED : then after receiving the UA frame, then immediately this will be
    148             notified or further operation will be carried on.
    149 COMMENTED : then after receiving the UA frame, then a timer is started, to
    150             delay the notifiation or to carry on the next operation
    151 */
    152 #define LLC_URSET_NO_DELAY
    153 
    154     /*
    155     If the below MACRO (LLC_RELEASE_FLAG) is
    156 DEFINED : then whenever LLC release is called the g_release_flag variable
    157                 will be made TRUE. Also, NO notification is allowed to the
    158                 upper layer.
    159 COMMENTED : g_release_flag is not declared and not used
    160     */
    161     #define LLC_RELEASE_FLAG
    162 
    163 
    164  /*
    165     Actually, there is a send and receive error count, if either of them reaches
    166     limit, then exception is raised.
    167     If the below MACRO (LLC_RSET_INSTEAD_OF_EXCEPTION) is
    168 DEFINED : then exception is not raised, instead a U RSET command is sent.
    169 COMMENTED : then exception is raised
    170     */
    171 /* #define LLC_RSET_INSTEAD_OF_EXCEPTION */
    172 
    173 #ifndef LLC_UPP_LAYER_NTFY_WRITE_RSP_CB
    174     /*
    175     If the below MACRO (PIGGY_BACK) is
    176     DEFINED : After receiving I frame, wait till the ACK timer to expire to send an ACK to PN544.
    177     COMMENTED : immediately ACK the received I frame
    178     */
    179     #define PIGGY_BACK
    180 
    181 #endif /* LLC_UPP_LAYER_NTFY_WRITE_RSP_CB */
    182 
    183 #define LLC_SEND_ERROR_COUNT
    184 
    185 #define RECV_ERROR_FRAME_COUNT                      (0x50U)
    186 #define SENT_ERROR_FRAME_COUNT                      (0x50U)
    187 
    188 /** Initial bytes to read */
    189 #define PH_LLCNFC_BYTES_INIT_READ                   (1)
    190 /** Maximum buffer that I frame can send */
    191 #define PH_LLCNFC_MAX_IFRAME_BUFLEN                 (29)
    192 #define PH_LLCNFC_MAX_UFRAME_BUFLEN                 (4)
    193 #define PH_LLCNFC_CRC_LENGTH                        (2)
    194 #define PH_LLCNFC_MAX_LLC_PAYLOAD                   ((PH_LLCNFC_MAX_IFRAME_BUFLEN) + (4))
    195 /** Maximum timer used in the Llc */
    196 #define PH_LLCNFC_MAX_TIMER_USED                    (3)
    197 /** Maximum timer used in the Llc */
    198 #define PH_LLCNFC_MAX_ACK_GUARD_TIMER               (4)
    199 /** Maximum I frame that can be stored */
    200 #define PH_LLCNFC_MAX_I_FRAME_STORE                 (8)
    201 
    202 /** Read pending for one byte */
    203 #define PH_LLCNFC_READPEND_ONE_BYTE                 (0x01U)
    204     /** Read pending for remaining byte */
    205 #define PH_LLCNFC_READPEND_REMAIN_BYTE              (0x02U)
    206 /** Read pending not done */
    207 #define PH_LLCNFC_READPEND_FLAG_OFF                 FALSE
    208 #define PH_LLCNFC_MAX_REJ_RETRY_COUNT               (200)
    209 
    210 
    211 /**** Macros for state machine ****/
    212 
    213 typedef enum phLlcNfc_State
    214 {
    215     /** This specifies that LLC is in uninitialise state */
    216     phLlcNfc_Uninitialise_State              =  0x00,
    217     /** This specifies that LLC initialise is in progress */
    218     phLlcNfc_Initialising_State              =  0x01,
    219     /** This specifies that LLC is in initialise is complete */
    220     phLlcNfc_Initialised_State               =  0x02,
    221     /** This specifies that LLC is send with the
    222     lower layer */
    223     phLlcNfc_Sending_State                   =  0x03,
    224     /** This specifies that LLC is receive with the
    225     lower layer */
    226     phLlcNfc_Receiving_State                 =  0x04,
    227     /** This specifies that LLC is receive wait with the
    228     lower layer */
    229     phLlcNfc_ReceiveWait_State               =  0x05,
    230     /** This specifies that LLC is resending the I frames */
    231     phLlcNfc_Resend_State                    =  0x06
    232 }phLlcNfc_State_t;
    233 /**** Macros for state machine end ****/
    234 
    235 /************************ End of macros *****************************/
    236 
    237 /********************** Callback functions **************************/
    238 
    239 /******************* End of Callback functions **********************/
    240 
    241 /********************* Structures and enums *************************/
    242 /**
    243 *  \ingroup grp_hal_nfc_llc
    244 *  \brief Enum to get the baud rate
    245 *
    246 *  This enum contains the baud rate information.
    247 *
    248 */
    249 /*@{*/
    250 typedef enum phLlcNfc_LlcBaudRate
    251 {
    252     /** Baud rate = 9600 */
    253     phLlcNfc_e_9600 = 0x00,
    254     /** Baud rate = 19200 */
    255     phLlcNfc_e_19200 = 0x01,
    256     /** Baud rate = 28800 */
    257     phLlcNfc_e_28800 = 0x02,
    258     /** Baud rate = 38400 */
    259     phLlcNfc_e_38400 = 0x03,
    260     /** Baud rate = 57600 */
    261     phLlcNfc_e_57600 = 0x04,
    262     /** Baud rate = 115200 */
    263     phLlcNfc_e_115200 = 0x05,
    264     /** Baud rate = 23400 */
    265     phLlcNfc_e_234000 = 0x06,
    266     /** Baud rate = 46800 */
    267     phLlcNfc_e_460800 = 0x07,
    268     /** Baud rate = 921600 */
    269     phLlcNfc_e_921600 = 0x08,
    270     /** Baud rate = 1228000 */
    271     phLlcNfc_e_1228000 = 0x09,
    272     /** Baud rate error */
    273     phLlcNfc_e_bdrate_err = 0xFF
    274 }phLlcNfc_LlcBaudRate_t;
    275 /*@}*/
    276 
    277 /**
    278 *  \ingroup grp_hal_nfc_llc
    279 *  \brief Enum to select the U or I or S frame
    280 *
    281 *  This enum is to set the frames.
    282 *
    283 */
    284 /*@{*/
    285 typedef enum phLlcNfc_LlcCmd
    286 {
    287     /** This command is for I frame (no command) */
    288     phLlcNfc_e_no_cmd = 0xFF,
    289     /** This command is for U frame */
    290     phLlcNfc_e_rset = 0x19,
    291     /** This command is for U frame */
    292     phLlcNfc_e_ua = 0x06,
    293     /** This is RR command for S frame */
    294     phLlcNfc_e_rr = 0x00,
    295     /** This is REJ command for S frame */
    296     phLlcNfc_e_rej = 0x08,
    297     /** This is RNR command for S frame */
    298     phLlcNfc_e_rnr = 0x10,
    299     /** This is SREJ command for S frame */
    300     phLlcNfc_e_srej = 0x18,
    301     /** Error command */
    302     phLlcNfc_e_error = 0xFE
    303 }phLlcNfc_LlcCmd_t;
    304 /*@}*/
    305 
    306 /**
    307 *  \ingroup grp_hal_nfc_llc
    308 *  \brief Enum to select the U or I or S frame
    309 *
    310 *  This enum is to set the frames.
    311 *
    312 */
    313 /*@{*/
    314 typedef enum phLlcNfc_FrameType
    315 {
    316     /** U frame type */
    317     phLlcNfc_eU_frame = 0x00,
    318     /** I frame type */
    319     phLlcNfc_eI_frame = 0x01,
    320     /** S frame type */
    321     phLlcNfc_eS_frame = 0x02,
    322     /** Error frame type */
    323     phLlcNfc_eErr_frame = 0x03
    324 }phLlcNfc_FrameType_t;
    325 /*@}*/
    326 
    327 /**
    328 *  \ingroup grp_hal_nfc_llc
    329 *  \brief LLC sent frame type
    330 *
    331 *  This enum values defines what are the frames sent to the PN544
    332 *
    333 */
    334 /*@{*/
    335 
    336 typedef enum phLlcNfc_eSentFrameType
    337 {
    338     invalid_frame,
    339     /* During initialisation the U RSET is sent to PN544 */
    340     init_u_rset_frame,
    341     /* During initialisation the UA is sent to PN544 */
    342     init_u_a_frame,
    343     /* After unsuccessful retries of sending I frame to PN544,
    344         URSET is sent */
    345     u_rset_frame,
    346     /* If PN544 sends the URSET frame in between any transaction, then
    347        the UA response shall be sent */
    348     u_a_frame,
    349     /* S frame is sent to PN544, this will be sent only if an I frame
    350         is received from PN544 */
    351     s_frame,
    352     /* User has sent an I frame, for that a write response callback
    353         shall be called */
    354     user_i_frame,
    355     /* LLC, internally (means stored non acknowledged frames) has sent
    356         an I frame as it doesnt get a proper acknowledgement */
    357     resend_i_frame,
    358     /* LLC, internally (means stored non acknowledged frames) has sent
    359         an I frame as it doesnt get a reject as acknowledgement */
    360     rejected_i_frame,
    361     /* LLC has received a I frame for the re-sent I frames, so an S
    362         frame is sent  */
    363     resend_s_frame,
    364     /* LLC has received a I frame for the re-sent I frames, so an S
    365         frame is sent  */
    366     resend_rej_s_frame,
    367     /* PN544 has sent an I frame, which is wrong, so send a reject S
    368         frame */
    369     reject_s_frame,
    370 #ifdef LLC_RR_INSTEAD_OF_REJ
    371 
    372     /* RR is sent instead of REJECT */
    373     rej_rr_s_frame,
    374 
    375 #endif /* #ifdef LLC_RR_INSTEAD_OF_REJ */
    376     /* For any of the above sent frames, the response shall be received */
    377     write_resp_received
    378 }phLlcNfc_eSentFrameType_t;
    379 
    380 /*@}*/
    381 
    382 /**
    383 *  \ingroup grp_hal_nfc_llc
    384 *  \brief LLC payload
    385 *
    386 *  This structure contains both the header information and
    387 *  the exact length of the buffer.
    388 *
    389 */
    390 /*@{*/
    391 typedef struct phLlcNfc_Payload
    392 {
    393     /** Llc header information */
    394     uint8_t                 llcheader;
    395 
    396     /** User or received buffer */
    397     uint8_t                 llcpayload[PH_LLCNFC_MAX_LLC_PAYLOAD];
    398 }phLlcNfc_Payload_t;
    399 /*@}*/
    400 
    401 /**
    402 *  \ingroup grp_hal_nfc_llc
    403 *  \brief Llc buffer
    404 *
    405 *  This structure contains the information of the LLC length byte
    406 * and payload.
    407 *
    408 */
    409 /*@{*/
    410 typedef struct phLlcNfc_Buffer
    411 {
    412     /** Llc length */
    413     uint8_t                 llc_length_byte;
    414 
    415     /** LLC data including the LLC header and CRC */
    416     phLlcNfc_Payload_t      sllcpayload;
    417 }phLlcNfc_Buffer_t;
    418 /*@}*/
    419 
    420 /**
    421 *  \ingroup grp_hal_nfc_llc
    422 *  \brief Packet information
    423 *
    424 *  This structure contains the length and buffer of the packet.
    425 *
    426 */
    427 /*@{*/
    428 typedef struct phLlcNfc_LlcPacket
    429 {
    430     /** Complete LLC buffer */
    431     phLlcNfc_Buffer_t           s_llcbuf;
    432 
    433     /** LLC buffer length */
    434     uint8_t                     llcbuf_len;
    435 
    436     /** Stored frame needs completion callback, to be sent to HCI */
    437     phLlcNfc_eSentFrameType_t   frame_to_send;
    438 
    439 }phLlcNfc_LlcPacket_t;
    440 /*@}*/
    441 
    442 /**
    443 *  \ingroup grp_hal_nfc_llc_helper
    444 *  \brief I frame details
    445 *
    446 *  This structure stores the information of the I frame
    447 * (to support sliding window).
    448 *
    449 */
    450 /*@{*/
    451 typedef struct phLlcNfc_StoreIFrame
    452 {
    453     /** Complete LLC packet */
    454     phLlcNfc_LlcPacket_t        s_llcpacket[PH_LLCNFC_MAX_I_FRAME_STORE];
    455 
    456     /** Window size count */
    457     uint8_t                     winsize_cnt;
    458 
    459     /** Start position */
    460     uint8_t                     start_pos;
    461 
    462 }phLlcNfc_StoreIFrame_t;
    463 /*@}*/
    464 
    465 /**
    466 *  \ingroup grp_hal_nfc_llc
    467 *  \brief LLC timer information
    468 *
    469 *  This structure contains the timer related information
    470 *
    471 */
    472 /*@{*/
    473 typedef struct phLlcNfc_Timerinfo
    474 {
    475     /** Store the timer id for each timer create */
    476     uint32_t                timer_id[PH_LLCNFC_MAX_TIMER_USED];
    477 
    478     /** This will store the connection time out value */
    479     uint16_t                con_to_value;
    480 
    481     /** This will store the guard time out values */
    482     uint16_t                guard_to_value[PH_LLCNFC_MAX_ACK_GUARD_TIMER];
    483 
    484     /** This will store the guard time out values */
    485     uint16_t                iframe_send_count[PH_LLCNFC_MAX_ACK_GUARD_TIMER];
    486 
    487     /** This will store ns value for the sent N(S) */
    488     uint8_t                 timer_ns_value[PH_LLCNFC_MAX_ACK_GUARD_TIMER];
    489 
    490     /** Each frame stored needs to be  */
    491     uint8_t                 frame_type[PH_LLCNFC_MAX_ACK_GUARD_TIMER];
    492 
    493     /** Index to re-send */
    494     uint8_t                 index_to_send;
    495 
    496     /** This is a count for gaurd time out */
    497     uint8_t                 guard_to_count;
    498 
    499 #ifdef PIGGY_BACK
    500     /** This will store the ack time out values */
    501     uint16_t                ack_to_value;
    502 #endif /* #ifdef PIGGY_BACK */
    503 
    504     /** This is a timer flag
    505         Bit 0 = 1 means connection time out started else stopped
    506         Bit 1 = 1 means guard time out started else stopped
    507         Bit 2 = 1 means ack time out started else stopped
    508     */
    509     uint8_t                 timer_flag;
    510 }phLlcNfc_Timerinfo_t;
    511 /*@}*/
    512 
    513 /**
    514 *  \ingroup grp_hal_nfc_llc
    515 *  \brief LLC frame information
    516 *
    517 *  This structure contains the information of the LLC frame.
    518 *
    519 */
    520 /*@{*/
    521 typedef struct phLlcNfc_Frame
    522 {
    523     /** N(S) - Number of information frame */
    524     uint8_t                         n_s;
    525 
    526     /** N(R) - Number of next information frame to receive */
    527     uint8_t                         n_r;
    528 
    529     /** Store the window size */
    530     uint8_t                         window_size;
    531 
    532     /** SREJ is optional, so store the flag whether it is set or not */
    533     uint8_t                         srej_on_off;
    534 
    535     /** Store the baud rate */
    536     uint8_t                         baud_rate;
    537 
    538     /** Flag to find the rset_recvd */
    539     uint8_t                         rset_recvd;
    540 
    541     /** Complete LLC packet information */
    542     phLlcNfc_LlcPacket_t            s_llcpacket;
    543 
    544     /** Store the I frames, that has been sent, Storage will be till
    545         the window size */
    546     phLlcNfc_StoreIFrame_t          s_send_store;
    547 
    548 #ifdef PIGGY_BACK
    549     /** Store the I frames, that has been received, Storage will be
    550         till the window size */
    551     phLlcNfc_StoreIFrame_t          s_recv_store;
    552 
    553     /** Response received count to send the ACK once it reaches the window size */
    554     uint8_t                         resp_recvd_count;
    555 #endif /* #ifdef PIGGY_BACK */
    556 
    557     /** To receive the packet sent by below layer */
    558     phLlcNfc_LlcPacket_t            s_recvpacket;
    559 
    560     /** Number of window I frames has to be sent again */
    561     uint8_t                         rejected_ns;
    562 
    563     /** To store the count received error frames like
    564         wrong CRC, REJ and RNR frames */
    565     uint8_t                         recv_error_count;
    566 
    567     /** Sending error frames like REJ frames to the PN544 */
    568     uint8_t                         send_error_count;
    569 
    570     /** Send U frame count  */
    571     uint8_t                         retry_cnt;
    572 
    573     /** Read pending flag, to know that read is already pended
    574         or not. Use the below macros to ON and OFF the flag
    575         PH_LLCNFC_READPEND_FLAG_OFF
    576         PH_LLCNFC_READPEND_ONE_BYTE
    577         PH_LLCNFC_READPEND_REMAIN_BYTE
    578         */
    579     uint8_t                         read_pending;
    580 
    581     /** Write pending */
    582     uint8_t                         write_pending;
    583 
    584     /** Sent frame type */
    585     phLlcNfc_eSentFrameType_t       sent_frame_type;
    586 
    587     /** upper receive called */
    588     uint8_t                         upper_recv_call;
    589 
    590     /** Status returned during DAL write */
    591     NFCSTATUS                       write_status;
    592 
    593     /** Depending on the "write_status", write call has to be called */
    594     phLlcNfc_eSentFrameType_t       write_wait_call;
    595 }phLlcNfc_Frame_t;
    596 /*@}*/
    597 
    598 /**
    599 *  \ingroup grp_hal_nfc_llc
    600 *  \brief LLC Component Context Structure
    601 *
    602 *  This structure is used to store the current context information
    603 *   of the instance.
    604 *
    605 */
    606 /*@{*/
    607 typedef struct phLlcNfc_Context
    608 {
    609     /** Information regarding all the LLC frame */
    610     phLlcNfc_Frame_t                s_frameinfo;
    611 
    612     /** Local send and receive */
    613     phNfc_sLowerIF_t                lower_if;
    614 
    615     /** Register attention, send and receive callback from the
    616         register functions of the upper layer */
    617     phNfcIF_sCallBack_t             cb_for_if;
    618 
    619     /** Store the length, which shall be sent later through the
    620         "send complete" callback */
    621     uint32_t                        send_cb_len;
    622 
    623     /** Receive buffer provided by the upper layer */
    624     uint8_t                         precv_buf[PH_LLCNFC_MAX_LLC_PAYLOAD];
    625 
    626     /** Receive length provided by the upper layer */
    627     uint32_t                        recvbuf_length;
    628 
    629     /** Llc state */
    630     phLlcNfc_State_t                state;
    631 
    632     /** Hardware information */
    633     void                            *phwinfo;
    634 
    635     /** Timer information */
    636     phLlcNfc_Timerinfo_t            s_timerinfo;
    637 }phLlcNfc_Context_t;
    638 /*@}*/
    639 /****************** End of structures and enums *********************/
    640 
    641 /******************** Function declarations *************************/
    642 
    643 /******************** Function declarations *************************/
    644 #endif /* PHLLCNFC_DATATYPES_H */
    645 
    646 
    647