예제 #1
0
FskErr KplUIEventSetCallback(KplUIEventCallback proc, void *refcon)
{
	gUIEventCallback = proc;
	gUIEventCallbackRefcon = refcon;
	gUIEventCallbackThread = KplThreadGetCurrent();
	
	return kFskErrNone;
}
예제 #2
0
void KplTimeCallbackNew(KplTimeCallback *callback)
{
	KplTimeCallback kplTimeCallback;
	
	if (kFskErrNone != FskMemPtrNewClear(sizeof(KplTimeCallbackRecord), (FskMemPtr*)&kplTimeCallback)) {
		*callback = NULL;
		return;
	}

	*callback = kplTimeCallback;
	kplTimeCallback->owner = KplThreadGetCurrent();
}
예제 #3
0
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;
}
예제 #4
0
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;
}