Exemplo n.º 1
0
/**
 *	@sn int SendData(char *data, int data_len)
 *	@brief the data is formated to transmition protocol STR + DATA LENGTH(2 bytes) + DATA(LLVAR) + ETX + LRC(STR...ETX)
 *	end sent at the end.
 *	@param data : the data to be transmited
 *	@param data_len : the length of the data to be transmited
 *	@return @li FAIL
 *		 @li SUCC
 *	@sa 
 */
int SendData(char *data, int data_len)
{
	char buffer[PACK_BUF_LEN];

	if((data_len < 0) || (data_len > (PACK_BUF_LEN - 5)))
	{
		return FAIL;
	}
	memset(buffer, 0, sizeof(buffer));
	//pack the data phase
	//add
	buffer[0] = TLVP_STX;
	// Add data length
	buffer[1] = ByteToBcd(data_len/100);
	buffer[2] = ByteToBcd(data_len%100);
	//Add data
	memcpy(&buffer[3], data, data_len);
	//Add ETC
	buffer[3 + data_len] = TLVP_ETX;
	//Add LRC
	buffer[4 + data_len] = LRC(buffer, 4 + data_len);
	if(portwrite(AUX1, 5 + data_len, buffer) != SUCC)
	{
		return FAIL;
	}
	return SUCC;
}
Exemplo n.º 2
0
int Board_Txn(char* pszData, int* pnDataLen, char cCommandReq, char cCommandResp)
{
	char szData[BOARD_MAX_SIZE];
	int nDataLen = 0;
	int nRet = 0;
	int nLen = 0;
//	static char cFlag = 0;
	STCOMMPARAM stPubCommParam;


	memset(szData, 0, sizeof(szData));
	memcpy(szData, pszData, *pnDataLen);
	Board_Pack(cCommandReq, szData, pnDataLen);
#if 0
	if (!cFlag)
	{
		nRet = initaux(BOARD_PORT, BPS115200, DB8|STOP1|NP);
		if (nRet != 0)
		{
			PubMsgDlg("初始化串口", "初始化串口失败", 3, 10);
			return APP_FAIL;
		}
		cFlag = 1;
	}
#endif

	memset(&stPubCommParam, 0, sizeof(stPubCommParam));
	stPubCommParam.cCommType = COMMTYPE_PORT;
	stPubCommParam.ConnInfo.stPortParam.nAux = BOARD_PORT;
	strcpy(stPubCommParam.ConnInfo.stPortParam.szAttr, "115200");
	stPubCommParam.cPreDialFlag = 0;
	stPubCommParam.nTimeOut = 10;
	stPubCommParam.cIsSupportQuitRecv = 1; // 1接收的时候可退出

	nRet = PubCommInit(&stPubCommParam);
	if (nRet != APP_SUCC)
	{
		return APP_FAIL;
	}
	SetControlCommInit();/**<要求需要初始化通讯模块*/
#if 0
	clrportbuf(BOARD_PORT, 0);
	clrportbuf(BOARD_PORT, 1);
	nRet = portwrite(BOARD_PORT, *pnDataLen, szData);
	if (nRet < 0)
	{
		return APP_FAIL;
	}
#endif

	PubCommConnect();

	if(PubCommWrite(szData, *pnDataLen) == APP_FAIL)
	{
		PubMsgDlg(NULL, "串口数据发送失败", 3, 60);
		PubCommHangUp();
		return APP_FAIL;
	}

	
	memset(szData, 0, sizeof(szData));
	while(1)
	{
		szData[0] = 0;
		nRet = PubCommRead((char *)szData, 1, &nLen);
		if (APP_QUIT == nRet)
		{
			PubCommHangUp();
			return APP_TIMEOUT;
		}
		if (nRet == APP_FAIL)
		{
			PubCommHangUp();
			return APP_QUIT;
		}
		if (nLen != 1)
		{
			break;
		}
		if (szData[0] == STX)
		{
			break;
		}
	}
	if (szData[0] == STX)
	{
		nRet = PubCommRead((char *)szData+1, 2, &nLen);
		if (APP_SUCC != nRet)
		{
			PubCommHangUp();
			return APP_QUIT;
		}
		if (nLen != 2)
		{
			PubMsgDlg("接收", "接收失败1", 3, 10);
			PubCommHangUp();
			return APP_FAIL;
		}
		nDataLen = 2;
		PubC2ToInt((unsigned int *)&nDataLen, (unsigned char *)szData + 1);
		{
			int nOff=0;
			int nTmpLen = 0;
			nTmpLen = nDataLen + 1;
			while(1)
			{
				if(nLen <= MAX_RECV)
				{
					nRet = PubCommRead((char *)szData+3+nOff,nTmpLen, &nLen);
					if (APP_SUCC != nRet)
					{
						PubCommHangUp();
						return APP_QUIT;
					}
					if (nLen != nTmpLen)
					{
						PubCommHangUp();
						return APP_FAIL;
					}
					break;
				}
				else
				{
					nRet = PubCommRead((char *)szData+3+nOff,MAX_RECV, &nLen);
					if (APP_SUCC != nRet)
					{
						PubCommHangUp();
						return APP_QUIT;
					}
					if (nLen != MAX_RECV)
					{
						PubCommHangUp();
						return APP_FAIL;
					}
					nLen -= MAX_RECV;
					nOff += MAX_RECV;
				}
			}
		}
/*
		nRet = portread(BOARD_PORT, nDataLen+1, (char *)szData+3, nTimeOut);
		if (nRet == QUIT)
		{
			return APP_QUIT;
		}
		if (nRet != nDataLen+1)
		{
			return APP_FAIL;
		}
*/
	}
	else
	{

		PubMsgDlg("接收", "接收失败3", 3, 10);
		PubCommHangUp();
		return APP_FAIL;
	}
	*pnDataLen = nDataLen+4;

{
//	char szTemp[BOARD_MAX_SIZE*2];
//	PubHexToAsc((unsigned char*)szData, (*pnDataLen)*2, 0, (unsigned char*)szTemp);
	}

	Board_UnPack(szData, (unsigned int *)pnDataLen);
{
//	char szTemp[BOARD_MAX_SIZE*2];
//	PubHexToAsc((unsigned char*)szData, (*pnDataLen)*2, 0, (unsigned char*)szTemp);
	}

	PubCommHangUp();
	if((cCommandReq == 0xA2) && szData[0] == 0xC2)
	{
		
		return APP_QUIT;
	}
	else if(szData[0] != cCommandResp)
	{
		return APP_FAIL;
	}
	(*pnDataLen)--;

	memcpy(pszData, &szData[1], *pnDataLen);
	return APP_SUCC;
}