FskErr KplUIEventSetCallback(KplUIEventCallback proc, void *refcon) { gUIEventCallback = proc; gUIEventCallbackRefcon = refcon; gUIEventCallbackThread = KplThreadGetCurrent(); return kFskErrNone; }
void KplTimeCallbackNew(KplTimeCallback *callback) { KplTimeCallback kplTimeCallback; if (kFskErrNone != FskMemPtrNewClear(sizeof(KplTimeCallbackRecord), (FskMemPtr*)&kplTimeCallback)) { *callback = NULL; return; } *callback = kplTimeCallback; kplTimeCallback->owner = KplThreadGetCurrent(); }
Boolean KplTimeCallbackGetNextTime(const KplTime now, KplTime whenNext, void *threadIn) { KplThread thread = threadIn ? threadIn : KplThreadGetCurrent(); if (thread->timerCallbacks) { KplTimeCallback cb = (KplTimeCallback)thread->timerCallbacks; if (FskTimeCompare((FskTime)now, (FskTime)&cb->trigger) < 1) { FskTimeClear((FskTime)whenNext); return false; } *whenNext = cb->trigger; } else { *whenNext = *now; FskTimeAddSecs((FskTime)whenNext, 3600 * 12); // a long time from now } return true; }
FskErr KplDeviceNotifyPropertyChangedNew(UInt32 propertyID, KplPropertyChangedCallback proc, void *refcon) { FskErr err = kFskErrNone; KplPhoneNotify kpn; if (NULL == gPhoneNotify) FskListMutexNew(&gPhoneNotify, "PhoneNotify"); FskMemPtrNewClear(sizeof(KplPhoneNotifyRecord), (FskMemPtr *)&kpn); kpn->propertyID = propertyID; kpn->proc = proc; kpn->refcon = refcon; kpn->thread = KplThreadGetCurrent(); FskListMutexAppend(gPhoneNotify, kpn); #if TEST_PROPERTY_NOTIFIERS setupTestNotifier(propertyID); #endif return err; }