首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有任何良好和稳定的在线短信到PDU转换器?

是否有任何良好和稳定的在线短信到PDU转换器?
EN

Stack Overflow用户
提问于 2014-06-25 09:28:54
回答 2查看 7.1K关注 0票数 0

我正在寻找一个不错的在线转换器,可以与几个调制解调器工作。我正在处理的问题-我不能发送短信在pdu模式(与CinterionBGS-2T)。尝试使用我自己的库(仍在使用它)和几个在线转换器,如:

  1. pdu.html
  2. http://m2msupport.net/m2msupport/module-tester/
  3. http://hardisoft.ru/soft/otpravka-sms-soobshhenij-v-formate-pdu-teoriya-s-primerami-na-c-chast-1/

用户数据似乎编码得很好(到处都是相同的结果),但是TPDU的第一部分(使用PDU-Type,TPDU,.)可能有一点变数(但从来不起作用,该死)。

几分钟:

  1. 调制解调器绝对支持pdu模式。
  2. 有现金余额。
  3. 调制解调器对"AT+CMGS“的响应为">”,它在PDU字符串上的响应为"\r\nOK\r\n",但没有使用"+CMGS“响应(当然,我没有收到我的短消息)。

如果有必要,这里是我自己代码的一部分:

代码语言:javascript
复制
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字符串的详细信息:

  1. 00跳过SMSC
  2. 01 -PDU型
  3. 00 - TP-MR
  4. 0C - To数字的长度。
  5. 81 -类型的数字(未知,也尝试了0x91,这是国际)
  6. 83 90 33 25 62 02
  7. 00 - TP-PID
  8. 00 - TP-DCS (GSM 7位,默认短消息类)
  9. 18 - TP-UD (24个字母)
  10. C8 32 ..。B6 6E压缩消息
  11. 1A - ctrl+z
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-04 10:00:48

问题已经解决了。我不是以十六进制字符串的形式发送消息,而是以二进制的方式发送消息,愚蠢的我:

票数 1
EN

Stack Overflow用户

发布于 2019-06-05 14:59:26

我为我的openwrt路由器创建了平衡检查器。它是用C写的,非常简单。适用于velcom.by和mts.by。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24404965

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档