SimpleKernel 1.17.0
Loading...
Searching...
No Matches
task_messages.hpp
Go to the documentation of this file.
1
5#pragma once
6
7#include <etl/message.h>
8
9#include "resource_id.hpp"
10
12namespace task_msg_id {
13inline constexpr etl::message_id_t kSchedule = 1;
14inline constexpr etl::message_id_t kYield = 2;
15inline constexpr etl::message_id_t kSleep = 3;
16inline constexpr etl::message_id_t kBlock = 4;
17inline constexpr etl::message_id_t kWakeup = 5;
18inline constexpr etl::message_id_t kExit = 6;
19inline constexpr etl::message_id_t kReap = 7;
20} // namespace task_msg_id
21
23namespace router_id {
24inline constexpr etl::message_router_id_t kTimerHandler = 0;
25inline constexpr etl::message_router_id_t kTaskFsm = 1;
26inline constexpr etl::message_router_id_t kVirtioBlk = 2;
27inline constexpr etl::message_router_id_t kVirtioNet = 3;
28} // namespace router_id
29
33struct MsgSchedule : public etl::message<task_msg_id::kSchedule> {};
34
38struct MsgYield : public etl::message<task_msg_id::kYield> {};
39
43struct MsgWakeup : public etl::message<task_msg_id::kWakeup> {};
44
48struct MsgReap : public etl::message<task_msg_id::kReap> {};
49
53struct MsgSleep : public etl::message<task_msg_id::kSleep> {
55 uint64_t wake_tick{0};
56
59 explicit MsgSleep(uint64_t _wake_tick) : wake_tick(_wake_tick) {}
60 MsgSleep() = default;
61 MsgSleep(const MsgSleep&) = default;
62 MsgSleep(MsgSleep&&) = default;
63 auto operator=(const MsgSleep&) -> MsgSleep& = default;
64 auto operator=(MsgSleep&&) -> MsgSleep& = default;
65 ~MsgSleep() = default;
67};
68
72struct MsgBlock : public etl::message<task_msg_id::kBlock> {
75
78 explicit MsgBlock(ResourceId _resource_id) : resource_id(_resource_id) {}
79 MsgBlock() = default;
80 MsgBlock(const MsgBlock&) = default;
81 MsgBlock(MsgBlock&&) = default;
82 auto operator=(const MsgBlock&) -> MsgBlock& = default;
83 auto operator=(MsgBlock&&) -> MsgBlock& = default;
84 ~MsgBlock() = default;
86};
87
91struct MsgExit : public etl::message<task_msg_id::kExit> {
93 int exit_code{0};
95 bool has_parent{false};
96
99 MsgExit(int _exit_code, bool _has_parent)
100 : exit_code(_exit_code), has_parent(_has_parent) {}
101 MsgExit() = default;
102 MsgExit(const MsgExit&) = default;
103 MsgExit(MsgExit&&) = default;
104 auto operator=(const MsgExit&) -> MsgExit& = default;
105 auto operator=(MsgExit&&) -> MsgExit& = default;
106 ~MsgExit() = default;
108};
资源 ID
消息路由 ID
constexpr etl::message_router_id_t kTimerHandler
constexpr etl::message_router_id_t kVirtioBlk
constexpr etl::message_router_id_t kVirtioNet
constexpr etl::message_router_id_t kTaskFsm
Task FSM 消息 ID.
constexpr etl::message_id_t kWakeup
constexpr etl::message_id_t kYield
constexpr etl::message_id_t kReap
constexpr etl::message_id_t kBlock
constexpr etl::message_id_t kSchedule
constexpr etl::message_id_t kExit
constexpr etl::message_id_t kSleep
阻塞消息,携带资源 ID
MsgBlock(ResourceId _resource_id)
MsgBlock()=default
ResourceId resource_id
资源 ID
MsgBlock(MsgBlock &&)=default
auto operator=(const MsgBlock &) -> MsgBlock &=default
MsgBlock(const MsgBlock &)=default
auto operator=(MsgBlock &&) -> MsgBlock &=default
~MsgBlock()=default
退出消息,携带退出码与父任务标志
auto operator=(const MsgExit &) -> MsgExit &=default
~MsgExit()=default
bool has_parent
是否有父任务
MsgExit(int _exit_code, bool _has_parent)
MsgExit()=default
MsgExit(MsgExit &&)=default
MsgExit(const MsgExit &)=default
int exit_code
退出码
auto operator=(MsgExit &&) -> MsgExit &=default
回收消息(无负载,用作事件)
调度消息(无负载,用作事件)
睡眠消息,携带唤醒时钟
MsgSleep(const MsgSleep &)=default
auto operator=(MsgSleep &&) -> MsgSleep &=default
~MsgSleep()=default
MsgSleep(MsgSleep &&)=default
auto operator=(const MsgSleep &) -> MsgSleep &=default
MsgSleep(uint64_t _wake_tick)
uint64_t wake_tick
唤醒时钟
MsgSleep()=default
唤醒消息(无负载,用作事件)
让出消息(无负载,用作事件)