@@ -46,35 +46,58 @@ extern "C" {
4646/* USB Device Core HID composite handle declaration */
4747USBD_HandleTypeDef hUSBD_Device_HID ;
4848
49+ static bool HID_keyboard_initialized = false;
50+ static bool HID_mouse_initialized = false;
51+
4952/**
5053 * @brief Initialize USB devices
51- * @param none
54+ * @param HID_Interface device type: HID_KEYBOARD or HID_MOUSE
5255 * @retval none
5356 */
54- void HID_Composite_Init (void )
57+ void HID_Composite_Init (HID_Interface device )
5558{
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+ }
6478}
6579
6680/**
6781 * @brief DeInitialize USB devices
68- * @param none
82+ * @param HID_Interface device type: HID_KEYBOARD or HID_MOUSE
6983 * @retval none
7084 */
71- void HID_Composite_DeInit (void )
85+ void HID_Composite_DeInit (HID_Interface device )
7286{
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+ }
78101}
79102
80103/**
0 commit comments