CCamacModule

Name

CCamacModule -- Provide support for a generic CAMAC module.

Synopsis


    #include <CCamacModule.h>
                
 class CCamacModule {

  CCamacModule(unsigned int branch, unsigned int crate, unsigned int slot);

  const unsigned long Read(unsigned int f, unsigned int a);
  const void Write(unsigned int f, unsigned int a, unsigned long d);
  const unsigned short Control(unsigned int f, unsigned int a);
  const unsigned long* MakePointer(unsigned int f, unsigned int a, bool isshort = false);
  const unsigned long* MakePointer(unsigned int c, unsigned int n, unsigned int a, unsigned int f, bool isshort = false);
  static bool ValidBranch(unsigned int branch);
  static bool ValidCrate(unsigned int crate));
  static bool ValidSlot(unsigned int slot);
  static bool ValidSubaddress(unsigned int a);
  static bool ValidFunction(unsigned int f);
  static bool isRead(unsigned int f);
  static bool isWrite(unsigned int f);
  static bool isControl(unsigned int f);
}

Description

Provides support for a generic CAMAC module. Constructing a CCamacModule object creates an object that can perform generic manipulations on a single CAMAC module in the system.

CAMAC modules are conceptually quite simple. Modules are addressed by crate slot. They can have a function code (operation) directed at them. Function codes 0-7 represent read operations, Functtion codes 16-23 represent write operations and 8-15,24-31 represent non data transfer (control) operations.

The function code can be qualified by any of 16 subaddresses. Subaddresses generally represent channels or functional targets within the device.

Public member functions

CCamacModule(unsigned int branch, unsigned int crate, unsigned int slot);

Constructs a CCamacModule. The module that will be controlled by this objedct is described by the branch, crate and slot parameters of the constructor. As usual for CAMAC systems at the NSCL, the branch parameter implies a VME crate number.

unsigned long Read(unsigned int f, unsigned int a);const

Performs a read operation on the module. f is the function code of the read and must be in the range 0-7 inclusive. a is the subaddress to which the function is directed and must be in the range 0-15. The return value of the function is the data provided by the module.

void Write(unsigned int f, unsigned int a, unsigned long d);const

Writes data to the module. The function code and subaddress are provided by the f and a parameters respectively. The data to write is d. f must be in the range 16-23 inclusive while a must be in the range 0-15 inclusive.

unsigned short Control(unsigned int f, unsigned int a);const

Performs a control function on the device. The function code f must be in one of the ranges 8-15 or 24-31 inclusive. The subaddress a must be in the range 0-15 inclusive.

unsigned long* MakePointer(unsigned int f, unsigned int a, bool isshortfalse);const

static bool ValidBranch(unsigned int branch);

This is a convenience function that returns true if branch is a valid CAMAC branch number.

static bool ValidCrate(unsigned int crate));

Returns true if the crate is a valid CAMAC crate.

static bool ValidSlot(unsigned int slot);

Returns true if slot is a valid CAMAC slot number. This function recognizes that crates have 'pseudo' slots that actually address the controller.

static bool ValidSubaddress(unsigned int a);

Returns true if a is a valid module subaddress.

static bool ValidFunction(unsigned int f);

Returns true if the function f is a valid function code.

static bool isRead(unsigned int f);

Returns true if the function f is a valid Read operation.

static bool isWrite(unsigned int f);

Returns true if the function f is a valid CAMAC write function code.

static bool isControl(unsigned int f);

Returns true if the function f is a valid CAMAC control function code (non data transfer).

Exceptions

CRangeError is thrown when parameters are not in their valid range.