1010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#ifndef EXTENSIONS_BROWSER_API_USB_USB_API_H_
6010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define EXTENSIONS_BROWSER_API_USB_USB_API_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
9a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch#include <vector>
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/ref_counted.h"
1258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "base/memory/scoped_ptr.h"
131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "device/usb/usb_device.h"
141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "device/usb/usb_device_filter.h"
151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "device/usb/usb_device_handle.h"
16a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "extensions/browser/api/api_resource_manager.h"
17a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "extensions/browser/api/async_api_function.h"
18010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "extensions/common/api/usb.h"
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/io_buffer.h"
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace extensions {
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class UsbDeviceResource;
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class UsbAsyncApiFunction : public AsyncApiFunction {
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  UsbAsyncApiFunction();
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~UsbAsyncApiFunction();
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool PrePrepare() OVERRIDE;
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool Respond() OVERRIDE;
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  static void CreateDeviceFilter(
361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      const extensions::core_api::usb::DeviceFilter& input,
371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      device::UsbDeviceFilter* output);
381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  bool HasDevicePermission(scoped_refptr<device::UsbDevice> device);
401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  scoped_refptr<device::UsbDevice> GetDeviceOrCompleteWithError(
42010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      const extensions::core_api::usb::Device& input_device);
4358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  scoped_refptr<device::UsbDeviceHandle> GetDeviceHandleOrCompleteWithError(
451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      const extensions::core_api::usb::ConnectionHandle& input_device_handle);
4658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void RemoveUsbDeviceResource(int api_resource_id);
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void CompleteWithError(const std::string& error);
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ApiResourceManager<UsbDeviceResource>* manager_;
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class UsbAsyncApiTransferFunction : public UsbAsyncApiFunction {
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  UsbAsyncApiTransferFunction();
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~UsbAsyncApiTransferFunction();
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
59010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  bool ConvertDirectionSafely(const extensions::core_api::usb::Direction& input,
601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                              device::UsbEndpointDirection* output);
610529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  bool ConvertRequestTypeSafely(
62010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      const extensions::core_api::usb::RequestType& input,
631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      device::UsbDeviceHandle::TransferRequestType* output);
640529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  bool ConvertRecipientSafely(
65010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      const extensions::core_api::usb::Recipient& input,
661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      device::UsbDeviceHandle::TransferRecipient* output);
670529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  void OnCompleted(device::UsbTransferStatus status,
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   scoped_refptr<net::IOBuffer> data,
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   size_t length);
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class UsbFindDevicesFunction : public UsbAsyncApiFunction {
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DECLARE_EXTENSION_FUNCTION("usb.findDevices", USB_FINDDEVICES)
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  UsbFindDevicesFunction();
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~UsbFindDevicesFunction();
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool Prepare() OVERRIDE;
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void AsyncWorkStart() OVERRIDE;
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
860529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  void OpenDevices(
871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      scoped_ptr<std::vector<scoped_refptr<device::UsbDevice> > > devices);
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  std::vector<scoped_refptr<device::UsbDeviceHandle> > device_handles_;
90010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  scoped_ptr<extensions::core_api::usb::FindDevices::Params> parameters_;
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
9290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
9358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)class UsbGetDevicesFunction : public UsbAsyncApiFunction {
9458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) public:
9558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  DECLARE_EXTENSION_FUNCTION("usb.getDevices", USB_GETDEVICES)
9658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
9758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  UsbGetDevicesFunction();
9858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
9958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  virtual bool Prepare() OVERRIDE;
10058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  virtual void AsyncWorkStart() OVERRIDE;
10158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
10258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) protected:
10358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  virtual ~UsbGetDevicesFunction();
10458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
10558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) private:
10658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  void EnumerationCompletedFileThread(
1071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      scoped_ptr<std::vector<scoped_refptr<device::UsbDevice> > > devices);
10858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
109010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  scoped_ptr<extensions::core_api::usb::GetDevices::Params> parameters_;
11058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)};
11158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
11258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)class UsbRequestAccessFunction : public UsbAsyncApiFunction {
11358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) public:
11458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  DECLARE_EXTENSION_FUNCTION("usb.requestAccess", USB_REQUESTACCESS)
11558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
11658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  UsbRequestAccessFunction();
11758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
11858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  virtual bool Prepare() OVERRIDE;
11958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  virtual void AsyncWorkStart() OVERRIDE;
12058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
12158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) protected:
12258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  virtual ~UsbRequestAccessFunction();
12358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
12458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  void OnCompleted(bool success);
12558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
12658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) private:
127010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  scoped_ptr<extensions::core_api::usb::RequestAccess::Params> parameters_;
12858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)};
12958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
13058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)class UsbOpenDeviceFunction : public UsbAsyncApiFunction {
13158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) public:
13258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  DECLARE_EXTENSION_FUNCTION("usb.openDevice", USB_OPENDEVICE)
13358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
13458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  UsbOpenDeviceFunction();
13558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
13658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  virtual bool Prepare() OVERRIDE;
13758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  virtual void AsyncWorkStart() OVERRIDE;
13858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
13958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) protected:
14058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  virtual ~UsbOpenDeviceFunction();
14158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
14258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) private:
1431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  scoped_refptr<device::UsbDeviceHandle> handle_;
144010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  scoped_ptr<extensions::core_api::usb::OpenDevice::Params> parameters_;
14558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)};
14658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
1471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass UsbGetConfigurationFunction : public UsbAsyncApiFunction {
1481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public:
1491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DECLARE_EXTENSION_FUNCTION("usb.getConfiguration", USB_GETCONFIGURATION)
1501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  UsbGetConfigurationFunction();
1521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci protected:
1541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual ~UsbGetConfigurationFunction();
1551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual bool Prepare() OVERRIDE;
1571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void AsyncWorkStart() OVERRIDE;
1581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private:
1601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  scoped_ptr<extensions::core_api::usb::GetConfiguration::Params> parameters_;
1611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci};
1621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
16390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)class UsbListInterfacesFunction : public UsbAsyncApiFunction {
16490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) public:
16590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  DECLARE_EXTENSION_FUNCTION("usb.listInterfaces", USB_LISTINTERFACES)
16690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
16790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  UsbListInterfacesFunction();
16890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
16990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) protected:
17090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  virtual ~UsbListInterfacesFunction();
17190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
17290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  virtual bool Prepare() OVERRIDE;
17390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  virtual void AsyncWorkStart() OVERRIDE;
17490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
17590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) private:
176010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  scoped_ptr<extensions::core_api::usb::ListInterfaces::Params> parameters_;
17790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)};
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class UsbCloseDeviceFunction : public UsbAsyncApiFunction {
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DECLARE_EXTENSION_FUNCTION("usb.closeDevice", USB_CLOSEDEVICE)
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  UsbCloseDeviceFunction();
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~UsbCloseDeviceFunction();
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool Prepare() OVERRIDE;
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void AsyncWorkStart() OVERRIDE;
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
192010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  scoped_ptr<extensions::core_api::usb::CloseDevice::Params> parameters_;
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class UsbClaimInterfaceFunction : public UsbAsyncApiFunction {
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DECLARE_EXTENSION_FUNCTION("usb.claimInterface", USB_CLAIMINTERFACE)
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  UsbClaimInterfaceFunction();
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~UsbClaimInterfaceFunction();
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool Prepare() OVERRIDE;
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void AsyncWorkStart() OVERRIDE;
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
208010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  scoped_ptr<extensions::core_api::usb::ClaimInterface::Params> parameters_;
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class UsbReleaseInterfaceFunction : public UsbAsyncApiFunction {
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DECLARE_EXTENSION_FUNCTION("usb.releaseInterface", USB_RELEASEINTERFACE)
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  UsbReleaseInterfaceFunction();
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~UsbReleaseInterfaceFunction();
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool Prepare() OVERRIDE;
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void AsyncWorkStart() OVERRIDE;
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
224010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  scoped_ptr<extensions::core_api::usb::ReleaseInterface::Params> parameters_;
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class UsbSetInterfaceAlternateSettingFunction : public UsbAsyncApiFunction {
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DECLARE_EXTENSION_FUNCTION("usb.setInterfaceAlternateSetting",
2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                             USB_SETINTERFACEALTERNATESETTING)
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  UsbSetInterfaceAlternateSettingFunction();
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~UsbSetInterfaceAlternateSettingFunction();
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool Prepare() OVERRIDE;
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void AsyncWorkStart() OVERRIDE;
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
240010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  scoped_ptr<extensions::core_api::usb::SetInterfaceAlternateSetting::Params>
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      parameters_;
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class UsbControlTransferFunction : public UsbAsyncApiTransferFunction {
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
2462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DECLARE_EXTENSION_FUNCTION("usb.controlTransfer", USB_CONTROLTRANSFER)
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  UsbControlTransferFunction();
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~UsbControlTransferFunction();
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool Prepare() OVERRIDE;
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void AsyncWorkStart() OVERRIDE;
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
257010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  scoped_ptr<extensions::core_api::usb::ControlTransfer::Params> parameters_;
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class UsbBulkTransferFunction : public UsbAsyncApiTransferFunction {
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
2622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DECLARE_EXTENSION_FUNCTION("usb.bulkTransfer", USB_BULKTRANSFER)
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  UsbBulkTransferFunction();
2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~UsbBulkTransferFunction();
2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool Prepare() OVERRIDE;
2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void AsyncWorkStart() OVERRIDE;
2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
273010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  scoped_ptr<extensions::core_api::usb::BulkTransfer::Params> parameters_;
2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class UsbInterruptTransferFunction : public UsbAsyncApiTransferFunction {
2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
2782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DECLARE_EXTENSION_FUNCTION("usb.interruptTransfer", USB_INTERRUPTTRANSFER)
2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  UsbInterruptTransferFunction();
2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~UsbInterruptTransferFunction();
2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool Prepare() OVERRIDE;
2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void AsyncWorkStart() OVERRIDE;
2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
289010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  scoped_ptr<extensions::core_api::usb::InterruptTransfer::Params> parameters_;
2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class UsbIsochronousTransferFunction : public UsbAsyncApiTransferFunction {
2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
2942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DECLARE_EXTENSION_FUNCTION("usb.isochronousTransfer", USB_ISOCHRONOUSTRANSFER)
2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  UsbIsochronousTransferFunction();
2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~UsbIsochronousTransferFunction();
3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool Prepare() OVERRIDE;
3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void AsyncWorkStart() OVERRIDE;
3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
305010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  scoped_ptr<extensions::core_api::usb::IsochronousTransfer::Params>
306010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      parameters_;
3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
309c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class UsbResetDeviceFunction : public UsbAsyncApiFunction {
310c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public:
311c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  DECLARE_EXTENSION_FUNCTION("usb.resetDevice", USB_RESETDEVICE)
312c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
313c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  UsbResetDeviceFunction();
314c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
315c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) protected:
316c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual ~UsbResetDeviceFunction();
317c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
318c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual bool Prepare() OVERRIDE;
319c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual void AsyncWorkStart() OVERRIDE;
320c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
321c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private:
322010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  scoped_ptr<extensions::core_api::usb::ResetDevice::Params> parameters_;
323c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)};
3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace extensions
3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
326010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif  // EXTENSIONS_BROWSER_API_USB_USB_API_H_
327