int oemp_SendData(WORD wDevID, BYTE* pBuf, int nSize)
{
	WORD wChkSum = 0;
	BYTE Buf[4], *pCommBuf;
	int nSentBytes;

	if (pBuf == NULL)
		return PKT_PARAM_ERR;

	Buf[0] = (BYTE)STX3;
	Buf[1] = (BYTE)STX4;
	*((WORD*)(&Buf[SB_OEM_HEADER_SIZE])) = wDevID;

	wChkSum = oemp_CalcChkSumOfDataPkt(Buf, SB_OEM_HEADER_SIZE + SB_OEM_DEV_ID_SIZE);
	wChkSum += oemp_CalcChkSumOfDataPkt(pBuf, nSize);

	pCommBuf = new BYTE[nSize + SB_OEM_HEADER_SIZE + SB_OEM_DEV_ID_SIZE + SB_OEM_CHK_SUM_SIZE];
	memcpy(pCommBuf, Buf, SB_OEM_HEADER_SIZE + SB_OEM_DEV_ID_SIZE);
	memcpy(pCommBuf + SB_OEM_HEADER_SIZE + SB_OEM_DEV_ID_SIZE, pBuf, nSize);
	*(WORD*)(pCommBuf + nSize + SB_OEM_HEADER_SIZE + SB_OEM_DEV_ID_SIZE) = wChkSum;

	nSentBytes = comm_send(pCommBuf, nSize + SB_OEM_HEADER_SIZE + SB_OEM_DEV_ID_SIZE + SB_OEM_CHK_SUM_SIZE, gCommTimeOut);
	if (nSentBytes != nSize + SB_OEM_HEADER_SIZE + SB_OEM_DEV_ID_SIZE + SB_OEM_CHK_SUM_SIZE)
	{
		if (pCommBuf)
			delete pCommBuf;
		return PKT_COMM_ERR;
	}

	if (pCommBuf)
		delete pCommBuf;

	return 0;
}
示例#2
0
int oemp_ReceiveData( WORD wDevID, BYTE* pBuf, int nSize )
{
    WORD wReceivedChkSum, wChkSum;
    BYTE Buf[4],*pCommBuf;
    int nReceivedBytes;

    if( pBuf == NULL )
        return PKT_PARAM_ERR;



    pCommBuf = new BYTE[nSize+SB_OEM_HEADER_SIZE+SB_OEM_DEV_ID_SIZE+SB_OEM_CHK_SUM_SIZE];
    nReceivedBytes = comm_recv( pCommBuf, nSize+SB_OEM_HEADER_SIZE+SB_OEM_DEV_ID_SIZE+SB_OEM_CHK_SUM_SIZE, gCommTimeOut );
    if( nReceivedBytes != nSize+SB_OEM_HEADER_SIZE+SB_OEM_DEV_ID_SIZE+SB_OEM_CHK_SUM_SIZE )
    {
        if(pCommBuf)
            delete pCommBuf;
        return PKT_COMM_ERR;
    }
    memcpy(Buf, pCommBuf, SB_OEM_HEADER_SIZE+SB_OEM_DEV_ID_SIZE);
    memcpy(pBuf, pCommBuf+SB_OEM_HEADER_SIZE+SB_OEM_DEV_ID_SIZE, nSize);
    wReceivedChkSum = *(WORD*)(pCommBuf+nSize+SB_OEM_HEADER_SIZE+SB_OEM_DEV_ID_SIZE);
    if(pCommBuf)
        delete pCommBuf;
    ////////////// pc end ///////////////

    if( ( Buf[0] != STX3 ) ||
            ( Buf[1] != STX4 ) )
    {
        return PKT_HDR_ERR;
    }

    if( *((WORD*)(&Buf[SB_OEM_HEADER_SIZE])) != wDevID )
        return PKT_DEV_ID_ERR;

    wChkSum = oemp_CalcChkSumOfDataPkt( Buf, SB_OEM_HEADER_SIZE+SB_OEM_DEV_ID_SIZE  );
    wChkSum += oemp_CalcChkSumOfDataPkt( pBuf, nSize );

    if( wChkSum != wReceivedChkSum )
        return PKT_CHK_SUM_ERR;

    return 0;
}