AttCS3310 Relacs Plugins  0.9.8
Public Member Functions | List of all members
CS3310PP Class Reference

#include <cs3310pp.h>

Inheritance diagram for CS3310PP:
Inheritance graph
[legend]
Collaboration diagram for CS3310PP:
Collaboration graph
[legend]

Public Member Functions

 CS3310PP (const string &device)
 
 CS3310PP (void)
 
virtual ~CS3310PP (void)
 
virtual int open (const string &device) override
 
virtual bool isOpen (void) const
 
virtual void close (void)
 
virtual const Optionssettings (void) const
 
virtual int lines (void) const
 
virtual double minLevel (void) const
 
virtual double maxLevel (void) const
 
virtual void levels (vector< double > &l) const
 
virtual int attenuate (int di, double &decibel)
 
virtual int testAttenuate (int di, double &decibel)
 
int setZeroCrossing (bool enable=true)
 
int setMute (bool mute=true)
 
int calibrate (void)
 
- Public Member Functions inherited from Attenuator
 Attenuator (void)
 
 Attenuator (const string &deviceclass)
 
virtual ~Attenuator (void)
 
virtual int mute (int di)
 
virtual int testMute (int di)
 
virtual int open (Device &device)
 

Additional Inherited Members

- Static Public Attributes inherited from Attenuator
static const double MuteAttenuationLevel
 
static const int Underflow
 
static const int Overflow
 
- Protected Member Functions inherited from Attenuator
void setInfo (void)
 

Detailed Description

[Attenuator] Control the cs3310 attenuator via the Linux ppdev parallel-port device driver.

Author
Jan Benda
Version
1.1
Installation

Make sure that you have read and write permissions on /dev/parport0! Either do a "chmod a+rw /dev/parport0" manually, place it in rc.local (bad) or make yourself member of the group /dev/parport0 belongs to using vigr (better) or check /etc/udev/rules.d and /etc/security/console.perms (best).

/etc/security/console.perms transfers the ownership of devices to the one that is logged in. You need the following lines in /etc/security/console.perms or a file in /etc/security/console.perms.d/ :

<paralellport>=/dev/parport[0-7]
<console> 0600 <paralellport> 0660 root.lp

For manipulating udev, create a file /etc/udev/rules.d/20-local.rules with the following content:

KERNEL=="parport*", GROUP="lp", MODE="0666"

However, this is overwritten by console.perms.

Technicals by Hartmut Schuetze

Module for the programming of the CS 3310 attenuator chip, connected to the parallel port. this connection has the great advantage that one can use the status bit and several data bits to supply the necessary signals to the chip. First, the CS-signal (Pin 14 SPP, Pin 2 chip) has to be set low to adress the chip. Then, the data are presented at the D0 Pin (dataport 0 / pin 2 of the SPP, Pin 3 on the chip), and are strobed via the SCLK-Signal (Pin 1 SPP, Pin 6 chip) into the chip. repeat this for all the bits we want to transfer. After this, we wait a little before we reset the CS-signal back to high. Attention: the strobe bit and the status bit 1 are inverted at the SPP!. The timing we use here could perhaps be faster, but the 2 meters of parallel cable make the signal flanks look really sloppy, then.. nevertheless, these signals are recognised by the chip from their rising slopes (rising flank, not level triggering), so this should be no problem... anyway, we have time enough. The MUTE-signal mutes the chip (.. who would have guessed...?), but without changing the set attenuation. it is active when Pin 8 is LOW. Additionally, if you leave MUTE\ low for more than 2 ms, the CS 3310 recalibrates itself. :-) The ZCEN-signal means zero crossing detection enable, and does exactly this. If it is set, the chip waits for the next zero crossing of the signal before changing to the new attenuation. This reduces clicking (for you HiFi-proffesionals out there...), and is a really elegant feature. If there are no zero crossing, the setting changes are forced after 18 ms.

Constructor & Destructor Documentation

CS3310PP ( const string &  device)

References CS3310PP::open().

CS3310PP ( void  )
~CS3310PP ( void  )
virtual

References CS3310PP::close().

Member Function Documentation

int open ( const string &  device)
overridevirtual
bool isOpen ( void  ) const
virtual
void close ( void  )
virtual

Implements Attenuator.

References CS3310PP::setMute().

Referenced by CS3310PP::open(), and CS3310PP::~CS3310PP().

const Options & settings ( void  ) const
virtual

Returns the current settings of the attenuator.

int lines ( void  ) const
virtual

Returns the number of output lines the attenuator device supports.

Implements Attenuator.

double minLevel ( void  ) const
virtual

Returns the minimum possible attenuation level in decibel. This number can be negative, indicating amplification.

Implements Attenuator.

double maxLevel ( void  ) const
virtual

Returns the maximum possible attenuation level in decibel.

Implements Attenuator.

void levels ( vector< double > &  l) const
virtual

Returns in l all possible attenuation levels sorted by increasing attenuation levels (highest last).

Implements Attenuator.

int attenuate ( int  di,
double &  decibel 
)
virtual
int testAttenuate ( int  di,
double &  decibel 
)
virtual
int setZeroCrossing ( bool  enable = true)

References CS3310PP::isOpen().

Referenced by CS3310PP::open().

int setMute ( bool  mute = true)

References CS3310PP::isOpen().

Referenced by CS3310PP::close().

int calibrate ( void  )

References CS3310PP::isOpen().

Referenced by CS3310PP::open().


The documentation for this class was generated from the following files: