diff options
author | Damian Hobson-Garcia <dhobsong@igel.co.jp> | 2020-11-24 17:16:39 +0900 |
---|---|---|
committer | Damian Hobson-Garcia <dhobsong@igel.co.jp> | 2021-02-19 10:48:23 +0000 |
commit | f991de200799118355fd75237a740321bda7aaa7 (patch) | |
tree | 589f536d835d81f1166410e67aedb578d6e70395 /examples/dlm-client-test/dlm-client-test.c | |
parent | 464ec461237b36e03c4cdb175e9d87ab502ee1d5 (diff) |
Add initial version
The initial version implements the basic functionality
of the client/server communication and lease management.
For now, one lease is created per valid connector (dependent
on CRTC availablity).
Bug-AGL: SPEC-3729
Signed-off-by: Damian Hobson-Garcia <dhobsong@igel.co.jp>
Change-Id: I2b37a892742cc22bdc53a5172c8ad3d8a7bb5e66
Diffstat (limited to 'examples/dlm-client-test/dlm-client-test.c')
-rw-r--r-- | examples/dlm-client-test/dlm-client-test.c | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/examples/dlm-client-test/dlm-client-test.c b/examples/dlm-client-test/dlm-client-test.c new file mode 100644 index 0000000..411fce7 --- /dev/null +++ b/examples/dlm-client-test/dlm-client-test.c @@ -0,0 +1,94 @@ +/* Copyright 2020-2021 IGEL Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "dlmclient.h" + +#include <errno.h> +#include <stdint.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include <xf86drmMode.h> + +static void usage(const char *name) +{ + fprintf(stderr, + "%s <lease name>\n" + "\tlease name: Name of lease to check\n", + name); +} + +static void dump_lease_resources(int lease_fd) +{ + drmModeObjectListPtr ol = drmModeGetLease(lease_fd); + if (!ol) { + fprintf( + stderr, + "drmModeGetLease failed. Received fd is not a DRM lease\n"); + return; + } + free(ol); + + drmModeRes *res = drmModeGetResources(lease_fd); + if (!res) { + fprintf(stderr, "drmModeGetResources failed\n"); + return; + } + + for (int i = 0; i < res->count_crtcs; i++) + printf("crtc-id: %u\n", res->crtcs[i]); + + for (int i = 0; i < res->count_connectors; i++) + printf("connector-id: %u\n", res->connectors[i]); + + drmModeFreeResources(res); + + drmModePlaneRes *plane_res = drmModeGetPlaneResources(lease_fd); + if (!plane_res) { + fprintf(stderr, "drmModeGetPlaneResources failed\n"); + return; + } + + for (uint32_t i = 0; i < plane_res->count_planes; i++) + printf("plane-id: %u\n", plane_res->planes[i]); + + drmModeFreePlaneResources(plane_res); +} + +int main(int argc, char **argv) +{ + if (argc < 2) { + usage(argv[0]); + return EXIT_FAILURE; + } + + struct dlm_lease *lease = dlm_get_lease(argv[1]); + if (!lease) { + fprintf(stderr, "dlm_get_lease: %s\n", strerror(errno)); + return EXIT_FAILURE; + } + + int lease_fd = dlm_lease_fd(lease); + if (lease_fd < 0) { + fprintf(stderr, "dlm_lease_fd: %s\n", strerror(errno)); + dlm_release_lease(lease); + return EXIT_FAILURE; + } + + dump_lease_resources(lease_fd); + dlm_release_lease(lease); + return EXIT_SUCCESS; +} |