/*** * !reimp */ QList<int> Backend::objectDescriptionIndexes(ObjectDescriptionType type) const { QList<int> list; if (!isValid()) return list; switch (type) { case Phonon::AudioOutputDeviceType: { QList<AudioDevice> deviceList = deviceManager()->audioOutputDevices(); for (int dev = 0 ; dev < deviceList.size() ; ++dev) list.append(deviceList[dev].id); break; } break; case Phonon::EffectType: { QList<EffectInfo*> effectList = effectManager()->audioEffects(); for (int eff = 0 ; eff < effectList.size() ; ++eff) list.append(eff); break; } break; } return list; }
/*** * !reimp */ QHash<QByteArray, QVariant> Backend::objectDescriptionProperties(ObjectDescriptionType type, int index) const { QHash<QByteArray, QVariant> ret; if (!isValid()) return ret; switch (type) { case Phonon::AudioOutputDeviceType: { QList<AudioDevice> audioDevices = deviceManager()->audioOutputDevices(); if (index >= 0 && index < audioDevices.size()) { ret.insert("name", audioDevices[index].gstId); ret.insert("description", audioDevices[index].description); ret.insert("icon", QLatin1String("audio-card")); } } break; case Phonon::EffectType: { QList<EffectInfo*> effectList = effectManager()->audioEffects(); if (index >= 0 && index <= effectList.size()) { const EffectInfo *effect = effectList[index]; ret.insert("name", effect->name()); ret.insert("description", effect->description()); ret.insert("author", effect->author()); } else Q_ASSERT(1); // Since we use list position as ID, this should not happen } } return ret; }
void testEnableDisableFast() { MpOutputDeviceHandle deviceId; OUTPUT_DRIVER device(OUTPUT_DRIVER_CONSTRUCTOR_PARAMS); CPPUNIT_ASSERT(!device.isEnabled()); for (int i=0; i<ENABLE_DISABLE_TEST_RUNS_NUMBER; i++) { MpOutputDeviceManager deviceManager(TEST_SAMPLES_PER_FRAME_SIZE, TEST_SAMPLES_PER_SECOND, TEST_MIXER_BUFFER_LENGTH); deviceId = deviceManager.addDevice(&device); CPPUNIT_ASSERT(deviceId > 0); deviceManager.enableDevice(deviceId); CPPUNIT_ASSERT(deviceManager.isDeviceEnabled(deviceId)); deviceManager.disableDevice(deviceId); CPPUNIT_ASSERT(!deviceManager.isDeviceEnabled(deviceId)); CPPUNIT_ASSERT(deviceManager.removeDevice(deviceId) == &device); } }
void DevicePluginWifiDetector::processFinished(int exitCode, QProcess::ExitStatus exitStatus) { QProcess *p = static_cast<QProcess*>(sender()); p->deleteLater(); if (exitCode != 0 || exitStatus != QProcess::NormalExit) { qCWarning(dcWifiDetector) << "error performing network scan:" << p->readAllStandardError(); return; } QList<Device*> watchedDevices = deviceManager()->findConfiguredDevices(supportedDevices().first().id()); if (watchedDevices.isEmpty()) { return; } QStringList foundDevices; while(p->canReadLine()) { QString result = QString::fromLatin1(p->readLine()); if (result.startsWith("MAC Address:")) { QStringList lineParts = result.split(' '); if (lineParts.count() > 3) { QString addr = lineParts.at(2); foundDevices << addr.toLower(); } } } foreach (Device *device, watchedDevices) { bool wasInRange = device->stateValue(inRangeStateTypeId).toBool(); bool wasFound = foundDevices.contains(device->paramValue("mac").toString().toLower()); if (wasInRange != wasFound) { device->setStateValue(inRangeStateTypeId, wasFound); } }
void LayerManagerD3D9::Render() { if (mSwapChain->PrepareForRendering() != DeviceOK) { return; } deviceManager()->SetupRenderState(); SetupPipeline(); if (CompositingDisabled()) { static_cast<LayerD3D9*>(mRoot->ImplData())->RenderLayer(); return; } nsIntRect rect; mWidget->GetClientBounds(rect); device()->Clear(0, nullptr, D3DCLEAR_TARGET, 0x00000000, 0, 0); device()->BeginScene(); const nsIntRect *clipRect = mRoot->GetClipRect(); RECT r; if (clipRect) { r.left = (LONG)clipRect->x; r.top = (LONG)clipRect->y; r.right = (LONG)(clipRect->x + clipRect->width); r.bottom = (LONG)(clipRect->y + clipRect->height); } else { r.left = r.top = 0; r.right = rect.width; r.bottom = rect.height; } device()->SetScissorRect(&r); static_cast<LayerD3D9*>(mRoot->ImplData())->RenderLayer(); device()->EndScene(); if (!mTarget) { const nsIntRect *r; for (nsIntRegionRectIterator iter(mClippingRegion); (r = iter.Next()) != nullptr;) { mSwapChain->Present(*r); } RecordFrame(); PostPresent(); } else { PaintToTarget(); } }
void testAddRemoveToManager() { OUTPUT_DRIVER device(OUTPUT_DRIVER_CONSTRUCTOR_PARAMS); MpOutputDeviceHandle deviceId; // Test with mixer mode MpOutputDeviceManager deviceManager(TEST_SAMPLES_PER_FRAME_SIZE, TEST_SAMPLES_PER_SECOND, TEST_MIXER_BUFFER_LENGTH); deviceId = deviceManager.addDevice(&device); CPPUNIT_ASSERT(deviceId > 0); CPPUNIT_ASSERT(deviceManager.removeDevice(deviceId) == &device); }
void testAddRemoveToManager() { MpOutputDeviceHandle deviceId; OUTPUT_DRIVER device(OUTPUT_DRIVER_CONSTRUCTOR_PARAMS); CPPUNIT_ASSERT(!device.isEnabled()); for (int i=0; i<ADD_REMOVE_TEST_RUNS_NUMBER; i++) { MpOutputDeviceManager deviceManager(TEST_SAMPLES_PER_FRAME_SIZE, TEST_SAMPLES_PER_SECOND, TEST_MIXER_BUFFER_LENGTH); deviceId = deviceManager.addDevice(&device); CPPUNIT_ASSERT(deviceId > 0); CPPUNIT_ASSERT(deviceManager.removeDevice(deviceId) == &device); } }
void testMixing() { MpOutputDeviceHandle deviceId; OUTPUT_DRIVER device(OUTPUT_DRIVER_CONSTRUCTOR_PARAMS); CPPUNIT_ASSERT(!device.isEnabled()); for (int i=0; i<TICKER_TEST_WRITE_RUNS_NUMBER; i++) { MpOutputDeviceManager deviceManager(TEST_SAMPLES_PER_FRAME_SIZE, TEST_SAMPLES_PER_SECOND, TEST_MIXER_BUFFER_LENGTH); MpAudioBufPtr pBuffer = mpPool->getBuffer(); deviceId = deviceManager.addDevice(&device); CPPUNIT_ASSERT(deviceId > 0); deviceManager.enableDevice(deviceId); CPPUNIT_ASSERT(deviceManager.isDeviceEnabled(deviceId)); // Get current frame time and step to middle of mixer buffer to be in // time with output audio connection. MpFrameTime frameTime=deviceManager.getCurrentFrameTime(deviceId); frameTime += TEST_MIXER_BUFFER_LENGTH/2; // Write some data to device. for (int frame=0; frame<TEST_SAMPLE_FRAMES/TEST_SAMPLES_PER_FRAME_SIZE; frame++) { calculateSampleData(frameTime, pBuffer); OsTask::delay(TEST_FRAME_LENGTH_MS); CPPUNIT_ASSERT_EQUAL(OS_SUCCESS, deviceManager.pushFrame(deviceId, frameTime, pBuffer)); frameTime += TEST_FRAME_LENGTH_MS; } deviceManager.disableDevice(deviceId); CPPUNIT_ASSERT(!deviceManager.isDeviceEnabled(deviceId)); CPPUNIT_ASSERT(deviceManager.removeDevice(deviceId) == &device); } }
void DevicePluginLircd::buttonPressed(const QString &remoteName, const QString &buttonName, int repeat) { Device *remote = nullptr; QList<Device*> configuredRemotes = deviceManager()->findConfiguredDevices(lircdDeviceClassId); foreach (Device *device, configuredRemotes) { if (device->paramValue("remoteName").toString() == remoteName) { remote = device; break; } } if (!remote) { qCWarning(dcLircd) << "Unhandled remote" << remoteName << buttonName; return; } qCDebug(dcLircd) << "found remote" << remoteName << supportedDevices().first().eventTypes().count(); ParamList params; Param buttonParam("button", buttonName); params.append(buttonParam); Param repeatParam("repeat", repeat); params.append(repeatParam); Event event(LircKeypressEventTypeId, remote->id(), params); emitEvent(event); }
void DevicePluginIntertechno::radioData(const QList<int> &rawData) { // filter right here a wrong signal length if(rawData.length() != 49){ return; } QList<Device*> deviceList = deviceManager()->findConfiguredDevices(intertechnoRemote); if(deviceList.isEmpty()){ return; } int delay = rawData.first()/31; QByteArray binCode; // ======================================= // average 314 if(delay > 300 && delay < 400){ // go trough all 48 timings (without sync signal) for(int i = 1; i <= 48; i+=2 ){ int div; int divNext; // if short if(rawData.at(i) <= 700){ div = 1; }else{ div = 3; } // if long if(rawData.at(i+1) < 700){ divNext = 1; }else{ divNext = 3; } // _ // if we have | |___ = 0 -> in 4 delays => 1000 // _ // if we have ___| | = 1 -> in 4 delays => 0001 if(div == 1 && divNext == 3){ binCode.append('0'); }else if(div == 3 && divNext == 1){ binCode.append('1'); }else{ return; } } }else{ return; } // ======================================= // Check nibble 16-19, must be 0001 if(binCode.mid(16,4) != "0001"){ return; } // ======================================= // Get family code QString familyCode; bool ok; QByteArray familyCodeBin = binCode.left(8); int famiyCodeInt = familyCodeBin.toInt(&ok,2); if(!ok){ return; } switch (famiyCodeInt) { case 0b00000000: familyCode = "A"; break; case 0b01000000: familyCode = "B"; break; case 0b00010000: familyCode = "C"; break; case 0b01010000: familyCode = "D"; break; case 0b00000100: familyCode = "E"; break; case 0b01000100: familyCode = "F"; break; case 0b00010100: familyCode = "G"; break; case 0b01010100: familyCode = "H"; break; case 0b00000001: familyCode = "I"; break; case 0b01000001: familyCode = "J"; break; case 0b00010001: familyCode = "K"; break; case 0b01010001: familyCode = "L"; break; case 0b00000101: familyCode = "M"; break; case 0b01000101: familyCode = "N"; break; case 0b00010101: familyCode = "O"; break; case 0b01010101: familyCode = "P"; break; default: return; } // ======================================= // Get button code QString buttonCode; QByteArray buttonCodeBin = binCode.mid(8,8); int buttonCodeInt = buttonCodeBin.toInt(&ok,2); if(!ok){ return; } switch (buttonCodeInt) { case 0b00000000: buttonCode = "1"; break; case 0b01000000: buttonCode = "2"; break; case 0b00010000: buttonCode = "3"; break; case 0b01010000: buttonCode = "4"; break; case 0b00000100: buttonCode = "5"; break; case 0b01000100: buttonCode = "6"; break; case 0b00010100: buttonCode = "7"; break; case 0b01010100: buttonCode = "8"; break; case 0b00000001: buttonCode = "9"; break; case 0b01000001: buttonCode = "10"; break; case 0b00010001: buttonCode = "11"; break; case 0b01010001: buttonCode = "12"; break; case 0b00000101: buttonCode = "13"; break; case 0b01000101: buttonCode = "14"; break; case 0b00010101: buttonCode = "15"; break; case 0b01010101: buttonCode = "16"; break; default: return; } // ======================================= // get power status -> On = 0100, Off = 0001 bool power; if(binCode.right(4).toInt(0,2) == 5){ power = true; }else if(binCode.right(4).toInt(0,2) == 4){ power = false; }else{ return; } qDebug() << "family code = " << familyCode << "button code =" << buttonCode << power; // =================================================== Device *device = 0; foreach (Device *dev, deviceList) { if (dev->paramValue("familyCode").toString() == familyCode) { // Yippie! We found the device. device = dev; break; } } if (!device) { qWarning() << "couldn't find any configured device for intertech familyCode:" << familyCode; return; } ParamList params; Param powerParam("power", power); params.append(powerParam); // FIXME: find a better way to get to the remote DeviceClass DeviceClass deviceClass = supportedDevices().first(); foreach (const EventType &eventType, deviceClass.eventTypes()) { if (eventType.name() == buttonCode) { qDebug() << "emit event " << pluginName() << familyCode << eventType.name() << power; Event event = Event(eventType.id(), device->id(), params); emit emitEvent(event); return; } } }
void TelldusMain::start(void) { TelldusCore::EventRef clientEvent = d->eventHandler.addEvent(); TelldusCore::EventRef dataEvent = d->eventHandler.addEvent(); TelldusCore::EventRef executeActionEvent = d->eventHandler.addEvent(); TelldusCore::EventRef janitor = d->eventHandler.addEvent(); // Used for regular cleanups Timer supervisor(janitor); // Tells the janitor to go back to work supervisor.setInterval(60); // Once every minute supervisor.start(); EventUpdateManager eventUpdateManager; TelldusCore::EventRef deviceUpdateEvent = eventUpdateManager.retrieveUpdateEvent(); eventUpdateManager.start(); ControllerManager controllerManager(dataEvent, deviceUpdateEvent); DeviceManager deviceManager(&controllerManager, deviceUpdateEvent); deviceManager.setExecuteActionEvent(executeActionEvent); ConnectionListener clientListener(L"TelldusClient", clientEvent); std::list<ClientCommunicationHandler *> clientCommunicationHandlerList; TelldusCore::EventRef handlerEvent = d->eventHandler.addEvent(); #ifdef _MACOSX // This is only needed on OS X ControllerListener controllerListener(d->controllerChangeEvent); #endif while(!d->stopEvent->isSignaled()) { if (!d->eventHandler.waitForAny()) { continue; } if (clientEvent->isSignaled()) { // New client connection TelldusCore::EventDataRef eventDataRef = clientEvent->takeSignal(); ConnectionListenerEventData *data = dynamic_cast<ConnectionListenerEventData*>(eventDataRef.get()); if (data) { ClientCommunicationHandler *clientCommunication = new ClientCommunicationHandler(data->socket, handlerEvent, &deviceManager, deviceUpdateEvent, &controllerManager); clientCommunication->start(); clientCommunicationHandlerList.push_back(clientCommunication); } } if (d->controllerChangeEvent->isSignaled()) { TelldusCore::EventDataRef eventDataRef = d->controllerChangeEvent->takeSignal(); ControllerChangeEventData *data = dynamic_cast<ControllerChangeEventData*>(eventDataRef.get()); if (data) { controllerManager.deviceInsertedOrRemoved(data->vid, data->pid, "", data->inserted); } } if (dataEvent->isSignaled()) { TelldusCore::EventDataRef eventData = dataEvent->takeSignal(); ControllerEventData *data = dynamic_cast<ControllerEventData*>(eventData.get()); if (data) { deviceManager.handleControllerMessage(*data); } } if (handlerEvent->isSignaled()) { handlerEvent->popSignal(); for ( std::list<ClientCommunicationHandler *>::iterator it = clientCommunicationHandlerList.begin(); it != clientCommunicationHandlerList.end(); ) { if ((*it)->isDone()) { delete *it; it = clientCommunicationHandlerList.erase(it); } else { ++it; } } } if (executeActionEvent->isSignaled()) { deviceManager.executeActionEvent(); } if (janitor->isSignaled()) { // Clear all of them if there is more than one while(janitor->isSignaled()) { janitor->popSignal(); } #ifndef _MACOSX controllerManager.queryControllerStatus(); #endif } } supervisor.stop(); }