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

📄 comm.cpp

📁 VC++串口编程教学源码,串口学习的好东西
💻 CPP
📖 第 1 页 / 共 2 页
字号:
				for(ci=0;ci<MAXBLOCK;ci++) 
					check+=bufp[ci]+(bufp[ci]&0x80?0xff00:0);
				templen-=MAXBLOCK;bufp+=MAXBLOCK;
			};
			if((templen-2)>0)
			{
				WriteCommBlock((LPSTR)bufp,templen-2);
				for(ci=0;ci<templen-2;ci++) 
					check+=bufp[ci]+(bufp[ci]&0x80?0xff00:0);
			}
			bufp+=templen-2;

			abIn[0]=check>>8;
			abIn[1]=check&0xff;
	
			WriteCommBlock((LPSTR)abIn,2);
			if(packf==0)
				bufp+=2;

			step=2;
			break;
		case 2: 
			old_step=step;
		    old_bufp=bufp;
			if(packf==0)
			{
				RecordNum++;
				SendCommMsg(CSM_RUNNING,RecordNum);
			}
			if(SendSYN(100))
				step=0;
			break;

		case 4: 
			old_step=step;
		    old_bufp=bufp;
			WriteCommBlock((LPSTR)BYE,3);
			step=5;
			break;
		case 5:			
			break;
		default:break;
		};
		}
		if((GetTickCount()-start)>MAXTIME)
		{
			SendCommMsg(CSM_TIMEOUT,0);  
			bRet=FALSE;
			goto finish;
		}
	}while((step<5)&&(bRet));

finish:
	free(buf);
    if(step==5)
	{
		bRet=TRUE;
	}
	else
		bRet=FALSE;
	return bRet;
}



BOOL CComm::Xml2Bin()
{

    FILE    *PdaFile;
    BOOL    bRet,bOpened;

	PdaFile=fopen(m_PdaFileName,"wb");
    if(PdaFile==NULL)
	{
		bRet=FALSE;
		goto finish;
	}

	m_pInXML=new CIn_XML;
	m_pInXML->Open(m_XmlFileName, bOpened);
	if (!bOpened)
	{
		fclose(PdaFile);
		delete m_pInXML;
		SendCommMsg(CSM_INITFAILED,0);
		return FALSE;
	}

    
	XmlPhone2Bin(PdaFile);
	XmlMemo2Bin(PdaFile);
	XmlNote2Bin(PdaFile);
	XmlSche2Bin(PdaFile);
	

	fwrite("\0\0\0\x1\0\x1",1,6,PdaFile);
	fclose(PdaFile);

finish:
	m_pInXML->Close();

	delete m_pInXML;
	m_pInXML = NULL;

	return TRUE;
}


BOOL CComm::XmlPhone2Bin(FILE* PdaFile)
{
	return TRUE;
}


BOOL CComm::XmlSche2Bin(FILE* PdaFile)
{
	return TRUE;
}

BOOL CComm::XmlNote2Bin(FILE* PdaFile)
{
	return TRUE;
}


BOOL CComm::XmlMemo2Bin(FILE* PdaFile)
{
	return TRUE;
}



BOOL CComm::Bin2Xml()
{
    FILE               *PdaFile;
	RECHEAD1		   Rechead1;
	RECHEAD2           Rechead2;
	unsigned short     nRecLen;
	bool               bRet=TRUE;

	m_pOutXML=new COut_XML;

	int nStatus;
	m_pOutXML->Open(m_XmlFileName, nStatus);


	if (!nStatus) 
	{
		SendCommMsg(CSM_INITFAILED,0);
		delete m_pOutXML;
		return FALSE;
	}

	PdaFile=fopen(m_PdaFileName,"rb");
	if(PdaFile==NULL)
	{
		SendCommMsg(CSM_INITFAILED,0);
		delete m_pOutXML;
		return FALSE;
	}

	PhoneCataFlag=0;
	MemoCataFlag=0;
	ScheCataFlag=0;
	NoteCataFlag=0;

	do
	{
		fread(&Rechead1,sizeof(RECHEAD1),1,PdaFile);
		if(memcmp(Rechead1.NoUse1,"\0\0\0\01\0\01",6)==0)
		{
			break;
		}
		ExchangeHILO(*(unsigned short*)(Rechead1.RecLen),
			(unsigned short*)(Rechead1.RecLen));
		*(unsigned short*)(Rechead1.RecLen)+=2;
		BYTE * const pPdaRec=new BYTE[*(WORD*)(Rechead1.RecLen)];
		nRecLen=fread(pPdaRec,1,*(WORD*)(Rechead1.RecLen),PdaFile);
		if(*(WORD*)(Rechead1.RecLen)!=nRecLen)
		{
			bRet=FALSE;
			break;
		}
		Rechead2=*(RECHEAD2 *)pPdaRec;
		BYTE* pTemp=pPdaRec+sizeof(RECHEAD2);
		ExchangeHILO(*(unsigned short*)(Rechead2.TypeInfo),
			(unsigned short*)(Rechead2.TypeInfo));
		switch(*(unsigned short*)(Rechead2.TypeInfo))
		{
		//电话
		case PHONE_TYPE:
			BinPhone2Xml(pTemp);
			break;
			
		//记事
		case MEMO_TYPE:
			BinMemo2Xml(pTemp);
			break;
			
		//便笺
		case NOTE_TYPE:
			BinNote2Xml(pTemp);
			break;

		//日程
		case SCHEDULE_TYPE:
			BinSche2Xml(pTemp);
			break;

		//该款Pda不支持其他格式
		default:
			bRet=FALSE;
			break;

		}
		delete []pPdaRec;

	}while(bRet);
	
	fclose(PdaFile);

	m_pOutXML->Close();

	delete m_pOutXML;
	m_pOutXML = NULL;

	return bRet;
}	


BOOL CComm::BinMemo2Xml(BYTE *pPdaRec)
{	
	return TRUE;
}




BOOL CComm::BinPhone2Xml(BYTE* pPdaRec)
{
	return TRUE;
}

BOOL CComm::BinSche2Xml(BYTE *pPdaRec)
{
	return TRUE;
}


BOOL CComm::BinNote2Xml(BYTE *pPdaRec)
{
	return TRUE;
}


BYTE CComm::PcSymbolToPda(BYTE pcSym[2])
{
	unsigned char *changeSet;
	short i;
	
	changeSet=PdaSym;
	
	if(pcSym[0]==0xa1)
	{
		for(i=0;i<SYMNUMBER;i++)
			if(*((unsigned short *)pcSym)==pcChar[i])
				return changeSet[i];
		if((pcSym[1]==0xa1)||(pcSym[1]==0xab))
			return 0x20;
		return 0xff;
	}
    if(pcSym[0]==0xa3)
	{
		if(pcSym[1]==0xa4)
		    return 0xa5;
        else if((pcSym[1]>=0xb0)&&(pcSym[1]<=0xb9))
			return pcSym[1]-0xb0+0x30;
		else if((pcSym[1]>=0xe1)&&(pcSym[1]<=0xfa))
            return pcSym[1]-0xe1+0x61;
		else if(pcSym[1]==0xa8)
			return 0x28;
		else if(pcSym[1]==0xa9)
			return 0x29;
		else if(pcSym[1]==0xba)
			return 0x3a;
		else if(pcSym[1]==0xbf)
			return 0x3f;
		else if(pcSym[1]==0xac)
			return 0x2c;
        else if(pcSym[1]==0xa1)
			return 0x21;
		else if((pcSym[1]==0xfb)||(pcSym[1]==0xfd)||(pcSym[1]==0xbb)||
				(pcSym[1]==0xfc)||(pcSym[1]==0xe0))
			return 0x20;
		else
			return pcSym[1]-161+'!';
	}
    if((pcSym[0]==0xa6)&&(pcSym[1]==0xe4))
		return 0x20;

	return 0xff;
}

unsigned short CComm::PdaSymbolToPc(BYTE PdaSymbol)
{
	BYTE  *changeSet;
	short i;

	changeSet=PdaSym;

	for(i=0;i<SYMNUMBER;i++)
		if(changeSet[i]==PdaSymbol)
			return pcChar[i];
	return 0xffff;
}

WORD CComm::PdaToPC( BYTE *target, BYTE *source,WORD RecLen)
{
	WORD  cLen,k,tmp;
	
	cLen=0;
    for(k=0;k<RecLen;k+=2)
	{
		if(source[k]==0)
		{
			if(source[k+1]==0x0a)
			{
				target[cLen]='\x0d';
                target[cLen+1]='\x0a';
				cLen+=2;
			}
            else if((tmp=PdaSymbolToPc(source[k+1]))!=0xffff)
			{
				*((unsigned short *)(target+cLen))=tmp;
				cLen+=2;
			}
			else
			{
				target[cLen]=source[k+1];
				cLen++;
			}
		}
		else
		{
			target[cLen]=source[k];
			target[cLen+1]=source[k+1];
			cLen+=2;
		}
	}
	return cLen;
}

WORD CComm::PCToPda( BYTE *target, BYTE *source,WORD RecLen)
{
	WORD  cLen,k;
	BYTE  c;

	cLen=0;
    for(k=0;k<RecLen;)
	{
		if(source[k]&0x80)
		{//汉字
			c=PcSymbolToPda(source+k);
			if(c!=0xff)
			{
				target[cLen]=0;
				target[cLen+1]=c;
			}
			else
			{
				target[cLen]=source[k];
				target[cLen+1]=source[k+1];
			}
			k+=2;
		}
		else if((source[k]==0x0d) && (source[k+1]==0x0a))
		{
				target[cLen]=0;
				target[cLen+1]=0x0a;
				k=k+2;
		}
		else
		{
				target[cLen]=0;
				target[cLen+1]=source[k];
				k++;
		 }
		cLen+=2;
	}
	return cLen;
}




BOOL CComm::WaitSYN(DWORD dwSleep)
{
	DWORD		nLength;
	DWORD       start;
	DWORD       dwErrorFlags;
	COMSTAT     ComStat;
	BOOL		bTimeout;

	nLength=0;
	start=GetTickCount();

	bTimeout=FALSE;

	while((nLength==0)&&(!bTimeout)&&(m_bConnected))
	{
		if(dwSleep) Sleep(dwSleep);
		ClearCommError(m_idComDev, &dwErrorFlags, &ComStat);
		nLength=ComStat.cbInQue;
		bTimeout = (GetTickCount()-start>=SYNTIME);
	}

	if (bTimeout) {
		SendCommMsg(CSM_TIMEOUT,0);
		return FALSE;
	}

	if (!m_bConnected) {                   
		return FALSE;
	}
	return TRUE;
}

BOOL CComm::SendSYN(DWORD dwSleep)
{
	BYTE        SYN[1]={0x1}; 
	DWORD		nLength;
	DWORD       start;
	DWORD       dwErrorFlags;
	COMSTAT     ComStat;
	BOOL		bTimeout;

	nLength=0;
	start=GetTickCount();
	bTimeout=FALSE;
	while((nLength==0) && (!bTimeout)&&(m_bConnected))
	{
		WriteCommBlock((LPSTR)SYN,1);
		ClearCommError( m_idComDev, &dwErrorFlags, &ComStat ) ;
		nLength=ComStat.cbInQue;
		bTimeout = (GetTickCount()-start>=SYNTIME);
		if((dwSleep)&&(!nLength))
			Sleep(dwSleep);
	}
	if (bTimeout) {
		SendCommMsg(CSM_TIMEOUT,0);
		return FALSE;
	}

	if (!m_bConnected)
	{
		return FALSE;
	}
	return TRUE;
}

⌨️ 快捷键说明

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