mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-06-18 15:57:13 +02:00
Merge branch 'developer' into eiger
This commit is contained in:
@ -19,9 +19,7 @@ BinaryFile::BinaryFile(int ind, uint32_t *maxf, int *nd, std::string *fname,
|
||||
int *dindex, int *nunits, uint64_t *nf, uint32_t *dr,
|
||||
uint32_t *portno, bool *smode)
|
||||
: File(ind, BINARY, maxf, nd, fname, fpath, findex, owenable, dindex,
|
||||
nunits, nf, dr, portno, smode),
|
||||
filefd(nullptr), numFramesInFile(0), numActualPacketsInFile(0),
|
||||
maxMasterFileSize(2000) {
|
||||
nunits, nf, dr, portno, smode) {
|
||||
#ifdef VERBOSE
|
||||
PrintMembers();
|
||||
#endif
|
||||
@ -239,6 +237,8 @@ void BinaryFile::CreateMasterFile(bool masterFileWriteEnable,
|
||||
(long long int)masterFileAttributes.gateDelay2Ns,
|
||||
(long long int)masterFileAttributes.gateDelay3Ns,
|
||||
masterFileAttributes.gates, ctime(&t));
|
||||
|
||||
//TODO! snprintf? This would already have been a buffer overflow
|
||||
if (strlen(message) > maxMasterFileSize) {
|
||||
throw sls::RuntimeError("Master File Size " +
|
||||
std::to_string(strlen(message)) +
|
||||
|
@ -51,9 +51,12 @@ class BinaryFile : private virtual slsDetectorDefs, public File {
|
||||
private:
|
||||
int WriteData(char *buf, int bsize);
|
||||
|
||||
FILE *filefd;
|
||||
FILE *filefd = nullptr;
|
||||
static FILE *masterfd;
|
||||
uint32_t numFramesInFile;
|
||||
uint64_t numActualPacketsInFile;
|
||||
const size_t maxMasterFileSize;
|
||||
};
|
||||
uint32_t numFramesInFile = 0;
|
||||
uint64_t numActualPacketsInFile = 0;
|
||||
//Make sure this is known at compile time
|
||||
//TODO! Later away from stack allocation of message
|
||||
static constexpr size_t maxMasterFileSize = 2000;
|
||||
|
||||
};
|
@ -901,14 +901,12 @@ int ClientInterface::get_frame_index(Interface &socket) {
|
||||
}
|
||||
|
||||
int ClientInterface::get_missing_packets(Interface &socket) {
|
||||
std::vector<uint64_t> m = impl()->getNumMissingPackets();
|
||||
LOG(logDEBUG1) << "missing packets:" << sls::ToString(m);
|
||||
int retvalsize = m.size();
|
||||
uint64_t retval[retvalsize];
|
||||
std::copy(std::begin(m), std::end(m), retval);
|
||||
auto missing_packets = impl()->getNumMissingPackets();
|
||||
LOG(logDEBUG1) << "missing packets:" << sls::ToString(missing_packets);
|
||||
auto size = static_cast<int>(missing_packets.size());
|
||||
socket.Send(OK);
|
||||
socket.Send(&retvalsize, sizeof(retvalsize));
|
||||
socket.Send(retval, sizeof(retval));
|
||||
socket.Send(size);
|
||||
socket.Send(missing_packets.data(), sizeof(missing_packets[0])* missing_packets.size());
|
||||
return OK;
|
||||
}
|
||||
|
||||
@ -1200,13 +1198,15 @@ int ClientInterface::restream_stop(Interface &socket) {
|
||||
|
||||
int ClientInterface::set_additional_json_header(Interface &socket) {
|
||||
std::map<std::string, std::string> json;
|
||||
int size = socket.Receive<int>();
|
||||
auto size = socket.Receive<int>();
|
||||
if (size > 0) {
|
||||
char args[size * 2][SHORT_STR_LENGTH];
|
||||
memset(args, 0, sizeof(args));
|
||||
socket.Receive(args, sizeof(args));
|
||||
for (int i = 0; i < size; ++i) {
|
||||
json[args[2 * i]] = args[2 * i + 1];
|
||||
std::string buff(size, '\0');
|
||||
socket.Receive(&buff[0], buff.size());
|
||||
std::istringstream iss(buff);
|
||||
std::string key, value;
|
||||
while(iss >> key){
|
||||
iss >> value;
|
||||
json[key] = value;
|
||||
}
|
||||
}
|
||||
verifyIdle(socket);
|
||||
@ -1218,18 +1218,15 @@ int ClientInterface::set_additional_json_header(Interface &socket) {
|
||||
int ClientInterface::get_additional_json_header(Interface &socket) {
|
||||
std::map<std::string, std::string> json = impl()->getAdditionalJsonHeader();
|
||||
LOG(logDEBUG1) << "additional json header:" << sls::ToString(json);
|
||||
int size = json.size();
|
||||
std::ostringstream oss;
|
||||
for (auto & it : json){
|
||||
oss << it.first << ' ' << it.second << ' ';
|
||||
}
|
||||
auto buff = oss.str();
|
||||
auto size = static_cast<int>(buff.size());
|
||||
socket.sendResult(size);
|
||||
if (size > 0) {
|
||||
char retvals[size * 2][SHORT_STR_LENGTH];
|
||||
memset(retvals, 0, sizeof(retvals));
|
||||
int iarg = 0;
|
||||
for (auto &it : json) {
|
||||
sls::strcpy_safe(retvals[iarg], it.first.c_str());
|
||||
sls::strcpy_safe(retvals[iarg + 1], it.second.c_str());
|
||||
iarg += 2;
|
||||
}
|
||||
socket.Send(retvals, sizeof(retvals));
|
||||
socket.Send(&buff[0], buff.size());
|
||||
}
|
||||
return OK;
|
||||
}
|
||||
|
@ -411,6 +411,7 @@ void DataProcessor::PadMissingPackets(char *buf) {
|
||||
|
||||
/** ctb specific */
|
||||
void DataProcessor::RearrangeDbitData(char *buf) {
|
||||
//TODO! (Erik) Refactor and add tests
|
||||
int totalSize = (int)(*((uint32_t *)buf));
|
||||
int ctbDigitalDataBytes =
|
||||
totalSize - (*ctbAnalogDataBytes) - (*ctbDbitOffset);
|
||||
@ -429,9 +430,8 @@ void DataProcessor::RearrangeDbitData(char *buf) {
|
||||
// ceil as numResult8Bits could be decimal
|
||||
const int numResult8Bits =
|
||||
ceil((double)(numSamples * (*ctbDbitList).size()) / 8.00);
|
||||
uint8_t result[numResult8Bits];
|
||||
memset(result, 0, numResult8Bits * sizeof(uint8_t));
|
||||
uint8_t *dest = result;
|
||||
std::vector<uint8_t> result(numResult8Bits);
|
||||
uint8_t *dest = &result[0];
|
||||
|
||||
auto *source = (uint64_t *)(buf + digOffset + (*ctbDbitOffset));
|
||||
|
||||
@ -459,6 +459,6 @@ void DataProcessor::RearrangeDbitData(char *buf) {
|
||||
}
|
||||
|
||||
// copy back to buf and update size
|
||||
memcpy(buf + digOffset, result, numResult8Bits * sizeof(uint8_t));
|
||||
memcpy(buf + digOffset, result.data(), numResult8Bits * sizeof(uint8_t));
|
||||
(*((uint32_t *)buf)) = numResult8Bits * sizeof(uint8_t);
|
||||
}
|
||||
|
Reference in New Issue
Block a user