1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
| *************************************************************************************************/
/* */
/* */
/* Nom : gestion_trame.cpp */
/* Date : 22/11/05 */
/* Descriptif : Fonction de gestion de trame : */
/* - Creation, emission , reception */
/* - Contrôle intégrité de la trame */
/* */
/*************************************************************************************************/
#include <windows.h>
#include <winbase.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "gestion_trame.h"
//Variable Globale
char cData_Block[1000];
char *pCRC;
char toto[2];
char *CalculBCC(char *buffer,int iDeb,int iFin)
{
BYTE PolyLSB = 0x01;
BYTE PolyMSB = 0xA0;
BYTE ResultLSB,ResultMSB,ResultLSBBuf,ResultMSBBuf;
char pWork[2];
int n,i;
BOOL XorFlag;
pCRC = toto;
ResultLSB=0;
ResultMSB=0;
pWork[1]= 0 ;
for(n=iDeb;n<=iFin;n++)
{
ResultLSB = ResultLSB ^ buffer[n];
for(i=1;i<=8;i++)
{
ResultLSBBuf = ResultLSB;
ResultLSB = ResultLSB >> 1;
if(ResultLSBBuf != (ResultLSB << 1))
XorFlag = TRUE;
else
XorFlag = FALSE;
ResultMSBBuf = ResultMSB;
ResultMSB = ResultMSB >> 1;
if(ResultMSBBuf != (ResultMSB << 1))
ResultLSB = ResultLSB | 0x80;
if(XorFlag)
{
ResultLSB = ResultLSB ^ PolyLSB;
ResultMSB = ResultMSB ^ PolyMSB;
}
}
}
pCRC[0]=ResultMSB;
pCRC[1]=ResultLSB;
return pCRC;
} |
Partager