00001
00002 #ifndef __DTI_MMIINFO_ADAPTER_HH__
00003 #define __DTI_MMIINFO_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 MMIINFODataAdapter
00040 {
00041 public:
00042
00043 static auto_ptr<const MMIINFODataAdapter> createRcvP(const DeviceAccess::AccData& data)
00044 {
00045 if (data.size()>137) {
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 MMIINFODataAdapter>(new MMIINFODataAdapter(mutual_data,0));
00050 }
00051
00052 static auto_ptr<MMIINFODataAdapter> createSndP(DeviceAccess::AccData& data)
00053 {
00054 data.assign(137,Float32());
00055
00056 auto_ptr<MMIINFODataAdapter> p(new MMIINFODataAdapter(data,0));
00057 p->init();
00058 return p;
00059 }
00060
00062 Float32 count() const {
00063 return (*_ptr)[_offset+0].convert(Float32());
00064 }
00065
00067 void count(Float32 val) {
00068 (*_ptr)[_offset+0] = val;
00069 }
00070
00072 Float32 range() const {
00073 return (*_ptr)[_offset+1].convert(Float32());
00074 }
00075
00077 void range(Float32 val) {
00078 (*_ptr)[_offset+1] = val;
00079 }
00080
00082 Float32 resolution() const {
00083 return (*_ptr)[_offset+2].convert(Float32());
00084 }
00085
00087 void resolution(Float32 val) {
00088 (*_ptr)[_offset+2] = val;
00089 }
00090
00092 Float32 integrat() const {
00093 return (*_ptr)[_offset+3].convert(Float32());
00094 }
00095
00097 void integrat(Float32 val) {
00098 (*_ptr)[_offset+3] = val;
00099 }
00100
00102 Float32 gainrngs() const {
00103 return (*_ptr)[_offset+4].convert(Float32());
00104 }
00105
00107 void gainrngs(Float32 val) {
00108 (*_ptr)[_offset+4] = val;
00109 }
00110
00112 Float32 gainrngi() const {
00113 return (*_ptr)[_offset+5].convert(Float32());
00114 }
00115
00117 void gainrngi(Float32 val) {
00118 (*_ptr)[_offset+5] = val;
00119 }
00120
00122 Float32 gainmods() const {
00123 return (*_ptr)[_offset+6].convert(Float32());
00124 }
00125
00127 void gainmods(Float32 val) {
00128 (*_ptr)[_offset+6] = val;
00129 }
00130
00132 Float32 gainmodi() const {
00133 return (*_ptr)[_offset+7].convert(Float32());
00134 }
00135
00137 void gainmodi(Float32 val) {
00138 (*_ptr)[_offset+7] = val;
00139 }
00140
00142 Float32 active() const {
00143 return (*_ptr)[_offset+8].convert(Float32());
00144 }
00145
00147 void active(Float32 val) {
00148 (*_ptr)[_offset+8] = val;
00149 }
00150
00151
00153 MMIINFODataAdapter(DeviceAccess::AccData& data, size_t offset=0) : data(data,offset+9,64,2), _ptr(&data), _offset(offset)
00154 {
00155 }
00156
00158 void init() {
00159 (*_ptr)[_offset+0] = Float32();
00160 (*_ptr)[_offset+1] = Float32();
00161 (*_ptr)[_offset+2] = Float32();
00162 (*_ptr)[_offset+3] = Float32();
00163 (*_ptr)[_offset+4] = Float32();
00164 (*_ptr)[_offset+5] = Float32();
00165 (*_ptr)[_offset+6] = Float32();
00166 (*_ptr)[_offset+7] = Float32();
00167 (*_ptr)[_offset+8] = Float32();
00168 data.init();
00169
00170 }
00171
00172
00174 AccCustomBoundedVector<MMIDataTypeType> data;
00175
00176
00177 private:
00178 DeviceAccess::AccData* _ptr;
00179 size_t _offset;
00180 };
00181
00183 typedef MMIINFODataAdapter ReadMMIINFODataAdapter;
00184
00186 typedef auto_ptr<ReadMMIINFODataAdapter> ReadMMIINFODataP;
00187
00191 }
00192 }
00193
00194 #endif