20#include "modules/subsys/posix/IoEvent.h"
24#include "modules/subsys/posix/PosixSubsystem.h"
25#include "modules/system/vfs/File.h"
27static void ioEventHandler(uint8_t* pBuffer);
32 :
Event(reinterpret_cast<uintptr_t>(&ioEventHandler), false),
33 m_pSubsystem(subsystem),
35 m_pRetriggerInstance(0) {
42 m_pSubsystem->
sendSignal(pThread, SIGIO,
true,
true);
45 if (m_pRetriggerInstance) {
48 m_pFile->
monitor(pThread, m_pRetriggerInstance);
54 void* alignedBuffer = ASSUME_ALIGNMENT(pBuffer,
sizeof(
size_t));
55 size_t* pBuf =
reinterpret_cast<size_t*
>(alignedBuffer);
56 pBuf[0] = EventNumbers::IoEvent;
57 pBuf[1] =
reinterpret_cast<size_t>(m_pSubsystem);
58 pBuf[2] =
reinterpret_cast<size_t>(m_pFile);
59 pBuf[3] =
reinterpret_cast<size_t>(
this);
61 return 4 *
sizeof(size_t);
64bool IoEvent::unserialize(uint8_t* pBuffer,
IoEvent& event) {
65 void* alignedBuffer = ASSUME_ALIGNMENT(pBuffer,
sizeof(
size_t));
66 size_t* pBuf =
reinterpret_cast<size_t*
>(alignedBuffer);
67 if (pBuf[0] != EventNumbers::IoEvent)
71 event.m_pFile =
reinterpret_cast<File*
>(pBuf[2]);
72 event.m_pRetriggerInstance =
reinterpret_cast<IoEvent*
>(pBuf[3]);
77void ioEventHandler(uint8_t* pBuffer) {
79 if (!IoEvent::unserialize(pBuffer, e)) {
80 FATAL(
"PollEventHandler: unable to unserialize event!");
void monitor(Thread *pThread, Event *pEvent)
virtual size_t serialize(uint8_t *pBuffer)
virtual void sendSignal(Thread *pThread, int signal, bool yield=true, bool processDirected=false)
static ProcessorInformation & information()