From 8a3974f823a46006808322d506c2279fd27e66a0 Mon Sep 17 00:00:00 2001 From: Mattias Andrée Date: Thu, 14 Jul 2016 20:50:06 +0200 Subject: m + add prototypes for functions for communicating with the server MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Mattias Andrée --- src/libcoopgamma.c | 4 ++ src/libcoopgamma.h | 128 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 132 insertions(+) (limited to 'src') diff --git a/src/libcoopgamma.c b/src/libcoopgamma.c index 5f71891..b6989f3 100644 --- a/src/libcoopgamma.c +++ b/src/libcoopgamma.c @@ -692,6 +692,7 @@ size_t libcoopgamma_error_marshal(const libcoopgamma_error_t* restrict this, voi marshal_version(LIBCOOPGAMMA_ERROR_VERSION); marshal_prim(this->number, uint64_t); marshal_prim(this->custom, int); + marshal_prim(this->server_side, int); marshal_string(this->description); MARSHAL_EPILOGUE; } @@ -730,6 +731,7 @@ int libcoopgamma_context_initialise(libcoopgamma_context_t* restrict this) { this->fd = -1; libcoopgamma_error_initialise(&(this->error)); + this->message_id = 0; return 0; } @@ -771,6 +773,7 @@ size_t libcoopgamma_context_marshal(const libcoopgamma_context_t* restrict this, marshal_version(LIBCOOPGAMMA_CONTEXT_VERSION); marshal_prim(this->fd, int); off += libcoopgamma_error_marshal(&(this->error), SUBBUF); + marshal_prim(this->message_id, uint32_t); MARSHAL_EPILOGUE; } @@ -797,6 +800,7 @@ int libcoopgamma_context_unmarshal(libcoopgamma_context_t* restrict this, if (r != LIBCOOPGAMMA_SUCCESS) return r; off += n; + unmarshal_prim(this->message_id, uint32_t); UNMARSHAL_EPILOGUE; } diff --git a/src/libcoopgamma.h b/src/libcoopgamma.h index 5a9835a..40930b1 100644 --- a/src/libcoopgamma.h +++ b/src/libcoopgamma.h @@ -579,6 +579,11 @@ typedef struct libcoopgamma_error */ int custom; + /** + * Did the error occur on the server-side? + */ + int server_side; + /** * Error message, can be `NULL` if * `.custom` is false @@ -605,6 +610,11 @@ typedef struct libcoopgamma_context */ libcoopgamma_error_t error; + /** + * Message ID of the next message + */ + uint32_t message_id; + } libcoopgamma_context_t; @@ -1001,6 +1011,124 @@ size_t libcoopgamma_context_marshal(const libcoopgamma_context_t* restrict, void int libcoopgamma_context_unmarshal(libcoopgamma_context_t* restrict, const void* restrict, size_t* restrict); +/** + * List all recognised adjustment method + * + * @return A `NULL`-terminated list of names. You should only free + * the outer pointer, inner pointers are subpointers of the + * outer pointer and cannot be freed. `NULL` on error. + */ +char** libcoopgamma_get_methods(void); + +/** + * Get the adjustment method and site + * + * @param method The adjustment method, `NULL` for automatic + * @param site The site, `NULL` for automatic + * @param methodp Output pointer for the selected adjustment method, + * which cannot be `NULL`. It is safe to call + * this function with this parameter set to `NULL`. + * @param sitep Output pointer for the selected site, which will + * be `NULL` the method only supports one site or if + * `site == NULL` and no site can be selected + * automatically. It is safe to call this function + * with this parameter set to `NULL`. + * @return Zero on success, -1 on error + */ +int libcoopgamma_get_method_and_site(const char* restrict, const char* restrict, + char** restrict, char** restrict); + +/** + * Get the PID file of the coopgamma server + * + * @param method The adjustment method, `NULL` for automatic + * @param site The site, `NULL` for automatic + * @return The pathname of the server's PID file, `NULL` on error + * or if there server does not use PID files. The later + * case is detected by checking that `errno` is set to 0. + */ +char* libcoopgamma_get_pid_file(const char* restrict, const char* restrict); + +/** + * Get the socket file of the coopgamma server + * + * @param method The adjustment method, `NULL` for automatic + * @param site The site, `NULL` for automatic + * @return The pathname of the server's socket, `NULL` on error + * or if there server does have its own socket. The later + * case is detected by checking that `errno` is set to 0, + * and is the case when communicating with a server in a + * multi-server display server like mds. + */ +char* libcoopgamma_get_socket_file(const char* restrict, const char* restrict); + + +/** + * Connect to a coopgamma server, and start it if necessary + * + * Use `libcoopgamma_context_destroy` to disconnect + * + * @param method The adjustment method, `NULL` for automatic + * @param site The site, `NULL` for automatic + * @param ctx The state of the library, must be initialised + * @return Zero on success, -1 on error. On error, `errno` is set + * to 0 if the server could not be initialised. + */ +int libcoopgamma_connect(const char* restrict, const char* restrict, libcoopgamma_context_t* restrict); + +/** + * List all available CRTC:s + * + * Cannot be used before connecting to the server + * + * @param ctx The state of the library, must be connected + * @return A `NULL`-terminated list of names. You should only free + * the outer pointer, inner pointers are subpointers of the + * outer pointer and cannot be freed. `NULL` on error, in + * which case `ctx->error` (rather than `errno`) is read + * for information about the error. + */ +char** libcoopgamma_enumerate_crtcs(libcoopgamma_context_t* restrict); + +/** + * Retrieve information about a CRTC:s gamma ramps + * + * Cannot be used before connecting to the serve + * + * @param crtc The name of the CRTC + * @param info Output parameter for the information, must be initialised + * @param ctx The state of the library, must be connected + * @return Zero on success, -1 on error, in which case `ctx->error` + * (rather than `errno`) is read for information about the error + */ +int libcoopgamma_get_gamma_info(const char*, libcoopgamma_crtc_info_t* restrict, + libcoopgamma_context_t* restrict); + +/** + * Retrieve the current gamma ramp adjustments + * + * Cannot be used before connecting to the serve + * + * @param query The query to send + * @param response Output for the response, must be initialised + * @param ctx The state of the library, must be connected + * @return Zero on success, -1 on error, in which case `ctx->error` + * (rather than `errno`) is read for information about the error + */ +int libcoopgamma_get_gamma(libcoopgamma_filter_query_t* restrict, libcoopgamma_filter_table* restrict, + libcoopgamma_context_t* restrict); + +/** + * Apply, update, or remove a gamma ramp adjustment + * + * @param filter The filter to apply, update, or remove + * @param ctx The state of the library, must be connected + * @return Zero on success, -1 on error, in which case `ctx->error` + * (rather than `errno`) is read for information about the error + */ +int libcoopgamma_set_gamma(libcoopgamma_filter* restrict, libcoopgamma_context_t* restrict); + + #endif -- cgit v1.2.3-70-g09d2