⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 frame.h

📁 profibus-dp主站源代码
💻 H
字号:
//-----------------------------------------------------------------------------
// $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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -