28 декабря | 2024г. | 06:54:36


АвторТема: Mod Multi QuickButton-програмируем кнопки оригинального пульта  (Прочитано 92385 раз)

0 Пользователей и 1 Гость смотрят эту тему.

Оффлайн Irkoff

  • Джедай Куратор
  • **
  • Сообщений: 609
  • Поблагодарили: 729
  • Уважение: +6
может не глобально а просто добавить-убавить?
все прекрасно работает
  • VU+ Ultimo
Vu+ Ultimo / OpenPLi 4.0 / Wicardd 1.17 serv
S-8120Е / CrIs AR-P / Wicardd 1.16
(>  4.0°W-0.8W-4.8°E-9°E-13.0°E
(>  19,2°E-36.0°E

Оффлайн алекс44

  • Падаван
  • *
  • Сообщений: 12
  • Поблагодарили: 0
  • Уважение: 0
всяко пробовал, результат один и тот же

Оффлайн gakasan

  • Младший Джедай
  • **
  • Сообщений: 167
  • Поблагодарили: 35
  • Уважение: -1
Уважаемый ака Учкун, не могли бы вы добавить в ваш модифицированный плагин вот этот кеймап:

<map context="InfobarActions">
      <key id="KEY_FILE" mapto="showMovies" flags="m" />
      <key id="KEY_SLEEP" mapto="openSleepTimer" flags="b" />
      <key id="KEY_MEDIA" mapto="showMediaPlayer" flags="m" />
      <key id="KEY_LIST" mapto="showPluginBrowser" flags="b" />
      <key id="KEY_WWW" mapto="showPortal" flags="m" />                   #хочу назначить на nstreamvod
   </map>

Большая просба от некоторых счастливых обладателей e3hd. Заранее спасибо!

Оффлайн ака УчкунАвтор темы

  • Рыцарь Джедай
  • *****
  • Забанен!
  • Сообщений: 1098
  • Поблагодарили: 4787
  • Уважение: +49
В ИнфобарАкшинз?
Причем тут плагин?
Ради бога в кеймап свой, в раздел ИнфобарАкшинз и добавляйте.......
  • vu+ultimo 9995
Мои авторские работы  нельзя редактировать для выкладывания на паблик.
Но их можно выкладывать неизмененными на любых ресурсах с указанием авторства
Мои кошельки:
WMZ     Z356196865451 WMR     R105983132832

Оффлайн gakasan

  • Младший Джедай
  • **
  • Сообщений: 167
  • Поблагодарили: 35
  • Уважение: -1
Ок. Подскажите хотя бы как будет выглядеть путь, например к плагину nstreamvod, на примере моего кеймапа, частности кнопки www. Спасибо

Оффлайн ака УчкунАвтор темы

  • Рыцарь Джедай
  • *****
  • Забанен!
  • Сообщений: 1098
  • Поблагодарили: 4787
  • Уважение: +49
<key id="KEY_WWW" mapto="showPortal" flags="m" />

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

А если нет....

Вопрос надо задавать правильно.
Вот в другой теме мультиквикбаттона 024730 поставил конкретный вопрос.
"Имидж такой-то, работающие ключи на пульте с ИД такими-то"....
И работаю над его пультом и имиджем сейчас.

А тут как понять?
Какой имидж? А KEY_WWW это точно работающий ИД....
и  только одна кнопка интересует?.......
  • vu+ultimo 9995
Мои авторские работы  нельзя редактировать для выкладывания на паблик.
Но их можно выкладывать неизмененными на любых ресурсах с указанием авторства
Мои кошельки:
WMZ     Z356196865451 WMR     R105983132832

Оффлайн gakasan

  • Младший Джедай
  • **
  • Сообщений: 167
  • Поблагодарили: 35
  • Уважение: -1
Имидж axas-e3hd. На кнопку выводится ,что плагин опера браузер не установлен :-)
И что такое работающие ключи на пульте. Если речь о кнопках, то все кнопки выполняют определенную функцию.
PS мне хотя бы эту кнопку. Другие я решу другими способами.

Оффлайн ака УчкунАвтор темы

  • Рыцарь Джедай
  • *****
  • Забанен!
  • Сообщений: 1098
  • Поблагодарили: 4787
  • Уважение: +49
Цитировать
......
ака Учкун, Установил  Ваш  плагин  на  рес   Golden Media 990 , тоже  sh4  но  имидж  на  AR-P  (на  основе  пли )    и  пульты  сильно  отличаются ....
.....
....... может  быть ......... напишите  небольшой  FAQ  по  keymap.xml .
......

Небольшой не получится.
Нужно хотя бы средний)))
Потому как некоторые вещи долго объяснять.....
Ну и не по  keymap.xml вовсе.........
Хорошо, попробуем........


FAQ: Как добавить кнопки своего пульта в плагин MultiQuickButton

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

Что прежде всего нужно?
Разумеется нужно иметь ресивер с любым, повторяю с любым имиджем, но обязательно на enigma2.
Начиная с опенПли до персианэмпайр, вобщем любой имидж на энигме2.
Далее, нужно иметь под рукой мой мод Мультиквикбаттона.
Тот, который на имидж HDMU подточен.
Этот:
Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.Это наиболее продвинутый мод и встанет под любой имидж.
Другое дело, не везде будет работать))).
Вот для того, чтобы он полноценно работал в любом ресивере под любым имиджем на энигма2 читаем и изучаем далее этот FAQ.

Итак, ресивер на энигма2 имеется, мод Мультиквикбаттона есть.
Остается запустить все кнопки вашего пульта, прописав их коды в этот самый плагин.

Для того, чтобы понять, как это сделать, нам необходимо сначала хоть немного, но вникнуть в то, как на практике это дело работает.
То есть мы нажимаем определенные кнопки на пульте нашего ресивера, а имидж установленный в ресивер, отвечает на это нажатие определенным действием.
Как это происходит?
А вот как. Если кнопка на пульте не пустышка, то при нажатии на нее, рес получает определенный скажем так код и этот код перехватывается имиджем. И первым делом имидж (на энигме2) открывает питоновский файл keyids (в папке /usr/lib/enigma2/python/) и узнает соответствующий идентификатор-ключ ID соответствующий этому коду.
Затем исходя от того, что - в какой момент, в каком окне, при каком действии была нажата кнопка, отыскивает искомое действие акшинмап, соответствующий этому ID в этом самом окне.
Поясню на примере.
Ресивер включен, смотрим ТВ и в окне просмотра ТВ нажимаем кнопку ОК на нашем пульте.
Так вот если на эту кнопку "зашит" был код 352 скажем (а производитель мог и любой другой код зашивать),
то открывая файл keyids имидж узнает, что ключу 352 соответствует идентификатор KEY_OK и ищет именно для этого ID какое действие предусмотрено в окне просмотра ТВ.
Если вы хоть немного продвинуты, то знаете что, действия при просмотре ТВ (то есть не находясь ни в каком меню) в основном прописываются в имидже в акшинмап связанных с "InfoBar" и действительно, в файле keymap.xml (/usr/share/enigma2/) в секции "InfobarShowHideActions" вот такое действие

Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.А действие toggleShow имидж находит в загруженном в память (при загрузке имиджа) модуле InfobarGenerics и оттуда узнает, что это приказ показать инфобар и показывает Инфобар.

Вот здесь хочу заострить внимание на одном обстоятельстве.
Дело в том, что кнопка на вашем пульте, в которой написано ОК вовсе не означает, что ее ID это KEY_OK.
Здесь к сожалению разные производители не придерживаются единого стандарта.
Например на этой кнопке может оказаться код KEY_ENTER.

Точно также и на всех других кнопках.
Поэтому не ищите ID с одноименными названиями на вашем пульте.
То есть если на вашем пульте будет кнопка "Vformat" это вовсе не означает, что ID этой кнопки будет KEY_VFORMAT
Например на пульте опенбокса с6 кнопке с таким названием соответствует ID KEY_ANGLE

На сегодня все.
Надеюсь поняли как имидж обрабатывает нажатие кнопки на пульте.
И поняли, что нам в первую очередь нужно узнать идентификационные имена ID, которые соответствуют кнопкам на нашем пульте.
Ну и соответственно узнав эти ID, рассмотрим детально как их повесить в плагин мультиквикбаттон......

Продолжение следует...


Добавлено  22 октября | 2013г. | 22:58:32   
Начинаем узнавать идентификационные имена ID кнопок нашего пульта.
Самый легкий способ, это с помощью специального оборудования. Отметаем этот способ. Нет у обычного пользователя такого оборудования.

Второй способ. Если вы более-менее продвинутый пользователь, то уже изучали файл keymap.xml, и более-менее представляете, что означает map context=, что это есть акшинмапы с разных окон-screen имиджа и возможно уже знаете в каких-файлах исходниках они прописаны. И исследуя это дело, вы уже возможно выяснили ID многих кнопок вашего ресивера.
Но так как львиная часть пользователей этим не занимался, перейдем сразу к третьему способу.

Третий способ весьма трудоемкий и займет у вас достаточно много времени, но вы знаете про пруд и про рыбку..........

В первую очередь знакомимся с содержимым файла keyids из имиджей на энигма2, то есть со всеми возможными идентификационными именами. Файл этот приложил в аттаче, а вот его содержимое

Спойлер   :
KEYIDS = {'KEY_RESERVED': 0,
 'KEY_ESC': 1,
 'KEY_1': 2,
 'KEY_2': 3,
 'KEY_3': 4,
 'KEY_4': 5,
 'KEY_5': 6,
 'KEY_6': 7,
 'KEY_7': 8,
 'KEY_8': 9,
 'KEY_9': 10,
 'KEY_0': 11,
 'KEY_MINUS': 12,
 'KEY_EQUAL': 13,
 'KEY_BACKSPACE': 14,
 'KEY_TAB': 15,
 'KEY_Q': 16,
 'KEY_W': 17,
 'KEY_E': 18,
 'KEY_R': 19,
 'KEY_T': 20,
 'KEY_Y': 21,
 'KEY_U': 22,
 'KEY_I': 23,
 'KEY_O': 24,
 'KEY_P': 25,
 'KEY_LEFTBRACE': 26,
 'KEY_RIGHTBRACE': 27,
 'KEY_ENTER': 28,
 'KEY_LEFTCTRL': 29,
 'KEY_A': 30,
 'KEY_S': 31,
 'KEY_D': 32,
 'KEY_F': 33,
 'KEY_G': 34,
 'KEY_H': 35,
 'KEY_J': 36,
 'KEY_K': 37,
 'KEY_L': 38,
 'KEY_SEMICOLON': 39,
 'KEY_APOSTROPHE': 40,
 'KEY_GRAVE': 41,
 'KEY_LEFTSHIFT': 42,
 'KEY_BACKSLASH': 43,
 'KEY_Z': 44,
 'KEY_X': 45,
 'KEY_C': 46,
 'KEY_V': 47,
 'KEY_B': 48,
 'KEY_N': 49,
 'KEY_M': 50,
 'KEY_COMMA': 51,
 'KEY_DOT': 52,
 'KEY_SLASH': 53,
 'KEY_RIGHTSHIFT': 54,
 'KEY_KPASTERISK': 55,
 'KEY_LEFTALT': 56,
 'KEY_SPACE': 57,
 'KEY_CAPSLOCK': 58,
 'KEY_F1': 59,
 'KEY_F2': 60,
 'KEY_F3': 61,
 'KEY_F4': 62,
 'KEY_F5': 63,
 'KEY_F6': 64,
 'KEY_F7': 65,
 'KEY_F8': 66,
 'KEY_F9': 67,
 'KEY_F10': 68,
 'KEY_NUMLOCK': 69,
 'KEY_SCROLLLOCK': 70,
 'KEY_KP7': 71,
 'KEY_KP8': 72,
 'KEY_KP9': 73,
 'KEY_KPMINUS': 74,
 'KEY_KP4': 75,
 'KEY_KP5': 76,
 'KEY_KP6': 77,
 'KEY_KPPLUS': 78,
 'KEY_KP1': 79,
 'KEY_KP2': 80,
 'KEY_KP3': 81,
 'KEY_KP0': 82,
 'KEY_KPDOT': 83,
 'KEY_103RD': 84,
 'KEY_F13': 85,
 'KEY_102ND': 86,
 'KEY_F11': 87,
 'KEY_F12': 88,
 'KEY_F14': 89,
 'KEY_F15': 90,
 'KEY_F16': 91,
 'KEY_F17': 92,
 'KEY_F18': 93,
 'KEY_F19': 94,
 'KEY_F20': 95,
 'KEY_KPENTER': 96,
 'KEY_RIGHTCTRL': 97,
 'KEY_KPSLASH': 98,
 'KEY_SYSRQ': 99,
 'KEY_RIGHTALT': 100,
 'KEY_LINEFEED': 101,
 'KEY_HOME': 102,
 'KEY_UP': 103,
 'KEY_PAGEUP': 104,
 'KEY_LEFT': 105,
 'KEY_RIGHT': 106,
 'KEY_END': 107,
 'KEY_DOWN': 108,
 'KEY_PAGEDOWN': 109,
 'KEY_INSERT': 110,
 'KEY_DELETE': 111,
 'KEY_MACRO': 112,
 'KEY_MUTE': 113,
 'KEY_VOLUMEDOWN': 114,
 'KEY_VOLUMEUP': 115,
 'KEY_POWER': 116,
 'KEY_KPEQUAL': 117,
 'KEY_KPPLUSMINUS': 118,
 'KEY_PAUSE': 119,
 'KEY_F21': 120,
 'KEY_F22': 121,
 'KEY_F23': 122,
 'KEY_F24': 123,
 'KEY_KPCOMMA': 124,
 'KEY_LEFTMETA': 125,
 'KEY_RIGHTMETA': 126,
 'KEY_COMPOSE': 127,
 'KEY_STOP': 128,
 'KEY_AGAIN': 129,
 'KEY_PROPS': 130,
 'KEY_UNDO': 131,
 'KEY_FRONT': 132,
 'KEY_COPY': 133,
 'KEY_OPEN': 134,
 'KEY_PASTE': 135,
 'KEY_FIND': 136,
 'KEY_CUT': 137,
 'KEY_HELP': 138,
 'KEY_MENU': 139,
 'KEY_CALC': 140,
 'KEY_SETUP': 141,
 'KEY_SLEEP': 142,
 'KEY_WAKEUP': 143,
 'KEY_FILE': 144,
 'KEY_SENDFILE': 145,
 'KEY_DELETEFILE': 146,
 'KEY_XFER': 147,
 'KEY_PROG1': 148,
 'KEY_PROG2': 149,
 'KEY_WWW': 150,
 'KEY_MSDOS': 151,
 'KEY_COFFEE': 152,
 'KEY_DIRECTION': 153,
 'KEY_CYCLEWINDOWS': 154,
 'KEY_MAIL': 155,
 'KEY_BOOKMARKS': 156,
 'KEY_COMPUTER': 157,
 'KEY_BACK': 158,
 'KEY_FORWARD': 159,
 'KEY_CLOSECD': 160,
 'KEY_EJECTCD': 161,
 'KEY_EJECTCLOSECD': 162,
 'KEY_NEXTSONG': 163,
 'KEY_PLAYPAUSE': 164,
 'KEY_PREVIOUSSONG': 165,
 'KEY_STOPCD': 166,
 'KEY_RECORD': 167,
 'KEY_REWIND': 168,
 'KEY_PHONE': 169,
 'KEY_ISO': 170,
 'KEY_CONFIG': 171,
 'KEY_HOMEPAGE': 172,
 'KEY_REFRESH': 173,
 'KEY_EXIT': 174,
 'KEY_MOVE': 175,
 'KEY_EDIT': 176,
 'KEY_SCROLLUP': 177,
 'KEY_SCROLLDOWN': 178,
 'KEY_KPLEFTPAREN': 179,
 'KEY_KPRIGHTPAREN': 180,
 'KEY_INTL1': 181,
 'KEY_INTL2': 182,
 'KEY_INTL3': 183,
 'KEY_INTL4': 184,
 'KEY_INTL5': 185,
 'KEY_INTL6': 186,
 'KEY_INTL7': 187,
 'KEY_INTL8': 188,
 'KEY_INTL9': 189,
 'KEY_LANG1': 190,
 'KEY_LANG2': 191,
 'KEY_LANG3': 192,
 'KEY_LANG4': 193,
 'KEY_LANG5': 194,
 'KEY_LANG6': 195,
 'KEY_LANG7': 196,
 'KEY_LANG8': 197,
 'KEY_LANG9': 198,
 'KEY_PLAYCD': 200,
 'KEY_PAUSECD': 201,
 'KEY_PROG3': 202,
 'KEY_PROG4': 203,
 'KEY_SUSPEND': 205,
 'KEY_CLOSE': 206,
 'KEY_PLAY': 207,
 'KEY_FASTFORWARD': 208,
 'KEY_BASSBOOST': 209,
 'KEY_PRINT': 210,
 'KEY_HP': 211,
 'KEY_CAMERA': 212,
 'KEY_SOUND': 213,
 'KEY_QUESTION': 214,
 'KEY_EMAIL': 215,
 'KEY_CHAT': 216,
 'KEY_SEARCH': 217,
 'KEY_CONNECT': 218,
 'KEY_FINANCE': 219,
 'KEY_SPORT': 220,
 'KEY_SHOP': 221,
 'KEY_ALTERASE': 222,
 'KEY_CANCEL': 223,
 'KEY_BRIGHTNESSDOWN': 224,
 'KEY_BRIGHTNESSUP': 225,
 'KEY_MEDIA': 226,
 'KEY_VMODE': 227,
 'KEY_UNKNOWN': 240,
 'KEY_OK': 352,
 'KEY_SELECT': 353,
 'KEY_GOTO': 354,
 'KEY_CLEAR': 355,
 'KEY_POWER2': 356,
 'KEY_OPTION': 357,
 'KEY_INFO': 358,
 'KEY_TIME': 359,
 'KEY_VENDOR': 360,
 'KEY_ARCHIVE': 361,
 'KEY_PROGRAM': 362,
 'KEY_CHANNEL': 363,
 'KEY_FAVORITES': 364,
 'KEY_EPG': 365,
 'KEY_PVR': 366,
 'KEY_MHP': 367,
 'KEY_LANGUAGE': 368,
 'KEY_TITLE': 369,
 'KEY_SUBTITLE': 370,
 'KEY_ANGLE': 371,
 'KEY_ZOOM': 372,
 'KEY_MODE': 373,
 'KEY_KEYBOARD': 374,
 'KEY_SCREEN': 375,
 'KEY_PC': 376,
 'KEY_TV': 377,
 'KEY_TV2': 378,
 'KEY_VCR': 379,
 'KEY_VCR2': 380,
 'KEY_SAT': 381,
 'KEY_SAT2': 382,
 'KEY_CD': 383,
 'KEY_TAPE': 384,
 'KEY_RADIO': 385,
 'KEY_TUNER': 386,
 'KEY_PLAYER': 387,
 'KEY_TEXT': 388,
 'KEY_DVD': 389,
 'KEY_AUX': 390,
 'KEY_MP3': 391,
 'KEY_AUDIO': 392,
 'KEY_VIDEO': 393,
 'KEY_DIRECTORY': 394,
 'KEY_LIST': 395,
 'KEY_MEMO': 396,
 'KEY_CALENDAR': 397,
 'KEY_RED': 398,
 'KEY_GREEN': 399,
 'KEY_YELLOW': 400,
 'KEY_BLUE': 401,
 'KEY_CHANNELUP': 402,
 'KEY_CHANNELDOWN': 403,
 'KEY_FIRST': 404,
 'KEY_LAST': 405,
 'KEY_AB': 406,
 'KEY_NEXT': 407,
 'KEY_RESTART': 408,
 'KEY_SLOW': 409,
 'KEY_SHUFFLE': 410,
 'KEY_BREAK': 411,
 'KEY_PREVIOUS': 412,
 'KEY_DIGITS': 413,
 'KEY_TEEN': 414,
 'KEY_TWEN': 415,
 'KEY_DEL_EOL': 448,
 'KEY_DEL_EOS': 449,
 'KEY_INS_LINE': 450,
 'KEY_DEL_LINE': 451,
 'KEY_ASCII': 510,
 'KEY_MAX': 511,
 'BTN_0': 256,
 'BTN_1': 257}

Это так, пока просто для знакомства.
Скажем интересующая вас кнопка на пульте обозначена у вас как SLEEP и она у вас никак не задействована.
Нажимаем на нее при работающем ресе с имиджем на энигме2.
Если при нажатии ответный сенсор на морде ресивера загорелся, радуемся кнопка рабочая, не пустышка.
И если еще при этом на экране ТВ вы видите знак руки в прямоугольнике (UnhandledKey), то радуемся еще больше.
Имидж распознал нажатие кнопки и идентификационный ключ точно имеется в файле keyids

Теперь тупо путем перебора всех имеющихся ID из файла keyids будем узнавать нужный нам искомый ID.

Открываем файл keymap.xml из /usr/share/enigma2/ продвинутым редактором (можно прямо в окне DCC) и находим секцию InfobarActions к примеру он выглядит так:

   <map context="InfobarActions">
      <key id="KEY_VIDEO" mapto="showMovies" flags="b" />
      <key id="KEY_RADIO" mapto="showRadio" flags="b" />
      <key id="KEY_TV" mapto="showTv" flags="m" />
      <key id="KEY_FILE" mapto="showMovies" flags="m" />
      <key id="KEY_TEXT" mapto="showText" flags="m" />
   </map>

И из файла keyids для начала подберем подозрительно похожий ID "KEY_SLEEP" (на нашу кнопку SLEEP) и прописываем эту кнопку в этот раздел с заведомо работающим действием "showMovies" (открывается окно списка фильмов), то есть вот так:

   <map context="InfobarActions">
      <key id="KEY_VIDEO" mapto="showMovies" flags="b" />
      <key id="KEY_SLEEP" mapto="showMovies" flags="b" />
      <key id="KEY_RADIO" mapto="showRadio" flags="b" />
      <key id="KEY_TV" mapto="showTv" flags="m" />
      <key id="KEY_FILE" mapto="showMovies" flags="m" />
      <key id="KEY_TEXT" mapto="showText" flags="m" />
   </map>

При редактировании файла не забудьте, что все отступы нужно сохранять как было!
И перегружаем энигму.
Если после перегрузки при нажатии кнопки SLEEP открылось окно списка фильмов, то все, искомое ID для этой кнопки найдено.
Если же опять рука в прямоугольнике, значит все не так просто, завод-изготовитель повесил на эту кнопку другой ID.

Вот теперь начинается самая трудоемкая работа.
Как видим в файле keyids около 300 ID и нам придется перебирать все.
Я делаю так. Беру 50 ID, ну например сначала, то есть от KEY_RESERVED до KEY_N и прописываю сразу же все 50 ключей в эту секцию кеймапа с тем же действием.
То есть вот так

   <map context="InfobarActions">
      <key id="KEY_VIDEO" mapto="showMovies" flags="b" />
      <key id="KEY_RESERVED" mapto="showMovies" flags="b" />
      <key id="KEY_ESC" mapto="showMovies" flags="b" />
      <key id="KEY_1" mapto="showMovies" flags="b" />
      <key id="KEY_2" mapto="showMovies" flags="b" />
      <key id="KEY_3" mapto="showMovies" flags="b" />
      <key id="KEY_4" mapto="showMovies" flags="b" />
      <key id="KEY_5" mapto="showMovies" flags="b" />
      <key id="KEY_6" mapto="showMovies" flags="b" />
      <key id="KEY_7" mapto="showMovies" flags="b" />
      <key id="KEY_8" mapto="showMovies" flags="b" />
      <key id="KEY_9" mapto="showMovies" flags="b" />
      <key id="KEY_0" mapto="showMovies" flags="b" />
      <key id="KEY_MINUS" mapto="showMovies" flags="b" />
      <key id="KEY_EQUAL" mapto="showMovies" flags="b" />
      <key id="KEY_BACKSPACE" mapto="showMovies" flags="b" />
      <key id="KEY_Q" mapto="showMovies" flags="b" />
      <key id="KEY_W" mapto="showMovies" flags="b" />
      <key id="KEY_E" mapto="showMovies" flags="b" />
      <key id="KEY_R" mapto="showMovies" flags="b" />
      <key id="KEY_T" mapto="showMovies" flags="b" />
      <key id="KEY_Y" mapto="showMovies" flags="b" />
      <key id="KEY_U" mapto="showMovies" flags="b" />
      <key id="KEY_I" mapto="showMovies" flags="b" />
      <key id="KEY_O" mapto="showMovies" flags="b" />
      <key id="KEY_P" mapto="showMovies" flags="b" />
      <key id="KEY_LEFTBRACE" mapto="showMovies" flags="b" />
      <key id="KEY_RIGHTBRACE" mapto="showMovies" flags="b" />
      <key id="KEY_ENTER" mapto="showMovies" flags="b" />
      <key id="KEY_LEFTCTRL" mapto="showMovies" flags="b" />
      <key id="KEY_A" mapto="showMovies" flags="b" />
      <key id="KEY_S" mapto="showMovies" flags="b" />
      <key id="KEY_D" mapto="showMovies" flags="b" />
      <key id="KEY_F" mapto="showMovies" flags="b" />
      <key id="KEY_G" mapto="showMovies" flags="b" />
      <key id="KEY_H" mapto="showMovies" flags="b" />
      <key id="KEY_J" mapto="showMovies" flags="b" />
      <key id="KEY_K" mapto="showMovies" flags="b" />
      <key id="KEY_L" mapto="showMovies" flags="b" />
      <key id="KEY_SEMICOLON" mapto="showMovies" flags="b" />
      <key id="KEY_APOSTROPHE" mapto="showMovies" flags="b" />
      <key id="KEY_GRAVE" mapto="showMovies" flags="b" />
      <key id="KEY_LEFTSHIFT" mapto="showMovies" flags="b" />
      <key id="KEY_BACKSLASH" mapto="showMovies" flags="b" />
      <key id="KEY_Z" mapto="showMovies" flags="b" />
      <key id="KEY_X" mapto="showMovies" flags="b" />
      <key id="KEY_C" mapto="showMovies" flags="b" />
      <key id="KEY_V" mapto="showMovies" flags="b" />
      <key id="KEY_B" mapto="showMovies" flags="b" />
      <key id="KEY_N" mapto="showMovies" flags="b" />
      <key id="KEY_M" mapto="showMovies" flags="b" />

      <key id="KEY_RADIO" mapto="showRadio" flags="b" />
      <key id="KEY_TV" mapto="showTv" flags="m" />
      <key id="KEY_FILE" mapto="showMovies" flags="m" />
      <key id="KEY_TEXT" mapto="showText" flags="m" />
   </map>


Перегружаем энигму. Если после перегрузки снова не работает кнопка, просто удаляем эти добавленные нами 50 строк и добавляем следующие 50 из keyids
Если после перегрузки заработала кнопка, значит ее ID среди этих 50 претендентов и найти ее дело техники, то есть просто закомментируем например первые 25 из этих 50, вот так (ставя знак <!-- перед нужной строкой, и знак --> после нужной последней строки)

   <map context="InfobarActions">
      <key id="KEY_VIDEO" mapto="showMovies" flags="b" />
      <!-- <key id="KEY_RESERVED" mapto="showMovies" flags="b" />
      <key id="KEY_ESC" mapto="showMovies" flags="b" />
      <key id="KEY_1" mapto="showMovies" flags="b" />
      <key id="KEY_2" mapto="showMovies" flags="b" />
      <key id="KEY_3" mapto="showMovies" flags="b" />
      <key id="KEY_4" mapto="showMovies" flags="b" />
      <key id="KEY_5" mapto="showMovies" flags="b" />
      <key id="KEY_6" mapto="showMovies" flags="b" />
      <key id="KEY_7" mapto="showMovies" flags="b" />
      <key id="KEY_8" mapto="showMovies" flags="b" />
      <key id="KEY_9" mapto="showMovies" flags="b" />
      <key id="KEY_0" mapto="showMovies" flags="b" />
      <key id="KEY_MINUS" mapto="showMovies" flags="b" />
      <key id="KEY_EQUAL" mapto="showMovies" flags="b" />
      <key id="KEY_BACKSPACE" mapto="showMovies" flags="b" />
      <key id="KEY_Q" mapto="showMovies" flags="b" />
      <key id="KEY_W" mapto="showMovies" flags="b" />
      <key id="KEY_E" mapto="showMovies" flags="b" />
      <key id="KEY_R" mapto="showMovies" flags="b" />
      <key id="KEY_T" mapto="showMovies" flags="b" />
      <key id="KEY_Y" mapto="showMovies" flags="b" />
      <key id="KEY_U" mapto="showMovies" flags="b" />
      <key id="KEY_I" mapto="showMovies" flags="b" />
      <key id="KEY_O" mapto="showMovies" flags="b" />
      <key id="KEY_P" mapto="showMovies" flags="b" /> -->
      <key id="KEY_LEFTBRACE" mapto="showMovies" flags="b" />
      <key id="KEY_RIGHTBRACE" mapto="showMovies" flags="b" />
      <key id="KEY_ENTER" mapto="showMovies" flags="b" />
      <key id="KEY_LEFTCTRL" mapto="showMovies" flags="b" />
      <key id="KEY_A" mapto="showMovies" flags="b" />
      <key id="KEY_S" mapto="showMovies" flags="b" />
      <key id="KEY_D" mapto="showMovies" flags="b" />
      <key id="KEY_F" mapto="showMovies" flags="b" />
      <key id="KEY_G" mapto="showMovies" flags="b" />
      <key id="KEY_H" mapto="showMovies" flags="b" />
      <key id="KEY_J" mapto="showMovies" flags="b" />
      <key id="KEY_K" mapto="showMovies" flags="b" />
      <key id="KEY_L" mapto="showMovies" flags="b" />
      <key id="KEY_SEMICOLON" mapto="showMovies" flags="b" />
      <key id="KEY_APOSTROPHE" mapto="showMovies" flags="b" />
      <key id="KEY_GRAVE" mapto="showMovies" flags="b" />
      <key id="KEY_LEFTSHIFT" mapto="showMovies" flags="b" />
      <key id="KEY_BACKSLASH" mapto="showMovies" flags="b" />
      <key id="KEY_Z" mapto="showMovies" flags="b" />
      <key id="KEY_X" mapto="showMovies" flags="b" />
      <key id="KEY_C" mapto="showMovies" flags="b" />
      <key id="KEY_V" mapto="showMovies" flags="b" />
      <key id="KEY_B" mapto="showMovies" flags="b" />
      <key id="KEY_N" mapto="showMovies" flags="b" />
      <key id="KEY_M" mapto="showMovies" flags="b" />

      <key id="KEY_RADIO" mapto="showRadio" flags="b" />
      <key id="KEY_TV" mapto="showTv" flags="m" />
      <key id="KEY_FILE" mapto="showMovies" flags="m" />
      <key id="KEY_TEXT" mapto="showText" flags="m" />
   </map>

Если снова кнопка работает, значит уже среди оставшихся незакомментированных, удаляем комментированные строчки а из оставших 25 снова половину комментируем и так далее, пока не останется одна нужная строчка.
И наоборот, если после перегрузки кнопка не работает, нужная строка среди закомментированных, остальные 25 удаляем, а из комментированных половину раскрмментируем и так далее....

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

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

Далее эти кнопки подвесим в плагин мультиквикбаттон...

Продолжение следует.....

  • vu+ultimo 9995
Мои авторские работы  нельзя редактировать для выкладывания на паблик.
Но их можно выкладывать неизмененными на любых ресурсах с указанием авторства
Мои кошельки:
WMZ     Z356196865451 WMR     R105983132832

Оффлайн ака УчкунАвтор темы

  • Рыцарь Джедай
  • *****
  • Забанен!
  • Сообщений: 1098
  • Поблагодарили: 4787
  • Уважение: +49
Наконец появилось время. Продолжим.

ID - то есть идентифкационные имена всех кнопок своего пульта мы уже знаем и надеюсь их соответствие записали куда-нибудь.
И самое главное, поняли что при нажатии на кнопку имидж определяет это нажатие и обращается только к определенному ID.

Вот только эти самые ID и нужно ввести теперь в плагин.

Лучше всего это нужно делать с уже установленным плагином в имидж.
Но перед установкой плагина (того самого, о котором было сказано выше), так как с большой вероятностью кеймап, вшитый в плагин не подойдет вашему имиджу, вам нужно из вашего куда-нибудь на комп скопировать кеймап.хмл, то есть вот этот файл
/usr/share/enigma2/keymap.xml

В этот момент плагин ExtraChannelSelection должен быть удален!
Его можно будет установить после установки мультиквикбаттона и манипуляций с ним......

На компе из этого файла создаем копию и называем копию keymap_backup_mqb.xml и далее ничего с ним не делаем.
А вот с самим файлом кеймап.хмл поработаем.
Закомментируем все действия в секциях (если они есть в вашем кеймапе) "InfobarEPGActions", "InfobarInstantRecord", "InfobarExtensions", "InfobarChannelSelection", "InfobarActions", "InfobarAudioSelectionActions", "InfobarTimerButtonActions", "InfobarVmodeButtonActions", "InfobarSubtitleSelectionActions", "InfobarTimeshiftActions", "InfobarTeletextActions", "InfobarRdsActions".

Например как я закомментировал все действия в одном из этих разделов с помощью тех же знаков комментария

Спойлер   :
   <map context="InfobarEPGActions">
      <!--<key id="KEY_INFO" mapto="showEventInfo" flags="b" />
      <key id="KEY_INFO" mapto="showEventInfoPlugin" flags="l" />
      <key id="KEY_EPG" mapto="showEventInfoSingleEPG" flags="b" />
      <key id="KEY_EPG" mapto="showEventGuidePlugin" flags="l" />-->
   </map>

Также и во всех остальных вышеперечисленных разделах. При этом не забываем, что редактирование файла нужно проводить только в продвинутом текстовом редакторе, понимающем unix-формат, иначе получите неработоспособный файл....
То есть в папке на компе, куда вы скопировали кеймап с ресивера теперь у вас два файла, один с названием keymap_backup_mqb.xml, который и является неизмененным оригинальным файлом с вашего имиджа. И плюс вами измененный файл keymap.xml.

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

enigma2-plugin-extensions-multiquickbutton-for-hdmu-mod_aka_Uchkun_1.0_all.ipk

И после этого не перегружаясь, сразу забрасываем в имидж по пути /usr/share/enigma2/ те самые два файла с компа (keymap_backup_mqb.xml и keymap.xml) с заменой существующих файлов.
После этого перегружаем энигму.

Некоторые кнопки на вашем пульте уже можно будет задействовать.

И начнем вводить ID на неработающие кнопки вашего пульта в плагин.

Продолжение следует......


Добавлено  26 октября | 2013г. | 20:13:51   
Теперь повнимательнее.
Чтобы вы невслепую проводили следующие манипуляции с файлами плагина мультиквикбаттон (без этого никак) сначала попытаюсь объяснить назначение файла кеймап.хмл, который находится в папке с плагином и в чем отличие от кеймап.хмл системного (который здесь /usr/share/enigma2/).
Вобщем немного теории.

Во-первых система (то есть имидж) всегда будет обращаться (получив команду от пульта пользователя) в первую очередь именно к системному кеймапу, и именно поэтому мы закомментировали те строки в кеймапе, чтобы передать управление кнопками (только в режиме просмотра ТВ) полностью в плагин Мультиквикбаттон.

Соответственно, назначение кеймапа в папке плагина, указать системе какое действие в режиме просмотра ТВ запрограммировано на определенную кнопку. То есть вот кеймап.хмл, вшитый по умолчанию в плагин, который вы только что установили.

<keymap>
   <map context="GlobalQuickButtonActions">
      <key id="KEY_VOLUMEUP" mapto="mqb_volup" flags="mr" />
      <key id="KEY_VOLUMEDOWN" mapto="mqb_voldown" flags="mr" />
      <key id="KEY_MUTE" mapto="mqb_mute" flags="mr" />
      <key id="KEY_POWER" mapto="mqb_power" flags="b" />
      <key id="KEY_POWER" mapto="mqb_power_long" flags="l" />
   </map>
   <map context="QuickButtonActions">
      <key id="KEY_RED" mapto="red" flags="b" />
      <key id="KEY_RED" mapto="red_long" flags="l" />
      <key id="KEY_GREEN" mapto="green" flags="b" />
      <key id="KEY_GREEN" mapto="green_long" flags="l" />
      <key id="KEY_YELLOW" mapto="yellow" flags="b" />
      <key id="KEY_YELLOW" mapto="yellow_long" flags="l" />
      <key id="KEY_BLUE" mapto="blue" flags="b" />
      <key id="KEY_BLUE" mapto="blue_long" flags="l" />
      <key id="KEY_ANGLE" mapto="vformat" flags="m" />
      <key id="KEY_ANGLE" mapto="vformat_long" flags="l" />
      <key id="KEY_SLOW" mapto="sleep" flags="m" />
      <key id="KEY_SLOW" mapto="sleep_long" flags="l" />
      <key id="KEY_MODE" mapto="tvradio" flags="m" />
      <key id="KEY_MODE" mapto="tvradio_long" flags="l" />
      <key id="KEY_SCREEN" mapto="resolution" flags="m" />
      <key id="KEY_SCREEN" mapto="resolution_long" flags="l" />
      <key id="KEY_REWIND" mapto="rewind" flags="m" />
      <key id="KEY_FASTFORWARD" mapto="fastforward" flags="m" />
      <key id="KEY_PLAY" mapto="play" flags="m" />
      <key id="KEY_PREVIOUS" mapto="previous" flags="mr" />
      <key id="KEY_NEXT" mapto="next" flags="mr" />
      <key id="KEY_RECORD" mapto="record" flags="m" />
      <key id="KEY_RECORD" mapto="record_long" flags="l" />
      <key id="KEY_PAUSE" mapto="pause" flags="m" />
      <key id="KEY_PAUSE" mapto="pause_long" flags="l" />
      <key id="KEY_STOP" mapto="stop" flags="m" />
      <key id="KEY_STOP" mapto="stop_long" flags="l" />
      <key id="KEY_SELECT" mapto="select" flags="m" />
      <key id="KEY_SELECT" mapto="select_long" flags="l" />
      <key id="KEY_HELP" mapto="help" flags="m" />
      <key id="KEY_HELP" mapto="help_long" flags="l" />
      <key id="KEY_MEMO" mapto="recall" flags="m" />
      <key id="KEY_MEMO" mapto="recall_long" flags="l" />
      <key id="KEY_UP" mapto="cross_up" flags="mr" />
      <key id="KEY_DOWN" mapto="cross_down" flags="mr" />
      <key id="KEY_LEFT" mapto="cross_left" flags="mr" />
      <key id="KEY_RIGHT" mapto="cross_right" flags="mr" />
      <key id="KEY_OK" mapto="ok" flags="m" />
      <key id="KEY_HOME" mapto="home" flags="b" />
      <key id="KEY_HOME" mapto="home_long" flags="l" />
      <key id="KEY_TEEN" mapto="pminus" flags="m" />
      <key id="KEY_TEEN" mapto="pminus_long" flags="l" />
      <key id="KEY_TWEN" mapto="pplus" flags="m" />
      <key id="KEY_TWEN" mapto="pplus_long" flags="l" />
      <key id="KEY_FAVORITES" mapto="favorites" flags="m" />
      <key id="KEY_FAVORITES" mapto="favorites_long" flags="l" />
      <key id="KEY_EPG" mapto="epg" flags="m" />
      <key id="KEY_EPG" mapto="epg_long" flags="l" />
      <key id="KEY_DIRECTORY" mapto="directory" flags="m" />
      <key id="KEY_DIRECTORY" mapto="directory_long" flags="l" />
      <key id="KEY_PAGEUP" mapto="channelup" flags="m" />
      <key id="KEY_PAGEDOWN" mapto="channeldown" flags="m" />
      <key id="KEY_OPTION" mapto="option" flags="m" />
      <key id="KEY_OPTION" mapto="option_long" flags="l" />
      <key id="KEY_GOTO" mapto="goto" flags="m" />
      <key id="KEY_GOTO" mapto="goto_long" flags="l" />
      <key id="KEY_SUBTITLE" mapto="subtitle" flags="m" />
      <key id="KEY_SUBTITLE" mapto="subtitle_long" flags="l" />
      <key id="KEY_ZOOM" mapto="zoom" flags="m" />
      <key id="KEY_ZOOM" mapto="zoom_long" flags="l" />
      <key id="KEY_TEXT" mapto="text" flags="m" />
      <key id="KEY_TEXT" mapto="text_long" flags="l" />
   </map>
</keymap>

а) допустим в вашем пульте есть кнопка под названием PORTAL, и вы на предыдущем этапе выяснения ID из имиджа узнали что этой кнопке соответствует ну к примеру ID - "KEY_GOTO".
В таком разе при нажатии на эту кнопку (в режиме просмотра ТВ только) имидж не найдя в системном кеймапе соответствия (закомментировано нами, даже если есть) найдет этот самый id="KEY_GOTO" в кеймапе мультиквикбаттона и узнает, что этой кнопке предписано действие goto, а что это за действие будет искать уже в самом плагине.

Маленький нюанс, вот это самое действие goto, вернее именно название оно придумано автором плагина (далее в плаге на это "слово" привязано действие), то есть необязательно совпадение id-название и действия, То еть в данном случае они совпадают, но могли и не совпасть.....

б) допустим вы узнали что нет, кнопке PORTAL соответствует ID "KEY_WWW" или "KEY_PORTAL" или что-то еще, которого нет среди ID в мультиквикбаттоновском кеймапе.
Вот тода и придется нам добавить этот ID в кеймап.
Причем можно добавить его как путем добавления новой строчки, так и путем просто замены другого ID  незадейственного в вашем пульте.

Примеры обоих случаев.

1. Допустим на вашем пульте есть кнопка под названием SLEEP которому как вы уже узнали соответствует скажем одноименный "KEY_SLEEP".
Такого ID нет в данном кеймапе, но зато есть ID "KEY_SLOW" на который подвешено действие похожее "sleep".
В таком случае смотрим, если в нашем пульте нет никакой кнопки с ID "KEY_SLOW" со спокойной душой заменяем в кеймапе слово KEY_SLOW на слово KEY_SLEEP.
То есть было так
Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.стало так
Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.И в таком случае, с этой кнопкой более ничего не надо будет делать.
Единственно нужно залезть в MultiQuickButton.py и в его коде найти класс MultiQuickButton(Screen) и там посмотреть название кнопки в окне Мультиквикбаттона.
То есть какое название подвешено на действие sleep.
Нашли строчки
Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.и поняли, что кнопка в меню мультиквикбаттона также называется Sleep и Sleep длинное нажатие
И если теперь перегрузимся и откроем меню плагина (Главное меню-Быстрое нажатие клавиш) и подвесим какое-нибудь действие на эту кнопку, это действие сразу будет выполняться по нажатию этой кнопки......

2. Вот точно также можно сменить любой незадействованный ID в кеймапе.
Если сумели определить например, что строчки в кеймапе плагина

Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.для вашего пульта точно не действуют, то можете использовать эти строчки для незадействованной кнопки.
Скажем на пульте кнопка VIDEO не работает.
Выяснено что ID этой кнопки скажем "KEY_VID".
Тогда значит просто меняем название KEY_MODE на KEY_VID
то есть стало так
Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.(конечно можно и название действия "tvradio" можете заменить на более смысловое в данном случае скажем "video" но тогда слишком много нужно будет менять в плагине)
Далее смотрим в файле MultiQuickButton.py в классе MultiQuickButton(Screen) смотрим какое название в меню плагина подвешено на это действие "tvradio" и находим что

Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.То есть кнопка в меню плагина названа TV/RAD
Переназовем на нужное нам VIDEO, то есть вот так
Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.И в меню плагина (после перегрузки) у вас появятся кнопки VIDEO и VIDEO длинное нажатие.....

3. Теперь случай, когда вам нужно будет просто добавить новый ID какой-нибудь вашей кнопки.
Тогда в кеймап.хмл (в любое место между двумя кнопками) добавьте ID для короткого и для длинного нажатия и назначьте на это ID действие по смыслу. Называйте этого действия придумайте сами, главное чтобы вам было понятно.
Например допустим у вас на пульте есть кнопка под названием MEDIA которому соответствует ID допустим "KEY_F".
Добавляем короткое и длинное нажатие для этой кнопки в кеймап, приняв решение назвать действие "media"
Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.конечно добавив этот вод в кеймап.хмл в любое место между ключами, например так

<keymap>
   <map context="GlobalQuickButtonActions">
      <key id="KEY_VOLUMEUP" mapto="mqb_volup" flags="mr" />
      <key id="KEY_VOLUMEDOWN" mapto="mqb_voldown" flags="mr" />
      <key id="KEY_MUTE" mapto="mqb_mute" flags="mr" />
      <key id="KEY_POWER" mapto="mqb_power" flags="b" />
      <key id="KEY_POWER" mapto="mqb_power_long" flags="l" />
   </map>
   <map context="QuickButtonActions">
      <key id="KEY_RED" mapto="red" flags="b" />
      <key id="KEY_RED" mapto="red_long" flags="l" />
      <key id="KEY_GREEN" mapto="green" flags="b" />
      <key id="KEY_GREEN" mapto="green_long" flags="l" />
      <key id="KEY_YELLOW" mapto="yellow" flags="b" />
      <key id="KEY_YELLOW" mapto="yellow_long" flags="l" />
      <key id="KEY_BLUE" mapto="blue" flags="b" />
      <key id="KEY_BLUE" mapto="blue_long" flags="l" />
      <key id="KEY_F" mapto="media" flags="m" />
      <key id="KEY_F" mapto="media_long" flags="l" />

      <key id="KEY_ANGLE" mapto="vformat" flags="m" />
      <key id="KEY_ANGLE" mapto="vformat_long" flags="l" />
      <key id="KEY_SLOW" mapto="sleep" flags="m" />
      <key id="KEY_SLOW" mapto="sleep_long" flags="l" />
      <key id="KEY_MODE" mapto="tvradio" flags="m" />
      <key id="KEY_MODE" mapto="tvradio_long" flags="l" />
      <key id="KEY_SCREEN" mapto="resolution" flags="m" />
      <key id="KEY_SCREEN" mapto="resolution_long" flags="l" />
      <key id="KEY_REWIND" mapto="rewind" flags="m" />
      <key id="KEY_FASTFORWARD" mapto="fastforward" flags="m" />
      <key id="KEY_PLAY" mapto="play" flags="m" />
      <key id="KEY_PREVIOUS" mapto="previous" flags="mr" />
      <key id="KEY_NEXT" mapto="next" flags="mr" />
      <key id="KEY_RECORD" mapto="record" flags="m" />
      <key id="KEY_RECORD" mapto="record_long" flags="l" />
      <key id="KEY_PAUSE" mapto="pause" flags="m" />
      <key id="KEY_PAUSE" mapto="pause_long" flags="l" />
      <key id="KEY_STOP" mapto="stop" flags="m" />
      <key id="KEY_STOP" mapto="stop_long" flags="l" />
      <key id="KEY_SELECT" mapto="select" flags="m" />
      <key id="KEY_SELECT" mapto="select_long" flags="l" />
      <key id="KEY_HELP" mapto="help" flags="m" />
      <key id="KEY_HELP" mapto="help_long" flags="l" />
      <key id="KEY_MEMO" mapto="recall" flags="m" />
      <key id="KEY_MEMO" mapto="recall_long" flags="l" />
      <key id="KEY_UP" mapto="cross_up" flags="mr" />
      <key id="KEY_DOWN" mapto="cross_down" flags="mr" />
      <key id="KEY_LEFT" mapto="cross_left" flags="mr" />
      <key id="KEY_RIGHT" mapto="cross_right" flags="mr" />
      <key id="KEY_OK" mapto="ok" flags="m" />
      <key id="KEY_HOME" mapto="home" flags="b" />
      <key id="KEY_HOME" mapto="home_long" flags="l" />
      <key id="KEY_TEEN" mapto="pminus" flags="m" />
      <key id="KEY_TEEN" mapto="pminus_long" flags="l" />
      <key id="KEY_TWEN" mapto="pplus" flags="m" />
      <key id="KEY_TWEN" mapto="pplus_long" flags="l" />
      <key id="KEY_FAVORITES" mapto="favorites" flags="m" />
      <key id="KEY_FAVORITES" mapto="favorites_long" flags="l" />
      <key id="KEY_EPG" mapto="epg" flags="m" />
      <key id="KEY_EPG" mapto="epg_long" flags="l" />
      <key id="KEY_DIRECTORY" mapto="directory" flags="m" />
      <key id="KEY_DIRECTORY" mapto="directory_long" flags="l" />
      <key id="KEY_PAGEUP" mapto="channelup" flags="m" />
      <key id="KEY_PAGEDOWN" mapto="channeldown" flags="m" />
      <key id="KEY_OPTION" mapto="option" flags="m" />
      <key id="KEY_OPTION" mapto="option_long" flags="l" />
      <key id="KEY_GOTO" mapto="goto" flags="m" />
      <key id="KEY_GOTO" mapto="goto_long" flags="l" />
      <key id="KEY_SUBTITLE" mapto="subtitle" flags="m" />
      <key id="KEY_SUBTITLE" mapto="subtitle_long" flags="l" />
      <key id="KEY_ZOOM" mapto="zoom" flags="m" />
      <key id="KEY_ZOOM" mapto="zoom_long" flags="l" />
      <key id="KEY_TEXT" mapto="text" flags="m" />
      <key id="KEY_TEXT" mapto="text_long" flags="l" />
   </map>
</keymap>
Теперь это придуманное нами действие нужно добавить в код самого плагина.
Сначала открываем (в продвинутом редакторе или прямо в окне DCC) файл MultiQuickButton.py и где-то в начале видим значения ключей, то есть названия всех этих самых действий из кеймапа, то есть вот это
values = ("red","red_long","green","green_long","yellow","yellow_long","blue","blue_long","vformat","vformat_long","sleep","sleep_long","tvradio","tvradio_long", \
         "resolution","resolution_long","rewind","fastforward","play","previous","next","record","record_long","pause","pause_long","stop","stop_long","select", \
         "select_long","help","help_long","recall","recall_long","cross_up","cross_down","cross_left","cross_right","ok","home","home_long","pminus","pminus_long","pplus","pplus_long", \
         "favorites","favorites_long","epg","epg_long","directory","directory_long","channelup","channeldown","option","option_long","goto","goto_long","subtitle","subtitle_long", \
         "zoom","zoom_long","text","text_long","mqb_voldown","mqb_volup","mqb_mute","mqb_power","mqb_power_long")
И вот сюда добавляем и придуманное нами действия (с коротким и длинным нажатием) то есть media и media_long в любое место внутрь этих ключей, к примеру вот так
values = ("red","red_long","green","green_long","yellow","yellow_long","blue","blue_long","vformat","vformat_long","sleep","sleep_long","tvradio","tvradio_long", \
         "resolution","resolution_long","rewind","fastforward","play","previous","next","record","record_long","pause","pause_long","stop","stop_long","select", \
         "select_long","help","help_long","recall","recall_long","cross_up","cross_down","cross_left","cross_right","ok","home","home_long","pminus","pminus_long","pplus","pplus_long", \
         "favorites","favorites_long","epg","epg_long","directory","directory_long","channelup","channeldown","option","option_long","goto","goto_long","subtitle","subtitle_long", \
         "media","media_long","zoom","zoom_long","text","text_long","mqb_voldown","mqb_volup","mqb_mute","mqb_power","mqb_power_long")

Далее в этом же файле находим класс MultiQuickButton(Screen) и внутри этого класса находим инструкцию (дефку) createList и здесь находим создаваемое меню плагина, то есть вот это:
      self.list = []
      self.list.append(QuickButtonListEntry('', (_('red') + '', 'red'), 'red', functionbutton_red))
      self.list.append(QuickButtonListEntry('', (_('red') + _(' long') + '', 'red_long'), 'red', functionbutton_red_long))
      self.list.append(QuickButtonListEntry('', (_('green') + '', 'green'), 'green', functionbutton_green))
      self.list.append(QuickButtonListEntry('', (_('green') + _(' long') + '', 'green_long'), 'green', functionbutton_green_long))
      self.list.append(QuickButtonListEntry('', (_('yellow') + '', 'yellow'), 'yellow', functionbutton_yellow))
      self.list.append(QuickButtonListEntry('', (_('yellow') + _(' long') + '', 'yellow_long'), 'yellow', functionbutton_yellow_long))
      self.list.append(QuickButtonListEntry('', (_('blue') + '', 'blue'), 'blue', functionbutton_blue))
      self.list.append(QuickButtonListEntry('', (_('blue') + _(' long') + '', 'blue_long'), 'blue', functionbutton_blue_long))
      self.list.append(QuickButtonListEntry('', (_('Vformat') + '', 'vformat'), 'vformat', functionbutton_vformat))
      self.list.append(QuickButtonListEntry('', (_('Vformat') + _(' long') + '', 'vformat_long'), 'vformat', functionbutton_vformat_long))
      self.list.append(QuickButtonListEntry('', (_('Sleep') + '', 'sleep'), 'sleep', functionbutton_sleep))
      self.list.append(QuickButtonListEntry('', (_('Sleep') + _(' long') + '', 'sleep_long'), 'sleep', functionbutton_sleep_long))
      self.list.append(QuickButtonListEntry('', (_('TV/RAD') + '', 'tvradio'), 'tvradio', functionbutton_tvradio))
      self.list.append(QuickButtonListEntry('', (_('TV/RAD') + _(' long') + '', 'tvradio_long'), 'tvradio', functionbutton_tvradio_long))
      self.list.append(QuickButtonListEntry('', (_('Resolution') + '', 'resolution'), 'resolution', functionbutton_resolution))
      self.list.append(QuickButtonListEntry('', (_('Resolution') + _(' long') + '', 'resolution_long'), 'resolution', functionbutton_resolution_long))
      self.list.append(QuickButtonListEntry('', (_('Rewind <<') + '', 'rewind'), 'rewind', functionbutton_rewind))
      self.list.append(QuickButtonListEntry('', (_('FastForward >>') + '', 'fastforward'), 'fastforward', functionbutton_fastforward))
      self.list.append(QuickButtonListEntry('', (_('Play') + '', 'play'), 'play', functionbutton_play))
      self.list.append(QuickButtonListEntry('', (_('Backward <') + '', 'previous'), 'previous', functionbutton_previous))
      self.list.append(QuickButtonListEntry('', (_('Forward >') + '', 'next'), 'next', functionbutton_next))
      self.list.append(QuickButtonListEntry('', (_('Record') + '', 'record'), 'record', functionbutton_record))
      self.list.append(QuickButtonListEntry('', (_('Record') + _(' long') + '', 'record_long'), 'record', functionbutton_record_long))
      self.list.append(QuickButtonListEntry('', (_('Pause') + '', 'pause'), 'pause', functionbutton_pause))
      self.list.append(QuickButtonListEntry('', (_('Pause') + _(' long') + '', 'pause_long'), 'pause', functionbutton_pause_long))
      self.list.append(QuickButtonListEntry('', (_('Stop') + '', 'stop'), 'stop', functionbutton_stop))
      self.list.append(QuickButtonListEntry('', (_('Stop') + _(' long') + '', 'stop_long'), 'stop', functionbutton_stop_long))
      self.list.append(QuickButtonListEntry('', (_('Select') + '', 'select'), 'select', functionbutton_select))
      self.list.append(QuickButtonListEntry('', (_('Select') + _(' long') + '', 'select_long'), 'select', functionbutton_select_long))
      self.list.append(QuickButtonListEntry('', (_('INFO') + '', 'help'), 'help', functionbutton_help))
      self.list.append(QuickButtonListEntry('', (_('INFO') + _(' long') + '', 'help_long'), 'help', functionbutton_help_long))
      self.list.append(QuickButtonListEntry('', (_('RECALL') + '', 'recall'), 'recall', functionbutton_recall))
      self.list.append(QuickButtonListEntry('', (_('RECALL') + _(' long') + '', 'recall_long'), 'recall', functionbutton_recall_long))
      self.list.append(QuickButtonListEntry('', (_('Cross Up') + '', 'cross_up'), 'cross_up', functionbutton_cross_up))
      self.list.append(QuickButtonListEntry('', (_('Cross Down') + '', 'cross_down'), 'cross_down', functionbutton_cross_down))
      self.list.append(QuickButtonListEntry('', (_('Cross Left') + '', 'cross_left'), 'cross_left', functionbutton_cross_left))
      self.list.append(QuickButtonListEntry('', (_('Cross Right') + '', 'cross_right'), 'cross_right', functionbutton_cross_right))
      self.list.append(QuickButtonListEntry('', ('OK' + '', 'ok'), 'ok', functionbutton_ok))
      self.list.append(QuickButtonListEntry('', ('EXIT' + '', 'home'), 'home', functionbutton_home))
      self.list.append(QuickButtonListEntry('', ('EXIT' + _(' long') + '', 'home_long'), 'home', functionbutton_home_long))
      self.list.append(QuickButtonListEntry('', ('Page down' + '', 'pminus'), 'pminus', functionbutton_pminus))
      self.list.append(QuickButtonListEntry('', ('Page down' + _(' long') + '', 'pminus_long'), 'pminus', functionbutton_pminus_long))
      self.list.append(QuickButtonListEntry('', ('Page up' + '', 'pplus'), 'pplus', functionbutton_pplus))
      self.list.append(QuickButtonListEntry('', ('Page up' + _(' long') + '', 'pplus_long'), 'pplus', functionbutton_pplus_long))
      self.list.append(QuickButtonListEntry('', ('FAV' + '', 'favorites'), 'favorites', functionbutton_favorites))
      self.list.append(QuickButtonListEntry('', ('FAV' + _(' long') + '', 'favorites_long'), 'favorites', functionbutton_favorites_long))
      self.list.append(QuickButtonListEntry('', ('EPG' + '', 'epg'), 'epg', functionbutton_epg))
      self.list.append(QuickButtonListEntry('', ('EPG' + _(' long') + '', 'epg_long'), 'epg', functionbutton_epg_long))
      self.list.append(QuickButtonListEntry('', ('PLAY LIST' + '', 'directory'), 'directory', functionbutton_directory))
      self.list.append(QuickButtonListEntry('', ('PLAY LIST' + _(' long') + '', 'directory_long'), 'directory', functionbutton_directory_long))
      self.list.append(QuickButtonListEntry('', (_('Channel +') + '', 'channelup'), 'channelup', functionbutton_channelup))
      self.list.append(QuickButtonListEntry('', (_('Channel -') + '', 'channeldown'), 'channeldown', functionbutton_channeldown))
      self.list.append(QuickButtonListEntry('', ('PIP' + '', 'option'), 'option', functionbutton_option))
      self.list.append(QuickButtonListEntry('', ('PIP' + _(' long') + '', 'option_long'), 'option', functionbutton_option_long))
      self.list.append(QuickButtonListEntry('', ('PIP zap' + '', 'goto'), 'goto', functionbutton_goto))
      self.list.append(QuickButtonListEntry('', ('PIP zap' + _(' long') + '', 'goto_long'), 'goto', functionbutton_goto_long))
      self.list.append(QuickButtonListEntry('',(_('PIP S.List') + '', 'subtitle'), 'subtitle', functionbutton_subtitle))
      self.list.append(QuickButtonListEntry('', ('PIP S.List' + _(' long') + '', 'subtitle_long'), 'subtitle', functionbutton_subtitle_long))
      self.list.append(QuickButtonListEntry('', ('Subtitle' + '', 'zoom'), 'zoom', functionbutton_zoom))
      self.list.append(QuickButtonListEntry('', ('Subtitle' + _(' long') + '', 'zoom_long'), 'zoom', functionbutton_zoom_long))
      self.list.append(QuickButtonListEntry('', (_('TEXT') + '', 'text'), 'text', functionbutton_text))
      self.list.append(QuickButtonListEntry('', (_('TEXT') + _(' long') + '', 'text_long'), 'text', functionbutton_text_long))
      self.list.append(QuickButtonListEntry('',(_('Volume +') + '', 'mqb_volup'), 'mqb_volup', functionbutton_mqb_volup))
      self.list.append(QuickButtonListEntry('',(_('Volume -') + '', 'mqb_voldown'), 'mqb_voldown', functionbutton_mqb_voldown))
      self.list.append(QuickButtonListEntry('',(_('Mute') + '', 'mqb_mute'), 'mqb_mute', functionbutton_mqb_mute))
      self.list.append(QuickButtonListEntry('',(_('Power') + '', 'mqb_power'), 'mqb_power', functionbutton_mqb_power))
      self.list.append(QuickButtonListEntry('',(_('Power') + _(' long') + '', 'mqb_power_long'), 'mqb_power_long', functionbutton_mqb_power_long))

И сюда в любой промежуток (а это уже важно, в какой промежуток вставите, на экране в меню плагине именно в этом месте и увидите название кнопки) вставляем это действие, составив обычное добавление строчек в меню в питоне (думать не о чем, просто копируйте и переименовывайте под себя) и назвав кнопку в меню плагина MEDIA, то есть например вот так
      self.list = []
      self.list.append(QuickButtonListEntry('', (_('red') + '', 'red'), 'red', functionbutton_red))
      self.list.append(QuickButtonListEntry('', (_('red') + _(' long') + '', 'red_long'), 'red', functionbutton_red_long))
      self.list.append(QuickButtonListEntry('', (_('green') + '', 'green'), 'green', functionbutton_green))
      self.list.append(QuickButtonListEntry('', (_('green') + _(' long') + '', 'green_long'), 'green', functionbutton_green_long))
      self.list.append(QuickButtonListEntry('', (_('yellow') + '', 'yellow'), 'yellow', functionbutton_yellow))
      self.list.append(QuickButtonListEntry('', (_('yellow') + _(' long') + '', 'yellow_long'), 'yellow', functionbutton_yellow_long))
      self.list.append(QuickButtonListEntry('', (_('blue') + '', 'blue'), 'blue', functionbutton_blue))
      self.list.append(QuickButtonListEntry('', (_('blue') + _(' long') + '', 'blue_long'), 'blue', functionbutton_blue_long))
      self.list.append(QuickButtonListEntry('', (_('Vformat') + '', 'vformat'), 'vformat', functionbutton_vformat))
      self.list.append(QuickButtonListEntry('', (_('Vformat') + _(' long') + '', 'vformat_long'), 'vformat', functionbutton_vformat_long))
      self.list.append(QuickButtonListEntry('', (_('MEDIA') + '', 'media'), 'media', functionbutton_media))
      self.list.append(QuickButtonListEntry('', (_('MEDIA') + _(' long') + '', 'media_long'), 'media', functionbutton_media_long))
      
self.list.append(QuickButtonListEntry('', (_('Sleep') + '', 'sleep'), 'sleep', functionbutton_sleep))
      self.list.append(QuickButtonListEntry('', (_('Sleep') + _(' long') + '', 'sleep_long'), 'sleep', functionbutton_sleep_long))
      self.list.append(QuickButtonListEntry('', (_('TV/RAD') + '', 'tvradio'), 'tvradio', functionbutton_tvradio))
      self.list.append(QuickButtonListEntry('', (_('TV/RAD') + _(' long') + '', 'tvradio_long'), 'tvradio', functionbutton_tvradio_long))
      self.list.append(QuickButtonListEntry('', (_('Resolution') + '', 'resolution'), 'resolution', functionbutton_resolution))
      self.list.append(QuickButtonListEntry('', (_('Resolution') + _(' long') + '', 'resolution_long'), 'resolution', functionbutton_resolution_long))
      self.list.append(QuickButtonListEntry('', (_('Rewind <<') + '', 'rewind'), 'rewind', functionbutton_rewind))
      self.list.append(QuickButtonListEntry('', (_('FastForward >>') + '', 'fastforward'), 'fastforward', functionbutton_fastforward))
      self.list.append(QuickButtonListEntry('', (_('Play') + '', 'play'), 'play', functionbutton_play))
      self.list.append(QuickButtonListEntry('', (_('Backward <') + '', 'previous'), 'previous', functionbutton_previous))
      self.list.append(QuickButtonListEntry('', (_('Forward >') + '', 'next'), 'next', functionbutton_next))
      self.list.append(QuickButtonListEntry('', (_('Record') + '', 'record'), 'record', functionbutton_record))
      self.list.append(QuickButtonListEntry('', (_('Record') + _(' long') + '', 'record_long'), 'record', functionbutton_record_long))
      self.list.append(QuickButtonListEntry('', (_('Pause') + '', 'pause'), 'pause', functionbutton_pause))
      self.list.append(QuickButtonListEntry('', (_('Pause') + _(' long') + '', 'pause_long'), 'pause', functionbutton_pause_long))
      self.list.append(QuickButtonListEntry('', (_('Stop') + '', 'stop'), 'stop', functionbutton_stop))
      self.list.append(QuickButtonListEntry('', (_('Stop') + _(' long') + '', 'stop_long'), 'stop', functionbutton_stop_long))
      self.list.append(QuickButtonListEntry('', (_('Select') + '', 'select'), 'select', functionbutton_select))
      self.list.append(QuickButtonListEntry('', (_('Select') + _(' long') + '', 'select_long'), 'select', functionbutton_select_long))
      self.list.append(QuickButtonListEntry('', (_('INFO') + '', 'help'), 'help', functionbutton_help))
      self.list.append(QuickButtonListEntry('', (_('INFO') + _(' long') + '', 'help_long'), 'help', functionbutton_help_long))
      self.list.append(QuickButtonListEntry('', (_('RECALL') + '', 'recall'), 'recall', functionbutton_recall))
      self.list.append(QuickButtonListEntry('', (_('RECALL') + _(' long') + '', 'recall_long'), 'recall', functionbutton_recall_long))
      self.list.append(QuickButtonListEntry('', (_('Cross Up') + '', 'cross_up'), 'cross_up', functionbutton_cross_up))
      self.list.append(QuickButtonListEntry('', (_('Cross Down') + '', 'cross_down'), 'cross_down', functionbutton_cross_down))
      self.list.append(QuickButtonListEntry('', (_('Cross Left') + '', 'cross_left'), 'cross_left', functionbutton_cross_left))
      self.list.append(QuickButtonListEntry('', (_('Cross Right') + '', 'cross_right'), 'cross_right', functionbutton_cross_right))
      self.list.append(QuickButtonListEntry('', ('OK' + '', 'ok'), 'ok', functionbutton_ok))
      self.list.append(QuickButtonListEntry('', ('EXIT' + '', 'home'), 'home', functionbutton_home))
      self.list.append(QuickButtonListEntry('', ('EXIT' + _(' long') + '', 'home_long'), 'home', functionbutton_home_long))
      self.list.append(QuickButtonListEntry('', ('Page down' + '', 'pminus'), 'pminus', functionbutton_pminus))
      self.list.append(QuickButtonListEntry('', ('Page down' + _(' long') + '', 'pminus_long'), 'pminus', functionbutton_pminus_long))
      self.list.append(QuickButtonListEntry('', ('Page up' + '', 'pplus'), 'pplus', functionbutton_pplus))
      self.list.append(QuickButtonListEntry('', ('Page up' + _(' long') + '', 'pplus_long'), 'pplus', functionbutton_pplus_long))
      self.list.append(QuickButtonListEntry('', ('FAV' + '', 'favorites'), 'favorites', functionbutton_favorites))
      self.list.append(QuickButtonListEntry('', ('FAV' + _(' long') + '', 'favorites_long'), 'favorites', functionbutton_favorites_long))
      self.list.append(QuickButtonListEntry('', ('EPG' + '', 'epg'), 'epg', functionbutton_epg))
      self.list.append(QuickButtonListEntry('', ('EPG' + _(' long') + '', 'epg_long'), 'epg', functionbutton_epg_long))
      self.list.append(QuickButtonListEntry('', ('PLAY LIST' + '', 'directory'), 'directory', functionbutton_directory))
      self.list.append(QuickButtonListEntry('', ('PLAY LIST' + _(' long') + '', 'directory_long'), 'directory', functionbutton_directory_long))
      self.list.append(QuickButtonListEntry('', (_('Channel +') + '', 'channelup'), 'channelup', functionbutton_channelup))
      self.list.append(QuickButtonListEntry('', (_('Channel -') + '', 'channeldown'), 'channeldown', functionbutton_channeldown))
      self.list.append(QuickButtonListEntry('', ('PIP' + '', 'option'), 'option', functionbutton_option))
      self.list.append(QuickButtonListEntry('', ('PIP' + _(' long') + '', 'option_long'), 'option', functionbutton_option_long))
      self.list.append(QuickButtonListEntry('', ('PIP zap' + '', 'goto'), 'goto', functionbutton_goto))
      self.list.append(QuickButtonListEntry('', ('PIP zap' + _(' long') + '', 'goto_long'), 'goto', functionbutton_goto_long))
      self.list.append(QuickButtonListEntry('',(_('PIP S.List') + '', 'subtitle'), 'subtitle', functionbutton_subtitle))
      self.list.append(QuickButtonListEntry('', ('PIP S.List' + _(' long') + '', 'subtitle_long'), 'subtitle', functionbutton_subtitle_long))
      self.list.append(QuickButtonListEntry('', ('Subtitle' + '', 'zoom'), 'zoom', functionbutton_zoom))
      self.list.append(QuickButtonListEntry('', ('Subtitle' + _(' long') + '', 'zoom_long'), 'zoom', functionbutton_zoom_long))
      self.list.append(QuickButtonListEntry('', (_('TEXT') + '', 'text'), 'text', functionbutton_text))
      self.list.append(QuickButtonListEntry('', (_('TEXT') + _(' long') + '', 'text_long'), 'text', functionbutton_text_long))
      self.list.append(QuickButtonListEntry('',(_('Volume +') + '', 'mqb_volup'), 'mqb_volup', functionbutton_mqb_volup))
      self.list.append(QuickButtonListEntry('',(_('Volume -') + '', 'mqb_voldown'), 'mqb_voldown', functionbutton_mqb_voldown))
      self.list.append(QuickButtonListEntry('',(_('Mute') + '', 'mqb_mute'), 'mqb_mute', functionbutton_mqb_mute))
      self.list.append(QuickButtonListEntry('',(_('Power') + '', 'mqb_power'), 'mqb_power', functionbutton_mqb_power))
      self.list.append(QuickButtonListEntry('',(_('Power') + _(' long') + '', 'mqb_power_long'), 'mqb_power_long', functionbutton_mqb_power_long))
Здесь не допустите ошибок, на всякий случай вот выделил красным все слова, которые вы должны отредактировать

      self.list.append(QuickButtonListEntry('', (_('MEDIA') + '', 'media'), 'media', functionbutton_media))
      self.list.append(QuickButtonListEntry('', (_('MEDIA') + _(' long') + '', 'media_long'), 'media', functionbutton_media_long))

Думаю все понятно.
Теперь в этом же файле в классе MultiQuickButtonMacro(Screen) нужно отредактировать словарную функцию с ключами, если вы собираетесь пользоваться макросами, то есть вот эту функцию

      self.buttondic = {
               "011" : "0",
               "002" : "1",
               "003" : "2",
               "004" : "3",
               "005" : "4",
               "006" : "5",
               "007" : "6",
               "008" : "7",
               "009" : "8",
               "010" : "9",
               "116" : _("Power"),
               "139" : _("Menu"),
               "398" : _("red"),
               "401" : _("blue"),
               "399" : _("green"),
               "400" : _("yellow"),
               "371" : _("vformat"),
               "409" : _("sleep"),
               "373" : _("tvradio"),
               "375" : _("resolution"),
               "168" : _("Rewind <<"),
               "208" : _("FastForward >>"),
               "207" : _("Play"),
               "412" : _("previous"),
               "407" : _("next"),
               "167" : _("Record"),
               "119" : _("Pause"),
               "128" : _("Stop"),
               "353" : _("select"),
               "138" : _("Info"),
               "396" : _("recall"),
               "105" : _("Cross Left"),
               "106" : _("Cross Right"),
               "103" : _("Cross Up"),
               "108" : _("Cross Down"),
               "352" : _("OK"),
               "102" : _("EXIT"),
               "414" : _("pminus"),
               "415" : _("pplus"),
               "364" : _("favorites"),
               "365" : _("EPG"),
               "394" : _("DIR"),
               "104" : _("Channel +"),
               "109" : _("Channel -"),
               "357" : _("option"),
               "354" : _("goto"),
               "370" : _("Subtitle"),
               "372" : _("ZOOM"),
               "388" : _("TEXT"),
               "115" : _("Volume +"),
               "114" : _("Volume -"),
               "113" : _("Mute"),
               "P100" : (_("Pause") + " 0.1 sec"),
               "P500" : (_("Pause") + " 0.5 sec"),
               "P1000" : (_("Pause") + " 1.0 sec")
            }
Здесь тоже все просто, циферьки это коды из keyids.py а рядом просто названия кнопок, которые будут выводиться в окне макроса.
Думаю тут особо объяснять не надо, да и можете пропустить этот шаг, если не пользуетесь макросами.

С файлом MultiQuickButton.py закончено (если вы добавили точно таким макаром все нужные вам ключи)
Но это еще не все. Теперь непосредственно плагину нужно дать понятие о действиях этих кнопок.
Не путайтесь, уже ID кнопок не нужны, мы им уже присвоили коды-слова (например в предыдущем случае код-слово "media") вот эти коды слова введем в файл plugin.py
Открываем этот файл и находим сначала инструкцию InfoBarPlugins__init__ а там этот акшинмап
      self["QuickButtonActions"] = MQBActionMap(["QuickButtonActions"],
         {
            "red": self.quickSelectGlobal,
            "red_long": self.quickSelectGlobal,
            "green": self.quickSelectGlobal,
            "green_long": self.quickSelectGlobal,
            "yellow": self.quickSelectGlobal,
            "yellow_long": self.quickSelectGlobal,
            "blue": self.quickSelectGlobal,
            "blue_long": self.quickSelectGlobal,
            "vformat": self.quickSelectGlobal,
            "vformat_long": self.quickSelectGlobal,
            "sleep": self.quickSelectGlobal,
            "sleep_long": self.quickSelectGlobal,
            "tvradio": self.quickSelectGlobal,
            "tvradio_long": self.quickSelectGlobal,
            "resolution": self.quickSelectGlobal,
            "resolution_long": self.quickSelectGlobal,
            "rewind": self.quickSelectGlobal,
            "fastforward": self.quickSelectGlobal,
            "play": self.quickSelectGlobal,
            "previous": self.quickSelectGlobal,
            "next": self.quickSelectGlobal,
            "record": self.quickSelectGlobal,
            "record_long": self.quickSelectGlobal,
            "pause": self.quickSelectGlobal,   
            "pause_long": self.quickSelectGlobal,
            "stop": self.quickSelectGlobal,
            "stop_long": self.quickSelectGlobal,
            "select": self.quickSelectGlobal,
            "select_long": self.quickSelectGlobal,
            "help": self.quickSelectGlobal,
            "help_long": self.quickSelectGlobal,
            "recall": self.quickSelectGlobal,
            "recall_long": self.quickSelectGlobal,
            "cross_up": self.quickSelectGlobal,
            "cross_down": self.quickSelectGlobal,
            "cross_left": self.quickSelectGlobal,
            "cross_right": self.quickSelectGlobal,
            "ok": self.quickSelectGlobal,
            "home": self.quickSelectGlobal,
            "home_long": self.quickSelectGlobal,
            "pminus": self.quickSelectGlobal,
            "pminus_long": self.quickSelectGlobal,
            "pplus": self.quickSelectGlobal,
            "pplus_long": self.quickSelectGlobal,
            "favorites": self.quickSelectGlobal,
            "favorites_long": self.quickSelectGlobal,
            "epg": self.quickSelectGlobal,
            "epg_long": self.quickSelectGlobal,
            "directory": self.quickSelectGlobal,
            "directory_long": self.quickSelectGlobal,
            "channelup": self.quickSelectGlobal,
            "channeldown": self.quickSelectGlobal,
            "option": self.quickSelectGlobal,
            "option_long": self.quickSelectGlobal,
            "goto": self.quickSelectGlobal,
            "goto_long": self.quickSelectGlobal,
            "subtitle": self.quickSelectGlobal,
            "subtitle_long": self.quickSelectGlobal,
            "zoom": self.quickSelectGlobal,
            "zoom_long": self.quickSelectGlobal,
            "text": self.quickSelectGlobal,
            "text_long": self.quickSelectGlobal
         })

И сюда добавляем наши коды-слова, например эту самую "media" и "media_long".
Также в любое место акшинмап, например вот так
      self["QuickButtonActions"] = MQBActionMap(["QuickButtonActions"],
         {
            "red": self.quickSelectGlobal,
            "red_long": self.quickSelectGlobal,
            "green": self.quickSelectGlobal,
            "green_long": self.quickSelectGlobal,
            "yellow": self.quickSelectGlobal,
            "yellow_long": self.quickSelectGlobal,
            "blue": self.quickSelectGlobal,
            "blue_long": self.quickSelectGlobal,
            "vformat": self.quickSelectGlobal,
            "vformat_long": self.quickSelectGlobal,
            "media": self.quickSelectGlobal,
            "media_long": self.quickSelectGlobal,

            "sleep": self.quickSelectGlobal,
            "sleep_long": self.quickSelectGlobal,
            "tvradio": self.quickSelectGlobal,
            "tvradio_long": self.quickSelectGlobal,
            "resolution": self.quickSelectGlobal,
            "resolution_long": self.quickSelectGlobal,
            "rewind": self.quickSelectGlobal,
            "fastforward": self.quickSelectGlobal,
            "play": self.quickSelectGlobal,
            "previous": self.quickSelectGlobal,
            "next": self.quickSelectGlobal,
            "record": self.quickSelectGlobal,
            "record_long": self.quickSelectGlobal,
            "pause": self.quickSelectGlobal,   
            "pause_long": self.quickSelectGlobal,
            "stop": self.quickSelectGlobal,
            "stop_long": self.quickSelectGlobal,
            "select": self.quickSelectGlobal,
            "select_long": self.quickSelectGlobal,
            "help": self.quickSelectGlobal,
            "help_long": self.quickSelectGlobal,
            "recall": self.quickSelectGlobal,
            "recall_long": self.quickSelectGlobal,
            "cross_up": self.quickSelectGlobal,
            "cross_down": self.quickSelectGlobal,
            "cross_left": self.quickSelectGlobal,
            "cross_right": self.quickSelectGlobal,
            "ok": self.quickSelectGlobal,
            "home": self.quickSelectGlobal,
            "home_long": self.quickSelectGlobal,
            "pminus": self.quickSelectGlobal,
            "pminus_long": self.quickSelectGlobal,
            "pplus": self.quickSelectGlobal,
            "pplus_long": self.quickSelectGlobal,
            "favorites": self.quickSelectGlobal,
            "favorites_long": self.quickSelectGlobal,
            "epg": self.quickSelectGlobal,
            "epg_long": self.quickSelectGlobal,
            "directory": self.quickSelectGlobal,
            "directory_long": self.quickSelectGlobal,
            "channelup": self.quickSelectGlobal,
            "channeldown": self.quickSelectGlobal,
            "option": self.quickSelectGlobal,
            "option_long": self.quickSelectGlobal,
            "goto": self.quickSelectGlobal,
            "goto_long": self.quickSelectGlobal,
            "subtitle": self.quickSelectGlobal,
            "subtitle_long": self.quickSelectGlobal,
            "zoom": self.quickSelectGlobal,
            "zoom_long": self.quickSelectGlobal,
            "text": self.quickSelectGlobal,
            "text_long": self.quickSelectGlobal
         })

И последнее действие, находим в этом же файле внизу класс MQBActionMap(ActionMap), а там инструкцию action, то есть вот это

quickSelection = ("red", "red_long", "green", "green_long", "yellow", "yellow_long", "blue", "blue_long", "vformat", "vformat_long", "sleep", "sleep_long", "tvradio", "tvradio_long", \
              "resolution", "resolution_long", "rewind", "fastforward", "play", "previous", "next", "record", "record_long", "pause", "pause_long", "stop", "stop_long", "select", \
              "select_long", "help", "help_long", "recall", "recall_long", "cross_up", "cross_down", "cross_left", "cross_right", "ok", "home", "home_long", "pminus", "pminus_long", "pplus", "pplus_long", \
              "favorites", "favorites_long", "epg", "epg_long", "directory", "directory_long", "channelup", "channeldown", "option", "option_long", "goto", "goto_long", "subtitle", "subtitle_long", \
              "zoom", "zoom_long", "text", "text_long", "mqb_volup", "mqb_voldown", "mqb_mute", "mqb_power", "mqb_power_long")

И сюда также добавим эти коды-слова, то есть так (в любое место среди кодов-слов)

quickSelection = ("red", "red_long", "green", "green_long", "yellow", "yellow_long", "blue", "blue_long", "vformat", "vformat_long", "sleep", "sleep_long", "tvradio", "tvradio_long", \
              "resolution", "resolution_long", "rewind", "fastforward", "play", "previous", "next", "record", "record_long", "pause", "pause_long", "stop", "stop_long", "select", \
              "select_long", "help", "help_long", "recall", "recall_long", "cross_up", "cross_down", "cross_left", "cross_right", "ok", "home", "home_long", "pminus", "pminus_long", "pplus", "pplus_long", \
              "media", "media_long", "favorites", "favorites_long", "epg", "epg_long", "directory", "directory_long", "channelup", "channeldown", "option", "option_long", "goto", "goto_long", "subtitle", "subtitle_long", \
              "zoom", "zoom_long", "text", "text_long", "mqb_volup", "mqb_voldown", "mqb_mute", "mqb_power", "mqb_power_long")

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

Только учтите, не во всех имиджах работают долгие нажатия.
Почему, незнаю. По причине того, что я не всезнайка, не все знаю про энигму. А также нет возможности ставить эти имиджи и узнать причину.
Если вы продвинутый пользователь, вероятно вам самим удастся узнать причину и устранить проблему.
Удачи......

  • vu+ultimo 9995
Мои авторские работы  нельзя редактировать для выкладывания на паблик.
Но их можно выкладывать неизмененными на любых ресурсах с указанием авторства
Мои кошельки:
WMZ     Z356196865451 WMR     R105983132832

Оффлайн Irkoff

  • Джедай Куратор
  • **
  • Сообщений: 609
  • Поблагодарили: 729
  • Уважение: +6
Оч зачетный "роман"!!! Спасибо!  :drinks:
Хотелось бы просто узнать судьбу keymap.xml и keymap_backup_mqb.xml в /usr/share/enigma2/ . Если ничего не упустил то keymap.xml остался закоментированным чтобы keyids обращался сразу к плагину. Каково останется им назначение в особенности keymap_backup_mqb.xml?
Добавлено  26 октября | 2013г. | 23:31:34   
И еще... keyids из атача одинаков на всех имиджах? Всмысле можно ли свободно взять файл из атача и кинуть его к себе в имидж что бы наверняка знать коды?
Добавлено  26 октября | 2013г. | 23:39:37   
ЗЫ Осталось сделать фак по добавлению кнопок в сам пульт  :rofl:
  • VU+ Ultimo
Vu+ Ultimo / OpenPLi 4.0 / Wicardd 1.17 serv
S-8120Е / CrIs AR-P / Wicardd 1.16
(>  4.0°W-0.8W-4.8°E-9°E-13.0°E
(>  19,2°E-36.0°E

Оффлайн ака УчкунАвтор темы

  • Рыцарь Джедай
  • *****
  • Забанен!
  • Сообщений: 1098
  • Поблагодарили: 4787
  • Уважение: +49
........
Хотелось бы просто узнать судьбу keymap.xml и keymap_backup_mqb.xml в /usr/share/enigma2/ . Если ничего не упустил то keymap.xml остался закоментированным чтобы keyids обращался сразу к плагину. Каково останется им назначение в особенности keymap_backup_mqb.xml?
.......

А keymap_backup_mqb.xml (если вы правильно через телнет устанавливали плагин, как я требовал) если решитесь удалить плагин, то скриптом удаления (удалять нужно естественно через меню удаления плагинов) будет восстановлен как оригинальный (он и есть оригинальный) кеймап.хмл в имидже.

... keyids из атача одинаков на всех имиджах? Всмысле можно ли свободно взять файл из атача и кинуть его к себе в имидж что бы наверняка знать коды?
........

Насколько я знаю, да. В энигме2 вроде он одинаковый. Но точно утверждать не буду.
Я бы посоветовал не ставить его в имидж. В имидже у вас есть уже, пусть и хотя бы .pyo
А чтобы наверняка знать коды, можно держать этот файл и на компе.....

........
ЗЫ Осталось сделать фак по добавлению кнопок в сам пульт  :rofl:

 В принципе конечно шуточное желание такое и у меня возникло, когда увидел сколько много кнопок в некоторых пультах имеются в отличие от моего ультимо....




И кстати, именно таким образом можете делать версию плагина для любых ресиверов на любых имиджах (естессно на энигме2) и выкладывать на паблик, чтобы люди пользовались.
Я естественно не возражаю......
Лишь бы только не закрывали код плагина и не впихывали в платные имиджи......


Добавлено  27 октября | 2013г. | 10:26:08 
 
Совершенно упустил еще одно обстоятельство.
Нет, это еще не все.
Нужно еще в директории /etc/MultiQuickButton/ добавить файлы, соответствующие добавленным вами кнопкам в плагин.
То есть если вы добавили в плагин кнопку MEDIA с кодом "media" и "media_long", то нужно соответствующие файлы (с пустыми функциями внутри) добавить и в папку /etc/MultiQuickButton/ то есть в данном случае это будут вот эти файлы
quickbutton_media.xml
quickbutton_media_long.xml

Именно в эти файлы плагин будет хранить и узнавать далее, что за действие подвешено на кнопку. При отсутствии таковых файлов получите зеленку при попытке зайти в меню плагина......

Приаттачил шаблоны в unix-формате для создания таких файлов (приаттачено в архиве). Скопируйте себе и просто закидываем в папку /etc/MultiQuickButton/ и переименовываем shablon в созданный вами код.....
  • vu+ultimo 9995
Мои авторские работы  нельзя редактировать для выкладывания на паблик.
Но их можно выкладывать неизмененными на любых ресурсах с указанием авторства
Мои кошельки:
WMZ     Z356196865451 WMR     R105983132832

Оффлайн Irkoff

  • Джедай Куратор
  • **
  • Сообщений: 609
  • Поблагодарили: 729
  • Уважение: +6
Обязательно попробую пройти весь путь по "обнаружению" кнопок, но сейчас пытаюсь понять различие версий
Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.дело в том что в первой СН+ и СН- переключают каналы а во второй нет, с кнопкой ЕПГ тоже самое,  может сказывается "for-hdmu" или ошибка?
И еще вопросик какой код у кнопки AV?
Спасибо

Добавлено  27 октября | 2013г. | 16:54:18   
Кое что удалось.
Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.не было прописано в /usr/lib/enigma2/python/Plugins/Extensions/MultiQuickButton/keymap.xml так что CH+ и - работают уже.
  • VU+ Ultimo
Vu+ Ultimo / OpenPLi 4.0 / Wicardd 1.17 serv
S-8120Е / CrIs AR-P / Wicardd 1.16
(>  4.0°W-0.8W-4.8°E-9°E-13.0°E
(>  19,2°E-36.0°E

Оффлайн ака УчкунАвтор темы

  • Рыцарь Джедай
  • *****
  • Забанен!
  • Сообщений: 1098
  • Поблагодарили: 4787
  • Уважение: +49
Обязательно попробую пройти весь путь по "обнаружению" кнопок, но сейчас пытаюсь понять различие версий
Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.дело в том что в первой СН+ и СН- переключают каналы а во второй нет, с кнопкой ЕПГ тоже самое,  может сказывается "for-hdmu" или ошибка?
И еще вопросик какой код у кнопки AV?
Спасибо

Так ведь именно об этом и шла речь в этом FAQ.
То, что в меню плагина написано кнопка канал+, это еще надо проверить какой ID под собой содержит.
Первый из перечисленных плагинов оптимизирован под ресиверы дуо, уно но не самый продвинутый в смысле наличия функций.
А второй, который я рекомендовал под себя переделать в своем нынешнем виде оптимизирован под пульты опенбоксов-фортисов, но содержит больше функций.
Сам делай вывод. Как могут твои кнопки от VU+ совпадать с фортисовским......
Все это касаемо и кнопок канал+ и минус, а также и ЕПГ.....

А вопрос про кнопку AV, если ты имеешь ввиду такую кнопку на родном пульте ультимо (у меня такой), то у меня эта кнопка к сожалению пустышка.
Если имеешь ввиду кнопку AV от пульта другого ресивера, то откуда же мне знать, какой код за ним стоит.
Для этого и FAQ, чтобы сам выяснял это......


  • vu+ultimo 9995
Мои авторские работы  нельзя редактировать для выкладывания на паблик.
Но их можно выкладывать неизмененными на любых ресурсах с указанием авторства
Мои кошельки:
WMZ     Z356196865451 WMR     R105983132832

Оффлайн Irkoff

  • Джедай Куратор
  • **
  • Сообщений: 609
  • Поблагодарили: 729
  • Уважение: +6
кнопка AV на ультимо имелясь ввиду. указаным в фак способом пытался найти ее, не смог, решил переспросить на всяк случай. жаль что пустышка.
А для себя сделал вывод что мне наверное рентабельней использовать 303 версию на ультимо, она хоть не полная как вторая но нету столько лишнего для ультимо. Проще уж чего нибудь к 303 добавить если не хватает чем переделывать вторую.
спасибо
  • VU+ Ultimo
Vu+ Ultimo / OpenPLi 4.0 / Wicardd 1.17 serv
S-8120Е / CrIs AR-P / Wicardd 1.16
(>  4.0°W-0.8W-4.8°E-9°E-13.0°E
(>  19,2°E-36.0°E

Оффлайн ака УчкунАвтор темы

  • Рыцарь Джедай
  • *****
  • Забанен!
  • Сообщений: 1098
  • Поблагодарили: 4787
  • Уважение: +49
Вывод правильный, действительно лучше уже подточенную под VU версию использовать, чем фортисовскую.
А насчет пустышки-кнопки, у меня она пустышка, у тебя может нет?
Просто нажми и погляди на пульте самом, там же есть сенсор между кнопками ТВ и Выключение.
Если она загорается, то не пустышка, у меня не загорается.....
Добавлено  27 октября | 2013г. | 17:22:59   
С другой стороны, знаешь на родном пульте ультимо можно задействовать еще уйму кнопок с задней стороны......
  • vu+ultimo 9995
Мои авторские работы  нельзя редактировать для выкладывания на паблик.
Но их можно выкладывать неизмененными на любых ресурсах с указанием авторства
Мои кошельки:
WMZ     Z356196865451 WMR     R105983132832

Теги:
 

Похожие темы

  Тема / Автор Ответов Последний ответ
281 Ответов
179258 Просмотров
Последний ответ 26 ноября | 2021г. | 09:59:51
от vaha555
31 Ответов
40841 Просмотров
Последний ответ 14 июля | 2016г. | 22:03:22
от Калян_
10 Ответов
12129 Просмотров
Последний ответ 27 мая | 2018г. | 21:48:35
от mic71
22 Ответов
15339 Просмотров
Последний ответ 05 апреля | 2015г. | 11:41:10
от aam13
103 Ответов
86509 Просмотров
Последний ответ 22 августа | 2021г. | 18:56:35
от Николай_2014



X

Добро пожаловать!

Мы заметили, что у Вас установлено расширение AdBlock или ему подобное. Пожалуйста добавьте наш Клуб в белый список, внесите этим посильную лепту в его развитие. Спасибо!