aboutsummaryrefslogtreecommitdiffstats
path: root/libcoopgamma_get_gamma_send.c
diff options
context:
space:
mode:
Diffstat (limited to 'libcoopgamma_get_gamma_send.c')
-rw-r--r--libcoopgamma_get_gamma_send.c57
1 files changed, 57 insertions, 0 deletions
diff --git a/libcoopgamma_get_gamma_send.c b/libcoopgamma_get_gamma_send.c
new file mode 100644
index 0000000..99b6da4
--- /dev/null
+++ b/libcoopgamma_get_gamma_send.c
@@ -0,0 +1,57 @@
+/* See LICENSE file for copyright and license details. */
+#include "common.h"
+
+
+/* Silence falls warning for `memcpy(&msg__[n__], (payload), (payload_size))`
+ * in `SEND_MESSAGE` where `payload` is assumed to be `NULL` despite being
+ * inside `if (payload)` */
+#if defined(__GNUC__)
+# pragma GCC diagnostic ignored "-Wnonnull"
+#endif
+
+
+/**
+ * Retrieve the current gamma ramp adjustments, send request part
+ *
+ * Cannot be used before connecting to the server
+ *
+ * @param query The query to send
+ * @param ctx The state of the library, must be connected
+ * @param async Information about the request, that is needed to
+ * identify and parse the response, is stored here
+ * @return Zero on success, -1 on error
+ */
+int
+libcoopgamma_get_gamma_send(const libcoopgamma_filter_query_t *restrict query, libcoopgamma_context_t *restrict ctx,
+ libcoopgamma_async_context_t *restrict async)
+{
+#if defined(__GNUC__) && !defined(__clang__)
+# pragma GCC diagnostic push
+# pragma GCC diagnostic ignored "-Wnonnull-compare"
+#endif
+ if (!query || !query->crtc || strchr(query->crtc, '\n')) {
+ errno = EINVAL;
+ goto fail;
+ }
+#if defined(__GNUC__) && !defined(__clang__)
+# pragma GCC diagnostic pop
+#endif
+
+ async->message_id = ctx->message_id;
+ async->coalesce = query->coalesce;
+ SEND_MESSAGE(ctx, NULL, (size_t)0,
+ "Command: get-gamma\n"
+ "Message ID: %" PRIu32 "\n"
+ "CRTC: %s\n"
+ "Coalesce: %s\n"
+ "High priority: %" PRIi64 "\n"
+ "Low priority: %" PRIi64 "\n"
+ "\n",
+ ctx->message_id, query->crtc, query->coalesce ? "yes" : "no",
+ query->high_priority, query->low_priority);
+
+ return 0;
+fail:
+ copy_errno(ctx);
+ return -1;
+}