• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

meshtastic / c-sharp / 14996027594

13 May 2025 12:00PM UTC coverage: 58.837% (+0.04%) from 58.797%
14996027594

push

github

web-flow
Merge pull request #114 from meshtastic/wip

Add add contact from url

183 of 518 branches covered (35.33%)

Branch coverage included in aggregate %.

6 of 9 new or added lines in 2 files covered. (66.67%)

859 of 1253 relevant lines covered (68.56%)

5.36 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

80.25
/Meshtastic/Data/MessageFactories/AdminMessageFactory.cs
1
using Google.Protobuf;
2
using Meshtastic.Protobufs;
3
using static Meshtastic.Protobufs.Config.Types;
4
using static Meshtastic.Protobufs.ModuleConfig.Types;
5

6
namespace Meshtastic.Data.MessageFactories;
7

8
public class AdminMessageFactory
9
{
10
    private readonly DeviceStateContainer container;
11
    private readonly uint? dest;
12

13
    public AdminMessageFactory(DeviceStateContainer container, uint? dest = null)
14
    {
13✔
15
        this.container = container;
13✔
16
        this.dest = dest;
13✔
17
    }
13✔
18

19
    private MeshPacket GetNewMeshPacket(AdminMessage message)
20
    {
25✔
21
        return new MeshPacket()
25!
22
        {
25✔
23
            Channel = container.GetAdminChannelIndex(),
25✔
24
            WantAck = false,
25✔
25
            To = dest ?? container.MyNodeInfo.MyNodeNum,
25✔
26
            Id = (uint)Math.Floor(Random.Shared.Next() * 1e9),
25✔
27
            HopLimit = container?.GetHopLimitOrDefault() ?? 3,
25✔
28
            Decoded = new Protobufs.Data()
25✔
29
            {
25✔
30
                Portnum = PortNum.AdminApp,
25✔
31
                Payload = message.ToByteString(),
25✔
32
                WantResponse = true,
25✔
33
            },
25✔
34
        };
25✔
35
    }
25✔
36

37
    public MeshPacket CreateBeginEditSettingsMessage() =>
38
        GetNewMeshPacket(new AdminMessage()
1✔
39
        {
1✔
40
            BeginEditSettings = true
1✔
41
        });
1✔
42

43
    public MeshPacket CreateCommitEditSettingsMessage() =>
44
        GetNewMeshPacket(new AdminMessage()
1✔
45
        {
1✔
46
            CommitEditSettings = true
1✔
47
        });
1✔
48

49
    public MeshPacket CreateRebootMessage(int seconds, bool isOta)
50
    {
2✔
51
        if (isOta)
2✔
52
        {
1✔
53
            return GetNewMeshPacket(new AdminMessage()
1✔
54
            {
1✔
55
                RebootOtaSeconds = seconds
1✔
56
            });
1✔
57
        }
58
        return GetNewMeshPacket(new AdminMessage()
1✔
59
        {
1✔
60
            RebootSeconds = seconds
1✔
61
        });
1✔
62
    }
2✔
63

64
    public MeshPacket CreateEnterDfuMessage()
65
    {
×
66
        return GetNewMeshPacket(new AdminMessage()
×
67
        {
×
68
            EnterDfuModeRequest = true,
×
69
        });
×
70
    }
×
71

72
    public MeshPacket CreateSetConfigMessage(object instance)
73
    {
8✔
74
        var config = instance switch
8✔
75
        {
8✔
76
            BluetoothConfig => new Config() { Bluetooth = instance as BluetoothConfig },
1✔
77
            DeviceConfig => new Config() { Device = instance as DeviceConfig },
1✔
78
            DisplayConfig => new Config() { Display = instance as DisplayConfig },
1✔
79
            LoRaConfig => new Config() { Lora = instance as LoRaConfig },
1✔
80
            NetworkConfig => new Config() { Network = instance as NetworkConfig },
1✔
81
            PositionConfig => new Config() { Position = instance as PositionConfig },
1✔
82
            PowerConfig => new Config() { Power = instance as PowerConfig },
1✔
83
            _ => throw new ArgumentException("Could not determine Config type", nameof(instance)),
1✔
84
        };
8✔
85
        return GetNewMeshPacket(new AdminMessage() { SetConfig = config! });
7✔
86
    }
7✔
87

88
    public MeshPacket CreateSetModuleConfigMessage(object instance)
89
    {
9✔
90
        var moduleConfig = instance switch
9!
91
        {
9✔
92
            AudioConfig => new ModuleConfig() { Audio = instance as AudioConfig },
1✔
93
            CannedMessageConfig => new ModuleConfig() { CannedMessage = instance as CannedMessageConfig },
1✔
94
            ExternalNotificationConfig => new ModuleConfig() { ExternalNotification = instance as ExternalNotificationConfig },
1✔
95
            MQTTConfig => new ModuleConfig() { Mqtt = instance as MQTTConfig },
1✔
96
            RangeTestConfig => new ModuleConfig() { RangeTest = instance as RangeTestConfig },
1✔
97
            SerialConfig => new ModuleConfig() { Serial = instance as SerialConfig },
1✔
98
            StoreForwardConfig => new ModuleConfig() { StoreForward = instance as StoreForwardConfig },
1✔
99
            TelemetryConfig => new ModuleConfig() { Telemetry = instance as TelemetryConfig },
1✔
100
            RemoteHardwareConfig => new ModuleConfig() { RemoteHardware = instance as RemoteHardwareConfig },
×
101
            NeighborInfoConfig => new ModuleConfig() { NeighborInfo = instance as NeighborInfoConfig },
×
102
            AmbientLightingConfig => new ModuleConfig() { AmbientLighting = instance as AmbientLightingConfig },
×
103
            DetectionSensorConfig => new ModuleConfig() { DetectionSensor = instance as DetectionSensorConfig },
×
104

9✔
105
            _ => throw new ArgumentException("Could not determine ModuleConfig type", nameof(instance)),
1✔
106
        };
9✔
107
        return GetNewMeshPacket(new AdminMessage() { SetModuleConfig = moduleConfig! });
8✔
108
    }
8✔
109

110
    public MeshPacket CreateSetChannelMessage(Channel channel)
111
    {
1✔
112
        return GetNewMeshPacket(new AdminMessage() { SetChannel = channel });
1✔
113
    }
1✔
114

115
    public MeshPacket CreateAddContactMessage(SharedContact contact)
NEW
116
    {
×
NEW
117
        return GetNewMeshPacket(new AdminMessage() { AddContact = contact });
×
NEW
118
    }
×
119

120
    public MeshPacket CreateGetMetadataMessage()
121
    {
1✔
122
        return GetNewMeshPacket(new AdminMessage() { GetDeviceMetadataRequest = true });
1✔
123
    }
1✔
124

125
    public MeshPacket CreateFactoryResetMessage()
126
    {
1✔
127
        return GetNewMeshPacket(new AdminMessage() { FactoryResetConfig = 1 });
1✔
128
    }
1✔
129
    public MeshPacket CreateNodeDbResetMessage()
130
    {
1✔
131
        return GetNewMeshPacket(new AdminMessage() { NodedbReset = 1 });
1✔
132
    }
1✔
133
    public MeshPacket CreateRemoveByNodenumMessage(uint nodeNum)
134
    {
×
135
        return GetNewMeshPacket(new AdminMessage() { RemoveByNodenum = nodeNum });
×
136
    }
×
137
    public MeshPacket CreateSetCannedMessage(string message)
138
    {
1✔
139
        return GetNewMeshPacket(new AdminMessage() { SetCannedMessageModuleMessages = message });
1✔
140
    }
1✔
141
    public MeshPacket CreateGetCannedMessage()
142
    {
1✔
143
        return GetNewMeshPacket(new AdminMessage() { GetCannedMessageModuleMessagesRequest = true });
1✔
144
    }
1✔
145
    public MeshPacket CreateSetOwnerMessage(User user)
146
    {
×
147
        return GetNewMeshPacket(new AdminMessage() { SetOwner = user });
×
148
    }
×
149

150
    public MeshPacket CreateFixedPositionMessage(Position position)
151
    {
×
152
        return GetNewMeshPacket(new AdminMessage() { SetFixedPosition = position });
×
153
    }
×
154

155
    public MeshPacket RemovedFixedPositionMessage()
156
    {
×
157
        return GetNewMeshPacket(new AdminMessage() { RemoveFixedPosition = true });
×
158
    }
×
159
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc