我正在寻找一个不错的在线转换器,可以与几个调制解调器工作。我正在处理的问题-我不能发送短信在pdu模式(与CinterionBGS-2T)。尝试使用我自己的库(仍在使用它)和几个在线转换器,如:
用户数据似乎编码得很好(到处都是相同的结果),但是TPDU的第一部分(使用PDU-Type,TPDU,.)可能有一点变数(但从来不起作用,该死)。
几分钟:
如果有必要,这里是我自己代码的一部分:
void get_pdu_string(sms_descriptor* sms, char dst[]) {
char tempnum[8] = "";
char* pTemp = dst;
uint8_t i = 0;
// SMSC
//*pTemp++ = 0x00;
// PDU-Type
*pTemp++ = (0<<TP_MTIH) | (1<<TP_MTIL); // MTI = 01 - outbox sms
// TP-MR
*pTemp++ = 0x00; // unnecessary
// TP-DA
*pTemp++ = strlen(sms->to_number); // address number length
*pTemp++ = 0x91; // address number format (0x91 - international)
gsm_number_swap(sms->to_number,tempnum);
i = (((*(pTemp-2) & 0x01) == 0x01)? (*(pTemp-2)+1) : *(pTemp-2))>>1;
strncpy(pTemp, tempnum, i ); // address number
pTemp += i;
// TP-PID
*pTemp++ = 0;
// TP-DCS
switch(sms->encoding) {
case SMS_7BIT_ENC:
*pTemp++ = 0x00;
break;
case SMS_UCS2_ENC:
*pTemp++ = 0x08;
break;
}
if (sms->flash == 1)
*(pTemp-1) |= 0x10;
// TP-VP
// skip if does not need
// TP-UDL
switch(sms->encoding) {
case SMS_7BIT_ENC:
*pTemp++ = strlen(sms->msg);
break;
case SMS_UCS2_ENC:
*pTemp++ = strlen(sms->msg) << 1;
break;
}
// TP-UD
switch(sms->encoding) {
case SMS_7BIT_ENC: {
char packed_msg[140] = "";
char* pMsg = packed_msg;
gsm_7bit_enc(sms->msg, packed_msg);
while(*pMsg != 0)
*pTemp++ = *pMsg++;
} break;
case SMS_UCS2_ENC: {
wchar_t wmsg[70] = L"";
wchar_t* pMsg = wmsg;
strtoucs2(sms->msg, wmsg, METHOD_TABLE);
while(*pMsg != 0) {
*pTemp++ = (char) (*pMsg >> 8);
*pTemp++ = (char) (*pMsg++);
}
} break;
}
*pTemp = 0x1A;
return;
}我日常工作的例子:
致: 380933522620
留言:你好!在GSM-7中测试SMS
编码PDU字符串:
0001 00 0C 81 83 90 33 25 62 02 00 18 C8 32 9B FD 0E 81 A8 E5 39 1D 34 6D 4E 41 69 37 E8 38 6D B6 6E 1A
有关PDU字符串的详细信息:
发布于 2014-07-04 10:00:48
问题已经解决了。我不是以十六进制字符串的形式发送消息,而是以二进制的方式发送消息,愚蠢的我:
发布于 2019-06-05 14:59:26
我为我的openwrt路由器创建了平衡检查器。它是用C写的,非常简单。适用于velcom.by和mts.by。
https://stackoverflow.com/questions/24404965
复制相似问题