#ifndef _microTask_H
#define _microTask_H
/****************************************************************************/
/* Copyright 1996 MBARI                                                     */
/****************************************************************************/
/* Summary  : microcontroller task synchronization and IO interface         */
/* Filename : microTask.h                                                   */
/* Author   : Andrew Pearce                                                 */
/* Project  : Tiburon ROV                                                   */
/* Version  : 1.0                                                           */
/* Created  : 08/02/96                                                      */
/* Modified : 08/02/96                                                      */
/* Archived :                                                               */
/****************************************************************************/

#ifndef _MICRO_TASK_H
#define _MICRO_TASK_H

#define SERIAL_CHAN &microIOCtrl->sio32DataChan

typedef enum
{
    LINK_DOWN,
    LINK_UP
} serialComState;

typedef enum
{
    IN_TASK,
    OUT_TASK,
    AUX_IN_TASK,
    SRQ_TASK
} microTaskId;

typedef struct
{
    SEM_ID  taskSyncSem;            /* Task synchonization semaphore        */
    Int32   taskId;                 /* Child Task Ident from taskSpawn      */
} microChildTask;

typedef struct
{
    DM_Item        comErrorDm;      /* Communications link status Item      */
    DM_Item        powerSwitchDm;   /* Device Power Switch Item             */
    SEM_ID         powerSwitchSem;  /* Power switch wakeup semaphore        */

    sio32Chan      sio32DataChan;   /* Serial Communications Chan           */
    serialComState serialLinkState; /* Serial Communications Link Status    */
    Nat16          resetEventCount; /* Counts micro reset events            */
    MBool          announceResets;  /* Announce reset events if set TRUE    */
    MBool          microConfigured; /* Set after params are sent to micro   */

    Nat16          numChildTasks;   /* Number of child tasks                */
    microChildTask *childTasks;     /* Child Task Synchronization           */
} microIOControl;


#ifdef INCLUDE_PROTOTYPES

#ifdef __STDC__


STATUS initMicroTaskIO(microIOControl *microIOCtrl, Nat16 numTasks,
    Nat16 serialChan, const char *prefix, const char *chanName,
    const char *powerDmItemName);

Void setSerialLinkState(microIOControl *microIOCtrl, serialComState linkState);

switchStatus microDevPowerSwitchState(microIOControl *microIOCtrl);

#endif /* __STDC__ */

#endif /* INCLUDE_PROTOTYPES */

#endif /* _MICRO_TASK_H */
#endif /* _microTask_H */
