00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #if ! defined( DigitalIOSubsystem_hpp )
00012 #define DigitalIOSubsystem_hpp
00013
00014
00015 #include <DeviceSubsystem.hpp>
00016
00017
00018 namespace AIOUSB {
00019
00020
00021
00022
00023
00024
00025
00026 class DigitalIOSubsystem : public DeviceSubsystem {
00027 protected:
00028 int numPorts;
00029 int numChannels;
00030 int numTristateGroups;
00031 int numTristates;
00032 UCharArray writeValues;
00033
00034 UCharArray &bitsToBytes( UCharArray &dest, int bit, const BoolArray &src );
00035 BoolArray &bytesToBits( BoolArray &dest, const UCharArray &src, int bit );
00036
00037 public:
00038 DigitalIOSubsystem( USBDevice &parent );
00039 virtual ~DigitalIOSubsystem();
00040
00041
00042
00043
00044
00045 virtual std::ostream &print( std::ostream &out );
00046
00047 int getNumPorts() const {
00048 return numPorts;
00049 }
00050
00051
00052 int gGetNumChannels() const {
00053 return numChannels;
00054 }
00055
00056
00057 int getNumTristateGroups() const {
00058 return numTristateGroups;
00059 }
00060
00061
00062 int getNumTristates() const {
00063 return numTristates;
00064 }
00065
00066
00067
00068
00069
00070 DigitalIOSubsystem &configure( bool tristate, const BoolArray &outputs, const BoolArray &values );
00071 DigitalIOSubsystem &configure( const BoolArray &tristates, const BoolArray &outputs, const BoolArray &values );
00072 DigitalIOSubsystem &getConfiguration( BoolArray &tristates, BoolArray &outputs );
00073
00074
00075
00076
00077
00078 bool read( int channel );
00079 BoolArray read( int startChannel, int numChannels );
00080 DigitalIOSubsystem &write( int channel, bool value );
00081 DigitalIOSubsystem &write( int startChannel, const BoolArray &values );
00082 };
00083
00084
00085
00086 }
00087
00088 #endif
00089
00090
00091