usb_demo.c 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. /*================================================================
  2. Copyright (c) 2020 Quectel Wireless Solution, Co., Ltd. All Rights Reserved.
  3. Quectel Wireless Solution Proprietary and Confidential.
  4. =================================================================*/
  5. #include <stdio.h>
  6. #include <string.h>
  7. #include <stdlib.h>
  8. #include "ql_api_osi.h"
  9. #include "ql_log.h"
  10. #include "usb_demo.h"
  11. #define QL_USB_LOG_LEVEL QL_LOG_LEVEL_INFO
  12. #define QL_USB_LOG(msg, ...) QL_LOG(QL_USB_LOG_LEVEL, "ql_usb", msg, ##__VA_ARGS__)
  13. #define QL_USB_LOG_PUSH(msg, ...) QL_LOG_PUSH("ql_usb", msg, ##__VA_ARGS__)
  14. #define QL_USB_MASS_STORAGE 0 //验证mass storage功能打开此宏
  15. static void ql_usb_demo_thread(void *param)
  16. {
  17. QL_USB_LOG("enter usb demo");
  18. #if QL_USB_MASS_STORAGE
  19. ql_usb_msc_cfg_t msc_cfg = {0};
  20. /*
  21. 配置映射模块的内置flash/sd卡/6线flash等存储器到PC端, 模块作为虚拟U盘
  22. 注意:
  23. 1. 在target.config中,打开CONFIG_QUEC_PROJECT_FEATURE_USB_MASS_STORAGE宏
  24. 2. 映射SD卡需要开机时挂载SD卡,使用demo验证可以打开sd卡的demo(ql_sdmmc_app_init)去挂载
  25. 3. 映射外置6线flash需要开机时挂载6线flash文件系统,使用demo验证可以打开6线flash的demo(ql_spi6_ext_nor_flash_demo_init)去挂载
  26. 4. 烧录代码后第一次开机进app可能会比较慢,如果sd卡/外置flash在app挂载,则烧录后第一次开机可能虚拟不出sd卡/外置flash,后续开机不会无法映射
  27. 5. 如存储器未被正常映射,可在log中搜索 "mtp_scan result", 该log为usb扫描存储设备结束,看下是不是存储设备的挂载
  28. 动作在扫描结束之后; 如果是可以试下将挂载sd卡/6线flash的动作提前
  29. 6. 最多支持同时映射2个存储器
  30. */
  31. msc_cfg.msc_device = QL_USB_MSC_SDCARD; //如需映射2个存储器,可用"|"连接,如同时映射外置6线flash和sd卡: QL_USB_MSC_EFS | QL_USB_MSC_SDCARD
  32. ql_usb_set_enum_mode(QL_USB_ENUM_MASS_STORAGE); //配置USB枚举模式为usb存储设备,同时支持usbat,usbmodem,usb aplog等端口,重启生效
  33. ql_usb_msc_config_set(&msc_cfg); //配置usb mass storage功能,重启生效
  34. #endif
  35. /*
  36. 使用默认的端口组合,配置枚举哪些USB端口,也可以直接在quec_usb_serial_create中配置,该函数开源在app_start.c中
  37. ql_usb_set_enum_mode(QL_USB_ENUM_USBNET_COM);
  38. */
  39. ql_rtos_task_delete(NULL);
  40. }
  41. void ql_usb_app_init(void)
  42. {
  43. QlOSStatus err = QL_OSI_SUCCESS;
  44. ql_task_t ql_usb_task = NULL;
  45. QL_USB_LOG("usb demo enter");
  46. err = ql_rtos_task_create(&ql_usb_task, QL_USB_TASK_STACK, APP_PRIORITY_NORMAL, "ql_usb_demo", ql_usb_demo_thread, NULL, 5);
  47. if(err != QL_OSI_SUCCESS)
  48. {
  49. QL_USB_LOG("usb task create failed");
  50. }
  51. }