T_U32 Fwl_GetFileLen(T_hFILE hFile) { if (FS_INVALID_HANDLE == hFile) { return 0; } return File_GetLength(hFile, AK_NULL); }
static void ParseLabelFile(File* Sorc, int SampleRate) { int Size = File_GetLength(Sorc) - 1; String Temp; String_Ctor(& Temp); while(File_GetPosition(Sorc) < Size) { double Pos; File_ReadWord(Sorc, & Temp); Pos = CDoubleStr(& Temp); Array_Push(int, SegList, (int)(Pos * SampleRate)); //Trash File_ReadLine(Sorc, & Temp); } String_Dtor(& Temp); }
int RUCE_RUDB_Load(RUCE_DB_Entry* Dest, String* Path) { File Sorc; File_Ctor(& Sorc); if(! File_Open(& Sorc, Path, READONLY)) return -1; int ReverseEndian = 0; int64_t FLen = File_GetLength(& Sorc); if(FLen < 48) return -1; char CBuffer[8]; uint32_t Header[4]; uint64_t DataSize; File_Read_Buffer(& Sorc, Header, 12); if(Header[0] != RUDB_Header) { Endian_Switch_Array_UInt32(Header, 4); ReverseEndian = 1; } if(Header[0] != RUDB_Header) return -2; if(Header[2] > RUDB_VERSION) return -3; File_Read_Buffer(& Sorc, CBuffer, 4); if(strncmp(CBuffer, "DATA", 4)) return -4; File_Read_Buffer(& Sorc, & DataSize, 8); if(DataSize < 8) return -5; char* Data = malloc(DataSize); File_Read_Buffer(& Sorc, Data, DataSize); if(Header[1] != CRC32Sum(Data, DataSize, 0)) return -6; memcpy(& (Dest -> HopSize), Data, 8); Data += 8; if(ReverseEndian) Endian_Switch_Array_Int32(& (Dest -> HopSize), 2); while(Data != Data + DataSize) { if(! strncmp(Data, "FRME", 4)) { Data += 4; memcpy(Header, Data, 4); Data += 4; if(ReverseEndian) Endian_Switch_UInt32(Header); int OldSize = Dest -> FrameList_Index + 1; Array_Resize(RUCE_DB_Frame, Dest -> FrameList, OldSize + Header[0]); for(int i = 0 + OldSize; i < Header[0] + OldSize; ++i) { RUCE_DB_Frame_Ctor(& (Dest -> FrameList[i])); if(strncmp(Data, "FRMB", 4)) return -255; Data += 4; memcpy(& (Dest -> FrameList[i].Position), Data, 4); Data += 4; int Cnt; memcpy(& Cnt, Data, 4); Data += 4; if(ReverseEndian) { Endian_Switch_Int32(& (Dest -> FrameList[i].Position)); Endian_Switch_Int32(& Cnt); } Array_Resize(float, Dest -> FrameList[i].Freq, Cnt); Array_Resize(float, Dest -> FrameList[i].Ampl, Cnt); Array_Resize(float, Dest -> FrameList[i].Phse, Cnt); Dest -> FrameList[i].Freq_Index = Cnt - 1; Dest -> FrameList[i].Ampl_Index = Cnt - 1; Dest -> FrameList[i].Phse_Index = Cnt - 1; if(Dest -> FrameList[i].Noiz) free(Dest -> FrameList[i].Noiz); Dest -> FrameList[i].Noiz = RAlloc_Float(Dest -> NoizSize); memcpy(Dest -> FrameList[i].Freq, Data, Cnt * 4); Data += Cnt * 4; memcpy(Dest -> FrameList[i].Ampl, Data, Cnt * 4); Data += Cnt * 4; memcpy(Dest -> FrameList[i].Phse, Data, Cnt * 4); Data += Cnt * 4; memcpy(Dest -> FrameList[i].Noiz, Data, Dest -> NoizSize * 4); Data += Dest -> NoizSize * 4; if(ReverseEndian) { Endian_Switch_Array_Float(Dest -> FrameList[i].Freq, Cnt); Endian_Switch_Array_Float(Dest -> FrameList[i].Ampl, Cnt); Endian_Switch_Array_Float(Dest -> FrameList[i].Phse, Cnt); Endian_Switch_Array_Float(Dest -> FrameList[i].Noiz, Dest -> NoizSize); } } } else if(! strncmp(Data, "PULS", 4))
int main2(int numArgs, const char *args[], char *rs) { CFileSeqInStream inStream; CFileOutStream outStream; int res; int encodeMode = 0; Bool modeWasSet = False; const char *inputFile = NULL; const char *outputFile = "file.tmp"; int param; UInt64 fileSize; FileSeqInStream_CreateVTable(&inStream); File_Construct(&inStream.file); FileOutStream_CreateVTable(&outStream); File_Construct(&outStream.file); if (numArgs == 1) { PrintHelp(rs); return 0; } for (param = 1; param < numArgs; param++) { if (strcmp(args[param], "-e") == 0 || strcmp(args[param], "-d") == 0) { encodeMode = (args[param][1] == 'e'); modeWasSet = True; } else if (strcmp(args[param], "--f86") == 0) { mConType = X86Converter; } else if (strcmp(args[param], "-o") == 0 || strcmp(args[param], "--output") == 0) { if (numArgs < (param + 2)) { return PrintUserError(rs); } outputFile = args[++param]; } else if (strcmp(args[param], "--debug") == 0) { if (numArgs < (param + 2)) { return PrintUserError(rs); } // // For now we silently ignore this parameter to achieve command line // parameter compatibility with other build tools. // param++; } else if ( strcmp(args[param], "-h") == 0 || strcmp(args[param], "--help") == 0 ) { PrintHelp(rs); return 0; } else if ( strcmp(args[param], "-v") == 0 || strcmp(args[param], "--verbose") == 0 ) { // // For now we silently ignore this parameter to achieve command line // parameter compatibility with other build tools. // } else if ( strcmp(args[param], "-q") == 0 || strcmp(args[param], "--quiet") == 0 ) { mQuietMode = True; } else if (strcmp(args[param], "--version") == 0) { PrintVersion(rs); return 0; } else if (inputFile == NULL) { inputFile = args[param]; } else { return PrintUserError(rs); } } if ((inputFile == NULL) || !modeWasSet) { return PrintUserError(rs); } { size_t t4 = sizeof(UInt32); size_t t8 = sizeof(UInt64); if (t4 != 4 || t8 != 8) return PrintError(rs, "Incorrect UInt32 or UInt64"); } if (InFile_Open(&inStream.file, inputFile) != 0) return PrintError(rs, "Can not open input file"); if (OutFile_Open(&outStream.file, outputFile) != 0) return PrintError(rs, "Can not open output file"); File_GetLength(&inStream.file, &fileSize); if (encodeMode) { if (!mQuietMode) { printf("Encoding\n"); } res = Encode(&outStream.s, &inStream.s, fileSize); } else { if (!mQuietMode) { printf("Decoding\n"); } res = Decode(&outStream.s, &inStream.s, fileSize); } File_Close(&outStream.file); File_Close(&inStream.file); if (res != SZ_OK) { if (res == SZ_ERROR_MEM) return PrintError(rs, kCantAllocateMessage); else if (res == SZ_ERROR_DATA) return PrintError(rs, kDataErrorMessage); else if (res == SZ_ERROR_WRITE) return PrintError(rs, kCantWriteMessage); else if (res == SZ_ERROR_READ) return PrintError(rs, kCantReadMessage); return PrintErrorNumber(rs, res); } return 0; }
T_BOOL anyka_spi_update_self(T_BOOL DelUpdateFlag) { //T_U32 *pFilePosInfo = AK_NULL; //T_U32 ClusterNum = 0; //T_U32 SecPerClus = 0; T_SPIBURNFUNC spi_BurnFunc; T_U32* pdateGetInfo; T_U32 file = AK_NULL; const T_U16 path[]={'A',':','/','u','p','d','a','t','e','.','U','P','D',0}; T_SFLASH_PARAM *pParam; pParam = (T_SFLASH_PARAM*)(0x00800040); AK_DEBUG_OUTPUT("test_spi_update_self start\n"); file = File_OpenUnicode(AK_NULL, path, FILE_MODE_READ); if (!File_Exist(file)) { /* Whatever mode you open the file, it fails when it doesn't exist. */ AK_DEBUG_OUTPUT("test_spi_update_self: open upd file error\n"); File_Close(file); return AK_FALSE; } else { #ifdef SUPPORT_VOICE_TIP Voice_PlayTip(eBTPLY_SOUND_TYPE_UPDATE, AK_NULL); Voice_WaitTip(); #endif } //gpio_set_pin_dir(GPIO_POWER_CTRL, 1); //gpio_set_pin_level(GPIO_POWER_CTRL, 1); if (AK_NULL == g_pSpiStack) { g_SpiStackPtr = 0; g_pSpiStack = (T_U8 *)Fwl_DMAMalloc(SPI_UPDATE_SELF_BUF_SIZE);//徐申实现 平台的molloc if(g_pSpiStack==AK_NULL) { akerror("test_spi_update_self: malloc fail",SPI_UPDATE_SELF_BUF_SIZE,1); return AK_FALSE; } } filelen = File_GetLength(file, AK_NULL); pdateGetInfo = File_GetfileclusterInfo_ToUpdate(file,&ClusterNum, &SecPerClus); /*因为簇链已经得到,可以删除,文件删除不会干掉真正的内容的*/ #if 1 if(DelUpdateFlag && (!Fwl_FileDeleteHandle(file))) { akerror("test_spi_update_self: File_DeleteFile fail",0,1); Fwl_DMAFree(g_pSpiStack); File_Close(file); return AK_FALSE; } #endif File_Close(file); if (AK_NULL == pdateGetInfo) { //fwl_closefile关闭文件句柄 //File_Close(file); akerror("test_spi_update_self: get pdateGetInfo fail",0,1); Fwl_DMAFree(g_pSpiStack); return AK_FALSE; } pFilePosInfo = pdateGetInfo; spi_BurnFunc.RamAlloc = SPI_RamAlloc; spi_BurnFunc.RamFree = SPI_RamFree; spi_BurnFunc.MemSet = ak_memset; spi_BurnFunc.MemCpy = ak_memcpy; spi_BurnFunc.MemCmp = ak_memcmp; spi_BurnFunc.Printf = AkDebugOutput;//AK_DEBUG_OUTPUT;// spi_BurnFunc.fSeek =upd_fileseek;///Fwl_FileSeek;// spi_BurnFunc.fRead =upd_fileread;///Fwl_FileRead;// { AK_DEBUG_OUTPUT("clock: 0x%x \r\n", pParam->clock); AK_DEBUG_OUTPUT("erase_size: 0x%x \r\n", pParam->erase_size); AK_DEBUG_OUTPUT("flag: 0x%x \r\n", pParam->flag); AK_DEBUG_OUTPUT("id: 0x%04x \r\n", pParam->id); AK_DEBUG_OUTPUT("page_size: 0x%x \r\n", pParam->page_size); AK_DEBUG_OUTPUT("program_size: 0x%x \r\n", pParam->program_size); AK_DEBUG_OUTPUT("protect_mask: 0x%x \r\n", pParam->protect_mask); AK_DEBUG_OUTPUT("total_size: 0x%x \r\n", pParam->total_size); } if (!UnpacketSpiFileInit(&spi_BurnFunc, file, pParam)) { //fwl_closefile关闭文件句柄 akerror("test_spi_update_self: UnpacketSpiFileInit fail",0,1); Fwl_DMAFree(g_pSpiStack); return AK_FALSE; } if (!UnpacketSpiBinFile(file)) { //fwl_closefile关闭文件句柄 // File_Close(file); akerror("UnpacketSpiFileInit: UnpacketSpiBinFile fail",0,1); Fwl_DMAFree(g_pSpiStack); return AK_FALSE; } //后面的是重新读取数据比较是否正确, 需求很大的内存8k,所以不比较 if (!UnpacketSpiBootFile(file, AK_TRUE)) { //fwl_closefile关闭文件句柄 // File_Close(file); akerror("UnpacketSpiFileInit: UnpacketSpiBootFile fail",0,1); Fwl_DMAFree(g_pSpiStack); return AK_FALSE; } //不需要释放了,重新启动会重新初始化内存的 { akerror("UnpacketSpiFileInit: SPI update successed!",0,1); } /*测试中sys_reset回进入massboot,所以目前进入sys_reset();*/ Fwl_SysReboot(); while(1); return AK_TRUE; }