uint getMaxCustomEventSize() { #define COUNT_CUSTOM_EVENT(eventType, dataType)\ if(maxCustomEventSize < sizeof(dataType)) maxCustomEventSize = sizeof(dataType); uint maxCustomEventSize = 0; CUSTOM_EVENTS(COUNT_CUSTOM_EVENT); DUMPHEX(maxCustomEventSize); maxCustomEventSize = (maxCustomEventSize+0x3) & (~0x3); // align to sizeof(int) return maxCustomEventSize; }
// Parameter event points to event object on the MoSync side. SYSCALL(int, maGetEvent(MAEvent* event)) { gSyscall->ValidateMemRange(event, sizeof(MAEvent)); MYASSERT(((uint)event & 3) == 0, ERR_MEMORY_ALIGNMENT); //alignment // Exit if event queue is empty. if (gEventFifo.count() == 0) return 0; // Copy runtime side event to MoSync side event. *event = gEventFifo.get(); // Copy event data to memory on the MoSync side. #define HANDLE_CUSTOM_EVENT(eventType, dataType) if(event->type == eventType) { \ memcpy(Core::GetCustomEventPointer(gCore), event->data, sizeof(dataType)); \ delete (dataType*) event->data; \ event->data = (void*) (int(Core::GetCustomEventPointer(gCore)) - int(gCore->mem_ds)); } // Macro CUSTOM_EVENTS is defined in runtimes/cpp/base/Syscall.h CUSTOM_EVENTS(HANDLE_CUSTOM_EVENT); return 1; }