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

📄 transform.c

📁 基于ARM7的ucos-ii移动收发通信编程ADS开发源码
💻 C
📖 第 1 页 / 共 2 页
字号:
**------------------------------------------------------------------------------------------------------
** 修 改 人:
** 日   期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
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 + -