diff options
author | Lars Hanisch <dvb@flensrocker.de> | 2011-03-24 23:48:29 +0100 |
---|---|---|
committer | Lars Hanisch <dvb@flensrocker.de> | 2011-03-24 23:48:29 +0100 |
commit | 2ad4f6c98465577159b3fa07df24dac37ee5a0e6 (patch) | |
tree | ce71e562044708ba5e6ab5c5574dc0b6c06f3064 /dynamicdevice.c | |
parent | e03b81ff043b9e1d29da4d48e8971d7fe7e3eccc (diff) | |
download | vdr-plugin-dynamite-2ad4f6c98465577159b3fa07df24dac37ee5a0e6.tar.gz vdr-plugin-dynamite-2ad4f6c98465577159b3fa07df24dac37ee5a0e6.tar.bz2 |
enumerate dvb devices with udev so every adapter is found even if not "in a row"
You can use the udev property "dynamite_ignore" to preserve a device from being attached.
With the udev property "dynamite_instanceid" the devices can be associated with different vdr instances.
Diffstat (limited to 'dynamicdevice.c')
-rw-r--r-- | dynamicdevice.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/dynamicdevice.c b/dynamicdevice.c index 6ec9e2a..5ed2276 100644 --- a/dynamicdevice.c +++ b/dynamicdevice.c @@ -133,6 +133,27 @@ eDynamicDeviceReturnCode cDynamicDevice::AttachDevice(const char *DevPath) return ddrcNoFreeDynDev; } + cUdevDevice *dev = cUdev::GetDeviceFromDevName(DevPath); + if (dev != NULL) { + bool ignore = false; + const char *tmp; + if (((tmp = dev->GetPropertyValue("dynamite_ignore")) != NULL) + && ((strcasecmp(tmp, "yes") == 0) || (strcasecmp(tmp, "y") == 0) || (strcmp(tmp, "1") == 0))) { + isyslog("dynamite: udev says ignore %s", DevPath); + ignore = true; + } + else if (((tmp = dev->GetPropertyValue("dynamite_instanceid")) != NULL) && isnumber(tmp)) { + int devInstanceId = strtol(tmp, NULL, 10); + if (devInstanceId != InstanceId) { + isyslog("dynamite: device %s is for vdr instance %d, we are %d", DevPath, devInstanceId, InstanceId); + ignore = true; + } + } + delete dev; + if (ignore) + return ddrcNotSupported; + } + cDevice::nextParentDevice = dynamicdevice[freeIndex]; for (cDynamicDeviceProbe *ddp = DynamicDeviceProbes.First(); ddp; ddp = DynamicDeviceProbes.Next(ddp)) { |