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