Skip to content

Commit d196d99

Browse files
committed
configurable pixel
1 parent 30f58ae commit d196d99

4 files changed

Lines changed: 36 additions & 12 deletions

File tree

Keypad.Flasher.Server.Tests/ConfigurationGeneratorTests.cs

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ public void GenerateHeader_MatchesExpectedLayout()
1818
new ButtonBinding(2, false, 0, true, true, new HidFunctionBinding("hid_consumer_volume_up"))
1919
},
2020
Array.Empty<EncoderBinding>(),
21-
DebugMode: false);
21+
DebugMode: false,
22+
NeoPixelPin: 34);
2223

2324
var expected = Lines(
2425
"#pragma once",
@@ -48,20 +49,36 @@ public void GenerateHeader_WithMultipleLedIndices_ComputesNeoCountFromBindings()
4849
new ButtonBinding(2, true, 4, false, false, new HidSequenceBinding("b", 0))
4950
},
5051
Array.Empty<EncoderBinding>(),
51-
DebugMode: false);
52+
DebugMode: false,
53+
NeoPixelPin: 34);
5254

5355
var result = Generator.GenerateHeader(configuration);
5456

5557
Assert.That(result, Does.Contain("#define NEO_COUNT 5"));
5658
}
5759

60+
[Test]
61+
public void GenerateHeader_WithCustomNeoPixelPin_EmitsPin()
62+
{
63+
var configuration = new ConfigurationDefinition(
64+
Array.Empty<ButtonBinding>(),
65+
Array.Empty<EncoderBinding>(),
66+
DebugMode: false,
67+
NeoPixelPin: 31);
68+
69+
var result = Generator.GenerateHeader(configuration);
70+
71+
Assert.That(result, Does.Contain("#define PIN_NEO P31"));
72+
}
73+
5874
[Test]
5975
public void GenerateHeader_WithDebugMode_EmitsFlag()
6076
{
6177
var configuration = new ConfigurationDefinition(
6278
Array.Empty<ButtonBinding>(),
6379
Array.Empty<EncoderBinding>(),
64-
DebugMode: true);
80+
DebugMode: true,
81+
NeoPixelPin: 34);
6582

6683
var result = Generator.GenerateHeader(configuration);
6784

@@ -89,7 +106,7 @@ public void GenerateSource_WithTwoButtons_WritesExpectedConfiguration()
89106
Function: new HidFunctionBinding("hid_consumer_volume_down"))
90107
};
91108

92-
var configuration = new ConfigurationDefinition(buttons, Array.Empty<EncoderBinding>(), DebugMode: false);
109+
var configuration = new ConfigurationDefinition(buttons, Array.Empty<EncoderBinding>(), DebugMode: false, NeoPixelPin: 34);
93110

94111
var expected = ReadExpected("generate_source_2_buttons.c");
95112

@@ -133,7 +150,7 @@ public void GenerateSource_WithFourButtons_WritesExpectedConfiguration()
133150
Function: new HidFunctionBinding("hid_consumer_volume_down"))
134151
};
135152

136-
var configuration = new ConfigurationDefinition(buttons, Array.Empty<EncoderBinding>(), DebugMode: false);
153+
var configuration = new ConfigurationDefinition(buttons, Array.Empty<EncoderBinding>(), DebugMode: false, NeoPixelPin: 34);
137154

138155
var expected = ReadExpected("generate_source_4_buttons.c");
139156

@@ -151,7 +168,7 @@ public void GenerateSource_WithTwoButtonModule_WritesExpectedConfiguration()
151168
new ButtonBinding(14, true, 1, false, false, new HidSequenceBinding("2", 0))
152169
};
153170

154-
var configuration = new ConfigurationDefinition(buttons, Array.Empty<EncoderBinding>(), DebugMode: false);
171+
var configuration = new ConfigurationDefinition(buttons, Array.Empty<EncoderBinding>(), DebugMode: false, NeoPixelPin: 34);
155172

156173
var expected = ReadExpected("generate_source_2_button_module.c");
157174

@@ -173,7 +190,7 @@ public void GenerateSource_WithDebugMode_WritesInactiveBindings()
173190
new EncoderBinding(10, 11, new HidFunctionBinding("hid_consumer_volume_up"), new HidFunctionBinding("hid_consumer_volume_down"))
174191
};
175192

176-
var configuration = new ConfigurationDefinition(buttons, encoders, DebugMode: true);
193+
var configuration = new ConfigurationDefinition(buttons, encoders, DebugMode: true, NeoPixelPin: 34);
177194

178195
var result = Generator.GenerateSource(configuration);
179196

@@ -198,7 +215,7 @@ public void GenerateSource_WithTenButtons_WritesExpectedConfiguration()
198215
new ButtonBinding(16, true, 9, false, false, new HidSequenceBinding("j", 0))
199216
};
200217

201-
var configuration = new ConfigurationDefinition(buttons, Array.Empty<EncoderBinding>(), DebugMode: false);
218+
var configuration = new ConfigurationDefinition(buttons, Array.Empty<EncoderBinding>(), DebugMode: false, NeoPixelPin: 34);
202219

203220
var expected = ReadExpected("generate_source_10_buttons.c");
204221

@@ -251,7 +268,7 @@ public void GenerateSource_WithFourButtonsAndEncoder_WritesExpectedConfiguration
251268
CounterClockwise: new HidFunctionBinding("hid_consumer_volume_down"))
252269
};
253270

254-
var configuration = new ConfigurationDefinition(buttons, encoders, DebugMode: false);
271+
var configuration = new ConfigurationDefinition(buttons, encoders, DebugMode: false, NeoPixelPin: 34);
255272

256273
var expected = ReadExpected("generate_source_4_buttons_1_dial.c");
257274

Keypad.Flasher.Server/Configuration/ConfigurationGenerator.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,12 @@ public class ConfigurationGenerator
77
public string GenerateHeader(ConfigurationDefinition configuration)
88
{
99
var neoPixelCount = CalculateNeoPixelCount(configuration.Buttons);
10+
var neoPixelPin = configuration.NeoPixelPin;
11+
if (neoPixelPin < 0)
12+
{
13+
throw new ArgumentOutOfRangeException(nameof(configuration), "NeoPixel pin must be non-negative.");
14+
}
15+
var neoPixelPinMacro = $"P{neoPixelPin}";
1016

1117
var sb = new StringBuilder();
1218
sb.AppendLine("#pragma once");
@@ -17,7 +23,7 @@ public string GenerateHeader(ConfigurationDefinition configuration)
1723
sb.AppendLine($"#define CONFIGURATION_ENCODER_CAPACITY {configuration.Encoders.Count}");
1824
sb.AppendLine($"#define CONFIGURATION_DEBUG_MODE {ToCInteger(configuration.DebugMode)}");
1925
sb.AppendLine();
20-
sb.AppendLine("#define PIN_NEO P34");
26+
sb.AppendLine($"#define PIN_NEO {neoPixelPinMacro}");
2127
sb.AppendLine($"#define NEO_COUNT {neoPixelCount}");
2228
sb.AppendLine("#define NEO_GRB");
2329
return sb.ToString();

Keypad.Flasher.Server/Configuration/ConfigurationModel.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,5 +31,6 @@ public sealed record EncoderBinding(
3131
public sealed record ConfigurationDefinition(
3232
IReadOnlyList<ButtonBinding> Buttons,
3333
IReadOnlyList<EncoderBinding> Encoders,
34-
bool DebugMode);
34+
bool DebugMode,
35+
int NeoPixelPin);
3536
}

Keypad.Flasher.Server/Controllers/FlasherController.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ internal static ConfigurationDefinition CreateDefaultConfiguration()
149149
Function: new HidSequenceBinding("2", 0))
150150
};
151151

152-
return new ConfigurationDefinition(buttons, Array.Empty<EncoderBinding>(), DebugMode: false);
152+
return new ConfigurationDefinition(buttons, Array.Empty<EncoderBinding>(), DebugMode: false, NeoPixelPin: 34);
153153
}
154154

155155
private bool IsDebugRequested()

0 commit comments

Comments
 (0)