16f783602c05c519238200fed55b0afa097737ca1Michael Wright/* 26f783602c05c519238200fed55b0afa097737ca1Michael Wright * Copyright (C) 2015 The Android Open Source Project 36f783602c05c519238200fed55b0afa097737ca1Michael Wright * 46f783602c05c519238200fed55b0afa097737ca1Michael Wright * Licensed under the Apache License, Version 2.0 (the "License"); 56f783602c05c519238200fed55b0afa097737ca1Michael Wright * you may not use this file except in compliance with the License. 66f783602c05c519238200fed55b0afa097737ca1Michael Wright * You may obtain a copy of the License at 76f783602c05c519238200fed55b0afa097737ca1Michael Wright * 86f783602c05c519238200fed55b0afa097737ca1Michael Wright * http://www.apache.org/licenses/LICENSE-2.0 96f783602c05c519238200fed55b0afa097737ca1Michael Wright * 106f783602c05c519238200fed55b0afa097737ca1Michael Wright * Unless required by applicable law or agreed to in writing, software 116f783602c05c519238200fed55b0afa097737ca1Michael Wright * distributed under the License is distributed on an "AS IS" BASIS, 126f783602c05c519238200fed55b0afa097737ca1Michael Wright * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136f783602c05c519238200fed55b0afa097737ca1Michael Wright * See the License for the specific language governing permissions and 146f783602c05c519238200fed55b0afa097737ca1Michael Wright * limitations under the License. 156f783602c05c519238200fed55b0afa097737ca1Michael Wright */ 166f783602c05c519238200fed55b0afa097737ca1Michael Wright 176f783602c05c519238200fed55b0afa097737ca1Michael Wright#ifndef ANDROID_INPUT_DRIVER_H 186f783602c05c519238200fed55b0afa097737ca1Michael Wright#define ANDROID_INPUT_DRIVER_H 196f783602c05c519238200fed55b0afa097737ca1Michael Wright 206f783602c05c519238200fed55b0afa097737ca1Michael Wright#include <stdint.h> 216f783602c05c519238200fed55b0afa097737ca1Michael Wright#include <sys/types.h> 226f783602c05c519238200fed55b0afa097737ca1Michael Wright 236f783602c05c519238200fed55b0afa097737ca1Michael Wright#include "InputHost.h" 246f783602c05c519238200fed55b0afa097737ca1Michael Wright 256f783602c05c519238200fed55b0afa097737ca1Michael Wright#include <hardware/input.h> 266f783602c05c519238200fed55b0afa097737ca1Michael Wright#include <utils/RefBase.h> 276f783602c05c519238200fed55b0afa097737ca1Michael Wright#include <utils/String8.h> 286f783602c05c519238200fed55b0afa097737ca1Michael Wright 292e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn// Declare a concrete type for the HAL 302e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbournstruct input_host { 312e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn}; 326f783602c05c519238200fed55b0afa097737ca1Michael Wright 332e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbournnamespace android { 346f783602c05c519238200fed55b0afa097737ca1Michael Wright 352e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbournclass InputDriverInterface : public input_host_t, public virtual RefBase { 366f783602c05c519238200fed55b0afa097737ca1Michael Wrightprotected: 376f783602c05c519238200fed55b0afa097737ca1Michael Wright InputDriverInterface() = default; 386f783602c05c519238200fed55b0afa097737ca1Michael Wright virtual ~InputDriverInterface() = default; 396f783602c05c519238200fed55b0afa097737ca1Michael Wright 406f783602c05c519238200fed55b0afa097737ca1Michael Wrightpublic: 412e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn virtual void init() = 0; 422e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn 432e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn virtual input_device_identifier_t* createDeviceIdentifier( 442e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn const char* name, int32_t productId, int32_t vendorId, 452e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn input_bus_t bus, const char* uniqueId) = 0; 462e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn virtual input_device_definition_t* createDeviceDefinition() = 0; 472e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn virtual input_report_definition_t* createInputReportDefinition() = 0; 482e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn virtual input_report_definition_t* createOutputReportDefinition() = 0; 492e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn virtual void freeReportDefinition(input_report_definition_t* reportDef) = 0; 502e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn 512e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn virtual void inputDeviceDefinitionAddReport(input_device_definition_t* d, 522e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn input_report_definition_t* r) = 0; 532e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn virtual void inputReportDefinitionAddCollection(input_report_definition_t* report, 542e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn input_collection_id_t id, int32_t arity) = 0; 552e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn virtual void inputReportDefinitionDeclareUsageInt(input_report_definition_t* report, 562e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn input_collection_id_t id, input_usage_t usage, int32_t min, int32_t max, 572e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn float resolution) = 0; 582e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn virtual void inputReportDefinitionDeclareUsagesBool(input_report_definition_t* report, 592e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn input_collection_id_t id, input_usage_t* usage, size_t usageCount) = 0; 602e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn 612e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn virtual input_device_handle_t* registerDevice(input_device_identifier_t* id, 622e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn input_device_definition_t* d) = 0; 632e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn virtual void unregisterDevice(input_device_handle_t* handle) = 0; 642e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn 652e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn virtual input_report_t* inputAllocateReport(input_report_definition_t* r) = 0; 662e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn virtual void inputReportSetUsageInt(input_report_t* r, input_collection_id_t id, 672e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn input_usage_t usage, int32_t value, int32_t arity_index) = 0; 682e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn virtual void inputReportSetUsageBool(input_report_t* r, input_collection_id_t id, 692e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn input_usage_t usage, bool value, int32_t arity_index) = 0; 702e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn virtual void reportEvent(input_device_handle_t* d, input_report_t* report) = 0; 712e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn 722e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn virtual input_property_map_t* inputGetDevicePropertyMap(input_device_identifier_t* id) = 0; 732e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn virtual input_property_t* inputGetDeviceProperty(input_property_map_t* map, 742e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn const char* key) = 0; 752e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn virtual const char* inputGetPropertyKey(input_property_t* property) = 0; 762e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn virtual const char* inputGetPropertyValue(input_property_t* property) = 0; 772e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn virtual void inputFreeDeviceProperty(input_property_t* property) = 0; 782e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn virtual void inputFreeDevicePropertyMap(input_property_map_t* map) = 0; 796f783602c05c519238200fed55b0afa097737ca1Michael Wright 806f783602c05c519238200fed55b0afa097737ca1Michael Wright virtual void dump(String8& result) = 0; 816f783602c05c519238200fed55b0afa097737ca1Michael Wright}; 826f783602c05c519238200fed55b0afa097737ca1Michael Wright 836f783602c05c519238200fed55b0afa097737ca1Michael Wrightclass InputDriver : public InputDriverInterface { 846f783602c05c519238200fed55b0afa097737ca1Michael Wrightpublic: 856f783602c05c519238200fed55b0afa097737ca1Michael Wright InputDriver(const char* name); 866f783602c05c519238200fed55b0afa097737ca1Michael Wright virtual ~InputDriver() = default; 876f783602c05c519238200fed55b0afa097737ca1Michael Wright 882e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn virtual void init() override; 892e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn 902e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn virtual input_device_identifier_t* createDeviceIdentifier( 912e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn const char* name, int32_t productId, int32_t vendorId, 922e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn input_bus_t bus, const char* uniqueId) override; 932e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn virtual input_device_definition_t* createDeviceDefinition() override; 942e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn virtual input_report_definition_t* createInputReportDefinition() override; 952e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn virtual input_report_definition_t* createOutputReportDefinition() override; 962e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn virtual void freeReportDefinition(input_report_definition_t* reportDef) override; 972e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn 982e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn virtual void inputDeviceDefinitionAddReport(input_device_definition_t* d, 992e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn input_report_definition_t* r) override; 1002e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn virtual void inputReportDefinitionAddCollection(input_report_definition_t* report, 1012e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn input_collection_id_t id, int32_t arity) override; 1022e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn virtual void inputReportDefinitionDeclareUsageInt(input_report_definition_t* report, 1032e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn input_collection_id_t id, input_usage_t usage, int32_t min, int32_t max, 1042e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn float resolution) override; 1052e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn virtual void inputReportDefinitionDeclareUsagesBool(input_report_definition_t* report, 1062e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn input_collection_id_t id, input_usage_t* usage, size_t usageCount) override; 1072e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn 1082e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn virtual input_device_handle_t* registerDevice(input_device_identifier_t* id, 1092e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn input_device_definition_t* d) override; 1102e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn virtual void unregisterDevice(input_device_handle_t* handle) override; 1112e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn 1122e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn virtual input_report_t* inputAllocateReport(input_report_definition_t* r) override; 1132e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn virtual void inputReportSetUsageInt(input_report_t* r, input_collection_id_t id, 1142e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn input_usage_t usage, int32_t value, int32_t arity_index) override; 1152e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn virtual void inputReportSetUsageBool(input_report_t* r, input_collection_id_t id, 1162e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn input_usage_t usage, bool value, int32_t arity_index) override; 1172e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn virtual void reportEvent(input_device_handle_t* d, input_report_t* report) override; 1182e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn 1192e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn virtual input_property_map_t* inputGetDevicePropertyMap(input_device_identifier_t* id) override; 1202e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn virtual input_property_t* inputGetDeviceProperty(input_property_map_t* map, 1212e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn const char* key) override; 1222e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn virtual const char* inputGetPropertyKey(input_property_t* property) override; 1232e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn virtual const char* inputGetPropertyValue(input_property_t* property) override; 1242e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn virtual void inputFreeDeviceProperty(input_property_t* property) override; 1252e7f0146a04fe2dbe5ca0389752709e235c64accTim Kilbourn virtual void inputFreeDevicePropertyMap(input_property_map_t* map) override; 1266f783602c05c519238200fed55b0afa097737ca1Michael Wright 1276f783602c05c519238200fed55b0afa097737ca1Michael Wright virtual void dump(String8& result) override; 1286f783602c05c519238200fed55b0afa097737ca1Michael Wright 1296f783602c05c519238200fed55b0afa097737ca1Michael Wrightprivate: 1306f783602c05c519238200fed55b0afa097737ca1Michael Wright String8 mName; 1316f783602c05c519238200fed55b0afa097737ca1Michael Wright const input_module_t* mHal; 1326f783602c05c519238200fed55b0afa097737ca1Michael Wright}; 1336f783602c05c519238200fed55b0afa097737ca1Michael Wright 1346f783602c05c519238200fed55b0afa097737ca1Michael Wright 1356f783602c05c519238200fed55b0afa097737ca1Michael Wrightextern "C" { 1366f783602c05c519238200fed55b0afa097737ca1Michael Wright 1376f783602c05c519238200fed55b0afa097737ca1Michael Wrightinput_device_identifier_t* create_device_identifier(input_host_t* host, 1386f783602c05c519238200fed55b0afa097737ca1Michael Wright const char* name, int32_t product_id, int32_t vendor_id, 1396f783602c05c519238200fed55b0afa097737ca1Michael Wright input_bus_t bus, const char* unique_id); 1406f783602c05c519238200fed55b0afa097737ca1Michael Wright 1416f783602c05c519238200fed55b0afa097737ca1Michael Wrightinput_device_definition_t* create_device_definition(input_host_t* host); 1426f783602c05c519238200fed55b0afa097737ca1Michael Wright 1436f783602c05c519238200fed55b0afa097737ca1Michael Wrightinput_report_definition_t* create_input_report_definition(input_host_t* host); 1446f783602c05c519238200fed55b0afa097737ca1Michael Wright 1456f783602c05c519238200fed55b0afa097737ca1Michael Wrightinput_report_definition_t* create_output_report_definition(input_host_t* host); 1466f783602c05c519238200fed55b0afa097737ca1Michael Wright 147c472986d4cb55b91547f28b06e89fe555c786a92Tim Kilbournvoid free_report_definition(input_host_t* host, input_report_definition_t* report_def); 148c472986d4cb55b91547f28b06e89fe555c786a92Tim Kilbourn 1496f783602c05c519238200fed55b0afa097737ca1Michael Wrightvoid input_device_definition_add_report(input_host_t* host, 1506f783602c05c519238200fed55b0afa097737ca1Michael Wright input_device_definition_t* d, input_report_definition_t* r); 1516f783602c05c519238200fed55b0afa097737ca1Michael Wright 1526f783602c05c519238200fed55b0afa097737ca1Michael Wrightvoid input_report_definition_add_collection(input_host_t* host, 1536f783602c05c519238200fed55b0afa097737ca1Michael Wright input_report_definition_t* report, input_collection_id_t id, int32_t arity); 1546f783602c05c519238200fed55b0afa097737ca1Michael Wright 1556f783602c05c519238200fed55b0afa097737ca1Michael Wrightvoid input_report_definition_declare_usage_int(input_host_t* host, 1566f783602c05c519238200fed55b0afa097737ca1Michael Wright input_report_definition_t* report, input_collection_id_t id, 1576f783602c05c519238200fed55b0afa097737ca1Michael Wright input_usage_t usage, int32_t min, int32_t max, float resolution); 1586f783602c05c519238200fed55b0afa097737ca1Michael Wright 1596f783602c05c519238200fed55b0afa097737ca1Michael Wrightvoid input_report_definition_declare_usages_bool(input_host_t* host, 1606f783602c05c519238200fed55b0afa097737ca1Michael Wright input_report_definition_t* report, input_collection_id_t id, 1616f783602c05c519238200fed55b0afa097737ca1Michael Wright input_usage_t* usage, size_t usage_count); 1626f783602c05c519238200fed55b0afa097737ca1Michael Wright 1636f783602c05c519238200fed55b0afa097737ca1Michael Wright 1646f783602c05c519238200fed55b0afa097737ca1Michael Wrightinput_device_handle_t* register_device(input_host_t* host, 1656f783602c05c519238200fed55b0afa097737ca1Michael Wright input_device_identifier_t* id, input_device_definition_t* d); 1666f783602c05c519238200fed55b0afa097737ca1Michael Wright 1676f783602c05c519238200fed55b0afa097737ca1Michael Wrightvoid unregister_device(input_host_t* host, input_device_handle_t* handle); 1686f783602c05c519238200fed55b0afa097737ca1Michael Wright 1696f783602c05c519238200fed55b0afa097737ca1Michael Wrightinput_report_t* input_allocate_report(input_host_t* host, input_report_definition_t* r); 1706f783602c05c519238200fed55b0afa097737ca1Michael Wright 1718943ce38a65cc852d49a141d654a4f149ce57c34Tim Kilbournvoid input_report_set_usage_int(input_host_t* host, input_report_t* r, 1728943ce38a65cc852d49a141d654a4f149ce57c34Tim Kilbourn input_collection_id_t id, input_usage_t usage, int32_t value, int32_t arity_index); 1738943ce38a65cc852d49a141d654a4f149ce57c34Tim Kilbourn 1748943ce38a65cc852d49a141d654a4f149ce57c34Tim Kilbournvoid input_report_set_usage_bool(input_host_t* host, input_report_t* r, 1758943ce38a65cc852d49a141d654a4f149ce57c34Tim Kilbourn input_collection_id_t id, input_usage_t usage, bool value, int32_t arity_index); 1768943ce38a65cc852d49a141d654a4f149ce57c34Tim Kilbourn 1776f783602c05c519238200fed55b0afa097737ca1Michael Wrightvoid report_event(input_host_t* host, input_device_handle_t* d, input_report_t* report); 1786f783602c05c519238200fed55b0afa097737ca1Michael Wright 179e5364c8c02f1a943e78dee600ac45573d5cdcbbfTim Kilbourninput_property_map_t* input_get_device_property_map(input_host_t* host, 180e5364c8c02f1a943e78dee600ac45573d5cdcbbfTim Kilbourn input_device_identifier_t* id); 181e5364c8c02f1a943e78dee600ac45573d5cdcbbfTim Kilbourn 182e5364c8c02f1a943e78dee600ac45573d5cdcbbfTim Kilbourninput_property_t* input_get_device_property(input_host_t* host, input_property_map_t* map, 183e5364c8c02f1a943e78dee600ac45573d5cdcbbfTim Kilbourn const char* key); 184e5364c8c02f1a943e78dee600ac45573d5cdcbbfTim Kilbourn 185e5364c8c02f1a943e78dee600ac45573d5cdcbbfTim Kilbournconst char* input_get_property_key(input_host_t* host, input_property_t* property); 186e5364c8c02f1a943e78dee600ac45573d5cdcbbfTim Kilbourn 187e5364c8c02f1a943e78dee600ac45573d5cdcbbfTim Kilbournconst char* input_get_property_value(input_host_t* host, input_property_t* property); 188e5364c8c02f1a943e78dee600ac45573d5cdcbbfTim Kilbourn 189e5364c8c02f1a943e78dee600ac45573d5cdcbbfTim Kilbournvoid input_free_device_property(input_host_t* host, input_property_t* property); 190e5364c8c02f1a943e78dee600ac45573d5cdcbbfTim Kilbourn 191e5364c8c02f1a943e78dee600ac45573d5cdcbbfTim Kilbournvoid input_free_device_property_map(input_host_t* host, input_property_map_t* map); 1926f783602c05c519238200fed55b0afa097737ca1Michael Wright} 1936f783602c05c519238200fed55b0afa097737ca1Michael Wright 1946f783602c05c519238200fed55b0afa097737ca1Michael Wright} // namespace android 1956f783602c05c519238200fed55b0afa097737ca1Michael Wright#endif // ANDROID_INPUT_DRIVER_H 196