00001
00002 #ifndef __DTI_GATESEL_ADAPTER_HH__
00003 #define __DTI_GATESEL_ADAPTER_HH__
00004
00014 #include <accdata.hh>
00015 #include <accvector.hh>
00016 #include <accdevexception.hh>
00017
00018
00019 #include <dti-customtypes.hh>
00020
00021
00022 using std::auto_ptr;
00023
00024 namespace DeviceAccess
00025 {
00026 namespace EqModDTI
00027 {
00028
00039 class E_API GATESELDataAdapter
00040 {
00041 public:
00042
00043 static auto_ptr<const GATESELDataAdapter> createRcvP(const DeviceAccess::AccData& data)
00044 {
00045 if (data.size()>3) {
00046 throw(AccDevException(ODA_MOREDATA,ODA_OK,ACCDEV_ERRORLOCATION));
00047 }
00048 DeviceAccess::AccData& mutual_data = const_cast<DeviceAccess::AccData&>(data);
00049 return auto_ptr<const GATESELDataAdapter>(new GATESELDataAdapter(mutual_data,0));
00050 }
00051
00052 static auto_ptr<GATESELDataAdapter> createSndP(DeviceAccess::AccData& data)
00053 {
00054 data.assign(3,UWord());
00055
00056 auto_ptr<GATESELDataAdapter> p(new GATESELDataAdapter(data,0));
00057 p->init();
00058 return p;
00059 }
00060
00062 UWord gateNr() const {
00063 return (*_ptr)[_offset+0].convert(UWord());
00064 }
00065
00067 void gateNr(UWord val) {
00068 (*_ptr)[_offset+0] = val;
00069 }
00070
00072 UWord startDelay() const {
00073 return (*_ptr)[_offset+1].convert(UWord());
00074 }
00075
00077 void startDelay(UWord val) {
00078 (*_ptr)[_offset+1] = val;
00079 }
00080
00082 UWord stopDelay() const {
00083 return (*_ptr)[_offset+2].convert(UWord());
00084 }
00085
00087 void stopDelay(UWord val) {
00088 (*_ptr)[_offset+2] = val;
00089 }
00090
00091
00093 GATESELDataAdapter(DeviceAccess::AccData& data, size_t offset=0) : _ptr(&data), _offset(offset)
00094 {
00095 }
00096
00098 void init() {
00099 (*_ptr)[_offset+0] = UWord();
00100 (*_ptr)[_offset+1] = UWord();
00101 (*_ptr)[_offset+2] = UWord();
00102
00103 }
00104
00105
00106
00107 private:
00108 DeviceAccess::AccData* _ptr;
00109 size_t _offset;
00110 };
00111
00113 typedef GATESELDataAdapter WriteGATESELDataAdapter;
00114
00116 typedef auto_ptr<const WriteGATESELDataAdapter> WriteGATESELDataP;
00117
00119 typedef GATESELDataAdapter ReadGATESELDataAdapter;
00120
00122 typedef auto_ptr<ReadGATESELDataAdapter> ReadGATESELDataP;
00123
00127 }
00128 }
00129
00130 #endif