/******************************************************************************* * 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; }
/********************************************************************************* *函数名称: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); }