// If serial is 0, any Phantom device will suffice Phantom* Phantom::findPhantom(unsigned int serial) { // TODO Cache the Phantom devices and recreate list upon bus resets (much more efficient, assuming that it does not take too much resources to create the list...) FirewireDevice *dev; DeviceIterator *i = DeviceIterator::createInstance(); for (dev = i->next(); dev; dev = i->next()) { if (dev->isSensableDevice()) { uint32_t device_serial = readDeviceSerial(dev); if (serial != 0 && serial != device_serial) { delete dev; continue; } //We have found a Phantom device delete i; return new Phantom(dev); } delete dev; } delete i; // We failed to find a(n unused) Phantom device... return 0; }
bool ChannelBase::ChangeInternalChannel(const QString &freqid, uint inputid) { #ifdef USING_FIREWIRE FirewireDevice *device = NULL; QString fwnode = CardUtil::GetFirewireChangerNode(inputid); uint64_t guid = string_to_guid(fwnode); QString fwmodel = CardUtil::GetFirewireChangerModel(inputid); LOG(VB_GENERAL, LOG_ERR, LOC + QString("Internal channel change to %1 " "on inputid %2, GUID %3 (%4)").arg(freqid).arg(inputid) .arg(fwnode).arg(fwmodel)); #ifdef USING_LINUX_FIREWIRE device = new LinuxFirewireDevice( guid, 0, 100, 1); #endif // USING_LINUX_FIREWIRE #ifdef USING_OSX_FIREWIRE device = new DarwinFirewireDevice(guid, 0, 100); #endif // USING_OSX_FIREWIRE if (!device) return false; if (!device->OpenPort()) return false; if (!device->SetChannel(fwmodel, 0, freqid.toUInt())) { device->ClosePort(); delete device; device = NULL; return false; } device->ClosePort(); delete device; device = NULL; return true; #else return false; #endif }
void FirewireSignalMonitor::RunTableMonitor(void) { stb_needs_to_wait_for_pat = true; stb_wait_for_pat_timer.start(); dtvMonitorRunning = true; LOG(VB_CHANNEL, LOG_INFO, LOC + "RunTableMonitor(): -- begin"); FirewireChannel *lchan = dynamic_cast<FirewireChannel*>(channel); if (!lchan) { LOG(VB_CHANNEL, LOG_INFO, LOC + "RunTableMonitor(): -- err"); while (dtvMonitorRunning) usleep(10000); LOG(VB_CHANNEL, LOG_INFO, LOC + "RunTableMonitor(): -- err end"); return; } FirewireDevice *dev = lchan->GetFirewireDevice(); dev->OpenPort(); dev->AddListener(this); while (dtvMonitorRunning && GetStreamData()) usleep(10000); LOG(VB_CHANNEL, LOG_INFO, LOC + "RunTableMonitor(): -- shutdown "); dev->RemoveListener(this); dev->ClosePort(); while (dtvMonitorRunning) usleep(10000); LOG(VB_CHANNEL, LOG_INFO, LOC + "RunTableMonitor(): -- end"); }