mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-01-18 16:27:34 +01:00
@@ -4,6 +4,8 @@
|
||||
# This work is licensed under the MIT license, see the file LICENSE for
|
||||
# details.
|
||||
|
||||
# This script has been modified by NumWorks contributors
|
||||
|
||||
"""This module implements enough functionality to program the STM32F4xx over
|
||||
DFU, without requiring dfu-util.
|
||||
See app note AN3156 for a description of the DFU protocol.
|
||||
|
||||
52
build/device/usb/__init__.py
Executable file → Normal file
52
build/device/usb/__init__.py
Executable file → Normal file
@@ -1,17 +1,32 @@
|
||||
# Copyright (C) 2009-2017 Wander Lairson Costa
|
||||
# Copyright (C) 2017-2018 Robert Wlodarczyk
|
||||
# Copyright 2009-2017 Wander Lairson Costa
|
||||
# Copyright 2009-2021 PyUSB contributors
|
||||
#
|
||||
# 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
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are
|
||||
# met:
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
# 1. Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
#
|
||||
# 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.
|
||||
# 2. Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution.
|
||||
#
|
||||
# 3. Neither the name of the copyright holder nor the names of its
|
||||
# contributors may be used to endorse or promote products derived from
|
||||
# this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
r"""PyUSB - Easy USB access in Python
|
||||
|
||||
@@ -33,8 +48,19 @@ import os
|
||||
__author__ = 'Wander Lairson Costa'
|
||||
|
||||
# Use Semantic Versioning, http://semver.org/
|
||||
version_info = (1, 0, 2)
|
||||
__version__ = '%d.%d.%d' % version_info
|
||||
try:
|
||||
from usb._version import version as __version__
|
||||
except ImportError:
|
||||
__version__ = '0.0.0'
|
||||
|
||||
def _get_extended_version_info(version):
|
||||
import re
|
||||
m = re.match(r'(\d+)\.(\d+)\.(\d+)[.-]?(.*)', version)
|
||||
major, minor, patch, suffix = m.groups()
|
||||
return int(major), int(minor), int(patch), suffix
|
||||
|
||||
extended_version_info = _get_extended_version_info(__version__)
|
||||
version_info = extended_version_info[:3]
|
||||
|
||||
__all__ = ['legacy', 'control', 'core', 'backend', 'util', 'libloader']
|
||||
|
||||
|
||||
37
build/device/usb/_debug.py
Executable file → Normal file
37
build/device/usb/_debug.py
Executable file → Normal file
@@ -1,17 +1,32 @@
|
||||
# Copyright (C) 2009-2017 Wander Lairson Costa
|
||||
# Copyright (C) 2017-2018 Robert Wlodarczyk
|
||||
# Copyright 2009-2017 Wander Lairson Costa
|
||||
# Copyright 2009-2021 PyUSB contributors
|
||||
#
|
||||
# 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
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are
|
||||
# met:
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
# 1. Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
#
|
||||
# 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.
|
||||
# 2. Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution.
|
||||
#
|
||||
# 3. Neither the name of the copyright holder nor the names of its
|
||||
# contributors may be used to endorse or promote products derived from
|
||||
# this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
__author__ = 'Wander Lairson Costa'
|
||||
|
||||
|
||||
39
build/device/usb/_interop.py
Executable file → Normal file
39
build/device/usb/_interop.py
Executable file → Normal file
@@ -1,17 +1,32 @@
|
||||
# Copyright (C) 2009-2017 Wander Lairson Costa
|
||||
# Copyright (C) 2017-2018 Robert Wlodarczyk
|
||||
# Copyright 2009-2017 Wander Lairson Costa
|
||||
# Copyright 2009-2021 PyUSB contributors
|
||||
#
|
||||
# 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
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are
|
||||
# met:
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
# 1. Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
#
|
||||
# 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.
|
||||
# 2. Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution.
|
||||
#
|
||||
# 3. Neither the name of the copyright holder nor the names of its
|
||||
# contributors may be used to endorse or promote products derived from
|
||||
# this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
# All the hacks necessary to assure compatibility across all
|
||||
# supported versions come here.
|
||||
@@ -81,5 +96,5 @@ def as_array(data=None):
|
||||
# When you pass a unicode string or a character sequence,
|
||||
# you get a TypeError if the first parameter does not match
|
||||
a = array.array('B')
|
||||
a.fromstring(data) # deprecated since 3.2
|
||||
a.frombytes(data.encode('utf-8'))
|
||||
return a
|
||||
|
||||
37
build/device/usb/_lookup.py
Executable file → Normal file
37
build/device/usb/_lookup.py
Executable file → Normal file
@@ -1,17 +1,32 @@
|
||||
# Copyright (C) 2009-2017 Wander Lairson Costa
|
||||
# Copyright (C) 2017-2018 Robert Wlodarczyk
|
||||
# Copyright 2009-2017 Wander Lairson Costa
|
||||
# Copyright 2009-2021 PyUSB contributors
|
||||
#
|
||||
# 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
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are
|
||||
# met:
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
# 1. Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
#
|
||||
# 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.
|
||||
# 2. Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution.
|
||||
#
|
||||
# 3. Neither the name of the copyright holder nor the names of its
|
||||
# contributors may be used to endorse or promote products derived from
|
||||
# this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
r"""usb._lookups - Lookup tables for USB
|
||||
"""
|
||||
|
||||
37
build/device/usb/_objfinalizer.py
Executable file → Normal file
37
build/device/usb/_objfinalizer.py
Executable file → Normal file
@@ -1,19 +1,34 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# Copyright (C) 2009-2017 Wander Lairson Costa
|
||||
# Copyright (C) 2017-2018 Robert Wlodarczyk
|
||||
# Copyright 2009-2017 Wander Lairson Costa
|
||||
# Copyright 2009-2021 PyUSB contributors
|
||||
#
|
||||
# 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
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are
|
||||
# met:
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
# 1. Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
#
|
||||
# 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.
|
||||
# 2. Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution.
|
||||
#
|
||||
# 3. Neither the name of the copyright holder nor the names of its
|
||||
# contributors may be used to endorse or promote products derived from
|
||||
# this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
import sys
|
||||
|
||||
|
||||
43
build/device/usb/backend/__init__.py
Executable file → Normal file
43
build/device/usb/backend/__init__.py
Executable file → Normal file
@@ -1,17 +1,32 @@
|
||||
# Copyright (C) 2009-2017 Wander Lairson Costa
|
||||
# Copyright (C) 2017-2018 Robert Wlodarczyk
|
||||
# Copyright 2009-2017 Wander Lairson Costa
|
||||
# Copyright 2009-2021 PyUSB contributors
|
||||
#
|
||||
# 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
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are
|
||||
# met:
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
# 1. Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
#
|
||||
# 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.
|
||||
# 2. Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution.
|
||||
#
|
||||
# 3. Neither the name of the copyright holder nor the names of its
|
||||
# contributors may be used to endorse or promote products derived from
|
||||
# this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
r"""usb.backend - Backend interface.
|
||||
|
||||
@@ -62,7 +77,7 @@ import usb._objfinalizer as _objfinalizer
|
||||
|
||||
__author__ = 'Wander Lairson Costa'
|
||||
|
||||
__all__ = ['IBackend', 'libusb01', 'libusb10', 'openusb']
|
||||
__all__ = ['IBackend', 'libusb0', 'libusb1', 'openusb']
|
||||
|
||||
def _not_implemented(func):
|
||||
raise NotImplementedError(func.__name__)
|
||||
@@ -196,7 +211,7 @@ class IBackend(_objfinalizer.AutoFinalizedObject):
|
||||
|
||||
This method should only be called when the interface has more than
|
||||
one alternate setting. The dev_handle is the value returned by the
|
||||
open_device() method. intf and altsetting are respectivelly the
|
||||
open_device() method. intf and altsetting are respectively the
|
||||
bInterfaceNumber and bAlternateSetting fields of the related interface.
|
||||
"""
|
||||
_not_implemented(self.set_interface_altsetting)
|
||||
@@ -268,7 +283,7 @@ class IBackend(_objfinalizer.AutoFinalizedObject):
|
||||
_not_implemented(self.intr_write)
|
||||
|
||||
def intr_read(self, dev_handle, ep, intf, size, timeout):
|
||||
r"""Perform an interrut read.
|
||||
r"""Perform an interrupt read.
|
||||
|
||||
dev_handle is the value returned by the open_device() method.
|
||||
The ep parameter is the bEndpointAddress field whose endpoint
|
||||
|
||||
80
build/device/usb/backend/libusb0.py
Executable file → Normal file
80
build/device/usb/backend/libusb0.py
Executable file → Normal file
@@ -1,24 +1,40 @@
|
||||
# Copyright (C) 2009-2017 Wander Lairson Costa
|
||||
# Copyright (C) 2017-2018 Robert Wlodarczyk
|
||||
# Copyright 2009-2017 Wander Lairson Costa
|
||||
# Copyright 2009-2021 PyUSB contributors
|
||||
#
|
||||
# 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
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are
|
||||
# met:
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
# 1. Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
#
|
||||
# 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.
|
||||
# 2. Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution.
|
||||
#
|
||||
# 3. Neither the name of the copyright holder nor the names of its
|
||||
# contributors may be used to endorse or promote products derived from
|
||||
# this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
from ctypes import *
|
||||
import errno
|
||||
import os
|
||||
import usb.backend
|
||||
import usb.util
|
||||
import sys
|
||||
from usb.core import USBError
|
||||
from usb.core import USBError, USBTimeoutError
|
||||
from usb._debug import methodtrace
|
||||
import usb._interop as _interop
|
||||
import logging
|
||||
@@ -30,6 +46,8 @@ __all__ = ['get_backend']
|
||||
|
||||
_logger = logging.getLogger('usb.backend.libusb0')
|
||||
|
||||
_USBFS_MAXDRIVERNAME = 255
|
||||
|
||||
# usb.h
|
||||
|
||||
if sys.platform.find('bsd') != -1 or sys.platform.find('mac') != -1 or \
|
||||
@@ -350,6 +368,14 @@ def _setup_prototypes(lib):
|
||||
|
||||
# linux only
|
||||
|
||||
# int usb_get_driver_np(usb_dev_handle *dev,
|
||||
# int interface,
|
||||
# char *name,
|
||||
# unsigned int namelen);
|
||||
if hasattr(lib, 'usb_get_driver_np'):
|
||||
lib.usb_get_driver_np.argtypes = \
|
||||
[_usb_dev_handle, c_int, c_char_p, c_uint]
|
||||
|
||||
# int usb_detach_kernel_driver_np(usb_dev_handle *dev, int interface);
|
||||
if hasattr(lib, 'usb_detach_kernel_driver_np'):
|
||||
lib.usb_detach_kernel_driver_np.argtypes = [_usb_dev_handle, c_int]
|
||||
@@ -415,6 +441,9 @@ def _check(ret):
|
||||
errmsg = os.strerror(-ret)
|
||||
else:
|
||||
return ret
|
||||
|
||||
if ret is not None and -ret == errno.ETIMEDOUT:
|
||||
raise USBTimeoutError(errmsg, ret, -ret)
|
||||
raise USBError(errmsg, ret)
|
||||
|
||||
def _has_iso_transfer():
|
||||
@@ -588,8 +617,35 @@ class _LibUSB(usb.backend.IBackend):
|
||||
def reset_device(self, dev_handle):
|
||||
_check(_lib.usb_reset(dev_handle))
|
||||
|
||||
@methodtrace(_logger)
|
||||
def is_kernel_driver_active(self, dev_handle, intf):
|
||||
if not hasattr(_lib, 'usb_get_driver_np'):
|
||||
raise NotImplementedError(self.is_kernel_driver_active.__name__)
|
||||
from errno import ENODATA
|
||||
buf = usb.util.create_buffer(_USBFS_MAXDRIVERNAME + 1)
|
||||
name, length = buf.buffer_info()
|
||||
length *= buf.itemsize
|
||||
# based on the implementation of libusb_kernel_driver_active
|
||||
# (see libusb/os/linux_usbfs.c @@ op_kernel_driver_active):
|
||||
# usb_get_driver_np fails with ENODATA when no kernel driver is bound,
|
||||
# and if 'usbfs' is bound that means that a userspace program is
|
||||
# controlling the device (e.g. using this very library)
|
||||
try:
|
||||
_check(_lib.usb_get_driver_np(
|
||||
dev_handle,
|
||||
intf,
|
||||
cast(name, c_char_p),
|
||||
length))
|
||||
return cast(name, c_char_p).value != b'usbfs'
|
||||
except USBError as err:
|
||||
if err.backend_error_code == -ENODATA:
|
||||
return False
|
||||
raise err
|
||||
|
||||
@methodtrace(_logger)
|
||||
def detach_kernel_driver(self, dev_handle, intf):
|
||||
if not hasattr(_lib, 'usb_detach_kernel_driver_np'):
|
||||
raise NotImplementedError(self.detach_kernel_driver.__name__)
|
||||
_check(_lib.usb_detach_kernel_driver_np(dev_handle, intf))
|
||||
|
||||
def __write(self, fn, dev_handle, ep, intf, data, timeout):
|
||||
|
||||
58
build/device/usb/backend/libusb1.py
Executable file → Normal file
58
build/device/usb/backend/libusb1.py
Executable file → Normal file
@@ -1,17 +1,32 @@
|
||||
# Copyright (C) 2009-2017 Wander Lairson Costa
|
||||
# Copyright (C) 2017-2018 Robert Wlodarczyk
|
||||
# Copyright 2009-2017 Wander Lairson Costa
|
||||
# Copyright 2009-2021 PyUSB contributors
|
||||
#
|
||||
# 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
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are
|
||||
# met:
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
# 1. Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
#
|
||||
# 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.
|
||||
# 2. Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution.
|
||||
#
|
||||
# 3. Neither the name of the copyright holder nor the names of its
|
||||
# contributors may be used to endorse or promote products derived from
|
||||
# this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
from ctypes import *
|
||||
import usb.util
|
||||
@@ -22,14 +37,14 @@ import usb._interop as _interop
|
||||
import usb._objfinalizer as _objfinalizer
|
||||
import errno
|
||||
import math
|
||||
from usb.core import USBError
|
||||
from usb.core import USBError, USBTimeoutError
|
||||
import usb.libloader
|
||||
|
||||
__author__ = 'Wander Lairson Costa'
|
||||
|
||||
__all__ = [
|
||||
'get_backend',
|
||||
'LIBUSB_SUCESS',
|
||||
'LIBUSB_SUCCESS',
|
||||
'LIBUSB_ERROR_IO',
|
||||
'LIBUSB_ERROR_INVALID_PARAM',
|
||||
'LIBUSB_ERROR_ACCESS',
|
||||
@@ -42,14 +57,14 @@ __all__ = [
|
||||
'LIBUSB_ERROR_INTERRUPTED',
|
||||
'LIBUSB_ERROR_NO_MEM',
|
||||
'LIBUSB_ERROR_NOT_SUPPORTED',
|
||||
'LIBUSB_ERROR_OTHER'
|
||||
'LIBUSB_ERROR_OTHER',
|
||||
'LIBUSB_TRANSFER_COMPLETED',
|
||||
'LIBUSB_TRANSFER_ERROR',
|
||||
'LIBUSB_TRANSFER_TIMED_OUT',
|
||||
'LIBUSB_TRANSFER_CANCELLED',
|
||||
'LIBUSB_TRANSFER_STALL',
|
||||
'LIBUSB_TRANSFER_NO_DEVICE',
|
||||
'LIBUSB_TRANSFER_OVERFLOW'
|
||||
'LIBUSB_TRANSFER_OVERFLOW',
|
||||
]
|
||||
|
||||
_logger = logging.getLogger('usb.backend.libusb1')
|
||||
@@ -256,6 +271,7 @@ def _get_iso_packet_list(transfer):
|
||||
return list_type.from_address(addressof(transfer.iso_packet_desc))
|
||||
|
||||
_lib = None
|
||||
_lib_object = None
|
||||
|
||||
def _load_library(find_library=None):
|
||||
# Windows backend uses stdcall calling convention
|
||||
@@ -582,6 +598,8 @@ def _check(ret):
|
||||
if ret < 0:
|
||||
if ret == LIBUSB_ERROR_NOT_SUPPORTED:
|
||||
raise NotImplementedError(_strerror(ret))
|
||||
elif ret == LIBUSB_ERROR_TIMEOUT:
|
||||
raise USBTimeoutError(_strerror(ret), ret, _libusb_errno[ret])
|
||||
else:
|
||||
raise USBError(_strerror(ret), ret, _libusb_errno[ret])
|
||||
|
||||
@@ -700,7 +718,8 @@ class _LibUSB(usb.backend.IBackend):
|
||||
|
||||
@methodtrace(_logger)
|
||||
def _finalize_object(self):
|
||||
self.lib.libusb_exit(self.ctx)
|
||||
if self.ctx:
|
||||
self.lib.libusb_exit(self.ctx)
|
||||
|
||||
|
||||
@methodtrace(_logger)
|
||||
@@ -936,12 +955,13 @@ class _LibUSB(usb.backend.IBackend):
|
||||
return transferred.value
|
||||
|
||||
def get_backend(find_library=None):
|
||||
global _lib
|
||||
global _lib, _lib_object
|
||||
try:
|
||||
if _lib is None:
|
||||
if _lib_object is None:
|
||||
_lib = _load_library(find_library=find_library)
|
||||
_setup_prototypes(_lib)
|
||||
return _LibUSB(_lib)
|
||||
_lib_object = _LibUSB(_lib)
|
||||
return _lib_object
|
||||
except usb.libloader.LibraryException:
|
||||
# exception already logged (if any)
|
||||
_logger.error('Error loading libusb 1.0 backend', exc_info=False)
|
||||
|
||||
48
build/device/usb/backend/openusb.py
Executable file → Normal file
48
build/device/usb/backend/openusb.py
Executable file → Normal file
@@ -1,17 +1,32 @@
|
||||
# Copyright (C) 2009-2017 Wander Lairson Costa
|
||||
# Copyright (C) 2017-2018 Robert Wlodarczyk
|
||||
# Copyright 2009-2017 Wander Lairson Costa
|
||||
# Copyright 2009-2021 PyUSB contributors
|
||||
#
|
||||
# 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
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are
|
||||
# met:
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
# 1. Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
#
|
||||
# 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.
|
||||
# 2. Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution.
|
||||
#
|
||||
# 3. Neither the name of the copyright holder nor the names of its
|
||||
# contributors may be used to endorse or promote products derived from
|
||||
# this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
from ctypes import *
|
||||
import ctypes.util
|
||||
@@ -24,7 +39,7 @@ import usb._interop as _interop
|
||||
import usb._objfinalizer as _objfinalizer
|
||||
import usb.util as util
|
||||
import usb.libloader
|
||||
from usb.core import USBError
|
||||
from usb.core import USBError, USBTimeoutError
|
||||
|
||||
__author__ = 'Wander Lairson Costa'
|
||||
|
||||
@@ -458,7 +473,7 @@ def _setup_prototypes(lib):
|
||||
POINTER(_openusb_intr_request)
|
||||
]
|
||||
|
||||
lib.openusb_bulk_xfer.restype = c_int32
|
||||
lib.openusb_intr_xfer.restype = c_int32
|
||||
|
||||
# int32_t openusb_bulk_xfer(openusb_dev_handle_t dev,
|
||||
# uint8_t ifc,
|
||||
@@ -491,7 +506,11 @@ def _check(ret):
|
||||
ret = ret.value
|
||||
|
||||
if ret != 0:
|
||||
raise USBError(_lib.openusb_strerror(ret), ret, _openusb_errno[ret])
|
||||
if ret == OPENUSB_IO_TIMEOUT:
|
||||
raise USBTimeoutError(_lib.openusb_strerror(ret), ret, _openusb_errno[ret])
|
||||
else:
|
||||
raise USBError(_lib.openusb_strerror(ret), ret, _openusb_errno[ret])
|
||||
|
||||
return ret
|
||||
|
||||
class _Context(_objfinalizer.AutoFinalizedObject):
|
||||
@@ -726,6 +745,7 @@ def get_backend(find_library=None):
|
||||
_lib = _load_library(find_library)
|
||||
_setup_prototypes(_lib)
|
||||
_ctx = _Context()
|
||||
_logger.warning('OpenUSB backend deprecated (https://github.com/pyusb/pyusb/issues/284)')
|
||||
return _OpenUSB()
|
||||
except usb.libloader.LibraryException:
|
||||
# exception already logged (if any)
|
||||
|
||||
44
build/device/usb/control.py
Executable file → Normal file
44
build/device/usb/control.py
Executable file → Normal file
@@ -1,17 +1,32 @@
|
||||
# Copyright (C) 2009-2017 Wander Lairson Costa
|
||||
# Copyright (C) 2017-2018 Robert Wlodarczyk
|
||||
# Copyright 2009-2017 Wander Lairson Costa
|
||||
# Copyright 2009-2021 PyUSB contributors
|
||||
#
|
||||
# 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
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are
|
||||
# met:
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
# 1. Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
#
|
||||
# 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.
|
||||
# 2. Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution.
|
||||
#
|
||||
# 3. Neither the name of the copyright holder nor the names of its
|
||||
# contributors may be used to endorse or promote products derived from
|
||||
# this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
r"""usb.control - USB standard control requests
|
||||
|
||||
@@ -152,13 +167,18 @@ def get_descriptor(dev, desc_size, desc_type, desc_index, wIndex = 0):
|
||||
util.CTRL_TYPE_STANDARD,
|
||||
util.CTRL_RECIPIENT_DEVICE)
|
||||
|
||||
return dev.ctrl_transfer(
|
||||
desc = dev.ctrl_transfer(
|
||||
bmRequestType = bmRequestType,
|
||||
bRequest = 0x06,
|
||||
wValue = wValue,
|
||||
wIndex = wIndex,
|
||||
data_or_wLength = desc_size)
|
||||
|
||||
if len(desc) < 2:
|
||||
raise USBError('Invalid descriptor')
|
||||
|
||||
return desc
|
||||
|
||||
def set_descriptor(dev, desc, desc_type, desc_index, wIndex = None):
|
||||
r"""Update an existing descriptor or add a new one.
|
||||
|
||||
|
||||
62
build/device/usb/core.py
Executable file → Normal file
62
build/device/usb/core.py
Executable file → Normal file
@@ -1,17 +1,32 @@
|
||||
# Copyright (C) 2009-2017 Wander Lairson Costa
|
||||
# Copyright (C) 2017-2018 Robert Wlodarczyk
|
||||
# Copyright 2009-2017 Wander Lairson Costa
|
||||
# Copyright 2009-2021 PyUSB contributors
|
||||
#
|
||||
# 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
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are
|
||||
# met:
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
# 1. Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
#
|
||||
# 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.
|
||||
# 2. Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution.
|
||||
#
|
||||
# 3. Neither the name of the copyright holder nor the names of its
|
||||
# contributors may be used to endorse or promote products derived from
|
||||
# this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
r"""usb.core - Core USB features.
|
||||
|
||||
@@ -27,8 +42,8 @@ show_devices() - a function to show the devices present.
|
||||
|
||||
__author__ = 'Wander Lairson Costa'
|
||||
|
||||
__all__ = [ 'Device', 'Configuration', 'Interface', 'Endpoint', 'find',
|
||||
'show_devices' ]
|
||||
__all__ = [ 'Device', 'Configuration', 'Interface', 'Endpoint', 'USBError',
|
||||
'USBTimeoutError', 'NoBackendError', 'find', 'show_devices' ]
|
||||
|
||||
import usb.util as util
|
||||
import copy
|
||||
@@ -45,10 +60,19 @@ _logger = logging.getLogger('usb.core')
|
||||
|
||||
_DEFAULT_TIMEOUT = 1000
|
||||
|
||||
_sentinel = object()
|
||||
|
||||
def _set_attr(input, output, fields):
|
||||
for f in fields:
|
||||
setattr(output, f, getattr(input, f))
|
||||
|
||||
def _try_getattr(object, name):
|
||||
try:
|
||||
attr = getattr(object, name)
|
||||
except :
|
||||
attr = _sentinel
|
||||
return attr
|
||||
|
||||
def _try_get_string(dev, index, langid = None, default_str_i0 = "",
|
||||
default_access_error = "Error Accessing String"):
|
||||
""" try to get a string, but return a string no matter what
|
||||
@@ -182,6 +206,8 @@ class _ResourceManager(object):
|
||||
i = util.find_descriptor(cfg, bInterfaceNumber=intf, bAlternateSetting=alt)
|
||||
else:
|
||||
i = util.find_descriptor(cfg, bInterfaceNumber=intf)
|
||||
if i is None:
|
||||
raise ValueError('No matching interface (' + str(intf) + ',' + str(alt) + ')')
|
||||
|
||||
self.managed_claim_interface(device, i)
|
||||
|
||||
@@ -270,6 +296,14 @@ class USBError(IOError):
|
||||
IOError.__init__(self, errno, strerror)
|
||||
self.backend_error_code = error_code
|
||||
|
||||
class USBTimeoutError(USBError):
|
||||
r"""Exception class for connection timeout errors.
|
||||
|
||||
Backends must raise this exception when a call on a USB connection returns
|
||||
a timeout error code.
|
||||
"""
|
||||
pass
|
||||
|
||||
class NoBackendError(ValueError):
|
||||
r"Exception class when a valid backend is not found."
|
||||
pass
|
||||
@@ -1247,7 +1281,7 @@ def find(find_all=False, backend = None, custom_match = None, **args):
|
||||
def device_iter(**kwargs):
|
||||
for dev in backend.enumerate_devices():
|
||||
d = Device(dev, backend)
|
||||
tests = (val == getattr(d, key) for key, val in kwargs.items())
|
||||
tests = (val == _try_getattr(d, key) for key, val in kwargs.items())
|
||||
if _interop._all(tests) and (custom_match is None or custom_match(d)):
|
||||
yield d
|
||||
|
||||
|
||||
37
build/device/usb/legacy.py
Executable file → Normal file
37
build/device/usb/legacy.py
Executable file → Normal file
@@ -1,17 +1,32 @@
|
||||
# Copyright (C) 2009-2017 Wander Lairson Costa
|
||||
# Copyright (C) 2017-2018 Robert Wlodarczyk
|
||||
# Copyright 2009-2017 Wander Lairson Costa
|
||||
# Copyright 2009-2021 PyUSB contributors
|
||||
#
|
||||
# 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
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are
|
||||
# met:
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
# 1. Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
#
|
||||
# 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.
|
||||
# 2. Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution.
|
||||
#
|
||||
# 3. Neither the name of the copyright holder nor the names of its
|
||||
# contributors may be used to endorse or promote products derived from
|
||||
# this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
import usb.core as core
|
||||
import usb.util as util
|
||||
|
||||
37
build/device/usb/libloader.py
Executable file → Normal file
37
build/device/usb/libloader.py
Executable file → Normal file
@@ -1,19 +1,34 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# Copyright (C) 2009-2017 Wander Lairson Costa
|
||||
# Copyright (C) 2017-2018 Robert Wlodarczyk
|
||||
# Copyright 2009-2017 Wander Lairson Costa
|
||||
# Copyright 2009-2021 PyUSB contributors
|
||||
#
|
||||
# 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
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are
|
||||
# met:
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
# 1. Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
#
|
||||
# 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.
|
||||
# 2. Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution.
|
||||
#
|
||||
# 3. Neither the name of the copyright holder nor the names of its
|
||||
# contributors may be used to endorse or promote products derived from
|
||||
# this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
import ctypes
|
||||
import ctypes.util
|
||||
|
||||
57
build/device/usb/util.py
Executable file → Normal file
57
build/device/usb/util.py
Executable file → Normal file
@@ -1,17 +1,32 @@
|
||||
# Copyright (C) 2009-2017 Wander Lairson Costa
|
||||
# Copyright (C) 2017-2018 Robert Wlodarczyk
|
||||
# Copyright 2009-2017 Wander Lairson Costa
|
||||
# Copyright 2009-2021 PyUSB contributors
|
||||
#
|
||||
# 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
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are
|
||||
# met:
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
# 1. Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
#
|
||||
# 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.
|
||||
# 2. Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution.
|
||||
#
|
||||
# 3. Neither the name of the copyright holder nor the names of its
|
||||
# contributors may be used to endorse or promote products derived from
|
||||
# this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
r"""usb.util - Utility functions.
|
||||
|
||||
@@ -286,32 +301,28 @@ def get_string(dev, index, langid = None):
|
||||
|
||||
The return value is the unicode string present in the descriptor, or None
|
||||
if the requested index was zero.
|
||||
|
||||
It is a ValueError to request a real string (index not zero), if: the
|
||||
device's langid tuple is empty, or with an explicit langid the device does
|
||||
not support.
|
||||
"""
|
||||
if 0 == index:
|
||||
return None
|
||||
|
||||
from usb.control import get_descriptor
|
||||
langids = dev.langids
|
||||
|
||||
if 0 == len(langids):
|
||||
raise ValueError("The device has no langid")
|
||||
if langid is None:
|
||||
langids = dev.langids
|
||||
if 0 == len(langids):
|
||||
raise ValueError("The device has no langid"
|
||||
" (permission issue, no string descriptors supported or device error)")
|
||||
langid = langids[0]
|
||||
elif langid not in langids:
|
||||
raise ValueError("The device does not support the specified langid")
|
||||
|
||||
buf = get_descriptor(
|
||||
dev,
|
||||
255, # Maximum descriptor size
|
||||
254, # maximum even length
|
||||
DESC_TYPE_STRING,
|
||||
index,
|
||||
langid
|
||||
)
|
||||
blen = buf[0] & 0xfe # should be even, ignore any trailing byte (see #154)
|
||||
if hexversion >= 0x03020000:
|
||||
return buf[2:buf[0]].tobytes().decode('utf-16-le')
|
||||
return buf[2:blen].tobytes().decode('utf-16-le')
|
||||
else:
|
||||
return buf[2:buf[0]].tostring().decode('utf-16-le')
|
||||
return buf[2:blen].tostring().decode('utf-16-le')
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
PHONY: %_run
|
||||
t %_run: $(BUILD_DIR)/%.$(EXE)
|
||||
%_run: $(BUILD_DIR)/%.$(EXE)
|
||||
$(call rule_label,EXE)
|
||||
$(Q) ./$^
|
||||
|
||||
Reference in New Issue
Block a user