Asterisk и IP-телефония

Управление питанием USB портов — Asterisk Forum Wiki

Материал перенесён из старой базы знаний ATC-IP и оформлен в едином стиле нового сайта.

Управление питанием USB портов
Материал из Asterisk Forum Wiki
Перейти к:
навигация
поиск
Содержание
Введение
Использование программы hub-ctrl
2.1
Примечания
Компиляция hub-ctrl
Как определить поддерживает ли хаб данную функцию?
Список известных хабов поддержывающих данную функцию
Скрипт управления питанием модемами
Источники
Особое Мнение
Введение
Для выполнения различных задач, к примеру переинициализация USB брелка на удалённой машине, пользуются двумя методами.
Первый метод
основан на стандартных возможностях USB устройства переходить в режим пониженого энергопотребления ("Suspend mode"). Для управления состоянием устройства в данном случае используется SYSFS:
echo suspend | sudo tee /sys/bus/usb/devices/1-4/power/level #переводит устройство, подключенное к 4 порту в Suspend mode
echo on | sudo tee /sys/bus/usb/devices/1-4/power/level #переводит устройство, подключенное к 4 порту в Нормальный режим
Таким образом можно частично переинициализировать некоторые устройства, в которых реализована данная функция.
Второй метод
, авторами которого являются TANAKA Akira и NIIBE Yutaka, был первоначально разработан для управления питанием устройств питающихся из сети 220 В, и основан на патче (kernelspace реализация для ядра 2.6.14) и программе hub-ctrl (самодостаточная userspace реализация) написанными NIIBE Yutaka.
hub-ctrl
- программа позволяющая управлять питанием USB портов, на USB хабах, поддерживающих данную функцию.
Использование программы hub-ctrl
./hub-ctrl #выводит список доступных хабов
./hub-ctrl -b 001 -d 004 -P 1 -p 0 #выключаем 1-й порт хаба, на шине 001:004
./hub-ctrl -b 001 -d 004 -P 1 -p 1 #включаем 1-й порт
Примечания
Реальный номер порта с тем, что нарисован на хабе может не совпадать!
На некоторых системах необходимо иметь права root'a чтобы данные действия имели эффект.
Следует знать что, питание полностью не отключается, а сбрасывается до определённого уровня. (у D-Link DUB-H7 H/WVer.: A5 - приблизительно до 1.4 В)
Компиляция hub-ctrl
sudo aptitude install libusb-dev #устанавливаем зависимости на примере Debian-based систем
wget
http://www.gniibe.org/software/hub-ctrl.c
#получаем исходники
gcc -o hub-ctrl hub-ctrl.c -l usb #непосредственно компиляция
Как определить поддерживает ли хаб данную функцию?
Хабы, сделаные на основе чипсетов, поддерживающих данную функцию, в выводе команды "lsusb -v" показывают строку: "Per-port power switching":
...
Hub Descriptor:
...
wHubCharacteristic 0x0029
Per-port power switching
...
Это обязательный, но не достаточный признак того, что такой хаб будет работать по описаной схеме, т.к. производитель мог пустить цепь питания в обход чипсета.
Список известных хабов поддержывающих данную функцию
Elecom: U2H-G4S [1]
Sanwa Supply: USB-HUB14GPH [1]
Targus, Inc.: PAUH212 [1]
Hawking Technology: UH214 [1]
D-Link DUB-H7 (проверено на H/W Ver.: A5) [2]
NEC (ID 0409:0058 NEC Corp. HighSpeed Hub) [3]
Скрипт управления питанием модемами
#!/bin/bash
# Filename: gsm-keeper
# Purpose: This script checking for datacards which has "Busy" state
# Authors: asteriskforum' users (asteriskforum.ru), (c) Sergey Fenko <foeckn[at]gmail.com>
# License: This file is licensed under the GPL v2.
################################################################################
bus=$(lsusb | grep 2001:f103 | awk '{print $4$2}')
#looking for D-Link DUB-H7 hub bus, $bus will look like dev:bus
function hubctl {
if [ -e ./hub-ctrl ]
then
./hub-ctrl -b ${bus:4:3} -d ${bus:0:3} -P $1 -p 0
sleep 1
./hub-ctrl -b ${bus:4:3} -d ${bus:0:3} -P $1 -p 1
fi
for card in $(asterisk -rx "datacard show devices" | grep -i busy | awk '{print $1}' | sed '/gw*/!d' | sort)
do
channel=$(asterisk -rx "core show channels" | awk '{print $1}' | grep $card)
if [ -z "$channel" ]; then {
echo "$card is not assigned to any channel - probably freezed - REINITIALIZING"
asterisk -rx "datacard reset $card"
let WPWR=1
else
echo "$card is busy and assigned to channel $channel - OK"
fi
done
if [ "$WPWR" = "1" ]
then {
echo -e "Waiting some time for changes taking effect.\nIf any problems - will \"hard reset\"!"
sleep 45s
for card in $(asterisk -rx "datacard show devices" | grep -i busy | awk '{print $1}' | sed '/gw*/!d' | sort)
do
echo $card
channel=$(asterisk -rx "core show channels" | awk '{print $1}' | grep $card) if [ -z "$channel" ] then
echo "$card is not assigned to any channel - probably deeply freezed - REINITIALIZING (DOING HARD RESET!)" hubctl ${card:2:1} fi
done
fi
Источники
1.
http://www.gniibe.org/ac-power-by-usb/ac-power-control.html
2.
http://www.asteriskforum.ru/viewtopic.php?t=5042&postdays=0&postorder=asc&start=1080
3.
http://www.ip-phone-forum.de/showthread.php?p=1603698#post1603698
Особое Мнение
Проведённые Paco эксперименты с использованием Dlink DUB H-7 показали, что hub-ctrl -p 0 понижает напряжение только до уровня 1.47V.
При этом после вставки модема в такой "выключенный порт" светодиод не моргает, однако файлы /dev/ttyUSBx для
данного модема в системе появляются. Они даже могут быть открыты.
Однако запись команд и чтение ответов из этого порта не заканчиваются успехом.
Фактически это означает, что модем находится в полудохлом состоянии и может быть повреждён.
Таким образом свойство Per-port power switching Dlink DUB H-7 не может быть использовано для
полноценного управления питанием 3G модемов Huawei.
Используя hub-ctrl совместно с Dlink DUB H-7 вы делаете это на свой страх и риск, подвергая
модем риску повреждения.
--
Bg
17:18, 7 февраля 2011 (CET)
Источник — «
http://asteriskforum.ru/wiki/index.php/%D0%A3%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D0%B8%D1%82%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_USB_%D0%BF%D0%BE%D1%80%D1%82%D0%BE%D0%B2
Просмотры
Статья
Обсуждение
Позвонить +7 (343) 382-33-16