2 * Acess GUI (AxWin) Version 2
3 * By John Hodge (thePowersGang)
8 #include <axwin2/messages.h>
9 //#include <sys/select.h>
11 #define AXWIN_PORT 4101
13 #define STATICBUF_SIZE 64
16 typedef void tMessages_Handle_Callback(void*, size_t, void*);
19 void Messages_PollIPC();
20 void Messages_RespondIPC(void *Ident, size_t Length, void *Data);
21 void Messages_Handle(void *Ident, int MsgLen, tAxWin_Message *Msg, tMessages_Handle_Callback *Respond);
24 int giNetworkFileHandle = -1;
25 int giMessagesFileHandle = -1;
32 giNetworkFileHandle = open("/Devices/ip/loop/udp", OPENFLAG_READ);
33 tmp = AXWIN_PORT; ioctl(giIPCFileHandle, 4, &tmp); // TODO: Don't hard-code IOCtl number
35 // TODO: Open a handle to something like /Devices/proc/cur/messages to watch for messages
36 // giMessagesFileHandle = open("/Devices/"
39 void IPC_FillSelect(int *nfds, fd_set *set)
41 if( giNetworkFileHandle > *nfds ) *nfds = giNetworkFileHandle;
42 FD_SET(giNetworkFileHandle, set);
45 void IPC_HandleSelect(fd_set *set)
47 if( FD_ISSET(giIPCFileHandle, set) )
49 char staticBuf[STATICBUF_SIZE];
50 int readlen, identlen;
53 readlen = read(giIPCFileHandle, sizeof(staticBuf), staticBuf);
55 // Assume that all connections are from localhost
56 identlen = 4 + Net_GetAddressSize( ((uint16_t*)staticBuf)[1] );
57 msg = staticBuf + identlen;
59 Messages_Handle(staticBuf, readlen - identlen, (void*)msg, Messages_RespondIPC);
64 void Messages_PollIPC()
68 char staticBuf[STATICBUF_SIZE];
72 while( (len = SysGetMessage(&tid, NULL)) == 0 )
75 // Allocate the space for it
76 if( len <= STATICBUF_SIZE )
77 msg = (void*)staticBuf;
83 "ERROR - Unable to allocate message buffer, ignoring message from %i\n",
85 SysGetMessage(NULL, GETMSG_IGNORE);
91 SysGetMessage(NULL, msg);
93 Messages_Handle(msg, Messages_RespondIPC, tid);
97 void Messages_RespondIPC(void *Ident, size_t Length, void *Data)
99 SysSendMessage( *(tid_t*)Ident, Length, Data );
102 void Messages_Handle(void *Ident, int MsgLen, tAxWin_Message *Msg, tMessages_Handle_Callback *Respond)
108 Msg->ID = MSG_SRSP_VERSION;
112 *(uint16_t*)&Msg->Data[2] = -1;
113 Respond(Ident, sizeof(Msg->ID), Msg);
117 fprintf(stderr, "WARNING: Unknown message %i (%p)\n", Msg->ID, Respond);
118 _SysDebug("WARNING: Unknown message %i (%p)\n", Msg->ID, Respond);