/** * @brief Sends a command with headers for all the applications in the fs. * @retval TRANSFER_OK if the send succeeds. * -TRANSFER_CMD_FAIL if the send fails. */ TRANSFER_STATUS Cmd_LST_APPS(void) { uint8_t checksum, numFiles, i, j; FS_File *file; /*** Send number of files in FS ***/ numFiles = FS_GetNumFiles(); checksum = 0xFF - numFiles; USB_Send(numFiles); USB_Send(checksum); if (USB_Receive() == TRANSFER_NAK) return TRANSFER_CMD_FAIL; /*** Send files 1 at a time ***/ for (i = 0; i < numFiles; i++) { file = FS_GetFile(i); checksum = 0; USB_Send(file->id); checksum += file->id; for (j = 0; j < FS_FILE_MAX_NAME_LEN; j++) { USB_Send(file->name[j]); checksum += file->name[j]; } checksum += file->numPages; USB_Send(file->numPages); USB_Send(0xFF-checksum); if (USB_Receive() != TRANSFER_ACK) return TRANSFER_CMD_FAIL; } return TRANSFER_OK; }
void debug_filesystem(void) { FS_HANDLE FileHandle=0; UINT32 command; FILE_INFO fileinfo={0}; UINT08 ShortFileName[13]={0}; UINT08 FileBuffer[512]; int FileNo; int iter; do { ShowMenu(); command = ReadKeyInput("Select Command"); switch(command) { case 0x01: { int ret; ret = FS_OpenDriver(); if(ret == 1) dbgprint("Open Driver Success!\n"); else dbgprint("Open Driver Error!\n"); } break; case 0x02: rprint0n("No Use\n"); break; case 0x03: //Mount if(!FS_Mount()) { rprint0n("Mount Fail!\n"); break; } //Open Root Dir fileinfo.Target[0] = '*'; fileinfo.Target[1] = '.'; fileinfo.Target[2] = '*'; if(!FS_OpenRootDir(&fileinfo)) { rprint0n("Open Root Directory Fail!\n"); break; } //Find Start FS_FindStart(&fileinfo); //Show File Name for(iter=0; iter<fileinfo.TotalCount; iter++) { rprint0n("File%02d : ", iter); if(FS_GetFile(iter, &fileinfo)) { if(FS_GetFileName(&fileinfo, ShortFileName) ) { rprint0n("%s : ", ShortFileName); if(FS_IsDirectory(&fileinfo)) { rprint0n("Directory", ShortFileName); } else { rprint0n("File", ShortFileName); } #if 0 { UINT08 index; UINT08 LongFileName[512]={0}; index = FS_GetLongFileName(&fileinfo, LongFileName); ViewLongName(LongFileName, index); } #endif } } rprint0n("\n"); } break; case 0x04: FileNo = (int)ReadDecimalKeyInput("File Number"); if(FileNo >= fileinfo.TotalCount) { rprint0n("Invalid File Number !\n"); break; } //Get File if(FS_GetFile(FileNo, &fileinfo)) { if(FS_IsDirectory(&fileinfo)) { //rprint0n("File Open Fail - Directory\n"); if(FS_OpenDir(&fileinfo)) { FS_FindStart(&fileinfo); //Show File Name for(iter=0; iter<fileinfo.TotalCount; iter++) { rprint0n("File%02d : ", iter); if(FS_GetFile(iter, &fileinfo)) { if(FS_GetFileName(&fileinfo, ShortFileName) ) { rprint0n("%s : ", ShortFileName); if(FS_IsDirectory(&fileinfo)) { rprint0n("Directory", ShortFileName); } else { rprint0n("File", ShortFileName); } } } rprint0n("\n"); } } break; } //Open File FileHandle = FS_OpenFile(&fileinfo); if(FileHandle == 0xFFFFFFFF) { rprint0n("Invalid File Handle!\n"); break; } } rprint0n("File Open - Index %d\n", FileNo); break; case 0x05: if(FileHandle == 0) break; if(FileHandle == 0xFFFFFFFF) break; if(FileHandle == 0xCCCCCCCC) break; //Read File if(FS_ReadFile(FileHandle, FileBuffer, 1)) { dbgprint("^B^============= File Read ===============\n"); hexdump("Read File", FileBuffer, 512); dbgprint("^B^============================================\n"); break; } rprint0n("File Read Fail! or End of File\n"); break; case 0x06: rprint0n("File Close\n"); FS_CloseFile(FileHandle); //Close File break; case 0x07: //UnMount break; case 0xFF: command = INVALID_COMMAND; } }while(command != INVALID_COMMAND); }