1 /*
2 * Copyright (c) 2022-2024, Xiaohua Semiconductor Co., Ltd.
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 *
6 * Change Logs:
7 * Date Author Notes
8 * 2024-12-30 CDT first version
9 */
10
11 #include <rtthread.h>
12 #include <rtdevice.h>
13
14 #if defined(RT_USING_USB_HOST)
15
16 #ifdef RT_USBH_MSTORAGE
17
18 /* menuconfig:
19 1. Hardware Drivers Config ---> On-Chip Peripheral Drivers ---> Enable USB --->
20 Select USB Mode (USB Host Mode)
21 [*] Enable Udisk Drivers -->
22 (/) Udisk mount dir
23 2. RT-Thread Components ---> DFS: device virtual files system --->
24 ......
25 [*] Enable elm0chan fatfs
26 ......
27 3.如果命令执行不成功,需参考对应Board目录下的README.md文件(注意事项中的USB Host部分)
28 */
29
30 /*
31 * 程序清单:这是一个 usb host 读写U盘 使用例程
32 * 例程导出了 usbh_readwrite 命令到控制终端
33 * 命令调用格式:usbh_readwrite
34 * 软件:串口助手
35 * 程序功能:MSH命令发送 usbh_readwrite,运行测试程序。通过文件系统的命令查看写入的文件,并进行读写删除等操作。
36 *
37 */
38 #include <unistd.h>
39 #include <fcntl.h>
40 #define TEST_FN "/test_usbh.c"
41 static char test_data[120], buffer[120];
42
usbh_readwrite(const char * filename)43 void usbh_readwrite(const char *filename)
44 {
45 int fd;
46 int index, length;
47
48 fd = open(TEST_FN, O_WRONLY | O_CREAT | O_TRUNC, 0);
49 if (fd < 0)
50 {
51 rt_kprintf("open file for write failed\n");
52 return;
53 }
54
55 for (index = 0; index < sizeof(test_data); index ++)
56 {
57 test_data[index] = index + 27;
58 }
59
60 length = write(fd, test_data, sizeof(test_data));
61 if (length != sizeof(test_data))
62 {
63 rt_kprintf("write data failed\n");
64 close(fd);
65 return;
66 }
67
68 close(fd);
69
70 fd = open(TEST_FN, O_RDONLY, 0);
71 if (fd < 0)
72 {
73 rt_kprintf("check: open file for read failed\n");
74 return;
75 }
76
77 length = read(fd, buffer, sizeof(buffer));
78 if (length != sizeof(buffer))
79 {
80 rt_kprintf("check: read file failed\n");
81 close(fd);
82 return;
83 }
84
85 for (index = 0; index < sizeof(test_data); index ++)
86 {
87 if (test_data[index] != buffer[index])
88 {
89 rt_kprintf("check: check data failed at %d\n", index);
90 close(fd);
91 return;
92 }
93 }
94
95 rt_kprintf("usb host read/write udisk successful\r\n");
96
97 close(fd);
98 }
99
100 MSH_CMD_EXPORT(usbh_readwrite, usb host read write test);
101
102 #endif /* RT_USBH_MSTORAGE */
103
104 #ifdef RT_USBH_HID
105
106 #endif /* RT_USBH_HID */
107
108 #ifdef RT_USBH_HID_MOUSE
109
110 #endif /* RT_USBH_HID_MOUSE */
111
112 #ifdef RT_USBH_HID_KEYBOARD
113
114 #endif /* RT_USBH_HID_KEYBOARD */
115
116 #endif /* RT_USING_USB_HOST */
117