// Author: Thomas Hadig (Group EB SLAC Stanford CA USA)
// Last update: $Date: 2003/08/22 22:31:11 $
// Copyright: Thomas Hadig, hadig@slac.stanford.edu

#ifndef __CRTOUTPUTIR1DBOARD_CXX
#define __CRTOUTPUTIR1DBOARD_CXX

////////////////////////////////////////////////////////////////////////////////
//
// Cosmic Ray Telescope Data Aquisition Software
//
// generic driver for Camac module: Joerger IR1D input/output register
//
// This module features:
// - 2 channels with 24 bit input and 12 bit output
//
////////////////////////////////////////////////////////////////////////////////

#include <gendriver/outputIR1Dboard.hh>
#include <gendriver/camaccrate.hh>

namespace CRT
 { 
  //{{{}}}
  //{{{  constructor
   CrtOutputIr1dBoard::CrtOutputIr1dBoard() : CrtCamacBoard()
   {
    // default constructor
    fOk=0;
   }
  //}}}
  //{{{  constructor CrtOutputIr1dBoard(const Char_t *inName, Int_t inBoardNumber, CrtCamacCrate *inCrate)
   CrtOutputIr1dBoard::CrtOutputIr1dBoard(const Char_t *inName, Int_t inBoardNumber, CrtCamacCrate *inCrate)
    : CrtCamacBoard(inName, inBoardNumber, inCrate)
   {
    // constructor
    // inBoardNumber is the number of the Camac slot
    // inCrate       is a pointer to the Camac crate object
    fIdents[0]=inCrate->GetIdentity(inBoardNumber, 0);
    fIdents[1]=inCrate->GetIdentity(inBoardNumber, 1);
    fOk=1;
   }
  //}}}
  //{{{  destructor
   CrtOutputIr1dBoard::~CrtOutputIr1dBoard()
   {
    // destructor
   }
  //}}}
  
  //{{{  Send
   Int_t CrtOutputIr1dBoard::Send(Int_t inCommand) const
   {
    // sends command to board
    // available commands:
    // none

    return -1;
   }
  //}}}
  //{{{  Enable
   Int_t CrtOutputIr1dBoard::Enable(Int_t inFlag, Int_t inChannel) const
   {
    // enables board features
    // Available features:
    // CrtOutputIr1dBoard::F_OUTPUTIR1D_LAM (Look-At-Me) (channel 0/1)

    if (fOk!=1) return -1;
    if ((inChannel<0)||(inChannel>1)) return -1;
    switch(inFlag)
     { 
      case F_OUTPUTIR1D_LAM:
        return fInCrate->Send(fIdents[inChannel], 26, 0);
     }
    return -1;
   }
  //}}}
  //{{{  Disable
   Int_t CrtOutputIr1dBoard::Disable(Int_t inFlag, Int_t inChannel) const
   {
    // disables board features
    // Available features:
    // CrtOutputIr1dBoard::F_OUTPUTIR1D_LAM (Look-At-Me) (channel 0/1)

    if (fOk!=1) return -1;
    if ((inChannel<0)||(inChannel>1)) return -1;
    switch(inFlag)
     { 
      case F_OUTPUTIR1D_LAM:
        return fInCrate->Send(fIdents[inChannel], 24, 0);
     }
    return -1;
   }
  //}}}
  //{{{  Clear
   Int_t CrtOutputIr1dBoard::Clear(Int_t inFlag, Int_t inChannel) const
   {
    // clears board features
    // Available features:
    // CrtOutputIr1dBoard::F_OUTPUTIR1D_LAM (Look-At-Me) (channel 0/1)

    if (fOk!=1) return -1;
    if ((inChannel<0)||(inChannel>1)) return -1;
    switch(inFlag)
     { 
      case F_OUTPUTIR1D_LAM:
        return fInCrate->Send(fIdents[inChannel], 10, 0);
     }
    return -1;
   }
  //}}}
  //{{{  Test
   Int_t CrtOutputIr1dBoard::Test(Int_t inFlag, Int_t inChannel) const
   {
    // tests board features
    // Available features:
    // CrtOutputIr1dBoard::F_OUTPUTIR1D_LAM (Look-At-Me) (channel 0/1)

    if (fOk!=1) return -1;
    if ((inChannel<0)||(inChannel>1)) return -1;
    switch(inFlag)
     { 
      case F_OUTPUTIR1D_LAM:
        return fInCrate->Test(fIdents[inChannel], 8);
     }
    return -1;
   }
  //}}}
  //{{{  Query
   Int_t CrtOutputIr1dBoard::Query(Int_t inChannel, Int_t *outValue) const
   {
    // queries channels
    // available channels:
    // 0-1: input channels
    if (fOk!=1) return -1;
    if ((inChannel<0)||(inChannel>1)) return -1;
    return fInCrate->Read(fIdents[inChannel], 0, outValue);
   }
  //}}}
  //{{{  Assign
   Int_t CrtOutputIr1dBoard::Assign(Int_t inChannel, Int_t inValue) const
   {
    // assigns channels
    // available channels:
    // 0-1: set output register for the channel given
    if (fOk!=1) return -1;
    if (inChannel==0)
      return fInCrate->Send(fIdents[0], 16, inValue);
    else if (inChannel==1)
      return fInCrate->Send(fIdents[1], 16, inValue*4096);
    return -1;
   }
  //}}}
  //{{{  GetNumberOfChannels
   Int_t CrtOutputIr1dBoard::GetNumberOfChannels() const
   {
    return 2;
   }
  //}}}
 }
 
ClassImp(CRT::CrtOutputIr1dBoard) //Joerger Input/Output Register IR1D module driver

#endif


ROOT page - Class index - Class Hierarchy - Top of the page

This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.