Skip to content

Commit bb53267

Browse files
committed
Decouple usb log sink from oled sink and expose them via macros.
1 parent 9fdd2a5 commit bb53267

8 files changed

Lines changed: 65 additions & 13 deletions

File tree

device/src/shell/shell_commands.c

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -379,23 +379,35 @@ static int cmd_uhk_logPriority(const struct shell *shell, size_t argc, char *arg
379379
return 0;
380380
}
381381

382-
static int cmd_uhk_logs(const struct shell *shell, size_t argc, char *argv[])
382+
static int cmd_uhk_usbLog(const struct shell *shell, size_t argc, char *argv[])
383383
{
384384
if (argc > 1 && argv[1][0] == '1') {
385-
WormCfg->UsbLogEnabled = true;
385+
WormCfg->LogUsbSinkEnabled = true;
386386
} else if (argc > 1 && argv[1][0] == '0') {
387-
WormCfg->UsbLogEnabled = false;
387+
WormCfg->LogUsbSinkEnabled = false;
388388
}
389389

390390
uint16_t usbBufferFill, usbBufferSize;
391391
UsbLogBuffer_GetFill(&usbBufferFill, &usbBufferSize);
392392

393-
printk("Usb logging enabled: %d\n", WormCfg->UsbLogEnabled);
393+
printk("Usb log sink enabled: %d\n", WormCfg->LogUsbSinkEnabled);
394394
printk("Has log: %d\n", UsbLogBuffer_HasLog);
395395
printk("Usb log buffer fill: %d / %d\n", usbBufferFill, usbBufferSize);
396396
return 0;
397397
}
398398

399+
static int cmd_uhk_oledLog(const struct shell *shell, size_t argc, char *argv[])
400+
{
401+
if (argc > 1 && argv[1][0] == '1') {
402+
WormCfg->LogOledSinkEnabled = true;
403+
} else if (argc > 1 && argv[1][0] == '0') {
404+
WormCfg->LogOledSinkEnabled = false;
405+
}
406+
407+
printk("Oled log sink enabled: %d\n", WormCfg->LogOledSinkEnabled);
408+
return 0;
409+
}
410+
399411
static int cmd_uhk_useShellSinks(const struct shell *shell, size_t argc, char *argv[])
400412
{
401413
if (argc == 1) {
@@ -421,7 +433,8 @@ static int cmd_uhk_logStatus(const struct shell *shell, size_t argc, char *argv[
421433
uint16_t usbBufferFill, usbBufferSize;
422434
UsbLogBuffer_GetFill(&usbBufferFill, &usbBufferSize);
423435

424-
printk("Usb logging enabled: %d\n", WormCfg->UsbLogEnabled);
436+
printk("Usb log sink enabled: %d\n", WormCfg->LogUsbSinkEnabled);
437+
printk("Oled log sink enabled: %d\n", WormCfg->LogOledSinkEnabled);
425438
printk("Has log: %d\n", UsbLogBuffer_HasLog);
426439
printk("Usb log buffer fill: %d / %d\n", usbBufferFill, usbBufferSize);
427440
printk("UseShellSinks: %d\n", ShellConfig_UseShellSinks ? 1 : 0);
@@ -492,7 +505,8 @@ void InitShellCommands(void)
492505
{
493506

494507
SHELL_STATIC_SUBCMD_SET_CREATE(uhk_log_cmds,
495-
SHELL_CMD_ARG(usbLog, NULL, "Set/get USB log enabled", cmd_uhk_logs, 1, 1),
508+
SHELL_CMD_ARG(usbSink, NULL, "Set/get USB log sink enabled", cmd_uhk_usbLog, 1, 1),
509+
SHELL_CMD_ARG(oledSink, NULL, "Set/get OLED log sink enabled", cmd_uhk_oledLog, 1, 1),
496510
SHELL_CMD_ARG(priority, NULL, "set log priority", cmd_uhk_logPriority, 2, 0),
497511
SHELL_CMD_ARG(snapshot, NULL, "Snap log buffer to status buffer", cmd_uhk_snaplog, 1, 0),
498512
SHELL_CMD_ARG(status, NULL, "print log status overview", cmd_uhk_logStatus, 1, 0),

device/src/shell/sinks.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ static shell_sinks_t emptyConfig() {
2020

2121
static shell_sinks_t activeConfig() {
2222
return (shell_sinks_t){
23-
.toUsbBuffer = WormCfg->UsbLogEnabled,
24-
.toOled = WormCfg->UsbLogEnabled,
23+
.toUsbBuffer = WormCfg->LogUsbSinkEnabled,
24+
.toOled = WormCfg->LogOledSinkEnabled,
2525
.toStatusBuffer = ShellConfig_IsInPanicMode,
2626
};
2727
}

doc-dev/reference-manual.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -322,6 +322,8 @@ COMMAND = set bluetooth.peripheralConnectionCount INT
322322
COMMAND = set bluetooth.minAdvertisingDelay INT
323323
COMMAND = set bluetooth.directedAdvertisingAllowed BOOL
324324
COMMAND = set devMode BOOL
325+
COMMAND = set log.sink.usb BOOL
326+
COMMAND = set log.sink.oled BOOL
325327
COMMAND = set maxVoltage INT
326328
COMMAND = powerMode autoShutdown
327329
COMMAND = testLeakage

right/src/config_manager.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -306,7 +306,8 @@ worm_config_t* WormCfg = &StateWormhole.WormCfg;
306306

307307
const worm_config_t DefaultWormCfg = {
308308
.devMode = false,
309-
.UsbLogEnabled = false,
309+
.LogUsbSinkEnabled = false,
310+
.LogOledSinkEnabled = false,
310311
};
311312

312313
void ConfigManager_ResetWormConfiguration(void) {

right/src/macros/set_command.c

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,10 @@ static macro_variable_t floatVar(float value)
145145

146146
static macro_variable_t boolVar(bool value)
147147
{
148-
return (macro_variable_t) { .asBool = value, .type = MacroVariableType_Bool };
148+
// sanitize the bool and prevent compiler from optimizing it away
149+
uint8_t raw;
150+
__builtin_memcpy(&raw, &value, 1);
151+
return (macro_variable_t) { .asBool = raw != 0, .type = MacroVariableType_Bool };
149152
}
150153

151154
static int32_t coalesce_int32_t(int32_t lowerBound, int32_t val, int32_t upperBound) {
@@ -960,6 +963,32 @@ static macro_variable_t setMaxVoltage(parser_context_t* ctx, set_command_action_
960963
return noneVar();
961964
}
962965

966+
static macro_variable_t logSinks(parser_context_t* ctx, set_command_action_t action)
967+
{
968+
if (ConsumeToken(ctx, "usb")) {
969+
ASSIGN_BOOL(WormCfg->LogUsbSinkEnabled);
970+
}
971+
else if (ConsumeToken(ctx, "oled")) {
972+
ASSIGN_BOOL(WormCfg->LogOledSinkEnabled);
973+
}
974+
else if (action == SetCommandAction_Write) {
975+
Macros_ReportErrorTok(ctx, "Parameter not recognized:");
976+
}
977+
return noneVar();
978+
}
979+
980+
static macro_variable_t logCommand(parser_context_t* ctx, set_command_action_t action)
981+
{
982+
if (ConsumeToken(ctx, "sink") || ConsumeToken(ctx, "sinks")) {
983+
ConsumeUntilDot(ctx);
984+
return logSinks(ctx, action);
985+
}
986+
else if (action == SetCommandAction_Write) {
987+
Macros_ReportErrorTok(ctx, "Parameter not recognized:");
988+
}
989+
return noneVar();
990+
}
991+
963992
static macro_variable_t root(parser_context_t* ctx, set_command_action_t action)
964993
{
965994
if (ConsumeToken(ctx, "module")) {
@@ -1019,6 +1048,10 @@ static macro_variable_t root(parser_context_t* ctx, set_command_action_t action)
10191048
ASSIGN_BOOL(Cfg.DevMode);
10201049
WormCfg->devMode = Cfg.DevMode;
10211050
}
1051+
else if (ConsumeToken(ctx, "log")) {
1052+
ConsumeUntilDot(ctx);
1053+
return logCommand(ctx, action);
1054+
}
10221055
else if (ConsumeToken(ctx, "stickyModifiers")) {
10231056
return stickyModifiers(ctx, action);
10241057
}

right/src/usb_commands/usb_command_get_variable.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ void UsbCommand_GetVariable(const uint8_t *GenericHidOutBuffer, uint8_t *Generic
4141
}
4242
break;
4343
case UsbVariable_ShellEnabled:
44-
SetUsbTxBufferUint8(1, WormCfg->UsbLogEnabled);
44+
SetUsbTxBufferUint8(1, WormCfg->LogUsbSinkEnabled);
4545
break;
4646
case UsbVariable_ShellBuffer:
4747
UsbLogBuffer_Consume(GenericHidInBuffer + 1, USB_COMMAND_BUFFER_LENGTH - 1);

right/src/usb_commands/usb_command_set_variable.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,8 @@ void UsbCommand_SetVariable(const uint8_t *GenericHidOutBuffer, uint8_t *Generic
5151
#endif
5252
break;
5353
case UsbVariable_ShellEnabled:
54-
WormCfg->UsbLogEnabled = GetUsbRxBufferUint8(2);
54+
WormCfg->LogUsbSinkEnabled = GetUsbRxBufferUint8(2);
55+
WormCfg->LogOledSinkEnabled = GetUsbRxBufferUint8(2);
5556
break;
5657
case UsbVariable_FirmwareVersionCheckEnabled:
5758
#ifdef __ZEPHYR__

right/src/wormhole.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@
1515

1616
typedef struct {
1717
bool devMode;
18-
bool UsbLogEnabled;
18+
bool LogUsbSinkEnabled;
19+
bool LogOledSinkEnabled;
1920
} worm_config_t;
2021

2122
typedef struct {

0 commit comments

Comments
 (0)