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

📄 pctalk.c

📁 手机点菜系统手机端,利用GPRS实现菜名上报
💻 C
📖 第 1 页 / 共 3 页
字号:
      		  	return ret;
       	        } 
       	}else{
//step==1 此处的情况是最后的断线操作的应答中的答可能出错,pc认为成功而手持机认为失败,故作此提示
       	        if(step == 1)
       	        {
	        	DispStr_CE(0,1,"通讯有误!",DISP_CENTER|DISP_CLRSCR);
	               	DispStr_CE(0,3,"请使用附加功能",DISP_CENTER);
	               	DispStr_CE(0,5,"再次查询点菜情况",DISP_CENTER);
	               	delay_and_wait_key(0,EXIT_KEY_ALL,0);
	               	return FAILURE;
	        } else {//此处只能是 step = 0 失败通讯一定失败
			DispStr_CE(0,2,"等待查询结果超时",DISP_POSITION);  
			delay_and_wait_key(0,EXIT_KEY_ALL,0);
	               	return FAILURE;
		}
	}
}
//--------------------------------------------------------------------------
//--------------------------------------------------------------------------
short lack_setup(unsigned char des_recv,unsigned char src_recv)
{
	 des_recv_lack = des_recv;//brd_id
	 src_recv_lack = src_recv;//g_id_server
}
//===============================================================================
//pos 请求发送数据,在循环查询时使用,该函数只是在无线传输的过程中使用
short dt_send_tab_data(unsigned char des,unsigned char src,unsigned char fsid)
{
	unsigned long count;
	short ret;
	int i;
	if(fsid!=9){//fsid==9,则是查询1
		//上传数据start
		lack_setup(des,src);
		if(fsid == ID_TAB_CLIENT_MENU)
			counter_client_disk_total(&count);		
		else
			count = DB_count_records(fsid);
	
		DisKeyInt(); //关键盘中断
		ret = dt_tab_data_send_request(des,src,fsid,count);
		if(ret == SUCCESSFUL)
		{ 
			ret = dt_send_tab_data_doing(des,src,fsid,1);//上传数据
		        EnKeyInt(); //开键盘中断
			if(ret == SUCCESSFUL)
			{
				ret = wait_send_result(src,des);//等待服务器返回结果!
				//clr_scr();//这里只能重新连接来查询估清
				//if(ret==SUCCESSFUL) wait_lack_result(src_recv_lack,des_recv_lack);//等待估清结果并显示
			} else {
				DispStr_CE(0,2,"发送数据失败!",DISP_POSITION|DISP_CLRSCR);
				delay_and_wait_key(0,EXIT_KEY_ALL,0);
			}
		}else{
	   		EnKeyInt(); //开键盘中断
			DispStr_CE(0,2,"发送请求失败!",DISP_POSITION|DISP_CLRSCR);
			delay_and_wait_key(0,EXIT_KEY_ALL,0);
		}
		return ret;
	}//上传数据END
	else {//查询start
		DisKeyInt(); //关键盘中断
		ret = dt_tab_data_send_request(des,src,fsid,1);
		if(ret == SUCCESSFUL)
		{ 
			ret = dt_send_tab_data_search(des,src,fsid);//上传数据
		        EnKeyInt(); //开键盘中断
			if(ret == SUCCESSFUL)
			{
				ret = wait_lack_result(src,des);//等待服务器返回结果!
				//查询
				//if(ret==SUCCESSFUL) wait_lack_result(src_recv_lack,des_recv_lack);//等待估清结果并显示
			} else {
				DispStr_CE(0,2,"发送数据失败!",DISP_POSITION|DISP_CLRSCR);
				delay_and_wait_key(0,EXIT_KEY_ALL,0);
			}
		}else{
	   		EnKeyInt(); //开键盘中断
			DispStr_CE(0,2,"发送请求失败!",DISP_POSITION|DISP_CLRSCR);
			delay_and_wait_key(0,EXIT_KEY_ALL,0);
		}
		return ret;
	}//查询end
}

// count: number of total items
//
short wait_for_tab_data(unsigned char pa_des,unsigned char pa_src,int fsid,unsigned long count)
{
	unsigned char msg[100];
	int datalen;
	int i;
	int rec_size,ret;
	unsigned long count_recv = 0;
	unsigned char src_recv,des_recv;
	unsigned short Acknowledge,new_acknowledge;
	unsigned char data[MAX_NUMBER_DT_DATA+30];
    	unsigned short recNum;
	char *pTmp;
	int err_pa_count;

	DispStr_CE(0,0,"正在接收数据...",DISP_POSITION|DISP_CLRSCR);
	sprintf(msg,"接收表%d共%d条",fsid+1,count);
	DispStr_CE(0,2,msg,DISP_POSITION);
			
	if((fsid<0)||(fsid>NUMOFDBTABLE)) 
	{
		DispStr_CE(1,0,"文件号错误.",DISP_CENTER|DISP_CLRSCR);
		delay_and_wait_key( 10, EXIT_KEY_ALL, 0 );
	    return FAILURE;
    	}
        rec_size = g_rec_size[fsid];
	count_recv = 0;
	err_pa_count = 0;                                                         	

	while(1)                                                                	
	{                                                                       	
		ret = dt_recv(&des_recv,&src_recv,data,&datalen,&new_acknowledge);                           		
		if(ret != SUCCESSFUL)                    	                                                  		
		{                                                                   	                      		
		    //dt_delay(WAIT_TIME_RESEND);                                                                           	    
		    sprintf(msg,"w_t_d fail:%02x",ret);                                                      	    
		    TRACE(msg);
		    err_pa_count++;
		    if(err_pa_count>40)                                                                           	    
		    {	                                                                                      	    
		        TRACE("w_t_d time out quit");                                                            		
		        getch();
		    	return FAILURE;                                                                       	    
		    }                                      	                                                  	    
		    else                                                            	                      	    
		     	continue;                                                   	                      	    
		}else {
			if(des_recv!=pa_des||src_recv!=pa_src)  //check des and src err
			{
				TRACE("w_t_d:des&src err");
				sprintf(msg,"%02x:%02x:%02x:%02x",des_recv,pa_des,src_recv,pa_src);
				TRACE(msg);
				err_pa_count++;
				if(err_pa_count>20)                //if err counter > 20 quit
				{
					 TRACE("des&src err quit");
					 return FAILURE;
				}
				continue;
			}
			err_pa_count = 0;                                                                                       	    
			if((data[0]==CMD_RTD)&&(data[1]==CMD_RECV_DATA))                                          	    
			{                                                                                         	    
			        if(count_recv == 0)                                                                   		
			        {                                                                                     		
			        	Acknowledge = new_acknowledge;                                                    		
			        } else {                                                                              		
			        	if(Acknowledge + 1 == new_acknowledge)  //数据是不是同一系列数据,防止重发数据     		
			        	{                                                                                 		
			        		Acknowledge++;                                                                		
			        	} else {                                                                          		
			        		continue;                                                                     		
			        	}                                                                                 		
			        }
			        if(data[2]!=fsid)                         //check fsid err
			        {
			        	TRACE("w_t_d:fsid err");
			        	return FAILURE;
			        }                                                                                     		
			        recNum = (datalen-3)/rec_size;                                                        		
			        pTmp = data+3;                                                                        		
			        for(i=0;i<recNum;i++)                                                                 		
			        {                                                                                     		
					if(!DB_add_recordx(fsid,(void*)pTmp,g_arr_total_exist[fsid]))
					{                                                                             		
						DispStr_CE(0,0,"空间不足!",DISP_CENTER|DISP_CLRSCR);                      		
						DispStr_CE(0,2,"添加记录失败!",DISP_CENTER); 
						TRACE("g_arr_total_exist:%d,%d",fsid,g_arr_total_exist[fsid]);
						delay_and_wait_key( 10, EXIT_KEY_ALL, 0 );                                		
						return FAILURE;                                                           		
					} 
					g_arr_total_exist[fsid]++;                                                                            		
			                pTmp += rec_size;                                                             		
			        }                                                                                     		
			        count_recv = count_recv + recNum;                                                     		
			        sprintf(msg, "%3d",count_recv );                                                      		
			        DispStr_CE(0,4,msg,DISP_POSITION);                                                            
			} else if((data[0]==CMD_RTC)&&(data[1]==CMD_RECV_DATA)) {                                 	    
			    	sprintf(msg, "收到表%d:%3d条",fsid+1,count_recv );                            	      		
			        DispStr_CE(0,4,msg,DISP_POSITION);                                                    	    
			    	sprintf(msg, "表%d现有%3d条",fsid+1,g_arr_total_exist[fsid]);
			    	if((fsid+1)==3) append_count_count_count(g_arr_total_exist[fsid]);                           	      		
			        DispStr_CE(0,6,msg,DISP_POSITION);                                                    	    
			        if(count_recv != count) //收到的数据是否等于请求值                                    	    
			        {                                                                                     	    
					    sprintf(msg, "数据长度错误%d",count );                            	              		
			            DispStr_CE(0,6,msg,DISP_POSITION);                                                		
			            return FAILURE;                                                                   		
			        } else {                                                                              	    
			        	return SUCCESSFUL;                                                                	    
			        }                                                                                     	    
			}                                                                                         	    
		}                                                                                             	    
	}
}

//----------------------------------------------------------------------------------------
//查询某桌的点菜情况
short comm_search()
{
	unsigned char src=g_id_self;
	unsigned char id_server;
	short ret;
	unsigned char prompt[20];
	
	//初始化串口
	DispStr_CE(0,0,"查询结账情况",DISP_POSITION|DISP_CLRSCR);
	
	
	sprintf(prompt,"输入台号:");
	memset(query_desk_no,0,strlen(query_desk_no));
	clr_scr();
	input_desk_NO(0, 0,query_desk_no,prompt);
	
	
	dt_init(PORT_UART_MODEM,9600);
        g_com_port = PORT_UART_MODEM;
	ret = app_connect(&id_server,src);
	if(ret == SUCCESSFUL)
	{
		//进行数据通讯
		ret = dt_send_tab_data(id_server,g_id_self,9);//9 定义为查询
	}else {
		DispStr_CE(0,4,"连接失败!",DISP_POSITION);
		delay_and_wait_key(5,EXIT_KEY_ALL,0);
	}
	dt_exit();
	return ret;
}
short dt_send_tab_data_search(unsigned char des,unsigned char src,unsigned char fsid)
{
	unsigned char data[MAX_NUMBER_DT_DATA+30];
	int datalen;
	char msg[20];
	unsigned char *ptmp;
	char temp[100];
	
	
	data[0] = CMD_RTD;
	data[1] = CMD_RECV_DATA;
	data[2] = fsid;
	datalen = 3;
	ptmp = data+datalen;
	
	sprintf(ptmp,"%s",query_desk_no);
	datalen = datalen+strlen(ptmp);
		//sprintf(temp,"%d,%d,%d,%d,%s",datalen,(char *)data[0],(char *)data[1],(char *)data[2],(char *)query_desk_no);
		//DispStr_CE(0,4,temp,DISP_POSITION);
		//delay_and_wait_key(5,EXIT_KEY_ALL,0);
	
	clr_scr();			   
	if(dt_send(des,src,data, datalen) != SUCCESSFUL)
		{
			TRACE("dt_search err:search");
			delay_and_wait_key(5,EXIT_KEY_ALL,0);
			return FAILURE;
		}
		sprintf(msg, "第%s查询", query_desk_no);
               	DispStr_CE(2,2,msg,DISP_POSITION);

	//数据记录已发送完毕
	data[0] = CMD_RTC;
	data[1] = CMD_RECV_DATA;
	datalen = 2;
	if ((dt_send(des,src,data, datalen) != SUCCESSFUL))
	{
		TRACE("dt_search err:search2");
		delay_and_wait_key(5,EXIT_KEY_ALL,0);
		return FAILURE;
	}
		    
	sprintf(msg,"等待查询结果!", datalen);
        DispStr_CE(0,7,msg,DISP_POSITION|DISP_CLRLINE);
        return SUCCESSFUL;
}
//************************************************************************************************
//End
//************************************************************************************************

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -