+/**
+ * @typedef am7xxx_context
+ *
+ * An opaque data type representing a context.
+ */
+struct _am7xxx_context;
+typedef struct _am7xxx_context am7xxx_context;
+
+/**
+ * @typedef am7xxx_device
+ *
+ * An opaque data type representing an am7xxx device.
+ */
+struct _am7xxx_device;
+typedef struct _am7xxx_device am7xxx_device;
+
+/**
+ * A struct describing device specific properties.
+ *
+ * A user program may want to inspect these before providing data to the
+ * device. For instance, when sending an image the user may want to rescale it
+ * to the device native width and height in order to be sure the image will be
+ * displayed in its entirety.
+ */
+typedef struct {
+ unsigned int native_width; /**< The device native width. */
+ unsigned int native_height; /**< The device native height. */
+} am7xxx_device_info;
+
+/**
+ * The verbosity level of logging messages.
+ *
+ * This can be set with am7xxx_set_log_level() and the level will be used
+ * internally by libam7xxx to adjust the granularity of the information
+ * exposed to the user about the internal library operations.
+ */
+typedef enum {
+ AM7XXX_LOG_FATAL = 0, /**< Fatal messages, the user application should stop if it gets one of this. */
+ AM7XXX_LOG_ERROR = 1, /**< Error messages, typically they describe API functions failures. */
+ AM7XXX_LOG_WARNING = 2, /**< Warnings about conditions worth mentioning to the user. */
+ AM7XXX_LOG_INFO = 3, /**< Informations about the device operations. */
+ AM7XXX_LOG_DEBUG = 4, /**< Informations about the library internals. */
+ AM7XXX_LOG_TRACE = 5, /**< Verbose informations about the communication with the hardware. */
+} am7xxx_log_level;
+
+/**
+ * The image formats accepted by the device.
+ */