massive commit to get umass working, only significant known bug is that changes don...
[goodfet] / client / USBConfiguration.py
1 # USBConfiguration.py
2 #
3 # Contains class definition for USBConfiguration.
4
5 class USBConfiguration:
6     def __init__(self, configuration_index, configuration_string, interfaces):
7         self.configuration_index        = configuration_index
8         self.configuration_string       = configuration_string
9         self.configuration_string_index = 0
10         self.interfaces                 = interfaces
11
12         self.attributes = 0xe0
13         self.max_power = 0x01
14
15         self.device = None
16
17         for i in self.interfaces:
18             i.set_configuration(self)
19
20     def set_device(self, device):
21         self.device = device
22
23     def set_configuration_string_index(self, i):
24         self.configuration_string_index = i
25
26     def get_descriptor(self):
27         interface_descriptors = bytearray()
28         for i in self.interfaces:
29             interface_descriptors += i.get_descriptor()
30
31         total_len = len(interface_descriptors) + 9
32
33         d = bytes([
34                 9,          # length of descriptor in bytes
35                 2,          # descriptor type 2 == configuration
36                 total_len & 0xff,
37                 (total_len >> 8) & 0xff,
38                 len(self.interfaces),
39                 self.configuration_index,
40                 self.configuration_string_index,
41                 self.attributes,
42                 self.max_power
43         ])
44
45         return d + interface_descriptors
46