init.c
Go to the documentation of this file.
00001 /*********************************************************************
00002 * Software License Agreement (BSD License)
00003 *
00004 *  Copyright (C) 2010-2012 Ken Tossell
00005 *  All rights reserved.
00006 *
00007 *  Redistribution and use in source and binary forms, with or without
00008 *  modification, are permitted provided that the following conditions
00009 *  are met:
00010 *
00011 *   * Redistributions of source code must retain the above copyright
00012 *     notice, this list of conditions and the following disclaimer.
00013 *   * Redistributions in binary form must reproduce the above
00014 *     copyright notice, this list of conditions and the following
00015 *     disclaimer in the documentation and/or other materials provided
00016 *     with the distribution.
00017 *   * Neither the name of the author nor other contributors may be
00018 *     used to endorse or promote products derived from this software
00019 *     without specific prior written permission.
00020 *
00021 *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
00022 *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
00023 *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
00024 *  FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
00025 *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
00026 *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
00027 *  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
00028 *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
00029 *  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
00030 *  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
00031 *  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
00032 *  POSSIBILITY OF SUCH DAMAGE.
00033 *********************************************************************/
00078 #include "libuvc.h"
00079 #include "libuvc_internal.h"
00080 
00086 void *_uvc_handle_events(void *arg) {
00087   uvc_context_t *ctx = (uvc_context_t *) arg;
00088 
00089   while (!ctx->kill_handler_thread)
00090   {
00091       if (ctx->usb_ctx) libusb_handle_events(ctx->usb_ctx);
00092       else break;
00093   }
00094 
00095   return NULL;
00096 }
00097 
00108 uvc_error_t uvc_init(uvc_context_t **pctx, struct libusb_context *usb_ctx) {
00109   uvc_error_t ret = UVC_SUCCESS;
00110   uvc_context_t *ctx = calloc(1, sizeof(*ctx));
00111 
00112   if (usb_ctx == NULL) {
00113     ret = libusb_init(&ctx->usb_ctx);
00114     ctx->own_usb_ctx = 1;
00115     if (ret != UVC_SUCCESS) {
00116       free(ctx);
00117       ctx = NULL;
00118     }
00119   } else {
00120     ctx->own_usb_ctx = 0;
00121     ctx->usb_ctx = usb_ctx;
00122   }
00123 
00124   if (ctx != NULL)
00125     *pctx = ctx;
00126 
00127   return ret;
00128 }
00129 
00142 void uvc_exit(uvc_context_t *ctx) {
00143   uvc_device_handle_t *devh;
00144 
00145   DL_FOREACH(ctx->open_devices, devh) {
00146     uvc_close(devh);
00147   }
00148 
00149   if (ctx->own_usb_ctx)
00150     libusb_exit(ctx->usb_ctx);
00151 
00152   free(ctx);
00153 }
00154 
00163 void uvc_start_handler_thread(uvc_context_t *ctx) {
00164   if (ctx->own_usb_ctx)
00165     pthread_create(&ctx->handler_thread, NULL, _uvc_handle_events, (void*) ctx);
00166 }
00167 


librealsense
Author(s): Sergey Dorodnicov , Mark Horn , Reagan Lopez
autogenerated on Tue Jun 25 2019 19:54:39