173475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn/* 273475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn * Copyright (C) 2015 The Android Open Source Project 373475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn * 473475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn * Licensed under the Apache License, Version 2.0 (the "License"); 573475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn * you may not use this file except in compliance with the License. 673475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn * You may obtain a copy of the License at 773475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn * 873475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn * http://www.apache.org/licenses/LICENSE-2.0 973475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn * 1073475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn * Unless required by applicable law or agreed to in writing, software 1173475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn * distributed under the License is distributed on an "AS IS" BASIS, 1273475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1373475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn * See the License for the specific language governing permissions and 1473475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn * limitations under the License. 1573475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn */ 1673475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn 1773475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn#ifndef ANDROID_INPUT_HOST_H_ 1873475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn#define ANDROID_INPUT_HOST_H_ 1973475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn 206fa82480aeb702ca60bc20d5c8df3c4a62904e3bTim Kilbourn#include <memory> 216fa82480aeb702ca60bc20d5c8df3c4a62904e3bTim Kilbourn 2273475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn#include <hardware/input.h> 2373475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn 2473475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbournnamespace android { 2573475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn 2673475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn/** 2773475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn * Classes in this file wrap the corresponding interfaces in the Input HAL. They 284f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn * are intended to be lightweight, as they primarily wrap pointers to callbacks. 294f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn * It is still important not to use an object after a HAL-specific method has 304f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn * freed the underlying representation. 3173475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn * 3273475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn * See hardware/input.h for details about each of these methods. 3373475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn */ 3473475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn 3573475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbournusing InputBus = input_bus_t; 3673475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbournusing InputCollectionId = input_collection_id_t; 374f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbournusing InputDeviceHandle = input_device_handle_t; 384f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbournusing InputDeviceIdentifier = input_device_identifier_t; 3973475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbournusing InputUsage = input_usage_t; 4073475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn 4173475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbournclass InputHostBase { 4273475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbournprotected: 4373475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn InputHostBase(input_host_t* host, input_host_callbacks_t cb) : mHost(host), mCallbacks(cb) {} 4473475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn virtual ~InputHostBase() = default; 4573475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn 464f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn InputHostBase(const InputHostBase& rhs) = delete; 474f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn InputHostBase(InputHostBase&& rhs) = delete; 483186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn 4973475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn input_host_t* mHost; 5073475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn input_host_callbacks_t mCallbacks; 5173475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn}; 5273475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn 5373475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbournclass InputReport : private InputHostBase { 5473475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbournpublic: 554f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn InputReport(input_host_t* host, input_host_callbacks_t cb, input_report_t* r) : 564f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn InputHostBase(host, cb), mReport(r) {} 5773475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn virtual ~InputReport() = default; 5873475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn 594f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn virtual void setIntUsage(InputCollectionId id, InputUsage usage, int32_t value, 604f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn int32_t arityIndex); 614f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn virtual void setBoolUsage(InputCollectionId id, InputUsage usage, bool value, 624f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn int32_t arityIndex); 634f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn virtual void reportEvent(InputDeviceHandle* d); 6473475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn 654f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn operator input_report_t*() const { return mReport; } 6673475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn 674f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn InputReport(const InputReport& rhs) = delete; 684f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn InputReport& operator=(const InputReport& rhs) = delete; 6973475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbournprivate: 7073475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn input_report_t* mReport; 7173475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn}; 7273475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn 7373475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbournclass InputReportDefinition : private InputHostBase { 7473475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbournpublic: 754f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn InputReportDefinition(input_host_t* host, input_host_callbacks_t cb, 764f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn input_report_definition_t* r) : InputHostBase(host, cb), mReportDefinition(r) {} 7773475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn virtual ~InputReportDefinition() = default; 7873475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn 794f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn virtual void addCollection(InputCollectionId id, int32_t arity); 804f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn virtual void declareUsage(InputCollectionId id, InputUsage usage, int32_t min, int32_t max, 8173475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn float resolution); 824f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn virtual void declareUsages(InputCollectionId id, InputUsage* usage, size_t usageCount); 8373475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn 844f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn virtual InputReport* allocateReport(); 8573475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn 864f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn operator input_report_definition_t*() { return mReportDefinition; } 8773475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn 884f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn InputReportDefinition(const InputReportDefinition& rhs) = delete; 894f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn InputReportDefinition& operator=(const InputReportDefinition& rhs) = delete; 904f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbournprivate: 9173475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn input_report_definition_t* mReportDefinition; 9273475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn}; 9373475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn 9473475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbournclass InputDeviceDefinition : private InputHostBase { 9573475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbournpublic: 964f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn InputDeviceDefinition(input_host_t* host, input_host_callbacks_t cb, 974f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn input_device_definition_t* d) : 984f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn InputHostBase(host, cb), mDeviceDefinition(d) {} 9973475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn virtual ~InputDeviceDefinition() = default; 10073475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn 1014f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn virtual void addReport(InputReportDefinition* r); 10273475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn 1034f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn operator input_device_definition_t*() { return mDeviceDefinition; } 10473475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn 1054f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn InputDeviceDefinition(const InputDeviceDefinition& rhs) = delete; 1064f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn InputDeviceDefinition& operator=(const InputDeviceDefinition& rhs) = delete; 10773475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbournprivate: 10873475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn input_device_definition_t* mDeviceDefinition; 10973475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn}; 11073475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn 1116fa82480aeb702ca60bc20d5c8df3c4a62904e3bTim Kilbournclass InputProperty : private InputHostBase { 1126fa82480aeb702ca60bc20d5c8df3c4a62904e3bTim Kilbournpublic: 1134f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn virtual ~InputProperty() = default; 1146fa82480aeb702ca60bc20d5c8df3c4a62904e3bTim Kilbourn 1154f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn InputProperty(input_host_t* host, input_host_callbacks_t cb, input_property_t* p) : 1164f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn InputHostBase(host, cb), mProperty(p) {} 1176fa82480aeb702ca60bc20d5c8df3c4a62904e3bTim Kilbourn 1184f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn virtual const char* getKey() const; 1194f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn virtual const char* getValue() const; 1206fa82480aeb702ca60bc20d5c8df3c4a62904e3bTim Kilbourn 1214f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn operator input_property_t*() { return mProperty; } 1226fa82480aeb702ca60bc20d5c8df3c4a62904e3bTim Kilbourn 1236fa82480aeb702ca60bc20d5c8df3c4a62904e3bTim Kilbourn InputProperty(const InputProperty& rhs) = delete; 1246fa82480aeb702ca60bc20d5c8df3c4a62904e3bTim Kilbourn InputProperty& operator=(const InputProperty& rhs) = delete; 1256fa82480aeb702ca60bc20d5c8df3c4a62904e3bTim Kilbournprivate: 1266fa82480aeb702ca60bc20d5c8df3c4a62904e3bTim Kilbourn input_property_t* mProperty; 1276fa82480aeb702ca60bc20d5c8df3c4a62904e3bTim Kilbourn}; 1286fa82480aeb702ca60bc20d5c8df3c4a62904e3bTim Kilbourn 1296fa82480aeb702ca60bc20d5c8df3c4a62904e3bTim Kilbournclass InputPropertyMap : private InputHostBase { 1306fa82480aeb702ca60bc20d5c8df3c4a62904e3bTim Kilbournpublic: 1314f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn virtual ~InputPropertyMap() = default; 1326fa82480aeb702ca60bc20d5c8df3c4a62904e3bTim Kilbourn 1334f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn InputPropertyMap(input_host_t* host, input_host_callbacks_t cb, input_property_map_t* m) : 1344f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn InputHostBase(host, cb), mMap(m) {} 1356fa82480aeb702ca60bc20d5c8df3c4a62904e3bTim Kilbourn 1364f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn virtual InputProperty* getDeviceProperty(const char* key) const; 1374f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn virtual void freeDeviceProperty(InputProperty* property) const; 1386fa82480aeb702ca60bc20d5c8df3c4a62904e3bTim Kilbourn 1394f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn operator input_property_map_t*() { return mMap; } 1406fa82480aeb702ca60bc20d5c8df3c4a62904e3bTim Kilbourn 1416fa82480aeb702ca60bc20d5c8df3c4a62904e3bTim Kilbourn InputPropertyMap(const InputPropertyMap& rhs) = delete; 1426fa82480aeb702ca60bc20d5c8df3c4a62904e3bTim Kilbourn InputPropertyMap& operator=(const InputPropertyMap& rhs) = delete; 1436fa82480aeb702ca60bc20d5c8df3c4a62904e3bTim Kilbournprivate: 1444f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn input_property_map_t* mMap; 1454f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn}; 1466fa82480aeb702ca60bc20d5c8df3c4a62904e3bTim Kilbourn 1474f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbournclass InputHostInterface { 1484f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbournpublic: 1494f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn virtual ~InputHostInterface() = default; 1506fa82480aeb702ca60bc20d5c8df3c4a62904e3bTim Kilbourn 1514f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn virtual InputDeviceIdentifier* createDeviceIdentifier(const char* name, int32_t productId, 1524f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn int32_t vendorId, InputBus bus, const char* uniqueId) = 0; 1534f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn 1544f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn virtual InputDeviceDefinition* createDeviceDefinition() = 0; 1554f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn virtual InputReportDefinition* createInputReportDefinition() = 0; 1564f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn virtual InputReportDefinition* createOutputReportDefinition() = 0; 1574f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn virtual void freeReportDefinition(InputReportDefinition* reportDef) = 0; 1584f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn 1594f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn virtual InputDeviceHandle* registerDevice(InputDeviceIdentifier* id, 1604f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn InputDeviceDefinition* d) = 0; 1614f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn virtual void unregisterDevice(InputDeviceHandle* handle) = 0; 1624f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn 1634f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn virtual InputPropertyMap* getDevicePropertyMap(InputDeviceIdentifier* id) = 0; 1644f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn virtual void freeDevicePropertyMap(InputPropertyMap* propertyMap) = 0; 1656fa82480aeb702ca60bc20d5c8df3c4a62904e3bTim Kilbourn}; 1666fa82480aeb702ca60bc20d5c8df3c4a62904e3bTim Kilbourn 1674f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbournclass InputHost : public InputHostInterface, private InputHostBase { 16873475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbournpublic: 16973475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn InputHost(input_host_t* host, input_host_callbacks_t cb) : InputHostBase(host, cb) {} 17073475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn virtual ~InputHost() = default; 17173475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn 1724f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn InputDeviceIdentifier* createDeviceIdentifier(const char* name, int32_t productId, 1734f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn int32_t vendorId, InputBus bus, const char* uniqueId) override; 17473475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn 1754f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn InputDeviceDefinition* createDeviceDefinition() override; 1764f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn InputReportDefinition* createInputReportDefinition() override; 1774f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn InputReportDefinition* createOutputReportDefinition() override; 1784f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn virtual void freeReportDefinition(InputReportDefinition* reportDef) override; 17973475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn 1804f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn InputDeviceHandle* registerDevice(InputDeviceIdentifier* id, InputDeviceDefinition* d) override; 1814f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn void unregisterDevice(InputDeviceHandle* handle) override; 18273475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn 1834f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn InputPropertyMap* getDevicePropertyMap(InputDeviceIdentifier* id) override; 1844f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn void freeDevicePropertyMap(InputPropertyMap* propertyMap) override; 1856fa82480aeb702ca60bc20d5c8df3c4a62904e3bTim Kilbourn 1864f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn InputHost(const InputHost& rhs) = delete; 1874f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn InputHost& operator=(const InputHost& rhs) = delete; 18873475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn}; 18973475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn 19073475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn} // namespace android 19173475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn 19273475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn#endif // ANDROID_INPUT_HOST_H_ 193