/*****************************************************************************/
/* Copyright 1992 MBARI                                                      */
/*****************************************************************************/
/* Summary  : Data Manager error checking functions                          */
/* Filename : dmCheck.c                                                      */
/* Author   : Janice Tarrant                                                 */
/* Project  : Tiburon                                                        */
/* Version  : Version 1.0                                                    */
/* Created  : 09/16/92                                                       */
/* Modified : 07/14/93                                                       */
/* Archived :                                                                */
/*****************************************************************************/
/* Modification History :                                                    */
/* $Header$
 * $Log$
 *
 */
/*****************************************************************************/

#include <vxWorks.h>            /* VxWorks system declarations               */
#include <semLib.h>             /* VxWorks semaphore library                 */
#include <systime.h>            /* VxWorks system time declarations          */
#include <types.h>              /* MBARI style guide type declarations       */
#include <usrTime.h>            /* MBARI time declarations                   */
#include <datamgr.h>            /* data manager declarations                 */
#include <dm_errno.h>           /* data manager error declarations           */

/******************************************************************************/
/* Function : checkCreate                                                     */
/* Purpose  : Checks success of data manager item creation.                   */
/* Inputs   : Data manager error code and item name string.                   */
/* Outputs  : Returns OK or ERROR.                                            */
/******************************************************************************/
    Errno
checkCreate(Errno status, char *itemName, MBool logWarning)
{

    if (status != SUCCESS)
    {
        if (status == EDM_NAME_EXISTS)
        {
            if (logWarning)
                logMsg("Data Manager Status WARNING : %s\ndm_create item already exists\n",
                       itemName);
            return(OK);
        }
        else                            /* EDM_NOSEM or EDM_NOSPACE or        */
        {                               /* EDM_TOO_BIG or EDM_BAD_TYPE        */
            logMsg("Data Manager Status FAILURE : %s\nerror code %x\ncould not dm_create item\n",
                   itemName, status);
            return(ERROR);
        }
    }

    return(OK);

} /* checkCreate */


/******************************************************************************/
/* Function : checkLookup                                                     */
/* Purpose  : Checks success of data manager item lookup.                     */
/* Inputs   : Data manager item handle and item name string.                  */
/* Outputs  : Returns OK or ERROR.                                            */
/******************************************************************************/
    Errno
checkLookup(DM_Item item, char *itemName)
{

    if (item == NO_ITEM)
    {
        logMsg("Data Manager Status FAILURE : %s\ndm_lookup item does not exist\n",
               itemName);
        return(ERROR);
    }

    return(OK);

} /* checkLookup */


/******************************************************************************/
/* Function : checkProvider                                                   */
/* Purpose  : Checks success of data manager start item provider.             */
/* Inputs   : Data manager error code and error message.                      */
/* Outputs  : Returns OK or ERROR.                                            */
/******************************************************************************/
    Errno
checkProvider(Errno status, char *errorMsg)
{

    if (status != SUCCESS)
    {
        if (status == EDM_BADITEM)
            logMsg("Data Manager Status FAILURE : %s\ndm_start_provider item is not valid\n",
                   errorMsg);
        else if( status == EDM_PROVIDER_CONFLICT)
            logMsg("Data Manager Status FAILURE : %s\ndm_start_provider item already has a provider\n",
                   errorMsg);
        else
            logMsg("Data Manager Status FAILURE : %s\ndm_start_provider unknown error code %x\n", errorMsg, status);
        return(ERROR);
    }

    return(OK);

} /* checkProvider */


/******************************************************************************/
/* Function : checkConsumer                                                   */
/* Purpose  : Checks success of data manager start item consumer.             */
/* Inputs   : Data manager error code and error message.                      */
/* Outputs  : Returns OK or ERROR.                                            */
/******************************************************************************/
    Errno
checkConsumer(Errno status, char *errorMsg, MBool logWarning)
{

    if (status != SUCCESS)
    {
        if (status == EDM_BADITEM)
        {
            logMsg("Data Manager Status FAILURE : %s\ndm_start_consumer item not valid\n",
                   errorMsg);
            return(ERROR);
        }
        else if (status == EDM_NOSPACE)
        {
            logMsg("Data Manager Status FAILURE : %s\n out of memory\n", errorMsg);
            return(ERROR);
        }
        else if (status == EDM_ISCONSUMER)
            if (logWarning)
            {
                logMsg("Data Manager Status WARNING : %s\ndm_start_consumer task is already consumer\n",
                       errorMsg);
                return(OK);
            }
        else if (status == EDM_NOPROVIDER)
            if (logWarning)
            {
                logMsg("Data Manager Status WARNING : %s\ndm_start_consumer item has no provider\n",
                       errorMsg);
                return(OK);
            }
        else if ((status == EDM_TOOFAST) || (status == EDM_PERIOD))
            if (logWarning)
            {
                logMsg("Data Manager Status WARNING : %s\ndm_start_consumer item period different to provider\n",
                      errorMsg);
               return(OK);
            }
        else
        {
            logMsg("Data Manager Status FAILURE : %s\ndm_start_consumer unknown error code %x\n",
                   errorMsg, status);
            return(ERROR);

        }
    }

    return(OK);

} /* checkConsumer */


/******************************************************************************/
/* Function : checkWrite                                                      */
/* Purpose  : Checks success of data manager item write.                      */
/* Inputs   : Data manager error code and error message.                      */
/* Outputs  : Returns OK or ERROR.                                            */
/******************************************************************************/
    Errno
checkWrite(Errno status, char *errorMsg)
{

    if (status != SUCCESS)
    {
        if (status == EDM_BADITEM)
            logMsg("Data Manager Status FAILURE : %s\ndm_write item is not valid\n",
                   errorMsg);
        else if (status == EDM_NOTPROVIDER)
            logMsg("Data Manager Status FAILURE : %s\ntask is not provider of dm_write item\n",
                   errorMsg);
        else if (status == EDM_TOOBIG)
            logMsg("Data Manager Status FAILURE : %s\ndm_write item is too big\n",
                   errorMsg);
        else
            logMsg("Data Manager Status FAILURE : %s\ndm_write unknown error code %x\n",
                   errorMsg, status);
        return(ERROR);
    }

    return(OK);

} /* checkWrite */


/******************************************************************************/
/* Function : checkRead                                                       */
/* Purpose  : Checks success of data manager item read.                       */
/* Inputs   : Data manager error code and error message.                      */
/* Outputs  : Returns OK or ERROR.                                            */
/******************************************************************************/
    Errno
checkRead(Errno status, char *errorMsg, MBool logWarning)
{

    if (status != SUCCESS)
    {
        if (status == EDM_NOPROVIDER)
        {
            if (logWarning)
                logMsg("Data Manager Status WARNING : %s\ndm_read item has no current provider\n",
                       errorMsg);
            return(OK);
        }
        else if (status == EDM_BADITEM)
            logMsg("Data Manager Status FAILURE : %s\ndm_read item is not valid\n",
                   errorMsg);
        else if (status == EDM_NOTCONSUMER)
            logMsg("Data Manager Status FAILURE : %s\ntask is not consumer of dm_read item\n",
                   errorMsg);
        else
            logMsg("Data Manager Status FAILURE : %s\ndm_read unknown error code %x\n",
                   errorMsg, status);
        return(ERROR);
    }

    return(OK);

} /* checkRead */


/******************************************************************************/
/* Function : checkConnect                                                    */
/* Purpose  : Checks success of data manager connect item.                    */
/* Inputs   : Data manager error code and error message.                      */
/* Outputs  : Returns OK or ERROR.                                            */
/******************************************************************************/
    Errno
checkConnect(Errno status, char *errorMsg)
{

    if (status != SUCCESS)
    {
        if (status == EDM_WRONG_SIZE)
        {
            logMsg("Data Manager Status WARNING : %s\nconnected items are of different size\n",
                   errorMsg);
            return(OK);
        }
        else if (status == EDM_ISCONNECTED)
        {
            logMsg("Data Manager Status WARNING : %s\ndestination item is already connected\n",
                   errorMsg);
            return(OK);
        }
        else if (status == EDM_BADITEM)
            logMsg("Data Manager Status FAILURE : %s\none of the connected items is not valid\n",
                   errorMsg);
        else if (status == EDM_PROVIDER_CONFLICT)
            logMsg("Data Manager Status FAILURE : %s\nconnection destination already has a provider\n",
                   errorMsg);
        else if (status == EDM_CIRCULAR_CONNECT)
            logMsg("Data Manager Status FAILURE : %s\nconnection is circular\n",
                   errorMsg);
        else
            logMsg("Data Manager Status FAILURE : %s\ndm_connect unknown error code %x\n",
                   errorMsg, status);
        return(ERROR);
    }

    return(OK);

} /* checkConnect */


/******************************************************************************/
/* Function : checkGroup                                                      */
/* Purpose  : Checks success of data manager group item add.                  */
/* Inputs   : Data manager error code and error message.                      */
/* Outputs  : Returns OK or ERROR.                                            */
/******************************************************************************/
    Errno
checkGroup(Errno status, char *errorMsg)
{

    if (status != SUCCESS)
    {
        if (status == EDM_NO_GROUP)
            logMsg("Data Manager Status FAILURE : %s\ndm_group_add item has invalid group id\n",
                   errorMsg);
        else if (status == EDM_BADITEM)
            logMsg("Data Manager Status FAILURE : %s\ndm_group_add item is not valid\n",
                   errorMsg);
        else if (status == EDM_NOTCONSUMER)
            logMsg("Data Manager Status FAILURE : %s\ntask is not consumer of dm_group_add item\n",
                   errorMsg);
        else if (status == EDM_IS_IN_GROUP)
            logMsg("Data Manager Status FAILURE : %s\ndm_group_add item is already in a group\n",
                   errorMsg);
        else if (status == EDM_GROUP_SIZE)
            logMsg("Data Manager Status FAILURE : %s\ndm_group_add item group is full\n",
                   errorMsg);
        else
            logMsg("Data Manager Status FAILURE : %s\ndm_group_add unknown error code %x\n",
                   errorMsg, status);
        return(ERROR);
    }

    return(OK);

} /* checkGroup */


/******************************************************************************/
/* Function : checkItemStatus                                                 */
/* Purpose  : Checks success of data manager get item status.                 */
/* Inputs   : Data manager error code and error message.                      */
/* Outputs  : Returns OK or ERROR.                                            */
/******************************************************************************/
    Errno
checkItemStatus(Errno status, char *errorMsg)
{

    if (status != SUCCESS)
    {
        if (status == EDM_BADITEM)
        {
            logMsg("Data Manager Status FAILURE : %s\ndm_item_status item not valid\n",
                   errorMsg);
            return(ERROR);
        }
        else if (status == EDM_NOSPACE)
        {
            logMsg("Data Manager Status FAILURE : %s\ndm_item_status out of memory\n", errorMsg);
            return(ERROR);
        }
    }

    return(OK);

} /* checkItemStatus */
