Ejemplo n.º 1
0
class EchoFeature(hid_gadget.HidFeature):

  REPORT_DESC = hid_descriptors.ReportDescriptor(
      hid_descriptors.UsagePage(0xFF00),  # Vendor Defined
      hid_descriptors.Usage(0),
      hid_descriptors.Collection(
          hid_constants.CollectionType.APPLICATION,
          hid_descriptors.LogicalMinimum(0, force_length=1),
          hid_descriptors.LogicalMaximum(255, force_length=2),
          hid_descriptors.ReportSize(8),
          hid_descriptors.ReportCount(8),
          hid_descriptors.Usage(0),
          hid_descriptors.Input(hid_descriptors.Data,
                                hid_descriptors.Variable,
                                hid_descriptors.Absolute),
          hid_descriptors.Usage(0),
          hid_descriptors.Output(hid_descriptors.Data,
                                 hid_descriptors.Variable,
                                 hid_descriptors.Absolute),
          hid_descriptors.Usage(0),
          hid_descriptors.Feature(hid_descriptors.Data,
                                  hid_descriptors.Variable,
                                  hid_descriptors.Absolute)
      )
  )

  def __init__(self):
    super(EchoFeature, self).__init__()
    self._input_output_report = 0
    self._feature_report = 0

  def SetInputReport(self, data):
    self._input_output_report, = struct.unpack('<Q', data)
    self.SendReport(struct.pack('<Q', self._input_output_report))
    return True

  def SetOutputReport(self, data):
    self._input_output_report, = struct.unpack('<Q', data)
    self.SendReport(struct.pack('<Q', self._input_output_report))
    return True

  def SetFeatureReport(self, data):
    self._feature_report, = struct.unpack('<Q', data)
    return True

  def GetInputReport(self):
    return struct.pack('<Q', self._input_output_report)

  def GetOutputReport(self):
    return struct.pack('<Q', self._input_output_report)

  def GetFeatureReport(self):
    return struct.pack('<Q', self._feature_report)
Ejemplo n.º 2
0
report_desc = hid_descriptors.ReportDescriptor(
    hid_descriptors.UsagePage(0xFF00),  # Vendor Defined
    hid_descriptors.Usage(0x00),
    hid_descriptors.Collection(
        hid_constants.CollectionType.APPLICATION,
        hid_descriptors.LogicalMinimum(0, force_length=1),
        hid_descriptors.LogicalMaximum(255, force_length=2),
        hid_descriptors.ReportSize(8), hid_descriptors.ReportCount(8),
        hid_descriptors.Input(hid_descriptors.Data, hid_descriptors.Variable,
                              hid_descriptors.Absolute,
                              hid_descriptors.BufferedBytes),
        hid_descriptors.Output(hid_descriptors.Data, hid_descriptors.Variable,
                               hid_descriptors.Absolute,
                               hid_descriptors.BufferedBytes),
        hid_descriptors.Feature(hid_descriptors.Data, hid_descriptors.Variable,
                                hid_descriptors.Absolute,
                                hid_descriptors.BufferedBytes)))

combo_report_desc = hid_descriptors.ReportDescriptor(
    hid_descriptors.ReportID(1), report_desc, hid_descriptors.ReportID(2),
    report_desc)


class HidGadgetTest(unittest.TestCase):
    def test_bad_intervals(self):
        with self.assertRaisesRegexp(ValueError, 'Full speed'):
            hid_gadget.HidGadget(report_desc,
                                 features={},
                                 interval_ms=50000,
                                 vendor_id=0,
                                 product_id=0)