00001 #include "ModuleConfigurationStreamer_v1.h"
00002 #include "../ModuleConfiguration.h"
00003 #include <Sct/AbcdModule.h>
00004
00005 namespace SctData {
00006 namespace IO {
00007
00008 unsigned ModuleConfigurationStreamer_v1::s_version=1;
00009
00010
00011 ModuleConfigurationStreamer_v1::ModuleConfigurationStreamer_v1() throw() {}
00012
00013 bool ModuleConfigurationStreamer_v1::inMap = IOManager::addToMap("SctData::ModuleConfiguration", std::auto_ptr<Streamer>(new ModuleConfigurationStreamer_v1()));
00014
00015
00016 shared_ptr<Streamable> ModuleConfigurationStreamer_v1::read(IStream& in, const IOManager& manager) const throw(LogicError, IoError) {
00017 shared_ptr<Streamable> m (new ModuleConfiguration());
00018 read(in, *m, manager);
00019 return m;
00020 }
00021
00022 void ModuleConfigurationStreamer_v1::write(OStream& out, const Streamable& ob, const IOManager& manager) const throw(LogicError, IoError) {
00023 const ModuleConfiguration& config = dynamic_cast<const ModuleConfiguration&>(ob);
00024 const ABCDModule& data = config.getABCDModule();
00025
00026 for (unsigned int i=0; i<Sct::nChipModule; ++i) {
00027 writeChipConfig(out, data.chip[i]);
00028 }
00029 out << data.present << data.active << data.select << data.groupId << data.pTTC << data.rTTC;
00030 out.put(data.rx, 2);
00031
00032 }
00033
00034 void ModuleConfigurationStreamer_v1::read(IStream& in, Streamable& ob, const IOManager& manager) const throw(LogicError, IoError) {
00035 ModuleConfiguration& config = dynamic_cast<ModuleConfiguration&>(ob);
00036 ABCDModule& data = config.getABCDModule();
00037
00038 for (unsigned int i=0; i<Sct::nChipModule; ++i) {
00039 readChipConfig(in, data.chip[i]);
00040 }
00041 in >> data.present >> data.active >> data.select >> data.groupId >> data.pTTC >> data.rTTC;
00042 in.get(data.rx, 2);
00043
00044
00045 }
00046
00047 void ModuleConfigurationStreamer_v1::writeChipConfig(OStream& out, const ABCDChip& data) const throw(Sct::LogicError, Sct::IoError){
00048 out << data.active << data.address << data.target;
00049
00050
00051
00052
00053 out << (UINT16)data.basic.config.readoutMode << (UINT16)data.basic.config.calibMode << (UINT16)data.basic.config.trimRange;
00054 out << (UINT16)data.basic.config.edgeDetect << (UINT16)data.basic.config.mask << (UINT16)data.basic.config.accumulate;
00055 out << (UINT16)data.basic.config.inputBypass << (UINT16)data.basic.config.outputBypass << (UINT16)data.basic.config.master;
00056 out << (UINT16)data.basic.config.end << (UINT16)data.basic.config.feedThrough;
00057
00058 out << data.basic.vthr << data.basic.vcal << data.basic.delay << data.basic.preamp << data.basic.shaper;
00059 out.put(data.basic.mask, 4);
00060
00061
00062 out << data.caldata.rc_function;
00063 out.put(data.caldata.rc_params, 3);
00064 out << data.caldata.c_factor;
00065
00066 out.put(data.trim, Sct::nChannelChip);
00067 }
00068
00069 void ModuleConfigurationStreamer_v1::readChipConfig(IStream& in, ABCDChip& data) const throw(Sct::LogicError, Sct::IoError) {
00070 in >> data.active >> data.address >> data.target;
00071
00072
00073
00074
00075 UINT16 temp = 0;
00076 in >> temp;
00077 data.basic.config.readoutMode = temp;
00078 in >> temp;
00079 data.basic.config.calibMode = temp;
00080 in >> temp;
00081 data.basic.config.trimRange = temp;
00082 in >> temp;
00083 data.basic.config.edgeDetect = temp;
00084 in >> temp;
00085 data.basic.config.mask = temp;
00086 in >> temp;
00087 data.basic.config.accumulate = temp;
00088 in >> temp;
00089 data.basic.config.inputBypass = temp;
00090 in >> temp;
00091 data.basic.config.outputBypass = temp;
00092 in >> temp;
00093 data.basic.config.master = temp;
00094 in >> temp;
00095 data.basic.config.end = temp;
00096 in >> temp;
00097 data.basic.config.feedThrough = temp;
00098
00099 in >> data.basic.vthr >> data.basic.vcal >> data.basic.delay >> data.basic.preamp >> data.basic.shaper;
00100 in.get(data.basic.mask, 4);
00101
00102
00103 in >> data.caldata.rc_function;
00104
00105 in.get(data.caldata.rc_params, 3);
00106 in >> data.caldata.c_factor;
00107
00108 in.get(data.trim, Sct::nChannelChip);
00109
00110 }
00111 }
00112 }