📄 mediaplaylistoperatenew.c
字号:
}
RKmemset(PlayListInfo[PlayListNo].pPlaylistMem, 0, PLAYLIST_SIZE_PER_FILE);
PlayListInfo[PlayListNo].FileNum = 0;
#endif
//PlayListInfo[PlayListNo].BusyFlag = 0;
RkSemRelease(&PlayListUseSem);
return TRUE;
//return (UINT32)FS_fdelete(pPath);
}
/*----------------------------------------------------------------------
Name : EnterPlaylistEdit
Desc : 进入播放列表编辑
Params: PlayListNo:播放列表号
Return:
Author: phc
Date : 07-12-22
----------------------------------------------------------------------*/
UINT32 EnterPlaylistEdit(UINT16 PlayListNo)
{
FS_FILE* fFile = NULL;
RKSemObtain(&PlayListUseSem);
/* 申请备份内存 */
if (PlayListInfo[PlayListNo].pBakMem == NULL)
{
PlayListInfo[PlayListNo].pBakMem = (char*)malloc(PLAYLIST_SIZE_PER_FILE); // 播放列表信息备份
}
if (PlayListInfo[PlayListNo].pBakMem == NULL)
{
return FALSE;
}
RKmemset(PlayListInfo[PlayListNo].pBakMem, 0, PLAYLIST_SIZE_PER_FILE);
/* 备份播放列表信息 */
PlayListInfo[PlayListNo].BakFileNum = PlayListInfo[PlayListNo].FileNum; // 备份播放列表个数信息
if (PlayListInfo[PlayListNo].pPlaylistMem == NULL) // 播放列表信息尚未调入内存,则直接从文件中拷贝数据备份
{
if (PlayListInfo[PlayListNo].FileNum) // 当收藏夹文件有内容时,先读出原有收藏夹信息
{
fFile = FS_fopen(PlayListInfo[PlayListNo].pPath, "r");
if (fFile == NULL)
{
free(PlayListInfo[PlayListNo].pBakMem);
PlayListInfo[PlayListNo].pBakMem = NULL;
//PlayListInfo[PlayListNo].BusyFlag = 0;
return FALSE; // 内存申请失败
}
FS_fread(PlayListInfo[PlayListNo].pBakMem, sizeof(PLAYLIST_INFO_STRUCT), PlayListInfo[PlayListNo].FileNum + 1, fFile);
FS_fclose(fFile);
fFile = NULL;
}
}
else // 播放列表信息已经处于内存中则字节拷贝内存
{
RKmemcpy(PlayListInfo[PlayListNo].pBakMem, PlayListInfo[PlayListNo].pPlaylistMem, PLAYLIST_SIZE_PER_FILE);
}
RkSemRelease(&PlayListUseSem);
}
/*----------------------------------------------------------------------
Name : ExitPlaylistEdit
Desc : 退出播放列表编辑
Params: PlayListNo:播放列表号 OperateType:退出类型,0表示确定,1表示取消
Return:
Author: phc
Date : 07-12-23
----------------------------------------------------------------------*/
void ExitPlaylistEdit(UINT16 PlayListNo, UINT16 OperateType)
{
if (OperateType == 0)
{
PlaylistEditConfirm(PlayListNo);
}
else
{
PlaylistEditCancle(PlayListNo);
}
}
/*----------------------------------------------------------------------
Name : PlaylistEditConfirm
Desc : 播放列表编辑确定
Params: PlayListNo:播放列表号
Return:
Author: phc
Date : 07-12-23
----------------------------------------------------------------------*/
void PlaylistEditConfirm(UINT16 PlayListNo)
{
free(PlayListInfo[PlayListNo].pBakMem);
PlayListInfo[PlayListNo].pBakMem = NULL;
//TrySavePlaylitInfo(); // 如果没有正在播放的音乐时,则直接将播放列表信息写入文件中
}
/*----------------------------------------------------------------------
Name : PlaylistEditCancle
Desc : 播放列表编辑取消
Params: PlayListNo:播放列表号
Return:
Author: phc
Date : 07-12-23
----------------------------------------------------------------------*/
void PlaylistEditCancle(UINT16 PlayListNo)
{
if (NULL != PlayListInfo[PlayListNo].pPlaylistMem)
{
PlayListInfo[PlayListNo].FileNum = PlayListInfo[PlayListNo].BakFileNum;
RKmemcpy(PlayListInfo[PlayListNo].pPlaylistMem, PlayListInfo[PlayListNo].pBakMem, PLAYLIST_SIZE_PER_FILE);
}
free(PlayListInfo[PlayListNo].pBakMem);
PlayListInfo[PlayListNo].pBakMem = NULL;
//TrySavePlaylitInfo(); // 如果没有正在播放的音乐时,则直接将播放列表信息写入文件中
}
/*----------------------------------------------------------------------
Name : InitPlaylitInfo
Desc : 初始化播放列表信息
Params:
Return:
Author: phc
Date : 07-12-03
----------------------------------------------------------------------*/
void InitPlaylitInfo(void)
{
FS_FILE* fFile = NULL;
UINT16 i;
#if 0
fFile = FS_fopen(PlaylistStatPath, "r");
if (fFile == NULL)
{
//RKmemset(&PlaylistStaInfo, 0, sizeof(PLAYLIST_STAT_STRUCT));
RKmemset(&PlayListInfo[0], 0, PLAYLIST_NUM*sizeof(PLAYLIST_STRUCT));
for (i = 0;i < PLAYLIST_NUM;i++)
{
PlayListInfo[i].BusyFlag = 0;
PlayListInfo[i].FileNum = 0;
PlayListInfo[i].NO = i;
PlayListInfo[i].pPath = PlaylistPath[i];
PlayListInfo[i].pPlaylistMem = NULL;
}
}
else
{
FSFileRead(&PlaylistStaInfo, sizeof(PLAYLIST_STAT_STRUCT), fFile);
FSFileClose(fFile);
for (i = 0;i < PLAYLIST_NUM;i++)
{
PlayListInfo[i].BusyFlag = 0;
PlayListInfo[i].FileNum = PlaylistStaInfo.PlayListNum[i];
PlayListInfo[i].NO = i;
PlayListInfo[i].pPath = PlaylistPath[i];
PlayListInfo[i].pPlaylistMem = NULL;
}
}
#else
for (i = 0;i < PLAYLIST_NUM;i++)
{
PlayListInfo[i].pPath = PlaylistPath[i];
PlayListInfo[i].BusyFlag = 0;
PlayListInfo[i].NO = i;
PlayListInfo[i].pPlaylistMem = NULL;
fFile = FS_fopen(PlayListInfo[i].pPath, "r");
if (fFile == NULL)
{
PlayListInfo[i].FileNum = 0;
}
else
{
FS_fread(&PlayListInfo[i].FileNum, sizeof(UINT16), 1, fFile);
FS_fclose(fFile);
fFile = NULL; // very important
}
}
#endif
}
/*----------------------------------------------------------------------
Name : SavePlaylitInfo
Desc : 保存播放列表信息
Params:
Return:
Author: phc
Date : 07-12-03
----------------------------------------------------------------------*/
void SavePlaylitInfo(void)
{
// FS_FILE* fStatFile = NULL;
FS_FILE* fPListFile = NULL;
UINT16 i;
// UINT16 Flag = 0;
// RKSemObtain(&PlayListUseSem);
for (i = 0;i < PLAYLIST_NUM;i++)
{
//if((PlayListInfo[i].BusyFlag==0)&&(PlayListInfo[i].pPlaylistMem!=NULL))
if (PlayListInfo[i].pPlaylistMem != NULL)
{
fPListFile = FSFileOpen(PlayListInfo[i].pPath, "rb+");
if (fPListFile == NULL)
{
fPListFile = FSFileOpen(PlayListInfo[i].pPath, "wb");
}
else
{
FSFileSeek(fPListFile, 0, SEEK_SET); // 定位到最前面
}
if (fPListFile != NULL)
{
FSFileWrite(PlayListInfo[i].pPlaylistMem, PLAYLIST_SIZE_PER_FILE, fPListFile); //sizeof(PLAYLIST_INFO_STRUCT)*PlayListInfo[i].FileNum
FSFileClose(fPListFile);
fPListFile = NULL;
//Flag = 1;
free(PlayListInfo[i].pPlaylistMem);
PlayListInfo[i].pPlaylistMem = NULL;
}
}
}
/*
if(Flag == 1)
{
fStatFile = FSFileOpen(PlaylistStatPath, "rb+");
if(fStatFile==NULL)
{
fStatFile = FSFileOpen(PlaylistStatPath, "wb");
}
else
{
FSFileSeek(fStatFile, 0, SEEK_SET); // 定位到最前面
}
if(fStatFile!=NULL)
{
for(i=0;i<PLAYLIST_NUM;i++)
{
PlaylistStaInfo.PlayListNum[i] = PlayListInfo[i].FileNum;
}
FSFileWrite(&PlaylistStaInfo, sizeof(PLAYLIST_STAT_STRUCT), fStatFile);
FSFileClose(fStatFile);
fStatFile = NULL;
}
}
*/
// RkSemRelease(&PlayListUseSem);
}
/*----------------------------------------------------------------------
Name : TrySavePlaylitInfo
Desc : 尝试保存播放列表信息, 有音乐正在播放时不保存
Params:
Return:
Author: phc
Date : 07-12-23
----------------------------------------------------------------------*/
void TrySavePlaylitInfo(void)
{
#ifdef BOARD
if (AudioPlayState == Audio_State_Stop)
{
RKSemObtain(&PlayListUseSem);
SavePlaylitInfo();
RkSemRelease(&PlayListUseSem);
}
#endif
}
#endif
#endif
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -