Commit 5af9fae8 authored by rockot@chromium.org's avatar rockot@chromium.org

WebUSB bindings part 6

This connects USBDevice interface methods to the embedder.

BUG=492204
R=reillyg@chromium.org

Review URL: https://codereview.chromium.org/1315683002

git-svn-id: svn://svn.chromium.org/blink/trunk@201107 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent 64917385
...@@ -5535,17 +5535,37 @@ interface USBDevice ...@@ -5535,17 +5535,37 @@ interface USBDevice
getter usbVersionMinor getter usbVersionMinor
getter usbVersionSubminor getter usbVersionSubminor
getter vendorId getter vendorId
method claimInterface
method clearHalt
method close
method constructor method constructor
method controlTransferIn
method controlTransferOut
method open
method releaseInterface
method reset
method setConfiguration
method setInterface
method transferIn
method transferOut
interface USBEndpoint interface USBEndpoint
getter direction getter direction
getter endpointNumber getter endpointNumber
getter packetSize getter packetSize
getter type getter type
method constructor method constructor
interface USBInTransferResult
getter data
getter status
method constructor
interface USBInterface interface USBInterface
getter alternates getter alternates
getter interfaceNumber getter interfaceNumber
method constructor method constructor
interface USBOutTransferResult
getter bytesWritten
getter status
method constructor
interface VTTCue interface VTTCue
getter align getter align
getter line getter line
......
...@@ -297,7 +297,9 @@ ...@@ -297,7 +297,9 @@
'webusb/USBConfiguration.idl', 'webusb/USBConfiguration.idl',
'webusb/USBConnectionEvent.idl', 'webusb/USBConnectionEvent.idl',
'webusb/USBDevice.idl', 'webusb/USBDevice.idl',
'webusb/USBInTransferResult.idl',
'webusb/USBInterface.idl', 'webusb/USBInterface.idl',
'webusb/USBOutTransferResult.idl',
], ],
# 'partial interface' or target (right side of) 'implements' # 'partial interface' or target (right side of) 'implements'
'modules_dependency_idl_files': [ 'modules_dependency_idl_files': [
...@@ -478,8 +480,9 @@ ...@@ -478,8 +480,9 @@
'webmidi/MIDIOptions.idl', 'webmidi/MIDIOptions.idl',
'websockets/CloseEventInit.idl', 'websockets/CloseEventInit.idl',
'webusb/USBConnectionEventInit.idl', 'webusb/USBConnectionEventInit.idl',
'webusb/USBDeviceRequestOptions.idl', 'webusb/USBControlTransferParameters.idl',
'webusb/USBDeviceFilter.idl', 'webusb/USBDeviceFilter.idl',
'webusb/USBDeviceRequestOptions.idl',
], ],
'generated_modules_files': [ 'generated_modules_files': [
# .cpp files from make_modules_generated actions. # .cpp files from make_modules_generated actions.
...@@ -621,6 +624,8 @@ ...@@ -621,6 +624,8 @@
'<(blink_modules_output_dir)/websockets/CloseEventInit.h', '<(blink_modules_output_dir)/websockets/CloseEventInit.h',
'<(blink_modules_output_dir)/webusb/USBConnectionEventInit.cpp', '<(blink_modules_output_dir)/webusb/USBConnectionEventInit.cpp',
'<(blink_modules_output_dir)/webusb/USBConnectionEventInit.h', '<(blink_modules_output_dir)/webusb/USBConnectionEventInit.h',
'<(blink_modules_output_dir)/webusb/USBControlTransferParameters.cpp',
'<(blink_modules_output_dir)/webusb/USBControlTransferParameters.h',
'<(blink_modules_output_dir)/webusb/USBDeviceFilter.cpp', '<(blink_modules_output_dir)/webusb/USBDeviceFilter.cpp',
'<(blink_modules_output_dir)/webusb/USBDeviceFilter.h', '<(blink_modules_output_dir)/webusb/USBDeviceFilter.h',
'<(blink_modules_output_dir)/webusb/USBDeviceRequestOptions.cpp', '<(blink_modules_output_dir)/webusb/USBDeviceRequestOptions.cpp',
...@@ -1731,8 +1736,10 @@ ...@@ -1731,8 +1736,10 @@
'webusb/USBEndpoint.h', 'webusb/USBEndpoint.h',
'webusb/USBError.cpp', 'webusb/USBError.cpp',
'webusb/USBError.h', 'webusb/USBError.h',
'webusb/USBInTransferResult.h',
'webusb/USBInterface.cpp', 'webusb/USBInterface.cpp',
'webusb/USBInterface.h', 'webusb/USBInterface.h',
'webusb/USBOutTransferResult.h',
], ],
# 'partial interface' or target (right side of) 'implements' # 'partial interface' or target (right side of) 'implements'
'modules_testing_dependency_idl_files' : [ 'modules_testing_dependency_idl_files' : [
......
// 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.
enum USBRequestType {
"standard",
"class",
"vendor"
};
enum USBRecipient {
"device",
"interface",
"endpoint",
"other",
};
dictionary USBControlTransferParameters {
required USBRequestType requestType;
required USBRecipient recipient;
required octet request;
required unsigned short value;
required unsigned short index;
};
...@@ -5,7 +5,9 @@ ...@@ -5,7 +5,9 @@
#ifndef USBDevice_h #ifndef USBDevice_h
#define USBDevice_h #define USBDevice_h
#include "bindings/core/v8/ScriptPromise.h"
#include "bindings/core/v8/ScriptWrappable.h" #include "bindings/core/v8/ScriptWrappable.h"
#include "bindings/modules/v8/UnionTypesModules.h"
#include "platform/heap/Handle.h" #include "platform/heap/Handle.h"
#include "public/platform/modules/webusb/WebUSBDevice.h" #include "public/platform/modules/webusb/WebUSBDevice.h"
#include "public/platform/modules/webusb/WebUSBDeviceInfo.h" #include "public/platform/modules/webusb/WebUSBDeviceInfo.h"
...@@ -13,7 +15,9 @@ ...@@ -13,7 +15,9 @@
namespace blink { namespace blink {
class ScriptPromiseResolver; class ScriptPromiseResolver;
class ScriptState;
class USBConfiguration; class USBConfiguration;
class USBControlTransferParameters;
class USBDevice class USBDevice
: public GarbageCollectedFinalized<USBDevice> : public GarbageCollectedFinalized<USBDevice>
...@@ -58,6 +62,20 @@ public: ...@@ -58,6 +62,20 @@ public:
String serialNumber() const { return info().serialNumber; } String serialNumber() const { return info().serialNumber; }
HeapVector<Member<USBConfiguration>> configurations() const; HeapVector<Member<USBConfiguration>> configurations() const;
ScriptPromise open(ScriptState*);
ScriptPromise close(ScriptState*);
ScriptPromise setConfiguration(ScriptState*, uint8_t configurationValue);
ScriptPromise claimInterface(ScriptState*, uint8_t interfaceNumber);
ScriptPromise releaseInterface(ScriptState*, uint8_t interfaceNumber);
ScriptPromise setInterface(ScriptState*, uint8_t interfaceNumber, uint8_t alternateSetting);
ScriptPromise controlTransferIn(ScriptState*, const USBControlTransferParameters& setup, unsigned length);
ScriptPromise controlTransferOut(ScriptState*, const USBControlTransferParameters& setup);
ScriptPromise controlTransferOut(ScriptState*, const USBControlTransferParameters& setup, const ArrayBufferOrArrayBufferView& data);
ScriptPromise clearHalt(ScriptState*, uint8_t endpointNumber);
ScriptPromise transferIn(ScriptState*, uint8_t endpointNumber, unsigned length);
ScriptPromise transferOut(ScriptState*, uint8_t endpointNumber, const ArrayBufferOrArrayBufferView& data);
ScriptPromise reset(ScriptState*);
DEFINE_INLINE_TRACE() { } DEFINE_INLINE_TRACE() { }
private: private:
......
...@@ -2,6 +2,14 @@ ...@@ -2,6 +2,14 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
// http://reillyeon.github.io/webusb/#idl-def-usbtransferstatus
enum USBTransferStatus {
"ok",
"stall",
"babble"
};
// http://reillyeon.github.io/webusb/#device-usage // http://reillyeon.github.io/webusb/#device-usage
[ [
...@@ -24,4 +32,17 @@ ...@@ -24,4 +32,17 @@
readonly attribute DOMString? productName; readonly attribute DOMString? productName;
readonly attribute DOMString? serialNumber; readonly attribute DOMString? serialNumber;
readonly attribute sequence<USBConfiguration> configurations; readonly attribute sequence<USBConfiguration> configurations;
[CallWith=ScriptState] Promise<void> open();
[CallWith=ScriptState] Promise<void> close();
[CallWith=ScriptState] Promise<void> setConfiguration(octet configurationValue);
[CallWith=ScriptState] Promise<void> claimInterface(octet interfaceNumber);
[CallWith=ScriptState] Promise<void> releaseInterface(octet interfaceNumber);
[CallWith=ScriptState] Promise<void> setInterface(octet interfaceNumber, octet alternateSetting);
[CallWith=ScriptState] Promise<USBInTransferResult> controlTransferIn(USBControlTransferParameters setup, unsigned short length);
[CallWith=ScriptState] Promise<USBOutTransferResult> controlTransferOut(USBControlTransferParameters setup, optional BufferSource data);
[CallWith=ScriptState] Promise<void> clearHalt(octet endpointNumber);
[CallWith=ScriptState] Promise<USBInTransferResult> transferIn(octet endpointNumber, unsigned long length);
[CallWith=ScriptState] Promise<USBOutTransferResult> transferOut(octet endpointNumber, BufferSource data);
[CallWith=ScriptState] Promise<void> reset();
}; };
// 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.
#ifndef USBInTransferResult_h
#define USBInTransferResult_h
#include "bindings/core/v8/ScriptWrappable.h"
#include "core/dom/DOMArrayBuffer.h"
#include "platform/heap/Handle.h"
#include "public/platform/modules/webusb/WebUSBTransferInfo.h"
#include "wtf/text/WTFString.h"
namespace blink {
class USBInTransferResult final
: public GarbageCollectedFinalized<USBInTransferResult>
, public ScriptWrappable {
DEFINE_WRAPPERTYPEINFO();
public:
static USBInTransferResult* create(const String& status, const WebVector<uint8_t> data)
{
return new USBInTransferResult(status, data);
}
USBInTransferResult(const String& status, const WebVector<uint8_t> data)
: m_status(status)
, m_data(DOMArrayBuffer::create(data.data(), data.size()))
{
}
virtual ~USBInTransferResult() { }
String status() const { return m_status; }
PassRefPtr<DOMArrayBuffer> data() const { return m_data; }
DEFINE_INLINE_TRACE() { }
private:
const String m_status;
const RefPtr<DOMArrayBuffer> m_data;
};
} // namespace blink
#endif // USBInTransferResult_h
// 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.
// http://reillyeon.github.io/webusb/#idl-def-usbintransferresult
[
GarbageCollected,
RuntimeEnabled=WebUSB,
] interface USBInTransferResult {
readonly attribute ArrayBuffer data;
readonly attribute USBTransferStatus status;
};
// 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.
#ifndef USBOutTransferResult_h
#define USBOutTransferResult_h
#include "bindings/core/v8/ScriptWrappable.h"
#include "core/dom/DOMArrayBuffer.h"
#include "platform/heap/Handle.h"
#include "public/platform/modules/webusb/WebUSBTransferInfo.h"
#include "wtf/text/WTFString.h"
namespace blink {
class USBOutTransferResult final
: public GarbageCollectedFinalized<USBOutTransferResult>
, public ScriptWrappable {
DEFINE_WRAPPERTYPEINFO();
public:
static USBOutTransferResult* create(const String& status, unsigned bytesWritten)
{
return new USBOutTransferResult(status, bytesWritten);
}
USBOutTransferResult(const String& status, unsigned bytesWritten)
: m_status(status)
, m_bytesWritten(bytesWritten)
{
}
virtual ~USBOutTransferResult() { }
String status() const { return m_status; }
unsigned bytesWritten() const { return m_bytesWritten; }
DEFINE_INLINE_TRACE() { }
private:
const String m_status;
const unsigned m_bytesWritten;
};
} // namespace blink
#endif // USBOutTransferResult_h
// 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.
// http://reillyeon.github.io/webusb/#idl-def-usbouttransferresult
[
GarbageCollected,
RuntimeEnabled=WebUSB,
] interface USBOutTransferResult {
readonly attribute unsigned long bytesWritten;
readonly attribute USBTransferStatus status;
};
...@@ -23,9 +23,13 @@ using WebUSBDeviceReleaseInterfaceCallbacks = WebCallbacks<void, const WebUSBErr ...@@ -23,9 +23,13 @@ using WebUSBDeviceReleaseInterfaceCallbacks = WebCallbacks<void, const WebUSBErr
using WebUSBDeviceResetCallbacks = WebCallbacks<void, const WebUSBError&>; using WebUSBDeviceResetCallbacks = WebCallbacks<void, const WebUSBError&>;
using WebUSBDeviceSetInterfaceAlternateSettingCallbacks = WebCallbacks<void, const WebUSBError&>; using WebUSBDeviceSetInterfaceAlternateSettingCallbacks = WebCallbacks<void, const WebUSBError&>;
using WebUSBDeviceClearHaltCallbacks = WebCallbacks<void, const WebUSBError&>; using WebUSBDeviceClearHaltCallbacks = WebCallbacks<void, const WebUSBError&>;
using WebUSBDeviceControlTransferCallbacks = WebCallbacks<WebPassOwnPtr<WebUSBTransferInfo>, const WebUSBError&>; using WebUSBDeviceTransferCallbacks = WebCallbacks<WebPassOwnPtr<WebUSBTransferInfo>, const WebUSBError&>;
using WebUSBDeviceBulkTransferCallbacks = WebCallbacks<WebPassOwnPtr<WebUSBTransferInfo>, const WebUSBError&>;
using WebUSBDeviceInterruptTransferCallbacks = WebCallbacks<WebPassOwnPtr<WebUSBTransferInfo>, const WebUSBError&>; // TODO(rockot): Eliminate these aliases once they're no longer used outside of
// Blink code.
using WebUSBDeviceControlTransferCallbacks = WebUSBDeviceTransferCallbacks;
using WebUSBDeviceBulkTransferCallbacks = WebUSBDeviceTransferCallbacks;
using WebUSBDeviceInterruptTransferCallbacks = WebUSBDeviceTransferCallbacks;
class WebUSBDevice { class WebUSBDevice {
public: public:
...@@ -40,7 +44,7 @@ public: ...@@ -40,7 +44,7 @@ public:
Vendor, Vendor,
}; };
enum RequestRecipient { enum class RequestRecipient {
Device, Device,
Interface, Interface,
Endpoint, Endpoint,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment