diff options
Diffstat (limited to 'device/usb/usb_device_handle.h')
-rw-r--r-- | device/usb/usb_device_handle.h | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/device/usb/usb_device_handle.h b/device/usb/usb_device_handle.h new file mode 100644 index 0000000..be7de09 --- /dev/null +++ b/device/usb/usb_device_handle.h @@ -0,0 +1,110 @@ +// Copyright 2014 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 DEVICE_USB_USB_DEVICE_HANDLE_H_ +#define DEVICE_USB_USB_DEVICE_HANDLE_H_ + +#include <map> +#include <vector> + +#include "base/callback.h" +#include "base/memory/ref_counted.h" +#include "base/strings/string16.h" +#include "base/threading/thread_checker.h" +#include "device/usb/usb_interface.h" +#include "net/base/io_buffer.h" + +namespace device { + +class UsbDevice; + +enum UsbTransferStatus { + USB_TRANSFER_COMPLETED = 0, + USB_TRANSFER_ERROR, + USB_TRANSFER_TIMEOUT, + USB_TRANSFER_CANCELLED, + USB_TRANSFER_STALLED, + USB_TRANSFER_DISCONNECT, + USB_TRANSFER_OVERFLOW, + USB_TRANSFER_LENGTH_SHORT, +}; + +typedef base::Callback< + void(UsbTransferStatus, scoped_refptr<net::IOBuffer>, size_t)> + UsbTransferCallback; + +// UsbDeviceHandle class provides basic I/O related functionalities. +class UsbDeviceHandle : public base::RefCountedThreadSafe<UsbDeviceHandle> { + public: + enum TransferRequestType { STANDARD, CLASS, VENDOR, RESERVED }; + enum TransferRecipient { DEVICE, INTERFACE, ENDPOINT, OTHER }; + + virtual scoped_refptr<UsbDevice> GetDevice() const = 0; + + // Notifies UsbDevice to drop the reference of this object; cancels all the + // flying transfers. + // It is possible that the object has no other reference after this call. So + // if it is called using a raw pointer, it could be invalidated. + // The platform device handle will be closed when UsbDeviceHandle destructs. + virtual void Close() = 0; + + // Device manipulation operations. These methods are blocking and must be + // called on FILE thread. + virtual bool ClaimInterface(const int interface_number) = 0; + virtual bool ReleaseInterface(const int interface_number) = 0; + virtual bool SetInterfaceAlternateSetting(const int interface_number, + const int alternate_setting) = 0; + virtual bool ResetDevice() = 0; + virtual bool GetManufacturer(base::string16* manufacturer) = 0; + virtual bool GetProduct(base::string16* product) = 0; + virtual bool GetSerial(base::string16* serial) = 0; + + // Async IO. Can be called on any thread. + virtual void ControlTransfer(const UsbEndpointDirection direction, + const TransferRequestType request_type, + const TransferRecipient recipient, + const uint8 request, + const uint16 value, + const uint16 index, + net::IOBuffer* buffer, + const size_t length, + const unsigned int timeout, + const UsbTransferCallback& callback) = 0; + + virtual void BulkTransfer(const UsbEndpointDirection direction, + const uint8 endpoint, + net::IOBuffer* buffer, + const size_t length, + const unsigned int timeout, + const UsbTransferCallback& callback) = 0; + + virtual void InterruptTransfer(const UsbEndpointDirection direction, + const uint8 endpoint, + net::IOBuffer* buffer, + const size_t length, + const unsigned int timeout, + const UsbTransferCallback& callback) = 0; + + virtual void IsochronousTransfer(const UsbEndpointDirection direction, + const uint8 endpoint, + net::IOBuffer* buffer, + const size_t length, + const unsigned int packets, + const unsigned int packet_length, + const unsigned int timeout, + const UsbTransferCallback& callback) = 0; + + protected: + friend class base::RefCountedThreadSafe<UsbDeviceHandle>; + + UsbDeviceHandle() {}; + + virtual ~UsbDeviceHandle() {}; + + DISALLOW_COPY_AND_ASSIGN(UsbDeviceHandle); +}; + +} // namespace device + +#endif // DEVICE_USB_USB_DEVICE_HANDLE_H_ |