add settings in digitizer class
This commit is contained in:
parent
26ddde7ec7
commit
7b42ab6d1b
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -7,6 +7,7 @@ test
|
|||
windowID
|
||||
screenshot.*
|
||||
*settings*.txt
|
||||
*settings*.dat
|
||||
|
||||
*~
|
||||
*.autosave
|
||||
|
|
|
@ -45,6 +45,10 @@ void Digitizer2Gen::Initialization(){
|
|||
|
||||
acqON = false;
|
||||
|
||||
boardSettings = DIGIPARA::DIG::AllSettings;
|
||||
for( int ch = 0; ch < MaxNumberOfChannel ; ch ++) chSettings[ch] = DIGIPARA::CH::AllSettings;
|
||||
for( int index = 0 ; index < 4; index ++) VGASetting[index] = DIGIPARA::VGA::VGAGain;
|
||||
|
||||
}
|
||||
|
||||
void Digitizer2Gen::SetDummy(unsigned short sn){
|
||||
|
@ -103,6 +107,11 @@ std::string Digitizer2Gen::ReadValue(const char * parameter, bool verbose){
|
|||
return retValue;
|
||||
}
|
||||
|
||||
std::string Digitizer2Gen::ReadValue(Reg ¶, int ch_index, bool verbose){
|
||||
para.SetValue( ReadValue(para.GetFullPara(ch_index).c_str(), verbose) );
|
||||
return para.GetValue();
|
||||
}
|
||||
|
||||
std::string Digitizer2Gen::ReadDigValue(std::string shortPara, bool verbose){
|
||||
std::string haha = "/par/" + shortPara;
|
||||
return ReadValue(haha.c_str(), verbose);
|
||||
|
@ -113,25 +122,36 @@ std::string Digitizer2Gen::ReadChValue(std::string ch, std::string shortPara, bo
|
|||
return ReadValue(haha.c_str(), verbose);
|
||||
}
|
||||
|
||||
void Digitizer2Gen::WriteValue(const char * parameter, std::string value){
|
||||
if( !isConnected ) return;
|
||||
bool Digitizer2Gen::WriteValue(const char * parameter, std::string value){
|
||||
if( !isConnected ) return false;
|
||||
printf(" %s|%-45s|%s|\n", __func__, parameter, value.c_str());
|
||||
ret = CAEN_FELib_SetValue(handle, parameter, value.c_str());
|
||||
if (ret != CAEN_FELib_Success) {
|
||||
printf("|%s||%s|\n", parameter, value.c_str());
|
||||
ErrorMsg(__func__);
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Digitizer2Gen::WriteValue(Reg ¶, std::string value, int ch_index){
|
||||
|
||||
if( WriteValue(para.GetFullPara(ch_index).c_str(), value)){
|
||||
para.SetValue(value);
|
||||
return true;
|
||||
}else{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
void Digitizer2Gen::WriteDigValue(std::string shortPara, std::string value){
|
||||
bool Digitizer2Gen::WriteDigValue(std::string shortPara, std::string value){
|
||||
std::string haha = "/par/" + shortPara;
|
||||
WriteValue(haha.c_str(), value);
|
||||
return WriteValue(haha.c_str(), value);
|
||||
}
|
||||
|
||||
void Digitizer2Gen::WriteChValue(std::string ch, std::string shortPara, std::string value){
|
||||
bool Digitizer2Gen::WriteChValue(std::string ch, std::string shortPara, std::string value){
|
||||
std::string haha = "/ch/" + ch + "/par/" + shortPara;
|
||||
WriteValue(haha.c_str(), value);
|
||||
return WriteValue(haha.c_str(), value);
|
||||
}
|
||||
|
||||
void Digitizer2Gen::SendCommand(const char * parameter){
|
||||
|
@ -687,24 +707,6 @@ void Digitizer2Gen::ProgramPHA(bool testPulse){
|
|||
|
||||
}
|
||||
|
||||
void Digitizer2Gen::ReadDigitizerSettings(){
|
||||
|
||||
ReadValue("/ch/4/par/ChRecordLengthS" , true);
|
||||
ReadValue("/ch/4/par/ChPreTriggerS" , true);
|
||||
ReadValue("/ch/4/par/WaveResolution" , true);
|
||||
ReadValue("/ch/4/par/WaveAnalogProbe0" , true);
|
||||
ReadValue("/ch/4/par/WaveAnalogProbe1" , true);
|
||||
ReadValue("/ch/4/par/WaveDigitalProbe0", true);
|
||||
ReadValue("/ch/4/par/WaveDigitalProbe1", true);
|
||||
ReadValue("/ch/4/par/WaveDigitalProbe2", true);
|
||||
ReadValue("/ch/4/par/WaveDigitalProbe3", true);
|
||||
|
||||
ReadValue("/ch/4/par/ChannelsTriggerMask", true);
|
||||
|
||||
ReadValue("/ch/0/par/ChannelsTriggerMask", true);
|
||||
|
||||
}
|
||||
|
||||
std::string Digitizer2Gen::ErrorMsg(const char * funcName){
|
||||
printf("======== %s | %s\n",__func__, funcName);
|
||||
char msg[1024];
|
||||
|
@ -719,49 +721,77 @@ std::string Digitizer2Gen::ErrorMsg(const char * funcName){
|
|||
return msg;
|
||||
}
|
||||
|
||||
void Digitizer2Gen::SaveSettingsToFile(const char * saveFileName){
|
||||
printf("Saving settings....\n");
|
||||
//^===================================================== Settings
|
||||
void Digitizer2Gen::ReadAllSettings(){
|
||||
for(int i = 0; i < (int) boardSettings.size(); i++){
|
||||
if( boardSettings[i].ReadWrite() == RW::WriteOnly) continue;
|
||||
ReadValue(boardSettings[i]);
|
||||
}
|
||||
|
||||
for(int i = 0; i < 4 ; i ++) ReadValue(VGASetting[i], i);
|
||||
|
||||
for(int ch = 0; ch < nChannels ; ch++ ){
|
||||
for( int i = 0; i < (int) chSettings[ch].size(); i++){
|
||||
if( chSettings[ch][i].ReadWrite() == RW::WriteOnly) continue;
|
||||
ReadValue(chSettings[ch][i], i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool Digitizer2Gen::SaveSettingsToFile(const char * saveFileName){
|
||||
//printf("Saving settings....\n");
|
||||
FILE * saveFile = fopen(saveFileName, "w");
|
||||
if( saveFile ){
|
||||
std::string para, value;
|
||||
for(int i = 0; i < (int) DIGIPARA::DIG::AllSettings.size(); i++){
|
||||
if( DIGIPARA::DIG::AllSettings[i].ReadWrite() == RW::WriteOnly) continue;
|
||||
para = DIGIPARA::DIG::AllSettings[i].GetFullPara();
|
||||
value = ReadValue(para.c_str());
|
||||
fprintf(saveFile, "%-45s|%d|%s\n", para.c_str(), DIGIPARA::DIG::AllSettings[i].ReadWrite(), value.c_str());
|
||||
for(int i = 0; i < (int) boardSettings.size(); i++){
|
||||
if( boardSettings[i].ReadWrite() == RW::WriteOnly) continue;
|
||||
ReadValue(boardSettings[i]);
|
||||
fprintf(saveFile, "%-45s|%d|%4d|%s\n", boardSettings[i].GetFullPara().c_str(),
|
||||
boardSettings[i].ReadWrite(),
|
||||
8000 + i,
|
||||
boardSettings[i].GetValue().c_str());
|
||||
}
|
||||
|
||||
for(int i = 0; i < 4 ; i ++){
|
||||
para = DIGIPARA::VGA::VGAGain.GetFullPara(i);
|
||||
value = ReadValue(para.c_str());
|
||||
fprintf(saveFile, "%-45s|%d|%s\n", para.c_str(), DIGIPARA::DIG::AllSettings[i].ReadWrite(), value.c_str());
|
||||
ReadValue(VGASetting[i], i);
|
||||
fprintf(saveFile, "%-45s|%d|%4d|%s\n", VGASetting[i].GetFullPara(i).c_str(),
|
||||
VGASetting[i].ReadWrite(),
|
||||
9000 + i,
|
||||
VGASetting[i].GetValue().c_str());
|
||||
}
|
||||
for(int ch = 0; ch < nChannels ; ch++ ){
|
||||
for( int i = 0; i < (int) DIGIPARA::CH::AllSettings.size(); i++){
|
||||
if( DIGIPARA::CH::AllSettings[i].ReadWrite() == RW::WriteOnly) continue;
|
||||
para = DIGIPARA::CH::AllSettings[i].GetFullPara(ch);
|
||||
value = ReadValue(para.c_str());
|
||||
fprintf(saveFile, "%-45s|%d|%s\n",para.c_str(), DIGIPARA::DIG::AllSettings[i].ReadWrite(),value.c_str());
|
||||
for( int i = 0; i < (int) chSettings[ch].size(); i++){
|
||||
if( chSettings[ch][i].ReadWrite() == RW::WriteOnly) continue;
|
||||
ReadValue(chSettings[ch][i], i);
|
||||
fprintf(saveFile, "%-45s|%d|%4d|%s\n", chSettings[ch][i].GetFullPara(ch).c_str(),
|
||||
chSettings[ch][i].ReadWrite(),
|
||||
ch*100 + i,
|
||||
chSettings[ch][i].GetValue().c_str());
|
||||
}
|
||||
}
|
||||
|
||||
fclose(saveFile);
|
||||
|
||||
printf("Saved setting files to %s\n", saveFileName);
|
||||
//printf("Saved setting files to %s\n", saveFileName);
|
||||
return true;
|
||||
|
||||
}else{
|
||||
printf("Save file accessing error.");
|
||||
}
|
||||
//printf("Save file accessing error.");
|
||||
}
|
||||
|
||||
void Digitizer2Gen::LoadSettingsFromFile(const char * loadFileName){
|
||||
return false;
|
||||
}
|
||||
|
||||
bool Digitizer2Gen::LoadSettingsFromFile(const char * loadFileName){
|
||||
|
||||
FILE * loadFile = fopen(loadFileName, "r");
|
||||
char * para = new char[100];
|
||||
char * readWrite = new char[100];
|
||||
char * value = new char[100];
|
||||
|
||||
|
||||
if( loadFile ){
|
||||
char * para = new char[100];
|
||||
char * readWrite = new char[100];
|
||||
char * idStr = new char[100];
|
||||
char * value = new char[100];
|
||||
|
||||
char line[100];
|
||||
while(fgets(line, sizeof(line), loadFile) != NULL){
|
||||
|
||||
|
@ -780,20 +810,47 @@ void Digitizer2Gen::LoadSettingsFromFile(const char * loadFileName){
|
|||
|
||||
if( count == 0 ) std::strcpy(para, token);
|
||||
if( count == 1 ) std::strcpy(readWrite, token);
|
||||
if( count == 2 ) std::strcpy(value, token);
|
||||
if( count > 2) break;
|
||||
if( count == 2 ) std::strcpy(idStr, token);
|
||||
if( count == 3 ) std::strcpy(value, token);
|
||||
if( count > 3) break;
|
||||
|
||||
count ++;
|
||||
token = std::strtok(nullptr, "|");
|
||||
}
|
||||
|
||||
//printf("%s|%s|%s|\n", para, readWrite, value);
|
||||
int id = atoi(idStr);
|
||||
if( id < 8000){ // channel
|
||||
int ch = id / 100;
|
||||
int index = id - ch * 100;
|
||||
chSettings[ch][index].SetValue(value);
|
||||
//printf("-------id : %d, ch: %d, index : %d\n", id, ch, index);
|
||||
//printf("%s|%d|%d|%s|\n", chSettings[ch][index].GetFullPara(ch).c_str(),
|
||||
// chSettings[ch][index].ReadWrite(), id,
|
||||
// chSettings[ch][index].GetValue().c_str());
|
||||
|
||||
}else if ( 8000 <= id && id < 9000){ // board
|
||||
boardSettings[id - 8000].SetValue(value);
|
||||
//printf("%s|%d|%d|%s\n", boardSettings[id-8000].GetFullPara().c_str(),
|
||||
// boardSettings[id-8000].ReadWrite(), id,
|
||||
// boardSettings[id-8000].GetValue().c_str());
|
||||
}else{ // vga
|
||||
VGASetting[id - 9000].SetValue(value);
|
||||
}
|
||||
//printf("%s|%s|%d|%s|\n", para, readWrite, id, value);
|
||||
if( std::strcmp(readWrite, "2") == 0 ) WriteValue(para, value);
|
||||
|
||||
}
|
||||
|
||||
|
||||
delete [] para;
|
||||
delete [] readWrite;
|
||||
delete [] idStr;
|
||||
delete [] value;
|
||||
|
||||
return true;
|
||||
}else{
|
||||
printf("Fail to load file %s\n", loadFileName);
|
||||
//printf("Fail to load file %s\n", loadFileName);
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
}
|
||||
|
|
|
@ -62,6 +62,11 @@ class Digitizer2Gen {
|
|||
|
||||
bool acqON;
|
||||
|
||||
//all read and read/write settings
|
||||
std::vector<Reg> boardSettings;
|
||||
std::vector<Reg> chSettings[MaxNumberOfChannel];
|
||||
Reg VGASetting[4];
|
||||
|
||||
public:
|
||||
Digitizer2Gen();
|
||||
~Digitizer2Gen();
|
||||
|
@ -78,11 +83,13 @@ class Digitizer2Gen {
|
|||
int GetRet() const {return ret;};
|
||||
|
||||
std::string ReadValue(const char * parameter, bool verbose = false);
|
||||
std::string ReadValue(Reg ¶, int ch_index = -1, bool verbose = false);
|
||||
std::string ReadDigValue(std::string shortPara, bool verbose = false);
|
||||
std::string ReadChValue(std::string ch, std::string shortPara, bool verbose = false);
|
||||
void WriteValue(const char * parameter, std::string value);
|
||||
void WriteDigValue(std::string shortPara, std::string value);
|
||||
void WriteChValue(std::string ch, std::string shortPara, std::string value);
|
||||
bool WriteValue(const char * parameter, std::string value);
|
||||
bool WriteValue(Reg ¶, std::string value, int ch_index = -1);
|
||||
bool WriteDigValue(std::string shortPara, std::string value);
|
||||
bool WriteChValue(std::string ch, std::string shortPara, std::string value);
|
||||
void SendCommand(const char * parameter);
|
||||
void SendCommand(std::string shortPara);
|
||||
|
||||
|
@ -109,7 +116,6 @@ class Digitizer2Gen {
|
|||
|
||||
void Reset();
|
||||
void ProgramPHA(bool testPulse = false);
|
||||
void ReadDigitizerSettings();
|
||||
|
||||
unsigned short GetNChannels() const {return nChannels;}
|
||||
unsigned short GetCh2ns() const {return ch2ns;}
|
||||
|
@ -122,8 +128,10 @@ class Digitizer2Gen {
|
|||
unsigned int GetFileSize() const {return outFileSize;}
|
||||
uint64_t GetTotalFilesSize() const {return FinishedOutFilesSize + outFileSize;}
|
||||
|
||||
void SaveSettingsToFile(const char * saveFileName); // text file
|
||||
void LoadSettingsFromFile(const char * loadFileName);
|
||||
void ReadAllSettings(); // read settings from digitier and save to memory
|
||||
bool SaveSettingsToFile(const char * saveFileName); // ReadAllSettings + text file
|
||||
bool LoadSettingsFromFile(const char * loadFileName); // Load settings, write to digitizer and save to memory
|
||||
//void PrintAllSetting();
|
||||
|
||||
};
|
||||
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
#define DIGITIZER_PARAMETER_H
|
||||
|
||||
#include <cstdlib>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
enum TYPE {CH, DIG, LVDS, VGA};
|
||||
|
@ -11,19 +12,31 @@ enum RW { ReadOnly, WriteOnly, ReadWrite};
|
|||
class Reg {
|
||||
private:
|
||||
std::string name;
|
||||
std::string value;
|
||||
TYPE type;
|
||||
RW readWrite; // true for read/write, false for read-only
|
||||
bool isCmd;
|
||||
|
||||
public:
|
||||
Reg(){
|
||||
this->name = "";
|
||||
this->readWrite = RW::ReadWrite;
|
||||
this->type = TYPE::CH;
|
||||
this->isCmd = false;
|
||||
this->value = "";
|
||||
}
|
||||
Reg(std::string para, RW readwrite, TYPE type = TYPE::CH, bool isCmd = false){
|
||||
this->name = para;
|
||||
this->readWrite = readwrite;
|
||||
this->type = type;
|
||||
this->isCmd = isCmd;
|
||||
this->value = "";
|
||||
}
|
||||
~Reg(){};
|
||||
|
||||
void SetValue(std::string sv) { this->value = sv;}
|
||||
std::string GetValue() const { return value;}
|
||||
|
||||
std::string GetPara() const {return name;}
|
||||
std::string GetFullPara(int ch_index = -1) const {
|
||||
switch (type){
|
||||
|
|
|
@ -492,6 +492,14 @@ void MainWindow::OpenDigitizers(){
|
|||
//connect(readDataThread[i], &ReadDataThread::checkFileSize, this, &MainWindow::CheckOutFileSize);
|
||||
//connect(readDataThread[i], &ReadDataThread::endOfLastData, this, &MainWindow::CheckOutFileSize);
|
||||
|
||||
//*------ search for settings_XXXX.dat
|
||||
QString settingFile = analysisPath + "/settings_" + QString::number(digi[i]->GetSerialNumber()) + ".dat";
|
||||
if( digi[i]->LoadSettingsFromFile( settingFile.toStdString().c_str() ) ){
|
||||
LogMsg("Found setting file <b>" + settingFile + "</b> and loaded.");
|
||||
}else{
|
||||
LogMsg("<font style=\"color: red;\">Unable to found setting file <b>" + settingFile + "</b>. </font>");
|
||||
}
|
||||
|
||||
SetUpScalar();
|
||||
bnOpenScalar->setEnabled(true);
|
||||
|
||||
|
|
4
test.cpp
4
test.cpp
|
@ -94,11 +94,11 @@ int main(int argc, char* argv[]){
|
|||
|
||||
//printf("--------%s \n", digi->ReadChValue("0..63", "WaveAnalogprobe0", true).c_str());
|
||||
|
||||
//digi->SaveSettingsToFile("settings.txt");
|
||||
//digi->SaveSettingsToFile(("settings_" + std::to_string(digi->GetSerialNumber()) + ".dat").c_str());
|
||||
|
||||
printf("===================================\n");
|
||||
|
||||
digi->LoadSettingsFromFile("settings.txt");
|
||||
digi->LoadSettingsFromFile("settings_21245.dat");
|
||||
//printf("%s \n", digi->ReadValue("/ch/0/par/ChRealtimeMonitor").c_str());
|
||||
//printf("%s \n", digi->ReadValue("/ch/0/par/Energy_Nbit").c_str());
|
||||
//printf("%s \n", digi->ReadValue("/par/MaxRawDataSize").c_str());
|
||||
|
|
Loading…
Reference in New Issue
Block a user