added function to enable periodic reply

This commit is contained in:
Robin Müller 2021-09-11 17:39:42 +02:00
parent a88e97bc09
commit c9bfc8464a
No known key found for this signature in database
GPG Key ID: BE6480244DFE612C
2 changed files with 33 additions and 15 deletions

View File

@ -430,12 +430,7 @@ ReturnValue_t DeviceHandlerBase::insertInReplyMap(DeviceCommandId_t replyId,
DeviceReplyInfo info; DeviceReplyInfo info;
info.maxDelayCycles = maxDelayCycles; info.maxDelayCycles = maxDelayCycles;
info.periodic = periodic; info.periodic = periodic;
if(info.periodic) {
info.delayCycles = info.maxDelayCycles;
}
else {
info.delayCycles = 0; info.delayCycles = 0;
}
info.replyLen = replyLen; info.replyLen = replyLen;
info.dataSet = dataSet; info.dataSet = dataSet;
info.command = deviceCommandMap.end(); info.command = deviceCommandMap.end();
@ -474,7 +469,7 @@ ReturnValue_t DeviceHandlerBase::updateReplyMapEntry(DeviceCommandId_t deviceRep
auto replyIter = deviceReplyMap.find(deviceReply); auto replyIter = deviceReplyMap.find(deviceReply);
if (replyIter == deviceReplyMap.end()) { if (replyIter == deviceReplyMap.end()) {
triggerEvent(INVALID_DEVICE_COMMAND, deviceReply); triggerEvent(INVALID_DEVICE_COMMAND, deviceReply);
return RETURN_FAILED; return COMMAND_NOT_SUPPORTED;
} else { } else {
DeviceReplyInfo *info = &(replyIter->second); DeviceReplyInfo *info = &(replyIter->second);
if (maxDelayCycles != 0) { if (maxDelayCycles != 0) {
@ -486,6 +481,20 @@ ReturnValue_t DeviceHandlerBase::updateReplyMapEntry(DeviceCommandId_t deviceRep
} }
} }
ReturnValue_t DeviceHandlerBase::enablePeriodicReply(DeviceCommandId_t deviceReply) {
auto replyIter = deviceReplyMap.find(deviceReply);
if (replyIter == deviceReplyMap.end()) {
triggerEvent(INVALID_DEVICE_COMMAND, deviceReply);
return COMMAND_NOT_SUPPORTED;
} else {
DeviceReplyInfo *info = &(replyIter->second);
if(not info->periodic) {
return COMMAND_NOT_SUPPORTED;
}
info->delayCycles = info->maxDelayCycles;
}
return HasReturnvaluesIF::RETURN_OK;
}
ReturnValue_t DeviceHandlerBase::setReplyDataset(DeviceCommandId_t replyId, ReturnValue_t DeviceHandlerBase::setReplyDataset(DeviceCommandId_t replyId,
LocalPoolDataSetBase *dataSet) { LocalPoolDataSetBase *dataSet) {

View File

@ -449,7 +449,9 @@ protected:
* @param replyLen Will be supplied to the requestReceiveMessage call of * @param replyLen Will be supplied to the requestReceiveMessage call of
* the communication interface. * the communication interface.
* @param periodic Indicates if the command is periodic (i.e. it is sent * @param periodic Indicates if the command is periodic (i.e. it is sent
* by the device repeatedly without request) or not. Default is aperiodic (0) * by the device repeatedly without request) or not. Default is aperiodic (0).
* Please note that periodic replies are disabled by default. You can enable them with
* #enablePeriodicReplies
* @return - @c RETURN_OK when the command was successfully inserted, * @return - @c RETURN_OK when the command was successfully inserted,
* - @c RETURN_FAILED else. * - @c RETURN_FAILED else.
*/ */
@ -464,7 +466,9 @@ protected:
* @param maxDelayCycles The maximum number of delay cycles the reply waits * @param maxDelayCycles The maximum number of delay cycles the reply waits
* until it times out. * until it times out.
* @param periodic Indicates if the command is periodic (i.e. it is sent * @param periodic Indicates if the command is periodic (i.e. it is sent
* by the device repeatedly without request) or not. Default is aperiodic (0) * by the device repeatedly without request) or not. Default is aperiodic (0).
* Please note that periodic replies are disabled by default. You can enable them with
* #enablePeriodicReplies
* @return - @c RETURN_OK when the command was successfully inserted, * @return - @c RETURN_OK when the command was successfully inserted,
* - @c RETURN_FAILED else. * - @c RETURN_FAILED else.
*/ */
@ -480,6 +484,13 @@ protected:
*/ */
ReturnValue_t insertInCommandMap(DeviceCommandId_t deviceCommand); ReturnValue_t insertInCommandMap(DeviceCommandId_t deviceCommand);
/**
* Enables a periodic reply for a given command. It sets to delay cycles to the specified
* maximum delay cycles for a given reply ID.
* @return
*/
ReturnValue_t enablePeriodicReply(DeviceCommandId_t deviceReply);
/** /**
* @brief This function returns the reply length of the next reply to read. * @brief This function returns the reply length of the next reply to read.
* *
@ -493,12 +504,10 @@ protected:
virtual size_t getNextReplyLength(DeviceCommandId_t deviceCommand); virtual size_t getNextReplyLength(DeviceCommandId_t deviceCommand);
/** /**
* @brief This is a helper method to facilitate updating entries * @brief This is a helper method to facilitate updating entries in the reply map.
* in the reply map.
* @param deviceCommand Identifier of the reply to update. * @param deviceCommand Identifier of the reply to update.
* @param delayCycles The current number of delay cycles to wait. * @param delayCycles The current number of delay cycles to wait. As stated in
* As stated in #fillCommandAndCookieMap, to disable periodic commands, * #fillCommandAndReplyMap, to disable periodic commands, this is set to zero.
* this is set to zero.
* @param maxDelayCycles The maximum number of delay cycles the reply waits * @param maxDelayCycles The maximum number of delay cycles the reply waits
* until it times out. By passing 0 the entry remains untouched. * until it times out. By passing 0 the entry remains untouched.
* @param periodic Indicates if the command is periodic (i.e. it is sent * @param periodic Indicates if the command is periodic (i.e. it is sent