/****************************************************************************/
/* Copyright 1999 MBARI                                                     */
/****************************************************************************/
/* Summary  : SemiPower Motor Controller Driver for vxWorks                 */
/* Filename : semiPowerVx.h                                                 */
/* Author   : Andrew Pearce                                                 */
/* Project  : Tiburon                                                       */
/* Version  : Version 1.0                                                   */
/* Created  : 07/19/99                                                      */
/* Modified : 07/19/99                                                      */
/* Archived :                                                               */
/****************************************************************************/
/* Modification History:                                                    */
/* $Header:
 * $Log:
 */
/****************************************************************************/

#ifndef _SEMIPOWERVX_H_
#define _SEMIPOWERVX_H_

typedef struct
{
  sio32Chan sio32;
  FUNCPTR   faultHandler;
  Int32     faultHandlerParam;
} semiPowerSerial;


#ifdef __STDC__

#ifdef INCLUDE_PROTOTYPES

Void semiPowerFaultHandlerHookAdd(semiPowerSerial *serialIO,
    FUNCPTR faultHandler, Int32 faultCode);

STATUS semiPowerWriteCmd(semiPowerSerial *serialIO, Byte driveAdr,
    char *paramId, Word value);

STATUS semiPowerReadCmd(semiPowerSerial *serialIO, Byte driveAdr,
    char *paramId, Word *value);

Void semiPowerEEPROMValid(semiPowerSerial *serialIO, Byte driveAdr,
    Word *valid);

STATUS semiPowerSendDriveCmd(semiPowerSerial *serialIO, Byte driveAdr,
    semiPowerDriveCmdBits driveCommand);

STATUS semiPowerSetDriveModeBit(semiPowerSerial *serialIO, Byte driveAdr,
    semiPowerDriveMode driveModeBit, Word *driveModeCmd);

STATUS semiPowerSendDriveMode(semiPowerSerial *serialIO, Byte driveAdr,
    Word dMode);

STATUS semiPowerDriveState(semiPowerSerial *serialIO, Byte driveAdr,
    Word *dState);

Void semiPowerDriveStatus(semiPowerSerial *serialIO, Byte driveAdr,
    Word *dStatus);

STATUS semiPowerInputVoltage(semiPowerSerial *serialIO, Byte driveAdr,
    Int16 *volts);

STATUS semiPowerInputPower(semiPowerSerial *serialIO, Byte driveAdr,
    Int16 *watts);

STATUS semiPowerMotorCurrent( semiPowerSerial *serialIO, Byte driveAdr,
    Int16 *currentmA );

STATUS semiPowerMotorTorque(semiPowerSerial *serialIO, Byte driveAdr,
    Int16 *torqueNm);

STATUS semiPowerElapsedHours(semiPowerSerial *serialIO, Byte driveAdr,
    Int16 *hours);

STATUS semiPowerDynamicBrake(semiPowerSerial *serialIO, Byte driveAdr,
    Int16 *DB_PT);

STATUS semiPowerHumidity(semiPowerSerial *serialIO, Byte driveAdr,
    Nat16 *humidity);

STATUS semiPowerHeatsinkTemp(semiPowerSerial *serialIO, Byte driveAdr,
    Flt32 *degs);

STATUS semiPowerReadFaultQueue( semiPowerSerial *serialIO, Byte driveAdr,
     struct faultQueueEntry faultQueue[FAULT_QUEUE_LENGTH] );

STATUS semiPowerSetMotorSpeed(semiPowerSerial *serialIO, Byte driveAdr,
    Int16 speed, Word *driveModeCmd);

STATUS semiPowerSetMotorTorque(semiPowerSerial *serialIO, Byte driveAdr,
     Int16 torque );

STATUS semiPowerSetMotorEnable(semiPowerSerial *serialIO, Byte driveAdr,
     MBool enable );

STATUS semiPowerClearFaultQueue(semiPowerSerial *serialIO, Byte driveAdr);

STATUS semiPowerMotorVelocity(semiPowerSerial *serialIO, Byte driveAdr,
    Int16 *RPM);

Void semiPowerMotorInit(semiPowerSerial *serialIO, Byte driveAdr,
    Word *driveModeCmd);

#endif /* INCLUDE_PROTOTYPES */

#endif /* __STDC__ */

#endif /* _SEMIPOWERVX_H_ */
