/****************************************************************************/
/* Copyright 1992 MBARI                                                     */
/****************************************************************************/
/* Summary  : ROV Pilot Console Interface module for vxWorks                */
/* Filename : console.c                                                     */
/* Author   : Andrew Pearce                                                 */
/* Project  : New ROV                                                       */
/* Version  : Version 1.0                                                   */
/* Created  : 11/12/92                                                      */
/* Modified : 11/12/92                                                      */
/* Archived :                                                               */
/****************************************************************************/
/* Modification History:                                                    */
/* $Header: vmi2120.c,v 1.1 93/07/01 14:40:07 pean Exp $
 * $Log:        vmi2120.c,v $
 * Revision 1.1  93/07/01  14:40:07  14:40:07  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 "vmi2120.h"

    Void
vmiOutputAllCtrl( MBool state )
{
    Int32       group;

    if (state)
                                    /* Switch on all panel lamps            */
        for (group = 0; group < (VMEDIO_NUM_OUTPUTS / LAMPS_PER_GROUP); group++)
            *(VMEDIO_DATA_REG + group) = LAMP_GROUP_ON;

    else
                                    /* Switch off all panel lamps           */
        for (group = 0; group < (VMEDIO_NUM_OUTPUTS / LAMPS_PER_GROUP); group++)
            *(VMEDIO_DATA_REG + group) = LAMP_GROUP_OFF;


} /* vmiOutputAllCtrl() */

    STATUS
vmiOutputCtrl( Nat16 bit, MBool state )
{                                   /* Range Check Bit Number               */
    if (bit >= VMEDIO_NUM_OUTPUTS )
        return(ERROR);              /* Bit number out of range so ERROR     */

    if (state)                      /* Switch Bit ON                        */
        *(VMEDIO_DATA_REG + VMEDIO_NUM_OUTPUTS / LAMPS_PER_GROUP - 1 -
             (bit / LAMPS_PER_GROUP)) |= (1 << (bit % LAMPS_PER_GROUP));
    else                            /* Switch Bit OFF                       */
        *(VMEDIO_DATA_REG + VMEDIO_NUM_OUTPUTS / LAMPS_PER_GROUP - 1 -
             (bit / LAMPS_PER_GROUP)) &= ~(1 << (bit % LAMPS_PER_GROUP));

    return(OK);
} /* vmiOutputCtrl() */

    STATUS
vmiOutputState( Nat16 bit )
{                                   /* Range Check Bit Number               */
    Byte vmiOutput;

    if (bit >= VMEDIO_NUM_OUTPUTS )
        return(ERROR);              /* Bit number out of range so ERROR     */

    vmiOutput = *(VMEDIO_DATA_REG + (VMEDIO_NUM_OUTPUTS / LAMPS_PER_GROUP) - 1
         - (bit / LAMPS_PER_GROUP));

    return ( (vmiOutput & (1 << (bit % LAMPS_PER_GROUP))) ? ON : OFF);
} /* vmiOutputState() */

    STATUS
vmiOutputSet( DWord high, DWord low )
{
     *(VMEDIO_DATA_REG + 0) = (Byte) ((high & 0xff000000) >> 24);
     *(VMEDIO_DATA_REG + 1) = (Byte) ((high & 0x00ff0000) >> 16);
     *(VMEDIO_DATA_REG + 2) = (Byte) ((high & 0x0000ff00) >>  8);
     *(VMEDIO_DATA_REG + 3) = (Byte)  (high & 0x000000ff);

     *(VMEDIO_DATA_REG + 4) = (Byte) ((low  & 0xff000000) >> 24);
     *(VMEDIO_DATA_REG + 5) = (Byte) ((low  & 0x00ff0000) >> 16);
     *(VMEDIO_DATA_REG + 6) = (Byte) ((low  & 0x0000ff00) >>  8);
     *(VMEDIO_DATA_REG + 7) = (Byte)  (low  & 0x000000ff);
} /* vmiOutputSet() */

    STATUS
vmiOutputBoardInit( Void )
{
    Byte        probeVal;           /* location used by vxMemProbe          */

    if (vxMemProbe ( (Char *) VMEDIO_DATA_REG, READ, sizeof(probeVal),
            &probeVal) == OK)
    {
          vmiOutputAllCtrl(OFF);    /* Switch off all panel lamps           */
                                    /* Set LED Off and disable test mode    */
         *VMEDIO_CTRL_REG = OUTPUT_TEST_MODE_OFF | OUTPUT_FAULT_LED_OFF;
         return (OK);
    } /* if */
    return(ERROR);
} /* vmiOutputBoardInit() */


    STATUS
vmiOutputTest( Void )
{
    Nat16 bit;

    vmiOutputBoardInit();

    vmiOutputAllCtrl(ON);
    taskDelay(sysClkRateGet() * 3);
    vmiOutputAllCtrl(OFF);

    return(OK);
} /* vmiOutputTest() */








