#ifndef SCPI_BASE_H
#define SCPI_BASE_H
    // ==============================================================================================
    // @eScpiStatus_t
    // Parser-functions returns statuses:
    typedef enum
    {
        eScpiStatus__min = -2147483648,   // don't care, just makes the enum to take 4 bytes
        // ------------------------------------------------------------------------------------------
        // Error statuses:
        eScpiStatus_invalid = -2,         // Invalid argument value, check the input parameters and repeat        
        eScpiStatus_failed = -1,          // Operation failed due to some run-time error

        // Success status:
        eScpiStatus_success = 0,          // Operation succeeded

        // Warning status:
        eScpiStatus_need_data = 1,        // Operation is in progress, need more data to continue

        // ------------------------------------------------------------------------------------------
        eScpiStatus__max = 2147483647     // don't care, just makes the enum to take 4 bytes
    }
    eScpiStatus_t;

    // ==============================================================================================
    typedef struct
    {
        const char * shead;   // token beginning
        const char * stail;   // token ending
    }
    sStrToken_t;
    // ==============================================================================================
    typedef const char * xArgument_t;     // NULL-terminated string, command argument string
    // ==============================================================================================
    
    // ==============================================================================================
    #define SCPI_VERSION_YEAR       1999  // SCPI Version 1999.0
    #define SCPI_VERSION_REVISION   0     // SCPI Version 1999.0

    // SCPI Maximum input command string length
    #define SCPI_MAX_INPUT_COMMAND  384

    // SCPI Error log capacity in bytes (including service overhead)
    #define SCPI_ERRORLOG_CAPACITY  384

    // SCPI Error description length (maximum)
    #define SCPI_ERRORMSG_MAX       128

    // SCPI Command Arguments limit for all the commands
    #define SCPI_MAX_ARGS           5

    // General purpose command buffer
    #define SCPI_MAX_CMD_TEMP_BUFFER  128
    
    // SCPI Array Arguments Buffer
    #define SCPI_MAX_ARRAY_ARG_BUFFER   50

    // Maximum recursive call depth during command processing
    // If no optional subsystems is used, set the value to 1.
    #define SCPI_MAX_CMD_SEARCH_DEPTH  5

    // @SCPI_MAX_NUMBER_LENGTH
    // Maximum supporting length of SCPI Numbers
    // See @processNumericArgument for details
    #define SCPI_MAX_NUMBER_LENGTH  64
#endif