irda/irdastack/SSRC/common/IR_CONST.H
author Pat Downey <patd@symbian.org>
Wed, 01 Sep 2010 12:38:54 +0100
branchRCL_3
changeset 24 e9b924a62a66
parent 0 29b1cd4cb562
permissions -rw-r--r--
Revert incorrect RCL_3 drop: Revision: 201031 Kit: 201035

// Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
// All rights reserved.
// This component and the accompanying materials are made available
// under the terms of "Eclipse Public License v1.0"
// which accompanies this distribution, and is available
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
//
// Initial Contributors:
// Nokia Corporation - initial contribution.
//
// Contributors:
//
// Description:
//

/**
 @file
 @internalComponent
*/

#if !defined(__IR_CONST_H__)
#define __IR_CONST_H__

#include <es_prot.h>
#include <d32comm.h>
#include "es_prot_internal.h"


// P&S key used to disable sending of discovery responses.
const TUint KIrdaDiscoveryResponseSuppressor = 0x1028279f;

// Enum used for Discovery Response Suppressor key
enum TDiscoveryResponseSuppressorStatus
	{
	EAllowDiscoveryResponses,
	ESuppressDiscoveryResponses,
	};

//#define _MKLOG
//#define __TRACEWIN__  // For tracewin logging window

//#################### PRT CONSTANTS ###########################

const TUint KIrdaMinHeapSize=0x0400;
const TUint KIrdaMaxHeapSize=0x4000;
const TUint KIrdaSenderPriority=ECommTransmitPriority;
const TUint KIrdaReceiverPriority=ECommReceivePriority;

const TUint32 KIrdaAddrNone=0x00000000;
// Version numbers for IrDA
const TUint KIrdaMajor=1;  // For major ROM releases
const TUint KIrdaMinor=0;  // For minor ROM releases
const TUint KIrdaBuild=205; // This is the overall Version number

const TUint KIrdaDatagramServiceInfo=
  KSIReliable|KSIDatagram|KSIGracefulClose|KSIUrgentData|KSIBroadcast|KSIQOS|KSIConnectData;

const TUint8 KDefaultDiscoverySlots=6;
const TUint8 KDefaultTinyTPCredit=4;

const TUint KIrdaDefaultSendBufSize=64;
const TUint KIrdaDefaultRecvBufSize=64;
/* This is the amount of heap space we alloc for irSender and irReceiver
frames WITHOUT allowing for the extra space required for byte stuffing */
/********* Frame sizes - INCLUDES the size of the FCS field ********/
const TUint KDiscoveryCMDFrameSize=16;       /* A+C+1+4+4+1+1+1+FCS */
const TUint KEndOfDiscoveryCMDFrameSize=19;  /* A+C+1+4+4+1+1+1+3+FCS */
const TUint KDiscoveryRSPFrameSize=19;       /* A+C+1+4+4+1+1+1+3+FCS */
const TUint KTESTFrameSize=36;               /* A+C+4+4+24+FCS */
const TUint KSNRMFrameSize=34;               /* A+C+4+4+1+21+FCS */
const TUint KFRMRFrameSize=7;                /* A+C+1+1+1+FCS */
const TUint KDISCFrameSize=4;                /* A+C+FCS */
const TUint KUAfromDISCFrameSize=12;         /* A+C+4+4+FCS */
const TUint KUAfromSNRMFrameSize=33;         /* A+C+4+4+21+FCS */

//
const TUint KDMFrameSize=4;                  /* A+C+FCS & no info field */
const TUint KRRFrameSize=4;                  /* A+C+FCS */
const TUint KREJFrameSize=4;                 /* A+C+FCS */
const TUint KRDFrameSize=4;                  /* A+C+FCS */
const TUint KRNRMFrameSize=4;                /* A+C+FCS */
const TUint KRNRFrameSize=4;                 /* A+C+FCS */
const TUint16 KInitFCS=0xffff;               /* Initial FCS value for CRC */
const TUint16 KGoodFCS=0xf0b8;               /* Good final FCS value for CRC */

/************************** Timeouts ****************************/
const TUint KSlotTimeout=110;                /* 60ms */
const TUint KMediaBusyTimeout=500;           /* 500ms */
const TUint KIrmuxTimeout=2000;              /* 2 secs */
const TUint KIrmuxSAPTimeout=2000;           /* 2 secs */
const TUint KIrmuxMonitorTimeout=2000;       /* 2 secs */
const TUint KMilliSecondFactor=1000;         /* ms to microsec */

/********* Frame destroy defines - immediate or delayed? ********/
const TUint KDataFrame=1;
const TUint KConnectingAsPrimary=1;          /* Trying to change baud up */
const TUint KConnectingAsSecondary=2;
const TUint KDisconnecting=3;                /* Trying to change baud down */
const TUint KDisconnectOnTimeout=4;          /* Timed out */

/***************** IRLAP DEVICE ADDRESS CONSTANTS ****************/
const TUint8 KEOFMask=0xc1;                  /* End of frame char */
const TUint8 KBOFMask=0xc0;                  /* Start of frame char */
const TUint8 KAdditionalBOFMask=0xff;        /* Additional BOF=0xff */
const TUint8 KESCMask=0x7d;                  /* Byte stuff char mask */
const TUint8 KByteStuffMask=0x20;            /* Byte stuff:OR with this */

/*************** IRLAP DEVICE ADDRESS CONSTANTS ********************/
const TUint KBroadcastDevAddrMask=0xffffffff;
const TUint KNullDevAddrMask=0x00000000;
const TUint KDevAddrLength=4;

/*************** IRLAP ADDRESS FIELD CONSTANTS *********************/
const TUint KAddressFieldOffset=0;
const TUint8 KCRMask=0x01;                   /* 00000001 - mask in the C/R bit */
const TUint8 KConnAddrMask=0xfe;             /* 11111110 - mask off C/R bit */
const TUint8 KBroadcastConnAddrMask=0xfe;    /* 11111110 - broadcast connAddr */
const TUint8 KNullConnAddrMask=0x00;         /* 00000000 - null connAddr */
const TUint8 KMaxConnAddrMask=0x7f;          /* 01111111 - need to shl this by 1 */

/*************** IRLAP CONTROL FIELD CONSTANTS *********************/
const TUint8 KControlFieldOffset=1;          /* offset into IrLap frame */
const TUint8 KFrameTypeMask=0x03;            /* 00000011 - only the last two bits */
const TUint8 KInfoFrameControlMask=0x13;     /* 00010011 - just last 2 bits and P/F */
const TUint8 KPFMask=0x10;                   /* 00010000 - to get just the P/F bit */

/* IrLAP UNNUMBERED Field Values */
const TUint8 KUnnumberedFrameTypeMask=0x03;  /* 00000011 */
const TUint8 KUnnumberedFrameMask=0x03;      /* 00000011 - U frame has 11 as last 2 bits */
const TUint8 KUnnumberedPFrameMask=0x13;     /* 00010011 - captures P/F bit too */
const TUint8 KUnnumberedNotPFrameMask=0x03;  /* 00000011 - captures P/F bit too */
const TUint8 KUnnumberedFFrameMask=0x13;     /* 00010011 - captures P/F bit too */
const TUint8 KUnnumberedNotFFrameMask=0x03;  /* 00000011 - captures P/F bit too */

/* Sent by primary as CMD frames to a secondary */
const TUint8 KSNRMPMask=0x93;                /* 10010011 */
const TUint8 KSNRMNotPMask=0x83;             /* 10000011 */
const TUint8 KDISCPMask=0x53;                /* 01010011 */
const TUint8 KDISCNotPMask=0x43;             /* 01000011 */
const TUint8 KUIPMask=0x13;                  /* 00010011 */
const TUint8 KUINotPMask=0x03;               /* 00000011 */
const TUint8 KXIDPMask=0x3f;                 /* 00111111 */
const TUint8 KXIDNotPMask=0x2f;              /* 00101111 */
const TUint8 KTESTPMask=0xf3;                /* 11110011 */

/* Sent by secondary as RSP frames to a primary */
const TUint8 KRNRMFMask=0x93;                /* 10010011 */
const TUint8 KRNRMNotFMask=0x83;             /* 10000011 */
const TUint8 KUAFMask=0x73;                  /* 01110011 */
const TUint8 KUANotFMask=0x63;               /* 01100011 */
const TUint8 KFRMRFMask=0x97;                /* 10010111 */
const TUint8 KFRMRNotFMask=0x87;             /* 10000111 */
const TUint8 KDMFMask=0x1f;                  /* 00011111 */
const TUint8 KDMNotFMask=0x0f;               /* 00001111 */
const TUint8 KRDFMask=0x53;                  /* 01010011 */
const TUint8 KRD_NOTF=0x43;                  /* 01000011 */
const TUint8 KUIFMask=0x13;                  /* 00010011 */
const TUint8 KUINotFMask=0x03;               /* 00000011 */
const TUint8 KXIDFMask=0xbf;                 /* 10111111 */
const TUint8 KXIDNotFMask=0xaf;              /* 10101111 */
const TUint8 KTESTFMask=0xf3;                /* 11110011 */

/* XID frame masks and field offsets */
const TUint8 KFormatFieldOffset=2;
const TUint8 KDiscoveryFormatMask=0x01;      /* 00000001 */
const TUint8 KNegotiationFormatMask=0x02;    /* 00000010 */
/* For format field value 0x01 => DISCOVERY XID */
const TUint8 KMaxSlotsBitsMask=0x03;
const TUint8 KAddressConflictBitMask=0x04;   /* 00000100 in discovery flags byte */
const TUint KSourceDevAddrFieldOffset=3;
const TUint KDestDevAddrFieldOffset=7;
const TUint KDiscoveryFlagsFieldOffset=11;
const TUint KSlotNumberFieldOffset=12;
const TUint8 KIrlapVersionFieldOffset=13;
const TUint8 KIrlapVersion=0x00;
const TUint KDiscoveryDeviceInfoFieldOffset=14;
const TUint KFirstServiceHintByteOffset=14;
const TUint8 KServiceHintsExtensionMask=0x80;
const TUint KSecondServiceHintByteOffset=15;
const TUint KCharacterSetFieldOffset=16;
const TUint8 KASCIIMask=0x00;                /* 8086 ASCII */
const TUint8 KUnicodeMask=0xff;
const TUint KNicknameFieldOffset=17;
const TInt KDiscoveryNicknameLength=20;
const TUint KDiscoveryDeviceInfoLength=27;
const TUint KNDMAdditionalBOFs=10;           
const TUint KNDMMinimumTurnaroundTime=0;    /* 0 ms */

/* Various negotiation constants */
const TUint KNegotiationLength=21;
const TUint KMaxNumberOfNegotiables=7;
const TUint8 KBaudRateTuple=0x01;
const TUint8 KBaudRateLengthTuple=1;
const TUint8 KMaxTATimeTuple=0x82;
const TUint8 KMaxTATimeLengthTuple=1;
const TUint8 KMaxDataSizeTuple=0x83;
const TUint8 KMaxDataSizeLengthTuple=1;
const TUint8 KMaxWindowSizeTuple=0x84;
const TUint8 KMaxWindowSizeLengthTuple=1;
const TUint8 KNumberBofsTuple=0x85;
const TUint8 KNumberBofsLengthTuple=1;
const TUint8 KMinTATimeTuple=0x86;
const TUint8 KMinTATimeLengthTuple=1;
const TUint8 KLinkDisconnTuple=0x08;
const TUint8 KLinkDisconnLengthTuple=1;
/* Default negotiation parameters */
const TBps KDefaultBaudRate=EBps9600;
const TUint KDefaultMaxHostTATime=500;
const TUint KDefaultMaxHostDataSize=64;
const TUint KDefaultReceiveWindow=1;
const TUint KDefaultAdditionalBofs=0;
const TUint KDefaultMinTATime=10;
const TUint KDefaultLinkDisconnTime=3;
const TUint KDefaultSubMsTATime=1; // Submillisecond time defaults to 1ms
const TUint KDefaultSupportedBaudRates=2;
/* Actual host supported negotiation parameters */
const TBps KMaxSupportedBaudRate=EBps115200;
const TUint16 KMaxSupportedBaudRates=0x003F; // All rates supported upto 115200bps
const TUint KMinSupportedMaxTATime=500;
const TUint KMaxSupportedMaxHostDataSize=2048;
const TUint KMaxReceiveWindow=7;
const TUint KMaxAdditionalBofs=48;
const TUint KMinTATime=0;
const TUint KSupportedLinkDisconnTime=40;

/* SNRM frame masks and field offsets */
const TUint KSNRMSourceDevAddrFieldOffset=2;
const TUint KSNRMDestDevAddrFieldOffset=6;
const TUint KSNRMProposedConnAddrFieldOffset=10;
const TUint KSNRMNegotiationFieldOffset=11;

/* UA frame masks and field offsets */
const TUint KUASourceDevAddrFieldOffset=2;
const TUint KUADestDevAddrFieldOffset=6;
const TUint KUANegotiationFieldOffset=10;
const TBool KfromDISC=EFalse;
const TBool KfromSNRM=ETrue;
const TBool KFullSNRM=ETrue;
const TBool KResetSNRM=EFalse;

/* FRMR frame masks and field offsets */
const TUint KFRMRFirstInfoFieldByteOffset=2;   /* Rejected C Field */
const TUint KFRMRSecondInfoFieldByteOffset=3;  /* Frame fields */
const TUint KFRMRThirdInfoFieldByteOffset=4;   /* FRMR reason */

/* TEST frame masks and field offsets */
const TUint KTESTSourceDevAddrFieldOffset=2;
const TUint KTESTDestDevAddrFieldOffset=6;
const TUint KTESTDataFieldOffset=10;
const TUint KTESTConnDataFieldOffset=2;
const TUint KTESTInfoFieldLength=24;
#define  KTESTFrameBanner _S(" Protea IrDA TEST Frame ")

/* IrLAP Supervisory Frame values */
const TUint8 KSupervisoryFrameTypeMask=0x01;            /* 00000001 */
const TUint8 KSupervisoryFrameControlMask=0x1f;         /* 00011111 */
const TUint8 KRRPMask=0x11;                             /* 00010001 */
const TUint8 KRRFMask=0x11;                             /* 00010001 */
const TUint8 KRNRPMask=0x15;                            /* 00010101 */
const TUint8 KRNRFMask=0x15;                            /* 00010101 */
const TUint8 KREJPMask=0x19;                            /* 00011001 */
const TUint8 KREJFMask=0x19;                            /* 00011001 */
const TUint8 KSREJPMask=0x1d;                           /* 00011101 */
const TUint8 KSREJFMask=0x1d;                           /* 00011101 */

/* IrLAP Information Frame values */
const TUint8 KInfo1FrameTypeMask=0x00;                  /* 00000000 */
const TUint8 KInfo2FrameTypeMask=0x02;                  /* 00000010 */
const TUint8 KInfoFrameMask=0x01;                       /* 00000001 */
const TUint8 KInfo1PMask=0x10;                          /* 00010000 */
const TUint8 KInfo1FMask=0x10;
const TUint8 KInfo2PMask=0x12;                          /* 00010010 */
const TUint8 KInfo2FMask=0x12;
const TUint8 KInfo1NotPMask=0x00;                       /* 00000000 */
const TUint8 KInfo1NotFMask=0x00;
const TUint8 KInfo2NotPMask=0x02;                       /* 00000010 */
const TUint8 KInfo2NotFMask=0x02;
const TUint8 KNsMask=0x0e;                              /* 00001110 */
const TUint8 KNrMask=0xe0;                              /* 11100000 */     

const TUint KHighWaterMark=8;
const TUint KLowWaterMark=3;

/******************** IRMUX ADDRESS CONSTANTS **********************/
const TUint KIrmuxConnectMinFrameSize=8;                /* A+C+D+S+op+rsvd+...+FCS */
const TUint KIASConnectFrameSize=8;                     /* A+C+D+S+op+rsvd+FCS */
const TUint KIASQueryFrameSize=66;                      /* A+C+D+S+..60..+FCS */
const TUint KIASGetValueByClassMinFrameSize=7;          /* A+C+D+S+op+ret+...+FCS */
const TUint KIrmuxDisconnectFrameSize=8;                /* A+C+D+S+op+rsvd+FCS */
const TUint KIrmuxAccessModeFrameSize=9;                /* A+C+D+S+op+stat+mode+FCS */

const TUint8 KLSAP_SELMask=0x7f;
const TUint KMaxLSAP = 0x6f;
const TUint KMinLSAP = 0x01;
const TUint8 KIrmuxControlFrameMask=0x80;
const TUint KIrmuxDLSAP_SELFieldOffset=0;
const TUint KIrmuxSLSAP_SELFieldOffset=1;
const TUint KIrmuxOpcodeFieldOffset=2;
const TUint KIrmuxParametersFieldOffset=3;
const TUint8 KIrmuxReservedParametersMask=0x00;
const TUint KIrmuxControlFrameDataFieldOffset=4;
const TUint KIrmuxControlFrameDataFieldLength=60;

const TUint KModeStatusFieldOffset=3;
const TUint8 KModeStatusSuccessMask=0x00;
const TUint8 KModeStatusFailureMask=0x01;
const TUint8 KModeStatusUnsupportedMask=0xff;
const TUint KModeFieldOffset=4;
const TUint8 KMultiplexModeMask=0x00;
const TUint8 KExclusiveModeMask=0x01;

const TUint8 KIrmuxConnectRequestMask=0x01;             /* 00000001 */
const TUint8 KIrmuxConnectConfirmMask=0x81;             /* 10000001 */
const TUint8 KIrmuxDisconnectMask=0x02;                 /* 00000010 */
const TUint8 KIrmuxAccessModeRequestMask=0x03;          /* 00000011 */
const TUint8 KIrmuxAccessModeConfirmMask=0x83;          /* 10000011 */

const TUint KHoldoffMark=5;

const TUint KIASControlFieldOffset=4;
const TUint KIASResultsFieldOffset=5;
const TUint8 KIASLstMask=0x80;
const TUint8 KIASAckMask=0x40;
const TUint8 KIASOpcodeMask=0x3f;

/****************** IR TINY TP ADDRESS CONSTANTS *******************/
const TUint8 KTPParameterMask=0x80;                     /* 10000000 */
const TUint8 KTPDeltaCreditMask=0x7f;                   /* 01111111 */
const TUint8 KTinyTPInitialCreditPosition=0x06;         //This is offset from start of TinyTP Connect Frame
const TUint KIrdaMaxTPBufferSize=8192;                  //This is used to calculate the initial credit value
const TUint8 KTPMaxSduSizePIMask=0x01;

const TUint8 KIrmuxSapFrameOverhead  = 0x02;
const TUint8 KTinyTPSapFrameOverhead = 0x03;

const TUint KMaxIrdaMinTABofSize	   = 115;
const TUint KMaxIrdaRawFrameSize       = 4154;// 0x103A
const TUint KMaxIrdaProcessedFrameSize = 2052;// 0x0804

#endif // __IR_CONST_H__