2024年寒假练 - 用psoc62带wifi模块 实现USB HID音量控制设备
该项目使用了带wifi模块的psoc62,实现了USB HID音量控制设备的设计,它的主要功能为:通过USB与capsense控制电脑音量。
标签
2024寒假在家一起练
Posc62
USB HID音量控制
henry
更新2024-03-29
191

英飞凌PSoC62 MCU

任务要求:

诸如台式机与笔记本电脑,键盘上会集成音量或者屏幕亮度的控制快捷键,使用本板卡实现一个滑动控制器,用手指左右滑动时,电脑的音量、亮度或视频进度条等可以变化。


环境

ModusToolbox tools package

VSCode与插件ModusToolbox Assistant


HelloWorld

跑一跑demo。



一、选择的bsp是:CY8CPROTO-062S2-43012

本次的题目是蓝牙设备模拟鼠标滚轮,所以对以下几个例程感兴趣:

CAPSENSE_Buttons_and_Slider

只是用了例程,需要更改bsp,使用bsp assistant

更改bsp

关掉更改local content使用proxy配置代理连github,选择device更改如下mcu:

三、更改引脚以及晶振等板级配置

使用Device Configurator更改Pin引脚功能以及晶振

①disable ioss[0]这些没有的管脚(封装有变)

②关WCO时钟,配置使用这个时钟的为ILO

③管trace mode - serial关掉

④更改Pin脚,根据原理图选择想用的功能

⑤通过CAPSENSE Configurator配置adc以及关掉按键

⑥修改demo原本代码保证程序正常

四、编译运行

在修改去掉led与button等板卡没有的配置后,编译运行即可。

滑动板卡的capsense,可以控制灯的亮暗,首次体验capsense效果感觉非常丝滑。(PS:希望论坛能支持gif的贴图呀)


踩坑

一开始将两个c口都连接了电脑,结果显示无法找到下载器,应该只接dap那个口,就可以进行烧录了。

成功通过capsense控制灯的亮暗


项目介绍

目标是将板卡作为usb device 配合capsense实现对电脑音量的调节。

这里就使用另一个demo

emUSB-DEVICE-HID-Mouse,板子上的mcu口就是作为usb-device的usb口。这个demo跑起来的效果是隔一会儿鼠标左右移一下。

其中emUSB这个库是专为嵌入式系统设计的高性能 USB 设备软件。该软件采用 ANSI C 编写,可以在任何平台上运行。已经提供了多种目标驱动程序。通常可以免费添加对新平台的支持。

要完成我们的目标首先需要理解这个demo是如何向计算机描述自己是什么设备的,并按照规范更改hid的报文,将设备可以使用声音加减的功能。第二个就是将之前试过的capsense功能挪到这个项目中,将滑动与hid上报联系起来。

一、HID设备

USB是一个很大的协议,HID只是其中一个小部分,所以报告首先指定当前设备是什么,其次描述这个报告的格式,输入输出类型,定义个设备节点,最后结束请求。

我们可以参照其他的项目中关于声音加减的usb报文:

来自文章:https://blog.csdn.net/Jun626/article/details/90747410

报文为以及解释:

0x05, 0x0cHID 设备描述符(Descriptor)。它指示了 HID 设备的属性,包括设备的类别、协议等信息。
0x09, 0x01:报告描述符(Report Descriptor)。它定义了 HID 设备的输入或输出报告的格式和内容。
0xa1, 0x01:输入报告的请求,指示主机获取 HID 设备的输入报告。
0xa1, 0x00:输出报告的请求,指示主机向 HID 设备发送输出报告。
0x09, 0xe9, 0x09, 0xea, 0x09, 0xe2, 0x09, 0xcd:这些是报告的字段(Report Fields),定义了 HID 设备输入报告的不同按键或控件。
0x35, 0x00, 0x45, 0x07, 0x15, 0x00, 0x25, 0x01, 0x75, 0x01, 0x95, 0x04, 0x81, 0x02:输入报告的字段值,指示了按键或控件的属性和取值范围。
0x75, 0x01, 0x95, 0x04, 0x81, 0x01:这是另一个输入报告的字段值,指示了另一组按键或控件的属性和取值范围。
0xc0:结束请求,指示主机结束当前的数据传输。

也就是由两个节点,一个用来控制声音加减,另一个控制生意开关。

定义好报文,使用USBD_HID_Write写入数据,即可完成对电脑的控制。


二、结合capsense

知道怎么控制usb设备后,只需要将capsense搬过来用就好了。

因为使用的是usb的例程,所以先使用Library Manager将capsense的库导入工程。


参考capsense_buttons_and_slider

将没有用到的Cy_CapSense_RunTuner这个在电脑上图形化显示capsense的工具去掉。

将重新编写process_touch函数,将hid_write的操作与触摸条的操作关联起来。

if ((0 != slider_touch_status) &&
  (slider_pos != slider_pos_prev))
{
  delta = slider_pos - slider_pos_prev;
  if (delta > 0) {
      while (delta > 0) {
          delta -= 100;
          mouse_data[0] = 0x02;
          /* Write data to host*/
          int ret = USBD_HID_Write(usb_hidContext, &mouse_data[0], 1, 100);
          cyhal_system_delay_ms(10);
          printf("ret = %d\n", ret);
      }
  } else {
      delta = -delta;
      while (delta > 0) {
          delta -= 100;
          mouse_data[0] = 0x01;
          /* Write data to host*/
          int ret = USBD_HID_Write(usb_hidContext, &mouse_data[0], 1, 100);
          cyhal_system_delay_ms(10);
          printf("ret = %d\n", ret);
      }
  }
}

这里就是简单的判断了下当前滑动的方向,如果正向滑动,就按照滑动的大小来上报音量加的事件,如果反向就上报音量减。


未来计划

参加本次eetree寒假在家练收获满满,接触了好多新东西,在本次英飞凌的开发板中,更是尝试了三种ide(modus ide, vscode, rt-thread studio),感受下来vscode与modus ide使用基本一致,但很可惜官方ide好像对这款板子的支持没有很多,包括蓝牙的例程也只有用app做的与capsense互动,没有常规蓝牙设备的例程(也是因为这个下载了rt thread studio尝试了下蓝牙连接)。

本次板卡使用arduino uno接口,还完全没有尝试使用,之后想结合wifi蓝牙模块,加上一个arduino uno的屏幕,完成更更多的开发。

另外本次购买的是包含蓝牙wifi模块的板卡,但插上蓝牙wifi后capsense就被挡住了,体验不太友好(滑动的时候会滑倒指甲盖)所以做的是没有使用蓝牙的任务(同一个平台的任务,应该也符合要求吧)。


附件下载
mtb-example-usb-device-hid-generic.hex
编译后的hex文件
emUSB-Device_HID_Volume.7z
工程所有文件(包括build目录)
团队介绍
个人
评论
0 / 100
查看更多
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号