text: # Copyright 2016 Google Inc. All Rights Reserved.
  #
  # Licensed under the Apache License, Version 2.0 (the "License");
  # you may not use this file except in compliance with the License.
  # You may obtain a copy of the License at
  #
  #    http://www.apache.org/licenses/LICENSE-2.0
  #
  # Unless required by applicable law or agreed to in writing, software
  # distributed under the License is distributed on an "AS IS" BASIS,
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  # See the License for the specific language governing permissions and
  # limitations under the License.
  
  """Implement base classes for hid package.
  
  This module provides the base classes implemented by the
  platform-specific modules.  It includes a base class for
  all implementations built on interacting with file-like objects.
  """
  
  
  class HidDevice(object):
    """Base class for all HID devices in this package."""
  
    @staticmethod
    def Enumerate():
      """Enumerates all the hid devices.
  
      This function enumerates all the hid device and provides metadata
      for helping the client select one.
  
      Returns:
        A list of dictionaries of metadata.  Each implementation is required
        to provide at least: vendor_id, product_id, product_string, usage,
        usage_page, and path.
      """
      pass
  
    def __init__(self, path):
      """Initialize the device at path."""
      pass
  
    def GetInReportDataLength(self):
      """Returns the max input report data length in bytes.
  
      Returns the max input report data length in bytes.  This excludes the
      report id.
      """
      pass
  
    def GetOutReportDataLength(self):
      """Returns the max output report data length in bytes.
  
      Returns the max output report data length in bytes.  This excludes the
      report id.
      """
      pass
  
    def Write(self, packet):
      """Writes packet to device.
  
      Writes the packet to the device.
  
      Args:
        packet: An array of integers to write to the device.  Excludes the report
        ID. Must be equal to GetOutReportLength().
      """
      pass
  
    def Read(self):
      """Reads packet from device.
  
      Reads the packet from the device.
  
      Returns:
        An array of integers read from the device.  Excludes the report ID.
        The length is equal to GetInReportDataLength().
      """
      pass
  
  
  class DeviceDescriptor(object):
    """Descriptor for basic attributes of the device."""
  
    usage_page = None
    usage = None
    vendor_id = None
    product_id = None
    product_string = None
    path = None
  
    internal_max_in_report_len = None
    internal_max_out_report_len = None
  
    def ToPublicDict(self):
      out = {}
      for k, v in self.__dict__.items():
        if not k.startswith('internal_'):
          out[k] = v
      return out
  