📄 pctalk.c.bak
字号:
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, 0, 0 );
return FAILURE;
}else {
g_arr_total_exist[fsid] = 0;
}
}
DispStr_CE(0,2,"删除成功",DISP_CENTER|DISP_CLRSCR);
return SUCCESSFUL;
}
short dt_send_tab_data_doing(unsigned char des,unsigned char src,int fsid)
{
unsigned char msg[30];
int datalen;
int i,j;
int rec_size;
unsigned long count,count1;
char *recwfbuf;
char flag;
int NUM_TO_SEND;
int pos;
unsigned long count_send=0;
unsigned char data[MAX_NUMBER_DT_DATA+30];
count_db_toal(fsid,&count,&count1);//注意counter1和counter的差别
sprintf(msg,"发送表%d共%d条...",fsid+1,count);
DispStr_CE(0,0,msg,DISP_POSITION|DISP_CLRSCR);
data[0] = CMD_RTD;
data[1] = CMD_RECV_DATA;
data[2] = fsid;
count_send = 0;
rec_size = g_rec_size[fsid];
NUM_TO_SEND = (MAX_NUMBER_DT_DATA - 10)/rec_size;
for (i=0; i < count1/NUM_TO_SEND; i ++)//!!!这里必须是counter1!!!!
{
sprintf(msg, "%3d", (i+1)*NUM_TO_SEND);
DispStr_CE(2,2,msg,DISP_POSITION);
datalen = 3;
for(j=0,pos=0;j<NUM_TO_SEND;j++)
{
recwfbuf = (char *)DB_jump_to_record(fsid, i*NUM_TO_SEND+j, &flag);
//if(flag) continue;
//TRACE("flag:%d ,%d",flag,i);
memcpy(&data[3+pos*rec_size],recwfbuf,rec_size);
datalen += rec_size;
pos++;
count_send++;
}
if(dt_send(des,src,data, datalen) != SUCCESSFUL)
{
TRACE("dt_send err:send doing");
return FAILURE;
}
}
datalen = 3;
if(count%NUM_TO_SEND)
{
for(j=0,pos=0;j<count1%NUM_TO_SEND;j++)//!!!这里必须是counter1!!!!
{
recwfbuf = (char*)DB_jump_to_record(fsid,(count/NUM_TO_SEND)*NUM_TO_SEND+j,&flag);
if(flag) continue;
memcpy(&data[3+pos*rec_size],recwfbuf,rec_size);
datalen += rec_size;
pos++;
count_send++;
}
if(dt_send(des,src,data, datalen) != SUCCESSFUL)
{
TRACE("dt_send err:send doing1");
return FAILURE;
}
}
//数据记录已发送完毕
data[0] = CMD_RTC;
data[1] = CMD_RECV_DATA;
datalen = 2;
if ((dt_send(des,src,data, datalen) != SUCCESSFUL))
{
TRACE("dt_send err:send doing2");
return FAILURE;
}
sprintf(msg,"传输完毕共%d条", count_send);
DispStr_CE(0,2,msg,DISP_POSITION);
return SUCCESSFUL;
}
//pos 请求发送数据,在循环查询时使用,该函数只是在无线传输的过程中使用
short dt_send_tab_data(unsigned char des,unsigned char src,unsigned char fsid)
{
unsigned long count;
short ret;
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);
EnKeyInt(); //开键盘中断
if(ret == SUCCESSFUL)
{
} 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;
}
// 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,i,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>5))
{
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]))
{
delay_and_wait_key( 10, EXIT_KEY_ALL, 0 );
DispStr_CE(0,0,"空间不足!",DISP_CENTER|DISP_CLRSCR);
DispStr_CE(0,2,"添加记录失败!",DISP_CENTER);
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]);
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;
}
}
}
}
}
//************************************************************************************************
//End
//************************************************************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -