?? fmbus.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 + -