/******************************************************************************/
/* Copyright 1992 MBARI                                                       */
/******************************************************************************/
/* Summary  : Data Manager error checking functions                           */
/* Filename : dmCheck.c                                                       */
/* Author   : Janice Tarrant                                                  */
/* Project  : New ROV                                                         */
/* Version  : Version 1.0                                                     */
/* Created  : 09/16/92                                                        */
/* Modified : 07/14/93                                                        */
/* Archived :                                                                 */
/******************************************************************************/
/* Modification History :                                                     */
/* $Header: /usr/tiburon/unix/gui/ctd/RCS/dmCheck.c,v 1.1 1998/03/12 17:52:41 oreilly Exp $
 * $Log: dmCheck.c,v $
 * Revision 1.1  1998/03/12 17:52:41  oreilly
 * Initial revision
 *
 *
 */
/******************************************************************************/

#include <mbari/types.h>        /* MBARI style guide type declarations        */
#include <dmUnix.h>             /* unix data manager definitions              */
#include <semLib.h>             /* VxWorks semaphore library                  */
#include <time.h>            	/* VxWorks system time declarations           */
#include <datamgr.h>      	/* data manager declarations                  */
#include <dm_errno.h>     	/* data manager error declarations            */


/******************************************************************************/
/* Function : checkInit                                                       */
/* Purpose  : Checks success of data manager initialization.                  */
/* Inputs   : Data manager error code.                                        */
/* Outputs  : Returns OK or ERROR.                                            */
/******************************************************************************/
    Errno
checkInit(Errno status)
{

    if (status != SUCCESS)
    {
	switch (status)
	{
	    case EDM_NOSEM:
	    	printf("Data Manager Status FAILURE : dm_init couldn't allocate semaphores\n");
	    	return(ERROR);
		break;

	    case EDM_NOSPACE:
	    	printf("Data Manager Status FAILURE : dm_init out of memory\n");
	    	return(ERROR);
		break;

	    case EDM_NAME_EXISTS:
	    	printf("Data Manager Status FAILURE : dm_init same name passed twice\n");
	    	return(ERROR);
		break;

	    case EDM_TOOBIG:
	    	printf("Data Manager Status FAILURE : dm_init item size greater than max\n");
	    	return(ERROR);
		break;

	    case EDM_NO_SOCKET:
	    	printf("Data Manager Status FAILURE : dm_init could not allocate socket\n");
	    	return(ERROR);
		break;

	    case EDM_GENERAL:
	    	printf("Data Manager Status FAILURE : dm_init network initialization error\n");
	    	return(ERROR);
		break;

	    case EDM_BAD_TYPE:
	    	printf("Data Manager Status FAILURE : dm_init bad item type\n");
	    	return(ERROR);
		break;

	    case EDM_NO_DAEMON:
	    	printf("Data Manager Status FAILURE : dm_init daemon not loaded\n");
	    	return(ERROR);
		break;
	}

	printf("Data Manager Status FAILURE : dm_init unknown error code %ld\n",
	       status);
	return(ERROR);
    }

    return(OK);

} /* checkInit */


/******************************************************************************/
/* 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)
	        printf("Data Manager Status WARNING : %s\ndm_create item already exists\n",
		       itemName);
	    return(OK);
	}
	else				/* EDM_NOSEM or EDM_NOSPACE or        */
	{				/* EDM_TOOBIG or EDM_BAD_TYPE        */
	    printf("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)
    {
	printf("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)
	    printf("Data Manager Status FAILURE : %s\ndm_start_provider item is not valid\n",
		   errorMsg);
	else if( status == EDM_PROVIDER_CONFLICT)
	    printf("Data Manager Status FAILURE : %s\ndm_start_provider item already has a provider\n",
		   errorMsg);
	else
	    printf("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)
	{
	    printf("Data Manager Status FAILURE : %s\ndm_start_consumer item not valid\n",
		   errorMsg);
	    return(ERROR);
        }
	else if (status == EDM_NOSPACE)
	{
	    printf("Data Manager Status FAILURE : %s\n out of memory\n",
		   errorMsg);
	    return(ERROR);
   	}
	else if (status == EDM_ISCONSUMER)
	    if (logWarning)
	    {
	        printf("Data Manager Status WARNING : %s\ndm_start_consumer task is already consumer\n",
		       errorMsg);
	        return(OK);
	    }
	else if (status == EDM_NOPROVIDER)
	    if (logWarning)
	    {
	        printf("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)
	    {
	        printf("Data Manager Status WARNING : %s\ndm_start_consumer item period different to provider\n",
		      errorMsg);
	       return(OK);
	    }
	else
	{
	    printf("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)
	    printf("Data Manager Status FAILURE : %s\ndm_write item is not valid\n",
		   errorMsg);
	else if (status == EDM_NOTPROVIDER)
	    printf("Data Manager Status FAILURE : %s\ntask is not provider of dm_write item\n",
		   errorMsg);
	else if (status == EDM_TOOBIG)
	    printf("Data Manager Status FAILURE : %s\ndm_write item is too big\n",
		   errorMsg);
	else
	    printf("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)
	        printf("Data Manager Status WARNING : %s\ndm_read item has no current provider\n",
		       errorMsg);
	    return(OK);
	}
	else if (status == EDM_BADITEM)
	    printf("Data Manager Status FAILURE : %s\ndm_read item is not valid\n",
		   errorMsg);
	else if (status == EDM_NOTCONSUMER)
	    printf("Data Manager Status FAILURE : %s\ntask is not consumer of dm_read item\n",
		   errorMsg);
	else
	    printf("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)
	{
	    printf("Data Manager Status WARNING : %s\nconnected items are of different size\n",
		   errorMsg);
	    return(OK);
	}
	else if (status == EDM_ISCONNECTED)
	{
	    printf("Data Manager Status WARNING : %s\ndestination item is already connected\n",
		   errorMsg);
	    return(OK);
	}
	else if (status == EDM_BADITEM)
	    printf("Data Manager Status FAILURE : %s\none of the connected items is not valid\n",
		   errorMsg);
        else if (status == EDM_PROVIDER_CONFLICT)
	    printf("Data Manager Status FAILURE : %s\nconnection destination already has a provider\n",
		   errorMsg);
        else if (status == EDM_CIRCULAR_CONNECT)
	    printf("Data Manager Status FAILURE : %s\nconnection is circular\n",
		   errorMsg);
	else
	    printf("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)
	    printf("Data Manager Status FAILURE : %s\ndm_group_add item has invalid group id\n",
		   errorMsg);
	else if (status == EDM_BADITEM)
	    printf("Data Manager Status FAILURE : %s\ndm_group_add item is not valid\n",
		   errorMsg);
	else if (status == EDM_NOTCONSUMER)
	    printf("Data Manager Status FAILURE : %s\ntask is not consumer of dm_group_add item\n",
		   errorMsg);
        else if (status == EDM_IS_IN_GROUP)
	    printf("Data Manager Status FAILURE : %s\ndm_group_add item is already in a group\n",
		   errorMsg);
 	else if (status == EDM_GROUP_SIZE)
	    printf("Data Manager Status FAILURE : %s\ndm_group_add item group is full\n",
		   errorMsg);
	else
	    printf("Data Manager Status FAILURE : %s\ndm_group_add unknown error code %x\n",
		   errorMsg, status);
	return(ERROR);
    }

    return(OK);

} /* checkGroup */
