UVCCamera向USB设备发送命令

简介: UVCCamera向USB设备发送命令

改变亮度


JAVA

UVCCameraHelper.setModelValue()

UVCCameraHandler.setValue()

UVCCamera.setBrightness()

nativeSetBrightness()

nativeSetBrightness

static jint nativeSetBrightness(JNIEnv *env, jobject thiz,
  ID_TYPE id_camera, jint brightness) {
  jint result = JNI_ERR;
  ENTER();
  UVCCamera *camera = reinterpret_cast<UVCCamera *>(id_camera);
  if (LIKELY(camera)) {
  result = camera->setBrightness(brightness);
  }
  RETURN(result, jint);
}

setBrightness

int UVCCamera::setBrightness(int brightness) {
  ENTER();
  int ret = UVC_ERROR_IO;
  if (mPUSupports & PU_BRIGHTNESS) {
  ret = internalSetCtrlValue(mBrightness, brightness, uvc_get_brightness, uvc_set_brightness);
  }
  RETURN(ret, int);
}

uvc_set_brightness

uvc_error_t uvc_set_brightness(uvc_device_handle_t *devh, short brightness) {
  uint8_t data[2];
  uvc_error_t ret;
  SHORT_TO_SW(brightness, data);
  ret = libusb_control_transfer(devh->usb_devh, REQ_TYPE_SET, UVC_SET_CUR,
    UVC_PU_BRIGHTNESS_CONTROL << 8,
    devh->info->ctrl_if.processing_unit_descs->request,
    data, sizeof(data), CTRL_TIMEOUT_MILLIS);
  if (LIKELY(ret == sizeof(data)))
  return UVC_SUCCESS;
  else
  return ret;
}

libusb_control_transfer

int API_EXPORTED libusb_control_transfer(libusb_device_handle *dev_handle,
  uint8_t bmRequestType, uint8_t bRequest, uint16_t wValue, uint16_t wIndex,
  unsigned char *data, uint16_t wLength, unsigned int timeout)
{
  struct libusb_transfer *transfer = libusb_alloc_transfer(0);
  unsigned char *buffer;
  int completed = 0;
  int r;
  if (UNLIKELY(!transfer))
  return LIBUSB_ERROR_NO_MEM;
  buffer = (unsigned char*) malloc(LIBUSB_CONTROL_SETUP_SIZE + wLength);
  if (UNLIKELY(!buffer)) {
  libusb_free_transfer(transfer);
  return LIBUSB_ERROR_NO_MEM;
  }
  libusb_fill_control_setup(buffer, bmRequestType, bRequest, wValue, wIndex, wLength);
  if ((bmRequestType & LIBUSB_ENDPOINT_DIR_MASK) == LIBUSB_ENDPOINT_OUT)
  memcpy(buffer + LIBUSB_CONTROL_SETUP_SIZE, data, wLength);
  libusb_fill_control_transfer(transfer, dev_handle, buffer,
  sync_transfer_cb, &completed, timeout);
  transfer->flags = LIBUSB_TRANSFER_FREE_BUFFER;
  r = libusb_submit_transfer(transfer);
  if (UNLIKELY(r < 0)) {
  libusb_free_transfer(transfer);
  return r;
  }
  sync_transfer_wait_for_completion(transfer);
  if ((bmRequestType & LIBUSB_ENDPOINT_DIR_MASK) == LIBUSB_ENDPOINT_IN)
  memcpy(data, libusb_control_transfer_get_data(transfer),
    transfer->actual_length);
  libusb_free_transfer(transfer);
  return r;
}


libusb_submit_transfer

r = usbi_backend.submit_transfer(itransfer);

op_submit_transfer

LIBUSB_TRANSFER_TYPE_BULK = 2U

submit_bulk_transfer


submit_bulk_transfer

ioctl

目录
相关文章
|
数据采集 SQL 分布式计算
常用的数据集成ETL工具有哪些?
六种常用的数据集成ETL工具
常用的数据集成ETL工具有哪些?
|
存储 缓存 测试技术
阿里云服务器经济型e实例怎么样?性能、价格与适用场景全解析
阿里云服务器经济型e实例2核2G3M带宽40G ESSD Entry云盘价格只要99元1年,而且续费不涨价。经济型e实例是阿里云面向个人开发者、学生以及小微企业推出的一款入门级云服务器。这款实例以其高性价比和灵活的配置,迅速赢得了市场的青睐。那么,阿里云服务器经济型e实例到底怎么样?是否值得购买呢?本文将为您解析经济型e实例的性能、价格与适用场景,以供参考。
|
存储 小程序 Python
农历节日倒计时:基于Python的公历与农历日期转换及节日查询小程序
### 农历节日倒计时:基于Python的公历与农历日期转换及节日查询小程序 该程序通过`lunardate`库实现公历与农历的日期转换,支持闰月和跨年处理,用户输入农历节日名称后,可准确计算距离该节日还有多少天。功能包括农历节日查询、倒计时计算等。欢迎使用! (239字符)
1414 86
|
JSON 分布式计算 搜索推荐
用 Spark 优化亿级用户画像计算:Delta Lake 增量更新策略详解
在亿级用户画像计算中,传统全量更新面临数据量大、更新频繁、延迟敏感等挑战。本文详解如何结合 Spark 与 Delta Lake 实现高效增量更新,通过仅处理变化数据,显著降低资源消耗并提升实时性,助力构建高性能用户画像系统。
675 3
|
JSON Devops 决策智能
muAgent v2.2版本发布,支持ekg-sdk使用
CodeFuse-muAgent 是一款创新的 Agent 框架,将知识图谱(KG)直接升级为 Agent 编排引擎。它基于大语言模型(LLM)和事理图谱(EKG),结合多智能体、工具学习等技术,通过拖拽式画布和轻量级文本编辑,实现复杂 SOP 流程的自动化。支持复杂推理、在线协同、人工交互和即时知识应用。该框架已在蚂蚁集团多个 DevOps 场景中成功落地。
630 1
muAgent v2.2版本发布,支持ekg-sdk使用
|
机器学习/深度学习 人工智能 自然语言处理
VideoGrain:零样本多粒度视频编辑神器,用AI完成换装改场景,精准控制每一帧!
VideoGrain 是悉尼科技大学和浙江大学推出的零样本多粒度视频编辑框架,基于调节时空交叉注意力和自注意力机制,实现类别级、实例级和部件级的精细视频修改,保持时间一致性,显著优于现有方法。
850 0
VideoGrain:零样本多粒度视频编辑神器,用AI完成换装改场景,精准控制每一帧!
|
存储 弹性计算 监控
从外到内:阿里云弹性与资源交付效率的全景透视
本文介绍了弹性服务的概念及其在云计算中的重要性。弹性服务通过动态调整云资源,帮助用户应对流量波动,降低成本并提高自动化水平。文中详细探讨了如何从“使用弹性”迈向“善用弹性”,包括定时任务、报警任务和目标追踪等伸缩模式的应用。同时,文章还介绍了阿里云在ECS弹性能力方面的建设成果,如每分钟交付万台实例的能力,并分享了汇量科技和Auto MQ两个客户案例的成功实践。最后,展望了未来在弹性计算领域的技术创新和发展方向,强调了持续优化和提升弹性能力的重要性。
|
Linux Shell
Linux系统编程:掌握popen函数的使用
记得在使用完 `popen`打开的流后,总是使用 `pclose`来正确关闭它,并回收资源。这种做法符合良好的编程习惯,有助于保持程序的健壮性和稳定性。
680 3
|
存储 编解码 网络协议
FFmpeg学习笔记(三):FFmpeg和FFplay参数介绍
这篇文章是关于FFmpeg和FFplay参数的介绍,包括如何使用这些参数进行视频流的捕获、处理和播放。
650 0
|
安全 Ubuntu Unix
【Linux】基础指令
本文介绍了Linux操作系统的基本概念及特点,强调了其开源性、多用户多任务处理能力、稳定性和安全性。文章重点讲解了多个Linux基础命令,如ls、cd、touch、mkdir、rm、man、cp、mv、cat、less、find、grep、tar等,旨在帮助初学者快速掌握Linux命令行操作,为后续深入学习奠定基础。
574 0

热门文章

最新文章