📄 datafax.c
字号:
while(Cnt_Long_1ms<_5S)
{
if( SPI_Read_Point!=SPI_Write_Point) SPI_Read_Point++;
if (SPI_Read_Point==5)
{
if(SPI_Recv_Buf[0]==0x00 ) return 0;
if(SPI_Recv_Buf[0]==0x01 ) return 1;
return 0;
}
}
return 0;
}
//---------------------------------------------
// 从文件当前位置读取指定长度的数据
// 入口参数:length----读取数据的长度
//----------------------------------------------
void Read_File(ulong Cnt)
{
byte i;
for(i=0;i<37;i++) UARTBUF[i]=0x00;
for(i=4;i>0;i--)
{
UARTBUF[i]=(byte)Cnt;
Cnt>>=8;
}
UARTBUF[0]=0X02;//读取文件命令
SPI_Read_Point=0;
SPI_Write_Point=0;
Set_SPI_Master;
SPI_SS=0;
Delayms(2);
for(i=0;i<37;i++) SPI_Send_Byte(UARTBUF[i]);
Set_SPI_Slave;
temp_bit=SPI_SS;
SPI_TI=0;
}
//-------------------------------------------------
// 向接收方发送请求
// 入口参数:request-----请求
// length------数据长度
//--------------------------------------------------
void Send_Request(byte request,ulong length)
{
byte i=0;
word j=0;
switch(request)
{
case CREATE_FILE://创建文件
for(i=0;i<37;i++) UARTBUF[i]=0x00;
UARTBUF[0]=0X04;
for(i=5;i<31;i++)
{
UARTBUF[i]=File_Info[i-5];
}
for(i=0;i<37;i++) Com_Send_Byte(UARTBUF[i]);
break;
case OPEN_FILE://打开文件
for(i=0;i<37;i++) UARTBUF[i]=0x00;
UARTBUF[0]=0X01;
for(i=5;i<16;i++)
{
UARTBUF[i]=File_Info[i-5];
}
for(i=0;i<37;i++) Com_Send_Byte(UARTBUF[i]);
case FILE_SEEK://文件定位
for(i=0;i<37;i++) UARTBUF[i]=0x00;
for(i=4;i>0;i--)
{
UARTBUF[i]=(byte)length;
length>>=8;
}
UARTBUF[0]=0X03;
for(i=0;i<37;i++) Com_Send_Byte(UARTBUF[i]);
break;
case WRITE_FILE://写文件
for(i=0;i<37;i++) UARTBUF[i]=0x00;
for(i=4;i>0;i--)
{
UARTBUF[i]=(byte)length;
length>>=8;
}
UARTBUF[0]=0X05;
for(i=0;i<37;i++) Com_Send_Byte(UARTBUF[i]);
break;
case FILE_EOF://End Of File
for(i=0;i<37;i++) UARTBUF[i]=0x00;
UARTBUF[0]=0X0F;
for(i=0;i<37;i++) Com_Send_Byte(UARTBUF[i]);
break;
default:
break;
}
}
//--------------------------------------------------
// 获取接收送方的响应
//-------------------------------------------------
bit Get_Response()
{
byte i=0;
Com_Read_Point=0;
Com_Write_Point=0;
Cnt_Long_1ms=0;
while(Cnt_Long_1ms<_10S)
{
if(Flag_1ms)
{
Flag_1ms=false;
Capture_KEY_Event();
}
if(Key_Down.Active)
{
Key_Down.Active=false;
if(Key_Down.Byte_data==KB_EXIT)
{
Do_Cancel();
Flag_Exit=true;
Flag_KB_Enable=true;
return false;
}
}
//if( Com_Read_Point!=Com_Write_Point) break;
if( Com_Write_Point>=4) break;
}
if(Com_Recv_Buf[0]==0x00)
{
Delayms(200);
Delayms(200);
return false;
}
else return true;
}
//-------------------------------------------------
// 发送文件过程:
// Open File
// Seek File
// Send file first block ( block_size=Com_Buf_len-5)
// Send file next block ( block_size=Com_Buf_len-5)
// Send file next ......
// Send last block ( blocksize=fileSize-n*blocksize)
//---------------------------------------------------
void Do_Send_File()
{
ulong Block_Size=Recv_Buf_Len-37;
ulong filesize=File_Size;
ulong temp_point=0;
ulong temp_size=0;
word i=0;
byte j=0;
File_Point=0;
Flag_Exit=false;
if(MODEM_Status!=MODEM_CONNECTED_STATE)
{
Error_Display("MODEM DISCONNECT");
return;
}
if(File_Name[0]==0x00)
{
Error_Display("NO FILE SELECTED");
return;
}
Send_Finished.Active=false;
Send_Request(CREATE_FILE,0);
for(i=0;i<37;i++) Com_Recv_Buf[i]=0x00;
Com_Read_Point=0;
Com_Write_Point=0;
LCD_Show_Data(2,20,"Get create Response ");
if(!Get_Response())
{
j++;
if(j>3)
{
Error_Display("NO RESPONSE");
return;
}
Send_Request(CREATE_FILE,0);
for(i=0;i<37;i++) Com_Recv_Buf[i]=0x00;
Com_Read_Point=0;
Com_Write_Point=0;
}
if(Open_File())
{
i=0;
Send_Request(OPEN_FILE,0);
for(i=0;i<37;i++) Com_Recv_Buf[i]=0x00;
Com_Read_Point=0;
Com_Write_Point=0;
LCD_Show_Data(2,20,"Get open Response ");
if(!Get_Response())
{
j++;
if(j>3)
{
Error_Display("NO RESPONSE");
return;
}
for(i=0;i<37;i++) Com_Recv_Buf[i]=0x00;
Com_Read_Point=0;
Com_Write_Point=0;
}
while(filesize>0)
{
if(Flag_1ms)
{
Flag_1ms=false;
Capture_KEY_Event();
}
if(Key_Down.Active)
{
Key_Down.Active=false;
if(Key_Down.Byte_data==KB_EXIT)
{
Do_Cancel();
Flag_Exit=true;
Flag_KB_Enable=true;
}
}
if(Flag_Exit) return;
LCD_Show_Data(2,20,"FILE SEEKING..");
if(File_Seek(File_Point))
{
temp_point=File_Point;
temp_size=filesize;
Send_Request(FILE_SEEK,File_Point);
for(i=0;i<37;i++) Com_Recv_Buf[i]=0x00;
Com_Read_Point=0;
Com_Write_Point=0;
LCD_Show_Data(2,20,"Get seek Response ");
if(Get_Response())
{
if (filesize<=Block_Size) Block_Size=filesize; //last Block;
LCD_Show_Data(2,20,"READING DATA..");
Read_File(Block_Size);
SPI_Read_Point=0;
SPI_Write_Point=0;
Cnt_Long_1ms=0;
while(Cnt_Long_1ms<_5S)
{
if(Flag_1ms)
{
Flag_1ms=false;
Capture_KEY_Event();
}
if(Key_Down.Active)
{
Key_Down.Active=false;
if(Key_Down.Byte_data==KB_EXIT)
{
Do_Cancel();
Flag_Exit=true;
Flag_KB_Enable=true;
return;
}
}
while(SPI_Read_Point!=SPI_Write_Point)
{
if(Flag_1ms)
{
Flag_1ms=false;
Capture_KEY_Event();
}
if(Key_Down.Active)
{
Key_Down.Active=false;
if(Key_Down.Byte_data==KB_EXIT)
{
Do_Cancel();
Flag_Exit=true;
Flag_KB_Enable=true;
return;
}
}
if(SPI_Recv_Buf[0]==0x00) break;
if(SPI_Write_Point==Block_Size+5)
{
LCD_Show_Data(2,20,"SENDING DATA... ");
Send_Request(WRITE_FILE,Block_Size);
for(SPI_Read_Point=5;SPI_Read_Point<Block_Size+5;SPI_Read_Point++)
{
Com_Send_Byte(SPI_Recv_Buf[SPI_Read_Point]);
File_Point++;
if(filesize>0) filesize--;
}
for(i=0;i<37;i++) Com_Recv_Buf[i]=0x00;
Com_Read_Point=0;
Com_Write_Point=0;
LCD_Show_Data(2,20,"Get write Response ");
if(!Get_Response())
{
File_Point=temp_point;
filesize=temp_size;
}
break;
}
}
if(SPI_Recv_Buf[0]==0x00) break;
if (SPI_Read_Point==Block_Size+5) break;
}
}
}
}
if (filesize==0)
{
Send_Finished.Active=true;
Send_Request(FILE_EOF,0);
SYS_Status=SYS_SEND_FINISHED_STATE;
}
else
{
Send_Finished.Active=false;
//Com_Send("ERR");
SYS_Status=SYS_ERROR_STATE;
}
}
if(Send_Finished.Active) Send_Finished_Display();
else Error_Display("SEND UNFINISHED");
}
//-----------------------------------------------------
// 获取发送方的请求
// 注:目前只捕获创建文件请求
//----------------------------------------------------
bit Get_Request()
{
word i=0;
byte j=0;
byte k=0;
LCD_Show_Data(2,20,"Getting request...");
for(i=0;i<37;i++) Com_Recv_Buf[i]=0x00;
Cnt_Long_1ms=0;
Com_Read_Point=0;
Com_Write_Point=0;
File_Name[0]=0x00;
while(Cnt_Long_1ms<_10S)
{
if(Flag_1ms)
{
Flag_1ms=false;
Capture_KEY_Event();
}
if(Key_Down.Active)
{
Key_Down.Active=false;
if(Key_Down.Byte_data==KB_EXIT)
{
Flag_KB_Enable=true;
Flag_Exit=true;
return false;
}
}
if(Com_Read_Point!=Com_Write_Point) Com_Read_Point++;
if(Com_Read_Point==36) break;
}
if(Com_Read_Point<36) return false;
return true;
}
void Response_Request()
{
byte i,j,k,temp;
ulong templong,Data_Len;
Data_Len=0;
templong=0;
i=0;
j=0;
k=0;
temp=0x00;
Request=Com_Recv_Buf[0];
switch(Request)
{
case CREATE_FILE:
for(i=5;i<16;i++)
{
if(Com_Recv_Buf[i]!=0x20)
{
if(j!=8)
{
File_Name[k]=Com_Recv_Buf[i];
k++;
}
else
{
File_Name[k]=0x2E;
i--;
k++;
}
}
j++;
}
LCD_Show_Data(4,20,File_Name);
LCD_Show_Data(2,20,"RECIEVEING...");
LCD_Show_Data(0,20,"PRESS EXIT CANCEL");
SPI_Read_Point=0;
SPI_Write_Point=0;
Set_SPI_Master;
SPI_SS=0;
Delayms(2);
LCD_Show_Data(2,20,"CREATEING FILE..");
for(i=0;i<37;i++) SPI_Send_Byte(Com_Recv_Buf[i]);
Set_SPI_Slave;
temp_bit=SPI_SS;
SPI_TI=0;
Cnt_Long_1ms=0;
while(Cnt_Long_1ms<_10S)
{
if(Flag_1ms)
{
Flag_1ms=false;
Capture_KEY_Event();
}
if(Key_Down.Active)
{
Key_Down.Active=false;
if(Key_Down.Byte_data==KB_EXIT)
{
Do_Cancel();
Flag_Exit=true;
Flag_KB_Enable=true;
return ;
}
}
if(SPI_Read_Point!=SPI_Write_Point) SPI_Read_Point++;
if(SPI_Read_Point==4) break;
}
if(SPI_Read_Point<4)
{
temp=0x00;
for(i=0;i<5;i++) Com_Send_Byte(temp);
temp=0xAA;
Com_Send_Byte(temp);
}
else
{
for(i=0;i<5;i++) Com_Send_Byte(SPI_Recv_Buf[i]);
temp=0xAA;
Com_Send_Byte(temp);
}
break;
case OPEN_FILE:
SPI_Read_Point=0;
SPI_Write_Point=0;
Set_SPI_Master;
SPI_SS=0;
Delayms(2);
LCD_Show_Data(2,20,"OPENING FILE...");
for(i=0;i<37;i++) SPI_Send_Byte(Com_Recv_Buf[i]);
Set_SPI_Slave;
temp_bit=SPI_SS;
SPI_TI=0;
Cnt_Long_1ms=0;
while(Cnt_Long_1ms<_10S)
{
if(Flag_1ms)
{
Flag_1ms=false;
Capture_KEY_Event();
}
if(Key_Down.Active)
{
Key_Down.Active=false;
if(Key_Down.Byte_data==KB_EXIT)
{
Do_Cancel();
Flag_Exit=true;
Flag_KB_Enable=true;
return ;
}
}
if(SPI_Read_Point!=SPI_Write_Point) SPI_Read_Point++;
if(SPI_Read_Point==4) break;
}
if(SPI_Read_Point<4)
{
temp=0x00;
for(i=0;i<5;i++) Com_Send_Byte(temp);
temp=0xAB;
Com_Send_Byte(temp);
}
else
{
for(i=0;i<5;i++) Com_Send_Byte(SPI_Recv_Buf[i]);
temp=0xAB;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -