📄 transform.c
字号:
**------------------------------------------------------------------------------------------------------
** 修 改 人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
INT32U Compages( INT8U * c , INT8U * string, INT32U ReLeng )
{
INT32U i = 0;
INT32U j = 0;
INT8U Hdata;
INT8U Ldata;
for( i = 0; i < ReLeng; i += 2 )
{
Hdata = *c++;
Ldata = *c++;
if(( Hdata >= '0' ) && ( Hdata <= '9' ))
{
Hdata = Hdata - 0x30;
}
else if(( Hdata >= 'A' ) && ( Hdata <= 'F' ))
{
Hdata = Hdata - 0x37;
}
else if(( Hdata >= 'a' ) && ( Hdata <= 'f' ))
{
Hdata = Hdata - 0x57;
}
if(( Ldata >= '0' ) && ( Ldata <= '9' ))
{
Ldata = Ldata - 0x30;
}
else if(( Ldata >= 'A' ) && ( Ldata <= 'F' ))
{
Ldata = Ldata - 0x37;
}
else if(( Ldata >= 'a' ) && ( Ldata <= 'f' ))
{
Ldata = Ldata - 0x57;
}
Hdata = Hdata << 4;
*(string + j++) = Hdata + Ldata;
}
*(string + j) = 0;
return j;
}
/*******************************************************************************************************
** 函数名称: INT16U Send_T_M( INT8U * c , INT16U ReLeng )
** 功能描述: 发送转义处理
** 输 入: c--------待转义数组的首地址
ReLeng---带转义数据的数据长度
** 输 出: t--------转义的字节个数
** 全局变量: 无
** 调用模块:
** 作 者: 崔敬军
** 日 期: 2007年05月20日
**------------------------------------------------------------------------------------------------------
** 修 改 人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
//发送转义处理,遇到0x7E和0x5e转义
//c 源数据区指针
//d 目的数据区指针
//ReLeng 元数据区长度
//返回 转义字节个数
INT16U Send_T_M( INT8U * c , INT8U * d , INT32U ReLeng )
{
INT16U Sc = 0;
INT16U Tc = 0;
INT16U Yc = 0;
for( Tc = 0; Tc < ReLeng; Tc++ )
{
if( *( c + Tc ) == 0x7e )
{
*( d + Sc ) = 0x5e;
*( d + Sc + 1 ) = 0x7d;
Sc += 2;
Yc++;
}
else if( *( c + Tc ) == 0x5e )
{
*( d + Sc ) = 0x5e;
*( d + Sc + 1 ) = 0x5d;
Sc += 2;
Yc++;
}
else
{
*( d + Sc ) = *( c + Tc );
Sc++;
}
}
return Yc;
}
/*******************************************************************************************************
** 函数名称: INT16S CheckGroupLength(INT8U *ptr , INT32U datalong)
** 功能描述: 校验数据长度
** 输 入: ptr-------数据区指针
datalong--数据区长度
** 输 出: -1--------数据长度错误
** 全局变量: 无
** 调用模块:
** 作 者: 崔敬军
** 日 期: 2007年02月11日
**-------------------------------------------------------------------------------------------------------
** 修 改 人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
//检查数据区长度
//ptr 南向MCP层数据区开始
//datalong 南向数据包去掉头尾和CRC的长度(总长度-4)
//因为数据区可能包含多条命令,每个都有自己的长度,所以检查总长度和每个的和是否一致
//返回 -1 长度有误
// 数据长度
INT16S CheckGroupLength(INT8U *ptr , INT32U datalong)
{
INT16S j = 0;
INT16U count = 0;
INT8U round = 0xaa;
count = *ptr;
j += count;
datalong -= 13; //计算数据区长度
while( round == 0xaa )
{
if( j < datalong )
{
count = *(ptr + j);
j += count;
}
else if( j == datalong )
{
round = 0x55;
}
else if( j > datalong )
{
round = 0x55;
j = -1;
}
}
return j;
}
/*******************************************************************************************************
** 函数名称: INT8S CheckDataTypes( INT8U type , INT8U cnt , INT8U *sp)
** 功能描述: 效验数据类型的合法性
** 输 入: INT8U type 数据类型
INT8U cnt 数据长度
INT8U *sp 源数据指针
** 输 出: 0---合法数据 -1---非法数据 -2---非法数据长度
** 全局变量: 无
** 调用模块:
** 作 者: 崔敬军
** 日 期: 2007年05月20日
**-------------------------------------------------------------------------------------------------------
** 修 改 人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
INT8S CheckDataTypes( INT8U type , INT8U mode , INT8U cnt , INT8U *sp)
{
INT8S st = 0;
INT8U i = 0;
INT8U j = 0;
if( cnt == *sp ) // 监控数据标识与监控数据的值符合要求
{
if( mode == 0)
{
cnt -= 3;
sp += 3;
if( type == 0 )// 设置 <字符串(由可打印的ASCII码组成)>
{
for( i = 0; i < cnt; i++ )
{
if(( *( sp + i ) < '!' ) || ( *( sp + i ) > '~'))
{
if( *( sp + i ) != 0 )
{
st = -1;
}
else
{
j = i + 1;
for( ; j < cnt; j++ )
{
if( *( sp + j ) != 0 )
{
st = -1;
}
}
}
break;
}
}
}
else if( type == 1 )// 查询 <字符串内容为0>
{
for( i = 0; i < cnt; i++ )
{
if( *( sp + i ) != 0 )
{
st = -1;
break;
}
}
}
}
}
else // 不符合要求
{
st = -2;
}
st = 0;
return st;
}
/*******************************************************************************************************
** End Of File
********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -