Приложение Windows для чтения номера входящего телефонного звонка с порта RJ11

Мне нужно создать приложение Windows, которое считывает номер входящего телефонного звонка из COMX, и у меня есть следующий код:

public partial class frmMain : Form
{

    public frmMain ()
    {
        InitializeComponent();
        if (!serialPort1.IsOpen)
        {
            try
            {
                serialPort1.Open();
            }
            catch (System.Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }
    }

delegate void OutputUpdateDelegate(string data);
private void OutputUpdateCallback(string data)
 {
     txtReceive.Text += data;
 }




    private void DataRec(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
    {
        try
        {
            string data = serialPort1.ReadExisting(); 
            txtReceive.Invoke(new OutputUpdateDelegate(OutputUpdateCallback),data);                
        }
        catch (System.Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }
    }      

}

Поскольку у меня нет модема для тестирования, мне нужно знать, как создать поддельный вызов для теста и как прочитать только номер телефона вместо чтения всей строки, поступающей из метода «ReadExisting ()», есть ли способ кроме разделения строки? если нет, как выглядит входящая строка?

Пожалуйста, порекомендуйте.


person Fadl Assaad    schedule 30.05.2016    source источник
comment
Получите руководство по программированию для вашего модема, чтобы получить образцы ответов. Использует ли ваш кабель RJ11 9/25-контактный разъем, USB или соединение Ethernet на ваших компьютерах? Простой способ протестировать часть кода для обмена сообщениями — установить виртуальное TCP-соединение с клиентом и сервером. Сервер будет имитировать модем и клиент, отправляющий сообщения вашему ПК.   -  person jdweng    schedule 30.05.2016
comment
Спасибо, @jdweng, я ценю вашу подсказку, я ищу виртуальное TCP-соединение и нахожу способ проверить с помощью Hyper Terminal, но я не могу сделать поддельный телефонный звонок (например, ввести номер +999999999) все, что я Я могу написать в терминале и поймать значение в моем коде. Что касается ответа на ваш вопрос, модем, который я планирую использовать, имеет порт RJ11 с разъемом 9/25 контактов.   -  person Fadl Assaad    schedule 31.05.2016
comment
@jdweng, извините, модем, который я планирую использовать, имеет порт RJ11, а не любой из упомянутых выше.   -  person Fadl Assaad    schedule 31.05.2016
comment
Разъем 9/25 можно подключить, соединив контакты 2 и 3 проволокой или скрепкой. Делал это много раз, чтобы проверить код.   -  person jdweng    schedule 31.05.2016
comment
@jdweng Я подключаю модем и пытаюсь позвонить, я получаю только RING RING ... без какой-либо другой информации, которую я ожидал получить NMBR = xxxxxxxx, зная, что я включил CallerId с помощью AT + VCID = 1. Я получил OK, но все еще не получаю ожидаемый результат, при подключении кабеля к телефону вижу номер звонящего. Как с этим бороться?   -  person Fadl Assaad    schedule 01.06.2016
comment
@jdweng В моем предыдущем комментарии я имел в виду, что линия поддерживает CallerID.   -  person Fadl Assaad    schedule 01.06.2016
comment
@jdweng возможно ли получить OK, когда я набрал AT + VCID = 1, но модем все еще не поддерживает идентификатор вызывающего абонента? следующая ссылка показывает множество возможных команд для включения идентификатора вызывающего абонента модема, я попробовал их все и получил сообщение об ошибке, за исключением случаев, когда я использовал AT + VCID = 1, он дал OK, означает ли это, что модем принимает идентификатор вызывающего абонента или что? Что мне не хватает? я прочитал ссылку: beiley.com/acallerid/enable.html   -  person Fadl Assaad    schedule 01.06.2016
comment
OK, вероятно, является просто подтверждением того, что устройство получило команду, но не обязательно означает, что линия RJ11 может работать в этом режиме. Измерьте, что для последовательного порта установлено значение «Нет аппаратного обеспечения» и «Нет программного квитирования». Последовательный порт должен быть установлен на 8 бит, без четности, один стоповый бит. ОТПРАВКА может быть синхронной, но полученные данные должны быть событием. Я подозреваю, что ваши ошибки связаны с тем, что для последовательного порта не установлено значение 8 Bit No Parity. Использование других настроек может привести к ошибкам, когда одни команды будут работать, а другие нет. Работает ли модем с программным обеспечением поставщиков?   -  person jdweng    schedule 01.06.2016
comment
@jdweng последовательный порт настроен на 8 бит, без четности, один стоповый бит, когда я подключаю линию RJ11 к телефону и получаю вызов, номер вызывающего абонента появляется на экране, но когда я подключаю линию на моем встроенном ноутбуке модем я получаю только Ring, я не пробовал, работает ли модем с приложением поставщиков (поскольку у меня еще нет телефонной линии дома, лол, мне нужно доставить свой ноутбук на работу, чтобы проверить это, я спросил, могу ли я совершать фальшивые телефонные звонки). Я уверен, что приведенный выше код должен работать, но, похоже, я что-то упускаю. Как убедиться, что встроенный модем поддерживает CallerId? Есть идеи?   -  person Fadl Assaad    schedule 01.06.2016
comment
Вот почему я рекомендовал попробовать программное обеспечение поставщика. Вам не нужно звонить, просто проверьте настройки. Возможно, проблема в кабеле между ПК и модемом или в ПК установлен драйвер последовательного порта. Возможно, вы используете универсальный драйвер последовательного порта Microsoft вместо драйвера поставщика.   -  person jdweng    schedule 01.06.2016
comment
@jdweng Хорошо, я проверю это, еще раз спасибо за вашу помощь :)   -  person Fadl Assaad    schedule 01.06.2016
comment
Привет @jdweng, я купил модем TRENDnet TFM-561u, который поддерживает идентификатор вызывающего абонента, после того, как я его установил и подключил кабель, я набираю номер, но я все еще получаю звонки на экране гипертерминала, я включил идентификатор вызывающего абонента с помощью AT+VCID =1, и я поставил +VCID=1 в свойствах модема и перезапустил, но все равно получаю только кольца, моя ОС Win 8 64 бита. У меня закончились идеи, что мне попробовать?   -  person Fadl Assaad    schedule 06.06.2016
comment
Программное обеспечение поставщика работает? Попробуйте позвонить по номеру и посмотрите, услышите ли вы звонок телефона. Вы отключили управление аппаратным и программным обеспечением в Hyperterminal? Вы установили диск на веб-странице: trendnet.com/support/supportdetail. asp?prod=130_TFM-561U? У меня сейчас нет времени читать мануал. Я думаю, что кольцо означает, что вы не снимаете трубку, что означает, что модем не закрывает сигнал трубки. Подключите телефон к RJ11 на модеме и посмотрите, слышите ли вы гудок.   -  person jdweng    schedule 06.06.2016
comment
@jdweng Вы отключили средства управления аппаратным и программным обеспечением в Hyperterminal? не могли бы вы объяснить подробнее, запускается ли программное обеспечение поставщика? У меня есть в инсталляционном пакете Netwaiting и Classic Phone Tools Я думаю, вы имеете в виду второй, я его открываю, но не нашел способа подключиться к СОМ. Я прочитал в stackoverflow, что Win 8 не поддерживается для TFM-561u link Я не хочу шуметь :), у меня закончились идеи, кто-то сказал мне, что, возможно, на модем влияет блок питания компьютера, это странно!   -  person Fadl Assaad    schedule 07.06.2016
comment
Работает ли телефон в розетке? Какой интерфейс поддерживает инструмент Classic Phone? Должно быть меню настроек. Вы настроены на Dial или Pulse? Питание ПК может повлиять на соединение, но я не думаю, что мы можем сделать какие-либо выводы. Гипертерминал имеет меню настройки связи. Не установлено на моем компьютере. Проверим позже.   -  person jdweng    schedule 07.06.2016
comment
@jdweng фильтр подключен к настенной розетке, а телефон подключен к телефонному порту фильтра. Я следую меню настройки, они упомянули, что программное обеспечение автоматически подключается к модему. Я попытаюсь настроить модем на другой ноутбук с Win7 и повторить все шаги, надеюсь, проблема будет решена.   -  person Fadl Assaad    schedule 07.06.2016
comment
У вас есть разветвитель на разъеме RJ11? Телефонные разъемы четырехпроводные, по два на каждую телефонную линию. Вы можете иметь 1 или 2 телефонные линии в разъеме. Есть два разных типа сплиттеров. Один тип, который берет линию 1 и позволяет подключать два разных устройства к линии 1. Второй тип берет линию 1 и подключает один выходной разъем, а затем ставит линию 2 на одну линию 1 второго выходного разъема. Если у вас есть только одна линия на RJ11, то 2-й тип не будет работать. Начните тестирование, удалив любой разветвитель и подключив его напрямую к стене.   -  person jdweng    schedule 07.06.2016
comment
@jdweng Я пытался подключить его напрямую к стене, но все равно не работает, на моей телефонной линии есть DSL, поэтому сплиттер здесь используется в качестве фильтра. У меня есть одна телефонная линия и один местный телефон, когда я тестирую модем, я отключил местный телефон и просто использую модем.   -  person Fadl Assaad    schedule 07.06.2016
comment
У меня дома есть высокоскоростной DSL, и я использую Ethernet между ПК и модемом. Verizon предоставил мне программное обеспечение, которое автоматически настраивало все через Ethernet. Никогда не пробовал другие интерфейсы.   -  person jdweng    schedule 07.06.2016
comment
@jdweng история, кажется, подошла к концу, служба поддержки TFM-561u ответила мне, упомянув, что модем не поддерживает идентификатор вызывающего абонента, странно, что продавец сказал другие слова, в любом случае я встречал человека, который сталкивался с той же проблемой раньше, и его компания заказывала специальные модемы для этого, которые работают, как и ожидалось, поэтому я попросил его подготовить один для меня, чтобы проверить, и если он работает, я его куплю :) надеюсь, это будет конец этой проблемы :)   -  person Fadl Assaad    schedule 08.06.2016
comment
Телефон снимает трубку, когда к телефонной линии подключается низкое сопротивление, что создает тональный сигнал набора номера. Если оставить трубку поднятой, в конечном итоге будет подан быстрый сигнал «занято», и в конечном итоге линия отключится. Соединение DSL не требует снятия трубки. DSL является высокоскоростным (телефон низкоскоростным) и проходит через блокировочный конденсатор, который используется телефонным соединением. Адаптер, который вы купили, вероятно, имеет низкое сопротивление, из-за чего телефон снимается с трубки, и вы получаете быстрый сигнал «занято» (телефон снят с трубки), который модем считает мелодией звонка.   -  person jdweng    schedule 08.06.2016
comment
@jdweng Как вы думаете, будет ли иметь значение подключение телефона к сети плюс модем? на данный момент у меня есть один кабель я его отсоединяю от телефона и вставляю в модем, как вы думаете если я использую разветвитель и подключаю оба это может повлиять на результат?   -  person Fadl Assaad    schedule 08.06.2016
comment
Я подозреваю, что если вы подождете 1/2 часа с поднятой трубкой, вы можете не получить RING на Hyperterminal. У меня дома есть DSL с разветвителем на телефон, и у меня никогда не было проблем с использованием телефона, модема или того и другого.   -  person jdweng    schedule 08.06.2016


Ответы (1)


Я наконец купил продукт идентификации вызывающего абонента, который взаимодействует с последовательным портом и предоставляет номер вызывающего абонента следующим образом: R99999999E, и я сделал соответствующую модификацию кода, чтобы прочитать номер, и все работает, как ожидалось.

Примечание: модем TRENDnet "TFM-561u" не поддерживает идентификатор вызывающего абонента, и на самом деле их служба поддержки ответила мне, что у TRENDNet нет продукта, поддерживающего идентификатор вызывающего абонента.

person Fadl Assaad    schedule 01.09.2016