frame.h

来自「profibus-dp主站源代码」· C头文件 代码 · 共 92 行

H
92
字号
//-----------------------------------------------------------------------------
// $Id: frame.h,v 1.0.0                                             2004/01/13
//-----------------------------------------------------------------------------
//
//      ProfiM - PROFIBUS MASTER DRIVER FOR WINDOWS NT/2000
//
// Author:  
//      Pavel Trnka, CTU FEE
//      trnkap@seznam.cz
// With help and advices from:
//      Ing. Petr Smolik, CTU FEE
//      Ing. Pavel Pisa, CTU FEE
//      Ing. Pavel Burget, CTU FEE
//
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------

#ifndef frameH
#define frameH

//***************************************************************************

#include "vardef.h"

//***************************************************************************

typedef enum
{
  FT_Token,
  FT_RequestFDLStatuswithReply,
  FT_Reply,
  FT_ShortAcknowledge,
  FT_SDNLow,
  FT_SDNHigh,
  FT_SRDLow,
  FT_SRDHigh,
  FT_RequestIdentwithReply,
  FT_RequestLSAPStatuswithReply
}  TFrameType;

//***************************************************************************

typedef struct
{
    int             FCS;    // Frame Control Sum
    int             LEr;    // repeated LEngth
    int             ED;     // End Delimiter
    BOOLEAN         FCB;    // Frame Control Bit
    BOOLEAN         FCV;    // Frame Control bit Valid

    // nasledujici jsou platne jen pokud je typ prijateho framu (FrameType) obsahuje (i nektere predchozi)
    UBYTE           DA;       // Destination Address
    UBYTE           DSAP;   // Destination Service Access Point
    UBYTE           SA;     // Source Address
    UBYTE           SSAP;     // Source Service Access Point
    UBYTE           FC;     // Frame Control
    int             LE;     // LEnght

    TACK            ACK;
    TStationStatus  StnType;                        // platne pouze pro FrameType=FT_Reply;

    UCHAR           Data[246];                      // pozor neni String !!!
    int             Data_length;

    TFrameType      FrameType;
    BOOLEAN         Valid;                          // urcuje platnost naposledy dekodovaneho framy metodou (DecodeFrame)
} TPBFrame, *PTPBFrame;



void            PBFrame_Init( PTPBFrame PBF );
void            PBFrame_DecodeFrame( PTPBFrame PBF,
                                     PUCHAR frame,
                                     int FrameLen,
                                     int TS,
                                     int DefaultSAP );
BOOLEAN         PBFrame_FindFrame( PUCHAR buffer, int BufLen, int *length );    // hleda na zacatku retezce frame a vraci jeho delku
int             PBFrame_FindStartDelimiter( PUCHAR buffer, int BufLen );        
BOOLEAN         IsStartDelimiterSDx( char ch );


/*
String HexStringToString(String hs);
String StringDataToHex(String frame);


String BuildFrameNoData(int _DA, int _SA, int _FC);
*/

//***************************************************************************

#endif

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?