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

📄 pctalk.c.bak

📁 手机点菜系统手机端,利用GPRS实现菜名上报
💻 BAK
📖 第 1 页 / 共 3 页
字号:
//******************************************************************************************
//File    : pctalk.c
//Function: communication between handset and pc , protocol for database data transmit layer
//*****************************************************************************************
#include <database.h>
#include <api.h>
#include <string.h>
#include "hd_DT_wl.h"
#include "db.h"
#include "ExEH0218.h"
#include "common.h"
	
extern unsigned short g_rec_size[NUMOFDBTABLE];
extern char g_blocknum[NUMOFDBTABLE];	
extern unsigned char *g_strTableName[];

extern unsigned char g_desk_NO[4+1];
extern unsigned char g_person_num;
extern unsigned char g_waiter_NO[4+1];
extern unsigned char g_waiter_PWD[4+1];
extern unsigned char g_comm_current_id;
extern unsigned char g_id_self;
extern unsigned char g_upld_client_mode;
int append_count_count;
char  des_recv_lack ;
char  src_recv_lack;
extern short g_com_port;
int g_upld_client_mode1;
unsigned char query_desk_no[10];

short DelFSID(int fsid);
short dt_send_tab_data_doing(unsigned char des,unsigned char src,int fsid,int type_comm);
short wait_for_tab_data(unsigned char des,unsigned char src,int fsid,unsigned long);
short wait_send_result(unsigned char des,unsigned char src);
void order_dish_relay();
void order_dish_leap();
short comm_search();
short dt_send_tab_data_search(unsigned char des,unsigned char src,unsigned char fsid);

unsigned long g_arr_total_exist[NUMOFDBTABLE];

short data_transmit()
{
	unsigned char cmd_op, cmd_type;
	unsigned short Acknowledge;
	int datalen;
	int ret,fsid = 0;
	unsigned long count;
	typ_msg_word msg_buffer;
	unsigned long count_recv = 0;
	unsigned char str_dsp[100];
	unsigned char src=ID_BROARDCAST,des=0xFF,src_recv,des_recv;
	unsigned char data[MAX_NUMBER_DT_DATA+30];
	
	DispStr_CE(0,2,"计算数据条数...",DISP_CENTER|DISP_CLRSCR);
	for(fsid=0;fsid<=NUMOFDBTABLE;fsid++) 
	  g_arr_total_exist[fsid] = DB_count_records(fsid);
	if(set_com_port()!=SUCCESSFUL) return FAILURE;
RECONNECT:
	DispStr_CE(2,2,"等待连接...",DISP_CENTER|DISP_CLRSCR);
	count_recv = 0;
	if(g_com_port==PORT_UART_232||g_com_port==PORT_UART_IRDA)
		dt_init(g_com_port,115200);
	else 
		dt_init(g_com_port,9600);
	
	while(1)
	{
        	msg_buffer.s_word = sys_msg(SM_STAY_AWAKE);
	   	if (msg_buffer.bits.key_available)
	   	{
			if(KEY_read()==KEY_F1)
			{
		    		dt_exit();
				return FAILURE;
			}
		}		
		if(SUCCESSFUL == dt_connect_recv(&src_recv,src)) 
		{
			if(des != src_recv)
			{
				TRACE("d_t:des err");
				//continue;
			}
			sprintf(str_dsp,"连接成功 %d:%d",src_recv,src);
	        DispStr_CE(2,2,str_dsp,DISP_CENTER|DISP_CLRSCR);
	        break;
		}
	}	
	//初始化数据库API函数参数
	while (1)
	{
		if (dt_recv(&des_recv,&src_recv,data, &datalen,&Acknowledge) != SUCCESSFUL) 
		{
		    //if the K_C press down ,
	        	msg_buffer.s_word = sys_msg(SM_STAY_AWAKE);
		   	if (msg_buffer.bits.key_available)
		   	{
				if(KEY_read()==KEY_F1) break;
			}
//			TRACE("Waitting 1");		
			continue;
		}
		if(des_recv!=src||src_recv!=des)
		{
			TRACE("src or des error");
			sprintf(str_dsp,"%02x:%02x:%02x:%02x",des_recv,src,src_recv,des);
			TRACE(str_dsp);
			//continue;
		}
		cmd_type = data[0];
		cmd_op = data[1];
		if ((cmd_type == CMD_REQ) && (cmd_op == CMD_RECV_DATA) )
		{
			//接收到PC机所请求的数据库记录的发送请求 POS -> PC
			fsid = data[2];
			if(fsid<0||fsid>NUMOFDBTABLE) continue;
			ret = dt_send_tab_data_doing(des,src,fsid,0);
			if(ret!=SUCCESSFUL)  break;
		}
		else if ((cmd_type == CMD_REQ) && (cmd_op == CMD_SEND_DATA)) //pc -->pos
		{
			fsid = data[2];
			memcpy(&count,data+3,4);
			
			data[0] = CMD_REQ;
			data[1] = CMD_RECV_DATA;
			datalen = 2;
			if ((dt_send(des,src,data, datalen) != SUCCESSFUL))
			{
				TRACE("dt_send err:recv doing");
				delay_and_wait_key(0,EXIT_KEY_ALL,0);
				return FAILURE;	
			}
			ret = wait_for_tab_data(des_recv,src_recv,fsid,count);
			if(ret!=SUCCESSFUL)  break;
		}
		else if ((cmd_type == CMD_REQ) && (cmd_op == CMD_DISCONNECT)) //disconnect 
		{
			data[0] = CMD_RTC;
			data[1] = CMD_DISCONNECT;
			datalen = 2;
			if ((dt_send(des,src,data, datalen) != SUCCESSFUL))
			{
				TRACE("dt_send err:disc");
			}
			dt_exit();
			goto RECONNECT;
		}
	
		else if ((cmd_type == CMD_REQ) && (cmd_op == CMD_SET_TIME)) //set date and time
		{
			char hour,minute,second;
			char month,day;
			int  year;
			hour = data[4];
			minute = data[5];
			second = data[6]; 
			year = data[7]+2000;
			month = data[8];
			day = data[9];
			if(RTC_set_date(MAKE_DATE(year,month,day))==-1)
			{
			    DispStr_CE(0,6,"MAKE_DATE错误",DISP_CENTER|DISP_CLRSCR);
	            	    delay_and_wait_key( 2, 0, 0 );
			}
			if(RTC_set_time(MAKE_TIME(hour, minute, second)) == -1)
				;//dt_DetectStatus(MSG_FAILURE);
			else {
//				refresh_icon();
			}
			
			data[0] = CMD_RTC;
			data[1] = CMD_SET_TIME;
			datalen = 2;
			if ((dt_send(des,src,data, datalen) != SUCCESSFUL))
			{
				TRACE("dt_send err:set date");
			}
		}
		else if((cmd_type == CMD_REQ) && (cmd_op == CMD_DATA_COUNT))//pc ask how many records
		{
			fsid = data[2];
		        count = DB_count_records(fsid);
			data[0] = CMD_RTD;
			data[1] = CMD_DATA_COUNT;
			data[2] = fsid;
			data[3] = count>>24;
			data[4] = count>>16;
			data[5] = count>>8;
			data[6] = count;
			datalen = 7;
			if(dt_send(des,src,data, datalen) != SUCCESSFUL)
			{
			    DispStr_CE(0,2,"通讯出错",DISP_CENTER|DISP_CLRSCR);
			    TRACE("dt_send:err ask num");
			}
		}
		else if((cmd_type == CMD_REQ) && (cmd_op == CMD_DEL_FSID))//pc del fsid table
		{
			fsid = data[2];
			data[0] = CMD_RTC;
			data[1] = CMD_DEL_FSID;
			datalen = 2;
			if ((dt_send(des,src,data, datalen) != SUCCESSFUL))
			{
				TRACE("dt_send err:del tab");
		    }
			DelFSID(fsid);
		}
		else if((cmd_type == CMD_REQ) && (cmd_op == CMD_DEL_ALLFS))//pc del all fs
		{
			data[0] = CMD_RTC;
			data[1] = CMD_DEL_ALLFS;
			datalen = 2;
			if ((dt_send(des,src,data, datalen) != SUCCESSFUL))
			{
				TRACE("dt_send err:del tab all");
		    }
			DelFSID(100);
		}
		else if((cmd_type == CMD_REQ) && (cmd_op == CMD_VERIFY_TAB))//Verify table data
		{
			fsid = data[2];
			data[0] = CMD_RTC;
			data[1] = CMD_VERIFY_TAB;
			datalen = 2;
			if ((dt_send(des,src,data, datalen) != SUCCESSFUL))
			{
				TRACE("dt_send err:veri");
		    }
		    DB_tab_check(fsid);
		}
	} //end of while
   	dt_exit();
	return 	SUCCESSFUL;
}

short DelFSID(int fsid)
{
	unsigned char msg[20],msg1[20],ret;
	int i;
	get_db_sys_param(&dsp);
	file_sys_cnt = DB_check_db(filesys);
	if(fsid>=NUMOFDBTABLE)
	{
		 sprintf(msg,"删除所有数据");
		 sprintf(msg1,"表吗?");
	}else
	{
		 sprintf(msg,"删除");
		 sprintf(msg1,"%s吗?",g_strTableName[fsid]);
	}
	
	DispStr_CE(0,0,msg,DISP_CENTER|DISP_CLRSCR);
	DispStr_CE(0,2,msg1,DISP_CENTER|DISP_CLRSCR);	
	DispStr_CE(0,2,"稍候...",DISP_CENTER|DISP_CLRSCR);
	
    	if(fsid>=NUMOFDBTABLE) 
    	{
    	   append_count_count_count(0); 
	   init_db();
	   for(i=0;i<NUMOFDBTABLE;i++) 
	      g_arr_total_exist[i] = 0;
    	} else {
        	if(ret=DB_erase_filesys(fsid)){
	        	sprintf(msg,"删除%s出错",g_strTableName[fsid]);
		        DispStr_CE(0,2,msg,DISP_CENTER|DISP_CLRSCR);	
	        	delay_and_wait_key( 5, EXIT_KEY_ALL, 0 );
	        	return FAILURE;
	        }else{
	        	g_arr_total_exist[fsid] = 0;
	        	if((fsid+1)==3) append_count_count_count(g_arr_total_exist[fsid]); 
		}
    	}
    	DispStr_CE(0,2,"删除成功",DISP_CENTER|DISP_CLRSCR);	
    	return SUCCESSFUL;
}


//---------------------------------------------------------------------------------------------
void order_dish_relay(){//加菜
	g_upld_client_mode1=2;
	order_dish();
	return 0;
}
void order_dish_leap(){//点菜
	g_upld_client_mode1=0;
	order_dish();

⌨️ 快捷键说明

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