diff options
Diffstat (limited to 'libkms++')
-rw-r--r-- | libkms++/property.cpp | 40 | ||||
-rw-r--r-- | libkms++/property.h | 1 |
2 files changed, 41 insertions, 0 deletions
diff --git a/libkms++/property.cpp b/libkms++/property.cpp index e01bf60..3b8a0b8 100644 --- a/libkms++/property.cpp +++ b/libkms++/property.cpp @@ -36,4 +36,44 @@ const string& Property::name() const { return m_name; } + +const std::string Property::to_str(uint64_t val) const +{ + drmModePropertyPtr p = m_priv->drm_prop; + string ret; + + if (p->flags & DRM_MODE_PROP_ENUM) { + for (int i = 0; i < p->count_enums; i++) { + if (p->enums[i].value == val) { + ret += string("\"") + p->enums[i].name + "\""; + break; + } + } + ret += " (enum: " + to_string(val) + ")"; + } else if (p->flags & DRM_MODE_PROP_RANGE) { + ret += to_string(val); + if (p->count_values == 2) + ret += " [" + to_string(p->values[0]) + "-" + + to_string(p->values[1]) + "]"; + else + ret += " <broken range>"; + } else if (p->flags & DRM_MODE_PROP_BLOB) { + ret += "Blob id: " + to_string(val); + + auto blob = drmModeGetPropertyBlob(card().fd(), (uint32_t) val); + if (blob) { + ret += " length: " + to_string(blob->length); + drmModeFreePropertyBlob(blob); + } + } else { + ret += to_string(val); + } + + if (p->flags & DRM_MODE_PROP_PENDING) + ret += " (pendig)"; + if (p->flags & DRM_MODE_PROP_IMMUTABLE) + ret += " (immutable)"; + + return ret; +} } diff --git a/libkms++/property.h b/libkms++/property.h index ffab8d0..4cb2653 100644 --- a/libkms++/property.h +++ b/libkms++/property.h @@ -15,6 +15,7 @@ public: const std::string& name() const; + const std::string to_str(uint64_t val) const; private: Property(Card& card, uint32_t id); ~Property(); |