1 // Copyright 2014 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. 4 5 #ifndef EXTENSIONS_BROWSER_API_HID_HID_API_H_ 6 #define EXTENSIONS_BROWSER_API_HID_HID_API_H_ 7 8 #include <string> 9 10 #include "base/memory/ref_counted.h" 11 #include "base/memory/scoped_ptr.h" 12 #include "extensions/browser/api/api_resource_manager.h" 13 #include "extensions/browser/api/async_api_function.h" 14 #include "extensions/browser/api/hid/hid_connection_resource.h" 15 #include "extensions/browser/api/hid/hid_device_manager.h" 16 #include "extensions/common/api/hid.h" 17 18 namespace net { 19 class IOBuffer; 20 } // namespace net 21 22 namespace extensions { 23 24 class HidAsyncApiFunction : public AsyncApiFunction { 25 public: 26 HidAsyncApiFunction(); 27 28 virtual bool PrePrepare() OVERRIDE; 29 virtual bool Respond() OVERRIDE; 30 31 protected: 32 virtual ~HidAsyncApiFunction(); 33 34 HidConnectionResource* GetHidConnectionResource(int api_resource_id); 35 void RemoveHidConnectionResource(int api_resource_id); 36 37 void CompleteWithError(const std::string& error); 38 39 HidDeviceManager* device_manager_; 40 ApiResourceManager<HidConnectionResource>* connection_manager_; 41 42 private: 43 DISALLOW_COPY_AND_ASSIGN(HidAsyncApiFunction); 44 }; 45 46 class HidGetDevicesFunction : public HidAsyncApiFunction { 47 public: 48 DECLARE_EXTENSION_FUNCTION("hid.getDevices", HID_GETDEVICES); 49 50 HidGetDevicesFunction(); 51 52 protected: 53 virtual bool Prepare() OVERRIDE; 54 virtual void AsyncWorkStart() OVERRIDE; 55 56 virtual ~HidGetDevicesFunction(); 57 58 scoped_ptr<core_api::hid::GetDevices::Params> parameters_; 59 60 private: 61 DISALLOW_COPY_AND_ASSIGN(HidGetDevicesFunction); 62 }; 63 64 class HidConnectFunction : public HidAsyncApiFunction { 65 public: 66 DECLARE_EXTENSION_FUNCTION("hid.connect", HID_CONNECT); 67 68 HidConnectFunction(); 69 70 protected: 71 virtual bool Prepare() OVERRIDE; 72 virtual void AsyncWorkStart() OVERRIDE; 73 74 private: 75 virtual ~HidConnectFunction(); 76 77 scoped_ptr<core_api::hid::Connect::Params> parameters_; 78 79 DISALLOW_COPY_AND_ASSIGN(HidConnectFunction); 80 }; 81 82 class HidDisconnectFunction : public HidAsyncApiFunction { 83 public: 84 DECLARE_EXTENSION_FUNCTION("hid.disconnect", HID_DISCONNECT); 85 86 HidDisconnectFunction(); 87 88 protected: 89 virtual bool Prepare() OVERRIDE; 90 virtual void AsyncWorkStart() OVERRIDE; 91 92 private: 93 virtual ~HidDisconnectFunction(); 94 95 scoped_ptr<core_api::hid::Disconnect::Params> parameters_; 96 97 DISALLOW_COPY_AND_ASSIGN(HidDisconnectFunction); 98 }; 99 100 class HidReceiveFunction : public HidAsyncApiFunction { 101 public: 102 DECLARE_EXTENSION_FUNCTION("hid.receive", HID_RECEIVE); 103 104 HidReceiveFunction(); 105 106 protected: 107 virtual bool Prepare() OVERRIDE; 108 virtual void AsyncWorkStart() OVERRIDE; 109 110 private: 111 virtual ~HidReceiveFunction(); 112 113 void OnFinished(bool success, 114 scoped_refptr<net::IOBuffer> buffer, 115 size_t size); 116 117 scoped_ptr<core_api::hid::Receive::Params> parameters_; 118 119 DISALLOW_COPY_AND_ASSIGN(HidReceiveFunction); 120 }; 121 122 class HidSendFunction : public HidAsyncApiFunction { 123 public: 124 DECLARE_EXTENSION_FUNCTION("hid.send", HID_SEND); 125 126 HidSendFunction(); 127 128 protected: 129 virtual bool Prepare() OVERRIDE; 130 virtual void AsyncWorkStart() OVERRIDE; 131 132 private: 133 virtual ~HidSendFunction(); 134 135 void OnFinished(bool success); 136 137 scoped_ptr<core_api::hid::Send::Params> parameters_; 138 139 DISALLOW_COPY_AND_ASSIGN(HidSendFunction); 140 }; 141 142 class HidReceiveFeatureReportFunction : public HidAsyncApiFunction { 143 public: 144 DECLARE_EXTENSION_FUNCTION("hid.receiveFeatureReport", 145 HID_RECEIVEFEATUREREPORT); 146 147 HidReceiveFeatureReportFunction(); 148 149 protected: 150 virtual bool Prepare() OVERRIDE; 151 virtual void AsyncWorkStart() OVERRIDE; 152 153 private: 154 virtual ~HidReceiveFeatureReportFunction(); 155 156 void OnFinished(bool success, 157 scoped_refptr<net::IOBuffer> buffer, 158 size_t size); 159 160 scoped_ptr<core_api::hid::ReceiveFeatureReport::Params> parameters_; 161 162 DISALLOW_COPY_AND_ASSIGN(HidReceiveFeatureReportFunction); 163 }; 164 165 class HidSendFeatureReportFunction : public HidAsyncApiFunction { 166 public: 167 DECLARE_EXTENSION_FUNCTION("hid.sendFeatureReport", HID_SENDFEATUREREPORT); 168 169 HidSendFeatureReportFunction(); 170 171 protected: 172 virtual bool Prepare() OVERRIDE; 173 virtual void AsyncWorkStart() OVERRIDE; 174 175 private: 176 virtual ~HidSendFeatureReportFunction(); 177 178 void OnFinished(bool success); 179 180 scoped_ptr<core_api::hid::SendFeatureReport::Params> parameters_; 181 182 DISALLOW_COPY_AND_ASSIGN(HidSendFeatureReportFunction); 183 }; 184 185 } // namespace extensions 186 187 #endif // EXTENSIONS_BROWSER_API_HID_HID_API_H_ 188