X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=backend.c;h=dd38f66e287a4fb5c53332ac84aacb7a0f672922;hb=785b9ff290cbdb86e7d0b0280c33b43faf9c0518;hp=fc914e18cd47710ee193f0d6045b032f9a2e6009;hpb=94799bc4dc6ab1ba64cdb7f0fb350d63d4fcee66;p=libsigrok.git diff --git a/backend.c b/backend.c index fc914e18..dd38f66e 100644 --- a/backend.c +++ b/backend.c @@ -1,7 +1,8 @@ /* * This file is part of the sigrok project. * - * Copyright (C) 2010 Bert Vermeulen + * Copyright (C) 2010-2012 Bert Vermeulen + * Copyright (C) 2012 Peter Stuge * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -18,17 +19,40 @@ */ #include -#include -#include +#include "libsigrok.h" +#include "libsigrok-internal.h" /** * Initialize libsigrok. * * @return SR_OK upon success, a (negative) error code otherwise. */ -int sr_init(void) +SR_API int sr_init(struct sr_context **ctx) { - return load_hwplugins(); + int ret = SR_ERR; + struct sr_context *context; + + /* + 1 to handle when struct sr_context has no members. */ + context = g_try_malloc0(sizeof(struct sr_context) + 1); + + if (!context) { + ret = SR_ERR_MALLOC; + goto done; + } + +#ifdef HAVE_LIBUSB_1_0 + ret = libusb_init(&context->libusb_ctx); + if (LIBUSB_SUCCESS != ret) { + sr_err("libusb_init() returned %s\n", libusb_error_name(ret)); + goto done; + } +#endif + + *ctx = context; + ret = SR_OK; + +done: + return ret; } /** @@ -36,9 +60,15 @@ int sr_init(void) * * @return SR_OK upon success, a (negative) error code otherwise. */ -int sr_exit(void) +SR_API int sr_exit(struct sr_context *ctx) { - sr_cleanup_hwplugins(); + sr_hw_cleanup_all(); + +#ifdef HAVE_LIBUSB_1_0 + libusb_exit(ctx->libusb_ctx); +#endif + + g_free(ctx); return SR_OK; }