bool cScDevices::Initialize(void) { #if APIVERSNUM >= 10711 return true; #else if(!vdr_nci || !vdr_ud) { PRINTF(L_GEN_ERROR,"Failed to locate VDR symbols. Plugin not operable"); return false; } if(NumDevices()>0) { PRINTF(L_GEN_ERROR,"Number of devices != 0 on init. Put SC plugin first on VDR commandline! Aborting."); return false; } *vdr_nci=0; *vdr_ud=vdr_save_ud; int i, found=0; for(i=0; i<MAXDVBDEVICES; i++) { if(UseDevice(NextCardIndex())) { char name[128]; cScDevices::DvbName(DEV_DVB_FRONTEND,i,0,name,sizeof(name)); if(access(name,F_OK)==0) { PRINTF(L_GEN_DEBUG,"probing %s",name); int f=open(name,O_RDONLY); if(f>=0) { close(f); PRINTF(L_GEN_DEBUG,"capturing device %d",i); devplugins.First()->Probe(i,0,0); found++; } else { if(errno!=ENODEV && errno!=EINVAL) PRINTF(L_GEN_ERROR,"open %s failed: %s",name,strerror(errno)); break; } } else { if(errno!=ENOENT) PRINTF(L_GEN_ERROR,"access %s failed: %s",name,strerror(errno)); break; } } else NextCardIndex(1); } NextCardIndex(MAXDVBDEVICES-i); if(found>0) PRINTF(L_GEN_INFO,"captured %d video device%s",found,found>1 ? "s" : ""); else PRINTF(L_GEN_INFO,"no DVB device captured"); return found>0; #endif }
// _________________________________________________________________________________________ // USBDeviceManager::ServicePublished // void USBDeviceManager::ServicePublished(io_service_t ioDeviceObj) { USBDevice *device = new USBDevice(ioDeviceObj); if (device->Usable()) { // Ask subclass if it's a device we want to work with if (MatchDevice(device)) { // hardcoded to use configuration 0 for now if (device->OpenAndConfigure(0)) { OSStatus err = UseDevice(device); if (err == noErr) return; // ownership of device is passed off // how to report error??? } } } delete device; }
bool cDvbDevice::Initialize(void) { int found = 0; int i; for (i = 0; i < MAXDVBDEVICES; i++) { if (UseDevice(NextCardIndex())) { if (Probe(*cDvbName(DEV_DVB_FRONTEND, i))) { new cDvbDevice(i); found++; } else break; } else NextCardIndex(1); // skips this one } NextCardIndex(MAXDVBDEVICES - i); // skips the rest if (found > 0) isyslog("found %d video device%s", found, found > 1 ? "s" : ""); else isyslog("no DVB device found"); return found > 0; }