// Copyright (c) National Instruments 2008.  All Rights Reserved.
// Do Not Edit... this file is generated!

#ifndef __nFRC_2012_1_6_4_DIO_h__
#define __nFRC_2012_1_6_4_DIO_h__

#include "tSystemInterface.h"

namespace nFPGA
{
namespace nFRC_2012_1_6_4
{

class tDIO
{
public:
   tDIO(){}
   virtual ~tDIO(){}

   virtual tSystemInterface* getSystemInterface() = 0;
   static tDIO* create(unsigned char sys_index, tRioStatusCode *status);
   virtual unsigned char getSystemIndex() = 0;


   typedef enum
   {
      kNumSystems = 2,
   } tIfaceConstants;

   typedef
   union{
      struct{
#ifdef __vxworks
         unsigned Period : 16;
         unsigned MinHigh : 16;
#else
         unsigned MinHigh : 16;
         unsigned Period : 16;
#endif
      };
      struct{
         unsigned value : 32;
      };
   } tPWMConfig;
   typedef
   union{
      struct{
#ifdef __vxworks
         unsigned RelayFwd : 8;
         unsigned RelayRev : 8;
         unsigned I2CHeader : 4;
#else
         unsigned I2CHeader : 4;
         unsigned RelayRev : 8;
         unsigned RelayFwd : 8;
#endif
      };
      struct{
         unsigned value : 20;
      };
   } tSlowValue;
   typedef
   union{
      struct{
#ifdef __vxworks
         unsigned Transaction : 1;
         unsigned Done : 1;
         unsigned Aborted : 1;
         unsigned DataReceivedHigh : 24;
#else
         unsigned DataReceivedHigh : 24;
         unsigned Aborted : 1;
         unsigned Done : 1;
         unsigned Transaction : 1;
#endif
      };
      struct{
         unsigned value : 27;
      };
   } tI2CStatus;
   typedef
   union{
      struct{
#ifdef __vxworks
         unsigned Address : 8;
         unsigned BytesToRead : 3;
         unsigned BytesToWrite : 3;
         unsigned DataToSendHigh : 16;
         unsigned BitwiseHandshake : 1;
#else
         unsigned BitwiseHandshake : 1;
         unsigned DataToSendHigh : 16;
         unsigned BytesToWrite : 3;
         unsigned BytesToRead : 3;
         unsigned Address : 8;
#endif
      };
      struct{
         unsigned value : 31;
      };
   } tI2CConfig;
   typedef
   union{
      struct{
#ifdef __vxworks
         unsigned PeriodPower : 4;
         unsigned OutputSelect_0 : 4;
         unsigned OutputSelect_1 : 4;
         unsigned OutputSelect_2 : 4;
         unsigned OutputSelect_3 : 4;
#else
         unsigned OutputSelect_3 : 4;
         unsigned OutputSelect_2 : 4;
         unsigned OutputSelect_1 : 4;
         unsigned OutputSelect_0 : 4;
         unsigned PeriodPower : 4;
#endif
      };
      struct{
         unsigned value : 20;
      };
   } tDO_PWMConfig;


   typedef enum
   {
      kNumFilterSelectElements = 16,
   } tFilterSelect_IfaceConstants;

   virtual void writeFilterSelect(unsigned char bitfield_index, unsigned char value, tRioStatusCode *status) = 0;
   virtual unsigned char readFilterSelect(unsigned char bitfield_index, tRioStatusCode *status) = 0;


   typedef enum
   {
   } tI2CDataToSend_IfaceConstants;

   virtual void writeI2CDataToSend(unsigned int value, tRioStatusCode *status) = 0;
   virtual unsigned int readI2CDataToSend(tRioStatusCode *status) = 0;


   typedef enum
   {
   } tDO_IfaceConstants;

   virtual void writeDO(unsigned short value, tRioStatusCode *status) = 0;
   virtual unsigned short readDO(tRioStatusCode *status) = 0;


   typedef enum
   {
      kNumFilterPeriodElements = 3,
   } tFilterPeriod_IfaceConstants;

   virtual void writeFilterPeriod(unsigned char bitfield_index, unsigned char value, tRioStatusCode *status) = 0;
   virtual unsigned char readFilterPeriod(unsigned char bitfield_index, tRioStatusCode *status) = 0;


   typedef enum
   {
   } tOutputEnable_IfaceConstants;

   virtual void writeOutputEnable(unsigned short value, tRioStatusCode *status) = 0;
   virtual unsigned short readOutputEnable(tRioStatusCode *status) = 0;


   typedef enum
   {
   } tPulse_IfaceConstants;

   virtual void writePulse(unsigned short value, tRioStatusCode *status) = 0;
   virtual unsigned short readPulse(tRioStatusCode *status) = 0;


   typedef enum
   {
   } tSlowValue_IfaceConstants;

   virtual void writeSlowValue(tSlowValue value, tRioStatusCode *status) = 0;
   virtual void writeSlowValue_RelayFwd(unsigned char value, tRioStatusCode *status) = 0;
   virtual void writeSlowValue_RelayRev(unsigned char value, tRioStatusCode *status) = 0;
   virtual void writeSlowValue_I2CHeader(unsigned char value, tRioStatusCode *status) = 0;
   virtual tSlowValue readSlowValue(tRioStatusCode *status) = 0;
   virtual unsigned char readSlowValue_RelayFwd(tRioStatusCode *status) = 0;
   virtual unsigned char readSlowValue_RelayRev(tRioStatusCode *status) = 0;
   virtual unsigned char readSlowValue_I2CHeader(tRioStatusCode *status) = 0;


   typedef enum
   {
   } tI2CStatus_IfaceConstants;

   virtual tI2CStatus readI2CStatus(tRioStatusCode *status) = 0;
   virtual unsigned char readI2CStatus_Transaction(tRioStatusCode *status) = 0;
   virtual bool readI2CStatus_Done(tRioStatusCode *status) = 0;
   virtual bool readI2CStatus_Aborted(tRioStatusCode *status) = 0;
   virtual unsigned int readI2CStatus_DataReceivedHigh(tRioStatusCode *status) = 0;


   typedef enum
   {
   } tI2CDataReceived_IfaceConstants;

   virtual unsigned int readI2CDataReceived(tRioStatusCode *status) = 0;


   typedef enum
   {
   } tDI_IfaceConstants;

   virtual unsigned short readDI(tRioStatusCode *status) = 0;


   typedef enum
   {
   } tPulseLength_IfaceConstants;

   virtual void writePulseLength(unsigned char value, tRioStatusCode *status) = 0;
   virtual unsigned char readPulseLength(tRioStatusCode *status) = 0;


   typedef enum
   {
      kNumPWMPeriodScaleElements = 10,
   } tPWMPeriodScale_IfaceConstants;

   virtual void writePWMPeriodScale(unsigned char bitfield_index, unsigned char value, tRioStatusCode *status) = 0;
   virtual unsigned char readPWMPeriodScale(unsigned char bitfield_index, tRioStatusCode *status) = 0;


   typedef enum
   {
      kNumDO_PWMDutyCycleElements = 4,
   } tDO_PWMDutyCycle_IfaceConstants;

   virtual void writeDO_PWMDutyCycle(unsigned char bitfield_index, unsigned char value, tRioStatusCode *status) = 0;
   virtual unsigned char readDO_PWMDutyCycle(unsigned char bitfield_index, tRioStatusCode *status) = 0;


   typedef enum
   {
   } tBFL_IfaceConstants;

   virtual void writeBFL(bool value, tRioStatusCode *status) = 0;
   virtual bool readBFL(tRioStatusCode *status) = 0;


   typedef enum
   {
   } tI2CConfig_IfaceConstants;

   virtual void writeI2CConfig(tI2CConfig value, tRioStatusCode *status) = 0;
   virtual void writeI2CConfig_Address(unsigned char value, tRioStatusCode *status) = 0;
   virtual void writeI2CConfig_BytesToRead(unsigned char value, tRioStatusCode *status) = 0;
   virtual void writeI2CConfig_BytesToWrite(unsigned char value, tRioStatusCode *status) = 0;
   virtual void writeI2CConfig_DataToSendHigh(unsigned short value, tRioStatusCode *status) = 0;
   virtual void writeI2CConfig_BitwiseHandshake(bool value, tRioStatusCode *status) = 0;
   virtual tI2CConfig readI2CConfig(tRioStatusCode *status) = 0;
   virtual unsigned char readI2CConfig_Address(tRioStatusCode *status) = 0;
   virtual unsigned char readI2CConfig_BytesToRead(tRioStatusCode *status) = 0;
   virtual unsigned char readI2CConfig_BytesToWrite(tRioStatusCode *status) = 0;
   virtual unsigned short readI2CConfig_DataToSendHigh(tRioStatusCode *status) = 0;
   virtual bool readI2CConfig_BitwiseHandshake(tRioStatusCode *status) = 0;


   typedef enum
   {
   } tDO_PWMConfig_IfaceConstants;

   virtual void writeDO_PWMConfig(tDO_PWMConfig value, tRioStatusCode *status) = 0;
   virtual void writeDO_PWMConfig_PeriodPower(unsigned char value, tRioStatusCode *status) = 0;
   virtual void writeDO_PWMConfig_OutputSelect_0(unsigned char value, tRioStatusCode *status) = 0;
   virtual void writeDO_PWMConfig_OutputSelect_1(unsigned char value, tRioStatusCode *status) = 0;
   virtual void writeDO_PWMConfig_OutputSelect_2(unsigned char value, tRioStatusCode *status) = 0;
   virtual void writeDO_PWMConfig_OutputSelect_3(unsigned char value, tRioStatusCode *status) = 0;
   virtual tDO_PWMConfig readDO_PWMConfig(tRioStatusCode *status) = 0;
   virtual unsigned char readDO_PWMConfig_PeriodPower(tRioStatusCode *status) = 0;
   virtual unsigned char readDO_PWMConfig_OutputSelect_0(tRioStatusCode *status) = 0;
   virtual unsigned char readDO_PWMConfig_OutputSelect_1(tRioStatusCode *status) = 0;
   virtual unsigned char readDO_PWMConfig_OutputSelect_2(tRioStatusCode *status) = 0;
   virtual unsigned char readDO_PWMConfig_OutputSelect_3(tRioStatusCode *status) = 0;


   typedef enum
   {
   } tI2CStart_IfaceConstants;

   virtual void strobeI2CStart(tRioStatusCode *status) = 0;



   typedef enum
   {
   } tLoopTiming_IfaceConstants;

   virtual unsigned short readLoopTiming(tRioStatusCode *status) = 0;


   typedef enum
   {
   } tPWMConfig_IfaceConstants;

   virtual void writePWMConfig(tPWMConfig value, tRioStatusCode *status) = 0;
   virtual void writePWMConfig_Period(unsigned short value, tRioStatusCode *status) = 0;
   virtual void writePWMConfig_MinHigh(unsigned short value, tRioStatusCode *status) = 0;
   virtual tPWMConfig readPWMConfig(tRioStatusCode *status) = 0;
   virtual unsigned short readPWMConfig_Period(tRioStatusCode *status) = 0;
   virtual unsigned short readPWMConfig_MinHigh(tRioStatusCode *status) = 0;



   typedef enum
   {
      kNumPWMValueRegisters = 10,
   } tPWMValue_IfaceConstants;

   virtual void writePWMValue(unsigned char reg_index, unsigned char value, tRioStatusCode *status) = 0;
   virtual unsigned char readPWMValue(unsigned char reg_index, tRioStatusCode *status) = 0;



private:
   tDIO(const tDIO&);
   void operator=(const tDIO&);
};

}
}

#endif // __nFRC_2012_1_6_4_DIO_h__