MCPcopy Create free account
hub / github.com/DISTORTEC/distortos / writeCompleteEvent

Method writeCompleteEvent

source/devices/communication/SerialPort.cpp:311–339  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

309}
310
311void SerialPort::writeCompleteEvent(const size_t bytesWritten)
312{
313 const auto currentWriteBuffer = currentWriteBuffer_;
314 currentWriteBuffer->increaseReadPosition(bytesWritten);
315
316 const auto nextWriteBuffer = nextWriteBuffer_;
317 if (nextWriteBuffer != nullptr && currentWriteBuffer->isEmpty() == true)
318 {
319 nextWriteBuffer_ = {};
320 currentWriteBuffer_ = nextWriteBuffer;
321 }
322
323 const auto oldWriteLimit = writeLimit_;
324 const auto newWriteLimit = oldWriteLimit - (bytesWritten < oldWriteLimit ? bytesWritten : oldWriteLimit);
325 writeLimit_ = newWriteLimit;
326 if (newWriteLimit == 0 && oldWriteLimit != 0)
327 {
328 const auto writeSemaphore = writeSemaphore_;
329 if (writeSemaphore != nullptr)
330 {
331 writeSemaphore->post();
332 writeSemaphore_ = {};
333 }
334 }
335
336 writeInProgress_ = false;
337
338 startWriteWrapper();
339}
340
341/*---------------------------------------------------------------------------------------------------------------------+
342| private functions

Callers 2

interruptHandlerMethod · 0.80
interruptHandlerMethod · 0.80

Calls 3

increaseReadPositionMethod · 0.80
isEmptyMethod · 0.80
postMethod · 0.45

Tested by

no test coverage detected