📄 user.c
字号:
}
user->info.resetFlag = 1;
user->info.length = lng;
user->info.err = 0;
api_putUserToWaitingQueue(user);
result = api_files_seek(&user->files, SEEK_SET, lng);
}
}
return result;
}
/*
Description : 写FIFO文件
Arguments : handle:用户控制块号,open返回时的标号。
buffer:数据区
length:读数据的长度。
Returns : 返回读数据的长度,正数:写入的Bypes数,负数:错误号。
Notes :
*/
int api_WriteFile(int UHandle, char *buffer, int length)
{
user_head_t *user;
int result;
long space;
if(UHandle < 1 && UHandle > MAX_FIFO)
return FIFO_USER_ERR;
user = &userfifo[UHandle -1];
OS_ENTER_CRITICAL();
if((int)buffer < 0x3fff)
{
memcpyDMA(buff, buffer, length-1);
result = api_files_write(&user->files, buff, length);
}else {
result = api_files_write(&user->files, buffer, length);
}
if(result > 0)
{
space = api_fifo_testSpace(&user->files.fifo, 1,0);
if( (space >= user->files.fifo.length - FIFO_RWPTR_SPACE) && (0 == user->info.appendFlag) )
{
user->info.appendFlag = 1;
api_putUserToFifoQueue(user);
}
}else if(0 > result) {
// 没有空间.
if( ! user->info.appendFlag)
{
user->info.appendFlag = 1;
}
OS_EXIT_CRITICAL();
api_putUserToWaitingQueue(user);
OS_ENTER_CRITICAL();
if((int)buffer < 0x3fff)
{
memcpyDMA(buff, buffer, length-1);
result = api_files_write(&user->files, buff, length);
}else {
result = api_files_write(&user->files, buffer, length);
}
}
user->files.offsetFileEnd += length;
OS_EXIT_CRITICAL();
return result;
}
/*
Description : 手动更新FIFO文件内容。
Arguments : handle:用户控制块号,open返回时的标号。
Returns : 正确返回: 1,负数:错误号。
Notes :
*/
int api_UpdateFifo(int UHandle)
{
user_head_t *user;
int result;
if(UHandle < 1 && UHandle > MAX_FIFO)
return FIFO_USER_ERR;
user = &userfifo[UHandle -1];
if( ! user->info.appendFlag)
{
user->info.appendFlag = 1;
}
api_putUserToWaitingQueue(user);
return 1;
}
/*
Description : 获取当前文件选择的全路径
Arguments : buffer: 路径结构指针。
Returns : 正确返回: 1,负数:错误号。
Notes :
*/
int api_GetFullPath(int UHandle, int param)
{
user_head_t *user;
if(UHandle < 1 && UHandle > MAX_FIFO)
return FIFO_USER_ERR;
user = &userfifo[UHandle - 1];
// 文件选择模块未初始化。
if(0 == user->sel)
return FIFO_SEL_ERR;
return api_sel_SetFullPath(user->sel, param);
}
/*
Description : 设置当前文件选择的全路径
Arguments : buffer: 路径结构指针。
Returns : 正确返回: 1,负数:错误号。
Notes : 一旦路径改变,FIFO缓冲区无效。
*/
int api_SetFullPath(int UHandle, int param)
{
user_head_t *user;
int fileNo;
if(UHandle < 1 && UHandle > MAX_FIFO)
return FIFO_USER_ERR;
user = &userfifo[UHandle - 1];
// 文件选择模块未初始化。
if(0 == user->sel)
return FIFO_SEL_ERR;
fileNo = api_sel_SetFullPath(user->sel, param);
if(0 > fileNo)
return fileNo; // 路径错误.
// 重新缓冲文件.
api_files_reset(&user->files);
user->info.appendFlag = 0x04;
user->info.resetFlag = 1;
user->info.nextFileNo = api_sel_CurFileNo(user->sel);
user->info.length = 0;
user->info.err = 0;
api_putUserToFifoQueue(user);
return 1;
}
/*
Description : 设置当前文件选择的模式
Arguments : mode: bit7,不需要文件选择器;bit6,不需要FIFO;其它的认为需要FIFO且表明文件选择的类型。
param: 这是文件选择时附加的参数,由用户和文件选择器设计者协商。
Returns : 正确返回: 1,负数:错误号。
Notes : 一旦模式改变,FIFO缓冲区无效。
*/
int api_SetSelMode(int UHandle, unsigned char mode, int param)
{
user_head_t *user;
int result;
if(UHandle < 1 && UHandle > MAX_FIFO)
return FIFO_USER_ERR;
user = &userfifo[UHandle - 1];
if( !(mode & 0x80) && user->rflag )
{ // 需要文件选择模块
if(user->sel)
{ // 已经打开过文件选择模块.
result = api_sel_SetMode(user->sel, mode , param);
if(0 > result)
{
api_sel_close(user->sel);
user->sel = 0;
return result;
}
}else { // 还没有打开文件选择模块.
result = api_sel_open(mode, param);
if(0 >= result)
{
return result;
}
user->sel = result;
}
// 重新缓冲文件.
api_files_reset(&user->files);
user->info.appendFlag = 0x04;
user->info.resetFlag = 1;
user->info.nextFileNo = 1;
user->info.length = 0;
user->info.err = 0;
api_putUserToFifoQueue(user);
}else {
if(user->sel)
{
api_sel_close(user->sel);
}
user->sel = 0;
}
api_putUserToWaitingQueue(user);
return 1;
}
/*
Description : 设置当前文件选择的模式
Arguments : addr:FIFO 起始地址,length:FIFO的长度。
Returns : 正确返回: 1,负数:错误号。
Notes : 一旦模式改变,FIFO缓冲区无效。
*/
//int api_SetFIFO(int handle, long addr, long length);
/*
Description : 获取当前文件选择模式的文件全名
Arguments : buffer: 文件长名。
num:文件号.
Returns : 正确返回: 序号,负数:错误号。
Notes :
*/
int api_GetFileNameByNo(int UHandle, char *buffer, int num)
{
user_head_t *user;
if(UHandle < 1 && UHandle > MAX_FIFO)
return FIFO_USER_ERR;
user = &userfifo[UHandle - 1];
// 文件选择模块未初始化。
if(0 == user->sel)
return FIFO_SEL_ERR;
return api_sel_GetFileNameByNo(user->sel, buffer, num);
}
/*
Description : 获取指定文件选序号的下一个文件全名,并且返回文件序号.
Arguments : buffer: 文件长名。
num:文件号.
Returns : 正确返回: 序号,0:没有下一个文件; 负数:错误号。
Notes :
*/
int api_GetNextFileNameByNo(int UHandle, char *buffer, int fielNo)
{
user_head_t *user;
if(UHandle < 1 && UHandle > MAX_FIFO)
return FIFO_USER_ERR;
user = &userfifo[UHandle - 1];
// 文件选择模块未初始化。
if(0 == user->sel)
return FIFO_SEL_ERR;
return api_sel_GetNextFileNameByNo(user->sel, buffer, fielNo);
}
/*
Description : 获取当前文件选择模式的文件序号.
Arguments : handle:用户控制块号,open返回时的标号。
Returns : 正确返回: 序号,负数:错误号。
Notes :
*/
int api_GetCurFileNo(int UHandle)
{
user_head_t *user;
if(UHandle < 0 && UHandle > MAX_FIFO)
return FIFO_USER_ERR;
user = &userfifo[UHandle - 1];
return api_files_getCurFileNo(&user->files);
}
/*
Description : 获取指定文件序号的下一个文件的序号.
Arguments : handle:用户控制块号,open返回时的标号。
fileNo:当前文件序号.
Returns : 正确返回: 序号,0:没有下一个文件; 负数:错误号。
Notes :
*/
int api_GetNextFileNo(int UHandle, int fileNo)
{
user_head_t *user;
if(UHandle < 0 && UHandle > MAX_FIFO)
return FIFO_USER_ERR;
user = &userfifo[UHandle - 1];
return api_fsel_getNextFileNo(user->sel, fileNo);
}
/*
Description : 获取当前文件选择模式的文件总数.
Arguments : handle:用户控制块号,open返回时的标号。
Returns : 正确返回: 序号,负数:错误号。
Notes :
*/
int api_GetTotalFileNum(int UHandle)
{
user_head_t *user;
if(UHandle < 1 && UHandle > MAX_FIFO)
return FIFO_USER_ERR;
user = &userfifo[UHandle - 1];
// 文件选择模块未初始化。
if(0 == user->sel)
return FIFO_SEL_ERR;
return api_sel_TotalFileNum(user->sel);
}
/*
Description : 获取当前文件选择模式的文件类型总数.
Arguments : handle:用户控制块号,open返回时的标号。
Returns : 正确返回: 序号,负数:错误号。
Notes :
*/
int api_GetTotalTypeNum(int UHandle)
{
user_head_t *user;
if(UHandle < 1 && UHandle > MAX_FIFO)
return FIFO_USER_ERR;
user = &userfifo[UHandle - 1];
// 文件选择模块未初始化。
if(0 == user->sel)
return FIFO_SEL_ERR;
return api_sel_TotalTypeNum(user->sel);
}
/*
Description : 获取当前文件选择模式的文件类型序号.
Arguments : handle:用户控制块号,open返回时的标号。
Returns : 正确返回: 序号,负数:错误号。
Notes :
*/
int api_GetCurTypeNo(int UHandle)
{
user_head_t *user;
if(UHandle < 1 && UHandle > MAX_FIFO)
return FIFO_USER_ERR;
user = &userfifo[UHandle - 1];
// 文件选择模块未初始化。
if(0 == user->sel)
return FIFO_SEL_ERR;
return api_sel_CurTypeNo(user->sel);
}
/*
Description : 获取当前文件选择模式下的文件类型全名
Arguments : buffer: 文件类型长名。(可以是目录名,根据不同模式有不同含义)。
num:文件号.
Returns : 正确返回: 序号,负数:错误号。
Notes :
*/
int api_GetTypeNameByNo(int UHandle, char *buffer, int num)
{
user_head_t *user;
if(UHandle < 1 && UHandle > MAX_FIFO)
return FIFO_USER_ERR;
user = &userfifo[UHandle - 1];
// 文件选择模块未初始化。
if(0 == user->sel)
return FIFO_SEL_ERR;
return api_sel_GetTypeNameByNo(user->sel, buffer, num);
}
/*
Description : 获取指定文件序号文件的附加信息.
Arguments : handle:用户控制块号,open返回时的标号。
fileNo:文件序号,
param:参数指针.
Returns : 正确返回: 序号,负数:错误号。
Notes :
*/
int api_GetFileInfoByFileNo(int UHandle, int fileNo, int param)
{
user_head_t *user;
if(UHandle < 1 && UHandle > MAX_FIFO)
return FIFO_USER_ERR;
user = &userfifo[UHandle - 1];
// 文件选择模块未初始化。
if(0 == user->sel)
return FIFO_SEL_ERR;
return api_sel_GetFileInfoByFileNo(user->sel, fileNo, param);
}
long api_GetFileTell(int UHandle)
{
user_head_t *user;
if(UHandle < 1 && UHandle > MAX_FIFO)
return FIFO_USER_ERR;
user = &userfifo[UHandle - 1];
return api_files_getCurFileTell(&user->files);
}
long api_GetFileLength(int UHandle)
{
user_head_t *user;
if(UHandle < 1 && UHandle > MAX_FIFO)
return FIFO_USER_ERR;
user = &userfifo[UHandle - 1];
return api_files_getCurFileLength(&user->files);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -