/****************************************************************************/
/* Copyright 1992 MBARI                                                     */
/****************************************************************************/
/* Summary  : ROV Pilot Console Digital Input Board Module for vxWorks      */
/* Filename : vmi1110.c                                                     */
/* Author   : Douglas Au                                                    */
/* Project  : New ROV                                                       */
/* Version  : Version 1.0                                                   */
/* Created  : 11/13/92                                                      */
/* Modified : 11/13/92                                                      */
/* Archived :                                                               */
/****************************************************************************/
/* Modification History:                                                    */
/* $Header: vmi1110.c,v 1.1 93/07/01 14:40:06 pean Exp $
 * $Log:        vmi1110.c,v $
 * Revision 1.1  93/07/01  14:40:06  14:40:06  pean (Andrew Pearce)
 * Initial revision
 *
 */
/****************************************************************************/

#include <vxWorks.h>                /* vxWorks system declarations          */
#include <mbariTypes.h>             /* mbari style guide type declarations  */
#include <mbariConst.h>             /* mbari miscelaneous constants         */
#include "switches.h"
#include "vmi1111.h"


    STATUS
vmiInputState( Nat16 bit )
{                                   /* Range Check Bit Number               */
    Byte vmiInput;

    if (bit >= VMEDIN_TOTAL_NUM_INPUTS)
       return(ERROR);

    if (bit >= VMEDIN_NUM_INPUTS )
    {
       bit-=BOARD_B_OFFSET;
       vmiInput = *((char*) VMEDINB_DATA_REG + (VMEDIN_NUM_INPUTS / BITS_PER_BYTE) - 1
         - (bit / BITS_PER_BYTE));
    }
    else
       vmiInput = *((char*) VMEDINA_DATA_REG + (VMEDIN_NUM_INPUTS / BITS_PER_BYTE) - 1
         - (bit / BITS_PER_BYTE));

    return ( (vmiInput & (1 << (bit % BITS_PER_BYTE))) ? ON : OFF);
} /* vmiInputState() */

    STATUS
vmiGroupInputState( Nat16 group )
{
                                    /* Range Check Group Number             */
    if (group >= (VMEDIN_TOTAL_NUM_INPUTS / BITS_PER_BYTE) )
        return(ERROR);              /* Bit number out of range so ERROR     */

    if (group >= (VMEDIN_NUM_INPUTS /BITS_PER_BYTE))
    {
       group-=(BOARD_B_OFFSET / BITS_PER_BYTE);
       return ( *((char*) VMEDINB_DATA_REG + group) );
    }
    else
       return ( *((char*) VMEDINA_DATA_REG + group) );

} /* vmiGroupInputState() */

    STATUS
vmiInputBoardInit( Void )
{
    Byte        probeVal;           /* location used by vxMemProbe          */

    if (vxMemProbe ( (char *) VMEDINA_DATA_REG, READ, sizeof(probeVal),
            &probeVal) == OK)
    {
                                    /* Set LED Off and disable test mode    */
         *VMEDINA_CTRL_REG = INPUT_TEST_MODE_OFF | INPUT_FAULT_LED_OFF;
    } /* if */
    else
      return(ERROR);
    taskDelay(sysClkRateGet() / 3); /* Wait for board to power up           */
    if (vxMemProbe ( (char *) VMEDINB_DATA_REG, READ, sizeof(probeVal),
            &probeVal) == OK)
    {
                                    /* Set LED Off and disable test mode    */
         *VMEDINB_CTRL_REG = INPUT_TEST_MODE_OFF | INPUT_FAULT_LED_OFF;
    } /* if */
    else return(ERROR);

    taskDelay(sysClkRateGet() / 3); /* Wait for board to power up           */

    return (OK);
} /* vmiInputBoardInit() */


    STATUS
vmiInputTest( Void )
{
    Int32 group;
    Byte inputBits;

    vmiOutputBoardInit();
    vmiInputBoardInit();

    FOREVER
    {
        for (group = 0; group < (VMEDIN_NUM_INPUTS / BITS_PER_BYTE); group++)
        {
           inputBits = *((char *) VMEDINA_DATA_REG + group);
           *(VMEDIO_DATA_REG + group) = ~inputBits;
         }

    } /* FOREVER */

    return(OK);
} /* vmiInputTest() */




