Преглед изворни кода

adding tuh_cdc_mount_cb/tuh_cdc_umount_cb

start adding cdc_app.c to example
hathach пре 3 година
родитељ
комит
4f03695084

+ 2 - 1
examples/host/cdc_msc_hid/CMakeLists.txt

@@ -14,8 +14,9 @@ add_executable(${PROJECT})
 
 # Example source
 target_sources(${PROJECT} PUBLIC
-        ${CMAKE_CURRENT_SOURCE_DIR}/src/hid_app.c
+        ${CMAKE_CURRENT_SOURCE_DIR}/src/cdc_app.c
         ${CMAKE_CURRENT_SOURCE_DIR}/src/main.c
+        ${CMAKE_CURRENT_SOURCE_DIR}/src/hid_app.c
         ${CMAKE_CURRENT_SOURCE_DIR}/src/msc_app.c
         )
 

+ 2 - 1
examples/host/cdc_msc_hid/Makefile

@@ -7,7 +7,8 @@ INC += \
 
 # Example source
 EXAMPLE_SOURCE = \
-	src/hid_app.c \
+  src/cdc_app.c \
+  src/hid_app.c \
   src/main.c \
   src/msc_app.c \
 

+ 51 - 0
examples/host/cdc_msc_hid/src/cdc_app.c

@@ -0,0 +1,51 @@
+/*
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2022, Ha Thach (tinyusb.org)
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ * This file is part of the TinyUSB stack.
+ */
+
+#include "tusb.h"
+
+//--------------------------------------------------------------------+
+// MACRO TYPEDEF CONSTANT ENUM DECLARATION
+//--------------------------------------------------------------------+
+
+
+//------------- IMPLEMENTATION -------------//
+
+void cdc_app_task(void)
+{
+
+}
+
+void tuh_cdc_mount_cb(uint8_t dev_addr)
+{
+  (void) dev_addr;
+  printf("A CDC device is mounted\r\n");
+}
+
+void tuh_cdc_umount_cb(uint8_t dev_addr)
+{
+  (void) dev_addr;
+  printf("A CDC device is unmounted\r\n");
+}

+ 3 - 8
examples/host/cdc_msc_hid/src/main.c

@@ -35,7 +35,7 @@
 //--------------------------------------------------------------------+
 void led_blinking_task(void);
 
-extern void cdc_task(void);
+extern void cdc_app_task(void);
 extern void hid_app_task(void);
 
 /*------------- MAIN -------------*/
@@ -52,9 +52,9 @@ int main(void)
   {
     // tinyusb host task
     tuh_task();
-    led_blinking_task();
 
-    cdc_task();
+    led_blinking_task();
+    cdc_app_task();
     hid_app_task();
   }
 
@@ -79,11 +79,6 @@ void tuh_cdc_xfer_isr(uint8_t dev_addr, xfer_result_t event, cdc_pipeid_t pipe_i
   tuh_cdc_receive(dev_addr, serial_in_buffer, sizeof(serial_in_buffer), true); // waiting for next data
 }
 
-void cdc_task(void)
-{
-
-}
-
 //--------------------------------------------------------------------+
 // TinyUSB Callbacks
 //--------------------------------------------------------------------+

+ 12 - 0
src/class/cdc/cdc_host.c

@@ -239,6 +239,8 @@ bool cdch_open(uint8_t rhport, uint8_t dev_addr, tusb_desc_interface_t const *it
 bool cdch_set_config(uint8_t dev_addr, uint8_t itf_num)
 {
   (void) dev_addr; (void) itf_num;
+
+  if (tuh_cdc_mount_cb) tuh_cdc_mount_cb(dev_addr);
   return true;
 }
 
@@ -254,6 +256,16 @@ void cdch_close(uint8_t dev_addr)
   TU_VERIFY(dev_addr <= CFG_TUH_DEVICE_MAX, );
 
   cdch_data_t * p_cdc = get_itf(dev_addr);
+
+  // Invoke application callback
+  if (tuh_cdc_umount_cb)
+  {
+    if (p_cdc->ep_out || p_cdc->ep_in || p_cdc->ep_notif)
+    {
+      tuh_cdc_umount_cb(dev_addr);
+    }
+  }
+
   tu_memclr(p_cdc, sizeof(cdch_data_t));
 }
 

+ 11 - 6
src/class/cdc/cdc_host.h

@@ -34,13 +34,18 @@
 #endif
 
 //--------------------------------------------------------------------+
-// CDC APPLICATION PUBLIC API
+// Application API
 //--------------------------------------------------------------------+
-/** \ingroup ClassDriver_CDC Communication Device Class (CDC)
- * \addtogroup CDC_Serial Serial
- * @{
- * \defgroup   CDC_Serial_Host Host
- * @{ */
+
+
+//------------- Application Callback -------------//
+
+// Invoked when a device with CDC interface is mounted
+TU_ATTR_WEAK void tuh_cdc_mount_cb(uint8_t dev_addr);
+
+// Invoked when a device with CDC interface is unmounted
+TU_ATTR_WEAK void tuh_cdc_umount_cb(uint8_t dev_addr);
+
 
 bool tuh_cdc_set_control_line_state(uint8_t dev_addr, bool dtr, bool rts, tuh_xfer_cb_t complete_cb);