DrvSmsBu 6.3.0 — Доп.каналы

Просмотр 4 сообщений - с 16 по 19 (из 19 всего)
  • Автор
    Сообщения
  • #35462
    sergyltd
    Участник

    Ну, когда отсылает, он шифрует в PDU. Потому как длинные СМС на русском идут нормально, а комбинировать несколько СМС в одну можно только через PDU. В текстовом режиме на русском можно что-то около 60 символов. Начало не номер, забыл уже, когда-то разбирался с кодировкой PDU, но у модема номер 995 начинается.

    #35463
    manjey73
    Участник

    я не разбирал PDU, этим занимается сам драйвер.
    Еще раз. Это не новый драйвер, это все тот же DrvSms, в котором просто добавлены 2 канала, в которые драйвер передает уже расшифрованные данные из PDU.
    Один канал это текст сообщения в виде массива каналов с длиной 20, второй канал double в котором номер телефона.
    Никаких команд посылать не требуется. Приходит сообщение, драйвер сам отправляет в каналы данные.

    #35469
    Mikhail
    Модератор

    Проверил по коду драйвера — при отправке СМС проверяется, содержит ли строка символы Unicode, и в зависимости от этого кодируется PDU.

    Латинскими буквами можно отправить до 140 символов. Русскими до 70. Если больше, то сообщение должно отправляться несколькими пакетами, что не реализовано. Кто помнит, на старых телефонах длинные СМС приходили, постепенно обновляясь.

    #35472
    manjey73
    Участник

    Собственно я только прием делал. Отправку и так драйвер делает.
    Что менялось добавилось.

    Shared — TagCode.cs добавлены два канала

    // Добавленный код ---
    public const string InMsg = nameof(InMsg);
    public const string PhoneN = nameof(PhoneN);
    // Добавленный код ---

    Shared — CnlPrototypeFactory.cs добавлены каналы для создания

    // Добавленный код ---
    group.CnlPrototypes.Add(new CnlPrototype
    {
     Name = Locale.IsRussian ? "Входящeе Сообщения" : "Input Messages",
     DataLen = 20,
     CnlTypeID = CnlTypeID.Input,
     TagCode = TagCode.InMsg,
     FormatCode = FormatCode.String,
     DataTypeID = (int)TagDataType.Unicode
    });
    
    group.CnlPrototypes.Add(new CnlPrototype
    {
     Name = Locale.IsRussian ? "Номер телефона" : "Phone number",
     CnlTypeID = CnlTypeID.Input,
     TagCode = TagCode.PhoneN,
     FormatCode = FormatCode.N0
    });
    // Добавленный код ---

    Ну и собственно код, добавленный в Logic — пишу весь метод, куда добавлен код.

            /// <summary>
            /// Creates events according to the received messages.
            /// </summary>
            private void CreateEvents()
            {
                foreach (Message message in messages)
                {
                    DeviceData.EnqueueEvent(new DeviceEvent(DeviceTags[TagCode.Msg])
                    {
                        Timestamp = DateTime.UtcNow,
                        CnlVal = 0.0,
                        CnlStat = CnlStatusID.Defined, // has informational severity
                        TextFormat = EventTextFormat.CustomText,
                        Text = message.Phone + "; " + message.Text,
                        Descr = string.Format(Locale.IsRussian ?
                            "Сообщение от {0}" :
                            "Message from {0}", message.Phone)
                    });
    
                    // Добавленный код -------------------
                    string phone = message.Phone.Replace("+", "");
                    double dPhone;
    
                    DeviceData.SetUnicode(TagCode.InMsg, message.Text, 1);
    
                    if (double.TryParse(phone, NumberStyles.Any, CultureInfo.InvariantCulture, out dPhone))
                    {
                        DeviceData.Set(TagCode.PhoneN, dPhone, 1);
                    }
                    else
                    {
                        DeviceData.Invalidate(TagCode.PhoneN, 1);
                    }
                    // Добавленный код -------------------
                }
            }
    

    Вот и все. Глобального копания драйвера не было 🙂 Если правильно понимаю, то при цикличном запуске драйвера идет проверка поступивших СМС, после чтения СМС происходит ее удаление. Просто тут параллельно с выводом event это же выводится в каналы Сообщение и Номер.

    • Этот ответ был изменен 1 месяц назад от manjey73.
Просмотр 4 сообщений - с 16 по 19 (из 19 всего)
  • Вы должны авторизироваться для ответа в этой теме.