любопытный плагин для показа эпг на вдр
Пожалуйста зарегистрируйся для просмотра данной ссылки на страницу.
Покуражимся ( Courage блог)
- Courage
- Вопрос темы решён
-
-
Пока не забылось - как сделать болванку для своего плагина в вдр
даем команду "newplugin yoor_plugin_name" - скрипт который создает
болванку плагина - вводим туда имя плагина - для примера я ввел имя bouquet
идем в PLUGINS/src/bouquet и видим структуру созданную скриптом
предположим мы хотим чтобы было меню плагина в основном меню да с
переводом заголовка и строки меню и меню установок плагинов - то есть
сразу заложим возможность интернационализацииНадо:
- отредактировать bouquet.c
- создать i18n.c i18n.h
- отредактировать MakefileНачнем....
======= в bouquet.c =======================================================- добавляем заголовок на файл перевода - он же у нас отдельный
#include "i18n.h"- меняем как хотим
static const char *VERSION = "0.0.1";
static const char *DESCRIPTION = "Change Bouquet file";
static const char *MAINMENUENTRY = "Bouquets";DESCRIPTION - будет показано в меню вдр в меню установок плагина
MAINMENUENTRY - строка в основном меню вдр- чтобы не забылось сразу задаем то чтоб переводились эти строки
в определеннии class cPluginBouquet : public cPlugin {
добавляем tr() в DESCRIPTION и MainMenuEntry
--- название в меню setup plugins
virtual const char *Description(void) { return tr(DESCRIPTION); }
--- название входа в меню плагина в основном меню вдр
virtual const char *MainMenuEntry(void) { return tr(MAINMENUENTRY); }- по тексту далее - вводим класс своего меню - у меня он называется cBouquetMenu
т/е/ вводим следущий блок ближе к началу - собственно всавка находится
между start of plugin code и end of bouquet plugin code и правим DESCRIPTION MAINMENUENTRY-- в вызове cOsdMenu() заголовок окна прописвываем с каким заголовком меню плагина будет
(у меня он Bouquets picker ) и говорим что его тоже надо переводить tr()=================================================================================
Исходный код
Показать весь код#include "i18n.h" static const char *VERSION = "0.0.1"; static const char *DESCRIPTION = "Change Bouquet file"; static const char *MAINMENUENTRY = "Bouquets"; // ------------ start of plugin code --------------------------- class cBouquetMenu : public cOsdMenu { private: public: cBouquetMenu(void); ~cBouquetMenu(); virtual eOSState ProcessKey(eKeys Key); }; cBouquetMenu::cBouquetMenu(void) : cOsdMenu(tr("Bouquets picker"),20) { // все что хотим делать в блоке меню Add(new cOsdItem("Example")); } cBouquetMenu::~cBouquetMenu() { // здесь прописываем чистку за собой ; } eOSState cBouquetMenu::ProcessKey(eKeys Key) { eOSState state = cOsdMenu::ProcessKey(Key); if (state == osUnknown) { switch (Key) { case kRed: return osBack; break; case kGreen: return osEnd; break; default: break; } state = osContinue; } return state; } // ------------ end of bouquet plugin code ----------------------------
в принципе в этом и будем по началу все делать
-- cBouquetMenu::cBouquetMenu(void) --- блок экранного меню - здесь можно рисолвать
всякие элементы окна плагина и прочее
-- cBouquetMenu::ProcessKey --- обрабатывать нажатия кнопок
заложены пока зачатки такой обработки по красной кнопке возвращаемся в основное меню
а по зеленой выходим из всех меню-- немного правим в нижней части
- в cPluginBouquet::Start(void) прописываем RegisterI18n(Phrases);
Исходный кодbool cPluginBouquet::Start(void) { // Start any background activities the plugin shall perform. RegisterI18n(Phrases); return true; }
- в определеннии class cPluginBouquet : public cPlugin {
--- название в меню setup plugins
--- название входа в меню плагина в основном меню вдр- в cOsdObject *cPluginBouquet::MainMenuAction(void) делаем вызов на
свое меню - в котором вообщем то весь ваш код и будет содержаться
return new cBouquetMenu - и означает что код меню будет cBouquetMenu -
это тот блок что мы ввели выше и закомментируем return NULLИсходный кодcOsdObject *cPluginBouquet::MainMenuAction(void) { // Perform the action when selected from the main VDR menu. return new cBouquetMenu; //return NULL; }
С bouquet.c пока все - болванка кода сделана - переходим к переводу
============== перевод ===============================================
Имеем 3 фразы которые мы хотим чтобы переводились -
"Change Bouquet file" "Bouquets" "Bouquets picker" - создадим файлыi18n.h = заголовочный файл - создается раз и навсегда вот его содержание
C
Показать весь код#ifndef _I18N__H #define _I18N__H #include <vdr/i18n.h> extern const tI18nPhrase Phrases[]; #endif //_I18N__H
i18n.c = собственно переводы - здесь и будем все переворды прописывать
Исходный код
Показать весь код#include "i18n.h" const tI18nPhrase Phrases[] = { { "Change bouquets",// English - DESCRIPTION "",// Deutsch "",// Slovenski "",// Italiano "",// Nederlands "",// Portugals "",// Franчais "",// Norsk "",// Finnish "",// Polski "",// Espaёol "",// Greek "",// Svenska "",// Romтnу "",// Magyar "",// Catalр "Cмена списка каналов",// Russian "",// Hrvatski "",// Eesti "",// Dansk "",// Czech "",// Turk }, { "Bouquets",// English MAINMENUENTRY "",// Deutsch "",// Slovenski "",// Italiano "",// Nederlands "",// Portugals "",// Franчais "",// Norsk "",// Finnish "",// Polski "",// Espaёol "",// Greek "",// Svenska "",// Romтnу "",// Magyar "",// Catalр "Букеты",// Russian "",// Hrvatski "",// Eesti "",// Dansk "",// Czech "",// Turk }, { "Bouquets picker",// English - header of plugin menu "",// Deutsch "",// Slovenski "",// Italiano "",// Nederlands "",// Portugals "",// Franчais "",// Norsk "",// Finnish "",// Polski "",// Espaёol "",// Greek "",// Svenska "",// Romтnу "",// Magyar "",// Catalр "Продавец букетов :)",// Russian "",// Hrvatski "",// Eesti "",// Dansk "",// Czech "",// Turk }, { NULL } };
и не забываем - иначе перевод не подлинкуется добавить в Makefile
добавляем досборку в плагин и файла перевода - добавляем i18n.o в OBJS =как бы все )))) можете собирать свой плагин и подключать к вдр '-P'
в прицепке плагин test который я по горячим следам этого описания слепил
-
Это называется "флаг в руки"
Спасибо. -
ээээ - я без задней мысли - только с передними )))
я это описалово без намека - просто сам разобрался как интернационализацию делать
и решил по горячим следам отписаться - а плагин практически готов - надо еще несколько дней - вот первый скриншот
если кто хочет потестить - могу сырые исходные выложить - релиз 0.0.0 так сказать )))то что там внизу написано и кажется абракадаброй - попытки втиснуть в 7-8
символов на кнопке слова "загрузить букет и настроить на первый канал"
и "загрузить букет и настроить на сохраненный для этого букета канал" .....
а кнопка "редактирование" и вообще пока для мебели - имеется ввиду
редактирование описаний букетовесли кто придумает более осмысленные сочетания букв на кнопках - буду благодарен
-
......
-
.........
-
попробуй так
Пожалуйста зарегистрируйся для просмотра данной ссылки на страницу.
здесь есть рабочий xorg.conf для двухголового ati - vы все делали правильно - толькео
в секции где busid "PCI:1:0:0" screen 0 задаются еще специфические для ати опцииИсходный код# SPECIFIC FOR DUAL DISPLAY!! Option "MergedFB" "True" Option "EnablePageFlip" "True" Option "AGPMode" "4" Option "AGPFastWrite" "True" Option "MergedXineramaCRT2IsScreen0" "True" Option "CRT2Position" "RightOf"
и в секции Section "ServerLayout" вместо screen "Screen2"
-
двухголовая змея Сис - не путать с одноглазой змеей )))
итак - имеем баребон Асус на чипсете sis
сзади у этого чуда такой набор видео-выходов VGA (15 пин), DVI-D, Composite video (колокольчик), S-Video
сразу же забегая вперед скажу - разъем VGA - это грубо говоря одна видео карта, а все остальные разъемы - другая ... далее считаем так
CRT2 = разъем DVI-D и прочее а CRT1= разъем VGA
а посему одновременный вывод DVI-D и скажем S-Video невозможен
возможные варианты такие VGA + DVI-D, VGA + S-Video, VGA + Composite video
причем подключение к разъему телика по S-video отрубает вывод по DVI-D
продолжаем про железки - далее понадобится какой же видео чип в чипсете# lspci
0000:01:00.0 VGA compatible controller: Silicon Integrated Systems [SiS] 65x/M650/740 PCI/AGP VGA Display Adapter# dmesg
agpgart: Detected SiS 651 chipset
sisfb: Detected SiS301B video bridge
fb0: SiS 651 frame buffer device version 1.8.9
sisfb: Copyright (C) 2001-2005 Thomas Winischhoferиз этой инфо пригодится видео-чип SiS301B адрес pci 01:00.0 и автор Thomas Winischhofer
страница драйвера sis - как sisfb так и sis для Х окошек
Пожалуйста зарегистрируйся для просмотра данной ссылки на страницу.
на той же странице в нижней части есть и поддерживаемые драйвером sis разрешения
отличная таблица под словами Available built-in modes on the 300 series:
а тут страница скачки - внизу есть примеры конфигов -
Пожалуйста зарегистрируйся для просмотра данной ссылки на страницу.
в том числе для двухголового варианта
Пожалуйста зарегистрируйся для просмотра данной ссылки на страницу.в-общем хватит инфы - переходим к телу ))) правим файл /etc/X11/xorg.conf
в двух словах - что и как - вместо одного устройства монитора и экрана надо
создать 2 - и указать в секции лайоут в каком порядке их размещать
каждому "Device" должен соответствовать свой "Monitor" которому должен быть сопоставлен
свой "Screen" - сопоставление через Identifier - смотри не перепутай - Кутузов )))Исходный код
Показать весь код# ------- Device section for CRT2 (DVI-D, S-Video, Composite Video)---------------------- Section "Device" Identifier "SiS 65x/M650/740 PCI/AGP VGA Display Adapter (СRT2)" Driver "sis" BusID "PCI:1:0:0" Screen 0 EndSection # ------- Device section for CRT1 (VGA) ------------------------------------- Section "Device" Identifier "SiS 65x/M650/740 PCI/AGP VGA Display Adapter (CRT1)" Driver "sis" BusID "PCI:1:0:0" Screen 1 EndSection # ---------- Monitor section for Mitsubishi NX76LCD --------------------------------- Section "Monitor" Identifier "NX76LCD" Option "DPMS" EndSection # ---------- Monitor section for unknown monitor up to "1024x768" 75 Hz w/o DDC2 ---- Section "Monitor" Identifier "Unknown monitor w/o DDC2" VendorName "AnyVendor" ModelName "unknown monitor" HorizSync 30-64 # only needed if your monitor does not VertRefresh 60-75 # support DDC2 EndSection # ------------- Screen section for CRT1 (VGA only) ------------------------------- Section "Screen" Identifier "Screen2" Device "SiS 65x/M650/740 PCI/AGP VGA Display Adapter (CRT1)" Monitor "Unknown monitor w/o DDC2" # must match Identifier of Monitor sec DefaultDepth 24 SubSection "Display" Depth 8 Modes "1024x768" "800x600" "640x480" "640x400" "512x384" EndSubSection SubSection "Display" Depth 16 Modes "1024x768" "800x600" "640x480" "640x400" "512x384" EndSubSection SubSection "Display" Depth 24 Modes "1024x768" "800x600" "640x480" "640x400" "512x384" EndSubSection EndSection # -------- Screen section for CRT2 (DVI-D, composite video, S-video) --------------- Section "Screen" Identifier "Screen1" Device "SiS 65x/M650/740 PCI/AGP VGA Display Adapter (CRT2)" Monitor "NX76LCD" DefaultDepth 24 SubSection "Display" Depth 1 Modes "1280x1024" "1152x864" "1024x768" "800x600" "720x400" "640x480" EndSubSection SubSection "Display" Depth 4 Modes "1280x1024" "1152x864" "1024x768" "800x600" "720x400" "640x480" EndSubSection SubSection "Display" Depth 8 Modes "1280x1024" "1152x864" "1024x768" "800x600" "720x400" "640x480" EndSubSection SubSection "Display" Depth 15 Modes "1280x1024" "1152x864" "1024x768" "800x600" "720x400" "640x480" EndSubSection SubSection "Display" Depth 16 Modes "1280x1024" "1152x864" "1024x768" "800x600" "720x400" "640x480" EndSubSection SubSection "Display" Depth 24 Modes "1280x1024" "1152x864" "1024x768" "800x600" "720x400" "640x480" EndSubSection EndSection # -------- Layout section --------------------------------------------------- Section "ServerLayout" Identifier "Default Layout" # Now enable dual head mode: Screen "Screen1" # set a position secondary monitor is "RightOf" "LeftOf" "Above" "Below" Screen "Screen2" Above "Screen1" # This enables Xinerama. If you don't set this to "on", startx will spawn # two indepentent X sessions. In Xinerama mode, both screens are virtually # one screen and only one X session is started. #Option "Xinerama" "on" InputDevice "Generic Keyboard" InputDevice "Configured Mouse" EndSection
в-общем все прозрачно и понятно кроме одного момента может быть - по поводу "Xinerama" -
да - если указать "Xinerama" "on" - то и вправду запускается один х-сервер но при этом
из кде3 не позволяет установить разрешение каждого из экранов - а вот когда запущены
2 сервера - то прямо их Х можно устанавливать разрешение для каждого экрана порознь -
переводим время в юникс эпохальное
итак - чтобы не забылось - как перевести в bash скрипте любую произвольную
дату в так называемую эпохальную можно так - кавычки в записи обязательны!!!
без указания временного сдвига -0000 берется установленная в системе временная зона
без указания даты и временного сдвига - берется текущая дата и установленный часовой пояс
вычитается из эпохи - то есть для msd летнего вычитается 4 часа
хотя эквивалентная запись записывается с плюсом
а вот так будет для gmt
итак - если программа передач установлена для GMT+2 и событие
наступает по их зоне в 12:00
а в нашем часовом поясе GMT+4 это соответственно наступит в 14:00
то похоже ничего дополнительно делать и не надо - просто в строке
указываешь сдвиг того пояса для которого программа написана
для Пожалуйста зарегистрируйся для просмотра данной ссылки на страницу. - это для летнего времени +0300
например там прописано событие 14:00 Мультфильм
тогда данная команда дает верную строчку для вдр
и событие прописывается в моей машинке с установкой на летнее
время Москвы как 15:00 Мультфильм - попали!!!!теперь разборки с форматом записей в epg.data
C S4.8E-85-13-6290 TV5
E 21 1184153400 4500 4F FF
T Спрут /сериал, 1999/
e
E 21 1184157900 1800 4F FF
T Телемагазин
e
c- блок для каждого канала замыкается между C c
- каждое событие эпг замыкается между E e
- с идентификатором канала все ясно )))
- за Т прописывается заголовочная строка
- за S - подзаголовок - обычно тип программы - фильм год выпуска и т.п.
- за D длинное описание - обычно для фильмов
- два длинных числа - это Unix эпохальное время начала программы
и длина программы в секундах
- S и D необязательныневыясненными остались 3 числа из строки E 21 1184153400 4500 4F FF
21 и 4F FF - но если сформировать строку вида E 21 <epg_time> <epg_duration> 4F FF
то вдр ее проглотит
напомню как получить epg_time
где
14:00 = время указанное в программе
+0300 = временной сдвиг той зоны для которой программа составленаесли время в программе указано для прибалтики тогда +0300 для Москвы +0400
-
как то уже смирился с мыслью что в КДЕ переключение раскладок
на выбор не очень удобное - но вот натолкнулсмя на инфу что можэно
любую комбинацию на переключение использовать - и мало того -
повесить на русскую раскладку свечение светодиода на клаве )))
xorg.confИсходный код
Показать весь кодSection "InputDevice" Identifier "Generic Keyboard" Driver "kbd" Option "CoreKeyboard" Option "XkbRules" "xorg" Option "XkbModel" "pc104" Option "XkbLayout" "us,ru" Option "XkbVariant" ",winkeys" Option "XkbOptions" "grp:ctrl_shift_toggle,grp_led:scroll" EndSection
в предвкушении перезагрузил - и ... НИЧЕГО не изменилось - после некоторого
времени сделал quit кде приложению которое в трее показывает флаги раскладок
и т.п. - и о чудо!заработало! переключение ctrl+shift и scroll индикатор
загорается при русской раскладкеиз консоли можно управлять xkbd так
Исходный кодcourage@debian:~$ setxkbmap -model pc104 -layout us,ru -variant ,winkeys courage@debian:~$ setxkbmap -option grp_led:scroll,grp:ctrl_shift_toggle
таким образом получается что kde keybord tool берет комбинацию на переключение
из установок в keybord shortcuts - а xkbd - из своих установок - и эти
две проги не дружат между собойдля сохранения фичи чтобы и на экране был флажок раскладки - и индикатор
на клаве пришлось поставить в keybord shortcuts -
> switch to next keybord layout -> ISO_next_group (появляется при нажатии
на клавишу menu) и в xorg.conf опции прописать -
не буду мучить рассказами как я дошел до жизни такой - только результат
имеем на входе имидж для катрейна 910 - и желание посмотреть что там внутрисразу же скажу - имидж упакован squashfs-lzma ver 2.1 - инструменты для
распаковки собираемые из исходных Пожалуйста зарегистрируйся для просмотра данной ссылки на страницу. для
этой версии не подходят - это чтоб не было мучительно больно после долгой
дороги в дюнах ))и еще - в файле есть крошечный префикс - назовем его так - из 16 байт -
там имя (4 символа) + время(8символов) + словечко 'root' = 16 байт
так вот - перед распаковокой его надо отгрызть
а потом распаковать
в прицепке вид распакованной части под именем root
чтож - кое что уже видно
- busybox
- кернел версии /2.6.11.12_stm20-33 -
чтобы не забылось - что мы приобрели в России с вводом в эксплуатацию Астры 1L
переброшенные пока транспондеры
с Астры 1KR
11509 :V :22000-5/6
11538 :V :22000-5/6
11568 :V :22000-5/6
11597 :V :22000-5/6
c Астры 1G
12545 :H :22000-5/6
c Астры 1H
12633 :H :22000-5/6так - а вот примерные уровни сигналов
с Астры 1L 13.6dB (12545 h)
с Астры 1KR 13.6dB (11156 v)
c Астры 1G 8.5dB (12574 h)
c Астры 1H 6.1dB (12663 h)то есть перенос с 1KR ничего не дает - и вообще странно чего это они с него
транспондеры перенесли - освобождать его вроде не собирались - может в резерв
переведут
и конечно огромный прирост в уровне для транспондеров перекинутых с
Астры 1G и 1H - 5 и 7 дБ --- это огромное приращение ... так держать - Астра!
даешь все транспондеры на 1KR и 1L ))) -
Цитата
Со слов пользователя Courage
как то уже смирился с мыслью что в КДЕ переключение раскладок
на выбор не очень удобное - но вот натолкнулсмя на инфу что можэно
любую комбинацию на переключение использовать - и мало того -
повесить на русскую раскладку свечение светодиода на клаве )))
...Courage - еще сделай apt-get install kkbswitch и соответственно запусти эту прогу в KDE - я думаю результат порадует
-
а вот еще интересный и полезный проект
X Neural Switcher (XNeur) ¶Данная программа является автоматическим переключателем клавиатуры.
Т.е. при наборе текста, если он набирается на неверном языке, xneur автоматически (или по запросу) переключит язык на нужный.
Пожалуйста зарегистрируйся для просмотра данной ссылки на страницу. -
kkbswitch стоит изначально и я вроде писал про это - только название проги не знал
Цитатадля сохранения фичи чтобы и на экране был флажок раскладки - и индикатор
на клаве
- но смотреть на экран - высматривать там иконку -
на какой раскладке стою - при "слепом однопальцевом методе набора текста"
не помогает - а индикатор на клавиатуре - само то ))) -
еще надо будет этот светодиод перенести прямо рядом с клавишей меню которой раскладки переключаюпо поводу автоматического переключения раскладок при неверном наборе в другой раскладке
может попробую ....
а пока что стоит автоматическая привязка раскладок к программам - с моей колокольни
это удобнее всего - скажем в терминалке стоит английский - в текстовом редакторе включил русский - при переключении к любым терминалкам будет английский .... -
Цитата
Со слов пользователя Courage
kkbswitch стоит изначально и я вроде писал про это - только название проги не знал
ХМ. Ниасилил. Обычно трабл возникает между xxkb и встроенной переключалкой Кедов (Control Center - региональные параметры - раскладки клавы) она тоже выводит в трей флажки. kkbswitch - это скорее просто фроненд к xxkb, непонятно тогда почему его "плющило" ?? -
now on the show - "голубой зуб" в линукс и голубозубый смартфон 6260 серии60 нокии
===============================================================
два режима работы блютус девайсов connectable и discoverableрежим connectable = означает что к машине можно подключится по ранее
определенному на этапе сканирования имени - то есть это так сказать -
только своим - тем кто знаетрежим discoverable = означает что машина открыта для нового сканирования - и будет
отвечать всем что вот она есть такая - вот ее имявключить оба режима сразу можно или консольной командой
или аналогичной оконной командой для кдено ... режим discoverable по умолчанию длится 3 минуты - почему так и как его изменить?
вроде как он должен устанавливаться так же из hciconfig
но не тут то было - не реагирует на установкуbluetooth: inquiry and page scan
Пожалуйста зарегистрируйся для просмотра данной ссылки на страницу.ЦитатаПопробуйте добавить опцию discovto 0; в секцию device файла hcid.conf и
произвести следующие действия:
# /etc/init.d/bluetooth stop
# rm /var/lib/bluetooth/*/config
# /etc/init.d/bluetooth startхм - на самом деле - так сработало ...
и в директории
/var/lib/bluetooth/00:80:C8:35:46:44/
в файле config вместо mode connectable появилось mode discoverable и девайс
теперь всегда откликается на сканирование ....можно установить /etc/bluetooth/hcid.conf время на отклик на сканирование
например на 10 минут discovto 600;
и потом скажем открывать машину на сканирование через khciconfig
inquiry scan -> enable
ок ... с этим разобрались - т.е. эту установку он понимает и принимает
==============================================================
чтобы не забылось - как раздать в линуксе инет с одной машины на другую
через "голубой зуб"
Раздача интернета через bluetooth
Пожалуйста зарегистрируйся для просмотра данной ссылки на страницу.к сожалению как сделать это если второй девайс не линукс машина а смартфон - пока не нашел
вот вроде тут есть что
Пожалуйста зарегистрируйся для просмотра данной ссылки на страницу.
и упоминание некого PythonForSeries60_1stEd.SIS - надо читать в-общем -
правда на каковском это языке - не знаю пока - похоже на французский
==============================================================
и напоследок какие пакеты для блютус в дебиан этч актуальны и работают
bluetooth_3.7-1_all.deb bluez-utils_3.7-1_i386.deb kdebluetooth_0.99+1.0beta2-3_i386.deb
есть уже версия кдеблютус 1.0 бэта3
The KDE Bluetooth Framework
Пожалуйста зарегистрируйся для просмотра данной ссылки на страницу.
- я пробовал ее собирать - но работает у меня криво -
надо погодить пока не появится .deb пакет для дебиан (для кубунту есть такой)
===============================================================
как подсмотреть какие сервисы предоставляет сопряженное устройство
смотрим адрес удаленного устройства hcitool
и подставляем этот адрес в sdptoolИсходный код# sdptool browse 00:12:62:31:CF:17 | grep "Service Name" Service Name: Hands-Free Audio Gateway Service Name: OBEX File Transfer Service Name: SyncMLClient Service Name: Nokia OBEX PC Suite Services Service Name: OBEX Object Push Service Name: Fax Service Name: Dial-Up Networking
а так смотрим что за сервисы предоставляются на локальной машине
Исходный код# sdptool browse local | grep "Service Name" Service Name: Obex Push Server Service Name: KBtSerialChat Service Name: KDE Bemused Server
есть еще любопытная консольная программа btscanner - там еще много чего любопытного
она может выдатьИсходный код
Показать весь кодAddress: 00:12:62:31:CF:17 Found by: 00:80:C8:35:46:44 OUI owner: Nokia Danmark A/S First seen: 2007/07/23 13:28:52 Last seen: 2007/07/23 13:29:58 Name: Nokia 6260 Vulnerable to: Clk off: 0x0587 Class: 0x50020c Phone/Smart phone Services: Object Transfer,Telephony HCI Version ----------- LMP Version: 1.1 (0x1) LMP Subversion: 0x382 Manufacturer: Cambridge Silicon Radio (10) HCI Features ------------ Features: 0xbf 0xfe 0x0f 0x00 <3-slot packets> <5-slot packets> <encryption> <slot offset> <timing accuracy> <role switch> <sniff mode> <RSSI> <channel quality> <SCO link> <HV2 packets> <HV3 packets> <u-law log> <A-law log> <CVSD> <paging scheme> <power control> <transparent SCO>
а так можно пропинговать удаленное устройство - но не по протоколу tcp/ip
а по блютусному протоколу l2pingИсходный код# l2ping 00:12:62:31:CF:17 Ping: 00:12:62:31:CF:17 from 00:80:C8:35:46:44 (data size 44) ... 0 bytes from 00:12:62:31:CF:17 id 0 time 83.23ms 0 bytes from 00:12:62:31:CF:17 id 1 time 42.71ms 0 bytes from 00:12:62:31:CF:17 id 2 time 43.58ms 0 bytes from 00:12:62:31:CF:17 id 3 time 44.40ms 0 bytes from 00:12:62:31:CF:17 id 4 time 37.24ms 5 sent, 5 received, 0% loss
-
в-общем я почти рехнулся с этим интерфейсом сервиса Network Access Point
!!!!! он появляется только если какое то внешнее устройство подключилось к этой сети!!!!
появлятся появляется но не поднимаетсязначит действия следущие
1) проверяем наличие модуля ядра bnep
пусто? не страшно - он потом подгрузится при запуске сервиса
можно проверить его в modconf в разделе kernel/net/bluetooth/bnep
должен быть + там1а) проверяем в /etc/bluetooth/hcid.conf класс БТ девайса он состоит из 3х байтов
class 0xSSDDdd
"SS" "Major Service Class"
"DD" "Major Device Class"
"dd" "Minor Device Class"
подробности - в man hcid.conf
в двух словах - в SS для поддержки Network Access Point второй бит должен быть 1
то есть достаточно х02
второй + 3 байты - можно выбрать из этого
0x0104 - Workstation
0x0108 - Server
0x010c - Laptop
скажем х020104 это подходящий вариант
в итоге /etc/bluetooth/hcid.confИсходный код
Показать весь кодoptions { autoinit yes; security auto; passkey "1234"; } device { name "%h-%d"; class 0x3e0104; iscan enable; pscan enable discovto 0; lm accept; lp rswitch,hold,sniff,park; }
являются вполне рабочим вариантом - и класс содержит возможность определения данной
машины как Network Access Point - и машина всегда готова к спариванию discovto 0;
пин-код по умолчанию - 1234 - это тоже запомним2) проверяем что БТ нормально функционирует UP RUNNING PSCAN ISCAN
Исходный код# hciconfig hci0: Type: USB BD Address: 00:02:72:01:7D:DA ACL MTU: 192:8 SCO MTU: 64:8 UP RUNNING PSCAN ISCAN RX bytes:57856 acl:445 sco:0 events:322 errors:0 TX bytes:4719 acl:112 sco:0 commands:96 errors:0
режим ISCAN - даст возможность чуть позже провести спаривание3) смотрим какие локальные сервисы присутствуют
ничего нет4) добавим сервис Network Access Point - здесь есть разные варианты - лучше всего так
но можно и так - но первый вариант лучшеостановить сервис чтобы скажем запустить с другими параметрами можно так
и проверим появился ли сервис
Исходный код
Показать весь код# sdptool browse local Browsing FF:FF:FF:00:00:00 ... Service Name: Network Access Point Service Service RecHandle: 0x10000 Service Class ID List: "Network Access Point" (0x1116) Protocol Descriptor List: "L2CAP" (0x0100) PSM: 15 "BNEP" (0x000f) Version: 0x0100 SEQ16: 10 20 30 40 Profile Descriptor List: "Network Access Point" (0x1116) Version: 0x0100
есть такое дело ....ага - и модуль ядра bnep появился
Исходный код# lsmod | grep bnep bnep 14400 2 l2cap 21696 11 bnep,rfcomm,hidp,cmtp bluetooth 45732 11 bnep,rfcomm,hidp,cmtp,l2cap,sco,hci_usb
5) теперь то без чего дальше не пройдешь - с другой машины надо подключится
к этой сети - пока допер до этого - рехнулся - второй линукс машины не было -
пришлось в виндах - есть там опция в блютус меню - "присоеденится к личной сети (PAN)"
после поиска и выбора девайса - потребовался паринг - ввел ключ который прописан в hcid.conf (1234)
по умолчанию - паринг прошел и появился в виндах значок сетевого подключения
и некий адрес выделился - откуда - не знаюи только теперь и появился bnep0 на линукс-сервере !!!!!!
Исходный код# ifconfig -a bnep0 Link encap:Ethernet HWaddr 00:02:72:01:7D:DA BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:40 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:8887 (8.6 KiB) TX bytes:0 (0.0 b)
и заработал pand --showтеперь можно и поднять интерфейс и установить ему ip
6) поднимаем интерфейс и проверяем что он поднялся UP RUNNING
Исходный код# ifconfig bnep0 192.168.1.254 netmask 255.255.255.0 # ifconfig -a bnep0 Link encap:Ethernet HWaddr 00:02:72:01:7D:DA inet addr:192.168.1.254 Bcast:192.168.100.255 Mask:255.255.255.0 inet6 addr: fe80::202:72ff:fe01:7dda/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:350 errors:0 dropped:0 overruns:0 frame:0 TX packets:99 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:77237 (75.4 KiB) TX bytes:7076 (6.9 KiB)
и на клиенте - у меня в виндах - в свойствах сетевого соединения поднятого при
подключении к "серверу" в своиствах протокол интернета ставим фиксированный адрес
192.168.1.253 255.255.255.0по завершению установок проходят пинги с 192.168.1.254 и наоборот
чтобы каждый раз не задавать вручную ip - пишем в /etc/network/interfaces
Исходный код# bluetooth network interfaces allow-hotplug bnep0 iface bnep0 inet static address 192.168.100.254 netmask 255.255.255.0
теперь чтобы не поднимать каждый раз сервис - прописываем его в /etc/default/bluetooth
и именно сюды - а не в /etc/init.d/bluetooth хотя там и есть опции
PAND_ENABLED=0
PAND_OPTIONS=""
но они перебиваются тем что прописано в /etc/default/bluetooth - итак пишем тудаи можно перезапустить весь блютус теперь
Исходный код# /etc/init.d/bluetooth stop # /etc/init.d/bluetooth start Starting bluetooth: hcid sdpd sdp_options rfcomm pand.
в итоге - прописали в /etc/network/interfaces и в /etc/default/bluetooth и в /etc/bluetooth/hcid.conf
и забыли - только никак не забывавется что интерфейс не появляется пока с другой
стороны к нему ктонибудь не подключится - этого я точно не забуду никогдав-общем темна водица в небесах - для того чтобы появился сетевой интерфейс недостаточно
его запустить - надо чтобы к нему кто подключился - до этого его не сконфигурировать
и не поднять - все сикись накисьTODO - перекинуть мостик между пиконет и проводной локальной сетью на "сервере"
где есть 2 интерфейса связанных с 2-мя сетями
- eth0 локальная сеть 192.168.0.ххх - ip сервера 192.168.0.98 - в ней есть также роутер 192.168.0.2
- bnep0 пиконет 192.168.1.ххх = сервер 192.168.1.254 и клиент 192.168.1.253 -
а теперь вопрос - надеюсь на помощь - чем надо заменить знаки вопроса на рисунке -
как прокинуть мостик между двумя сетями так чтобы с desktop #2 был выход через
router - и хорошо бы чтобы из БТ сети были видны все компы из проводной сетина рисунке все хорошо видно - а это маршруты на Desktop #1 - может пригодится
Исходный код# route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.1.0 * 255.255.255.0 U 0 0 0 bnep0 192.168.0.0 * 255.255.255.0 U 0 0 0 eth0 default 192.168.0.2 0.0.0.0 UG 0 0 0 eth0
да - еще - с desktop #2 пингуются оба интерфейса Desktop #1 и 192.168.1.254 и
192.168.0.98 - а вот роутер 192.168.0.2- не пингуется:Pв общем сам разобрался
спасение утопающих дело рук самих утопающих )))
1) в /etc/sysctl.conf раскомментировать
net/ipv4/ip_forward=1и перезапустить комп или без перезапуска
теперь магическая строка
теперь надо сохранить маршрут в файл - в дебиан это делается так
это делается единыждыи после каждого старта системы всего то и надо что восстанавить таблицу из
файла - для этого
и усе .... надо заделать какой нибудь стартовый скрипт с единственной
этой строкой и линки в нужные директории /etc/rcX.d положить - но это
после ... а пока после всего этого безобразия осталось вручную
запускать эту строку и клиентская машина через БТ - сервер - роутер - в инете ))))да - на клиенте шлюз GW 192.168.0.98 DNS 192.168.0.2 - картинку потом перересую )))
-
============ готовим дебиан-машину ===========================
1) включить энкрипцию - это понадобится потом - уже при работе- к сожалению в дебиан
в hcid.conf опция encrypt enable; не прокатывает поэтому надо будет каждый раз при старте
это сделать
а вручную включается такнесколько странно но факт - труба будет выводится в сеть через
профиль DUND (вернее LAN Access Using PPP) а не Network Access Point
но таковы правила игры
здесь надо несколько слов сказать о распределении сетей на компе
в итоге на компе 192.168.0.98 будет сходится 3 сети
- локальная сеть - у меня это 192.168.0.0 255.255.255.0
- локальная сеть подключенная через Network Access Point - у меня это 192.168.100.0 255.255.255.0
- локальная сеть подключенная через LAN Access Using PPP - у меня это 192.168.1.0 255.255.255.0итак для подключения через LAN Access Using PPP надо
2) создать /etc/ppp/peers/dunв ms-dns прописать адрес своего днс сервера
3) занести запуск DUND и опции для него в /etc/default/bluetooth
и сразу же можно - это надо для пиконет через Network Access Point там жеа вручную запускается так
4) создать маршрут и сохранить маршруты для последущего восстановления
Исходный код# iptables -t nat -A POSTROUTING -s 192.168.1.0/255.255.255.0 -j MASQUERADE -o eth0 # iptables -t nat -A POSTROUTING -s 192.168.100.0/255.255.255.0 -j MASQUERADE -o eth0 # iptables-save > /etc/iptables.save.bt
5) прописать для автостарта форвардирования при старте системы в sysctl.conf -
вернее раскомментировать там строкуа так можно можно вручную включить маршрутизацию
6) для работы пиконет через Network Access Point пропишем интерфейс
в /etc/network/interfacesИсходный код# bluetooth network interfaces allow-hotplug bnep0 iface bnep0 inet static address 192.168.100.254 netmask 255.255.255.0
7) создать стартовый скрипт который бы запускался при старте системы и устанавливал
бы энкрипцию и восстанавливал бы маршруты
создадим /etc/init.d/bluetooth_1Исходный код
Показать весь код#! /bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin DESC=bluetooth_1 /usr/sbin/hciconfig hci0 encrypt echo "bluetooth_1: Set encryption for hci0" /sbin/iptables-restore < /etc/iptables.save.bt echo "bluetooth_1: Restore iptables from '/etc/iptables.save.bt'" exit 0
и дадим этому файлу пермиссии 755
пока не будем создавать линки в rcX.d - проверим как все работаетс линукс машиной вроде бы как все
все измененные в процессе настройки файлы - в прицепке- можно перезагрузить - проверить как все поднимется
и установится=============== проверка после рестарта =======================
8a) после перезагруза запускаем скрипт /etc/init.d/bluetooth_1
8b) проверка энкрипции
Исходный кодdebian:/home/courage# hciconfig hci0: Type: USB BD Address: 00:02:72:01:7D:DA ACL MTU: 192:8 SCO MTU: 64:8 UP RUNNING PSCAN ISCAN AUTH ENCRYPT RX bytes:401 acl:0 sco:0 events:18 errors:0 TX bytes:321 acl:0 sco:0 commands:18 errors:0
видим UP RUNNING PSCAN ISCAN AUTH ENCRYPT - это хорошо8с) проверяем наличие сервисов
Исходный код
Показать весь код# sdptool browse local Browsing FF:FF:FF:00:00:00 ... Service Name: LAN Access Point Service RecHandle: 0x10000 Service Class ID List: "LAN Access Using PPP" (0x1102) Protocol Descriptor List: "L2CAP" (0x0100) "RFCOMM" (0x0003) Channel: 1 Profile Descriptor List: "LAN Access Using PPP" (0x1102) Version: 0x0100 Service Name: Network Access Point Service RecHandle: 0x10001 Service Class ID List: "Network Access Point" (0x1116) Protocol Descriptor List: "L2CAP" (0x0100) PSM: 15 "BNEP" (0x000f) Version: 0x0100 SEQ16: 800 806 Profile Descriptor List: "Network Access Point" (0x1116) Version: 0x0100
видим LAN Access Using PPP и Network Access Point - это тоже хорошо
8d) проверяем маршруты
Исходный код# iptables-save # Generated by iptables-save v1.3.6 on Thu Jul 26 13:44:57 2007 *nat :PREROUTING ACCEPT [326:103154] :POSTROUTING ACCEPT [2:94] :OUTPUT ACCEPT [2:94] -A POSTROUTING -s 192.168.1.0/255.255.255.0 -o eth0 -j MASQUERADE -A POSTROUTING -s 192.168.100.0/255.255.255.0 -o eth0 -j MASQUERADE COMMIT # Completed on Thu Jul 26 13:44:57 2007
тоже ОК - маршруты принялись .....
================= проверка работы с Network Access Point ===========
подключаемся с другой блютус машины в PAN - в виндах это Личная сеть
выбираем точку доступа debian-0 и в параметрах соедениния tcp/ip
вводим ip 192.168.100.253 255.255.255.0 шлюз 192.168.0.98 днс 192.168.0.2
это у меня так - машина на которой все это делается имеет ип 192.168.0.98 -
его и надо выбрать в качестве шлюза - а днс может быть любой из доступных в сетипроверяем хоть тем же браузером в инет сходим по нужде - все работает )))
================ теперь переходим к настройке трубы =============
здесь все тоже так же просто ))))9) установка gnubox основное - это чтобы труба оказалась в перечне
Пожалуйста зарегистрируйся для просмотра данной ссылки на страницу.мне повезло - для моей трубы есть отдельно собранная программа sis
Nokia 6260 2005-04-11 gnubox_6260.sis v1.1 beta, working
ставится как обычная программа в смартфон- после установки
появляется иконка gnubox -только не спешите ее запускать - ее время не настало еще )))10) создаем специальную точку доступа
лезем в "настройки" -> "соединение" -> "точки доступа" -> "функции"
-> "новая точка доступа" -> "исп. стандартные параметры"Исходный кодИмя соединения: Bt Канал данных: Данные GSM Телефонный номер: 0000 Имя пользователя: bt Запрос пароля: нет Пароль: bt Аутентификация: обычная Домашняя страница: нет Тип вызова: аналоговый Макс. скорость: автоматически
жмем "функции" -> "доп. параметры"
здесь все оставляем по умолчанию
жмем "назад" - "назад" - тем самым точка доступа сохраняетсясразу скажу о двух моментах
- имя соединения обязательно должно выглядеть именно "Bt" и никак по другому!!!
- канал передачи данных именно "Данные GSM"
- телефонный номер любой - и этот номер будет скидываться при работе в пустышку -
и если потом захотите чтото изменить потом в точке доступа Bt - номер надо будет
не забыть ввести заново11)и вот настало время программы gnubox
11.1) запускаем программу
11.2) "функции" -> "2box bluetooth" -> "LAN Access server"
выведется стандартное окно выбора и поиска соседних голубозубых девайсов
ищем жмем "новый поиск" -> выбираем debian-0 ->
do you want to require encryption? -> жмем ОК
если запросит спаривание - вводим 1234 (то что прописано в hcid.conf)если все Ок - он напишет типа "set bt registry here"
11.3) "функции" -> "install" -> auto set modem ID - напишет типа New modem ID411.4) "функции" -> "install" -> "create records" должно написать "Done"- вот и все )))
или выскочила системная ошибка (-22) просто перезапустите трубу и по новой
проверьте все установки в точке доступа - и запустите gnubox и все пункты 1-4 по новой
как увидели этот "Done" - программку можно закрыть - если все сработает как надо -
про нее вообще можно забыть )))проверим теперь как с этой точкой доступа работают инет приложения - например stICQ
выбираем в stICQ точку доступа Bt и наблюдаем что все работает )))
в уголке появился значек активного блютус соединения
проверены также стандартный браузер в трубе - с претензионным названием - Интернет )))
и Опера Мини (кстати вышла 4-ая бетка - очень хороший браузер для мобилы)
все эти приложения работают - причем даже одновременно )))
одно замечание - опера мини рисует значек "поднятая трубка" - типа что соединение идет
по каналу gsm - но на самом деле - по блютус ...в прицепке измененные и вновь созданные файлы для дебиан этч
картинка с структурой сети - в следущем посте будет ...