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

#ifndef __nFRC_2012_1_6_4_SPI_h__
#define __nFRC_2012_1_6_4_SPI_h__

#include "tSystemInterface.h"

namespace nFPGA
{
namespace nFRC_2012_1_6_4
{

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

   virtual tSystemInterface* getSystemInterface() = 0;
   static tSPI* create(tRioStatusCode *status);

   typedef enum
   {
      kNumSystems = 1,
   } tIfaceConstants;

   typedef
   union{
      struct{
#ifdef __vxworks
         unsigned ReceivedDataOverflow : 1;
         unsigned Idle : 1;
#else
         unsigned Idle : 1;
         unsigned ReceivedDataOverflow : 1;
#endif
      };
      struct{
         unsigned value : 2;
      };
   } tStatus;
   typedef
   union{
      struct{
#ifdef __vxworks
         unsigned BusBitWidth : 8;
         unsigned ClockHalfPeriodDelay : 8;
         unsigned MSBfirst : 1;
         unsigned DataOnFalling : 1;
         unsigned LatchFirst : 1;
         unsigned LatchLast : 1;
         unsigned FramePolarity : 1;
         unsigned WriteOnly : 1;
         unsigned ClockPolarity : 1;
#else
         unsigned ClockPolarity : 1;
         unsigned WriteOnly : 1;
         unsigned FramePolarity : 1;
         unsigned LatchLast : 1;
         unsigned LatchFirst : 1;
         unsigned DataOnFalling : 1;
         unsigned MSBfirst : 1;
         unsigned ClockHalfPeriodDelay : 8;
         unsigned BusBitWidth : 8;
#endif
      };
      struct{
         unsigned value : 23;
      };
   } tConfig;
   typedef
   union{
      struct{
#ifdef __vxworks
         unsigned SCLK_Channel : 4;
         unsigned SCLK_Module : 1;
         unsigned MOSI_Channel : 4;
         unsigned MOSI_Module : 1;
         unsigned MISO_Channel : 4;
         unsigned MISO_Module : 1;
         unsigned SS_Channel : 4;
         unsigned SS_Module : 1;
#else
         unsigned SS_Module : 1;
         unsigned SS_Channel : 4;
         unsigned MISO_Module : 1;
         unsigned MISO_Channel : 4;
         unsigned MOSI_Module : 1;
         unsigned MOSI_Channel : 4;
         unsigned SCLK_Module : 1;
         unsigned SCLK_Channel : 4;
#endif
      };
      struct{
         unsigned value : 20;
      };
   } tChannels;



   typedef enum
   {
   } tStatus_IfaceConstants;

   virtual tStatus readStatus(tRioStatusCode *status) = 0;
   virtual bool readStatus_ReceivedDataOverflow(tRioStatusCode *status) = 0;
   virtual bool readStatus_Idle(tRioStatusCode *status) = 0;


   typedef enum
   {
   } tReceivedData_IfaceConstants;

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


   typedef enum
   {
   } tDataToLoad_IfaceConstants;

   virtual void writeDataToLoad(unsigned int value, tRioStatusCode *status) = 0;
   virtual unsigned int readDataToLoad(tRioStatusCode *status) = 0;


   typedef enum
   {
   } tConfig_IfaceConstants;

   virtual void writeConfig(tConfig value, tRioStatusCode *status) = 0;
   virtual void writeConfig_BusBitWidth(unsigned char value, tRioStatusCode *status) = 0;
   virtual void writeConfig_ClockHalfPeriodDelay(unsigned char value, tRioStatusCode *status) = 0;
   virtual void writeConfig_MSBfirst(bool value, tRioStatusCode *status) = 0;
   virtual void writeConfig_DataOnFalling(bool value, tRioStatusCode *status) = 0;
   virtual void writeConfig_LatchFirst(bool value, tRioStatusCode *status) = 0;
   virtual void writeConfig_LatchLast(bool value, tRioStatusCode *status) = 0;
   virtual void writeConfig_FramePolarity(bool value, tRioStatusCode *status) = 0;
   virtual void writeConfig_WriteOnly(bool value, tRioStatusCode *status) = 0;
   virtual void writeConfig_ClockPolarity(bool value, tRioStatusCode *status) = 0;
   virtual tConfig readConfig(tRioStatusCode *status) = 0;
   virtual unsigned char readConfig_BusBitWidth(tRioStatusCode *status) = 0;
   virtual unsigned char readConfig_ClockHalfPeriodDelay(tRioStatusCode *status) = 0;
   virtual bool readConfig_MSBfirst(tRioStatusCode *status) = 0;
   virtual bool readConfig_DataOnFalling(tRioStatusCode *status) = 0;
   virtual bool readConfig_LatchFirst(tRioStatusCode *status) = 0;
   virtual bool readConfig_LatchLast(tRioStatusCode *status) = 0;
   virtual bool readConfig_FramePolarity(tRioStatusCode *status) = 0;
   virtual bool readConfig_WriteOnly(tRioStatusCode *status) = 0;
   virtual bool readConfig_ClockPolarity(tRioStatusCode *status) = 0;


   typedef enum
   {
   } tClearReceivedData_IfaceConstants;

   virtual void strobeClearReceivedData(tRioStatusCode *status) = 0;


   typedef enum
   {
   } tReceivedElements_IfaceConstants;

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


   typedef enum
   {
   } tLoad_IfaceConstants;

   virtual void strobeLoad(tRioStatusCode *status) = 0;


   typedef enum
   {
   } tReset_IfaceConstants;

   virtual void strobeReset(tRioStatusCode *status) = 0;


   typedef enum
   {
   } tChannels_IfaceConstants;

   virtual void writeChannels(tChannels value, tRioStatusCode *status) = 0;
   virtual void writeChannels_SCLK_Channel(unsigned char value, tRioStatusCode *status) = 0;
   virtual void writeChannels_SCLK_Module(unsigned char value, tRioStatusCode *status) = 0;
   virtual void writeChannels_MOSI_Channel(unsigned char value, tRioStatusCode *status) = 0;
   virtual void writeChannels_MOSI_Module(unsigned char value, tRioStatusCode *status) = 0;
   virtual void writeChannels_MISO_Channel(unsigned char value, tRioStatusCode *status) = 0;
   virtual void writeChannels_MISO_Module(unsigned char value, tRioStatusCode *status) = 0;
   virtual void writeChannels_SS_Channel(unsigned char value, tRioStatusCode *status) = 0;
   virtual void writeChannels_SS_Module(unsigned char value, tRioStatusCode *status) = 0;
   virtual tChannels readChannels(tRioStatusCode *status) = 0;
   virtual unsigned char readChannels_SCLK_Channel(tRioStatusCode *status) = 0;
   virtual unsigned char readChannels_SCLK_Module(tRioStatusCode *status) = 0;
   virtual unsigned char readChannels_MOSI_Channel(tRioStatusCode *status) = 0;
   virtual unsigned char readChannels_MOSI_Module(tRioStatusCode *status) = 0;
   virtual unsigned char readChannels_MISO_Channel(tRioStatusCode *status) = 0;
   virtual unsigned char readChannels_MISO_Module(tRioStatusCode *status) = 0;
   virtual unsigned char readChannels_SS_Channel(tRioStatusCode *status) = 0;
   virtual unsigned char readChannels_SS_Module(tRioStatusCode *status) = 0;


   typedef enum
   {
   } tAvailableToLoad_IfaceConstants;

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


   typedef enum
   {
   } tReadReceivedData_IfaceConstants;

   virtual void strobeReadReceivedData(tRioStatusCode *status) = 0;




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

}
}

#endif // __nFRC_2012_1_6_4_SPI_h__
