⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 datafax.c

📁 PHILIP LPC935MCU UART用于与传真模块通信,SPI用于与SL811的USB模块通信.该软件把U盘存储的文件通过传真发到对方相同的设备接收到U盘
💻 C
📖 第 1 页 / 共 5 页
字号:
    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 + -