diff --git a/src_main/io_devices/pibinarylog.cpp b/src_main/io_devices/pibinarylog.cpp index e1eafa3d..b000966c 100644 --- a/src_main/io_devices/pibinarylog.cpp +++ b/src_main/io_devices/pibinarylog.cpp @@ -46,7 +46,11 @@ REGISTER_DEVICE(PIBinaryLog) PIBinaryLog::PIBinaryLog() { +#ifdef FREERTOS + setThreadedReadBufferSize(512); +#else setThreadedReadBufferSize(65536); +#endif is_started = is_indexed = is_pause = false; current_index = -1; setPlaySpeed(1.); diff --git a/src_main/io_devices/piethernet.cpp b/src_main/io_devices/piethernet.cpp index 2b7fef22..b6e1ceb2 100755 --- a/src_main/io_devices/piethernet.cpp +++ b/src_main/io_devices/piethernet.cpp @@ -263,7 +263,11 @@ void PIEthernet::construct() { setMulticastTTL(1); server_thread_.setData(this); server_thread_.setName("__S__server_thread"); +#ifdef FREERTOS + setThreadedReadBufferSize(512); +#else setThreadedReadBufferSize(65536); +#endif setPriority(piHigh); } diff --git a/src_main/io_devices/piiodevice.cpp b/src_main/io_devices/piiodevice.cpp index 822737ca..c541ceb1 100755 --- a/src_main/io_devices/piiodevice.cpp +++ b/src_main/io_devices/piiodevice.cpp @@ -229,7 +229,8 @@ void PIIODevice::terminate() { void PIIODevice::begin() { //cout << " begin\n"; - if (threadedReadBufferSize() == 0) + buffer_tr.resize(threaded_read_buffer_size); + if (threaded_read_buffer_size == 0) piCoutObj << "Warning: threadedReadBufferSize() == 0, read may be useless!"; thread_started_ = false; if (!opened_) { @@ -275,10 +276,10 @@ PIByteArray PIIODevice::readForTime(double timeout_ms) { PIByteArray str; if (timeout_ms <= 0.) return str; int ret; - uchar * td = new uchar[threadedReadBufferSize()]; + uchar * td = new uchar[threaded_read_buffer_size]; tm.reset(); while (tm.elapsed_m() < timeout_ms) { - ret = read(td, threadedReadBufferSize()); + ret = read(td, threaded_read_buffer_size); if (ret <= 0) msleep(PIP_MIN_MSLEEP); else str.append(td, ret); } @@ -311,12 +312,12 @@ bool PIIODevice::configure(const PIString & config_file, const PIString & sectio if (!ex) setReopenEnabled(em.getValue("reopenEnabled", isReopenEnabled())); setReopenTimeout(ep->getValue("reopenTimeout", reopenTimeout(), &ex)); if (!ex) setReopenTimeout(em.getValue("reopenTimeout", reopenTimeout())); - setThreadedReadBufferSize(ep->getValue("threadedReadBufferSize", int(buffer_tr.size_s()), &ex)); - if (!ex) setThreadedReadBufferSize(em.getValue("threadedReadBufferSize", int(buffer_tr.size_s()))); + setThreadedReadBufferSize(ep->getValue("threadedReadBufferSize", int(threaded_read_buffer_size), &ex)); + if (!ex) setThreadedReadBufferSize(em.getValue("threadedReadBufferSize", int(threaded_read_buffer_size))); } else { setReopenEnabled(em.getValue("reopenEnabled", isReopenEnabled())); setReopenTimeout(em.getValue("reopenTimeout", reopenTimeout())); - setThreadedReadBufferSize(em.getValue("threadedReadBufferSize", int(buffer_tr.size_s()))); + setThreadedReadBufferSize(em.getValue("threadedReadBufferSize", int(threaded_read_buffer_size))); } return configureDevice(&em, ep); } diff --git a/src_main/io_devices/piiodevice.h b/src_main/io_devices/piiodevice.h index 2ced538c..b189509b 100755 --- a/src_main/io_devices/piiodevice.h +++ b/src_main/io_devices/piiodevice.h @@ -155,10 +155,10 @@ public: /** \brief Set size of threaded read buffer * \details Default size is 4096 bytes. If your device can read at single read * more than 4096 bytes you should use this function to adjust buffer size */ - void setThreadedReadBufferSize(int new_size) {buffer_tr.resize(new_size); threadedReadBufferSizeChanged();} + void setThreadedReadBufferSize(int new_size) {threaded_read_buffer_size = new_size; threadedReadBufferSizeChanged();} //! Return size of threaded read buffer - int threadedReadBufferSize() const {return buffer_tr.size_s();} + int threadedReadBufferSize() const {return threaded_read_buffer_size;} //! Return content of threaded read buffer const uchar * threadedReadBuffer() const {return buffer_tr.data();} @@ -260,10 +260,10 @@ public: static PIStringList availablePrefixes(); - EVENT_HANDLER(bool, open) {if (!init_) init(); opened_ = openDevice(); if (opened_) opened(); return opened_;} - EVENT_HANDLER1(bool, open, const PIString &, _path) {setPath(_path); if (!init_) init(); opened_ = openDevice(); if (opened_) opened(); return opened_;} - bool open(DeviceMode _mode) {mode_ = _mode; if (!init_) init(); opened_ = openDevice(); if (opened_) opened(); return opened_;} - EVENT_HANDLER2(bool, open, const PIString &, _path, DeviceMode, _mode) {setPath(_path); mode_ = _mode; if (!init_) init(); opened_ = openDevice(); if (opened_) opened(); return opened_;} + EVENT_HANDLER(bool, open) {if (!init_) init(); buffer_tr.resize(threaded_read_buffer_size); opened_ = openDevice(); if (opened_) opened(); return opened_;} + EVENT_HANDLER1(bool, open, const PIString &, _path) {setPath(_path); if (!init_) init(); buffer_tr.resize(threaded_read_buffer_size); opened_ = openDevice(); if (opened_) opened(); return opened_;} + bool open(DeviceMode _mode) {mode_ = _mode; if (!init_) init(); buffer_tr.resize(threaded_read_buffer_size); opened_ = openDevice(); if (opened_) opened(); return opened_;} + EVENT_HANDLER2(bool, open, const PIString &, _path, DeviceMode, _mode) {setPath(_path); mode_ = _mode; if (!init_) init(); buffer_tr.resize(threaded_read_buffer_size); opened_ = openDevice(); if (opened_) opened(); return opened_;} EVENT_HANDLER(bool, close) {opened_ = !closeDevice(); if (!opened_) closed(); return !opened_;} EVENT_HANDLER1(int, write, PIByteArray, data) {return writeDevice(data.data(), data.size_s());} @@ -411,6 +411,7 @@ private: PIQueue > write_queue; ullong tri; int readed_; + uint threaded_read_buffer_size; bool init_, thread_started_, raise_threaded_read_; static PIMutex nfp_mutex; diff --git a/src_main/io_devices/pispi.cpp b/src_main/io_devices/pispi.cpp index d4ba9320..b2ca12a7 100644 --- a/src_main/io_devices/pispi.cpp +++ b/src_main/io_devices/pispi.cpp @@ -23,7 +23,11 @@ REGISTER_DEVICE(PISPI) PISPI::PISPI(const PIString & path, uint speed, PIIODevice::DeviceMode mode) : PIIODevice(path, mode) { +#ifdef FREERTOS + setThreadedReadBufferSize(512); +#else setThreadedReadBufferSize(1024); +#endif setPath(path); setSpeed(speed); setBits(8); diff --git a/src_main/io_utils/pibasetransfer.cpp b/src_main/io_utils/pibasetransfer.cpp index 8d4291e3..3ac42ae1 100644 --- a/src_main/io_utils/pibasetransfer.cpp +++ b/src_main/io_utils/pibasetransfer.cpp @@ -20,7 +20,11 @@ PIBaseTransfer::PIBaseTransfer(): crc(standardCRC_16()), diag(false) { diag.setName("PIBaseTransfer"); diag.start(50); packets_count = 10; +#ifdef FREERTOS + setPacketSize(512); +#else setPacketSize(4096); +#endif randomize(); } diff --git a/src_main/io_utils/pipacketextractor.cpp b/src_main/io_utils/pipacketextractor.cpp index db5a9049..24dd176c 100644 --- a/src_main/io_utils/pipacketextractor.cpp +++ b/src_main/io_utils/pipacketextractor.cpp @@ -94,7 +94,11 @@ void PIPacketExtractor::construct() { ret_func_header = ret_func_footer = 0; setPayloadSize(0); setTimeout(100); +#ifdef FREERTOS + setBufferSize(512); +#else setBufferSize(65536); +#endif setDevice(0); setPacketSize(0); setSplitMode(None); diff --git a/src_main/thread/pithread.cpp b/src_main/thread/pithread.cpp index 5780c114..e039bbfe 100755 --- a/src_main/thread/pithread.cpp +++ b/src_main/thread/pithread.cpp @@ -224,7 +224,7 @@ bool PIThread::start(int timer_delay) { # endif pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); int ret = pthread_create(&PRIVATE->thread, &attr, thread_function, this); - piCout << "pthread_create" << PRIVATE->thread; + //piCout << "pthread_create" << PRIVATE->thread; pthread_attr_destroy(&attr); if (ret == 0) { # ifdef MAC_OS @@ -268,7 +268,7 @@ bool PIThread::startOnce() { # endif pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); int ret = pthread_create(&(PRIVATE->thread), &attr, thread_function_once, this); - piCout << "pthread_create" << PRIVATE->thread; + //piCout << "pthread_create" << PRIVATE->thread; pthread_attr_destroy(&attr); if (ret == 0) { # ifdef MAC_OS @@ -469,7 +469,7 @@ void PIThread::__thread_func__(void * t) { ct.terminating = ct.running_ = false; ct.tid_ = -1; //cout << "thread " << t << " exiting ... " << endl; - piCout << "pthread_exit" << (ct.__privateinitializer__.p)->thread; + //piCout << "pthread_exit" << (ct.__privateinitializer__.p)->thread; UNREGISTER_THREAD(&ct); PIINTROSPECTION_UNREGISTER_THREAD(ct.tid()); #ifndef WINDOWS @@ -518,7 +518,7 @@ void PIThread::__thread_func_once__(void * t) { ct.terminating = ct.running_ = false; ct.tid_ = -1; //cout << "thread " << t << " exiting ... " << endl; - piCout << "pthread_exit" << (ct.__privateinitializer__.p)->thread; + //piCout << "pthread_exit" << (ct.__privateinitializer__.p)->thread; UNREGISTER_THREAD(&ct); PIINTROSPECTION_UNREGISTER_THREAD(ct.tid()); #ifndef WINDOWS