int JackServer::Open(jack_driver_desc_t* driver_desc, JSList* driver_params) { // TODO: move that in reworked JackServerGlobals::Init() if (!JackMessageBuffer::Create()) { jack_error("Cannot create message buffer"); } if ((fAudioDriver = fDriverInfo->Open(driver_desc, fEngine, GetSynchroTable(), driver_params)) == NULL) { jack_error("Cannot initialize driver"); goto fail_close1; } if (fChannel.Open(fEngineControl->fServerName, this) < 0) { jack_error("Server channel open error"); goto fail_close2; } if (fEngine->Open() < 0) { jack_error("Cannot open engine"); goto fail_close3; } if (fFreewheelDriver->Open() < 0) { jack_error("Cannot open freewheel driver"); goto fail_close4; } if (fAudioDriver->Attach() < 0) { jack_error("Cannot attach audio driver"); goto fail_close5; } fFreewheelDriver->SetMaster(false); fAudioDriver->SetMaster(true); fAudioDriver->AddSlave(fFreewheelDriver); InitTime(); SetClockSource(fEngineControl->fClockSource); return 0; fail_close5: fFreewheelDriver->Close(); fail_close4: fEngine->Close(); fail_close3: fChannel.Close(); fail_close2: fAudioDriver->Close(); fail_close1: JackMessageBuffer::Destroy(); return -1; }
int JackLibClient::Open(const char* server_name, const char* name, int uuid, jack_options_t options, jack_status_t* status) { int shared_engine, shared_client, shared_graph, result; bool res; jack_log("JackLibClient::Open name = %s", name); if (strlen(name) >= JACK_CLIENT_NAME_SIZE) { jack_error("\"%s\" is too long to be used as a JACK client name.\n" "Please use %lu characters or less", name, JACK_CLIENT_NAME_SIZE - 1); return -1; } strncpy(fServerName, server_name, sizeof(fServerName)); // Open server/client channel char name_res[JACK_CLIENT_NAME_SIZE+1]; if (fChannel->Open(server_name, name, uuid, name_res, this, options, status) < 0) { jack_error("Cannot connect to the server"); goto error; } // Start receiving notifications if (fChannel->Start() < 0) { jack_error("Cannot start channel"); goto error; } // Require new client fChannel->ClientOpen(name_res, JackTools::GetPID(), uuid, &shared_engine, &shared_client, &shared_graph, &result); if (result < 0) { jack_error("Cannot open %s client", name_res); goto error; } try { // Map shared memory segments JackLibGlobals::fGlobals->fEngineControl.SetShmIndex(shared_engine, fServerName); JackLibGlobals::fGlobals->fGraphManager.SetShmIndex(shared_graph, fServerName); fClientControl.SetShmIndex(shared_client, fServerName); JackGlobals::fVerbose = GetEngineControl()->fVerbose; } catch (...) { jack_error("Map shared memory segments exception"); goto error; } SetupDriverSync(false); // Connect shared synchro : the synchro must be usable in I/O mode when several clients live in the same process assert(JackGlobals::fSynchroMutex); JackGlobals::fSynchroMutex->Lock(); res = fSynchroTable[GetClientControl()->fRefNum].Connect(name_res, fServerName); JackGlobals::fSynchroMutex->Unlock(); if (!res) { jack_error("Cannot ConnectSemaphore %s client", name_res); goto error; } JackGlobals::fClientTable[GetClientControl()->fRefNum] = this; SetClockSource(GetEngineControl()->fClockSource); jack_log("JackLibClient::Open name = %s refnum = %ld", name_res, GetClientControl()->fRefNum); return 0; error: fChannel->Stop(); fChannel->Close(); return -1; }
/** * \brief Configures the MPU6050 sensor. */ void clMPU6050::configMPU(){ SetSleepModeStatus(DISABLE); SetClockSource(MPU6050_CLOCK_PLL_XGYRO); SetFullScaleGyroRange(MPU6050_GYRO_FS_500); SetFullScaleAccelRange(MPU6050_ACCEL_FS_4); }