Меню сайта
Категории каталога
Установка и настройка huawei 162 [2009]
Задача: подключить купленый недавно за 2000 в магазине usb gsm модем huawei eg162 к корпоративному серверу для отправки с него смс.
Проблема, собственно, заключается в том, что модемы серии huawei просто так не воспринимаются freebsd.
Первый и довольно-таки важный шаг - проверить, снят ли пин-код на симкарте !
Мною было потрачено пару часов на разбор, почему не работает отправка и
прием смс, оказывается, стоял пин-код. Пин не сложно указать потом в
конфигурационном файле(если требуется).
Особенности подключения внешних модемов - они изначально подключаются
как сменный накопитель(или как внешний cdrom), после установки
драйверов с которых флешка переключается в режим модема.
Для того, чтобы впоследствии корректно обрабатывать флешку мне пришлось подклюить модуль ubsa (usb-rs232(компорт)):
чтобы потом модуль загружался автоматичеси, можно добавить его в /boot/loader.conf
Возможно, может потребоваться подключение модулей ucom и umodem . Технология подключения точно такая же.
Итак, подключаем устройство и смотрим, подключилось ли:
Controller /dev/usb0:
addr 1: full speed, self powered, config 1, UHCI root hub(0x0000), Intel(0x0000), rev 1.00
port 1 addr 2: full speed, power 500 mA, config 1, HUAWEI Mobile(0x1001), HUAWEI Technologies(0x12d1), rev 0.00
port 2 powered
Есть контакт! Посвятим немного времени обзору:
HUAWEI Technologies(0x12d1) - это код производителя
HUAWEI Mobile(0x1001) - номер модели(меняется в случае разных huawei'ев)
Однако, для работы нам нужен порт, который, как правило, обозначается в freebsd как /dev/cuaU0 , цифра на конце может менятся в зависимости от уже подключенных устройств.
Проверяем, активен ли наш модем:
Ответ пуст, модем еще не активен.
В 7 ветке freebsd (а возможно и в более ранних) уже есть поддержка модемов huawei , необходимо лишь включить нужный режим.
Большинство мануалов в интернете относятся к моделям huawei e220 , нам подходит т.к. принцип работы у них тот же.
В частности, предлагается внести следующие изменения в ядро:
--- ubsa.c.orig Sat Dec 15 22 :36 :22 2007 +++ ubsa.c Sat Dec 15 23 :39 :07 2007 @@ -383 ,6 +383 ,23 @@ printf("%s: Could not find interrupt in\n", USBDEVNAME(ucom->sc_dev)); ucom->sc_dying = 1 ; + + if (uaa->vendor == USB_VENDOR_HUAWEI && + uaa->product == USB_PRODUCT_HUAWEI_E220) { + + usb_device_request_t req; + usbd_status err; + + req.bmRequestType = UT_WRITE;; + req.bRequest = UR_SET_FEATURE; + USETW(req.wValue, 1 ); + USETW(req.wIndex, 2 ); + USETW(req.wLength, 0 ); + printf("Resetting port\n"); + err = usbd_do_request(dev, &req, 0 ); + printf("Port resetted\n"); + } + goto error; }
Я привожу этот код для того, чтобы если кто-то ищет подобные материалы, находил эту статью.
Нам не придется перекомпилировать ядро, не нужно даже подключать
дополнительных модулей. Все что требуется для включения работы модема -
это послать ему сигнал на переключение режима, чем и занимается
вышеприведенный код драйвера, но есть простая программа, проделывающая
то же самое изменение:
#include <stdio.h> #include <fcntl.h> #include <sys/ioctl.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <dev/usb/usb.h> int main(int argc, char **argv) { struct usb_ctl_request ucr = { /* zero */ }; int f; if (argc < 3 ) { printf("Usage: %s /dev/usb1 <addr>\n", argv[0 ]); return 1 ; } f = open(argv[1 ], O_RDWR); if (f < 0 ) { return 1 ; } ucr.ucr_addr = atoi(argv[2 ]); ucr.ucr_request.bmRequestType = 0 ; ucr.ucr_request.bRequest = 3 ; /* SET_FEATURE */ ucr.ucr_request.wValue[0 ] = 1 ; if (ioctl(f, USB_REQUEST, &ucr)) { printf("Error!\n"); } close (f); return 0 ; }
(с) Hans Petter Selasky http://lists.freebsd.org/pipermail/freebsd-questions/2007-December/164404.html
Для использования создаем файл: huawei.c, переносим в него код программы, а затем создаем исполняемый файл:
запускаем:
где /dev/usb0 и 2 - это цифры из usbdevs -v ("Controller /dev/usb0" и "port 1 addr 2" )
Если возвращает "Error!" - что-то в параметрах указано неверно. Если
все верно нужно попробовать запустить программу еще раз. Верным
результатом будет пустая строка.
В дальнейшем можно добавить эту строчку в автозапуск системы.
Проверяем, активен ли наш модем:
В данном случае вывод должен содержать:
cuaU0
cuaU0.init
cuaU0.lock
В зависимости от модели портов может быть несколько.
Все! Теперь можно работать с нашим модемом. Если требуется подключение
к сети интернет, нужно поискать статью о подключении к интернет с
помощью gsm модема, мне требовалось подключить обработу смс, поэтому
ставим smstools :
Теперь внимание: модель huawei eg162 , а, возможно, и другие модели huawei 'ов,
почему-то не поддерживает аппаратного управления хэндшейком... И плюс к
тому, не поддерживает строку преинициализации и не работал у меня без
ATZ.
Таким образом после минимальной подстройки рабочий конфиг /usr/local/etc/smsd.conf :
devices = GSM1 logfile = /var/log/smsd.log loglevel = 7 [GSM1] device = /dev/cuaU0 pre_init = no init = ATZ init2 = AT+CPMS="ME","ME","ME" incoming = yes rtscts = no mode = new#pin = 1234
Если возникнут трудности с конфигурационным файлом, вот ссылка на подробное описание параметров: http://smstools3.kekekasvi.com/index.php?p=configure
Все, что осталось - запустить и проверить работу
Добавляем smsd_enable="YES" в /etc/rc.conf
запускаем сервис:
# /usr/local/etc/rc.d/smsd start
смотрим лог:
# tail -f /var/log/smsd.log
если нет файла, создаем его командой:
# touch /var/log/smsd.log
2009-04-21 13:25:35,2, smsd: Smsd v3.1 started.
2009-04-21 13:25:35,2, smsd: Running as root:wheel.
2009-04-21 13:25:35,6, smsd: File mode creation mask: 022 (0644, rw-r--r--).
2009-04-21 13:25:35,6, smsd: Outgoing file checker has started. PID: 1700.
2009-04-21 13:25:35,6, GSM1: Modem handler 0 has started. PID: 1701.
2009-04-21 13:25:35,6, GSM1: Checking device for incoming SMS
2009-04-21 13:25:35,6, GSM1: Checking if modem is ready
2009-04-21 13:25:35,7, GSM1: -> AT
2009-04-21 13:25:35,7, GSM1: Command is sent, waiting for the answer
2009-04-21 13:25:36,7, GSM1: <- AT OK
2009-04-21 13:25:36,6, GSM1: Initializing modem
2009-04-21 13:25:36,7, GSM1: -> ATZ
2009-04-21 13:25:36,7, GSM1: Command is sent, waiting for the answer
2009-04-21 13:25:36,7, GSM1: <- TZ OK
2009-04-21 13:25:36,7, GSM1: -> AT+CPMS="ME","ME","ME"
2009-04-21 13:25:36,7, GSM1: Command is sent, waiting for the answer
2009-04-21 13:25:36,7, GSM1: <- T+CPMS="ME","ME","ME" +CPMS: 0,255,0,255,0,255 OK
2009-04-21 13:25:36,6, GSM1: Checking if Modem is registered to the network
2009-04-21 13:25:36,7, GSM1: -> AT+CREG?
2009-04-21 13:25:36,7, GSM1: Command is sent, waiting for the answer
2009-04-21 13:25:37,7, GSM1: <- T+CREG? +CREG: 0,1 OK
2009-04-21 13:25:37,6, GSM1: Modem is registered to the network
2009-04-21 13:25:37,6, GSM1: Selecting PDU mode
2009-04-21 13:25:37,7, GSM1: -> AT+CMGF=0
2009-04-21 13:25:37,7, GSM1: Command is sent, waiting for the answer
2009-04-21 13:25:37,7, GSM1: <- T+CMGF=0 OK
2009-04-21 13:25:37,6, GSM1: Checking memory size
2009-04-21 13:25:37,7, GSM1: -> AT+CPMS?
2009-04-21 13:25:37,7, GSM1: Command is sent, waiting for the answer
2009-04-21 13:25:37,7, GSM1: <- T+CPMS? +CPMS: "ME",0,255,"ME",0,255,"ME",0,255 OK
2009-04-21 13:25:37,6, GSM1: Used memory is 0 of 255
2009-04-21 13:25:37,6, GSM1: No SMS received
Примерно так выглядит здоровый рабочий лог. В продакшене можно выставить в smsd.conf loglevel=5 и все.
Есть множество тем по настройке и работе smstools , в т.ч. и на этом сайте, поэтому дальше описывать не стану, главное - все работает!
Источник: http://www.lissyara.su/?id=1928
Категория: Работа с железом | Добавил: oleg (24.04.2009) | Автор: vp
Просмотров: 1217 | Рейтинг: 0.0 /0 |
- Оценить -
Отлично
Хорошо
Неплохо
Плохо
Ужасно
Добавлять комментарии могут только зарегистрированные пользователи.
[
Регистрация |
Вход ]
Форма входа
Друзья сайта