summaryrefslogtreecommitdiffstats
path: root/src/phLlcNfc_DataTypes.h
diff options
context:
space:
mode:
authorNick Pelly <npelly@google.com>2010-09-23 12:47:58 -0700
committerNick Pelly <npelly@google.com>2010-09-23 13:53:18 -0700
commit5d9927ba30ba449badb9f6df0fbeb4d6aedc6e2a (patch)
tree190f9251c6db03d3550ec7f30b51a2561c01d9cf /src/phLlcNfc_DataTypes.h
parent4ff7c86a2c706b150078274455406f1b04966e1a (diff)
downloadexternal_libnfc-nxp-5d9927ba30ba449badb9f6df0fbeb4d6aedc6e2a.zip
external_libnfc-nxp-5d9927ba30ba449badb9f6df0fbeb4d6aedc6e2a.tar.gz
external_libnfc-nxp-5d9927ba30ba449badb9f6df0fbeb4d6aedc6e2a.tar.bz2
Initial libnfc checkin
Source: Trusted_NFC_Device_Host_AA03.01e02_google.zip code drop (23-Sep-2010) Change-Id: Ie47f18423f949a8d3e0815d13f55c814312add24 Signed-off-by: Nick Pelly <npelly@google.com>
Diffstat (limited to 'src/phLlcNfc_DataTypes.h')
-rw-r--r--src/phLlcNfc_DataTypes.h641
1 files changed, 641 insertions, 0 deletions
diff --git a/src/phLlcNfc_DataTypes.h b/src/phLlcNfc_DataTypes.h
new file mode 100644
index 0000000..2257513
--- /dev/null
+++ b/src/phLlcNfc_DataTypes.h
@@ -0,0 +1,641 @@
+/*
+ * 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 phLlcNfc_DataTypes.h
+* \brief Contains the structure information.
+*
+* Project: NFC-FRI-1.1
+*
+* $Date: Fri Apr 30 10:03:36 2010 $
+* $Author: ing02260 $
+* $Revision: 1.43 $
+* $Aliases: NFC_FRI1.1_WK1017_R34_1,NFC_FRI1.1_WK1017_R34_2,NFC_FRI1.1_WK1023_R35_1 $
+*
+*/
+
+#ifndef PHLLCNFC_DATATYPES_H
+#define PHLLCNFC_DATATYPES_H
+
+/**
+* \name LLC NFC frame creation, deletion and processing
+*
+* File: \ref phLlcNfc_DataTypes.h
+*
+*/
+/*@{*/
+#define PH_LLCNFC_DATATYPES_FILEREVISION "$Revision: 1.43 $" /**< \ingroup grp_hal_nfc_llc */
+#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 */
+/*@}*/
+/*************************** Includes *******************************/
+#include <phNfcCompId.h>
+/*********************** End of includes ****************************/
+/***************************** Macros *******************************/
+
+/* Trace buffer declaration */
+#if defined (LLC_TRACE)
+ #include <phOsalNfc.h>
+ #include <stdio.h>
+
+ extern char phOsalNfc_DbgTraceBuffer[];
+ #define trace_buffer phOsalNfc_DbgTraceBuffer
+
+ #define MAX_TRACE_BUFFER 150
+ #define PH_LLCNFC_PRINT( str ) phOsalNfc_DbgString(str)
+ #define PH_LLCNFC_PRINT_DATA(buf,len)
+ #define PH_LLCNFC_STRING( str )
+ #define PH_LLCNFC_DEBUG(str, arg) \
+ { \
+ snprintf(trace_buffer,MAX_TRACE_BUFFER,str,arg); \
+ phOsalNfc_DbgString(trace_buffer); \
+ }
+ #define PH_LLCNFC_PRINT_BUFFER(buf,len) \
+ { \
+ /* uint16_t i = 0; \
+ char trace_buffer[MAX_TRACE_BUFFER]; \
+ snprintf(trace_buffer,MAX_TRACE_BUFFER,"\n\t %s:",msg); \
+ phOsalNfc_DbgString(trace); */\
+ phOsalNfc_DbgTrace(buf,len); \
+ phOsalNfc_DbgString("\r"); \
+ }
+#endif /* #if defined (LLC_TRACE) */
+
+
+#if (!defined (LLC_TRACE) && defined (LLC_DATA_BYTES))
+ #include <phOsalNfc.h>
+
+ extern char phOsalNfc_DbgTraceBuffer[];
+ #define trace_buffer phOsalNfc_DbgTraceBuffer
+
+ #define PH_LLCNFC_PRINT( str )
+ #define PH_LLCNFC_PRINT_BUFFER(buf, len)
+ #define PH_LLCNFC_DEBUG(str, arg1)
+ #define PH_LLCNFC_STRING( str ) phOsalNfc_DbgString(str)
+ #define PH_LLCNFC_PRINT_DATA(buf,len) \
+ { \
+ /* uint16_t i = 0; \
+ char trace_buffer[MAX_TRACE_BUFFER]; \
+ snprintf(trace_buffer,MAX_TRACE_BUFFER,"\n\t %s:",msg); \
+ phOsalNfc_DbgString(trace_buffer); */\
+ phOsalNfc_DbgTrace(buf,len); \
+ }
+#endif /* #if (!defined (LLC_TRACE) && defined (LLC_DATA_BYTES)) */
+
+
+#if (!defined (LLC_TRACE) && !defined (LLC_DATA_BYTES))
+ /** To disable prints */
+ #define PH_LLCNFC_PRINT(str)
+ #define PH_LLCNFC_PRINT_BUFFER(buf, len)
+ #define PH_LLCNFC_DEBUG(str, arg1)
+ #define PH_LLCNFC_PRINT_DATA(buf,len)
+ #define PH_LLCNFC_STRING( str )
+#endif /* #if (!defined (LLC_TRACE) && !defined (LLC_DATA_BYTES)) */
+
+
+/* If the below MACRO (RECV_NR_CHECK_ENABLE) is
+ENABLED : then check for the NR frame received from PN544 in the I frame is
+ added. This shall be greater than sent NS from the HOST.
+ This is used to stop the timer
+DISABLED : dont check the N9R) frame received from the PN544
+*/
+/* #define RECV_NR_CHECK_ENABLE */
+
+/* If the below MACRO (LLC_UPP_LAYER_NTFY_WRITE_RSP_CB) is
+ENABLED : then if an I frame is received and the
+ upper layer response callback (before another READ is pended) is called
+ only after sending S frame and wait for the callback and then notify the
+ upper layer
+DISABLED : then if an I frame is received and the
+ upper layer response callback (before another READ is pended) is called
+ immediately after sending S frame (not waiting for the sent S frame
+ callback)
+*/
+#define LLC_UPP_LAYER_NTFY_WRITE_RSP_CB
+
+/* PN544 continuously sends an incorrect I frames to the HOST,
+ even after the REJ frame from HOST to PN544
+If the below MACRO (LLC_RR_INSTEAD_OF_REJ) is
+ENABLED : then if the received NS = (expected NR - 1) then instead of REJ
+ RR frame is sent
+DISABLED : then REJ frame is sent
+*/
+#define LLC_RR_INSTEAD_OF_REJ
+
+#define SEND_UFRAME
+
+/* If the below MACRO (CTRL_WIN_SIZE_COUNT) is
+ENABLED : then window size will be maximum
+DISABLED : then window size is 1
+*/
+#define CTRL_WIN_SIZE_COUNT
+
+/*
+If the below MACRO (LLC_URSET_NO_DELAY) is
+ENABLED : then after receiving the UA frame, then immediately this will be
+ notified or further operation will be carried on.
+DISABLED : then after receiving the UA frame, then a timer is started, to
+ delay the notifiation or to carry on the next operation
+*/
+#define LLC_URSET_NO_DELAY
+
+#ifdef LLC_UPP_LAYER_NTFY_WRITE_RSP_CB
+
+ /* NO definition is required */
+
+#else
+
+ /*
+ This macro is useful only if the LLC_UPP_LAYER_NTFY_WRITE_RSP_CB is DISABLED
+ If the below MACRO (LLC_RELEASE_FLAG) is
+ ENABLED : then whenever LLC release is called the g_release_flag variable
+ will be made TRUE. Also, NO notification is allowed to the
+ upper layer.
+ DISABLED : g_release_flag is not declared and not used
+ */
+ #define LLC_RELEASE_FLAG
+
+#endif /* #ifdef LLC_UPP_LAYER_NTFY_WRITE_RSP_CB */
+
+ /*
+ Actually, there is a send and receive error count, if either of them reaches
+ limit, then exception is raised.
+ If the below MACRO (LLC_RSET_INSTEAD_OF_EXCEPTION) is
+ ENABLED : then exception is not raised, instead a U RSET command is sent.
+ DISABLED : then exception is raised
+ */
+/* #define LLC_RSET_INSTEAD_OF_EXCEPTION */
+
+#define LLC_SEND_ERROR_COUNT
+
+#define RECV_ERROR_FRAME_COUNT (0x50U)
+#define SENT_ERROR_FRAME_COUNT (0x50U)
+
+/** Initial bytes to read */
+#define PH_LLCNFC_BYTES_INIT_READ (1)
+/** Maximum buffer that I frame can send */
+#define PH_LLCNFC_MAX_IFRAME_BUFLEN (29)
+#define PH_LLCNFC_MAX_UFRAME_BUFLEN (4)
+#define PH_LLCNFC_CRC_LENGTH (2)
+#define PH_LLCNFC_MAX_LLC_PAYLOAD ((PH_LLCNFC_MAX_IFRAME_BUFLEN) + (4))
+/** Maximum timer used in the Llc */
+#define PH_LLCNFC_MAX_TIMER_USED (2)
+/** Maximum timer used in the Llc */
+#define PH_LLCNFC_MAX_ACK_GUARD_TIMER (4)
+/** Maximum I frame that can be stored */
+#define PH_LLCNFC_MAX_I_FRAME_STORE (8)
+
+/** Read pending for one byte */
+#define PH_LLCNFC_READPEND_ONE_BYTE (0x01U)
+ /** Read pending for remaining byte */
+#define PH_LLCNFC_READPEND_REMAIN_BYTE (0x02U)
+/** Read pending not done */
+#define PH_LLCNFC_READPEND_FLAG_OFF FALSE
+#define PH_LLCNFC_MAX_REJ_RETRY_COUNT (10)
+
+
+/**** Macros for state machine ****/
+
+typedef enum phLlcNfc_State
+{
+ /** This specifies that LLC is in uninitialise state */
+ phLlcNfc_Uninitialise_State = 0x00,
+ /** This specifies that LLC initialise is in progress */
+ phLlcNfc_Initialising_State = 0x01,
+ /** This specifies that LLC is in initialise is complete */
+ phLlcNfc_Initialised_State = 0x02,
+ /** This specifies that LLC is send with the
+ lower layer */
+ phLlcNfc_Sending_State = 0x03,
+ /** This specifies that LLC is receive with the
+ lower layer */
+ phLlcNfc_Receiving_State = 0x04,
+ /** This specifies that LLC is receive wait with the
+ lower layer */
+ phLlcNfc_ReceiveWait_State = 0x05,
+ /** This specifies that LLC is resending the I frames */
+ phLlcNfc_Resend_State = 0x06
+}phLlcNfc_State_t;
+/**** Macros for state machine end ****/
+
+/************************ End of macros *****************************/
+
+/********************** Callback functions **************************/
+
+/******************* End of Callback functions **********************/
+
+/********************* Structures and enums *************************/
+/**
+* \ingroup grp_hal_nfc_llc
+* \brief Enum to get the baud rate
+*
+* This enum contains the baud rate information.
+*
+*/
+/*@{*/
+typedef enum phLlcNfc_LlcBaudRate
+{
+ /** Baud rate = 9600 */
+ phLlcNfc_e_9600 = 0x00,
+ /** Baud rate = 19200 */
+ phLlcNfc_e_19200 = 0x01,
+ /** Baud rate = 28800 */
+ phLlcNfc_e_28800 = 0x02,
+ /** Baud rate = 38400 */
+ phLlcNfc_e_38400 = 0x03,
+ /** Baud rate = 57600 */
+ phLlcNfc_e_57600 = 0x04,
+ /** Baud rate = 115200 */
+ phLlcNfc_e_115200 = 0x05,
+ /** Baud rate = 23400 */
+ phLlcNfc_e_234000 = 0x06,
+ /** Baud rate = 46800 */
+ phLlcNfc_e_460800 = 0x07,
+ /** Baud rate = 921600 */
+ phLlcNfc_e_921600 = 0x08,
+ /** Baud rate = 1228000 */
+ phLlcNfc_e_1228000 = 0x09,
+ /** Baud rate error */
+ phLlcNfc_e_bdrate_err = 0xFF
+}phLlcNfc_LlcBaudRate_t;
+/*@}*/
+
+/**
+* \ingroup grp_hal_nfc_llc
+* \brief Enum to select the U or I or S frame
+*
+* This enum is to set the frames.
+*
+*/
+/*@{*/
+typedef enum phLlcNfc_LlcCmd
+{
+ /** This command is for I frame (no command) */
+ phLlcNfc_e_no_cmd = 0xFF,
+ /** This command is for U frame */
+ phLlcNfc_e_rset = 0x19,
+ /** This command is for U frame */
+ phLlcNfc_e_ua = 0x06,
+ /** This is RR command for S frame */
+ phLlcNfc_e_rr = 0x00,
+ /** This is REJ command for S frame */
+ phLlcNfc_e_rej = 0x08,
+ /** This is RNR command for S frame */
+ phLlcNfc_e_rnr = 0x10,
+ /** This is SREJ command for S frame */
+ phLlcNfc_e_srej = 0x18,
+ /** Error command */
+ phLlcNfc_e_error = 0xFE
+}phLlcNfc_LlcCmd_t;
+/*@}*/
+
+/**
+* \ingroup grp_hal_nfc_llc
+* \brief Enum to select the U or I or S frame
+*
+* This enum is to set the frames.
+*
+*/
+/*@{*/
+typedef enum phLlcNfc_FrameType
+{
+ /** U frame type */
+ phLlcNfc_eU_frame = 0x00,
+ /** I frame type */
+ phLlcNfc_eI_frame = 0x01,
+ /** S frame type */
+ phLlcNfc_eS_frame = 0x02,
+ /** Error frame type */
+ phLlcNfc_eErr_frame = 0x03
+}phLlcNfc_FrameType_t;
+/*@}*/
+
+/**
+* \ingroup grp_hal_nfc_llc
+* \brief LLC sent frame type
+*
+* This enum values defines what are the frames sent to the PN544
+*
+*/
+/*@{*/
+
+typedef enum phLlcNfc_eSentFrameType
+{
+ invalid_frame,
+ /* During initialisation the U RSET is sent to PN544 */
+ init_u_rset_frame,
+ /* During initialisation the UA is sent to PN544 */
+ init_u_a_frame,
+ /* After unsuccessful retries of sending I frame to PN544,
+ URSET is sent */
+ u_rset_frame,
+ /* If PN544 sends the URSET frame in between any transaction, then
+ the UA response shall be sent */
+ u_a_frame,
+ /* S frame is sent to PN544, this will be sent only if an I frame
+ is received from PN544 */
+ s_frame,
+ /* User has sent an I frame, for that a write response callback
+ shall be called */
+ user_i_frame,
+ /* LLC, internally (means stored non acknowledged frames) has sent
+ an I frame as it doesnt get a proper acknowledgement */
+ resend_i_frame,
+ /* LLC, internally (means stored non acknowledged frames) has sent
+ an I frame as it doesnt get a reject as acknowledgement */
+ rejected_i_frame,
+ /* LLC has received a I frame for the re-sent I frames, so an S
+ frame is sent */
+ resend_s_frame,
+ /* LLC has received a I frame for the re-sent I frames, so an S
+ frame is sent */
+ resend_rej_s_frame,
+ /* PN544 has sent an I frame, which is wrong, so send a reject S
+ frame */
+ reject_s_frame,
+#ifdef LLC_RR_INSTEAD_OF_REJ
+
+ /* RR is sent instead of REJECT */
+ rej_rr_s_frame,
+
+#endif /* #ifdef LLC_RR_INSTEAD_OF_REJ */
+ /* For any of the above sent frames, the response shall be received */
+ write_resp_received
+}phLlcNfc_eSentFrameType_t;
+
+/*@}*/
+
+/**
+* \ingroup grp_hal_nfc_llc
+* \brief LLC payload
+*
+* This structure contains both the header information and
+* the exact length of the buffer.
+*
+*/
+/*@{*/
+typedef struct phLlcNfc_Payload
+{
+ /** Llc header information */
+ uint8_t llcheader;
+
+ /** User or received buffer */
+ uint8_t llcpayload[PH_LLCNFC_MAX_LLC_PAYLOAD];
+}phLlcNfc_Payload_t;
+/*@}*/
+
+/**
+* \ingroup grp_hal_nfc_llc
+* \brief Llc buffer
+*
+* This structure contains the information of the LLC length byte
+* and payload.
+*
+*/
+/*@{*/
+typedef struct phLlcNfc_Buffer
+{
+ /** Llc length */
+ uint8_t llc_length_byte;
+
+ /** LLC data including the LLC header and CRC */
+ phLlcNfc_Payload_t sllcpayload;
+}phLlcNfc_Buffer_t;
+/*@}*/
+
+/**
+* \ingroup grp_hal_nfc_llc
+* \brief Packet information
+*
+* This structure contains the length and buffer of the packet.
+*
+*/
+/*@{*/
+typedef struct phLlcNfc_LlcPacket
+{
+ /** Complete LLC buffer */
+ phLlcNfc_Buffer_t s_llcbuf;
+
+ /** LLC buffer length */
+ uint8_t llcbuf_len;
+
+ /** Stored frame needs completion callback, to be sent to HCI */
+ phLlcNfc_eSentFrameType_t frame_to_send;
+
+}phLlcNfc_LlcPacket_t;
+/*@}*/
+
+/**
+* \ingroup grp_hal_nfc_llc_helper
+* \brief I frame details
+*
+* This structure stores the information of the I frame
+* (to support sliding window).
+*
+*/
+/*@{*/
+typedef struct phLlcNfc_StoreIFrame
+{
+ /** Complete LLC packet */
+ phLlcNfc_LlcPacket_t s_llcpacket[PH_LLCNFC_MAX_I_FRAME_STORE];
+
+ /** Window size count */
+ uint8_t winsize_cnt;
+
+ /** Start position */
+ uint8_t start_pos;
+
+}phLlcNfc_StoreIFrame_t;
+/*@}*/
+
+/**
+* \ingroup grp_hal_nfc_llc
+* \brief LLC timer information
+*
+* This structure contains the timer related information
+*
+*/
+/*@{*/
+typedef struct phLlcNfc_Timerinfo
+{
+ /** Store the timer id for each timer create */
+ uint32_t timer_id[PH_LLCNFC_MAX_TIMER_USED];
+
+ /** This will store the connection time out value */
+ uint16_t con_to_value;
+
+ /** This will store the guard time out values */
+ uint16_t guard_to_value[PH_LLCNFC_MAX_ACK_GUARD_TIMER];
+
+ /** This will store the guard time out values */
+ uint16_t iframe_send_count[PH_LLCNFC_MAX_ACK_GUARD_TIMER];
+
+ /** This will store ns value for the sent N(S) */
+ uint8_t timer_ns_value[PH_LLCNFC_MAX_ACK_GUARD_TIMER];
+
+ /** Each frame stored needs to be */
+ uint8_t frame_type[PH_LLCNFC_MAX_ACK_GUARD_TIMER];
+
+ /** Index to re-send */
+ uint8_t index_to_send;
+
+ /** This is a count for gaurd time out */
+ uint8_t guard_to_count;
+
+#ifdef PIGGY_BACK
+ /** This will store the ack time out values */
+ uint16_t ack_to_value[PH_LLCNFC_MAX_ACK_GUARD_TIMER];
+#endif /* #ifdef PIGGY_BACK */
+
+ /** This is a timer flag
+ Bit 0 = 1 means connection time out started else stopped
+ Bit 1 = 1 means guard time out started else stopped
+ Bit 2 = 1 means ack time out started else stopped
+ */
+ uint8_t timer_flag;
+}phLlcNfc_Timerinfo_t;
+/*@}*/
+
+/**
+* \ingroup grp_hal_nfc_llc
+* \brief LLC frame information
+*
+* This structure contains the information of the LLC frame.
+*
+*/
+/*@{*/
+typedef struct phLlcNfc_Frame
+{
+ /** N(S) - Number of information frame */
+ uint8_t n_s;
+
+ /** N(R) - Number of next information frame to receive */
+ uint8_t n_r;
+
+ /** Store the window size */
+ uint8_t window_size;
+
+ /** SREJ is optional, so store the flag whether it is set or not */
+ uint8_t srej_on_off;
+
+ /** Store the baud rate */
+ uint8_t baud_rate;
+
+ /** Flag to find the rset_recvd */
+ uint8_t rset_recvd;
+
+ /** Complete LLC packet information */
+ phLlcNfc_LlcPacket_t s_llcpacket;
+
+ /** Store the I frames, that has been sent, Storage will be till
+ the window size */
+ phLlcNfc_StoreIFrame_t s_send_store;
+
+#ifdef PIGGY_BACK
+ /** Store the I frames, that has been received, Storage will be
+ till the window size */
+ phLlcNfc_StoreIFrame_t s_recv_store;
+#endif /* #ifdef PIGGY_BACK */
+
+ /** To receive the packet sent by below layer */
+ phLlcNfc_LlcPacket_t s_recvpacket;
+
+ /** Number of window I frames has to be sent again */
+ uint8_t rejected_ns;
+
+ /** To store the count received error frames like
+ wrong CRC, REJ and RNR frames */
+ uint8_t recv_error_count;
+
+ /** Sending error frames like REJ frames to the PN544 */
+ uint8_t send_error_count;
+
+ /** Send U frame count */
+ uint8_t retry_cnt;
+
+ /** Read pending flag, to know that read is already pended
+ or not. Use the below macros to ON and OFF the flag
+ PH_LLCNFC_READPEND_FLAG_OFF
+ PH_LLCNFC_READPEND_ONE_BYTE
+ PH_LLCNFC_READPEND_REMAIN_BYTE
+ */
+ uint8_t read_pending;
+
+ /** Write pending */
+ uint8_t write_pending;
+
+ /** Sent frame type */
+ phLlcNfc_eSentFrameType_t sent_frame_type;
+
+ /** upper receive called */
+ uint8_t upper_recv_call;
+
+ /** Status returned during DAL write */
+ NFCSTATUS write_status;
+
+ /** Depending on the "write_status", write call has to be called */
+ phLlcNfc_eSentFrameType_t write_wait_call;
+}phLlcNfc_Frame_t;
+/*@}*/
+
+/**
+* \ingroup grp_hal_nfc_llc
+* \brief LLC Component Context Structure
+*
+* This structure is used to store the current context information
+* of the instance.
+*
+*/
+/*@{*/
+typedef struct phLlcNfc_Context
+{
+ /** Information regarding all the LLC frame */
+ phLlcNfc_Frame_t s_frameinfo;
+
+ /** Local send and receive */
+ phNfc_sLowerIF_t lower_if;
+
+ /** Register attention, send and receive callback from the
+ register functions of the upper layer */
+ phNfcIF_sCallBack_t cb_for_if;
+
+ /** Store the length, which shall be sent later through the
+ "send complete" callback */
+ uint32_t send_cb_len;
+
+ /** Receive buffer provided by the upper layer */
+ uint8_t precv_buf[PH_LLCNFC_MAX_LLC_PAYLOAD];
+
+ /** Receive length provided by the upper layer */
+ uint32_t recvbuf_length;
+
+ /** Llc state */
+ phLlcNfc_State_t state;
+
+ /** Hardware information */
+ void *phwinfo;
+
+ /** Timer information */
+ phLlcNfc_Timerinfo_t s_timerinfo;
+}phLlcNfc_Context_t;
+/*@}*/
+/****************** End of structures and enums *********************/
+
+/******************** Function declarations *************************/
+
+/******************** Function declarations *************************/
+#endif /* PHLLCNFC_DATATYPES_H */
+
+