From 00de9ee6aaa6328980a6d1c6b04fa75741194de3 Mon Sep 17 00:00:00 2001 From: Davide Grohmann Date: Wed, 23 Mar 2022 14:59:56 +0100 Subject: Initial support for inference cancellation Infransctrure work to being able to send back and forth requests and responses for inference cancellations. The implementation is stubbed to always fail in this commit. Change-Id: Id7848930b81a3f38fe6c05323ccca2edd6b5b5bf --- applications/message_handler/message_handler.cpp | 27 ++++++++++++++++++++++-- applications/message_handler/message_handler.hpp | 1 + 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/applications/message_handler/message_handler.cpp b/applications/message_handler/message_handler.cpp index a634c16..f06d056 100644 --- a/applications/message_handler/message_handler.cpp +++ b/applications/message_handler/message_handler.cpp @@ -117,7 +117,7 @@ bool getNetwork(const uint32_t index, void *&data, size_t &size) { #endif default: - printf("Error: Network model index out of range. index=%u\n", index); + printf("Error: Network model index out of range. index=%" PRIu32 "\n", index); return true; } @@ -131,7 +131,7 @@ bool getNetwork(const ethosu_core_network_buffer &buffer, void *&data, size_t &s case ETHOSU_CORE_NETWORK_INDEX: return getNetwork(buffer.index, data, size); default: - printf("Error: Unsupported network model type. type=%u\n", buffer.type); + printf("Error: Unsupported network model type. type=%" PRIu32 "\n", buffer.type); return true; } } @@ -293,6 +293,19 @@ bool IncomingMessageHandler::handleMessage() { } break; } + case ETHOSU_CORE_MSG_CANCEL_INFERENCE_REQ: { + ethosu_core_cancel_inference_req req; + if (!inputMessageQueue.read(req)) { + sendErrorAndResetQueue(ETHOSU_CORE_MSG_ERR_INVALID_PAYLOAD, "CancelInferenceReq. Failed to read payload"); + break; + } + printf("Msg: CancelInferenceReq. user_arg=0x%" PRIx64 ", inference_handle=0x%" PRIx64 "\n", + req.user_arg, + req.inference_handle); + + sendCancelInferenceRsp(req.user_arg, ETHOSU_CORE_STATUS_ERROR); + break; + } case ETHOSU_CORE_MSG_NETWORK_INFO_REQ: { ethosu_core_network_info_req req; if (!inputMessageQueue.read(req)) { @@ -393,6 +406,16 @@ void IncomingMessageHandler::sendFailedInferenceRsp(uint64_t userArg, uint32_t s mailbox.sendMessage(); } } +void IncomingMessageHandler::sendCancelInferenceRsp(uint64_t userArg, uint32_t status) { + ethosu_core_cancel_inference_rsp cancellation; + cancellation.user_arg = userArg; + cancellation.status = status; + if (!outputMessageQueue.write(ETHOSU_CORE_MSG_CANCEL_INFERENCE_RSP, cancellation)) { + printf("ERROR: Msg: Failed to write cancel inference response. No mailbox message sent\n"); + } else { + mailbox.sendMessage(); + } +} void IncomingMessageHandler::readCapabilties(ethosu_core_msg_capabilities_rsp &rsp) { rsp = {}; diff --git a/applications/message_handler/message_handler.hpp b/applications/message_handler/message_handler.hpp index 60787e8..fa79205 100644 --- a/applications/message_handler/message_handler.hpp +++ b/applications/message_handler/message_handler.hpp @@ -59,6 +59,7 @@ private: void sendNetworkInfoRsp(uint64_t userArg, EthosU::ethosu_core_network_buffer &network); void sendInferenceRsp(EthosU::ethosu_core_inference_rsp &inference); void sendFailedInferenceRsp(uint64_t userArg, uint32_t status); + void sendCancelInferenceRsp(uint64_t userArg, uint32_t status); void readCapabilties(EthosU::ethosu_core_msg_capabilities_rsp &rsp); MessageQueue::QueueImpl inputMessageQueue; -- cgit v1.2.1