2015-08-27 2 views
0

Я хочу отправить данные с модемом rs-232 (COM3) на verifone vx520. Как инициализировать его и как я могу включить его в библиотеку? Как я могу набрать номер verifone vx520?как отправить данные с модемом (rs232) на verifone vx520?

h_modem = open(DEV_COM3 , 0); 
+0

Является 'verifone' целевой модем или это источник модем? Если это исходный модем, я считаю, что verifone имеет свой собственный язык под названием 'tcl', если только эта версия не использует скомпилированный c, как« rover ». Если это цель, вам нужно будет написать код в своем источнике, используя поддерживаемый им язык, или на языке, поддерживаемом основным компьютером, на котором подключен исходный модем. Ваш вопрос связан с передачей данных? Или это о программировании в verifone 'tcl'? – alvits

+0

VeriFone использовал TCL в (MUCH) более старых моделях (например, терминалы Zon и Tranz). Начиная с линии «Omni» (например, 3200), они перешли на стандартный код C. Слава богу - по сравнению с C, TCL была настоящей болью! – David

ответ

2

Я немного смущен вашим вопросом. COM3 - это COM-порт для встроенного модема, но когда мы говорим о rs-232, я думаю о порте 1 на 520 или 2 на 570 - в любом случае, это было бы для внешнего модема, и я предполагая, что вы не говорите об этом ... Кроме того, ваш образец кода назначает дескриптор CLOCK, а не модем. Опечатка?

Глава 10 «Руководство по программированию ACE Verix eVo» станет вашим другом для справки, связанной с модемом. Таким образом, раздел «Функциональные вызовы модема» в том же документе (страница 275 в моей версии).

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

ЗАПРОС

Если вы используете VMAC, то сначала вы должны запросить модемное устройство (если вы не используете VMAC, переходите к следующему разделу). Один совет, который мне однажды дал, - это сначала отключить режим комбо. Это было для 37x0 терминалов (Verix) и не могут быть актуальны больше, но я до сих пор сделать это:

set_combo_mode(0) 

я затем отправить пользовательское событие, определенный в моем файле .rck следующим образом:

(HIGH, MODEM_REQUEST_EVENT, MODEM_EVENT, {(COMM_3)}) 

Если вы используете VMAC, вы уже должны быть знакомы с тем, что эта таблица определяется как «Приоритет, входное событие, событие вывода, устройства». Дальнейшее объяснение выходит за рамки этого ответа.

ОТКРЫТЫЙ

Далее, вам нужно открыть модем и получить ручку:

hModem = open(DEV_COM3, 0); 

Будьте уверены, чтобы проверить, что hModem> 0 и иметь дело со случаями, когда это не так.

ИНИЦИАЛИЗИРОВАТЬ

Сначала вы должны инициализировать терминал < - интерфейс> модем:

struct Opn_Blk Com3ob; 

Com3ob.rate = Rt_115200; 
Com3ob.format = Fmt_A8N1; //another common rate is Fmt_A7E1 
Com3ob.protocol = P_char_mode; 
Com3ob.parameter = 0; 

set_opn_blk(hModem, &Com3ob); 

Примечание: скорость передачи данных может быть быстрее, чем модемное соединение, так как модем может обмениваться данными с хостом системы с одной скоростью, а также разговаривать с терминалом в другой. Обратите внимание, что было бы разумно всегда делать терминал с модемной скоростью, превышающей скорость модема.

Тогда вы можете также отправить строку инициализации модема, чтобы установить параметры связи между модемом и сервером вы набираете в:

write(hModem, "+++", 3); // put the modem into "Command mode" 
write(hModem, ATString, ATStringLength); // be sure ATString ends with '\r' 
//read(hModem, buffer, readLength) --> process the response. 
// How you do that will depend on if echo and or verbose is on 

ДИАЛ

int result = xmdm_get_line_dial(hModem, dial_string, &iWrite, hClock, 30); 

Примечания от документации:

dial_string должно быть нулевым, завершена строка, содержащая действительный набор информации (см. таблицу 18) и должна быть достаточно большой, чтобы разместить четыре дополнительных командных символа, используемые этой функцией. Самая длинная команда Hayes, которую можно отправить, составляет 40 байт.

Когда xmdm_get_line_dial() возвращает, iwrite содержит число байт записываются в буфер команд модема и dial_string содержит командную строку полного набора, чью длину строки должна быть равны iwrite для успешного набора.

Обратите внимание, что «30» - это таймаут в секундах. Если вы перейдете в 0, это не будет тайм-аут.

Проверить result, чтобы убедиться, что вы подключены (некоторые мудрый парень в Hayes решил разделить эти подключения значения вверх):

if(result == CONNECT || 
    result == CONNECT_300 || 
    result== CONNECT_1200 || 
    (result >= CONNECT_600 && result <= CONNECT_115200)) 

SEND & ПОЛУЧИТЬ ДАННЫЕ

int totalBytesRead = xmdm_receive_data(hModem, buffer, 1, 1, 1000); 

читать [ hMmodem], в [buffer], ([1] -ignored), до [1] char (s), тайм-аут после [1000] «сантисекунд» (100ths секунды, то есть 10 секунд). Обратите внимание, что totalBytesRead будет отрицательным при ошибке. Проверьте документацию на различные возможные возвращаемые значения.

int totalBytesSent = xmdm_send_data (hModem, buffer, i, 300); 

отправить [я] байты из буфера [] до [hmodem], после того, как тайм-аут [300] "сантисекунд" (3 секунды). Обратите внимание, что totalBytesSent будет отрицательным при ошибке. Проверьте документацию на различные возможные возвращаемые значения.

ЗАКРЫТЬ

close(hModem); 

ВОЗВРАТ К VMAC

EESL_send_event("DEVMAN", COMM_3_RELEASED_EVENT, (unsigned char*) 0, 0); 
+0

где мы можем написать наш номер пункта назначения (номер телефона)?по которой команда может изменить номер? – farshid

+0

В примере * DIAL *, 'xmdm_get_line_dial (hModem, dial_string, & iWrite, hClock, 30);', 'dial_string' - номер телефона. Он также может содержать такие вещи, как prefex для набора, чтобы получить внешнюю линию (например, 9) и/или запятую (,), чтобы указать паузу и т. Д. – David

Смежные вопросы