X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Usermode%2FApplications%2Faxwin2_src%2FWM%2Fmessages.c;h=af7c81944d3dd1fcd6dff6a684f6d91f6294b86f;hb=b32d0aff4c3ed251970a2244d5ead84cd86d50cd;hp=c4bed7ad9fa0b1921f72b5d8a457279976f215da;hpb=889b379627388811c630aad3214efcaee1ac9885;p=tpg%2Facess2.git diff --git a/Usermode/Applications/axwin2_src/WM/messages.c b/Usermode/Applications/axwin2_src/WM/messages.c index c4bed7ad..af7c8194 100644 --- a/Usermode/Applications/axwin2_src/WM/messages.c +++ b/Usermode/Applications/axwin2_src/WM/messages.c @@ -5,29 +5,62 @@ #include "common.h" #include #include -#include +#include +//#include + +#define AXWIN_PORT 4101 #define STATICBUF_SIZE 64 // === TYPES === -typedef void tMessages_Handle_Callback(int, size_t,void*); +typedef void tMessages_Handle_Callback(void*, size_t, void*); // === PROTOTYPES === void Messages_PollIPC(); -void Messages_RespondIPC(int ID, size_t Length, void *Data); -void Messages_Handle(tAxWin_Message *Msg, tMessages_Handle_Callback *Respond, int ID); +void Messages_RespondIPC(void *Ident, size_t Length, void *Data); +void Messages_Handle(void *Ident, int MsgLen, tAxWin_Message *Msg, tMessages_Handle_Callback *Respond); // === GLOBALS === - int giIPCFileHandle; + int giNetworkFileHandle = -1; + int giMessagesFileHandle = -1; // === CODE === void IPC_Init(void) { + int tmp; // TODO: Check this - giIPCFileHandle = open("/Devices/ip/loop/udpc", OPENFLAG_READ|OPENFLAG_EXEC); -// ioctl(giIPCFileHandle, ); + giNetworkFileHandle = open("/Devices/ip/loop/udp", OPENFLAG_READ); + tmp = AXWIN_PORT; ioctl(giIPCFileHandle, 4, &tmp); // TODO: Don't hard-code IOCtl number + + // TODO: Open a handle to something like /Devices/proc/cur/messages to watch for messages +// giMessagesFileHandle = open("/Devices/" +} + +void IPC_FillSelect(int *nfds, fd_set *set) +{ + if( giNetworkFileHandle > *nfds ) *nfds = giNetworkFileHandle; + FD_SET(giNetworkFileHandle, set); +} + +void IPC_HandleSelect(fd_set *set) +{ + if( FD_ISSET(giIPCFileHandle, set) ) + { + char staticBuf[STATICBUF_SIZE]; + int readlen, identlen; + char *msg; + + readlen = read(giIPCFileHandle, sizeof(staticBuf), staticBuf); + + // Assume that all connections are from localhost + identlen = 4 + Net_GetAddressSize( ((uint16_t*)staticBuf)[1] ); + msg = staticBuf + identlen; + + Messages_Handle(staticBuf, readlen - identlen, (void*)msg, Messages_RespondIPC); + } } +#if 0 void Messages_PollIPC() { int len; @@ -59,13 +92,14 @@ void Messages_PollIPC() Messages_Handle(msg, Messages_RespondIPC, tid); } +#endif -void Messages_RespondIPC(int ID, size_t Length, void *Data) +void Messages_RespondIPC(void *Ident, size_t Length, void *Data) { - SysSendMessage(ID, Length, Data); + SysSendMessage( *(tid_t*)Ident, Length, Data ); } -void Messages_Handle(tAxWin_Message *Msg, tMessages_Handle_Callback *Respond, int ID) +void Messages_Handle(void *Ident, int MsgLen, tAxWin_Message *Msg, tMessages_Handle_Callback *Respond) { switch(Msg->ID) { @@ -76,12 +110,12 @@ void Messages_Handle(tAxWin_Message *Msg, tMessages_Handle_Callback *Respond, in Msg->Data[0] = 0; Msg->Data[1] = 1; *(uint16_t*)&Msg->Data[2] = -1; - Messages_RespondIPC(ID, sizeof(Msg->ID), Msg); + Respond(Ident, sizeof(Msg->ID), Msg); break; #endif default: - fprintf(stderr, "WARNING: Unknown message %i from %i (%p)\n", Msg->ID, ID, Respond); - _SysDebug("WARNING: Unknown message %i from %i (%p)\n", Msg->ID, ID, Respond); + fprintf(stderr, "WARNING: Unknown message %i (%p)\n", Msg->ID, Respond); + _SysDebug("WARNING: Unknown message %i (%p)\n", Msg->ID, Respond); break; } }