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