Merge pull request 'meier/master' (#14) from meier/master into master

Reviewed-on: #14
This commit is contained in:
Robin Müller 2021-07-12 20:21:21 +02:00
commit ee875460e7
3 changed files with 24 additions and 6 deletions

View File

@ -79,6 +79,7 @@ int UartComIF::configureUartPort(UartCookie* uartCookie) {
setStopBitOptions(&options, uartCookie); setStopBitOptions(&options, uartCookie);
setDatasizeOptions(&options, uartCookie); setDatasizeOptions(&options, uartCookie);
setFixedOptions(&options); setFixedOptions(&options);
setUartMode(&options, *uartCookie);
if(uartCookie->getInputShouldBeFlushed()) { if(uartCookie->getInputShouldBeFlushed()) {
tcflush(fd, TCIFLUSH); tcflush(fd, TCIFLUSH);
} }
@ -403,13 +404,13 @@ ReturnValue_t UartComIF::handleNoncanonicalRead(UartCookie &uartCookie, UartDevi
return RETURN_FAILED; return RETURN_FAILED;
} }
else if (bytesRead != static_cast<int>(requestLen)) { else if (bytesRead != static_cast<int>(requestLen)) {
sif::debug << "UartComIF::requestReceiveMessage: Only read " << bytesRead << if(uartCookie.isReplySizeFixed()) {
" of " << requestLen << " bytes" << std::endl; sif::warning << "UartComIF::requestReceiveMessage: Only read " << bytesRead <<
return RETURN_FAILED; " of " << requestLen << " bytes" << std::endl;
} return RETURN_FAILED;
else { }
iter->second.replyLen = bytesRead;
} }
iter->second.replyLen = bytesRead;
return HasReturnvaluesIF::RETURN_OK; return HasReturnvaluesIF::RETURN_OK;
} }

View File

@ -87,3 +87,11 @@ bool UartCookie::getInputShouldBeFlushed() {
object_id_t UartCookie::getHandlerId() const { object_id_t UartCookie::getHandlerId() const {
return this->handlerId; return this->handlerId;
} }
void UartCookie::setNoFixedSizeReply() {
replySizeFixed = false;
}
bool UartCookie::isReplySizeFixed() {
return replySizeFixed;
}

View File

@ -95,6 +95,14 @@ public:
void setTwoStopBits(); void setTwoStopBits();
void setOneStopBit(); void setOneStopBit();
/**
* Calling this function prevents the UartComIF to return failed if not all requested bytes
* could be read. This is required by a device handler when the size of a reply is not known.
*/
void setNoFixedSizeReply();
bool isReplySizeFixed();
private: private:
const object_id_t handlerId; const object_id_t handlerId;
@ -107,6 +115,7 @@ private:
uint8_t bitsPerWord = 8; uint8_t bitsPerWord = 8;
uint8_t readCycles = 1; uint8_t readCycles = 1;
StopBits stopBits = StopBits::ONE_STOP_BIT; StopBits stopBits = StopBits::ONE_STOP_BIT;
bool replySizeFixed = true;
}; };
#endif #endif