25 #ifndef TVM_RUNTIME_CRT_RPC_COMMON_SESSION_H_
26 #define TVM_RUNTIME_CRT_RPC_COMMON_SESSION_H_
95 void* message_received_func_context)
98 state_{State::kReset},
101 receive_buffer_{receive_buffer},
102 receive_buffer_has_complete_message_{false},
103 message_received_func_{message_received_func},
104 message_received_func_context_{message_received_func_context} {
108 if (receive_buffer_ !=
nullptr) {
109 receive_buffer_->
Clear();
151 size_t message_size_bytes);
200 explicit SessionReceiver(
Session* session) : session_{session} {}
201 virtual ~SessionReceiver() {}
203 ssize_t Write(
const uint8_t* data,
size_t data_size_bytes)
override;
204 void PacketDone(
bool is_valid)
override;
207 void operator delete(
void*) noexcept {}
211 enum class State : uint8_t {
213 kNoSessionEstablished = 1,
214 kStartSessionSent = 2,
215 kSessionEstablished = 3,
218 void RegenerateNonce();
221 size_t message_size_bytes);
229 void OnSessionEstablishedMessage();
231 void OnSessionTerminatedMessage();
233 void SetSessionId(uint8_t initiator_nonce, uint8_t responder_nonce) {
234 session_id_ = initiator_nonce | (((uint16_t)responder_nonce) << 8);
237 uint8_t InitiatorNonce(uint16_t session_id) {
return session_id & 0xff; }
239 uint8_t ResponderNonce(uint16_t session_id) {
return (session_id >> 8) & 0xff; }
241 uint8_t local_nonce_;
242 uint16_t session_id_;
244 SessionReceiver receiver_;
246 FrameBuffer* receive_buffer_;
247 bool receive_buffer_has_complete_message_;
249 void* message_received_func_context_;
Definition: frame_buffer.h:35
Definition: framing.h:144
CRT communication session management class. Assumes the following properties provided by the underlyi...
Definition: session.h:73
tvm_crt_error_t StartSession()
Start a new session regardless of state. Sends kStartSessionMessage.
void(* MessageReceivedFunc)(void *context, MessageType message_type, FrameBuffer *buf)
Callback invoked when a full message is received.
Definition: session.h:89
tvm_crt_error_t SendBodyChunk(const uint8_t *chunk_data, size_t chunk_size_bytes)
Send a part of the message body.
tvm_crt_error_t TerminateSession()
Terminate any previously-established session.
WriteStream * Receiver()
Obtain a WriteStream implementation for use by the framing layer.
Definition: session.h:141
tvm_crt_error_t SendMessage(MessageType message_type, const uint8_t *message_data, size_t message_size_bytes)
Send a full message including header, payload, and CRC footer.
Session(Framer *framer, FrameBuffer *receive_buffer, MessageReceivedFunc message_received_func, void *message_received_func_context)
Definition: session.h:94
void ClearReceiveBuffer()
Clear the receive buffer and prepare to receive next message.
tvm_crt_error_t StartMessage(MessageType message_type, size_t message_size_bytes)
Send the framing and session layer headers.
tvm_crt_error_t Initialize(uint8_t initial_session_nonce)
Send a session terminate message, usually done at startup to interrupt a hanging remote.
tvm_crt_error_t FinishMessage()
Finish sending the message by sending the framing layer footer.
bool IsEstablished() const
Returns true if the session is in the established state.
Definition: session.h:183
static constexpr const uint8_t kVersion
A version number used to check compatibility of the remote session implementation.
Definition: session.h:195
static constexpr const uint8_t kInvalidNonce
An invalid nonce value that typically indicates an unknown nonce.
Definition: session.h:92
Definition: write_stream.h:39
Defines integral error codes returned by the CRT.
tvm_crt_error_t
Definition: error_codes.h:50
Defines a buffer for use by the RPC framing layer.
MessageType
Definition: session.h:38
struct tvm::runtime::micro_rpc::SessionHeader SessionHeader
runtime implementation for LibTorch/TorchScript.
Definition: analyzer.h:36