| 127 | } |
| 128 | |
| 129 | static Error |
| 130 | initialiseRootThread() |
| 131 | { |
| 132 | StackObject<Message> message; |
| 133 | auto error = IOS_CreateMessageQueue(phys_addrof(sData->messageBuffer), |
| 134 | static_cast<uint32_t>(sData->messageBuffer.size())); |
| 135 | if (error < Error::OK) { |
| 136 | gLog->error("Failed to create root thread message queue, error = {}", error); |
| 137 | return error; |
| 138 | } |
| 139 | |
| 140 | sData->messageQueueId = static_cast<MessageQueueId>(error); |
| 141 | |
| 142 | error = IOS_CreateTimer(5000us, |
| 143 | 1000000us, |
| 144 | sData->messageQueueId, |
| 145 | makeMessage(phys_addrof(sData->rootTimerMessage))); |
| 146 | if (error < Error::OK) { |
| 147 | gLog->error("Failed to create root thread timer, error = {}", error); |
| 148 | return error; |
| 149 | } |
| 150 | |
| 151 | sData->timerId = static_cast<TimerId>(error); |
| 152 | |
| 153 | error = IOS_ReceiveMessage(sData->messageQueueId, |
| 154 | message, |
| 155 | MessageFlags::None); |
| 156 | if (error < Error::OK) { |
| 157 | gLog->error("Failed to receive root thread timer message, error = {}", error); |
| 158 | } |
| 159 | |
| 160 | error = IOS_HandleEvent(DeviceId::SysProt, |
| 161 | sData->messageQueueId, |
| 162 | makeMessage(phys_addrof(sData->sysprotEventMessage))); |
| 163 | if (error < Error::OK) { |
| 164 | gLog->error("Failed to register sysprot event handler, error = {}", error); |
| 165 | return error; |
| 166 | } |
| 167 | return IOS_ClearAndEnable(DeviceId::SysProt); |
| 168 | } |
| 169 | |
| 170 | static Error |
| 171 | handleTimerEvent() |
no test coverage detected