1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef CHROME_BROWSER_EXTENSIONS_API_USB_USB_API_H_
6 #define CHROME_BROWSER_EXTENSIONS_API_USB_USB_API_H_
11 #include "base/memory/ref_counted.h"
12 #include "base/memory/scoped_ptr.h"
13 #include "chrome/browser/usb/usb_device.h"
14 #include "chrome/browser/usb/usb_device_handle.h"
15 #include "chrome/common/extensions/api/usb.h"
16 #include "extensions/browser/api/api_resource_manager.h"
17 #include "extensions/browser/api/async_api_function.h"
18 #include "net/base/io_buffer.h"
21 class UsbDeviceHandle;
24 namespace extensions {
26 class UsbDeviceResource;
28 class UsbAsyncApiFunction : public AsyncApiFunction {
30 UsbAsyncApiFunction();
33 virtual ~UsbAsyncApiFunction();
35 virtual bool PrePrepare() OVERRIDE;
36 virtual bool Respond() OVERRIDE;
38 scoped_refptr<UsbDevice> GetDeviceOrOrCompleteWithError(
39 const extensions::api::usb::Device& input_device);
41 scoped_refptr<UsbDeviceHandle> GetDeviceHandleOrCompleteWithError(
42 const extensions::api::usb::ConnectionHandle& input_device_handle);
44 void RemoveUsbDeviceResource(int api_resource_id);
46 void CompleteWithError(const std::string& error);
48 ApiResourceManager<UsbDeviceResource>* manager_;
51 class UsbAsyncApiTransferFunction : public UsbAsyncApiFunction {
53 UsbAsyncApiTransferFunction();
54 virtual ~UsbAsyncApiTransferFunction();
56 bool ConvertDirectionSafely(const extensions::api::usb::Direction& input,
57 UsbEndpointDirection* output);
58 bool ConvertRequestTypeSafely(const extensions::api::usb::RequestType& input,
59 UsbDeviceHandle::TransferRequestType* output);
60 bool ConvertRecipientSafely(const extensions::api::usb::Recipient& input,
61 UsbDeviceHandle::TransferRecipient* output);
63 void OnCompleted(UsbTransferStatus status,
64 scoped_refptr<net::IOBuffer> data,
68 class UsbFindDevicesFunction : public UsbAsyncApiFunction {
70 DECLARE_EXTENSION_FUNCTION("usb.findDevices", USB_FINDDEVICES)
72 UsbFindDevicesFunction();
75 virtual ~UsbFindDevicesFunction();
77 virtual bool Prepare() OVERRIDE;
78 virtual void AsyncWorkStart() OVERRIDE;
81 void OpenDevices(scoped_ptr<std::vector<scoped_refptr<UsbDevice> > > devices);
83 std::vector<scoped_refptr<UsbDeviceHandle> > device_handles_;
84 scoped_ptr<extensions::api::usb::FindDevices::Params> parameters_;
87 class UsbGetDevicesFunction : public UsbAsyncApiFunction {
89 DECLARE_EXTENSION_FUNCTION("usb.getDevices", USB_GETDEVICES)
91 UsbGetDevicesFunction();
93 static void SetDeviceForTest(UsbDevice* device);
95 virtual bool Prepare() OVERRIDE;
96 virtual void AsyncWorkStart() OVERRIDE;
99 virtual ~UsbGetDevicesFunction();
102 void EnumerationCompletedFileThread(
103 scoped_ptr<std::vector<scoped_refptr<UsbDevice> > > devices);
105 scoped_ptr<extensions::api::usb::GetDevices::Params> parameters_;
108 class UsbRequestAccessFunction : public UsbAsyncApiFunction {
110 DECLARE_EXTENSION_FUNCTION("usb.requestAccess", USB_REQUESTACCESS)
112 UsbRequestAccessFunction();
114 virtual bool Prepare() OVERRIDE;
115 virtual void AsyncWorkStart() OVERRIDE;
118 virtual ~UsbRequestAccessFunction();
120 void OnCompleted(bool success);
123 scoped_ptr<extensions::api::usb::RequestAccess::Params> parameters_;
126 class UsbOpenDeviceFunction : public UsbAsyncApiFunction {
128 DECLARE_EXTENSION_FUNCTION("usb.openDevice", USB_OPENDEVICE)
130 UsbOpenDeviceFunction();
132 virtual bool Prepare() OVERRIDE;
133 virtual void AsyncWorkStart() OVERRIDE;
136 virtual ~UsbOpenDeviceFunction();
139 scoped_refptr<UsbDeviceHandle> handle_;
140 scoped_ptr<extensions::api::usb::OpenDevice::Params> parameters_;
143 class UsbListInterfacesFunction : public UsbAsyncApiFunction {
145 DECLARE_EXTENSION_FUNCTION("usb.listInterfaces", USB_LISTINTERFACES)
147 UsbListInterfacesFunction();
150 virtual ~UsbListInterfacesFunction();
152 virtual bool Prepare() OVERRIDE;
153 virtual void AsyncWorkStart() OVERRIDE;
156 bool ConvertDirectionSafely(const UsbEndpointDirection& input,
157 extensions::api::usb::Direction* output);
158 bool ConvertSynchronizationTypeSafely(
159 const UsbSynchronizationType& input,
160 extensions::api::usb::SynchronizationType* output);
161 bool ConvertTransferTypeSafely(const UsbTransferType& input,
162 extensions::api::usb::TransferType* output);
163 bool ConvertUsageTypeSafely(const UsbUsageType& input,
164 extensions::api::usb::UsageType* output);
166 scoped_ptr<base::ListValue> result_;
167 scoped_ptr<extensions::api::usb::ListInterfaces::Params> parameters_;
170 class UsbCloseDeviceFunction : public UsbAsyncApiFunction {
172 DECLARE_EXTENSION_FUNCTION("usb.closeDevice", USB_CLOSEDEVICE)
174 UsbCloseDeviceFunction();
177 virtual ~UsbCloseDeviceFunction();
179 virtual bool Prepare() OVERRIDE;
180 virtual void AsyncWorkStart() OVERRIDE;
183 scoped_ptr<extensions::api::usb::CloseDevice::Params> parameters_;
186 class UsbClaimInterfaceFunction : public UsbAsyncApiFunction {
188 DECLARE_EXTENSION_FUNCTION("usb.claimInterface", USB_CLAIMINTERFACE)
190 UsbClaimInterfaceFunction();
193 virtual ~UsbClaimInterfaceFunction();
195 virtual bool Prepare() OVERRIDE;
196 virtual void AsyncWorkStart() OVERRIDE;
199 scoped_ptr<extensions::api::usb::ClaimInterface::Params> parameters_;
202 class UsbReleaseInterfaceFunction : public UsbAsyncApiFunction {
204 DECLARE_EXTENSION_FUNCTION("usb.releaseInterface", USB_RELEASEINTERFACE)
206 UsbReleaseInterfaceFunction();
209 virtual ~UsbReleaseInterfaceFunction();
211 virtual bool Prepare() OVERRIDE;
212 virtual void AsyncWorkStart() OVERRIDE;
215 scoped_ptr<extensions::api::usb::ReleaseInterface::Params> parameters_;
218 class UsbSetInterfaceAlternateSettingFunction : public UsbAsyncApiFunction {
220 DECLARE_EXTENSION_FUNCTION("usb.setInterfaceAlternateSetting",
221 USB_SETINTERFACEALTERNATESETTING)
223 UsbSetInterfaceAlternateSettingFunction();
226 virtual ~UsbSetInterfaceAlternateSettingFunction();
228 virtual bool Prepare() OVERRIDE;
229 virtual void AsyncWorkStart() OVERRIDE;
231 scoped_ptr<extensions::api::usb::SetInterfaceAlternateSetting::Params>
235 class UsbControlTransferFunction : public UsbAsyncApiTransferFunction {
237 DECLARE_EXTENSION_FUNCTION("usb.controlTransfer", USB_CONTROLTRANSFER)
239 UsbControlTransferFunction();
242 virtual ~UsbControlTransferFunction();
244 virtual bool Prepare() OVERRIDE;
245 virtual void AsyncWorkStart() OVERRIDE;
248 scoped_ptr<extensions::api::usb::ControlTransfer::Params> parameters_;
251 class UsbBulkTransferFunction : public UsbAsyncApiTransferFunction {
253 DECLARE_EXTENSION_FUNCTION("usb.bulkTransfer", USB_BULKTRANSFER)
255 UsbBulkTransferFunction();
258 virtual ~UsbBulkTransferFunction();
260 virtual bool Prepare() OVERRIDE;
261 virtual void AsyncWorkStart() OVERRIDE;
264 scoped_ptr<extensions::api::usb::BulkTransfer::Params> parameters_;
267 class UsbInterruptTransferFunction : public UsbAsyncApiTransferFunction {
269 DECLARE_EXTENSION_FUNCTION("usb.interruptTransfer", USB_INTERRUPTTRANSFER)
271 UsbInterruptTransferFunction();
274 virtual ~UsbInterruptTransferFunction();
276 virtual bool Prepare() OVERRIDE;
277 virtual void AsyncWorkStart() OVERRIDE;
280 scoped_ptr<extensions::api::usb::InterruptTransfer::Params> parameters_;
283 class UsbIsochronousTransferFunction : public UsbAsyncApiTransferFunction {
285 DECLARE_EXTENSION_FUNCTION("usb.isochronousTransfer", USB_ISOCHRONOUSTRANSFER)
287 UsbIsochronousTransferFunction();
290 virtual ~UsbIsochronousTransferFunction();
292 virtual bool Prepare() OVERRIDE;
293 virtual void AsyncWorkStart() OVERRIDE;
296 scoped_ptr<extensions::api::usb::IsochronousTransfer::Params> parameters_;
299 class UsbResetDeviceFunction : public UsbAsyncApiFunction {
301 DECLARE_EXTENSION_FUNCTION("usb.resetDevice", USB_RESETDEVICE)
303 UsbResetDeviceFunction();
306 virtual ~UsbResetDeviceFunction();
308 virtual bool Prepare() OVERRIDE;
309 virtual void AsyncWorkStart() OVERRIDE;
312 scoped_ptr<extensions::api::usb::ResetDevice::Params> parameters_;
314 } // namespace extensions
316 #endif // CHROME_BROWSER_EXTENSIONS_API_USB_USB_API_H_