📄 udisk.lis
字号:
0000 ; ***************************************************************************/
0000 ; void xWriteCH375Cmd( UINT8 mCmd )
0000 ; {
0000 ; delay_us();
0000 ; delay_us();
0000 ; MCMD; //A0置高
0000 ; DATADIRO; //数据方向为输出
0000 ; DATAOUT=mCmd; //数据输出
0000 ; CSEN; //使能
0000 ; WRCTRL; //写信号
0000 ; WRCTRL; //延时
0000 ; CLRCTRL; //关写信号
0000 ; CSDIS; //使能禁止
0000 ; delay_us();
0000 ; delay_us();
0000 ; }
0000 ;
0000 ; /**************************************************************************
0000 ; 外部定义的被CH375程序库调用的子程序,向CH375写数据,最小周期为1.5uS,
0000 ; 否则之后延时1.5uS
0000 ; ***************************************************************************/
0000 ; void xWriteCH375Data( UINT8 mData )
0000 ; {
0000 ; MDATA; //A0置高
0000 ; DATADIRO; //数据方向为输出
0000 ; DATAOUT=mData; //数据输出
0000 ; CSEN; //使能
0000 ; WRCTRL; //写信号
0000 ; WRCTRL; //延时
0000 ; CLRCTRL; //关写信号
0000 ; CSDIS; //使能禁止
0000 ; delay_us();
0000 ; delay_us();
0000 ;
0000 ; }
0000 ; /**************************************************************************
0000 ; 外部定义的被CH375程序库调用的子程序,从CH375读数据,最小周期为1.5uS,
0000 ; 否则之前延时1.5uS
0000 ; ***************************************************************************/
0000 ; UINT8 xReadCH375Data( void )
0000 ; {
0000 ; UINT8 inData;
0000 ; delay_us();
0000 ; MDATA;
0000 ; DATADIRI;
0000 ; CSEN;
0000 ; RDCTRL;
0000 ; RDCTRL;
0000 ; inData=DATAIN;
0000 ; CLRCTRL;
0000 ; CSDIS;
0000 ; return(inData);
0000 ; }
0000 ;
0000 ; /****************************************************************************
0000 ; /动作执行完,返回结果,OperReturn为0则返回A_SUCCESS,非零则返回OperReturn值
0000 ; ****************************************************************************/
0000 ; void ReturnProResult( void )
0000 ; {
0000 ; if(OperReturn)
0000 ; {
0000 ; nComBuff.AckData.Ack = OperReturn;
0000 ; }
0000 ; else
0000 ; {
0000 ; nComBuff.AckData.Ack = A_SUCCESS;
0000 ; }
0000 ; }
0000 ;
0000 ; /************************************************************************/
0000 ; /* 发送错误码。自动组帧。
0000 ; 入口参数:ErrorCode */
0000 ; /************************************************************************/
0000 ; void ReturnErrorCode(uchar ErrorCode)
0000 ; {
0000 ; I2C_SEND_READY;
0000 ; nComBuff.AckData.Ack = ErrorCode;
0000 ; nComBuff.AckData.FrameLen = 3;
0000 ; }
0000 ; /************************************************************************/
0000 ; /* 复制数据
0000 ; 入口参数:
0000 ; uchar destination *:目的地址
0000 ; uchar source *:源地址
0000 ; uint number: 字节数 */
0000 ; /************************************************************************/
0000 ; void CopyBytes(uchar* destination,uchar* source,uint number)
0000 ; {
0000 ; uint i;
0000 ; for(i=0;i<number;i++)
0000 ; {
0000 ; *(destination+i) = *(source+i);
0000 ; }
0000 ; }
0000 ;
0000 ; /************************************************************************/
0000 ; /* 新建文件(文件夹)函数
0000 ; 入口参数:directory,0=新建文件,!0=新建文件夹 */
0000 ; /************************************************************************/
0000 ; void ModuleNewFile(uchar directory)
0000 ; {
0000 ; nComBuff.ReqData.VeryData.FileName[MAX_PATH_LEN-1]=0; //确保最后一个是“0”,作为字符串的尾部
0000 ; strcpy((char *)mCmdParam.Create.mPathName,(char *)nComBuff.ReqData.VeryData.FileName);
0000 ; OperReturn = CH375FileCreate( ); //新建文件
0000 ;
0000 ; if(OperReturn)
0000 ; {
0000 ; ReturnErrorCode(OperReturn);
0000 ; B_status = S_READY;
0000 ; }
0000 ; else if(directory)
0000 ; {
0000 ; mCmdParam.Modify.mFileAttr = ATTR_DIRECTORY;
0000 ; mCmdParam.Modify.mFileDate = 0xffff;
0000 ; mCmdParam.Modify.mFileSize = 0xffffffff;
0000 ; mCmdParam.Modify.mFileTime = 0xffff;
0000 ; OperReturn = CH375FileModify();
0000 ; directory = 0; //把此值清零防止再进入此分支
0000 ; if(OperReturn)
0000 ; {
0000 ; ReturnErrorCode(OperReturn);
0000 ; B_status = S_READY;
0000 ; }
0000 ; else
0000 ; {
0000 ; mCmdParam.Close.mUpdateLen = 1; //自动更新文件长度
0000 ; OperReturn = CH375FileClose( );
0000 ; if(OperReturn)
0000 ; {
0000 ; ReturnErrorCode(OperReturn);
0000 ; B_status = S_READY;
0000 ; }
0000 ; else
0000 ; {
0000 ; ReturnErrorCode(A_SUCCESS);
0000 ; B_status = S_READY;
0000 ; }
0000 ;
0000 ; }
0000 ; }
0000 ; else
0000 ; {
0000 ;
0000 ; ReturnErrorCode(A_SUCCESS);
0000 ; B_status=S_OPEN;
0000 ; }
0000 ;
0000 ; }
0000 ;
0000 ; /************************************************************************/
0000 ; /* 如果优盘的状态是准备好,但未读写,进入的分支 */
0000 ; /************************************************************************/
0000 ; void StatusReady(void)
0000 ; {
0000 ; switch(nComBuff.ReqData.Com)
0000 ; {
0000 ; case R_OPEN_FILE:
0000 ; nComBuff.ReqData.VeryData.FileName[MAX_PATH_LEN-1]=0; //确保最后一个是“0”,作为字符串的尾部
0000 ; strcpy((char *)mCmdParam.Open.mPathName,(char *)nComBuff.ReqData.VeryData.FileName);
0000 ; OperReturn = CH375FileOpen( );
0000 ; if(OperReturn)
0000 ; {
0000 ; ReturnErrorCode(OperReturn);
0000 ; B_status = S_READY;
0000 ; }
0000 ; else
0000 ; {
0000 ; ReturnErrorCode(A_SUCCESS);
0000 ; B_status=S_OPEN;
0000 ; }
0000 ;
0000 ; break;
0000 ; case R_NEW_FILE:
0000 ; ModuleNewFile(0); //新建文件
0000 ; break;
0000 ; case R_DEL_FILE:
0000 ; nComBuff.ReqData.VeryData.FileName[MAX_PATH_LEN-1]=0; //确保最后一个是“0”,作为字符串的尾部
0000 ; strcpy((char *)mCmdParam.Create.mPathName,(char *)nComBuff.ReqData.VeryData.FileName);
0000 ; OperReturn = CH375FileErase( ); //删除文件并关闭
0000 ; ReturnErrorCode(OperReturn);
0000 ; B_status = S_READY;
0000 ; break;
0000 ; case R_NEW_DIR:
0000 ; ModuleNewFile(0xff); //新建文件夹
0000 ; break;
0000 ; default:
0000 ; ReturnErrorCode(A_NOTOPEN);
0000 ; B_status = S_READY;
0000 ; break;
0000 ; }
0000 ; }
0000 ;
0000 ; /************************************************************************/
0000 ; /* 模块按字节读取文件
0000 ; 需要准备的有: nComBuff.ReqData.VeryData.ReadBytes,字节数
0000 ; 出口数据: nComBuff.AckData.VeryData.ReadDataVer.ReadBytes,读出的实际字节数
0000 ; */
0000 ; /************************************************************************/
0000 ; void ModuleByteRead(void)
0000 ; {
0000 ; rdcount=nComBuff.ReqData.VeryData.ReadBytes;
0000 ; if(rdcount)
0000 ; {
0000 ; if(rdcount>MAX_BYTE_IO)
0000 ; {
0000 ; mCmdParam.ByteRead.mByteCount = MAX_BYTE_IO; //读的字节数就是最大值
0000 ; goto readbyte1;
0000 ; }
0000 ; else
0000 ; {
0000 ; mCmdParam.ByteRead.mByteCount = rdcount;
0000 ; readbyte1: LIGHT_RD; //读指示灯打开
0000 ; OperReturn = CH375ByteRead();
0000 ; OFF_RD; //读指示灯熄灭
0000 ; if(OperReturn)
0000 ; {
0000 ; ReturnErrorCode(OperReturn);
0000 ; }
0000 ; else
0000 ; {
0000 ; RETURN_SUCCESS; //返回成功
0000 ; CopyBytes(nComBuff.AckData.VeryData.ReadDataVer.DataBuff, //目的地址
0000 ; mCmdParam.ByteRead.mByteBuffer, //源地址
0000 ; mCmdParam.ByteRead.mByteCount); //实际读出的字节数
0000 ; nComBuff.AckData.VeryData.ReadDataVer.ReadBytes = mCmdParam.ByteRead.mByteCount;
0000 ; nComBuff.AckData.FrameLen = nComBuff.AckData.VeryData.ReadDataVer.ReadBytes+5; //整个帧的长度
0000 ; I2C_SEND_READY; //准备发送
0000 ; }
0000 ;
0000 ; }
0000 ; }
0000 ; B_status = S_OPEN;
0000 ; }
0000 ;
0000 ; /************************************************************************/
0000 ; /* 模块对文件属性的读取 */
0000 ; /************************************************************************/
0000 ; void ModuleAttrRead(void)
0000 ; {
0000 ; LIGHT_RD; //亮灯
0000 ; OperReturn = CH375FileQuery( );
0000 ; OFF_RD; //灭灯
0000 ; if(OperReturn)
0000 ; {
0000 ; ReturnErrorCode(OperReturn);
0000 ; }
0000 ; else
0000 ; {
0000 ; nComBuff.AckData.FrameLen = FILE_ATTRI_BYTES+3;
0000 ; RETURN_SUCCESS;
0000 ; CopyBytes((uchar *) &nComBuff.AckData.VeryData.ReadFileAttrVer,
0000 ; (uchar *) &mCmdParam.Modify,
0000 ; FILE_ATTRI_BYTES);
0000 ; I2C_SEND_READY;
0000 ; }
0000 ; B_status = S_OPEN;
0000 ; }
0000 ;
0000 ; /************************************************************************/
0000 ; /* 模块对文件按字节方式写入 */
0000 ; /************************************************************************/
0000 ; void ModuleByteWrite(void)
0000 ; {
0000 ; rdcount = nComBuff.ReqData.VeryData.WriteDataVer.Bytes;
0000 ; if(rdcount)
0000 ; {
0000 ; if(rdcount>MAX_BYTE_IO)
0000 ; {
0000 ; mCmdParam.ByteWrite.mByteCount = MAX_BYTE_IO;
0000 ; goto writebyte1;
0000 ; }
0000 ; else
0000 ; {
0000 ; mCmdParam.ByteWrite.mByteCount = rdcount;
0000 ; writebyte1: LIGHT_WR;
0000 ; CopyBytes(mCmdParam.ByteWrite.mByteBuffer, //将请求帧的数据内容拷贝到读写结构体当中
0000 ; nComBuff.ReqData.VeryData.WriteDataVer.DataBuff,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -