Skip to content

Commit 483eb25

Browse files
authored
Omit mask name suffix from firmware group masks (#115)
Firmware mask names cannot clash with register names so a suffix is currently required. If the common Mask suffix is used, it will be dropped from firmware definitions since enum classes are not available in C and therefore no name clash exists. Refactored firmware naming convention functions into common helper class.
1 parent 030a054 commit 483eb25

File tree

13 files changed

+341
-61
lines changed

13 files changed

+341
-61
lines changed

src/AppFuncs.tt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
<#
3232
foreach (var registerMetadata in DeviceMetadata.Registers)
3333
{
34-
var registerName = FirmwareNamingConvention.Instance.Apply(registerMetadata.Key);
34+
var registerName = TemplateHelper.GetFirmwareName(registerMetadata.Key);
3535
#>
3636
void app_read_REG_<#= registerName #>(void);
3737
<#
@@ -41,7 +41,7 @@ void app_read_REG_<#= registerName #>(void);
4141
<#
4242
foreach (var registerMetadata in DeviceMetadata.Registers)
4343
{
44-
var registerName = FirmwareNamingConvention.Instance.Apply(registerMetadata.Key);
44+
var registerName = TemplateHelper.GetFirmwareName(registerMetadata.Key);
4545
#>
4646
bool app_write_REG_<#= registerName #>(void *a);
4747
<#

src/AppFuncsImpl.tt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ void (*app_func_rd_pointer[])(void) = {
2525
registerIndex = 0;
2626
foreach (var registerMetadata in deviceRegisters)
2727
{
28-
var registerName = FirmwareNamingConvention.Instance.Apply(registerMetadata.Key);
28+
var registerName = TemplateHelper.GetFirmwareName(registerMetadata.Key);
2929
#>
3030
&app_read_REG_<#= registerName #><#= ++registerIndex < deviceRegisters.Count ? "," : string.Empty #>
3131
<#
@@ -38,7 +38,7 @@ bool (*app_func_wr_pointer[])(void*) = {
3838
registerIndex = 0;
3939
foreach (var registerMetadata in deviceRegisters)
4040
{
41-
var registerName = FirmwareNamingConvention.Instance.Apply(registerMetadata.Key);
41+
var registerName = TemplateHelper.GetFirmwareName(registerMetadata.Key);
4242
#>
4343
&app_write_REG_<#= registerName #><#= ++registerIndex < deviceRegisters.Count ? "," : string.Empty #>
4444
<#
@@ -49,7 +49,7 @@ foreach (var registerMetadata in deviceRegisters)
4949
foreach (var registerMetadata in deviceRegisters)
5050
{
5151
var register = registerMetadata.Value;
52-
var registerName = FirmwareNamingConvention.Instance.Apply(registerMetadata.Key);
52+
var registerName = TemplateHelper.GetFirmwareName(registerMetadata.Key);
5353
var firmwareType = TemplateHelper.GetFirmwareType(register.Type);
5454
var allowWrite = (register.Access & RegisterAccess.Write) != 0;
5555
var isArrayRegister = register.Length > 0;

src/AppRegs.tt

Lines changed: 18 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ int totalRegisterSize = 0;
2222
foreach (var registerMetadata in DeviceMetadata.Registers)
2323
{
2424
var register = registerMetadata.Value;
25-
var registerName = FirmwareNamingConvention.Instance.Apply(registerMetadata.Key);
25+
var registerName = TemplateHelper.GetFirmwareName(registerMetadata.Key);
2626
maxRegisterNameLength = Math.Max(maxRegisterNameLength, registerName.Length);
2727
minRegisterAddress = Math.Min(minRegisterAddress, register.Address);
2828
maxRegisterAddress = Math.Max(maxRegisterAddress, register.Address);
@@ -33,8 +33,8 @@ foreach (var registerMetadata in DeviceMetadata.Registers)
3333
void init_ios(void);
3434
<#
3535
var maxPinNameLength = Math.Max(
36-
inputPins.Count > 0 ? inputPins.Max(pin => FirmwareNamingConvention.Instance.Apply(pin.Key).Length) : 0,
37-
outputPins.Count > 0 ? outputPins.Max(pin => FirmwareNamingConvention.Instance.Apply(pin.Key).Length) : 0);
36+
inputPins.Count > 0 ? inputPins.Max(pin => TemplateHelper.GetFirmwareName(pin.Key).Length) : 0,
37+
outputPins.Count > 0 ? outputPins.Max(pin => TemplateHelper.GetFirmwareName(pin.Key).Length) : 0);
3838
if (inputPins.Count > 0)
3939
{
4040
#>
@@ -44,7 +44,7 @@ if (inputPins.Count > 0)
4444
<#
4545
foreach (var pin in inputPins)
4646
{
47-
var pinName = FirmwareNamingConvention.Instance.Apply(pin.Key);
47+
var pinName = TemplateHelper.GetFirmwareName(pin.Key);
4848
var descriptionOffset = maxPinNameLength - pinName.Length + 10;
4949
#>
5050
// <#= pinName #><#= new string(' ', descriptionOffset) #>Description: <#= pin.Value.Description #>
@@ -56,7 +56,7 @@ if (inputPins.Count > 0)
5656
foreach (var pin in inputPins)
5757
{
5858
var pinInfo = pin.Value;
59-
var pinName = FirmwareNamingConvention.Instance.Apply(pin.Key);
59+
var pinName = TemplateHelper.GetFirmwareName(pin.Key);
6060
var nameOffset = maxPinNameLength - pinName.Length + 4;
6161
#>
6262
#define read_<#= pinName #> read_io(<#= pinInfo.Port #>, <#= pinInfo.PinNumber #>)<#= new string(' ', nameOffset) #>// <#= pinName #>
@@ -77,7 +77,7 @@ if (outputPins.Count > 0)
7777
<#
7878
foreach (var pin in outputPins)
7979
{
80-
var pinName = FirmwareNamingConvention.Instance.Apply(pin.Key);
80+
var pinName = TemplateHelper.GetFirmwareName(pin.Key);
8181
var descriptionOffset = maxPinNameLength - pinName.Length + 10;
8282
#>
8383
// <#= pinName #><#= new string(' ', descriptionOffset) #>Description: <#= pin.Value.Description #>
@@ -88,7 +88,7 @@ if (outputPins.Count > 0)
8888
foreach (var pin in outputPins)
8989
{
9090
var pinInfo = pin.Value;
91-
var pinName = FirmwareNamingConvention.Instance.Apply(pin.Key);
91+
var pinName = TemplateHelper.GetFirmwareName(pin.Key);
9292
var setFunc = pinInfo.Invert ? "clear_io" : "set_io";
9393
var clrFunc = pinInfo.Invert ? "set_io" : "clear_io";
9494
#>
@@ -114,7 +114,7 @@ typedef struct
114114
foreach (var registerMetadata in DeviceMetadata.Registers)
115115
{
116116
var register = registerMetadata.Value;
117-
var registerName = FirmwareNamingConvention.Instance.Apply(registerMetadata.Key);
117+
var registerName = TemplateHelper.GetFirmwareName(registerMetadata.Key);
118118
var arrayType = register.Length > 0 ? $"[{register.Length}]" : string.Empty;
119119
var firmwareType = TemplateHelper.GetFirmwareType(register.Type);
120120
#>
@@ -133,7 +133,7 @@ foreach (var registerMetadata in DeviceMetadata.Registers)
133133
{
134134
var register = registerMetadata.Value;
135135
var registerAddress = register.Address.ToString();
136-
var registerName = FirmwareNamingConvention.Instance.Apply(registerMetadata.Key);
136+
var registerName = TemplateHelper.GetFirmwareName(registerMetadata.Key);
137137
var registerType = TemplateHelper.GetFirmwareRegisterType(register.Type);
138138
var addressOffset = new string(' ', maxRegisterNameLength - registerName.Length - registerAddress.Length + 6);
139139
var descriptionOffset = new string(' ', 7 - registerType.Length);
@@ -158,25 +158,17 @@ foreach (var registerMetadata in DeviceMetadata.Registers)
158158
/* Registers' bits */
159159
/************************************************************************/
160160
<#
161-
var maxBitNameLength = DeviceMetadata.BitMasks.Values
162-
.SelectMany(mask => mask.Bits)
163-
.Select(bitField => FirmwareNamingConvention.Instance.Apply(bitField.Key).Length)
164-
.Prepend(0).Max();
165-
var maxMemberNameLength = (from groupMask in DeviceMetadata.GroupMasks
166-
let maskName = FirmwareGroupMaskNamingConvention.Instance.Apply(groupMask.Key)
167-
from member in groupMask.Value.Values
168-
let memberName = FirmwareNamingConvention.Instance.Apply(member.Key)
169-
select maskName.Length + memberName.Length)
170-
.Prepend(0).Max();
171-
var maxBitMemberNameLength = Math.Max(maxBitNameLength, maxMemberNameLength);
161+
var maxBitMaskNameLength = TemplateHelper.GetMaxFirmwareBitMaskNameLength(DeviceMetadata);
162+
var maxGroupMaskNameLength = TemplateHelper.GetMaxFirmwareGroupMaskNameLength(DeviceMetadata);
163+
var maxMaskNameLength = Math.Max(maxBitMaskNameLength, maxGroupMaskNameLength);
172164
foreach (var bitMask in DeviceMetadata.BitMasks)
173165
{
174166
var mask = bitMask.Value;
175167
foreach (var bitField in mask.Bits)
176168
{
177169
var fieldInfo = bitField.Value;
178-
var fieldName = FirmwareNamingConvention.Instance.Apply(bitField.Key);
179-
var fieldNamePadding = new string(' ', maxBitMemberNameLength - fieldName.Length + 6);
170+
var fieldName = TemplateHelper.GetFirmwareName(bitField.Key);
171+
var fieldNamePadding = new string(' ', maxMaskNameLength - fieldName.Length + 6);
180172
var bitShift = (int)Math.Log(fieldInfo.Value, 2);
181173
var bitShiftPadding = new string(' ', 8 - bitShift.ToString().Length);
182174
#>
@@ -190,8 +182,8 @@ foreach (var groupMask in DeviceMetadata.GroupMasks)
190182
{
191183
var mask = groupMask.Value;
192184
var maskSelect = TemplateHelper.GetMaskSelect(mask).ToString("X2");
193-
var maskName = FirmwareGroupMaskNamingConvention.Instance.Apply(groupMask.Key);
194-
var maskNamePadding = new string(' ', maxBitMemberNameLength - maskName.Length);
185+
var maskName = TemplateHelper.GetFirmwareGroupMaskName(groupMask.Key);
186+
var maskNamePadding = new string(' ', maxMaskNameLength - maskName.Length);
195187
var maskSelectPadding = new string(' ', 11 - maskSelect.Length);
196188
#>
197189
#define MSK_<#= maskName #>_SEL<#= maskNamePadding #>0x<#= maskSelect #><#= maskSelectPadding #>//
@@ -200,8 +192,8 @@ foreach (var groupMask in DeviceMetadata.GroupMasks)
200192
foreach (var member in mask.Values)
201193
{
202194
var memberInfo = member.Value;
203-
var memberName = FirmwareNamingConvention.Instance.Apply(member.Key);
204-
var memberNamePadding = new string(' ', maxBitMemberNameLength - memberName.Length - maskName.Length + 4);
195+
var memberName = TemplateHelper.GetFirmwareName(member.Key);
196+
var memberNamePadding = new string(' ', maxMaskNameLength - memberName.Length - maskName.Length + 4);
205197
var memberHexValue = memberInfo.Value.ToString("X2");
206198
var memberHexPadding = new string(' ', 11 - memberHexValue.Length);
207199
#>

src/AppRegsImpl.tt

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ int totalRegisterSize = 0;
2626
foreach (var registerMetadata in deviceRegisters)
2727
{
2828
var register = registerMetadata.Value;
29-
var registerName = FirmwareNamingConvention.Instance.Apply(registerMetadata.Key);
29+
var registerName = TemplateHelper.GetFirmwareName(registerMetadata.Key);
3030
maxRegisterNameLength = Math.Max(maxRegisterNameLength, registerName.Length);
3131
minRegisterAddress = Math.Min(minRegisterAddress, register.Address);
3232
maxRegisterAddress = Math.Max(maxRegisterAddress, register.Address);
@@ -40,8 +40,8 @@ foreach (var registerMetadata in deviceRegisters)
4040
void init_ios(void)
4141
{<#
4242
var maxPinNameLength = Math.Max(
43-
inputPins.Count > 0 ? inputPins.Max(pin => FirmwareNamingConvention.Instance.Apply(pin.Key).Length) : 0,
44-
outputPins.Count > 0 ? outputPins.Max(pin => FirmwareNamingConvention.Instance.Apply(pin.Key).Length) : 0);
43+
inputPins.Count > 0 ? inputPins.Max(pin => TemplateHelper.GetFirmwareName(pin.Key).Length) : 0,
44+
outputPins.Count > 0 ? outputPins.Max(pin => TemplateHelper.GetFirmwareName(pin.Key).Length) : 0);
4545
if (inputPins.Count > 0)
4646
{
4747
#>
@@ -51,7 +51,7 @@ if (inputPins.Count > 0)
5151
foreach (var pin in inputPins)
5252
{
5353
var pinInfo = pin.Value;
54-
var pinName = FirmwareNamingConvention.Instance.Apply(pin.Key);
54+
var pinName = TemplateHelper.GetFirmwareName(pin.Key);
5555
var pullMode = TemplateHelper.GetFirmwarePullMode(pinInfo.PinMode);
5656
var senseMode = TemplateHelper.GetFirmwareSenseMode(pinInfo.TriggerMode);
5757
var descriptionPadding = new string(' ', 49 - pinInfo.Port.Length - pullMode.Length - senseMode.Length);
@@ -72,7 +72,7 @@ if (inputPins.Count > 0)
7272
var pinInfo = pin.Value;
7373
var port = pinInfo.Port;
7474
var pinNumber = pinInfo.PinNumber.ToString();
75-
var pinName = FirmwareNamingConvention.Instance.Apply(pin.Key);
75+
var pinName = TemplateHelper.GetFirmwareName(pin.Key);
7676
if (!pinInfo.InterruptNumber.HasValue)
7777
Error($"({pinName}) Interrupt number must be specified if interrupt priority is set.");
7878
var interruptNumber = pinInfo.InterruptNumber.GetValueOrDefault();
@@ -94,7 +94,7 @@ if (outputPins.Count > 0)
9494
foreach (var pin in outputPins)
9595
{
9696
var pinInfo = pin.Value;
97-
var pinName = FirmwareNamingConvention.Instance.Apply(pin.Key);
97+
var pinName = TemplateHelper.GetFirmwareName(pin.Key);
9898
var descriptionOffset = maxPinNameLength - pinName.Length + 10;
9999
var inputEnable = pinInfo.AllowRead ? "IN_EN_IO_EN" : "IN_EN_IO_DIS";
100100
var outMode = TemplateHelper.GetFirmwareOutputIO(pinInfo.PinMode);
@@ -110,7 +110,7 @@ if (outputPins.Count > 0)
110110
}
111111
foreach (var pin in outputPins)
112112
{
113-
var pinName = FirmwareNamingConvention.Instance.Apply(pin.Key);
113+
var pinName = TemplateHelper.GetFirmwareName(pin.Key);
114114
var pinState = pin.Value.InitialState > 0 ? "set" : "clr";
115115
#>
116116
<#= pinState #>_<#= pinName #>;
@@ -154,7 +154,7 @@ uint8_t *app_regs_pointer[] = {
154154
registerIndex = 0;
155155
foreach (var registerMetadata in deviceRegisters)
156156
{
157-
var registerName = FirmwareNamingConvention.Instance.Apply(registerMetadata.Key);
157+
var registerName = TemplateHelper.GetFirmwareName(registerMetadata.Key);
158158
#>
159159
(uint8_t*)(&app_regs.REG_<#= registerName #>)<#= ++registerIndex < deviceRegisters.Count ? "," : string.Empty #>
160160
<#

src/Firmware.cs

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -283,6 +283,37 @@ public static string GetFirmwareType(PayloadType payloadType)
283283
};
284284
}
285285

286+
public static string GetFirmwareName(string value)
287+
{
288+
return FirmwareNamingConvention.Instance.Apply(value);
289+
}
290+
291+
public static string GetFirmwareGroupMaskName(string value)
292+
{
293+
var suffixIndex = value.LastIndexOf("Mask");
294+
if (suffixIndex >= 1)
295+
value = value.Substring(0, suffixIndex);
296+
return GetFirmwareName(value);
297+
}
298+
299+
public static int GetMaxFirmwareBitMaskNameLength(DeviceInfo deviceMetadata)
300+
{
301+
return deviceMetadata.BitMasks.Values
302+
.SelectMany(mask => mask.Bits)
303+
.Select(bitField => GetFirmwareName(bitField.Key).Length)
304+
.Prepend(0).Max();
305+
}
306+
307+
public static int GetMaxFirmwareGroupMaskNameLength(DeviceInfo deviceMetadata)
308+
{
309+
return (from groupMask in deviceMetadata.GroupMasks
310+
let maskName = GetFirmwareGroupMaskName(groupMask.Key)
311+
from member in groupMask.Value.Values
312+
let memberName = GetFirmwareName(member.Key)
313+
select maskName.Length + memberName.Length)
314+
.Prepend(0).Max();
315+
}
316+
286317
public static string GetFirmwareRegisterType(PayloadType payloadType)
287318
{
288319
return payloadType switch

src/Interrupts.tt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ var interruptPins = TemplateHelper.GetPortPinsOfType<InputPinInfo>(PortPinMetada
4242
foreach (var pin in interruptPins)
4343
{
4444
var pinInfo = pin.Value;
45-
var pinName = FirmwareNamingConvention.Instance.Apply(pin.Key);
45+
var pinName = TemplateHelper.GetFirmwareName(pin.Key);
4646
if (!pinInfo.InterruptNumber.HasValue)
4747
Error($"({pinName}) Interrupt number must be specified if interrupt priority is set.");
4848
var interruptNumber = pinInfo.InterruptNumber.GetValueOrDefault();

tests/ExpectedOutput/device.app_funcs.c

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ void (*app_func_rd_pointer[])(void) = {
2222
&app_read_REG_PULSE_DO_PORT0,
2323
&app_read_REG_PULSE_DO0,
2424
&app_read_REG_START_PULSE,
25-
&app_read_REG_START_PULSE_TRAIN
25+
&app_read_REG_START_PULSE_TRAIN,
26+
&app_read_REG_ENCODER_MODE
2627
};
2728

2829
bool (*app_func_wr_pointer[])(void*) = {
@@ -39,7 +40,8 @@ bool (*app_func_wr_pointer[])(void*) = {
3940
&app_write_REG_PULSE_DO_PORT0,
4041
&app_write_REG_PULSE_DO0,
4142
&app_write_REG_START_PULSE,
42-
&app_write_REG_START_PULSE_TRAIN
43+
&app_write_REG_START_PULSE_TRAIN,
44+
&app_write_REG_ENCODER_MODE
4345
};
4446

4547
/************************************************************************/
@@ -244,3 +246,20 @@ bool app_write_REG_START_PULSE_TRAIN(void *a)
244246
app_regs.REG_START_PULSE_TRAIN[0] = reg[0];
245247
return true;
246248
}
249+
250+
/************************************************************************/
251+
/* REG_ENCODER_MODE */
252+
/************************************************************************/
253+
void app_read_REG_ENCODER_MODE(void)
254+
{
255+
//app_regs.REG_ENCODER_MODE = 0;
256+
257+
}
258+
259+
bool app_write_REG_ENCODER_MODE(void *a)
260+
{
261+
uint8_t reg = *((uint8_t*)a);
262+
263+
app_regs.REG_ENCODER_MODE = reg;
264+
return true;
265+
}

tests/ExpectedOutput/device.app_funcs.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ void app_read_REG_PULSE_DO_PORT0(void);
3434
void app_read_REG_PULSE_DO0(void);
3535
void app_read_REG_START_PULSE(void);
3636
void app_read_REG_START_PULSE_TRAIN(void);
37+
void app_read_REG_ENCODER_MODE(void);
3738

3839
bool app_write_REG_DIGITAL_INPUTS(void *a);
3940
bool app_write_REG_ANALOG_DATA(void *a);
@@ -49,6 +50,7 @@ bool app_write_REG_PULSE_DO_PORT0(void *a);
4950
bool app_write_REG_PULSE_DO0(void *a);
5051
bool app_write_REG_START_PULSE(void *a);
5152
bool app_write_REG_START_PULSE_TRAIN(void *a);
53+
bool app_write_REG_ENCODER_MODE(void *a);
5254

5355

5456
#endif /* _APP_FUNCTIONS_H_ */

tests/ExpectedOutput/device.app_ios_and_regs.c

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,8 @@ uint8_t app_regs_type[] = {
7777
TYPE_U16,
7878
TYPE_U16,
7979
TYPE_U16,
80-
TYPE_U16
80+
TYPE_U16,
81+
TYPE_U8
8182
};
8283

8384
uint16_t app_regs_n_elements[] = {
@@ -94,7 +95,8 @@ uint16_t app_regs_n_elements[] = {
9495
1,
9596
1,
9697
1,
97-
2
98+
2,
99+
1
98100
};
99101

100102
uint8_t *app_regs_pointer[] = {
@@ -111,5 +113,6 @@ uint8_t *app_regs_pointer[] = {
111113
(uint8_t*)(&app_regs.REG_PULSE_DO_PORT0),
112114
(uint8_t*)(&app_regs.REG_PULSE_DO0),
113115
(uint8_t*)(&app_regs.REG_START_PULSE),
114-
(uint8_t*)(&app_regs.REG_START_PULSE_TRAIN)
116+
(uint8_t*)(&app_regs.REG_START_PULSE_TRAIN),
117+
(uint8_t*)(&app_regs.REG_ENCODER_MODE)
115118
};

0 commit comments

Comments
 (0)