Input operations
Hardware rendering operation parts in interface:
Copy this to your project and extend with your parts or leave functions complete away where not used or supported.
Header parts:
bool HasFeature(
const std::string& controller_id,
const std::string& feature_name)
override;
void SetControllerLayouts(
const std::vector<kodi::addon::GameControllerLayout>& controllers)
override;
bool EnableKeyboard(
bool enable,
const std::string& controller_id)
override;
bool EnableMouse(
bool enable,
const std::string& controller_id)
override;
bool ConnectController(
bool connect,
const std::string& port_address,
const std::string& controller_id)
override;
Source parts:
bool CMyInstance::HasFeature(const std::string& controller_id, const std::string& feature_name)
{
return false;
}
{
return nullptr;
}
{
}
void CMyInstance::SetControllerLayouts(const std::vector<kodi::addon::GameControllerLayout>& controllers)
{
}
bool CMyInstance::EnableKeyboard(bool enable, const std::string& controller_id)
{
return false;
}
bool CMyInstance::EnableMouse(bool enable, const std::string& controller_id)
{
return false;
}
bool CMyInstance::ConnectController(bool connect, const std::string& port_address, const std::string& controller_id)
{
return false;
}
{
return false;
}
◆ HasFeature()
virtual bool HasFeature |
( |
const std::string & |
controller_id, |
|
|
const std::string & |
feature_name |
|
) |
| |
|
inlinevirtual |
Check if input is accepted for a feature on the controller.
If only a subset of the controller profile is used, this can return false for unsupported features to not absorb their input.
If the entire controller profile is used, this should always return true.
- Parameters
-
[in] | controller_id | The ID of the controller profile |
[in] | feature_name | The name of a feature in that profile |
- Returns
- true if input is accepted for the feature, false otherwise
◆ GetTopology()
Get the input topology that specifies which controllers can be connected.
- Returns
- The input topology, or null to use the default
If this returns non-null, topology must be freed using FreeTopology().
If this returns null, the topology will default to a single port that can accept all controllers imported by addon.xml. The port ID is set to the DEFAULT_PORT_ID constant.
◆ FreeTopology()
Free the topology's resources.
- Parameters
-
◆ SetControllerLayouts()
Set the layouts for known controllers.
- Parameters
-
[in] | controllers | The controller layouts |
After loading the input topology, the frontend will call this with controller layouts for all controllers discovered in the topology.
◆ EnableKeyboard()
virtual bool EnableKeyboard |
( |
bool |
enable, |
|
|
const std::string & |
controller_id |
|
) |
| |
|
inlinevirtual |
Enable/disable keyboard input using the specified controller.
- Parameters
-
[in] | enable | True to enable input, false otherwise |
[in] | controller_id | The controller ID if enabling, or unused if disabling |
- Returns
- True if keyboard input was enabled, false otherwise
◆ EnableMouse()
virtual bool EnableMouse |
( |
bool |
enable, |
|
|
const std::string & |
controller_id |
|
) |
| |
|
inlinevirtual |
Enable/disable mouse input using the specified controller.
- Parameters
-
[in] | enable | True to enable input, false otherwise |
[in] | controller_id | The controller ID if enabling, or unused if disabling |
- Returns
- True if mouse input was enabled, false otherwise
◆ ConnectController()
virtual bool ConnectController |
( |
bool |
connect, |
|
|
const std::string & |
port_address, |
|
|
const std::string & |
controller_id |
|
) |
| |
|
inlinevirtual |
Connect/disconnect a controller to a port on the virtual game console.
- Parameters
-
[in] | connect | True to connect a controller, false to disconnect |
[in] | port_address | The address of the port |
[in] | controller_id | The controller ID if connecting, or unused if disconnecting |
- Returns
- True if the
controller
was (dis-)connected to the port, false otherwise
The address is a string that allows traversal of the controller topology. It is formed by alternating port IDs and controller IDs separated by "/".
For example, assume that the topology represented in XML for Snes9x is:
<logicaltopology>
<port type="controller" id="1">
<accepts controller="game.controller.snes"/>
<accepts controller="game.controller.snes.multitap">
<port type="controller" id="1">
<accepts controller="game.controller.snes"/>
</port>
<port type="controller" id="2">
<accepts controller="game.controller.snes"/>
</port>
...
</accepts>
</port>
</logicaltopology>
To connect a multitap to the console's first port, the multitap's controller info is set using the port address:
1
To connect a SNES controller to the second port of the multitap, the controller info is next set using the address:
1/game.controller.multitap/2
Any attempts to connect a controller to a port on a disconnected multitap will return false.
◆ InputEvent()
Notify the add-on of an input event.
- Parameters
-
- Returns
- true if the event was handled, false otherwise
◆ KodiInputEvent()
Callback to Kodi Function
Notify the port of an input event
- Parameters
-
- Returns
- true if the event was handled, false otherwise
- Note
- Input events can arrive for the following sources: