00001
00002 #ifndef __DTI_CURRAVG_ADAPTER_HH__
00003 #define __DTI_CURRAVG_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 CURRAVGParaAdapter
00040 {
00041 public:
00042
00043 static auto_ptr<const CURRAVGParaAdapter> createRcvP(const DeviceAccess::AccData& data)
00044 {
00045 if (data.size()>1) {
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 CURRAVGParaAdapter>(new CURRAVGParaAdapter(mutual_data,0));
00050 }
00051
00053 SLong avgCnt() const {
00054 return (*_ptr)[_offset+0].convert(SLong());
00055 }
00056
00058 void avgCnt(SLong val) {
00059 (*_ptr)[_offset+0] = val;
00060 }
00061
00062
00064 CURRAVGParaAdapter(DeviceAccess::AccData& data, size_t offset=0) : _ptr(&data), _offset(offset)
00065 {
00066 }
00067
00069 void init() {
00070 (*_ptr)[_offset+0] = SLong();
00071
00072 }
00073
00074
00075
00076 private:
00077 DeviceAccess::AccData* _ptr;
00078 size_t _offset;
00079 };
00080
00086 class E_API CURRAVGDataAdapter
00087 {
00088 public:
00089
00090 static auto_ptr<const CURRAVGDataAdapter> createRcvP(const DeviceAccess::AccData& data)
00091 {
00092 if (data.size()>2) {
00093 throw(AccDevException(ODA_MOREDATA,ODA_OK,ACCDEV_ERRORLOCATION));
00094 }
00095 DeviceAccess::AccData& mutual_data = const_cast<DeviceAccess::AccData&>(data);
00096 return auto_ptr<const CURRAVGDataAdapter>(new CURRAVGDataAdapter(mutual_data,0));
00097 }
00098
00099 static auto_ptr<CURRAVGDataAdapter> createSndP(DeviceAccess::AccData& data)
00100 {
00101 data.assign(2,Float32());
00102
00103 auto_ptr<CURRAVGDataAdapter> p(new CURRAVGDataAdapter(data,0));
00104 p->init();
00105 return p;
00106 }
00107
00109 Float32 currAvg() const {
00110 return (*_ptr)[_offset+0].convert(Float32());
00111 }
00112
00114 void currAvg(Float32 val) {
00115 (*_ptr)[_offset+0] = val;
00116 }
00117
00119 Float32 chargAvg() const {
00120 return (*_ptr)[_offset+1].convert(Float32());
00121 }
00122
00124 void chargAvg(Float32 val) {
00125 (*_ptr)[_offset+1] = val;
00126 }
00127
00128
00130 CURRAVGDataAdapter(DeviceAccess::AccData& data, size_t offset=0) : _ptr(&data), _offset(offset)
00131 {
00132 }
00133
00135 void init() {
00136 (*_ptr)[_offset+0] = Float32();
00137 (*_ptr)[_offset+1] = Float32();
00138
00139 }
00140
00141
00142
00143 private:
00144 DeviceAccess::AccData* _ptr;
00145 size_t _offset;
00146 };
00147
00149 typedef CURRAVGParaAdapter ReadCURRAVGParaAdapter;
00150
00152 typedef auto_ptr<const ReadCURRAVGParaAdapter> ReadCURRAVGParaP;
00153
00155 typedef CURRAVGDataAdapter ReadCURRAVGDataAdapter;
00156
00158 typedef auto_ptr<ReadCURRAVGDataAdapter> ReadCURRAVGDataP;
00159
00163 }
00164 }
00165
00166 #endif