22using Meshtastic . Data . MessageFactories ;
33using Meshtastic . Protobufs ;
44using Microsoft . Extensions . Logging ;
5+ using static Meshtastic . Protobufs . AdminMessage . Types ;
56
67namespace 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}
0 commit comments