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

📄 fmbus.c

📁 这是一个潜入式开发的c语言代码
💻 C
字号:

/*#########################################################################

  Copyright (c) 2005,
  All rights reserved.
  
  File name     : fpubdef.h
  Description   :公共定义

  Version       :1.00
  Author        :
  Complete Date :2006-06-05

  Function List :
  History       :
  _________________________________________________________________________
  DATE          AUTHOR    VERSION    DESCRIBE
  -------------------------------------------------------------------------
  2005-06-05     zlz      Ver1.00    Create

#########################################################################*/

#include <ctype.h>
#include "fmbus.h"

/*--------------------------------global define begin ----------------------------------------*/
FMBIOBUF pbuff;
REGINT tagMode = ASCII;
FMBIOBUF Buffer;

/*--------------------------------global define end   ----------------------------------------*/

VOID initMbusMode(REGINT aTagMode)
{
	tagMode = aTagMode;
}


/*----------------------     hex to char & char to hex  begin -------------------------- */
typedef union tag_HexByte
{
   struct
   {
     unsigned  L:4;
     unsigned  H:4;
   } b4;
   BYTE    b8;
} HexByte;

BYTE *gpHexChar="0123456789ABCDEFabcdef";

/* Hex4 to Char
*/
/*
CHAR Hex4ToChar ( BYTE aHex4 )
{
   REGINT Idx;
   CHAR r;
   Idx = aHex4;
   if (( 0 <= Idx ) && ( Idx < 16 ))
       r = gpHexChar[Idx];
   else
       r = 0;
   return r;
}
*/
#define Hex4ToChar(aHex4)  gpHexChar[(int)aHex4]

/* Char to Hex4
*/

BYTE CharToHex4 ( BYTE aChar )
{
   REGINT i;
   for ( i=0;i<21;i++)
   if ( gpHexChar[i] == aChar )
   {
       if ( i > 15 ) i -= 6;
             return (BYTE) i;
   }
   return 0;
}

/*----------------------     hex to char & char to hex  end -------------------------- */




/***************************             REQ  begin        ***********************************/

/*--------------------------------      set   begin     ----------------------------------*/
VOID FmbReqSetAdr ( BYTE *pfmbreq, BYTE aAdr )
{
	ASSERT(pfmbreq == NULL);
	pfmbreq[0] = aAdr;
}

VOID FmbReqSetFun ( BYTE *pfmbreq, BYTE aFun )
{
	ASSERT(pfmbreq == NULL);
	pfmbreq[1] = aFun;
}

VOID  FmbReqSetR1  ( BYTE *pfmbreq, INT16 aReg1 )
{
	ASSERT(pfmbreq == NULL);	
	pfmbreq[3] = (BYTE)aReg1;
	pfmbreq[2] = (BYTE)(aReg1>>8);
}

VOID  FmbReqSetRN  ( BYTE *pfmbreq, INT16 aRegNum )
{
	ASSERT(pfmbreq == NULL);
	pfmbreq[5] = (BYTE)aRegNum;
	pfmbreq[4] = (BYTE)(aRegNum>>8);
}


VOID  FmbReqSetCRC ( BYTE *pfmbreq)
{
	UINT16 checkNumCRC,i;
	ASSERT(pfmbreq == NULL);

	checkNumCRC = Mb_calcul_crc((BYTE*)pfmbreq, 6);
	i = checkNumCRC;
	pfmbreq[6] = (BYTE)(checkNumCRC);
	pfmbreq[7] = (BYTE)(checkNumCRC>>8);
}

VOID  FmbReqSetLRC ( BYTE *pfmbreq)
{
	/*BYTE  checkNumLRC;
	ASSERT(pfmbreq == NULL);
	checkNumLRC = LRC((BYTE*)pfmbreq, 6);*/
}

BYTE* FmbReqMakeBuffer( BYTE *pfmbreq, REGINT aTagMode )/* FMB_TAG_ASC, FMB_TAG_RTU */
{
	BYTE  *p;
	BYTE  checkNumLRC;
	REGINT i;


	ASSERT(pfmbreq == NULL);
	tagMode = aTagMode;	
	p = (BYTE*)pfmbreq;




	if(tagMode == ASCII)
	{
	/*	*/

	}
	else
	{
		i = 8;
		FmbReqSetCRC(pfmbreq);
	}
	return pfmbreq;
}


/*----------------------------------  Get  begin  --------------------------------*/

BYTE   FmbReqGetAdr ( BYTE *pfmbreq )
{
	ASSERT(pfmbreq == NULL);
	return *pfmbreq;
}

BYTE   FmbReqGetFun ( BYTE *pfmbreq )
{
	ASSERT(pfmbreq == NULL);
	return *(pfmbreq+1);
}

UINT16 FmbReqGetR1  ( BYTE *pfmbreq )
{
	ASSERT(pfmbreq == NULL);
	return (*(pfmbreq+2)<<8)|*(pfmbreq+3);
}

UINT16 FmbReqGetRN  ( BYTE *pfmbreq )
{
	ASSERT(pfmbreq == NULL);
	return (*(pfmbreq+4)<<8)|*(pfmbreq+5) ;	
}

UINT16 FmbReqGetCRC      ( BYTE *pfmbreq )
{
	ASSERT(pfmbreq == NULL);
	return (*(pfmbreq+7)<<8)|*(pfmbreq+6) ;	
}

BYTE   FmbReqGetLRC      ( BYTE *pfmbreq )
{
	/**/
}

Boolean FmbReqParseBuffer ( BYTE *pfmbreq, REGINT aTagMode )
{
	UINT16 checkNumCRC;
	ASSERT(pfmbreq == NULL);


	if ( aTagMode == RTU )
	{
		checkNumCRC = Mb_calcul_crc((BYTE*)pfmbreq, 6);
		if ( FmbReqGetCRC(pfmbreq) != checkNumCRC )
			return False;		
	}
	else
	{
		/**/
	}
	return True;
}
/***************************************    REQ   end     **************************************/
/***************************************    RSP  begin    **************************************/


REGINT FmbRspGetLength   ( BYTE *pfmbrsp )
{
	REGINT length;
	ASSERT(pfmbrsp == NULL);
	length = 3 + FmbRspGetByteNum(pfmbrsp);
	return length;
}

/*------------------------------- Get begin ------------------------------*/



BYTE FmbRspGetAdr ( BYTE *pfmbrsp )
{
	ASSERT(pfmbrsp == NULL);
	return *(pfmbrsp);
}

BYTE FmbRspGetFun ( BYTE *pfmbrsp )
{
	ASSERT(pfmbrsp == NULL);
	return *(pfmbrsp+1);
}

REGINT FmbRspGetByteNum ( BYTE *pfmbrsp )
{
	ASSERT(pfmbrsp == NULL);
	return (REGINT)*(pfmbrsp + 2);
}

UINT16 FmbRspGetData ( BYTE *pfmbrsp, REGINT aIdx )
{
	ASSERT(pfmbrsp == NULL);
	return (*(pfmbrsp+1+(aIdx<<1))<<8)|*(pfmbrsp+2+(aIdx<<1)) ;
}


UINT16  FmbRspGetCRC      ( BYTE *pfmbrsp )
{
	REGINT length;
	ASSERT(pfmbrsp == NULL);
	length = FmbRspGetLength(pfmbrsp);
	return (*(pfmbrsp+length+1)<<8)|*(pfmbrsp+length) ;	
}

BYTE    FmbRspGetLRC      ( BYTE *pfmbrsp )
{
	ASSERT(pfmbrsp == NULL);
}

Boolean FmbRspParseBuffer ( BYTE *pfmbrsp, REGINT aTagMode )
{
	REGINT length;
	UINT16 checkNumCRC;
	ASSERT(pfmbrsp == NULL);
    length = FmbRspGetLength(pfmbrsp);


	ASSERT(pfmbrsp == NULL);
	if ( aTagMode == RTU )
	{
		checkNumCRC = Mb_calcul_crc(pfmbrsp,length);
		if (checkNumCRC != FmbRspGetCRC(pfmbrsp));
			return False;
	}
	else
	{

	}
	return True;
}

/*------------------------------- Get end ------------------------------*/

/*------------------------------- Set begin ----------------------------*/

VOID  FmbRspSetAdr      ( BYTE *pfmbrsp, BYTE aAdr )
{
	ASSERT(pfmbrsp == NULL);
	pfmbrsp[0] = aAdr;
}

VOID  FmbRspSetFun      ( BYTE *pfmbrsp, BYTE aFun )
{
	ASSERT(pfmbrsp == NULL);
	pfmbrsp[1] = aFun;
}

VOID  FmbRspSetDataNum  ( BYTE *pfmbrsp, BYTE DataNum )
{
	ASSERT(pfmbrsp == NULL);
	pfmbrsp[2] = DataNum<<1;
}

VOID  FmbRspSetData     ( BYTE *pfmbrsp, REGINT aIdx, UINT16 aData )
{
	ASSERT(pfmbrsp == NULL);
	pfmbrsp[2+(aIdx<<1)] = (BYTE)aData;
	pfmbrsp[1+(aIdx<<1)] = (BYTE)(aData>>8);
}

VOID  FmbRspSetCRC      ( BYTE *pfmbrsp)
{
	REGINT length;
	UINT16 checkNumCRC;
	ASSERT(pfmbrsp == NULL);

	length = FmbRspGetLength(pfmbrsp);
	checkNumCRC = Mb_calcul_crc(pfmbrsp,length);
	pfmbrsp[length]   = (BYTE)(checkNumCRC);
	pfmbrsp[length+1] = (BYTE)(checkNumCRC>>8);	
}

VOID  FmbRspSetLRC      ( BYTE *pfmbrsp);
BYTE* FmbRspMakeBuffer  ( BYTE *pfmbrsp, REGINT aTagMode );

/*------------------------------- Set end ----------------------------*/

⌨️ 快捷键说明

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