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

📄 pctalk.c

📁 m68k手持机的通讯相关源码
💻 C
📖 第 1 页 / 共 2 页
字号:
//******************************************************************************************
//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[NUMOFDBTABLE];

short DelFSID(int fsid);
short dt_send_tab_data_doing(unsigned char des,unsigned char src,int fsid);
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);

unsigned long g_arr_total_exist[NUMOFDBTABLE];
short data_transmit()
{
	unsigned char cmd_op, cmd_type;
	unsigned short Acknowledge;
	int datalen;
	int fsid = 0;
	int ret;
	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);
	
RECONNECT:
	DispStr_CE(0,2,"等待连接...",DISP_CENTER|DISP_CLRSCR);
	DispStr_CE(0,4,"按F1键退出",DISP_CENTER);
	count_recv = 0;
	dt_init(0,115200);
	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>5) continue;
			
			ret = dt_send_tab_data_doing(des,src,fsid);
			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(10);
		}
		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) 
    	{

⌨️ 快捷键说明

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