From 2d14233bdb2302bffc1a241681f34933cb99c157 Mon Sep 17 00:00:00 2001 From: Tomi Valkeinen Date: Wed, 25 May 2016 14:34:23 +0300 Subject: Add support for DRM blobs --- libkms++/blob.cpp | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 libkms++/blob.cpp (limited to 'libkms++/blob.cpp') diff --git a/libkms++/blob.cpp b/libkms++/blob.cpp new file mode 100644 index 0000000..10a71c6 --- /dev/null +++ b/libkms++/blob.cpp @@ -0,0 +1,51 @@ +#include +#include + +#include "kms++.h" + +using namespace std; + +namespace kms +{ + +Blob::Blob(Card& card, uint32_t blob_id) + : DrmObject(card, blob_id, DRM_MODE_OBJECT_BLOB), m_created(false) +{ + // XXX should we verify that the blob_id is a blob object? +} + +Blob::Blob(Card& card, void* data, size_t len) + : DrmObject(card, DRM_MODE_OBJECT_BLOB), m_created(true) +{ + uint32_t id; + + int r = drmModeCreatePropertyBlob(card.fd(), data, len, &id); + if (r) + throw invalid_argument("FAILED TO CREATE PROP\n"); + + set_id(id); +} + +Blob::~Blob() +{ + if (m_created) + drmModeDestroyPropertyBlob(card().fd(), id()); +} + +vector Blob::data() +{ + drmModePropertyBlobPtr blob = drmModeGetPropertyBlob(card().fd(), id()); + + if (!blob) + throw invalid_argument("Blob data not available"); + + uint8_t* data = (uint8_t*)blob->data; + + auto v = vector(data, data + blob->length); + + drmModeFreePropertyBlob(blob); + + return v; +} + +} -- cgit v1.2.3