--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/dbgagents/trkagent/engine/serframe.h Tue Mar 02 10:33:16 2010 +0530
@@ -0,0 +1,226 @@
+/*
+* Copyright (c) 2006 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:
+*
+* Frame Check Sequence checksums (FCS) for 16 and 32 bits.
+*
+* The 16-bit version uses a 512-byte table (2 bytes * 256 elements)
+* and the 32-bit version uses a 1024-byte table (4 bytes * 256 elements)
+*
+* Serial-based HDLC-like framing (RFC 1662) for use with the
+* CWDS serial protocol.
+*
+* Serial data is transmitted using an HDLC-like framing convention.
+* Byte-oriented streams are transmitted with a starting frame byte
+* and also followed by an ending frame byte and a checksum (FCS).
+*
+* Errors can be detected with high probability using the FCS.
+* While this is not intended to be used in an environment that
+* generates a large number of errors, nevertheless it can be
+* useful to help ensure that packets arrive with a high degree of
+* certainty and to allow data to be dropped and still allow
+* continuous data.
+*
+* Sender and receiver can be resynchronized with the receipt of a new
+* framing byte.
+*
+*
+* Frame Format
+*
+* The general frame format specified in RFC 1662 is described as:
+*
+* +----------+----------+----------+
+* | Flag | Address | Control |
+* | 01111110 | 11111111 | 00000011 |
+* +----------+----------+----------+
+* +----------+-------------+---------+
+* | Protocol | Information | Padding |
+* | 8/16 bits| * | * |
+* +----------+-------------+---------+
+* +----------+----------+-----------------
+* | FCS | Flag | Inter-frame Fill
+* |16/32 bits| 01111110 | or next Address
+* +----------+----------+-----------------
+*
+* The routines in this file use a subset and are not negotiated;
+* they are simply assumed. These are:
+*
+* Address and Control Field Compression is always ON.
+* Protocol Field Compression is always ON.
+* Protocol value is implied, but undefined.
+* Padding is OFF.
+* MRU is 1500 bytes.
+* FCS is 32 bits.
+* Trailing Flag is always transmitted.
+*
+*
+* The resulting frame format is:
+*
+* +----------+
+* | Flag |
+* | 01111110 |
+* +----------+
+* +-------------+
+* | Information |
+* | * |
+* +-------------+
+* +----------+----------+-----------------
+* | FCS | Flag | Inter-frame Fill
+* |16/32 bits| 01111110 | or next Address
+* +----------+----------+-----------------
+*
+* Macros & Typedefs
+*
+* FCSBITSIZE
+*
+* This header file must first define FCSBITSIZE to be either one of:
+* FCS16 or FCS32. These control the definitions for the rest of the header
+* file and the underlying tables. Selecting FCS16 will cause the header
+* file to define 16-bit types, table, and functions for calculating the
+* 16-bit FCS. Selecting FCS32 is identical, except it uses 32-bit FCS values.
+*
+* FCS16 will use 512 bytes (2 bytes * 256 entries) of constant data space.
+* FCS32 will use 1024 bytes.
+*
+* FCSType
+*
+* The 16- or 32-bit type used for the FCS register and datum.
+*
+* PPPINITFCS
+*
+* Initialize the FCS register with this value.
+*
+* PPPGOODFCS
+*
+* On the receiver side, after the FCS compute function is applied
+* to all data bytes plus the two or four FCS bytes, the correct FCS
+* value will be PPPGOODFCS, a constant.
+*
+* PPPCOMPFCS
+*
+*
+* REFERENCES
+*
+* [RFC1662.94] Simpson, W., Editor, "PPP in HDLC-like Framing,"
+* STD 51, RFC 1662, Daydreamer, July 1994.
+*
+*/
+
+
+#ifndef TRK_SERFRAME_H
+#define TRK_SERFRAME_H
+
+#define FCS8 0 /* SCM: Added for simple 8-bit checksums */
+#define FCS16 1
+#define FCS32 2
+
+#define FCSBITSIZE FCS8 /* define as either FCS8, FCS16 or FCS32 */
+
+
+#if FCSBITSIZE == FCS8
+
+ /*
+ * Definitions for 8-bit simple Frame Check Sequences
+ */
+
+ typedef unsigned char FCSType; /* 8-bit type */
+
+ #define PPPINITFCS8 0x00 /* Initial FCS value */
+ #define PPPGOODFCS8 0xFF /* Good final FCS value */
+
+ #define PPPINITFCS PPPINITFCS8
+ #define PPPGOODFCS PPPGOODFCS8
+ #define PPPCOMPFCS 0xFF /* complement FCS value */
+
+ #ifdef __cplusplus
+ inline FCSType PPPFCS(FCSType fcs, unsigned char c)
+ {
+ return (fcs + c);
+ }
+
+ #else
+ #define PPPFCS(fcs, c) (fcs + c)
+ #endif
+
+
+#elif FCSBITSIZE == FCS16
+
+ /*
+ * Definitions for 16-bit Frame Check Sequences
+ */
+
+ typedef unsigned short FCSType; /* 16-bit type */
+/* extern FCSType fcstab[]; */
+ extern const FCSType fcstab[256];
+
+ #define PPPINITFCS16 0xffff /* Initial FCS value */
+ #define PPPGOODFCS16 0xf0b8 /* Good final FCS value */
+
+ #define PPPINITFCS PPPINITFCS16
+ #define PPPGOODFCS PPPGOODFCS16
+ #define PPPCOMPFCS 0xffff /* complement FCS value */
+
+ #if __cplusplus
+ inline FCSType PPPFCS(FCSType fcs, unsigned char c)
+ {
+ return (((fcs) >> 8) ^ fcstab[((fcs) ^ (c)) & 0xff]);
+ }
+
+ #else
+ #define PPPFCS(fcs, c) (((fcs) >> 8) ^ fcstab[((fcs) ^ (c)) & 0xff])
+ #endif
+
+#elif FCSBITSIZE == FCS32
+
+ /*
+ * Definitions for 32-bit Frame Check Sequences
+ */
+
+ typedef unsigned long FCSType; /* 32-bit FCS */
+/* extern FCSType fcstab_32[]; */
+ extern const FCSType fcstab_32[256];
+
+ #define PPPINITFCS32 0xffffffff /* Initial FCS value */
+ #define PPPGOODFCS32 0xdebb20e3 /* Good final FCS value */
+
+ #define PPPINITFCS PPPINITFCS32
+ #define PPPGOODFCS PPPGOODFCS32
+ #define PPPCOMPFCS 0xffffffff /* complement FCS value */
+
+ #if __cplusplus
+ inline FCSType PPPFCS(FCSType fcs, unsigned char c)
+ {
+ return (((fcs) >> 8) ^ fcstab_32[((fcs) ^ (c)) & 0xff]);
+ }
+ #else
+ #define PPPFCS(fcs, c) (((fcs) >> 8) ^ fcstab_32[((fcs) ^ (c)) & 0xff])
+ #endif
+
+#endif
+
+
+/****************************************************************************/
+/*
+ * Constants used for framing serial data
+ */
+/****************************************************************************/
+
+#define PPP_UI 0x03 /* Unnumbered Information */
+#define PPP_FLAG 0x7e /* Flag Sequence */
+#define PPP_ESCAPE 0x7d /* Asynchronous Control Escape */
+#define PPP_TRANS 0x20 /* Asynchronous transparency modifier */
+
+#define MAXFRAMESIZE 0x1000 /* maximum unframed/unescaped data size */
+
+#endif /* ndef TRK_SERFRAME_H */