Esempio n. 1
0
T_U32 Fwl_GetFileLen(T_hFILE hFile)
{
    if (FS_INVALID_HANDLE == hFile)
    {
        return 0;
    }

    return File_GetLength(hFile, AK_NULL);
}
Esempio n. 2
0
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);
}
Esempio n. 3
0
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))
Esempio n. 4
0
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;
}
Esempio n. 5
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;
}