Exemplo n.º 1
0
/*******************************************************************************
* Function Name  : GsmEncodePdu_Center
* Description    : PDU编码
* Input          : pSrc:SMSTYPE数据指针
                   DataSrc:发送数据指针
                   datalen:发送数据长度
                   pDest:目的字符串
* Output         : 
* Return         : 目的字符串长度
*******************************************************************************/ 
u16 GsmEncodePdu_Center(const SMSTYPE *pSrc,const u8 *DataSrc,u16 datalen, u8* pDst)
{
    
    u16 nLength;             // 内部用的串长度
    u16 nDstLength=0;          // 目标PDU串长度
    u8 buf[256];  // 内部用的缓冲区
    
    // SMSC地址信息段
    nLength = Que_Number_Length(pSrc->SCA);    // SMSC地址字符串的长度    
    buf[0] = (u8)((nLength & 1) == 0 ? nLength : nLength + 1) / 2 + 1;    // SMSC地址信息长度
    buf[1] = 0x91;        // 固定: 用国际格式号码
    nDstLength = Hex_To_Ascii(buf, pDst, 2);        // 转换2个字节到目标PDU串
    nLength=Hex_Num_Encode(pSrc->SCA,buf,nLength);
    nDstLength += Hex_To_Ascii(buf, &pDst[nDstLength],nLength);     // 转换SMSC到目标PDU串
    // TPDU段基本参数、目标地址等
    buf[0]=0x11;//PDUTYPE
    buf[1]=0x00;//MR
    nDstLength += Hex_To_Ascii(buf, &pDst[nDstLength], 2);
    // SMSC地址信息段
    nLength = Que_Number_Length(pSrc->DA);// TP-DA地址字符串的长度
    buf[0] = (u8)nLength;   // 目标地址数字个数(TP-DA地址字符串真实长度)
    buf[1] = 0x91;            // 固定: 用国际格式号码
    nDstLength += Hex_To_Ascii(buf, &pDst[nDstLength], 2);
    nLength=Hex_Num_Encode(pSrc->DA,buf,nLength);
    nDstLength += Hex_To_Ascii(buf, &pDst[nDstLength],nLength);  // 转换TP-DA到目标PDU串
    
    // TPDU段协议标识、编码方式、用户信息等
    buf[0] = 0;        // 协议标识(TP-PID)
    buf[1] = pSrc->TP_DCS&0x0c;        // 用户信息编码方式(TP-DCS)
    buf[2] = 0x8f;            // 有效期(TP-VP)为12小时
    nDstLength += Hex_To_Ascii(buf, &pDst[nDstLength],3);
    if((pSrc->TP_DCS&0x0c) == GSM_7BIT) // 7-bit编码方式   
    {
        buf[0] = datalen;            // 编码前长度.7位方式表示编码前的长度
        nLength = GsmEncode7bit(DataSrc, &buf[1], datalen); 
        nLength+=1;
        // 转换		TP-DA到目标PDU串
    }
    else if((pSrc->TP_DCS&0x0c)== GSM_UCS2)// UCS2编码方式
    {
        buf[0] = GsmEncodeUcs2(DataSrc, &buf[1]);    // 转换TP-DA到目标PDU串
        nLength = buf[0] + 1;        // nLength等于该段数据长度
    }
    else// 8-bit编码方式
    {
        buf[0] = GsmEncode8bit(DataSrc, &buf[1], datalen);    // 转换TP-DA到目标PDU串
        nLength = buf[0] + 1;        // nLength等于该段数据长度
    }
    nDstLength += Hex_To_Ascii(buf, &pDst[nDstLength], nLength);        // 转换该段数据到目标PDU串
    
    // 返回目标字符串长度
    return nDstLength;
}
Exemplo n.º 2
0
/*********************************************************************************
  *函数名称:int param_save_ex(char * section)
  *功能描述:将所有当前参数保存
  *输	入: section	:ini文件参数对应的的section
  *输	出: none
  *返 回 值:  0:成功,非0:表示失败, -1 表示打开文件失败
  *---------------------------------------------------------------------------------
  * @修改人		修改时间   	修改内容
  * 白养民		2015-06-08	创建
*********************************************************************************/
int param_save_ex(char * section)
{
	int		i,i_sect;
	const char *file =DF_PARAM_INI_FILE;
	char write_val[BUF_SIZE]={0};
	char buf[MAX_FILE_SIZE]={0};
	int age;
	int file_size;
	int ret_val = 0;
	long temp_val;
	u32		ul_data;
	
	if(load_ini_file(file,buf,&file_size))
		return -1;

	for( i_sect = 0; i_sect < sizeof( tbl_ini_lookup ) / sizeof( struct _st_tbl_ini_lookup ); i_sect++ )
	{
		if((strlen(section) == 0)||(strncmp(section,tbl_ini_lookup[i_sect].section,strlen(tbl_ini_lookup[i_sect].section)) == 0))
		{
			for( i = 0; i < tbl_ini_lookup[i_sect].param_size / sizeof( st_tbl_id_lookup ); i++ )
			{
				memset(write_val,0,sizeof(write_val));
				switch(tbl_ini_lookup[i_sect].param[i].type)
				{
					case TYPE_BYTE:
					{
						ul_data=*(uint8_t *)tbl_ini_lookup[i_sect].param[i].val;
					}
					case TYPE_WORD:
					{
						ul_data=*(uint16_t *)tbl_ini_lookup[i_sect].param[i].val;
					}
					case TYPE_DWORD:
					{
						ul_data=*(uint32_t *)tbl_ini_lookup[i_sect].param[i].val;
						sprintf(write_val,"%d",ul_data);
						break;
					}
					case TYPE_CAN:
					{
						Hex_To_Ascii(write_val, tbl_ini_lookup[i_sect].param[i].val, 8);
						break;
					}
					/*
					case TYPE_STR:
					{
						memset(buffer,0,sizeof(buffer));
						memcpy(buffer,tbl_id_lookup[i].val,32);
						rt_kprintf("\"%s\";",buffer);
						break;
					}
					*/
					default :
					{
						memcpy(write_val,tbl_ini_lookup[i_sect].param[i].val,tbl_ini_lookup[i_sect].param[i].type);
						break;
					}
				}
				write_profile_string_buf(tbl_ini_lookup[i_sect].section,tbl_ini_lookup[i_sect].param[i].id,write_val,buf);
			}
		}
	}
	return save_ini_file(file,buf);
}