#ifndef LIP_TCP_CFG_DEFS_H
#define LIP_TCP_CFG_DEFS_H


#include "lip_config.h"


#if defined LIP_CFG_TCP_ENABLE
    #define LIP_TCP_ENABLE                              LIP_CFG_TCP_ENABLE
#elif defined LIP_USE_TCP
    #define LIP_TCP_ENABLE                              1
#else
    #define LIP_TCP_ENABLE                              0
#endif

#if LIP_TCP_ENABLE
    #ifdef LIP_TCP_SOCKET_CNT
        #error LIP_TCP_SOCKET_CNT is obsoleted parameter. Use LIP_CFG_TCP_USER_SOCKET_CNT instead!
    #endif

    #ifdef LIP_CFG_TCP_USER_SOCKET_CNT
        #define LIP_TCP_USER_SOCKET_CNT                 LIP_CFG_TCP_USER_SOCKET_CNT
    #elif !defined LIP_TCP_USER_SOCKET_CNT
        #define LIP_TCP_USER_SOCKET_CNT                 0
    #endif


    #ifdef LIP_CFG_TCP_DEFAULT_CLOSE_TOUT
         #define LIP_TCP_DEFAULT_CLOSE_TOUT             LIP_CFG_TCP_DEFAULT_CLOSE_TOUT
    #elif !defined LIP_TCP_DEFAULT_CLOSE_TOUT
        #define LIP_TCP_DEFAULT_CLOSE_TOUT              2000
    #endif

    #ifdef LIP_CFG_TCP_DELAYED_ACK_TIME
        #define LIP_TCP_DELAYED_ACK_TIME                LIP_CFG_TCP_DELAYED_ACK_TIME
    #elif !defined LIP_TCP_DELAYED_ACK_TIME
        /** Опционально. Переопределяет время задержки отложенных подтверждений
            (реально время от 1 до  #LIP_TCP_DELAYED_ACK_TIME мс).
            Не может быть больше 500мс. По-умолчанию --- 200 мс */
        #define LIP_TCP_DELAYED_ACK_TIME                200
    #endif


    #ifdef LIP_CFG_TCP_CB_GET_ISS
        #define LIP_TCP_CB_GET_ISS                      LIP_TCP_CB_GET_ISS
    #elif defined LIP_TCP_CB_GET_ISS
        #undef LIP_TCP_CB_GET_ISS
        #define LIP_TCP_CB_GET_ISS                      1
    #else
        #define LIP_TCP_CB_GET_ISS                      0
    #endif


    #ifdef LIP_CFG_TCP_ENABLE_CUSTOM_DATA_COPY_FUNC
        #define LIP_TCP_ENABLE_CUSTOM_DATA_COPY_FUNC    LIP_CFG_TCP_ENABLE_CUSTOM_DATA_COPY_FUNC
    #else
        #define LIP_TCP_ENABLE_CUSTOM_DATA_COPY_FUNC    0
    #endif



    #if defined LIP_CFG_TCP_FIFO_MODE_ENABLE
        #define LIP_TCP_FIFO_MODE_ENABLE                LIP_CFG_TCP_FIFO_MODE_ENABLE
    #elif defined LIP_TCP_USE_FIFO_MODE
        #define LIP_TCP_FIFO_MODE_ENABLE                1
    #else
        #define LIP_TCP_FIFO_MODE_ENABLE                0
    #endif

    #if defined LIP_CFG_TCP_DD_MODE_ENABLE
        #define LIP_TCP_DD_MODE_ENABLE                  LIP_CFG_TCP_DD_MODE_ENABLE
    #elif defined LIP_TCP_USE_DD_MODE
        #define LIP_TCP_DD_MODE_ENABLE                  1
    #else
       #define LIP_TCP_DD_MODE_ENABLE                   0
    #endif

    #if LIP_TCP_DD_MODE_ENABLE
        #ifdef LIP_CFG_TCP_DD_LEN_TYPE_SIZE
            #define LIP_TCP_DD_LEN_TYPE_SIZE            LIP_CFG_TCP_DD_LEN_TYPE_SIZE
        #else
            #define LIP_TCP_DD_LEN_TYPE_SIZE            2
        #endif

        /** Тип целого числа для задания размера задания на обмен */
        #if LIP_TCP_DD_LEN_TYPE_SIZE == 2
            typedef uint16_t            t_lip_tcp_dd_size;
            #define LIP_TCP_DD_LEN_MAX  0xFFFFU
        #elif LIP_TCP_DD_LEN_TYPE_SIZE == 4
            typedef uint32_t            t_lip_tcp_dd_size;
            #define LIP_TCP_DD_LEN_MAX  0xFFFFFFFFUL
        #else
            #error invalid dd len type size
        #endif


        #ifdef LIP_CFG_TCP_SOCK_RX_DD_CNT
            #define LIP_TCP_SOCK_RX_DD_CNT          LIP_CFG_TCP_SOCK_RX_DD_CNT
        #elif !defined LIP_TCP_SOCK_RX_DD_CNT
            #define LIP_TCP_SOCK_RX_DD_CNT          4
        #endif


        #ifdef LIP_CFG_TCP_SOCK_TX_DD_CNT
            #define LIP_TCP_SOCK_TX_DD_CNT          LIP_CFG_TCP_SOCK_TX_DD_CNT
        #elif !defined LIP_TCP_SOCK_TX_DD_CNT
            #define LIP_TCP_SOCK_TX_DD_CNT          4
        #endif
    #endif
#endif


#endif // LIP_TCP_CFG_DEFS_H
