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