Модераторы: Sardar, Aliance

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Набор телеф. номера из броузера, нужно позвонить JavaScript'ом 
:(
    Опции темы
WIPS
Дата 28.7.2006, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 22.5.2006
Где: Украина, Киев

Репутация: 2
Всего: 8



Задача: необходимо набирать номер телефона прямо из браузера (не для коннекта к нету, а просто, чтобы позвонить).
Крайне не желательна установка каких-либо доп. библиотек или программ.
Сейчас копаю в направлении JavaScript + ActiveX.
Если кто, что может сказать, а лучше показать, буду оч. рад. 
--------------------
Автопроизводители, машины, марки, модели!
PM MAIL WWW ICQ Skype   Вверх
Sardar
Дата 28.7.2006, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



В смысле? Кнопки красивые нарисовать можно, введёный пользователем номер можно отдать звонилке, например просто составив ссылку типа voip:// или подобное. В чём конкретно вопрос?

P.S. надеюсь ты не думаешь что с браузера можно куданибудь позвонить  smile   


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
WIPS
Дата 28.7.2006, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 22.5.2006
Где: Украина, Киев

Репутация: 2
Всего: 8



Опишу на пальцах.
Пусть в браузере есть текстовый INPUT. Я ввожу туда номер, нажимаю кнопку и модем этот номер набирает.
Цитата

P.S. надеюсь ты не думаешь что с браузера можно куданибудь позвонить

Не думаю, т.к. не понял, что вы под этим имеете в виду smile

Добавлено @ 14:10 
2Sardar
Цитата
введёный пользователем номер можно отдать звонилке, например просто составив ссылку типа voip://

можно про это поподробнее, или ссылочку какую?
 
--------------------
Автопроизводители, машины, марки, модели!
PM MAIL WWW ICQ Skype   Вверх
Sardar
Дата 28.7.2006, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Цитата(WIPS @  28.7.2006,  12:59 Найти цитируемый пост)
Я ввожу туда номер, нажимаю кнопку и модем этот номер набирает.

Браузер не имеет доступа к модему, это всё скрыто слоём абстракции, браузер работает с сокетами. Вот у меня нет дозвона, постоянный 1Мб коннект с постоянным IP. К тому же из JS это всё не видно ибо лишнее.


Цитата(WIPS @  28.7.2006,  12:59 Найти цитируемый пост)
можно про это поподробнее, или ссылочку какую?

Если у пользователя установленна voip прога, например Skype, то прога слушает свои линки. Skype, NetMeeting и другие слушают callto:// линки, при клике прога запускаеться и дозваниваеться. 


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
12345c
Дата 28.7.2006, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Круглый
****


Профиль
Группа: Vingrad developer
Сообщений: 2018
Регистрация: 26.12.2005
Где: наша не пропадала ?

Репутация: 57
Всего: 101



Цитата(Sardar @  28.7.2006,  13:34 Найти цитируемый пост)
надеюсь, ты не думаешь, что с браузера можно куданибудь позвонить

"Создание в браузере чувствительной области окна, работающей как микрофон, средствами JavaScript"

Через ActiveX возможно, но она будет доп. библиотека, загружаемая из веба. 
PM WWW   Вверх
Sartorius
Дата 28.7.2006, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1568
Регистрация: 18.7.2006
Где: Ivory tower

Репутация: нет
Всего: 37



 Мона номер перадавать CGI - приложению на сервере - Пусть с сервера позвонит))) 
PM MAIL ICQ   Вверх
WIPS
Дата 28.7.2006, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 22.5.2006
Где: Украина, Киев

Репутация: 2
Всего: 8



2Sardar - я понимаю, что браузер не системное ПО и в силу своей специфики вобще должен быть изолирован от аппаратного обеспечения, но оч. надо.

12345c, вот вот, через ActiveX сейчас и пытаюсь вот так:
Код

        //author : Dhute Julie 
        //<a href="http://www.dhost.info/julie/">Julie Dhute</a>
        // et je suis fiere de ma b?tise   

       var comm = null;
       try
       {
          if(!(comm = new ActiveXObject("MSCommLib.MSComm")))
             throw "MSCOMMLib.MSComm";
       }
       catch(e)
       {           
          try
          {
             if(!(comm = new ActiveXObject("MSCommLib.MSComm.1")))
               throw "MSCOMMLib.MSComm.1";
          }
          catch(e)
          {
            alert("Error: Install the "+e+" ActivX ");
          }
       }

       if(comm)
       {
          comm.CommPort = 2;
          comm.Settings = "9600,N,8,1";
          comm.PortOpen = true;
          alert('dialling');
//          comm.Output = "C";
          comm.Output = "ATDT 555-5555"
          comm.PortOpen = false;
       }

но почему-то не создается этот обьект smile
MSCOMM32.OCX поставил, ActiveX'у все разрешил, пользую IE6. Уже не знаю в чем дело smile
IE говорит:
  Ошибка: Невозможно создание объекта сервером программирования объектов
  Код:        0

Добавлено @ 14:38 
2Sartorius, здорово придумано, но мне придется туда-же и юзера отправлять (интересно POST позволяет передавать такие объемы?), чтобы он там поговорил по телефону, а потом ещё и обратно на раб. место smile 
--------------------
Автопроизводители, машины, марки, модели!
PM MAIL WWW ICQ Skype   Вверх
Sardar
Дата 28.7.2006, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Цитата(WIPS @  28.7.2006,  13:35 Найти цитируемый пост)
но почему-то не создается этот обьект

Потому что из браузера. Скрипт нужно подписать что бы подобный код можно было запустить, да и то под вопросом. К тому же какой в этом смысл? Ну говоришь ты с модемом на прямую, но ведь ещё нужно умудриться инфу закодировать и на ту сторону отправить. Если пользуешь обшие протоколы типа TCP/IP то, смысл его реализовывать самому? Или просто голос передать, как по телефону (не уверен что модем способен на это), то звук нужно как то умудриться захватить. Вообще это всё физически не возможно на JS smile
У пользователя должен быть модем, а этот девайс сейчас (по крайней мере у нас) очень редко встретишь.

Цитата(12345c @  28.7.2006,  13:24 Найти цитируемый пост)
"Создание в браузере чувствительной области окна, работающей как микрофон, средствами JavaScript"
Через ActiveX возможно, но она будет доп. библиотека, загружаемая из веба.  

Ага, приложите ваши ладони по углам монитора и говорите в вот эту красную точку smile   


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
WIPS
Дата 28.7.2006, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 22.5.2006
Где: Украина, Киев

Репутация: 2
Всего: 8



2Sardar
Цитата

Скрипт нужно подписать что бы подобный код можно было запустить

как это сделать?
Цитата

К тому же какой в этом смысл?

Смысл такой: модем набирает номер, потом юзер поднимает трубку обычного телефона и говорит. Модемы у юзеров есть.

Согласен, что решение немного неординарное получается. Но надо сделать, это не моя воля! Тем более видно концы, остается только их вытянуть. 

Кстати, я уже видел подобное приложение, но там устанавливали доп. VB библиотеку, к томуже не мелкософтовскую, а мне это не подходит.

Может быть кто знает как стандартную виндовскую звонилку с параметрами вызвать? Можно было бы ей номер в кач-ве параметра передать, может чего и получилось бы...
 
--------------------
Автопроизводители, машины, марки, модели!
PM MAIL WWW ICQ Skype   Вверх
Sardar
Дата 28.7.2006, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Цитата(WIPS @  28.7.2006,  13:57 Найти цитируемый пост)
Может быть кто знает как стандартную виндовскую звонилку с параметрами вызвать? 

Ищи Shell.Exec по форуму, много раз обсуждали (в основном народ вири пытаеться запустить  smile ).

Цитата(WIPS @  28.7.2006,  13:57 Найти цитируемый пост)
как это сделать?

Нужен собственный сертификат, разместить его на пулбичном сервере сертификатов, у юзеров кликнуть "доверять подписи", подписать скрипты. На самом деле это жуткая морока и деньги на ветер, подорбнее на MSDN'е, ищем signing javascript. 9/1 что ты бросишь затею с подписью smile 


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
WIPS
Дата 28.7.2006, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 22.5.2006
Где: Украина, Киев

Репутация: 2
Всего: 8



2Sardar
Цитата

Ищи Shell.Exec по форуму

Тут проблема немножко в другом. Как с Shell.Exec работать понятно. Я не могу найти в ХР звонилку smile Помню, что в 98-й была такая штука. Вроде "Телефон" называлась, а в ХР нет чтоли?
Цитата

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

Коенчно если все обстоит так как ты говоришь, то геморрой свеч не стоит. Но не ужели здесь у людей были вот так вот подписанные скрипты. 
--------------------
Автопроизводители, машины, марки, модели!
PM MAIL WWW ICQ Skype   Вверх
Sardar
Дата 28.7.2006, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Цитата(WIPS @  28.7.2006,  15:10 Найти цитируемый пост)
Но не ужели здесь у людей были вот так вот подписанные скрипты.  

Не из веба пользовали. Ну просто представь заходишь ты на страницу, а в это время твой телефон вдруг названивает кому автоматом, это денег стоит smile
К тому же так людей зафлуживать телефонными звонками можно. И ещё компонент MSCommLib.MSComm позовляет обращаться к COM порту, а не у каждого там модем (вернее где ты ещё видел модемы на COM порте? smile ). 


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
WIPS
Дата 28.7.2006, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 22.5.2006
Где: Украина, Киев

Репутация: 2
Всего: 8



Цитата
Не из веба пользовали.

Т.е. ты хочешь сказать, что если положить какой-нибудь dial.html в котором страничка с тем скриптом к себе на винт, то он должен работать? У меня не работает smile
А модемы на кот. я нацелен - все внутренние, так что должны работать через СОМ, да и USB-шные по моему тоже COM порт эмулируют, но это к делу сейчас не относится. У меня есть COM модем и надо заставить звонить хотябы его.
Цитата
Ну просто представь заходишь ты на страницу, а в это время твой телефон вдруг названивает кому автоматом, это денег стоит

Я все понимаю, страница будет лежать в лок. сети, и пользовать ее будут только те кому положено. Это не есть какой либо общедоступный сайт. Только для внутреннего пользования так сказать. 
--------------------
Автопроизводители, машины, марки, модели!
PM MAIL WWW ICQ Skype   Вверх
Sardar
Дата 28.7.2006, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Цитата(WIPS @  28.7.2006,  16:04 Найти цитируемый пост)
Т.е. ты хочешь сказать, что если положить какой-нибудь dial.html в котором страничка с тем скриптом к себе на винт, то он должен работать?

Нет, это значит если положить скрипт .js файл и запустить его (двойным кликом например), то должно заработать если компонент установлен правильно.

Цитата(WIPS @  28.7.2006,  16:04 Найти цитируемый пост)
да и USB-шные по моему тоже COM порт эмулируют,

Ты не совсем понял, либа позволяет обращаться к COM порту, а не абстрактно "к модему". Пусть висит он на USB и "эмулирует" COM, модем всё равно не на RS232 ифейсе, которому ты обращаешся. Впрочем раз есть рабочий раритет, то должно работать, останеться только вспомнить команды модема, их много smile 


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
WIPS
Дата 28.7.2006, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 22.5.2006
Где: Украина, Киев

Репутация: 2
Всего: 8



Цитата
Нет, это значит если положить скрипт .js файл и запустить его (двойным кликом например), то должно заработать если компонент установлен правильно.

Можно пример такого файла на основе того скрипта, что я выкладывал? У меня уже просто спортивный интерес smile
Цитата
Ты не совсем понял, либа позволяет обращаться к COM порту, а не абстрактно "к модему". Пусть висит он на USB и "эмулирует" COM, модем всё равно не на RS232 ифейсе, которому ты обращаешся.

В любом случае, либа тоже использует WinAPI, напрямую стучаться в порт через контроллер, насколько я знаю, можно было только в DOS'е. Поэтому если драйвер написан правильно, мне кажется такая эмуляция возможна, более того она для работы с упомянутыми тобой командами модема и делается. Если не прав - поправте.
Цитата
команды модема, их много

Мне всего одна нужна: "ATDT 5555555" - набрать.
И повесить трубку smile 
--------------------
Автопроизводители, машины, марки, модели!
PM MAIL WWW ICQ Skype   Вверх
Sardar
Дата 28.7.2006, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Цитата(WIPS @  28.7.2006,  16:32 Найти цитируемый пост)
Поэтому если драйвер написан правильно, мне кажется такая эмуляция возможна, 

Либа вообще не драйвер по моему, открыает порт как файл и ioctl необходимые настройки. Не уверен что так можно открыть USB, он "более умный", девайс на нём экспортирует массу интерфейсов, часть которых определена по стандарту (HID, накопители и т.д.), а часть "пользовательские". COM порт же тривиальная штукa, с ним рабоать можно как с общим (generic) character device.

Цитата(WIPS @  28.7.2006,  16:32 Найти цитируемый пост)
Можно пример такого файла на основе того скрипта, что я выкладывал? 

Уменя нет этого компонента, к тому же я сижу под линухом smile
Просто помести это в .js и запусти, вывод выкладывай сюда:

Код

shell = WScript.CreateObject("WScript.Shell");
var comm = null;
      try
      {
          if(!(comm = WScript.CreateObject("MSCommLib.MSComm")));
               throw "MSCOMMLib.MSComm";
       }
       catch(e)
       {           
          try
          {
             if(!(comm = WScript.CreateObject("MSCommLib.MSComm.1")));
               throw "MSCOMMLib.MSComm.1";
          }
          catch(e)
          {
             shell.Popup("Error: Install the "+e+" ActivX ", 10, "WTF?", 48);
          }
       }

shell.Popup("OK", 10, "Everything is OK", 64);


Если окошко с "ОК" будет, тогда идём дальше 


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
WIPS
Дата 28.7.2006, 19:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 22.5.2006
Где: Украина, Киев

Репутация: 2
Всего: 8



Сообщение с "ОК" было!!! 
Но перед ним было: "Error: Install the [object Error] ActivX" smile
Вобщем если у тебя поменять так:
Код

if (comm)
    shell.Popup("OK", 10, "Everything is OK", 64);

, то никакого окошка "ОК" нету smile
Короче не хотит этот объект создаваться smile
Итересно, этот код вообще кому нибудь удавалось запустить? 
--------------------
Автопроизводители, машины, марки, модели!
PM MAIL WWW ICQ Skype   Вверх
WIPS
Дата 29.7.2006, 01:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 22.5.2006
Где: Украина, Киев

Репутация: 2
Всего: 8



2Sardar, здесь ты писал:
Цитата
Недавно игрался с контролерами моторов от Motorola, управляються по COM(RS232) порту, тестовая прога на веб-страничках, где для доступа к COM использовался их собственный ActiveX. По идее вещь простая, по сети должны встречаться. Нужно будет заинсталить к пользователю, зарегистрировать в винде, пользовать.

Можно об этом поподробнее? Что за AX компонента, как исталить, регистрировать и пользовать? Или за давностью все забылось? 
--------------------
Автопроизводители, машины, марки, модели!
PM MAIL WWW ICQ Skype   Вверх
Sardar
Дата 29.7.2006, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



То шло с инсталяшкой, защищено лицензией вероятно, по моему шло с примером драйвера здесь (треубеться регстрация для скачки). У тебя есть уже компонент, просто нужно зарегистрировать его правильно (прописываеться его GUID в регистре по моему), спроси здесь как

Как только компонент будет доступен из под любого другого языка, он станет виден и для JScript. 


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
WIPS
Дата 31.7.2006, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 22.5.2006
Где: Украина, Киев

Репутация: 2
Всего: 8



Я таки пробился к COM-порту!
Этот код рабочий, просто нужно было правильно зарегистровать MSCOMM32.OCX компоненту (здесь описано как). Причем работает из браузера.
Теперь осталось разобраться с командами для COM-порта и модема.
Спасибо, Sardar. 
--------------------
Автопроизводители, машины, марки, модели!
PM MAIL WWW ICQ Skype   Вверх
WIPS
Дата 31.7.2006, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 22.5.2006
Где: Украина, Киев

Репутация: 2
Всего: 8



Чего-то опять нехочет работать smile
Все, что посылаю в порт приходит ко мне обратно.
Посылаю "ATDT123456".
Тут же приходит ответ "ATDT123456".
Может нжно еще какие-то команды посылать? 
--------------------
Автопроизводители, машины, марки, модели!
PM MAIL WWW ICQ Skype   Вверх
Romikgy
Дата 31.7.2006, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 1
Всего: 146



дык правильно приходит эхо ответ , дождись след. сообщения типа ОК
посмотри как происходит обмен с модемом хоть в гипертерминале 


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
WIPS
Дата 31.7.2006, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 22.5.2006
Где: Украина, Киев

Репутация: 2
Всего: 8



Да что-то след. сообщение не приходит smile 
Может дело в следующем?
Из книги "Программирование модема":
Цитата
Все команды, передаваемые компьютером модему, надо начинать префиксом AT (ATtention - внимание), At, at, aT и заканчивать символом возврата каретки (<CR>).

Так вот вопрос, как этот самый <CR> из JavaScript'а правильно передать? Не могу же я каждый раз по Enter'у бить smile Подскажите пожалуйста...
 

Это сообщение отредактировал(а) WIPS - 31.7.2006, 13:45
--------------------
Автопроизводители, машины, марки, модели!
PM MAIL WWW ICQ Skype   Вверх
Romikgy
Дата 31.7.2006, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 1
Всего: 146



Цитата(Romikgy @  31.7.2006,  12:01 Найти цитируемый пост)
посмотри


Цитата(Romikgy @  31.7.2006,  12:01 Найти цитируемый пост)
в гипертерминале  


Добавлено @ 13:49 
символ в 16ричке 13 и 10 имхо 


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
WIPS
Дата 31.7.2006, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 22.5.2006
Где: Украина, Киев

Репутация: 2
Всего: 8



Из той же книги:
Цитата
S3 (0..127) - Регистр содержит ASCII-код символа возврата каретки - <CR>. По умолчанию регистр содержит ASCII-код 13 (Control-M).

Но вопрос не в этом, как подать в порт именно его код? Так:
Код

comm.Output = '\OD';

не помогает.
Так:
Код

comm.Output = 0x0D;

вобще отправлять не хотит smile 
--------------------
Автопроизводители, машины, марки, модели!
PM MAIL WWW ICQ Skype   Вверх
Sardar
Дата 31.7.2006, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



WIPS, как везде ' \r'  
Можно любой символ построить из String.fromCharCode(<юникодовский код>);  


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
WIPS
Дата 31.7.2006, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 22.5.2006
Где: Украина, Киев

Репутация: 2
Всего: 8



Sardar, спасибо. Помогло. 
--------------------
Автопроизводители, машины, марки, модели!
PM MAIL WWW ICQ Skype   Вверх
WIPS
Дата 2.8.2006, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 22.5.2006
Где: Украина, Киев

Репутация: 2
Всего: 8



На пути стала новая преградаsmile
Сейчас очень хочется знать, что в этом самом COM-порте происходит. У MsComm Control'a есть свойство CommEvent, которое "Returns the most recent communication event or error". В нем лежит код события/ошибки. 
Здесь эти коды описаны. Но проблема в том, что у меня оно возвращает коды, которые там НЕ описаны. 
При открытии/закрытии порта оч. часто 26624. Есть ещё такие как 37, 17674, 17408, 11575. В MSDN'е их не нашел (может быть плохо искал). Подскажите плз, где это можно посмотреть.
--------------------
Автопроизводители, машины, марки, модели!
PM MAIL WWW ICQ Skype   Вверх
Romikgy
Дата 2.8.2006, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 1
Всего: 146



Цитата(WIPS @  2.8.2006,  12:26 Найти цитируемый пост)
 У MsComm Control'a есть свойство CommEvent, которое "Returns the most recent communication event or error"

чет я такое найти ни где не могу, имхо события это одно а ошибки это другое,
события правильно описаны , имхо , а ошибки искать надо

Добавлено @ 13:52 
Цитата(Romikgy @  2.8.2006,  12:42 Найти цитируемый пост)
найти ни где не могу,

нашел, но ясности не добавило smile


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Sardar
Дата 2.8.2006, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Народ, а может мне уже пора тему разделить и двинуть её в железо? smile
WIPS, открой новую в железе или в сях.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
WIPS
Дата 2.8.2006, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 22.5.2006
Где: Украина, Киев

Репутация: 2
Всего: 8



По поводу MsComm.CommEvent теперь сюда.
2Sardar, там вроде про эту компонету чаще пишут чем железе и С++.
--------------------
Автопроизводители, машины, марки, модели!
PM MAIL WWW ICQ Skype   Вверх
WIPS
Дата 3.8.2006, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 22.5.2006
Где: Украина, Киев

Репутация: 2
Всего: 8



Вобщем, в итоге для работы с COM портом получилась такая штука:
Код

/**
 * Class for working with RS232 serial ports. 
 * Uses ActiveX, i.e. MSIE only compatible. MSCOMM32.OCX properly installed and registered is also needed.
 *
 * Small using example:
 * <code>
 *      var comm     = null;
 *      var request  = 'ATX\r';
 *      var answer   = '';
 *      
 *      // Pseudo-obj creation
 *      new COMPort(1, '9600', 'N', '8', '1', 100);  
 *
 *      // Needed obj creation
 *      comm     = new COMPort(1, '9600', 'N', '8', '1', 100);
 *
 *      // Obj initialization
 *      if (!comm.init())    alert(comm.Errors[comm.lastErrorIndex]);
 *
 *      // Opening port
 *      if (!comm.open())    alert(comm.Errors[comm.lastErrorIndex]);
 *      
 *      // Sending data in port
 *      if (!comm.send(msg)) alert(comm.Errors[comm.lastErrorIndex]);
 *      
 *      // Receiving data
 *      if (!(answer = comm.receive())) alert(comm.Errors[comm.lastErrorIndex]);
 *      else                            alert('You have received: ' + answer); 
 *      
 *      // Closing port. Don't forget abuot it! No other application can use port if it is not closed.
 *      if (!comm.close())   alert(comm.Errors[comm.lastErrorIndex]);
 * </code>
 *
 * @author WIPS
 */

    /**
     * Constructor. Before creating needed object you need to create pseudo-object create this function
     * prototype. Do like this:
     * <code>
     *      // Creation of pseudo-object. No variable assign is done.
     *      new COMPort(1, '9600', 'N', '8', '1', 100);
     * </code>
     *
     * @param   int   port_number           - number of COM port (1, 2 ...)
     * @param   int   communication_speed
     * @param   char  parity                - usually N
     * @param   int   data_bits_cnt         - usually 8
     * @param   int   stop_bits_cnt         - usually 1
     */
    function COMPort(port_number, communication_speed, parity, data_bits_cnt, stop_bits_cnt)
    {
        /**
         * Last error index in COMPort.prototype.Errors array.
         * @var int
         */
        this.lastErrorIndex     = 0;

        /**
         * COM port number.
         * @var int
         */        
        this.portNumber         = port_number;
        
        /**
         * COM port speed (9600, 19200 ...).
         * @var int
         */        
        this.communicationSpeed = communication_speed;
        
        /**
         * Parity.
         * @var char
         */        
        this.parity             = parity;
        
        /**
         * Number of data bits.
         * @var int
         */         
        this.dataBitsCnt        = data_bits_cnt;

        /**
         * Number of stop bits.
         * @var int
         */         
        this.stopBitsCnt        = stop_bits_cnt;
        
        /**
         * Object from MSCOMM32.OCX created here.
         * @var int
         */        
        this.msComm             = null;
    }

    /**
     * Known errors collection.
     * @var array
     */
    COMPort.prototype.Errors = new Array
    (
        '',                                                       // 0
        'Unable to initiate MSCOMM32.OCX. ActiveX error.',        // 1  
        'Port already opened.',                                   // 2
        'Unable to open port.',                                   // 3  
        'Port already closed.',                                   // 4
        'Unable to close port.',                                  // 5
        'Port is closed.',                                        // 6
        'Unable to initiate port.'                                // 7
    );
   
    /**
     * Initialazer. Run this after constructor.
     * We need this thing 'cause of JavaScript OOP feachures. Constructor have to return object.
     * This function initializes it and reports about errors.
     *
     * @return  bool     
     */    
    COMPort.prototype.init = function()
    {
        try 
        {
            if(!(this.msComm = new ActiveXObject("MSCommLib.MSComm")))
                throw "MSCommLib.MSComm";
        }
        catch(e) 
        {
            try 
            {
                if(!(this.msComm = new ActiveXObject("MSCommLib.MSComm.1")))
                   throw "MSCommLib.MSComm.1";
            }
            catch(e)
            {
                this.lastErrorIndex = 1;
                return false;
            }
        }        
        try
        {
            this.msComm.CommPort = this.portNumber;
            this.msComm.Settings = this.communicationSpeed + ',' + this.parity + ',' + this.dataBitsCnt + ',' + this.stopBitsCnt;
            return true;
        }
        catch(e)
        {
            this.lastErrorIndex = 7;
            return false;    
        }
    }
    
    /**
     * Checks if port is opened.
     *
     * @return bool
     */    
    COMPort.prototype.isOpened = function()
    {        
        try
        {
            if (this.msComm.PortOpen == true)   return true;
            else                                return false;
        }
        catch(e)
        {
            return false;
        }
    }
    
    /**
     * Closes port.
     *
     * @return bool
     */     
    COMPort.prototype.close = function()
    {
        if (!this.isOpened())
        {
            this.lastErrorIndex = 4;
            return true;
        }
        this.msComm.PortOpen = false;
        if (!this.isOpened())
            return true;
        else
        {
            this.lastErrorIndex = 5;
            return false;
        }
    }    
    
    /**
     * Opens port.
     *
     * @return bool
     */     
    COMPort.prototype.open = function()
    {
        if (this.isOpened())
        {
            this.lastErrorIndex = 2;
            return true;
        }
        this.msComm.PortOpen = true;
        if (this.isOpened())
            return true;
        else
        {
            this.lastErrorIndex = 3;
            return false;
        }
    }
    
    /**
     * Receives message from port.
     *
     * @return string
     */
    COMPort.prototype.receive = function()
    {
        var msg     = "";
        var isRed   = false;  
        if (!this.isOpened())
        {
            this.lastErrorIndex = 6;
            return false;
        }                       
        var res = this.msComm.Input;
        return res;
    }

    /**
     * Sends message in port.
     *
     * @param  string msg
     * @return bool
     */
    COMPort.prototype.send = function(msg)
    {
        if (!this.isOpened())
        {
            this.lastErrorIndex = 6;
            return false;
        }
        this.msComm.Output = msg;
        return true;
    }

По поводу MsComm.CommEvent так ничего и не нашел и по сему забил smile

P.S. Предлоджения и замечания приветствуются...

Добавлено @ 19:38 
А для модема вот такая:
Код

/**
 * Class for working with modems connected to the COM port. Needs COMPort class to be in its scope.
 * Uses ActiveX, i.e. MSIE only compatible. MSCOMM32.OCX properly installed and registered is also needed.
 * 
 * @author WIPS
 */

    /**
     * Constructor. You can assing modem port (COM1, COM2 ...) or leave this parameter blank. 
     * If port number isn't set, first founded modem will be used (I don't recommend to use this feature ;).
     * Before creating needed object you need to create pseudo-object to create this function
     * prototype. Do like this:
     * <code>
     *      // Creation of pseudo-object. No variable assign is done.
     *      new Modem();
     * </code>
     *
     * @param   int   port_number           - number of COM port (1, 2 ...)
     */
    function Modem(port_number)
    {
        // Pseudo-obj creation
        new COMPort(1, '19200', 'N', '8', '1');
        
        /**
         * Last error index in Modem.prototype.errors array.
         * @var int
         */        
        this.lastErrorIndex      = 0;
        
        /**
         * Modems COM port number.
         * @var int
         */        
        this.portNumber          = port_number;
        
        /**
         * Object of COMPort class created here.
         * @var obj
         */        
        this.comm                = null;
        
        /**
         * There is false in this array on indexes where no-modem found at port.
         * @var array
         */                
        this.modemOnPort         = new Array();
    }
    
    /**
     * Max port number for modem search.
     * @var int
     */   
    Modem.maxComNumber    = 5;
    
    /**
     * Timeout, ms (we need this 'cause we cant communicate with COM-port instantly.
     * @var int
     */       
    Modem.answerTimeout   = 500;

    /**
     * Known errors collection.
     * @var array
     */
    Modem.prototype.errors = new Array
    (
        '',                   // 0
        'Port error.'         // 1  
    );
    
    /**
     * Commands for modem initialization.
     * @var array
     */
    Modem.prototype.predialCommands = new Array
    (
        'AT',   // don't erase this command
        'X',
        'E0',
        'L0'        
    );
    
    /**
     * This function dials number.
     *   
     * @param   string   number
     * @return  bool     
     */ 
    Modem.prototype.dial = function(number)
    {
        if (!(this.comm.open()))
        {
            this.lastErrorIndex = 1;
            return false;
        }
        var command = '';
        for (var i = 0; i < this.predialCommands.length; i++)
            command += this.predialCommands[i];
        command += 'DT' + number + '\r';
        this.comm.send(command);
    } 
    
    /**
     * This function hangs-up phone.
     *
     * @return  bool     
     */ 
    Modem.prototype.hangUp = function(number)
    {
        if (!(this.comm.open()))
        {
            this.lastErrorIndex = 1;
            return false;
        }
        this.comm.close();
    }       
    
    /**
     * Initialazer. Run this after constructor.
     * We need this thing 'cause of JavaScript OOP feachures. Constructor have to return object.
     * This function initializes it and reports about errors.
     */    
    Modem.prototype.init = function()
    {
        for (var i = 1; i <= this.maxComNumber; i++)
            this.modemOnPort[i] = false;
        
        // This is atempt to define modem port if its not set.
        if (!this.portNumber || this.portNumber == '')
        {
            for (i = 1; i <= this.maxComNumber; i++)
            {
                this.isModemOnPortRequest(i);
            }
        }
        // We know modem number.
        else
        {
            this.comm = new COMPort(this.portNumber, '9600', 'N', '8', '1');    
            this.comm.init();
            this.modemOnPort[this.portNumber] = true;
        }        
    }
    
    /**
     * Sending request to modem for checking its existence on this port.
     */
    Modem.prototype.isModemOnPortRequest = function(port_number)
    {
        var com = new COMPort(port_number, '9600', 'N', '8', '1');
        if (!com.init())
        {
            this.modemOnPort[port_number] = false;
            return false;
        }
        if (!com.open())
        {
            this.modemOnPort[port_number] = false;
            return false;
        }
        if (!com.send('ATE0\r'))
        {
            this.modemOnPort[port_number] = false;
            return false;        
        }
        setTimeout('this.isModemOnPortAnswer(com)', this.answerTimeout);
        return 'maybe';
    }
    
    /**
     * Getting answer from port.
     */    
    Modem.prototype.isModemOnPortAnswer = function(com)
    {
        var msg = com.receive();
        if (!msg || msg == '') 
        {
            this.modemOnPort[com.portNumber] = false;
            delete com;
        }
        else
        {
            this.modemOnPort[com.portNumber] = true;
            this.comm = com;            
            delete com;
            this.comm.init();
        }
    }

Если не указывать на каком порту модем, может быть найдет его сама, а может и нет smile Не проверял.

P.S. Предложения и замечания тоже приветствуются... 
--------------------
Автопроизводители, машины, марки, модели!
PM MAIL WWW ICQ Skype   Вверх
Страницы: (3) [Все] 1 2 3 
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0960 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.