Ejemplo n.º 1
0
FskErr FskNetInterfaceInitialize(void) {
	FskErr err;

	err = FskListMutexNew(&interfaceChangeCBList, "interfaceChangeCBLIst");
	if (err) return err;

#if TARGET_OS_WIN32
	installWindowsNetworkInterfaceChangeTracker();
#elif TARGET_OS_IPHONE
	installIOSNetworkInterfaceChangeTracker();
#elif TARGET_OS_MAC
	installMacNetworkInterfaceChangeTracker();
#endif /* TARGET_OS */

#if TARGET_OS_KPL
	KplNetInterfaceInitialize();
	KplNetInterfaceSetChangedCallback(KplNetInterfaceChanged, 0L);
#endif /* TARGET_OS_KPL */

	err = FskListMutexNew(&gNetworkInterfaceList, "gNetworkInterfaceList");
	if (err) return err;
	FskMutexAcquire(gNetworkInterfaceList->mutex);
	sFskNetInterfaceEnumerate((FskNetInterfaceRecord**)(void*)&gNetworkInterfaceList->list);
	FskMutexRelease(gNetworkInterfaceList->mutex);

	return err;
}
Ejemplo n.º 2
0
FskErr linuxDigitalNew(FskPinDigital *pin, SInt32 number, const char *name, FskPinsDigitalDirection direction)
{
    FskErr err;
    FILE *f;
    linuxDigital ld;
    int file = -1;
    char buffer[50];

    if (NULL == gLinuxDigitalPins) {
        err = FskListMutexNew(&gLinuxDigitalPins, "linux digital repeat thread");
        if (err) return err;
    }

    f = fopen("/sys/class/gpio/export", "w");
    if (!f) printf("failed to export pin\n");
    if (!f) return kFskErrFileNotFound;

    fprintf(f, "%d", (int)number);
    fclose(f);

    err = FskMemPtrNewClear(sizeof(linuxDigitalRecord), (FskMemPtr *)&ld);
    if (err) return err;

    ld->pin = (int)number;
    ld->file = -1;
    ld->canInterrupt = false;

    FskListMutexAppend(gLinuxDigitalPins, &ld->next);

    snprintf(buffer, sizeof(buffer), "/sys/class/gpio/gpio%d/edge", ld->pin);
    file = open(buffer, O_WRONLY);
    if (file >= 0) {
        ld->canInterrupt = write(file, "both", 5) > 0;
        close(file);
    }

    *pin = (FskPinDigital)ld;
    return linuxDigitalSetDirection((FskPinDigital)ld, direction);
}
Ejemplo n.º 3
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;
}
Ejemplo n.º 4
0
FskErr androidAudioOutNew(FskAudioOut *audioOutOut, UInt32 outputID, UInt32 format) {
	SLresult res;
	FskErr err = kFskErrNone;
	FskAudioOut audioOut = NULL;
	androidAudioExt	*ext = NULL;
	int i;

	SLDataLocator_OutputMix loc_outmix;
	SLDataLocator_AndroidSimpleBufferQueue loc_bufq = {SL_DATALOCATOR_ANDROIDSIMPLEBUFFERQUEUE, 2};
	SLDataFormat_PCM pcm;

	SLDataSink audioSnk;
	SLDataSource audioSrc = {&loc_bufq, &pcm};

	if (NULL == audioOuts) {
		err = FskListMutexNew(&audioOuts, "audioOuts");
		if (err) goto bail;
	}

	err = FskMemPtrNewClear(sizeof(FskAudioOutRecord), (FskMemPtr*)&audioOut);
	if (err) goto bail;
	err = FskMemPtrNewClear(sizeof(androidAudioExt), (FskMemPtr*)&ext);
	if (err) goto bail;
	err = FskMemPtrNewClear(AUDIO_DATA_BUFFER_SIZE, (FskMemPtr*)&ext->audioBuf[0]);
	if (err) goto bail;
	err = FskMemPtrNewClear(AUDIO_DATA_BUFFER_SIZE, (FskMemPtr*)&ext->audioBuf[1]);
	if (err) goto bail;
	ext->nextBuf = 0;
	ext->audioFilled[0] = 0;
	ext->audioFilled[1] = 0;

	audioOut->ext = ext;
	ext->parent = audioOut;

	audioOut->thread = FskThreadGetCurrent();
	audioOut->format = kFskAudioFormatPCM16BitLittleEndian;

	audioOut->sampleRate = 44100;
	audioOut->numChannels = 2;
	ext->sampleSize = audioOut->numChannels * 2;

    if (sBufferedSamplesTarget > 0 && sBufferedSamplesTarget < 20) {
		audioOut->bufferedSamplesTarget = sBufferedSamplesTarget * audioOut->sampleRate * ext->sampleSize;
	}
	else
		audioOut->bufferedSamplesTarget = audioOut->sampleRate * ext->sampleSize;   // 1 second default

	SLboolean required[MAX_NUMBER_INTERFACES];
	SLInterfaceID iidArray[MAX_NUMBER_INTERFACES];

    pcm.formatType = SL_DATAFORMAT_PCM;
    pcm.numChannels = audioOut->numChannels;
    pcm.samplesPerSec = audioOut->sampleRate * 1000;
    pcm.bitsPerSample = SL_PCMSAMPLEFORMAT_FIXED_16;
    pcm.containerSize = 16;
    pcm.channelMask = audioOut->numChannels == 1 ? SL_SPEAKER_FRONT_CENTER :
        (SL_SPEAKER_FRONT_LEFT | SL_SPEAKER_FRONT_RIGHT);
    pcm.endianness = SL_BYTEORDER_LITTLEENDIAN;

	for (i=0; i<MAX_NUMBER_INTERFACES; i++) {
		required[i] = SL_BOOLEAN_FALSE;
		iidArray[i] = SL_IID_NULL;
	}

	res = (*engineObject)->GetInterface(engineObject, SL_IID_ENGINE, (void*)&ext->EngineItf);
	CheckErr("GetInterface", res);

	res = (*ext->EngineItf)->CreateOutputMix(ext->EngineItf, &ext->outputMixObject, 0, NULL, NULL);
	CheckErr("CreateOutputMix", res);

	res = (*ext->outputMixObject)->Realize(ext->outputMixObject, SL_BOOLEAN_FALSE);
	CheckErr("Realize OutputMix", res);

	loc_outmix.locatorType = SL_DATALOCATOR_OUTPUTMIX;
	loc_outmix.outputMix = ext->outputMixObject;
	audioSnk.pLocator = &loc_outmix;
	audioSnk.pFormat = NULL;

	iidArray[0] = SL_IID_BUFFERQUEUE;
	required[0] = SL_BOOLEAN_TRUE;

	res = (*ext->EngineItf)->CreateAudioPlayer(ext->EngineItf, &ext->player, &audioSrc, &audioSnk, 1, iidArray, required);
	CheckErr("CreateAudioPlayer", res);

	res = (*ext->player)->Realize(ext->player, SL_BOOLEAN_FALSE);
	CheckErr(" player->Realize", res);

	res = (*ext->player)->GetInterface(ext->player, SL_IID_PLAY, (void*)&ext->playItf);
	CheckErr(" ext->player->GetInterface Play", res);

	res = (*ext->player)->GetInterface(ext->player, SL_IID_BUFFERQUEUE, (void*)&ext->bufferQueueItf);
	CheckErr(" player->GetInterface BufferQueue", res);

	res = (*ext->bufferQueueItf)->RegisterCallback(ext->bufferQueueItf, BufferQueueCallback, ext);
	CheckErr(" bufferQueueItf->RegisterCallback  BufferQueue", res);

//	res = (*ext->volumeItf)->SetVolumeLevel(ext->volumeItf, -300);
//	CheckErr("  volumeItf->SetVolumeLevel", res);


//	if (gAudio)
//		FskAudioNativePrintfDebug("- about to trash existing gAudio %x", gAudio);


	FskListMutexNew(&audioOut->blocks, "audio blocks");
	FskMutexNew(&ext->getSamplePositionMutex, "audio getSamplePosition");

	FskListMutexAppend(audioOuts, audioOut);

bail:
	if (err) {
		androidAudioOutDispose(audioOut);
		audioOut = NULL;
	}
	*audioOutOut = audioOut;
	return err;
}