Skip to content

Instantly share code, notes, and snippets.

@standarddeviant
Last active September 21, 2025 14:56
Show Gist options
  • Select an option

  • Save standarddeviant/b06f9e7b49c62941a70544b52a8395e7 to your computer and use it in GitHub Desktop.

Select an option

Save standarddeviant/b06f9e7b49c62941a70544b52a8395e7 to your computer and use it in GitHub Desktop.
mksrc_report_hooks.ps1
sd -f m `
'void (.*)(_dispatch_event\()(.+), (.+)\)(\s*)\{' `
'void $1$2($4, $4)$5{\n handle_zbus_err(zbus_chan_pub(&g_zbus_report_chan,\n (const void *)&((inj_rep_t)\n {.mtype=MTYPE_EVENT, .smid=SM_ID_SysButtonSm, .value=event_id}), K_NOWAIT);' `
sm/SysButtonSm.c
sd -f m `
'\n(\s*)sm->state_id =(.*)\;' `
'\n$1 sm->state_id =$2; \n$1 handle_zbus_err(zbus_chan_pub(&g_zbus_report_chan, \n$1 (const void *)&((inj_rep_t) \n$1 {.mtype=MTYPE_STATE, .smid=SM_ID_SysButtonSm, .value=$2}), K_NOWAIT);' `
sm/SysButtonSm.c
# This script will perform (2) sd operations per state-machine source file
# WARN: THIS SCRIPT MODIFIES THE CONTENTS OF MULTIPLED AUTO GENERATED STATE MACHINE C SOURCE FILES
# WARN: this is NOT idempotent!!!!!
# INFO: The (2) operations per file effectively inject zbus-based reporting for
# 1. all dispatched events via XYZ_event_dispatch(...)
# 2. all state changes via sm->state_id = XYZ;
$smList = "Test1Sm", "Test2Sm", "Test3Sm"
foreach ($smName in $smList) {
Write-Host "Adding report hooks to: $smName.c"
# operation 1-of-2 : (1) event-dispatch
$find_str = 'void (.*)(_dispatch_event\()(.+), (.+)\)(\s*)\{'
$rep_str_1 = 'void $1$2($3, $4)$5{\n handle_zbus_err(zbus_chan_pub(&g_zbus_report_chan,\n (const void *)&((inj_rep_t)\n {.mtype=MTYPE_EVENT,'
$rep_str_2 = ".smid=SM_ID_$smName, .value=event_id}), K_NOWAIT));"
$rep_str = "$rep_str_1$rep_str_2"
sd -f m `
$find_str `
$rep_str `
"sm/$smName.c"
# operation 2-of-2 : (2) state-change
$find_str = '\n(\s*)sm->state_id =(.*)\;'
$rep_str_1 = '\n$1 sm->state_id =$2; \n$1 handle_zbus_err(zbus_chan_pub(&g_zbus_report_chan, \n$1 (const void *)&((inj_rep_t) \n$1 '
$rep_str_2 = "{.mtype=MTYPE_STATE, .smid=SM_ID_$smName, "
$rep_str_3 = '.value=$2}), K_NOWAIT));'
$rep_str = "$rep_str_1$rep_str_2$rep_str_3"
sd -f m `
$find_str `
$rep_str `
"sm/$smName.c"
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment