bluetooth/btstack/rfcomm/Rfcommfcs.cpp
changeset 0 29b1cd4cb562
child 51 20ac952a623c
equal deleted inserted replaced
-1:000000000000 0:29b1cd4cb562
       
     1 // Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
       
     2 // All rights reserved.
       
     3 // This component and the accompanying materials are made available
       
     4 // under the terms of "Eclipse Public License v1.0"
       
     5 // which accompanies this distribution, and is available
       
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     7 //
       
     8 // Initial Contributors:
       
     9 // Nokia Corporation - initial contribution.
       
    10 //
       
    11 // Contributors:
       
    12 //
       
    13 // Description:
       
    14 // Calculation for the RFCOMM (TS07.10) FCS
       
    15 // 
       
    16 //
       
    17 
       
    18 #include <e32std.h>
       
    19 #include "rfcommfcs.h"
       
    20 #include "debug.h"
       
    21 
       
    22 #pragma warning( disable : 4244) // Conv from int to char
       
    23 
       
    24 /*
       
    25   This table is lifted from the TS07.10 spec in the appendices.
       
    26 */
       
    27 
       
    28 static const TUint8 crctable[256] = { //reversed, 8-bit, poly=0x07
       
    29 0x00, 0x91, 0xE3, 0x72, 0x07, 0x96, 0xE4, 0x75, 0x0E, 0x9F, 0xED, 0x7C, 0x09, 0x98, 0xEA, 0x7B,
       
    30 0x1C, 0x8D, 0xFF, 0x6E, 0x1B, 0x8A, 0xF8, 0x69, 0x12, 0x83, 0xF1, 0x60, 0x15, 0x84, 0xF6, 0x67,
       
    31 0x38, 0xA9, 0xDB, 0x4A, 0x3F, 0xAE, 0xDC, 0x4D, 0x36, 0xA7, 0xD5, 0x44, 0x31, 0xA0, 0xD2, 0x43,
       
    32 0x24, 0xB5, 0xC7, 0x56, 0x23, 0xB2, 0xC0, 0x51, 0x2A, 0xBB, 0xC9, 0x58, 0x2D, 0xBC, 0xCE, 0x5F,
       
    33 0x70, 0xE1, 0x93, 0x02, 0x77, 0xE6, 0x94, 0x05, 0x7E, 0xEF, 0x9D, 0x0C, 0x79, 0xE8, 0x9A, 0x0B,
       
    34 0x6C, 0xFD, 0x8F, 0x1E, 0x6B, 0xFA, 0x88, 0x19, 0x62, 0xF3, 0x81, 0x10, 0x65, 0xF4, 0x86, 0x17,
       
    35 0x48, 0xD9, 0xAB, 0x3A, 0x4F, 0xDE, 0xAC, 0x3D, 0x46, 0xD7, 0xA5, 0x34, 0x41, 0xD0, 0xA2, 0x33,
       
    36 0x54, 0xC5, 0xB7, 0x26, 0x53, 0xC2, 0xB0, 0x21, 0x5A, 0xCB, 0xB9, 0x28, 0x5D, 0xCC, 0xBE, 0x2F,
       
    37 0xE0, 0x71, 0x03, 0x92, 0xE7, 0x76, 0x04, 0x95, 0xEE, 0x7F, 0x0D, 0x9C, 0xE9, 0x78, 0x0A, 0x9B,
       
    38 0xFC, 0x6D, 0x1F, 0x8E, 0xFB, 0x6A, 0x18, 0x89, 0xF2, 0x63, 0x11, 0x80, 0xF5, 0x64, 0x16, 0x87,
       
    39 0xD8, 0x49, 0x3B, 0xAA, 0xDF, 0x4E, 0x3C, 0xAD, 0xD6, 0x47, 0x35, 0xA4, 0xD1, 0x40, 0x32, 0xA3,
       
    40 0xC4, 0x55, 0x27, 0xB6, 0xC3, 0x52, 0x20, 0xB1, 0xCA, 0x5B, 0x29, 0xB8, 0xCD, 0x5C, 0x2E, 0xBF,
       
    41 0x90, 0x01, 0x73, 0xE2, 0x97, 0x06, 0x74, 0xE5, 0x9E, 0x0F, 0x7D, 0xEC, 0x99, 0x08, 0x7A, 0xEB,
       
    42 0x8C, 0x1D, 0x6F, 0xFE, 0x8B, 0x1A, 0x68, 0xF9, 0x82, 0x13, 0x61, 0xF0, 0x85, 0x14, 0x66, 0xF7,
       
    43 0xA8, 0x39, 0x4B, 0xDA, 0xAF, 0x3E, 0x4C, 0xDD, 0xA6, 0x37, 0x45, 0xD4, 0xA1, 0x30, 0x42, 0xD3,
       
    44 0xB4, 0x25, 0x57, 0xC6, 0xB3, 0x22, 0x50, 0xC1, 0xBA, 0x2B, 0x59, 0xC8, 0xBD, 0x2C, 0x5E, 0xCF
       
    45 };
       
    46 
       
    47 
       
    48 TUint8 CalcFCS(const TUint8* aData, TInt aLen)
       
    49 	/**
       
    50 	   Calculates the FCS over data starting at aData and of length
       
    51 	   aLen.  Uses the algorithm from the TS07.10 spec.
       
    52 	**/
       
    53 	{
       
    54 	TUint8 fcs=0xff;
       
    55 	
       
    56 	while(aLen--)
       
    57 		{
       
    58 		fcs=crctable[fcs^*aData++];
       
    59 		}
       
    60 	
       
    61 	fcs=~fcs;
       
    62 	return fcs;
       
    63 	}
       
    64 
       
    65 TBool CheckFCS(const TUint8* aData, TInt aLen, TUint8 aFCS)
       
    66     /**
       
    67 	   Check a received FCS.
       
    68 	 **/   
       
    69 	{
       
    70 	TUint8 fcs=0xFF;
       
    71 	while (aLen--)
       
    72 		{
       
    73 		fcs=crctable[fcs^*aData++];
       
    74 		}
       
    75     /*Ones complement*/
       
    76 	fcs=crctable[fcs^aFCS];
       
    77 // log "PDU FCS:" aFCS - Shehla
       
    78 	RFQBLOG(KBlogTypeFCS, Log(KBlogActualFCS, aFCS));
       
    79 // log this as "Calculated FCS (should be 0xCF): " fcs - Shehla
       
    80 	RFQBLOG(KBlogTypeFCS, Log(KBlogComputedFCS, fcs));
       
    81     /*0xCF is the reversed order of 11110011.*/
       
    82 	TBool result=EFalse; //- Shehla
       
    83 	if (fcs==0xCF)
       
    84 		//return ETrue;
       
    85 		result=ETrue;
       
    86 	else 
       
    87 		//return EFalse;
       
    88 		result=EFalse;
       
    89 //log "FCS Computation" result - Shehla
       
    90 	RFQBLOG(KBlogTypeFCS, Log(KBlogComparedFCS, result));
       
    91 
       
    92 	return result;
       
    93 }