Advertisement
Forage

libcec pythin

Jun 14th, 2015
309
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.22 KB | None | 0 0
  1. #! /usr/bin/python
  2.  
  3. import time
  4. import cec
  5. import glob
  6. import re
  7. import os
  8. import logging
  9. from subprocess import call
  10.  
  11. class EntoneCecClient:
  12.   CEC_KEY_EXIT      = 44
  13.   CEC_KEY_EPG       = 83
  14.   CEC_KEY_OK        = 0
  15.   CEC_KEY_UP        = 1
  16.   CEC_KEY_DOWN      = 2
  17.   CEC_KEY_RIGHT     = 4
  18.   CEC_KEY_LEFT      = 3
  19.   CEC_KEY_OPTION    = 10
  20.   CEC_KEY_BACK      = 13
  21.   CEC_KEY_RED       = 114
  22.   CEC_KEY_GREEN     = 115
  23.   CEC_KEY_YELLOW    = 116
  24.   CEC_KEY_BLUE      = 113
  25.   CEC_KEY_TEXT      = 118
  26.   CEC_KEY_SUBTITLE  = 81
  27.   CEC_KEY_0     = 32
  28.   CEC_KEY_1     = 33
  29.   CEC_KEY_2     = 34
  30.   CEC_KEY_3     = 35
  31.   CEC_KEY_4     = 36
  32.   CEC_KEY_5     = 37
  33.   CEC_KEY_6     = 38
  34.   CEC_KEY_7     = 39
  35.   CEC_KEY_8     = 40
  36.   CEC_KEY_9     = 41
  37.   CEC_KEY_CHANNELUP = 48
  38.   CEC_KEY_CHANNELDOWN   = 49
  39.   CEC_KEY_RECORD    = 71
  40.   CEC_KEY_REWIND    = 76
  41.   CEC_KEY_PLAY      = 68
  42.   CEC_KEY_FORWARD   = 75
  43.   CEC_KEY_STOP      = 69 # Not given back with 0 duration!
  44.   CEC_KEY_PLAYPAUSE = 70
  45.  
  46.   key_map = {
  47. #           : "KEY_MENU",
  48. #           : "KEY_INFO",
  49. #           : "KEY_VOLUMEUP",
  50. #           : "KEY_VOLUMEDOWN",
  51. #           : "KEY_MUTE",
  52. #           : "KEY_DOT",
  53. #           : "KEY_POWER",
  54.     CEC_KEY_EXIT    : "KEY_EXIT",
  55.     CEC_KEY_EPG     : "KEY_EPG",
  56.     CEC_KEY_OK      : "KEY_OK",
  57.     CEC_KEY_UP      : "KEY_UP",
  58.     CEC_KEY_DOWN    : "KEY_DOWN",
  59.     CEC_KEY_RIGHT   : "KEY_RIGHT",
  60.     CEC_KEY_LEFT    : "KEY_LEFT",
  61. #   CEC_KEY_OPTION  : "",
  62.     CEC_KEY_BACK    : "KEY_BACK",
  63.     CEC_KEY_RED     : "KEY_RED",
  64.     CEC_KEY_GREEN   : "KEY_GREEN",
  65.     CEC_KEY_YELLOW  : "KEY_YELLOW",
  66.     CEC_KEY_BLUE    : "KEY_BLUE",
  67.     CEC_KEY_TEXT    : "KEY_TEXT",
  68. #   CEC_KEY_SUBTITLE: "",
  69.     CEC_KEY_0       : "KEY_0",
  70.     CEC_KEY_1       : "KEY_1",
  71.     CEC_KEY_2       : "KEY_2",
  72.     CEC_KEY_3       : "KEY_3",
  73.     CEC_KEY_4       : "KEY_4",
  74.     CEC_KEY_5       : "KEY_5",
  75.     CEC_KEY_6       : "KEY_6",
  76.     CEC_KEY_7       : "KEY_7",
  77.     CEC_KEY_8       : "KEY_8",
  78.     CEC_KEY_9       : "KEY_9",
  79.     CEC_KEY_CHANNELUP   : "KEY_CHANNELUP",
  80.     CEC_KEY_CHANNELDOWN : "KEY_CHANNELDOWN",
  81.     CEC_KEY_RECORD  : "KEY_RECORD",
  82. #   CEC_KEY_REWIND  : "",
  83. #   CEC_KEY_PLAY    : "",
  84. #   CEC_KEY_FORWARD : "",
  85.     CEC_KEY_STOP    : "KEY_STOP",
  86.     CEC_KEY_PLAYPAUSE   : "KEY_PLAYPAUSE"
  87.   }
  88.  
  89.   cecconfig = cec.libcec_configuration()
  90.   lib = {}
  91.  
  92.   # create a new libcec_configuration
  93.   def set_configuration(self):
  94.     self.cecconfig.strDeviceName   = "Entone"
  95.     self.cecconfig.bActivateSource = 0
  96.     self.cecconfig.deviceTypes.Add(cec.CEC_DEVICE_TYPE_RECORDING_DEVICE)
  97.     self.cecconfig.clientVersion = cec.LIBCEC_VERSION_CURRENT
  98.  
  99.   def set_key_press_callback(self, callback):
  100.     self.cecconfig.set_key_press_callback(callback)
  101.  
  102.   def set_source_actived_callback(self, callback):
  103.     self.cecconfig.Setsource_activated_callback(callback)
  104.  
  105.   # detect an USB-CEC adapter and return the com port path
  106.   def detect_adapter(self):
  107.     logger.debug("Detecting adapter")
  108.     retval = None
  109.  
  110.     # take possible versions/revisions into account
  111.     devices = glob.glob('/dev/serial/by-id/usb-Pulse-Eight_USB-CEC_Adapter*-if00')
  112.     # just use the first device, if any
  113.     if len(devices) > 0:
  114.       retval = os.path.realpath(devices[0])
  115.  
  116.     return retval
  117.  
  118.   # initialise libCEC
  119.   def init_libcec(self):
  120.     self.lib = cec.ICECAdapter.Create(self.cecconfig)
  121.  
  122.     # search for adapters
  123.     adapter = self.detect_adapter()
  124.     if adapter == None:
  125.       logger.error("No USB-CEC adapter found")
  126.     else:
  127.       logger.info("Using USB-CEC adapter: {}".format(adapter))
  128.       if self.lib.Open(adapter):
  129.         logger.info("Connection opened")
  130.         self.main_loop()
  131.       else:
  132.         logger.error("Failed to open connection to USB-CEC adapter")
  133.  
  134.   # main loop, ask for commands
  135.   def main_loop(self):
  136.     logger.debug("Waiting...")
  137.     runLoop = True
  138.  
  139. #    while runLoop:
  140. #      command = raw_input("Enter command:").lower()
  141. #      if command == 'q' or command == 'quit':
  142. #        runLoop = False
  143.     while True:
  144.       time.sleep(0.05)
  145.       pass
  146.  
  147.     logger.info('Exiting...')
  148.  
  149.   # key press callback
  150.   def key_press_callback(self, key, duration):
  151.     logger.debug("Key pressed")
  152.     logger.debug("[key pressed] {} ({})".format(key, duration))
  153.     # only act on initial key presses (duration 0), including repeats
  154.     # make key CEC_KEY_STOP an exception because it never gives duration 0
  155.     if duration == 0 or key == self.CEC_KEY_STOP:
  156.       self.execute_lirc_command(key)
  157.     return 0
  158.  
  159.   def source_activated_callback(self, device, state):
  160.     logger.debug("Device {} activated state changed to {}".format(device, bool(state)))
  161.  
  162.   # Execute LIRC command
  163.   def execute_lirc_command(self, key):
  164.     logger.info("Lets execute: {}".format(self.key_map[key]))
  165.     call(['irsend', 'SEND_ONCE', 'ENTONE_URC-4021ABA1-006-R', self.key_map[key]])
  166.  
  167.   def __init__(self):
  168.     self.set_configuration()
  169.  
  170. # key press callback
  171. def key_press_callback(key, duration):
  172.   return lib.key_press_callback(key, duration)
  173.  
  174. # source activated callback
  175. def source_activated_callback(device, state):
  176.   return lib.source_activated_callback(device, state)
  177.  
  178. if __name__ == '__main__':
  179.   logging.basicConfig(level=logging.WARNING)
  180.   logger = logging.getLogger(__name__)
  181.  
  182.   # initialise libCEC
  183.   lib = EntoneCecClient()
  184.   lib.set_key_press_callback(key_press_callback)
  185.   lib.set_source_actived_callback(source_activated_callback)
  186.  
  187.   # initialise libCEC and enter the main loop
  188.   lib.init_libcec()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement