#include #include "stm32f4xx.h" #include "main.h" #include "elog.h" #include "bsp_driver_sd.h" #include "fatfs.h" #include "usbd_storage_if.h" static void FILE_MGT_USB_CHECK_TASK(const void *arg) ; extern PCD_HandleTypeDef hpcd_USB_OTG_FS; void OTG_FS_IRQHandler(void) { // log_i(" OTG_FS_IRQHandler ..."); HAL_PCD_IRQHandler(&hpcd_USB_OTG_FS); FILE_MGT_USB_CHECK_TASK(NULL); // 自定义的函数 // #ifdef USE_STM32F4_VCP // HAL_PCD_IRQHandler(&hpcd_USB_OTG_VCP); // #endif /* USE_STM32F4_VCP */ // #ifdef USE_STM32F4_DEVICE_HID // HAL_PCD_IRQHandler(&hpcd_USB_OTG_HID); // #endif // #ifdef USE_STM32F4_HOST_MSC // HAL_HCD_IRQHandler(&hhcd_USB_OTG_FS); // #endif // #ifdef USE_STM32F4_HOST_HID // HAL_HCD_IRQHandler(&hhcd_USB_OTG_FS); // #endif } // // USB连接状态检测 static void FILE_MGT_USB_CHECK_TASK(const void *arg) { uint8_t dev_state = 0; osEvent event; // FatFs_Check(); // 等待信号量 acquire , 判断FATFA是否在使用SD 卡; umount 文件系统 // 执行下面操作完成后释放信号量? // for (;;) { // event = osMessageGet(usbStateQueueHandle, osWaitForever); // if (event.status == osEventMessage) { // osMutexWait(sdFreeMutexHandle, osWaitForever); // printf("hUsbDeviceFS:%d\n", (uint8_t) event.value.v); // if ((uint8_t) event.value.v == USBD_STATE_ADDRESSED) { // dev_state = USBD_STATE_ADDRESSED; // } else if ((dev_state == USBD_STATE_ADDRESSED) // && ((uint8_t) event.value.v == USBD_STATE_CONFIGURED)) { // Set_SD_WriteOrRead(0); // printf("usb connect\n"); // } else { // dev_state = 0; // Set_SD_WriteOrRead(1); // printf("usb disconnect\n"); // } // osMutexRelease(sdFreeMutexHandle); // } // } } // // 文件操作测试 // static void FILE_MGT_SD_TEST_TASK(const void *arg) { // osDelay(500); // for (;;) { // osDelay(500); // osMutexWait(sdFreeMutexHandle, osWaitForever); // if (SDCard_EN) { // FatFs_FileTest(); // } else { // printf("禁止使用SD卡\n"); // } // osMutexRelease(sdFreeMutexHandle); // } // } // // 使能/禁止SD卡读写 1允许 0禁止 // static void Set_SD_WriteOrRead(uint8_t en) { // if (en == 1) { // SD_Create_Queue(); // SDCard_EN = 1; // } else { // SD_Delet_Queue(); // SDCard_EN = 0; // } // } // void SD_Delet_Queue(void) { // osMessageDelete(SDQueueID); // } // void SD_Create_Queue(void) { // osMessageQDef(SD_Queue, QUEUE_SIZE, uint16_t); // SDQueueID = osMessageCreate(osMessageQ(SD_Queue), NULL); // }