Skip to content

Commit dde4b2b

Browse files
committed
Send-input event
1 parent f007a85 commit dde4b2b

File tree

3 files changed

+68
-10
lines changed

3 files changed

+68
-10
lines changed

Meshtastic.Cli/CommandHandlers/SendInputEventCommandHandler.cs

Lines changed: 57 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using Meshtastic.Data.MessageFactories;
33
using Meshtastic.Protobufs;
44
using Microsoft.Extensions.Logging;
5+
using static Meshtastic.Protobufs.AdminMessage.Types;
56

67
namespace Meshtastic.Cli.CommandHandlers;
78

@@ -22,24 +23,70 @@ public async Task<DeviceStateContainer> Handle()
2223

2324
public override async Task OnCompleted(FromRadio packet, DeviceStateContainer container)
2425
{
26+
var adminMessage = GetAdminMessage(container, GetInputEvent());
27+
await Connection.WriteToRadio(ToRadioMessageFactory.CreateMeshPacketMessage(adminMessage), AnyResponseReceived);
28+
// Uncomment the following lines to send some additional input events for testing
29+
// adminMessage = GetAdminMessage(container, GetInputEvent(17)); // INPUT_BROKER_UP
30+
// await Connection.WriteToRadio(ToRadioMessageFactory.CreateMeshPacketMessage(adminMessage), AnyResponseReceived);
31+
// adminMessage = GetAdminMessage(container, GetInputEvent(18)); // INPUT_BROKER_DOWN
32+
// await Connection.WriteToRadio(ToRadioMessageFactory.CreateMeshPacketMessage(adminMessage), AnyResponseReceived);
33+
// adminMessage = GetAdminMessage(container, GetInputEvent(24)); // INPUT_BROKER_BACK
34+
// await Connection.WriteToRadio(ToRadioMessageFactory.CreateMeshPacketMessage(adminMessage), AnyResponseReceived);
35+
// adminMessage = GetAdminMessage(container, GetInputEvent(28)); // INPUT_BROKER_PRESS
36+
// await Connection.WriteToRadio(ToRadioMessageFactory.CreateMeshPacketMessage(adminMessage), AnyResponseReceived);
37+
// adminMessage = GetAdminMessage(container, GetInputEvent(28)); // INPUT_BROKER_PRESS
38+
// await Connection.WriteToRadio(ToRadioMessageFactory.CreateMeshPacketMessage(adminMessage), AnyResponseReceived);
39+
}
40+
41+
private MeshPacket GetAdminMessage(DeviceStateContainer container, InputEvent inputEvent)
42+
{
43+
Logger.LogInformation($"Sending input event (code: {inputEvent.EventCode}) to device...");
2544
var adminMessageFactory = new AdminMessageFactory(container, Destination);
26-
27-
var inputEvent = new AdminMessage.Types.InputEvent()
45+
return adminMessageFactory.CreateSendInputEventMessage(inputEvent);
46+
}
47+
48+
private InputEvent GetInputEvent(uint? overrideEventCode = null)
49+
{
50+
var inputEvent = new InputEvent()
2851
{
29-
EventCode = eventCode
52+
EventCode = overrideEventCode ?? eventCode
3053
};
31-
3254
if (kbChar.HasValue)
3355
inputEvent.KbChar = kbChar.Value;
34-
3556
if (touchX.HasValue)
3657
inputEvent.TouchX = touchX.Value;
37-
3858
if (touchY.HasValue)
3959
inputEvent.TouchY = touchY.Value;
40-
41-
Logger.LogInformation($"Sending input event (code: {eventCode}) to device...");
42-
var adminMessage = adminMessageFactory.CreateSendInputEventMessage(inputEvent);
43-
await Connection.WriteToRadio(ToRadioMessageFactory.CreateMeshPacketMessage(adminMessage), StayConnected);
60+
return inputEvent;
4461
}
62+
63+
/*
64+
// Input broker event codes from firmware
65+
enum input_broker_event {
66+
INPUT_BROKER_NONE = 0,
67+
INPUT_BROKER_SELECT = 10,
68+
INPUT_BROKER_UP = 17,
69+
INPUT_BROKER_DOWN = 18,
70+
INPUT_BROKER_LEFT = 19,
71+
INPUT_BROKER_RIGHT = 20,
72+
INPUT_BROKER_CANCEL = 24,
73+
INPUT_BROKER_BACK = 27,
74+
INPUT_BROKER_USER_PRESS,
75+
INPUT_BROKER_SHUTDOWN = 0x9b,
76+
INPUT_BROKER_GPS_TOGGLE = 0x9e,
77+
INPUT_BROKER_SEND_PING = 0xaf,
78+
INPUT_BROKER_MATRIXKEY = 0xFE,
79+
INPUT_BROKER_ANYKEY = 0xff
80+
};
81+
82+
#define INPUT_BROKER_MSG_BRIGHTNESS_UP 0x11
83+
#define INPUT_BROKER_MSG_BRIGHTNESS_DOWN 0x12
84+
#define INPUT_BROKER_MSG_REBOOT 0x90
85+
#define INPUT_BROKER_MSG_MUTE_TOGGLE 0xac
86+
#define INPUT_BROKER_MSG_FN_SYMBOL_ON 0xf1
87+
#define INPUT_BROKER_MSG_FN_SYMBOL_OFF 0xf2
88+
#define INPUT_BROKER_MSG_BLUETOOTH_TOGGLE 0xAA
89+
#define INPUT_BROKER_MSG_TAB 0x09
90+
#define INPUT_BROKER_MSG_EMOTE_LIST 0x8F
91+
*/
4592
}

Meshtastic/Data/MessageFactories/AdminMessageFactory.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,4 +161,9 @@ public MeshPacket CreateSendInputEventMessage(AdminMessage.Types.InputEvent inpu
161161
{
162162
return GetNewMeshPacket(new AdminMessage() { SendInputEvent = inputEvent });
163163
}
164+
165+
public MeshPacket CreateGetOwnerMessage()
166+
{
167+
return GetNewMeshPacket(new AdminMessage() { GetOwnerRequest = true });
168+
}
164169
}

Meshtastic/Data/MessageFactories/ToRadioMessageFactory.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,12 @@ public ToRadio CreateWantConfigMessage() =>
2323
WantConfigId = (uint)Random.Shared.Next(),
2424
};
2525

26+
public ToRadio CreateWantConfigOnlyMessage() =>
27+
new()
28+
{
29+
WantConfigId = 69421,
30+
};
31+
2632
public ToRadio CreateMeshPacketMessage(MeshPacket packet) =>
2733
new()
2834
{

0 commit comments

Comments
 (0)