@@ -46,35 +46,58 @@ extern "C" {
46
46
/* USB Device Core HID composite handle declaration */
47
47
USBD_HandleTypeDef hUSBD_Device_HID ;
48
48
49
+ static bool HID_keyboard_initialized = false;
50
+ static bool HID_mouse_initialized = false;
51
+
49
52
/**
50
53
* @brief Initialize USB devices
51
- * @param none
54
+ * @param HID_Interface device type: HID_KEYBOARD or HID_MOUSE
52
55
* @retval none
53
56
*/
54
- void HID_Composite_Init (void )
57
+ void HID_Composite_Init (HID_Interface device )
55
58
{
56
- /* Init Device Library */
57
- USBD_Init (& hUSBD_Device_HID , & HID_Desc , 0 );
58
-
59
- /* Add Supported Class */
60
- USBD_RegisterClass (& hUSBD_Device_HID , USBD_COMPOSITE_HID_CLASS );
61
-
62
- /* Start Device Process */
63
- USBD_Start (& hUSBD_Device_HID );
59
+ if (IS_HID_INTERFACE (device ) &&
60
+ !HID_keyboard_initialized && !HID_mouse_initialized ) {
61
+ /* Init Device Library */
62
+ if (USBD_Init (& hUSBD_Device_HID , & HID_Desc , 0 ) == USBD_OK ) {
63
+ /* Add Supported Class */
64
+ if (USBD_RegisterClass (& hUSBD_Device_HID , USBD_COMPOSITE_HID_CLASS ) == USBD_OK ) {
65
+ /* Start Device Process */
66
+ USBD_Start (& hUSBD_Device_HID );
67
+ HID_keyboard_initialized = true;
68
+ HID_mouse_initialized = true;
69
+ }
70
+ }
71
+ }
72
+ if (device == HID_KEYBOARD ) {
73
+ HID_keyboard_initialized = HID_mouse_initialized ;
74
+ }
75
+ if (device == HID_MOUSE ) {
76
+ HID_mouse_initialized = HID_keyboard_initialized ;
77
+ }
64
78
}
65
79
66
80
/**
67
81
* @brief DeInitialize USB devices
68
- * @param none
82
+ * @param HID_Interface device type: HID_KEYBOARD or HID_MOUSE
69
83
* @retval none
70
84
*/
71
- void HID_Composite_DeInit (void )
85
+ void HID_Composite_DeInit (HID_Interface device )
72
86
{
73
- /* Stop Device Process */
74
- USBD_Stop (& hUSBD_Device_HID );
75
-
76
- /* DeInit Device Library */
77
- USBD_DeInit (& hUSBD_Device_HID );
87
+ if (IS_HID_INTERFACE (device ) &&
88
+ ((HID_keyboard_initialized && !HID_mouse_initialized ) ||
89
+ (HID_mouse_initialized && !HID_keyboard_initialized ))) {
90
+ /* Stop Device Process */
91
+ USBD_Stop (& hUSBD_Device_HID );
92
+ /* DeInit Device Library */
93
+ USBD_DeInit (& hUSBD_Device_HID );
94
+ }
95
+ if (device == HID_KEYBOARD ) {
96
+ HID_keyboard_initialized = false;
97
+ }
98
+ if (device == HID_MOUSE ) {
99
+ HID_mouse_initialized = false;
100
+ }
78
101
}
79
102
80
103
/**
0 commit comments