📄 pctalk.c.bak
字号:
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 + -