Index: Source/modules/webusb/USBEndpoint.cpp |
diff --git a/Source/modules/webusb/USBEndpoint.cpp b/Source/modules/webusb/USBEndpoint.cpp |
new file mode 100644 |
index 0000000000000000000000000000000000000000..07ba40fea916cae1f92147a6e0795f6071ac79c6 |
--- /dev/null |
+++ b/Source/modules/webusb/USBEndpoint.cpp |
@@ -0,0 +1,99 @@ |
+// Copyright 2015 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "config.h" |
+#include "modules/webusb/USBEndpoint.h" |
+ |
+#include "bindings/core/v8/ExceptionState.h" |
+#include "modules/webusb/USBAlternateInterface.h" |
+#include "public/platform/modules/webusb/WebUSBDevice.h" |
+ |
+namespace blink { |
+ |
+namespace { |
+ |
+String convertDirection(const WebUSBDevice::TransferDirection& direction) |
+{ |
+ switch (direction) { |
+ case WebUSBDevice::TransferDirectionIn: |
+ return "in"; |
+ case WebUSBDevice::TransferDirectionOut: |
+ return "out"; |
+ default: |
+ ASSERT_NOT_REACHED(); |
+ return ""; |
+ } |
+} |
+ |
+String convertType(const WebUSBDeviceInfo::Endpoint::Type& type) |
+{ |
+ switch (type) { |
+ case WebUSBDeviceInfo::Endpoint::TypeBulk: |
+ return "bulk"; |
+ case WebUSBDeviceInfo::Endpoint::TypeInterrupt: |
+ return "interrupt"; |
+ case WebUSBDeviceInfo::Endpoint::TypeIsochronous: |
+ return "isochronous"; |
+ default: |
+ ASSERT_NOT_REACHED(); |
+ return ""; |
+ } |
+} |
+ |
+} // namespace |
+ |
+// static |
+USBEndpoint* USBEndpoint::create(const USBAlternateInterface* alternate, size_t endpointIndex) |
+{ |
+ return new USBEndpoint(alternate, endpointIndex); |
+} |
+ |
+// static |
+USBEndpoint* USBEndpoint::create(const USBAlternateInterface* alternate, size_t endpointIndex, ExceptionState& exceptionState) |
+{ |
+ if (endpointIndex < alternate->info().endpoints.size()) |
+ return new USBEndpoint(alternate, endpointIndex); |
+ exceptionState.throwRangeError("Invalid endpoint index."); |
+ return nullptr; |
+} |
+ |
+USBEndpoint::USBEndpoint(const USBAlternateInterface* alternate, size_t endpointIndex) |
+ : m_alternate(alternate) |
+ , m_endpointIndex(endpointIndex) |
+{ |
+} |
+ |
+const WebUSBDeviceInfo::Endpoint& USBEndpoint::info() const |
+{ |
+ const WebUSBDeviceInfo::AlternateInterface& alternateInfo = m_alternate->info(); |
+ ASSERT(m_endpointIndex < alternateInfo.endpoints.size()); |
+ return alternateInfo.endpoints[m_endpointIndex]; |
+} |
+ |
+uint8_t USBEndpoint::endpointNumber() const |
+{ |
+ return info().endpointNumber; |
+} |
+ |
+String USBEndpoint::direction() const |
+{ |
+ return convertDirection(info().direction); |
+} |
+ |
+String USBEndpoint::type() const |
+{ |
+ return convertType(info().type); |
+} |
+ |
+unsigned USBEndpoint::packetSize() const |
+{ |
+ return info().packetSize; |
+} |
+ |
+DEFINE_TRACE(USBEndpoint) |
+{ |
+ visitor->trace(m_alternate); |
+} |
+ |
+} // namespace blink |