From 75ea53167386c7c25ecde1f6f8324db8dec7e1c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9F=D0=B5=D0=BB=D0=B8=D0=BF=D0=B5=D0=BD=D0=BA=D0=BE=20?= =?UTF-8?q?=D0=98=D0=B2=D0=B0=D0=BD?= Date: Mon, 29 May 2017 10:56:07 +0000 Subject: [PATCH] git-svn-id: svn://db.shs.com.ru/pip@505 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5 --- src_main/io/piconnection.cpp | 14 +++++++++++--- src_main/io/pipacketextractor.cpp | 9 ++++++++- src_main/io/pipacketextractor.h | 2 +- utils/code_model_generator/main.cpp | 4 ++-- 4 files changed, 22 insertions(+), 7 deletions(-) diff --git a/src_main/io/piconnection.cpp b/src_main/io/piconnection.cpp index 167cbbaf..f8689e14 100755 --- a/src_main/io/piconnection.cpp +++ b/src_main/io/piconnection.cpp @@ -144,9 +144,11 @@ bool PIConnection::configure(PIConfig & conf, const PIString & name_) { device_names[n] = dev; setDeviceName(dev, n); dev->setName(name_ + ".device." + dev_list[i]); + PIConfig::Entry de = ce.getValue("device." + n); + dev->setThreadedReadBufferSize(de.getValue("bufferSize", dev->threadedReadBufferSize())); PIDiagnostics * diag = diags_.value(dev, 0); if (diag != 0) - diag->setDisconnectTimeout(ce.getValue("device." + n + ".disconnectTimeout", diag->disconnectTimeout())); + diag->setDisconnectTimeout(de.getValue("disconnectTimeout", diag->disconnectTimeout())); } int added(0), padded(-1), tries(0); bool pdebug = debug(); @@ -212,6 +214,7 @@ bool PIConnection::configure(PIConfig & conf, const PIString & name_) { PIDiagnostics * diag = diags_.value(pe, 0); if (diag != 0) diag->setDisconnectTimeout(e->getValue("disconnectTimeout", diag->disconnectTimeout())); + pe->setBufferSize(e->getValue("bufferSize", pe->bufferSize())); pe->setPayloadSize(e->getValue("payloadSize", pe->payloadSize())); pe->setPacketSize(e->getValue("packetSize", pe->packetSize())); pe->setTimeout(e->getValue("timeout", pe->timeout())); @@ -254,6 +257,7 @@ PIString PIConnection::makeConfig() const { if (dnl.isEmpty()) dnl << PIString::fromNumber(++dn); piForeachC (PIString & dname, dnl) { ret << "device." << dname << " = " << d->constructFullPath() << " #s\n"; + ret << "device." << dname << ".bufferSize = " << d->threadedReadBufferSize() << " #n\n"; PIDiagnostics * diag = diags_.value(const_cast(d), 0); if (diag != 0) ret << "device." << dname << ".disconnectTimeout = " << diag->disconnectTimeout() << " #f\n"; @@ -266,6 +270,7 @@ PIString PIConnection::makeConfig() const { for (int i = 0; i < f.second->devices.size_s(); ++i) ret << prefix << ".device." << i << " = " << device_names.key(f.second->devices[i]) << " #s\n"; PIDiagnostics * diag = diags_.value(f.second->extractor, 0); + ret << prefix << ".bufferSize = " << f.second->extractor->bufferSize() << " #n\n"; if (diag != 0) ret << prefix << ".disconnectTimeout = " << diag->disconnectTimeout() << " #f\n"; ret << prefix << ".splitMode = "; @@ -422,7 +427,8 @@ PIPacketExtractor * PIConnection::addFilter(const PIString & name_, const PIStri PIString fname_ = name_.trimmed(); Extractor * e = extractors.value(fname_); if (full_path.isEmpty()) return (e == 0 ? 0 : e->extractor); - PIIODevice * dev = deviceByFullPath(fp); + PIIODevice * dev = deviceByName(fp); + if (!dev) dev = deviceByFullPath(fp); PIPacketExtractor * pe(0); if (extractors.value(full_path) != 0) pe = extractors.value(full_path)->extractor; if (pe != 0) dev = pe; @@ -591,7 +597,9 @@ PIVector PIConnection::filterBoundedDevices(const PIString & name bool PIConnection::addChannel(const PIString & name0, const PIString & name1) { //piCout << "addChannel" << name0 << name1; if (name0.isEmpty() || name1.isEmpty()) return false; - PIIODevice * dev0 = deviceByFullPath(name0), * dev1 = deviceByFullPath(name1); + PIIODevice * dev0 = deviceByName(name0), * dev1 = deviceByName(name1); + if (!dev0) dev0 = deviceByFullPath(name0); + if (!dev1) dev1 = deviceByFullPath(name1); PIPacketExtractor * pe0(0), * pe1(0); if (extractors.value(name0) != 0) pe0 = extractors.value(name0)->extractor; if (extractors.value(name1) != 0) pe1 = extractors.value(name1)->extractor; diff --git a/src_main/io/pipacketextractor.cpp b/src_main/io/pipacketextractor.cpp index ec05c88e..7270ec44 100755 --- a/src_main/io/pipacketextractor.cpp +++ b/src_main/io/pipacketextractor.cpp @@ -94,7 +94,6 @@ void PIPacketExtractor::construct() { ret_func_header = ret_func_footer = 0; setPayloadSize(0); setTimeout(100); - setThreadedReadBufferSize(65536); setBufferSize(65536); setDevice(0); setPacketSize(0); @@ -120,6 +119,14 @@ void PIPacketExtractor::setDevice(PIIODevice * device_) { } +void PIPacketExtractor::setBufferSize(int new_size) { + buffer_size = new_size; + buffer.resize(buffer_size); + memset(buffer.data(), 0, buffer.size()); + setThreadedReadBufferSize(new_size); +} + + void PIPacketExtractor::setPayloadSize(int size) { setProperty("payloadSize", size); dataSize = size; diff --git a/src_main/io/pipacketextractor.h b/src_main/io/pipacketextractor.h index 3a82e280..c0f00471 100755 --- a/src_main/io/pipacketextractor.h +++ b/src_main/io/pipacketextractor.h @@ -61,7 +61,7 @@ public: int bufferSize() const {return buffer_size;} //! Set buffer size to "new_size" bytes, should be at least greater than whole packet size - void setBufferSize(int new_size) {buffer_size = new_size; buffer.resize(buffer_size); memset(buffer.data(), 0, buffer.size());} + void setBufferSize(int new_size); void setHeaderCheckSlot(PacketExtractorCheckFunc f) {ret_func_header = f;} void setFooterCheckSlot(PacketExtractorCheckFunc f) {ret_func_footer = f;} diff --git a/utils/code_model_generator/main.cpp b/utils/code_model_generator/main.cpp index 864e9af7..316287d8 100755 --- a/utils/code_model_generator/main.cpp +++ b/utils/code_model_generator/main.cpp @@ -132,11 +132,11 @@ void makeClassStream(PIFile & f, const PICodeParser::Entity * e) { f << "\nPIByteArray & operator <<(PIByteArray & s, const " << e->name << " & v) {\n"; f << "\ts"; piForeachC (PIString & m, ml) - f << " << " << m << "\n\t"; + f << " << v." << m << "\n\t"; f << ";\n}\nPIByteArray & operator >>(PIByteArray & s, " << e->name << " & v) {\n"; f << "\ts"; piForeachC (PIString & m, ml) - f << " >> " << m << "\n\t"; + f << " >> v." << m << "\n\t"; f << ";\n}\n"; }