Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 # Copyright 2014 Google Inc. All rights reserved. | 1 # Copyright 2014 Google Inc. All rights reserved. |
| 2 # | 2 # |
| 3 # Licensed under the Apache License, Version 2.0 (the "License"); | 3 # Licensed under the Apache License, Version 2.0 (the "License"); |
| 4 # you may not use this file except in compliance with the License. | 4 # you may not use this file except in compliance with the License. |
| 5 # You may obtain a copy of the License at | 5 # You may obtain a copy of the License at |
| 6 # | 6 # |
| 7 # http://www.apache.org/licenses/LICENSE-2.0 | 7 # http://www.apache.org/licenses/LICENSE-2.0 |
| 8 # | 8 # |
| 9 # Unless required by applicable law or agreed to in writing, software | 9 # Unless required by applicable law or agreed to in writing, software |
| 10 # distributed under the License is distributed on an "AS IS" BASIS, | 10 # distributed under the License is distributed on an "AS IS" BASIS, |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 86 self._write_endpoint = None | 86 self._write_endpoint = None |
| 87 self._interface_number = None | 87 self._interface_number = None |
| 88 self._max_read_packet_len = None | 88 self._max_read_packet_len = None |
| 89 | 89 |
| 90 @property | 90 @property |
| 91 def usb_info(self): | 91 def usb_info(self): |
| 92 try: | 92 try: |
| 93 sn = self.serial_number | 93 sn = self.serial_number |
| 94 except libusb1.USBError: | 94 except libusb1.USBError: |
| 95 sn = '' | 95 sn = '' |
| 96 if sn and sn != self._usb_info: | 96 if sn and sn != self._usb_info and self._usb_info: |
| 97 return '%s %s' % (self._usb_info, sn) | 97 return '%s %s' % (self._usb_info, sn) |
| 98 return self._usb_info | 98 return self._usb_info |
| 99 | 99 |
| 100 def Open(self): | 100 def Open(self): |
| 101 """Opens the USB device for this setting, and claims the interface.""" | 101 """Opens the USB device for this setting, and claims the interface.""" |
| 102 # Make sure we close any previous handle open to this usb device. | 102 # Make sure we close any previous handle open to this usb device. |
| 103 port_path = self.port_path | 103 port_path = self.port_path |
| 104 _LOG.info('%s.Open()', self.port_path_str) | 104 _LOG.info('%s.Open()', self.port_path_str) |
| 105 | 105 |
| 106 with self._HANDLE_CACHE_LOCK: | 106 with self._HANDLE_CACHE_LOCK: |
| 107 previous = self._HANDLE_CACHE.get(port_path) | 107 previous = self._HANDLE_CACHE.get(port_path) |
| 108 if previous: | 108 if previous: |
| 109 _LOG.error( | 109 _LOG.error( |
| 110 '%s.Open(): Found already opened port:\n%s', | 110 '%s.Open(): Found already opened port:\n%s', |
| 111 self.port_path_str, previous[1]) | 111 self.port_path_str, previous[1]) |
| 112 previous[0].Close() | 112 previous[0].Close() |
| 113 | 113 |
| 114 for endpoint in self._setting.iterEndpoints(): | 114 try: |
| 115 address = endpoint.getAddress() | 115 for endpoint in self._setting.iterEndpoints(): |
| 116 if address & libusb1.USB_ENDPOINT_DIR_MASK: | 116 address = endpoint.getAddress() |
| 117 self._read_endpoint = address | 117 if address & libusb1.USB_ENDPOINT_DIR_MASK: |
| 118 self._max_read_packet_len = endpoint.getMaxPacketSize() | 118 self._read_endpoint = address |
| 119 else: | 119 self._max_read_packet_len = endpoint.getMaxPacketSize() |
| 120 self._write_endpoint = address | 120 else: |
| 121 self._write_endpoint = address | |
| 121 | 122 |
| 122 assert self._read_endpoint is not None | 123 assert self._read_endpoint is not None |
| 123 assert self._write_endpoint is not None | 124 assert self._write_endpoint is not None |
| 124 | 125 |
| 125 handle = self._device.open() | 126 self._handle = self._device.open() |
| 126 iface_number = self._setting.getNumber() | 127 self._interface_number = self._setting.getNumber() |
| 127 try: | 128 try: |
| 128 if handle.kernelDriverActive(iface_number): | 129 if self._handle.kernelDriverActive(self._interface_number): |
| 129 handle.detachKernelDriver(iface_number) | 130 self._handle.detachKernelDriver(self._interface_number) |
| 130 except libusb1.USBError as e: | 131 except libusb1.USBError as e: |
| 131 if e.value == libusb1.LIBUSB_ERROR_NOT_FOUND: | 132 if e.value == libusb1.LIBUSB_ERROR_NOT_FOUND: |
| 132 _LOG.warning( | 133 _LOG.warning( |
| 133 '%s.Open(): Kernel driver not found for interface: %s.', | 134 '%s.Open(): Kernel driver not found for interface: %s.', |
| 134 self.port_path_str, iface_number) | 135 self.port_path_str, self._interface_number) |
| 135 else: | 136 self.Close() |
| 136 raise | 137 else: |
| 137 handle.claimInterface(iface_number) | 138 raise |
| 138 self._handle = handle | 139 self._handle.claimInterface(self._interface_number) |
| 139 self._interface_number = iface_number | |
| 140 | 140 |
| 141 stack = ''.join(traceback.format_stack()[:-2]) | 141 stack = ''.join(traceback.format_stack()[:-2]) |
| 142 with self._HANDLE_CACHE_LOCK: | 142 with self._HANDLE_CACHE_LOCK: |
| 143 self._HANDLE_CACHE[port_path] = (self._handle, stack) | 143 self._HANDLE_CACHE[port_path] = (self, stack) |
|
ghost stip (do not use)
2015/11/03 18:50:46
that seems wrong, wouldn't you still want to add t
M-A Ruel
2015/11/04 18:39:10
It's wrong too, I'll get rid of this once I figure
| |
| 144 except Exception as e: | |
| 145 self.Close() | |
| 146 raise | |
| 144 | 147 |
| 145 @property | 148 @property |
| 146 def is_open(self): | 149 def is_open(self): |
| 147 return bool(self._handle) | 150 return bool(self._handle) |
| 148 | 151 |
| 149 @property | 152 @property |
| 150 def serial_number(self): | 153 def serial_number(self): |
| 151 if not self._serial_number: | 154 if not self._serial_number: |
| 152 self._serial_number = self._device.getSerialNumber() | 155 self._serial_number = self._device.getSerialNumber() |
| 153 return self._serial_number | 156 return self._serial_number |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 164 return '/'.join(str(p) for p in self.port_path) | 167 return '/'.join(str(p) for p in self.port_path) |
| 165 | 168 |
| 166 def Close(self): | 169 def Close(self): |
| 167 port_path = self.port_path | 170 port_path = self.port_path |
| 168 _LOG.info('%s.Close()', self.port_path_str) | 171 _LOG.info('%s.Close()', self.port_path_str) |
| 169 with self._HANDLE_CACHE_LOCK: | 172 with self._HANDLE_CACHE_LOCK: |
| 170 self._HANDLE_CACHE.pop(port_path, None) | 173 self._HANDLE_CACHE.pop(port_path, None) |
| 171 if self._handle is None: | 174 if self._handle is None: |
| 172 return | 175 return |
| 173 try: | 176 try: |
| 174 self._handle.releaseInterface(self._interface_number) | 177 if self._interface_number: |
| 178 self._handle.releaseInterface(self._interface_number) | |
| 175 self._handle.close() | 179 self._handle.close() |
| 176 except libusb1.USBError as e: | 180 except libusb1.USBError as e: |
| 177 _LOG.info('%s.Close(): USBError: %s', self.port_path_str, e) | 181 _LOG.info('%s.Close(): USBError: %s', self.port_path_str, e) |
| 178 finally: | 182 finally: |
| 179 self._handle = None | 183 self._handle = None |
| 180 self._read_endpoint = None | 184 self._read_endpoint = None |
| 181 self._write_endpoint = None | 185 self._write_endpoint = None |
| 182 self._interface_number = None | 186 self._interface_number = None |
| 183 self._max_read_packet_len = None | 187 self._max_read_packet_len = None |
| 184 | 188 |
| (...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 356 return self._connection.sendall(data) | 360 return self._connection.sendall(data) |
| 357 | 361 |
| 358 def BulkRead(self, numbytes, timeout=None): # pylint: disable=unused-argument | 362 def BulkRead(self, numbytes, timeout=None): # pylint: disable=unused-argument |
| 359 return self._connection.recv(numbytes) | 363 return self._connection.recv(numbytes) |
| 360 | 364 |
| 361 def Timeout(self, timeout_ms): | 365 def Timeout(self, timeout_ms): |
| 362 return timeout_ms | 366 return timeout_ms |
| 363 | 367 |
| 364 def Close(self): | 368 def Close(self): |
| 365 return self._connection.close() | 369 return self._connection.close() |
| OLD | NEW |