Skip to content

Commit e18ece2

Browse files
committed
docs: update demo
Signed-off-by: sakumisu <1203593632@qq.com>
1 parent 43f2140 commit e18ece2

5 files changed

Lines changed: 149 additions & 7 deletions

File tree

docs/zh/api/api_host.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,7 @@ usbh_serial_write
214214
usbh_serial_read
215215
""""""""""""""""""""""""""""""""""""
216216

217-
``usbh_serial_read`` 从串口读数据。 **如果没有设置波特率,不允许使用该 API,设置波特率后,内部会开启 rx 接收并将数据写入 ringbuf **。
217+
``usbh_serial_read`` 从串口读数据。 **如果没有设置波特率,不允许使用该 API,设置波特率后,内部会开启 rx 接收并将数据写入 ringbuf**。
218218

219219
.. code-block:: C
220220

docs/zh/demo/usb_otg.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
USB OTG
22
=================
33

4-
如果需要使用 OTG 功能,首先使用的芯片需要支持 ID 检测功能,然后使能 ``CONFIG_USB_OTG_ENABLE`` 宏,将之前的例程中 ``usbh_initialize`` 或者 ``usbh_initialize``
4+
如果需要使用 OTG 功能,首先使用的芯片需要支持 ID 检测功能,然后使能 ``CONFIG_USB_OTG_ENABLE`` 宏,将之前的例程中 ``usbd_initialize`` 或者 ``usbh_initialize``
55
替换成 ``usbotg_initialize`` 即可。
66

77
ID 检测电路根据不同的 USB 接口类型有所不同,常见的有 micro-USB 和 USB-C 两种接口类型。

docs/zh/demo/usbh_audio.rst

Lines changed: 86 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,89 @@
11
Audio Host
22
=================
33

4-
.. note:: Host UAC 为商用收费,请联系官方购买授权。
4+
.. note:: Host UAC 框架和 ISO 驱动为商用收费,请联系官方购买授权。
5+
6+
7+
MIC 使用流程
8+
--------------
9+
10+
- 注册 frame 内存池, AUDIO_MIC_EP_MAX_MPS 可以改成实际能支持的最大 iso ep_in_mps 以减少 RAM 消耗。 **一个 frame 收到的数据大小范围为 0 ~ x * AUDIO_MIC_ISO_PACKETS**。x 为实际 iso ep_in_mps。
11+
12+
.. code-block:: C
13+
14+
#define AUDIP_MIC_POOL_SIZE (10)
15+
static USB_MEM_ALIGNX uint8_t frame_mic_buffer[AUDIO_MIC_EP_MAX_MPS * AUDIO_MIC_ISO_PACKETS * AUDIP_MIC_POOL_SIZE];
16+
static struct usbh_audioframe frame_mic_pool[AUDIP_MIC_POOL_SIZE];
17+
18+
for (uint8_t i = 0; i < AUDIP_MIC_POOL_SIZE; i++) {
19+
frame_mic_pool[i].frame_buf = frame_mic_buffer + i * AUDIO_MIC_EP_MAX_MPS * AUDIO_MIC_ISO_PACKETS;
20+
frame_mic_pool[i].frame_bufsize = AUDIO_MIC_EP_MAX_MPS * AUDIO_MIC_ISO_PACKETS;
21+
}
22+
23+
usbh_audio_mic_stream_create(frame_mic_pool, AUDIP_MIC_POOL_SIZE);
24+
25+
- 开启 MIC 数据接收线程并处理,处理完成后需要将 frame 重新入队。
26+
27+
.. code-block:: C
28+
29+
static void usbh_audio_mic_frame_thread(void *argument)
30+
{
31+
int ret;
32+
struct usbh_audioframe *frame;
33+
34+
while (1) {
35+
ret = usbh_audio_mic_stream_dequeue(&frame, 0xfffffff);
36+
if (ret < 0) {
37+
continue;
38+
}
39+
40+
USB_LOG_RAW("frame buf:%p,frame len:%d\r\n", frame->frame_buf, frame->frame_size);
41+
42+
usbh_audio_mic_stream_enqueue(frame);
43+
}
44+
}
45+
46+
- 调用 `usbh_audio_mic_stream_start` 启动 MIC 流,调用 `usbh_audio_mic_stream_stop` 停止 MIC 流。
47+
48+
SPEAKER 使用流程
49+
------------------
50+
51+
- 注册 frame 内存池, AUDIO_SPEAKER_EP_MAX_MPS 可以改成实际能支持的最大 iso ep_out_mps 以减少 RAM 消耗。一个 frame 必须按照 ep_out_mps * AUDIO_SPEAKER_ISO_PACKETS 的大小来填充数据。
52+
53+
.. code-block:: C
54+
55+
#define AUDIO_SPEAKER_POOL_SIZE (10)
56+
static USB_MEM_ALIGNX uint8_t frame_speaker_buffer[AUDIO_SPEAKER_EP_MAX_MPS * AUDIO_SPEAKER_ISO_PACKETS * AUDIO_SPEAKER_POOL_SIZE];
57+
static struct usbh_audioframe frame_speaker_pool[AUDIO_SPEAKER_POOL_SIZE];
58+
59+
for (uint8_t i = 0; i < AUDIO_SPEAKER_POOL_SIZE; i++) {
60+
frame_speaker_pool[i].frame_buf = frame_speaker_buffer + i * AUDIO_SPEAKER_EP_MAX_MPS * AUDIO_SPEAKER_ISO_PACKETS;
61+
frame_speaker_pool[i].frame_bufsize = AUDIO_SPEAKER_EP_MAX_MPS * AUDIO_SPEAKER_ISO_PACKETS;
62+
}
63+
64+
usbh_audio_speaker_stream_create(frame_speaker_pool, AUDIO_SPEAKER_POOL_SIZE);
65+
66+
- 调用 `usbh_audio_speaker_stream_start` 启动 SPEAKER 流,调用 `usbh_audio_speaker_stream_stop` 停止 SPEAKER 流。
67+
- 调用 `usbh_uac_speaker_frame_alloc` 申请一个 frame,填充数据后调用 `usbh_uac_speaker_frame_send` 将数据入队。
68+
- 当前 speaker frame 的处理是在 `usbh_audio_speaker_stream_start` 启动以后的周期性中断中循环接收和发送,用户也可以改成使用线程来进行接收和发送。
69+
70+
宏的说明
71+
-------------
72+
73+
.. code-block:: C
74+
75+
#define AUDIO_MIC_ISO_PACKETS (1)
76+
#define AUDIO_MIC_EP_MAX_MPS 1024
77+
78+
- AUDIO_MIC_ISO_PACKETS:每次传输的 ISO 个数,单位是 bInterval 计算出来的帧或者微针时间。例如 全速 bInterval 为1或者高速 bInterval 为4时表示 1ms传输一个包。
79+
- AUDIO_MIC_EP_MAX_MPS:音频输入端点最大包大小,单位为字节。
80+
81+
.. code-block:: C
82+
83+
#define AUDIO_SPEAKER_ISO_PACKETS (1)
84+
#define AUDIO_SPEAKER_EP_MAX_MPS 1024
85+
86+
- AUDIO_SPEAKER_ISO_PACKETS:每次传输的 ISO 个数,单位是 bInterval 计算出来的帧或者微针时间。例如 全速 bInterval 为1或者高速 bInterval 为4时表示 1ms传输一个包。
87+
- AUDIO_SPEAKER_EP_MAX_MPS:音频输出端点最大包大小,单位为字节。
88+
89+
.. note:: 增大 AUDIO_MIC_ISO_PACKETS or AUDIO_SPEAKER_ISO_PACKETS 可以降低传输中断频率,但是会增加 RAM 的开销,需要目标 IP 支持 scatter-gather DMA 才有效果,对于 buffer dma 或者 fifo 模式的 IP 不会降低中断频率。

docs/zh/demo/usbh_video.rst

Lines changed: 58 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,61 @@
11
Video Host
22
=================
33

4-
.. note:: Host UVC 为商用收费,请联系官方购买授权。
4+
.. note:: Host UVC 框架和 ISO 驱动为商用收费,请联系官方购买授权。
5+
6+
使用流程
7+
------------
8+
9+
- 注册 frame 内存池,通常设计为双buffer。
10+
11+
.. code-block:: C
12+
13+
static uint8_t frame_buffer1[IMAGE_WIDTH * IMAGE_HEIGHT * 2];
14+
static uint8_t frame_buffer2[IMAGE_WIDTH * IMAGE_HEIGHT * 2];
15+
static struct usbh_videoframe frame_pool[2];
16+
17+
frame_pool[0].frame_buf = frame_buffer1;
18+
frame_pool[0].frame_bufsize = IMAGE_WIDTH * IMAGE_HEIGHT * 2;
19+
frame_pool[1].frame_buf = frame_buffer2;
20+
frame_pool[1].frame_bufsize = IMAGE_WIDTH * IMAGE_HEIGHT * 2;
21+
22+
usbh_video_stream_create(frame_pool, 2);
23+
24+
- 创建 frame 接收线程并处理。frame->frame_format 指示当前帧的格式,frame->frame_buf 指向帧数据,frame->frame_size 指示帧数据大小。处理完成后需要调用 usbh_video_stream_enqueue 将 frame 重新入队。
25+
26+
.. code-block:: C
27+
28+
static void usbh_video_frame_thread(void *argument)
29+
{
30+
int ret;
31+
struct usbh_videoframe *frame;
32+
33+
while (1) {
34+
ret = usbh_video_stream_dequeue(&frame, 0xfffffff);
35+
if (ret < 0) {
36+
continue;
37+
}
38+
39+
USB_LOG_RAW("frame buf:%p,frame len:%d\r\n", frame->frame_buf, frame->frame_size);
40+
41+
usbh_video_stream_enqueue(frame);
42+
}
43+
}
44+
45+
usb_osal_thread_create("uvc_frame", 3072, 5, usbh_video_frame_thread, NULL);
46+
47+
- `usbh_video_fps_init` 函数辅助打印帧率
48+
- 调用 `usbh_video_stream_start` 启动视频流,调用 `usbh_video_stream_stop` 停止视频流。
49+
50+
宏的说明
51+
-------------
52+
53+
.. code-block:: C
54+
55+
#define VIDEO_ISO_PACKETS (8 * 2)
56+
#define VIDEO_EP_MAX_MPS 3072
57+
58+
- VIDEO_ISO_PACKETS:每次传输的 ISO 个数。 **要求是 8 的倍数,对应高速设备(1ms 8个包),全速设备(8ms 8个包)**。 这里我们限定摄像头 bInterval 是 1,并且目前没有不是 1 的摄像头。
59+
- VIDEO_EP_MAX_MPS:视频流端点的最大包大小,单位为字节。 **如果 USB IP 能够支持到 3072字节,则支持市面上所有的摄像头,如果不支持,则只能支持部分摄像头或者需要定制摄像头**。对 BULK 摄像头没有要求。
60+
61+
.. note:: 增大 VIDEO_ISO_PACKETS 可以降低传输中断频率,但是会增加 RAM 的开销,需要目标 IP 支持 scatter-gather DMA 才有效果,对于 buffer dma 或者 fifo 模式的 IP 不会降低中断频率。

docs/zh/quick_start/opensource.rst

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,6 @@
5656
* - phobia
5757
- rombrew
5858
- https://github.com/rombrew/phobia
59-
* - FMT-Firmware
60-
- Firmament-Autopilot
61-
- https://github.com/Firmament-Autopilot/FMT-Firmware
6259
* - sdk-bsp-stm32h7r-realthread-artpi2
6360
- RT-Thread
6461
- https://github.com/RT-Thread-Studio/sdk-bsp-stm32h7r-realthread-artpi2
@@ -71,3 +68,6 @@
7168
* - f1c200s_library
7269
- lhdjply
7370
- https://gitee.com/lhdjply/f1c200s_library
71+
* - MuseCube
72+
- dydcyy-gh
73+
- https://github.com/dydcyy-gh/MuseCube

0 commit comments

Comments
 (0)