/*! \brief Main function. Execution starts here. */ int main(void) { #if SAMD21 || SAML21 system_init(); #else sysclk_init(); board_init(); #endif irq_initialize_vectors(); cpu_irq_enable(); // Initialize the sleep manager sleepmgr_init(); ui_init(); // Start USB host stack uhc_start(); // The USB management is entirely managed by interrupts. // As a consequence, the user application does only have : // - to play with the power modes // - to create a file on each new LUN connected while (true) { //sleepmgr_enter_sleep(); if (main_usb_sof_counter > 2000) { main_usb_sof_counter = 0; volatile uint8_t lun; FRESULT res; for (lun = LUN_ID_USB; (lun < LUN_ID_USB + uhi_msc_mem_get_lun()) && (lun < MAX_DRIVE); lun++) { // Check if LUN has been already tested if (TEST_OK == lun_states[lun] || TEST_ERROR == lun_states[lun]) { continue; } // Mount drive memset(&fs, 0, sizeof(FATFS)); res = f_mount(lun, &fs); if (FR_INVALID_DRIVE == res) { // LUN is not present lun_states[lun] = TEST_NO_PRESENT; continue; } // Create a test file on the disk test_file_name[0] = lun + '0'; res = f_open(&file_object, (char const *)test_file_name, FA_CREATE_ALWAYS | FA_WRITE); if (res == FR_NOT_READY) { // LUN not ready lun_states[lun] = TEST_NO_PRESENT; f_close(&file_object); continue; } if (res != FR_OK) { // LUN test error lun_states[lun] = TEST_ERROR; f_close(&file_object); continue; } // Write to test file f_puts(MSG_TEST, &file_object); // LUN test OK lun_states[lun] = TEST_OK; f_close(&file_object); } if (main_count_states(TEST_NO_PRESENT) == MAX_DRIVE) { ui_test_finish(false); // Test fail } else if (MAX_DRIVE != main_count_states(TEST_NULL)) { if (main_count_states(TEST_ERROR)) { ui_test_finish(false); // Test fail } else if (main_count_states(TEST_OK)) { ui_test_flag_reset(); ui_test_finish(true); // Test OK } } else { ui_test_flag_reset(); } } } }
/*! \brief Main function. Execution starts here. */ int main(void) { sysclk_init(); irq_initialize_vectors(); cpu_irq_enable(); // Initialize the sleep manager sleepmgr_init(); board_init(); ui_init(); // Reset File System nav_reset(); // Start USB host stack uhc_start(); // The USB management is entirely managed by interrupts. // As a consequence, the user application does only have : // - to play with the power modes // - to create a file on each new LUN connected while (true) { sleepmgr_enter_sleep(); if (main_usb_sof_counter > 2000) { main_usb_sof_counter = 0; uint8_t lun; for (lun = 0; (lun < uhi_msc_mem_get_lun()) && (lun < 8); lun++) { // Mount drive nav_drive_set(lun); if (!nav_partition_mount()) { if (fs_g_status == FS_ERR_HW_NO_PRESENT) { // The test can not be done, if LUN is not present lun_state &= ~(1 << lun); // LUN test reseted continue; } lun_state |= (1 << lun); // LUN test is done. ui_test_finish(false); // Test fail continue; } // Check if LUN has been already tested if (lun_state & (1 << lun)) { continue; } // Create a test file on the disk if (!nav_file_create((FS_STRING) "uhi_msc_test.txt")) { if (fs_g_status != FS_ERR_FILE_EXIST) { if (fs_g_status == FS_LUN_WP) { // Test can be done only on no write protected device continue; } lun_state |= (1 << lun); // LUN test is done. ui_test_finish(false); // Test fail continue; } } if (!file_open(FOPEN_MODE_APPEND)) { if (fs_g_status == FS_LUN_WP) { // Test can be done only on no write protected device continue; } lun_state |= (1 << lun); // LUN test is done. ui_test_finish(false); // Test fail continue; } if (!file_write_buf((uint8_t*)MSG_TEST, sizeof(MSG_TEST))) { lun_state |= (1 << lun); // LUN test is done. ui_test_finish(false); // Test fail continue; } file_close(); lun_state |= (1 << lun); // LUN test is done. ui_test_finish(true); // Test pass } if ((lun == 0) || (lun_state == 0)) { ui_test_flag_reset(); } } } }