SDK

Events

Every signal in the Kode Dot's firmware, grouped by the Active Object that owns it, with the event each one carries.

What it is

Active Objects talk only through events. An event is a signal, a number that says what happened or what is asked, plus a small struct of data copied into it. This page lists every signal the SDK and kodeOS define, one table per owner, so you can find what to subscribe to and what to post.

How it is connected

flowchart LR
subgraph pubs["Published: below MAX_PUB_SIG"]
  pub["An owner"] -- "publish" --> any["Every subscriber"]
end
subgraph posts["Posted: at or above MAX_PUB_SIG"]
  req["Your AO"] -- "post" --> own["One owner"]
  own -. "reply to who" .-> req
end
class pub ao
class any ao
class req app
class own ao
Two ways an event travels

Each table is one owner. How to read its columns:

Three more rules help when you read a table:

The signals are numbered in kqp_signals.h, and the structs they carry are declared in the same file. kqp.c checks with _Static_assert that each struct fits the pool block it is allocated from, so an event that grows too big fails the build instead of the board.

sdk/kqp explains the pools that hold the events and the priorities that decide who runs first.

Specifications

AO_LedMgr

Every signal AO_LedMgr owns.

SignalRangeEventWhat it does
LED_SET_SIGpublishLedEvtLight the LED (last colour, or white) or darken it, by on.
LED_TOGGLE_SIGpublishLedEvtInvert the LED. on is unused.
LED_BLINK_PERIOD_SIGpublishLedBlinkEvtSet the heartbeat period.
LED_HEARTBEAT_ENABLE_SIGpublishLedEvtStart or stop the heartbeat, by on.
LED_RGB_SIGpublishLedRgbEvtSet the colour; (0, 0, 0) is off.
LED_TEST_SIGpublishLedTestEvtOne step of the LED row: a colour to judge or its outcome.
LED_TEST_REQ_SIGpostbare QEvtRun test component=led; the verdict returns as TEST_RESULT_SIG.
LED_HEARTBEAT_SIG, LED_TEST_WAIT_SIGpostQTimeEvtPrivate timers, in order: the heartbeat blink; nobody answered the colour in time.

AO_AppMgr

Published signals: every Active Object that subscribed hears them.

SignalRangeEventWhat it does
APP_FLASH_DONE_SIGpublishAppFlashDoneEvtA write ended well; name is the app installed, empty for the C5 image. AO_Radio publishes it too.
APP_FLASH_FAIL_SIGpublishAppFlashFailEvtA write failed. AO_Radio publishes it too.
APP_FLASH_PROGRESS_SIGpublishAppProgressEvt0 % when a write starts, then each whole percent, with the file and what is written. The Opening sheet and the LED follow a write by this family.
APP_ENTRY_SIGpublishAppEntryEvtOne installed app, in answer to APP_LIST_REQ_SIG.
APP_LIST_END_SIGpublishListEndEvtThe last entry of the page; more says another page follows.
APP_EVICTED_SIGpublishAppEvictedEvtAn install took this app's place in the region, one event per app, before the write starts; kept says a copy is on the card. The app being replaced is not one.
APP_CAT_RSP_SIGpublishAppCatRspEvtThe outcome of APP_CAT_REQ_SIG.

AO_AppMgr: posted signals

Posted signals go to one Active Object: requests, replies to the asker, and the private signals and timers.

SignalRangeEventWhat it does
APP_FLASH_CHUNK_SIGpostbare QEvtPrivate: pace the next chunk of a write.
APP_ADOPT_SIGpostbare QEvtPrivate: the app_pending mailbox holds a verified image at boot; adopt it.
APP_ERASE_REQ_SIGpostAppFlashEvtRemove the named app from the region.
APP_CAT_REQ_SIGpostAppCatReqEvtAssign or drop an app's categories.
APP_RUN_REQ_SIGpostAppFlashEvtBoot the named installed app; the board resets.
APP_LIST_REQ_SIGpostAppListReqEvtPost APP_ENTRY_SIG for a page of installed apps to the asker, then APP_LIST_END_SIG.
APP_EVICT_REQ_SIGpostAppEvictReqEvtAsk which installed apps an install of this size and name would evict.
APP_EVICT_ENTRY_SIGpostAppEvictEntryEvtTo the asker: one app the install would evict, in eviction order.
APP_EVICT_END_SIGpostAppEvictEndEvtTo the asker: the last entry.
APP_RECV_REQ_SIGpostAppRecvReqEvtAn image is about to arrive on the console, for the region, the inactive OS slot or the mailbox.
FLASH_REQ_SIGpostFlashReqEvtOne source-to-sink transfer. The only way to ask for an image to be written.
APP_RECV_IDLE_SIG, APP_RECV_LAUNCH_SIGpostQTimeEvtPrivate timers, in order: no chunk for KODE_RECV_IDLE_MS, the host is gone; the drain delay after a good install is over, boot it.

Console receive protocol

The signals of a payload that arrives on the console.

SignalRangeEventWhat it does
RECV_READY_SIGpublishbare QEvtThe destination is open and the console is in raw mode: the host may stream. Becomes >|ready.
RECV_ACK_SIGpublishbare QEvtOne full chunk was consumed: the host may send the next (>|ack). The whole flow control of a transfer. AO_Console alone hears it.
RECV_DONE_SIGpublishbare QEvtThe payload arrived and verified. A terminal install is installed; a file_put is a file on FAT.
RECV_FAIL_SIGpublishbare QEvtRefused, or the bytes did not survive the trip.
RECV_STALL_SIGpublishbare QEvtThe host stopped sending and never came back.
RECV_DATA_SIGpostRecvDataEvtOne chunk of the payload, from AO_Console to the receiving AO.

AO_Storage

Published signals: every Active Object that subscribed hears them.

SignalRangeEventWhat it does
STORAGE_ENTRY_SIGpublishStorageEntryEvtOne file found by sd_ls, fs_ls or ls.
STORAGE_LIST_END_SIGpublishListEndEvtThe last entry of the page.
STORAGE_INFO_SIGpublishStorageInfoEvtOne medium's mount state and usage.
STORAGE_TEST_SIGpublishStorageTestEvtOne phase of the card test, with what it measured.

AO_Storage: posted signals

Posted signals go to one Active Object: requests, replies to the asker, and the private signals and timers.

SignalRangeEventWhat it does
STORAGE_CMD_SIGpostStorageCmdEvtRun one command (op) on a medium.
STORAGE_LIST_PAGE_SIGpostStorageListPageEvtPost a page of the bootable images on every medium to the asker.
STORAGE_CMD_RSP_SIGpostbare QEvtTo who: the command has run.
STORAGE_OPEN_REQ_SIGpostStorageOpenEvtOpen a named file for reading.
STORAGE_READ_REQ_SIGpostbare QEvtFill a free buffer and send it.
STORAGE_NEXT_SIGpostStorageBufEvtA borrowed buffer handed back: refill it and send it again.
STORAGE_CLOSE_REQ_SIGpostbare QEvtClose the open file.
STORAGE_OPEN_RSP_SIGpostStorageOpenRspEvtTo the opener: whether the file is open.
STORAGE_DATA_SIGpostStorageDataEvtTo the reader: one buffer of the file.
STORAGE_WRITE_REQ_SIGpostStorageWriteEvtPut a caller's data in a file, in one event.
STORAGE_WRITE_RSP_SIGpostStorageWriteRspEvtTo the writer: how the write ended.
STORAGE_DESC_REQ_SIGpostStorageDescReqEvtRead the manifest out of the front of one file.
STORAGE_DESC_RSP_SIGpostStorageDescRspEvtThat file's identity, back to who.
APPDATA_REQ_SIGpostAppDataReqEvtResolve an app's data folder.
APPDATA_FIELDS_SIGpostAppDataFieldsEvtTo the asker: the folder's fields.
APPDATA_ICON_SIGpostAppDataIconEvtTo the asker: one third of the icon.
APPDATA_END_SIGpostbare QEvtTo the asker: the conversation is over.
APPDATA_RM_REQ_SIGpostAppDataReqEvtDelete one app's data folder on the internal partition.
APPDATA_RM_RSP_SIGpostAppDataRmRspEvtTo the asker: how the delete ended.
STORAGE_FIELD_REQ_SIGpostStorageFieldReqEvtRead, write or dump one field of the card's table.
STORAGE_FIELD_RSP_SIGpostStorageFieldEvtTo the requester: the field.
STORAGE_PATH_REQ_SIGpostStoragePathEvtStat, list, cat, mkdir, unlink or rmdir one path.
STORAGE_PATH_RSP_SIGpostStoragePathRspEvtTo the requester: the answer of stat, mkdir, unlink, rmdir and move.
STORAGE_LINE_SIGpostStorageLineEvtTo the requester of cat: one line of the file, or the terminator.
STORAGE_PAIR_REQ_SIGpostStoragePairEvtMove or copy a source to a destination.
STORAGE_TEXT_REQ_SIGpostStorageTextEvtPut text in a file.
STORAGE_LEND_REQ_SIGpostStorageLendEvtLend the card for sector access, or take it back.
STORAGE_RECV_REQ_SIGpostStorageRecvEvtA file is about to arrive on the console (file_put).
STORAGE_SDJOB_DONE_SIGpostKqpWorkerDoneEvtstorage_sd to AO_Storage: a call to the card returned.
STORAGE_WRITE_NEXT_SIG, STORAGE_TEST_NEXT_SIG, STORAGE_CAT_NEXT_SIG, STORAGE_COPY_NEXT_SIG, STORAGE_RECV_IDLE_SIG, STORAGE_SDJOB_TO_SIGpostQTimeEvtPrivate timers, in order: the next chunk of a write; the next step of the card test; the next batch of lines of a cat; the next chunk of a cp; no chunk of an arriving file for KODE_RECV_IDLE_MS; a call to the card did not return in time.

AO_Autotest

Every signal AO_Autotest owns.

SignalRangeEventWhat it does
TEST_RESULT_SIGpublishTestResultEvtAny AO: the outcome of a self-test that could not be answered on the spot. It carries the origin of the run, and AO_Autotest ignores a verdict that is not its own.
TEST_SKIP_SIGpublishTestResultEvtAny AO: a self-test that could not be judged because what it needs is absent (no card, no cable, no tag). ok is unused.
AUTOTEST_BEGIN_SIGpublishAutotestBeginEvtA run was taken or refused.
AUTOTEST_ROW_SIGpublishAutotestRowEvtOne row started or ended.
AUTOTEST_END_SIGpublishAutotestEndEvtThe run is over.
AUTOTEST_HOLD_SIGpublishAutotestHoldEvtThe run waits for whoever asked, before the rows that need hands.
AUTOTEST_REPORT_SIGpublishAutotestReportEvtOne row of the report kept from the last user run, then an end marker.
PSRAM_TEST_SIGpublishPsramTestEvtWhat the PSRAM row tested and found, once per run, before its verdict.
AUTOTEST_RUN_REQ_SIGpostAutotestRunReqEvtRun a group of rows, or one by name.
AUTOTEST_CANCEL_REQ_SIGpostAutotestClientEvtEnd the run in flight after the row in flight.
AUTOTEST_CONTINUE_SIGpostAutotestClientEvtThe answer to a hold.
AUTOTEST_REPORT_REQ_SIGpostAutotestClientEvtPublish the kept report.
AUTOTEST_PSRAM_STEP_SIG, AUTOTEST_BUDGET_SIGpostQTimeEvtPrivate timers, in order: the PSRAM row's next step is due; the row in flight ran out of budget, or nobody answered a hold.

AO_Power

Every signal AO_Power owns.

SignalRangeEventWhat it does
POWER_EVT_SIGpublishPowerEvtA battery reading.
POWER_SHIP_SIGpublishbare QEvtThe BATFET is about to open (ship mode). Published in the step before the write, so every owner can prepare.
POWER_FIELD_SIGpublishPowerFieldEvtOne chip field's value, or the outcome of writing it.
POWER_CTRL_SIGpublishPowerCtrlEvtThe answer to one POWER_CTRL_REQ_SIG, a refusal included.
POWER_TEST_SIGpublishPowerTestEvtOne step of the power_plug row.
POWER_DUMP_REQ_SIGpostbare QEvtLog everything both chips say.
POWER_PEEK_REQ_SIGpostbare QEvtOne quiet reading, published as POWER_EVT_SIG, with the wall clock kept. AO_LowPower asks once a minute while the board is ASLEEP.
POWER_SHIP_REQ_SIGpostbare QEvtShip mode: open the BATFET and cut the battery from VSYS. The console verb ship_mode posts it.
POWER_SHIP_ARM_SIGpostPowerShipArmEvtCount KODE_SHIP_UNPLUG_MS from the cable leaving, then tell the asker.
POWER_SHIP_DUE_SIGpostbare QEvtTo the asker of the arming: the cable has been out for KODE_SHIP_UNPLUG_MS.
POWER_FIELD_REQ_SIGpostPowerFieldReqEvtRead, write or dump one field of the PMIC or the gauge.
POWER_TEST_REQ_SIGpostPowerTestReqEvtRun test component=pmic or gauge.
POWER_CTRL_REQ_SIGpostPowerCtrlReqEvtOne owner-level operation on the PMIC: boost, charge, charge limit, reset.
POWER_POLL_SIG, POWER_PULSE_SIG, POWER_CTRL_TICK_SIG, POWER_TEST_STEP_SIG, POWER_SHIP_TMO_SIGpostQTimeEvtPrivate timers, in order: the poll; the next half of the write pulse of the LED; the one-shot wait of Power_waiting is over; the power_plug row looks at the cable again; the countdown after the cable left is over.

AO_LowPower

Present only with CONFIG_KODE_LOWPOWER. The three published signals are the protocol of the board's rest (sdk/kaos/lowpower).

SignalRangeEventWhat it does
LOWPOWER_ROUND_SIGpublishLowPowerRoundEvtA round of readiness is open for a target state, ASLEEP or OFF. Each owner that joined rests its device and answers once with lowpower_ready().
LOWPOWER_STATE_SIGpublishLowPowerStateEvtThe board changed state: state is AWAKE, ASLEEP, OFF or RADIO, with the cause and the prev state. State AWAKE also arrives with prev AWAKE when a round was abandoned, so the restore must be idempotent. Arm no QTimeEvt on state ASLEEP. State RADIO is for the owners of lowpower_join_radio() alone.
LOWPOWER_REFUSED_SIGpublishLowPowerRefusedEvtA request or a round did not go through. src says whose request it answers, and why is who: why, a copy.
LOWPOWER_REQ_SIGpostLowPowerReqEvtGo to a state. From the console verbs sleep and power_off, from kode_power_sleep() and kode_power_off(), and from AO_Radio when its sentinel could not go back down.
LOWPOWER_READY_SIGpostLowPowerReadyEvtOne participant's answer to a round: who, round, busy and a reason copy.
LOWPOWER_INPUT_SIGpostLowPowerInputEvtA console line came in. One static event for each port, so a wake from BLE or the channel is never lost to an empty pool.
LOWPOWER_REST_SIGpostLowPowerReqEvtAn owner whose time woke the board (AO_Scheduler) asks to sleep again, unless somebody used the board.
LOWPOWER_WAKE_AT_SIGpostLowPowerWakeAtEvtAn owner's work falls due at a real time (khal_time_us()). Asleep, the board wakes for it.
LOWPOWER_RADIO_DONE_SIGpostLowPowerRadioDoneEvtA radio owner's work in a radio wake is finished.
LOWPOWER_MINUTE_SIGpostbare QEvtThe minute timer of ASLEEP ran out. A static event, posted from the callback of khal_timer_once().
LOWPOWER_ROUND_TMO_SIG, LOWPOWER_IDLE_TMO_SIG, LOWPOWER_RADIO_TMO_SIG, LOWPOWER_RETRY_TMO_SIG, LOWPOWER_STATE_RETRY_SIGpostQTimeEvtPrivate timers, in order: a round's budget, or the grace before OFF; the idle time; the bound of a radio wake; the wait before a requested round begins again; a state change that found no event is published again.

It subscribes to IOEXP_INPUT_SIG, BUTTON_EVT_SIG, TOUCH_EVT_SIG, POWER_EVT_SIG, MQTT_MSG_SIG and CONFIG_REQ_SIG.

AO_Scheduler

Present only with CONFIG_KODE_SCHEDULER (sdk/kaos/scheduler).

SignalRangeEventWhat it does
SCHED_SET_REQ_SIGpostSchedSetReqEvtMake or change a console entry. when of off removes it, or switches mqtt off.
SCHED_SET_AO_REQ_SIGpostSchedSetAoReqEvtMake or change an entry that posts an event to an Active Object.
SCHED_REMOVE_REQ_SIGpostSchedNameReqEvtRemove an entry of code.
SCHED_LIST_REQ_SIGpostSchedNameReqEvtOne entry, or every entry when the name is empty.
SCHED_ENTRY_SIGpostSchedEntryEvtTo the asker: one entry (owner, stored, next_s, name, when, cmd). The widest tenant of the large pool.
SCHED_END_SIGpostSchedEndEvtTo the asker: the request is answered (st, why, count).
SCHED_LINE_DONE_SIGpostbare QEvtThe console answered the line it was given, so the next may go.
SCHED_CHECK_DONE_SIGpostSchedCheckDoneEvtAO_Net made the check of the mqtt entry.
SCHED_UP_SIGpostbare QEvtFrom kode_init(): every Active Object has its queue, so the scheduler may post.
SCHED_DUE_SIG, SCHED_WORK_TMO_SIGpostQTimeEvtPrivate timers, in order: the earliest minute is near, or the clock is asked again; the work of a minute ran KODE_SCHED_WORK_BOUND_MS.

An entry of code fires as a SchedFireEvt (name) with the signal that the entry named. AO_Scheduler subscribes to LOWPOWER_ROUND_SIG, LOWPOWER_STATE_SIG and LOWPOWER_REFUSED_SIG when CONFIG_KODE_LOWPOWER is on.

AO_Display

Published signals: every Active Object that subscribed hears them.

SignalRangeEventWhat it does
DISPLAY_STATE_SIGpublishDisplayStateEvtWhether the panel is up and how bright it is driven. Published once at startup and again for each DISPLAY_STATE_REQ_SIG.
DISPLAY_MIRROR_INFO_SIGpublishMirrorInfoEvtThe mirror's live state.
DISPLAY_TEST_SIGpublishDisplayTestEvtOne step of the display row.
DISPLAY_REPAINT_SIGpublishbare QEvtThe display row is over, or the glass came back from a rest with new framebuffers (CONFIG_KODE_LOWPOWER). Whoever draws the glass fetches its buffers again and invalidates all of it.

AO_Display: posted signals

Posted signals go to one Active Object: requests, replies to the asker, and the private signals and timers.

SignalRangeEventWhat it does
DISPLAY_FLUSH_SIGpostFlushEvtPush one rendered rectangle to the panel.
DISPLAY_BRIGHTNESS_SIGpostBrightnessEvtSet the brightness, in percent.
DISPLAY_STATE_REQ_SIGpostbare QEvtPublish DISPLAY_STATE_SIG again, for whoever started late.
DISPLAY_CAPTURE_REQ_SIGpostDisplayCaptureReqEvtCopy the frame on the glass and say how big it is.
DISPLAY_CAPTURE_RSP_SIGpostDisplayCaptureRspEvtTo the requester: the copy.
DISPLAY_CAPTURE_END_SIGpostbare QEvtThe capture is done with the buffer; the flush path may write it again.
DISPLAY_MIRROR_START_SIGpostMirrorStartEvtBegin streaming the panel; the next frame is the whole panel.
DISPLAY_MIRROR_STOP_SIGpostbare QEvtStop streaming.
DISPLAY_MIRROR_ACK_SIGpostMirrorAckEvtThe host has received up to seq; releases credit.
DISPLAY_MIRROR_INFO_REQ_SIGpostbare QEvtPublish DISPLAY_MIRROR_INFO_SIG.
DISPLAY_SHOT_REQ_SIGpostDisplayShotReqEvtEncode the front framebuffer whole as one JPEG and lend it.
DISPLAY_SHOT_RSP_SIGpostDisplayShotRspEvtTo the requester: the JPEG.
DISPLAY_SHOT_END_SIGpostbare QEvtThe requester is done with the shot; take the buffer back.
DISPLAY_TEST_REQ_SIGpostbare QEvtRun test component=display.
DISPLAY_TEST_STEP_SIGpostbare QEvtPrivate, self-posted: paint the next band of the field.
DISPLAY_MINUTE_REQ_SIGpostbare QEvtWith CONFIG_KODE_LOWPOWER, from AO_LowPower each minute while ASLEEP: write the time into the panel's memory.
DISPLAY_GLYPHS_SIGpostDisplayGlyphsEvtWith CONFIG_KODE_LOWPOWER, from display_glyphs_hand(): the renderer has stopped, and here is the strip of digits (a pointer into the renderer's PSRAM, an exception to the rule that events carry copies).
DISPLAY_MIRROR_TICK_SIG, DISPLAY_TEST_WAIT_SIG, DISPLAY_GLYPHS_TMO_SIG, DISPLAY_RESTORE_SIGpostQTimeEvtPrivate timers, in order: the mirror's pacer, re-armed after each pass; nobody answered the field in time; the renderer handed no glyphs in KODE_LOWPOWER_GLYPHS_WAIT_MS; the glass could not be put back and is tried again.

AO_Touch

Every signal AO_Touch owns.

SignalRangeEventWhat it does
TOUCH_EVT_SIGpublishTouchEvtA touch sample, pinned to the glass.
TOUCH_TEST_SIGpublishTouchTestEvtOne step of the guided touch test: a target to tap, or its outcome.
TOUCH_FIELD_REQ_SIGpostTouchFieldReqEvtRead, write or dump one field of the CST820.
TOUCH_FIELD_RSP_SIGpostTouchFieldEvtTo the requester: the field.
TOUCH_TEST_REQ_SIG, TOUCH_TEST_REQ_FROM_SIGpostbare QEvt, TestReqEvtRun test component=tp. The second names who asked (origin), and every step and the verdict carry it back.
TOUCH_POLL_SIG, TOUCH_TEST_TMO_SIG, TOUCH_RESTORE_SIGpostQTimeEvtPrivate timers, in order: the poll while a finger is down; the operator did not tap the target in time; with CONFIG_KODE_LOWPOWER, the controller is written back to its awake settings again.

AO_Buttons

Every signal AO_Buttons owns.

SignalRangeEventWhat it does
BUTTON_EVT_SIGpublishButtonEvtOne button changed.
BUTTON_HOLD_SIGpublishButtonHoldEvtTOP or BOT has been down for KODE_BUTTON_HOLD_MS.
BUTTON_DOUBLE_SIGpublishButtonDoubleEvtTOP was pressed twice in quick succession.
BTN_STATE_SIGpublishButtonsStateEvtAll six buttons now, in answer to BUTTONS_DUMP_REQ_SIG.
BTN_TEST_SIGpublishButtonsTestEvtOne step of the guided button test.
BUTTONS_DUMP_REQ_SIGpostbare QEvtLog every button's state.
BUTTONS_TOP_INT_SIGpostbare QEvtPrivate: GPIO35 moved. Posted from the pin's interrupt through kqp_post_from_isr().
BUTTONS_TEST_REQ_SIG, BUTTONS_TEST_REQ_FROM_SIGpostbare QEvt, TestReqEvtRun test component=buttons. The second names who asked (origin), and every step and the verdict carry it back.
BUTTONS_ROTATE_SIGpostButtonsRotateEvtTurn the pad by quarter turns, from buttons_rotation_request().
BUTTONS_PAD_IDLE_SIGpostbare QEvtPrivate: an injected release left the pad idle, so a turn that waited may apply.
BUTTONS_SETTLE_SIG, BUTTONS_TEST_TMO_SIG, BUTTONS_HOLD_TMO_SIGpostQTimeEvtPrivate timers, in order: A change was seen, take the confirming sample; the operator did not press the button in time; a button has been down for KODE_BUTTON_HOLD_MS.

AO_Boot

Every signal AO_Boot owns.

SignalRangeEventWhat it does
HOME_SIGpublishbare QEvtThe bottom button was held: the interface goes home. Published in both roles.
BOOT_STATE_SIGpublishBootStateEvtThe boot state, in answer to BOOT_INFO_REQ_SIG.
BOOT_OS_SWITCH_SIGpostbare QEvtPoint otadata at the inactive kodeOS slot and reset.
BOOT_APP_RUN_SIGpostBootRunEvtWrite a boot request (NEW or ALWAYS, by mode) and reset so the bootloader jumps.
BOOT_INFO_REQ_SIGpostbare QEvtLog the boot state.
BOOT_EXIT_REQ_SIGpostbare QEvtReset. In an app this is the way home.
BOOT_HOME_DEFER_SIGpostbare QEvtThe app asks for a moment before the hold resets it, from kode_home_defer().
BOOT_HOME_NOW_SIGpostbare QEvtThe app is ready, go home now, from kode_home_now().
BOOT_RADIO_PARKED_SIGpostbare QEvtPrivate, from boot_radio_parked(): AO_Radio has done with the C5 for the jump.
BOOT_NET_LEFT_SIGpostbare QEvtPrivate, from boot_net_left(): AO_Net has left the Kode channel for the jump.
BOOT_HOME_GRACE_SIG, BOOT_LEAVE_TMO_SIGpostQTimeEvtPrivate timers, in order: the grace is over (or, once extended, the cap); the step of the leave that is running ran out of time.

AO_IoExp

Every signal AO_IoExp owns.

SignalRangeEventWhat it does
IOEXP_INPUT_SIGpublishIoexpInputEvtWhat the expander's eight pins read. Published on every read of the input register.
IOEXP_INT_SIGpostbare QEvtPrivate: the TCA6408A's INT line went low.
IOEXP_READ_REQ_SIGpostbare QEvtRead the input register now and publish IOEXP_INPUT_SIG, changed or not.
IOEXP_FIELD_REQ_SIGpostIoexpFieldReqEvtRead, write or dump one field of the expander.
IOEXP_FIELD_RSP_SIGpostIoexpFieldEvtTo the requester: the field.
IOEXP_TEST_REQ_SIGpostbare QEvtRun test component=ioexp.
IOEXP_RETRY_SIGpostQTimeEvtPrivate timers, in order: INT fired and the input register did not read: ask again.

AO_Ir

Every signal AO_Ir owns.

SignalRangeEventWhat it does
IR_RX_SIGpublishIrRxEvtOne frame the receiver heard. Not published for a frame this board sent itself.
IR_SEND_REQ_SIGpostIrSendEvtTransmit one NEC frame.
IR_SEND_RAW_REQ_SIGpostIrSendRawEvtTransmit the frame the requester lends, on its carrier.
IR_CAPTURE_REQ_SIGpostIrCaptureEvtFill the requester's buffer with the next frame heard.
IR_INFO_REQ_SIGpostIrInfoReqEvtThe console's ir: the block's own status.
IR_INFO_RSP_SIGpostIrInfoEvtTo the requester: the status.
IR_LAST_REQ_SIGpostIrLastEvtThe last frame heard, written into the requester's memory and signalled on a semaphore.
IR_TEST_REQ_SIGpostbare QEvtRun test component=ir.
IR_RX_RDY_SIGpostbare QEvtPrivate: a capture is waiting in the driver. Posted from the receive interrupt.
IR_JOB_DONE_SIGpostKqpWorkerDoneEvtir_worker to AO_Ir: a call to the C5 returned.
IR_ECHO_SIG, IR_CAPTURE_TO_SIG, IR_TEST_TO_SIG, IR_JOB_TO_SIGpostQTimeEvtPrivate timers, in order: the echo-suppression window closed; the pending capture reached its deadline; an attempt of the production row heard nothing; a call to the C5 did not return in time.

AO_Nfc

Published signals: every Active Object that subscribed hears them.

SignalRangeEventWhat it does
NFC_TAG_SIGpublishNfcTagEvtOne tag the poller activated. Published only while a request is in flight.
NFC_EMU_SIGpublishNfcEmuEvtOne turn of an emulation window: a field arriving, a select, a read.

AO_Nfc: posted signals

Posted signals go to one Active Object: requests, replies to the asker, and the private signals and timers.

SignalRangeEventWhat it does
NFC_READ_REQ_SIGpostNfcReadEvtEnergise and answer with the first tag activated inside the window.
NFC_NDEF_REQ_SIGpostNfcNdefEvtRead or write an NDEF message on the first tag activated.
NFC_NDEF_RSP_SIGpostNfcNdefRspEvtTo the requester: the NDEF answer.
NFC_INFO_REQ_SIGpostNfcInfoReqEvtThe console's nfc: the reader's status.
NFC_INFO_RSP_SIGpostNfcInfoEvtTo the requester: the status.
NFC_KEYS_REQ_SIGpostNfcKeysReqEvtSweep the public Mifare key dictionary against one block.
NFC_KEYS_RSP_SIGpostNfcKeysRspEvtTo the requester: which key opened it.
NFC_DUMP_REQ_SIGpostNfcDumpReqEvtRead every sector a Mifare Classic opens and stream it, one sector per tick.
NFC_DUMP_RSP_SIGpostNfcDumpRspEvtTo the requester: the dump is finished.
NFC_FIELD_REQ_SIGpostNfcFieldEvtListen for a window with the reader's own field off and describe the field somebody else put on the antenna.
NFC_FIELD_RSP_SIGpostNfcFieldRspEvtTo the requester: the window's statistics.
NFC_EMU_REQ_SIGpostNfcEmuReqEvtPresent the Kode Dot as a passive NFC-A card, or stop.
NFC_EMU_RSP_SIGpostNfcEmuRspEvtTo the console: a start or stop finished.
NFC_CERT_REQ_SIGpostNfcCertEvtRaise, switch or drop the held maximum-drive field. Posted only in a build with KODEOS_NFC_CERT.
NFC_TEST_REQ_SIGpostbare QEvtRun test component=nfc.
NFC_TICK_SIG, NFC_DEADLINE_SIGpostQTimeEvtPrivate timers, in order: pump rfalNfcWorker() once and arm again; the request in flight reached its window.

AO_Rfid

Every signal AO_Rfid owns.

SignalRangeEventWhat it does
RFID_TAG_SIGpublishRfidTagEvtOne EM4100 ID decoded inside a window. Published only while a request is in flight.
RFID_READ_REQ_SIGpostRfidReqEvtEnergise and report the first EM4100 ID decoded inside the window.
RFID_WRITE_REQ_SIGpostRfidWriteReqEvtClone a 5-byte ID onto a T5577.
RFID_INFO_REQ_SIGpostRfidInfoReqEvtThe console's rfid.
RFID_INFO_RSP_SIGpostRfidInfoEvtTo the requester: the status.
RFID_OP_RSP_SIGpostRfidOpRspEvtTo the console: a rfid_read or rfid_write finished.
RFID_FIELD_REQ_SIGpostRfidFieldEvtRead the demod line for a window with the carrier off and describe it.
RFID_FIELD_RSP_SIGpostRfidFieldRspEvtTo the requester: the window's statistics, by value.
RFID_CERT_REQ_SIGpostRfidCertEvtRaise, switch or drop the held maximum-drive 125 kHz carrier. Posted only with KODEOS_NFC_CERT.
RFID_TEST_REQ_SIGpostbare QEvtRun test component=rfid.
RFID_WORKER_DONE_SIGpostKqpWorkerDoneEvtrfid_worker to AO_Rfid: the job finished.
RFID_DEADLINE_SIGpostQTimeEvtPrivate timers, in order: the request's window is over.

AO_Audio

Every signal AO_Audio owns.

SignalRangeEventWhat it does
AUDIO_TEST_SIGpublishAudioTestEvtOne step of the audio row.
AUDIO_FILE_RSP_SIGpublishAudioFileRspEvtA recording reached a file, or did not.
AUDIO_FIELD_SIGpublishAudioFieldEvtOne codec field's value, or the outcome of writing it.
AUDIO_DONE_SIGpublishAudioDoneEvtOne play ended.
AUDIO_TONE_REQ_SIGpostAudioToneEvtEmit one tone, snapped to a detector bin.
AUDIO_FIELD_REQ_SIGpostAudioFieldReqEvtRead, write or dump one field of the codec.
AUDIO_INFO_REQ_SIGpostAudioInfoReqEvtWhat the audio path is and what it is set to.
AUDIO_REC_FILE_REQ_SIGpostAudioFileReqEvtRecord for a while into a file.
AUDIO_PLAY_REQ_SIGpostAudioBufEvtPlay the frames in the event and wake the waiter. From a task, never an Active Object.
AUDIO_REC_REQ_SIGpostAudioBufEvtFill the event's buffer and wake the waiter.
AUDIO_STREAM_OPEN_REQ_SIGpostAudioBufEvtOpen the stream; wake the waiter once it plays.
AUDIO_STREAM_CLOSE_REQ_SIGpostAudioBufEvtEnd the stream; wake the waiter once what it held has been heard.
AUDIO_TEST_REQ_SIGpostbare QEvtRun test component=audio.
AUDIO_JOB_SIGpostKqpWorkerDoneEvtThe codec worker finished a job.
AUDIO_GUARD_SIGpostQTimeEvtPrivate timers, in order: A job handed to the worker never answered.

AO_Imu

Every signal AO_Imu owns.

SignalRangeEventWhat it does
IMU_TEST_SIGpublishImuTestEvtOne step of the IMU row.
MAG_TEST_SIGpublishMagTestEvtOne step of the magnetometer row.
IMU_READ_REQ_SIGpostImuReadEvtOne sample into the caller's own struct, answered inside the step that receives it.
IMU_CAPTURE_REQ_SIGpostImuCaptureReqEvtArm the FIFO for the witness window of the haptic row.
IMU_ARMED_SIGpostImuArmedEvtTo whoever asked: the FIFO is armed.
IMU_DRAIN_REQ_SIGpostImuDrainReqEvtDrain what the FIFO holds and measure it at a rate.
IMU_ENERGY_SIGpostImuEnergyEvtTo whoever asked: the energy measured.
MAG_READ_REQ_SIGpostMagReadEvtOne magnetometer sample into the caller's own int32_t[3].
IMU_TEST_REQ_SIGpostbare QEvtRun test component=imu.
MAG_TEST_REQ_SIGpostbare QEvtRun test component=mag.
IMU_WAIT_SIG, IMU_REST_SIG, MAG_REST_SIGpostQTimeEvtPrivate timers, in order: A self-test's poll, a chunk of a witness window or the gyroscope's turn-on; the IMU rests after KODE_IMU_REST_AFTER_MS; the same for the QMC5883P.

AO_Haptic

Every signal AO_Haptic owns.

SignalRangeEventWhat it does
HAPTIC_TEST_SIGpublishHapticTestEvtOne step of the haptic row.
HAPTIC_FIELD_SIGpublishHapticFieldEvtOne field's value, or the outcome of writing it.
HAPTIC_DONE_SIGpublishHapticDoneEvtA buzz ended.
HAPTIC_PLAY_REQ_SIGpostHapticPlayEvtOne buzz: ms and gain_pct.
HAPTIC_FIELD_REQ_SIGpostHapticFieldReqEvtRead, write or dump one field of the driver.
HAPTIC_TEST_REQ_SIGpostbare QEvtRun test component=haptic.
HAPTIC_TICK_SIG, HAPTIC_TAIL_SIG, HAPTIC_WAIT_SIGpostQTimeEvtPrivate timers, in order: feed the RTP FIFO; the chip has played what it was left with; the row's stillness window or the deadline on a reply from AO_Imu.

AO_Radio

Published signals: every Active Object that subscribed hears them.

SignalRangeEventWhat it does
RADIO_STATE_SIGpublishRadioStateEvtThe C5 link's state. Published on every change and for each RADIO_STATE_REQ_SIG.
WIFI_STATE_SIGpublishWifiStateEvtWhere the Wi-Fi connection stands.
WIFI_SCAN_ENTRY_SIGpublishWifiScanEntryEvtOne network found.
WIFI_SCAN_END_SIGpublishWifiScanEndEvtThe last one: how many, and whether the ceiling cut the scan short.
WIFI_SAVED_ENTRY_SIGpublishWifiSavedEvtOne remembered network, name only.
WIFI_SAVED_END_SIGpublishWifiScanEndEvtThe last remembered one, in the same shape.
BLE_STATE_SIGpublishBleStateEvtWhat the BLE half is doing. Published on every change.
BLE_PAIR_SIGpublishBlePairEvtA pairing wants a code shown, or has ended.
BLE_SCAN_ENTRY_SIGpublishBleScanEvtOne device seen.
BLE_SCAN_END_SIGpublishWifiScanEndEvtThe last one: a count and whether the scan worked.
C5_RUN_REQ_SIGpublishbare QEvtPublished by whoever needs the C5 running without its link, AO_Audio for the amplifier.
C5_RUNNING_SIGpublishbare QEvtThe C5 has been out of reset for KODE_C5_BOOT_MS: its own boot is over.

AO_Radio: posted signals

Posted signals go to one Active Object: requests, replies to the asker, and the private signals and timers.

SignalRangeEventWhat it does
RADIO_UP_REQ_SIGpostbare QEvtBring the C5 link up. The outcome is the next RADIO_STATE_SIG.
RADIO_DOWN_REQ_SIGpostbare QEvtTear the link down; the C5 keeps running.
RADIO_STATE_REQ_SIGpostbare QEvtPublish RADIO_STATE_SIG again.
RADIO_JOB_SIGpostKqpWorkerDoneEvtPrivate: a job came back from the radio worker.
RADIO_LINK_LOST_SIGpostRadioLostEvtPrivate: the link to the C5 is gone, from the driver's notification.
RADIO_SVC_JOB_SIGpostKqpWorkerDoneEvtPrivate: a KODE request came back from the service worker.
KODE_SVC_RSP_SIGpostKodeSvcEvtPrivate: a KODE service on the C5 answered.
ID_SIGN_REQ_SIGpostIdSignReqEvtSign the cloud's challenge with the unit's key on the C5.
ID_SIGN_RSP_SIGpostIdSignRspEvtTo the asker: the signature, or why not.
ID_REQ_SIGpostIdReqEvtOne identity operation that is not a signature.
ID_PART_SIGpostIdPartEvtTo the asker: one piece of DER, in order.
ID_END_SIGpostIdEndEvtTo the asker: the operation is over.
C5_WIPE_REQ_SIGpostC5WipeReqEvtForget the user's secrets: the C5's vault and BLE keys, then the bond store.
C5_WIPE_RSP_SIGpostC5WipeRspEvtTo the asker: how far the wipe got.
RADIO_SCAN_MORE_SIGpostbare QEvtPrivate: a scan finished a channel and the driver's table grew.
RADIO_TEST_REQ_SIGpostbare QEvtRun test component=c5; brings the link up if it is down.
RADIO_TEST_STEP_SIGpostbare QEvtPrivate: the link is up, take the row's next step.
RADIO_FIELD_REQ_SIGpostRadioFieldReqEvtRead, write or dump one field of the coprocessor.
RADIO_FIELD_RSP_SIGpostRadioFieldEvtTo the requester: the field.
RADIO_RECV_REQ_SIGpostAppRecvReqEvtA C5 image is about to arrive on the console.
RADIO_UNUSED_SIGpostbare QEvtTo itself: its settle found nothing left that uses the link.
RADIO_INSTALL_GO_SIGpostbare QEvtPrivate: the staged image is verified and the link is up, start the push.
RADIO_PARK_REQ_SIGpostRadioParkEvtPrivate, from radio_park_request(): a jump is about to restart the board, park the C5.
RADIO_SLEEP_NOTE_SIGpostRadioSleepNoteEvtWith CONFIG_KODE_LOWPOWER, private: the sleep sentinel reports a wake of the P4 that involved the C5 (kind, knocks, tx_sta, tx_serial, tx_hci).
RADIO_NET_LEFT_SIGpostRadioNetLeftEvtWith CONFIG_KODE_LOWPOWER, from radio_net_left(): AO_Net closed its sessions for an OFF round, so the link may go down.
WIFI_SCAN_REQ_SIGpostbare QEvtScan. Entries follow on the bus, then WIFI_SCAN_END_SIG.
WIFI_JOIN_REQ_SIGpostWifiJoinEvtJoin a network and remember it if it works.
WIFI_LEAVE_REQ_SIGpostbare QEvtLeave and forget the stored credentials.
WIFI_STATE_REQ_SIGpostbare QEvtPublish WIFI_STATE_SIG now.
WIFI_RSSI_REQ_SIGpostbare QEvtRefresh the association's signal strength; the answer is the next WIFI_STATE_SIG.
WIFI_FAST_REQ_SIGpostWifiFastEvtNo power save on the station (on), or the default back.
EXP_POWER_REQ_SIGpostExpPowerEvtSwitch J3's +3.3V_EXT on or off, from kode_exp_power().
WIFI_AUTO_REQ_SIGpostbare QEvtScan and join the best remembered network in range.
WIFI_LIST_REQ_SIGpostbare QEvtPublish the remembered networks, names only.
WIFI_FORGET_REQ_SIGpostWifiJoinEvtRemove a network from the store; the password field stays empty.
WIFI_START_REQ_SIGpostbare QEvtEnable the Wi-Fi service: set the stored flag, bring the link up, autojoin.
WIFI_STOP_REQ_SIGpostbare QEvtDisable it: stop the station and clear the flag. The link stays up.
BLE_START_REQ_SIGpostbare QEvtBring the BLE stack up. Being up is being on the air.
BLE_SCAN_REQ_SIGpostBleScanReqEvtListen for advertisers for the time given.
BLE_STOP_REQ_SIGpostbare QEvtTake the BLE stack down.
BLE_STATE_REQ_SIGpostbare QEvtPublish BLE_STATE_SIG now.
BLE_LINK_SIGpostbare QEvtFrom the driver's callback: a central arrived or left.
BLE_PAIR_TAKE_SIGpostbare QEvtTo itself, from the driver's callback: collect the pairing record and publish it.
BLE_PAIR_REJECT_REQ_SIGpostbare QEvtRefuse the pairing in flight.
BLE_UNPAIR_REQ_SIGpostbare QEvtForget every bonded peer.
RADIO_JOB_GUARD_SIG, KODE_SVC_TMO_SIG, C5_BOOT_SIG, EXP_PULSE_SIG, RADIO_RECV_IDLE_SIG, RADIO_UNMOUNT_RETRY_SIGpostQTimeEvtPrivate timers, in order: the radio worker's job never came back; a KODE request's answer did not come (one timer per service); the C5 it let go has had its boot time; the C5 reset that switches the header's supply on has lasted; no chunk for KODE_RECV_IDLE_MS; the card still answered an unmount as mounted, ask again.

AO_Net

Published signals: every Active Object that subscribed hears them.

SignalRangeEventWhat it does
NET_PING_ENTRY_SIGpublishNetPingEntryEvtOne ICMP echo's outcome, a timeout included.
NET_PING_END_SIGpublishNetPingEndEvtThe session's summary, or the refusal when there was no session.
NET_HTTP_DATA_SIGpublishNetHttpDataEvtA slice of a response body.
NET_HTTP_DONE_SIGpublishNetHttpDoneEvtStatus, lengths, and whether the body was cut.
NET_UDP_DONE_SIGpublishNetUdpDoneEvtThe datagram is away, or is not.
NET_INFO_SIGpublishNetInfoEvtThis board's addresses and the MQTT client's state.
MQTT_STATE_SIGpublishMqttStateEvtWhere the MQTT client is. Published on every change and on request.
MQTT_MSG_SIGpublishMqttMsgEvtA message the broker sent. The only published event whose rate a stranger sets.
CHANNEL_STATE_SIGpublishChannelStateEvtWhere the Kode channel stands. Published on every change and on request.

AO_Net: posted signals

Posted signals go to one Active Object: requests, replies to the asker, and the private signals and timers.

SignalRangeEventWhat it does
NET_PING_REQ_SIGpostNetPingReqEvtPing a host. Entries follow on the bus, then NET_PING_END_SIG.
NET_HTTP_REQ_SIGpostNetHttpReqEvtGET a URL. Body slices follow, then NET_HTTP_DONE_SIG.
NET_UDP_REQ_SIGpostNetUdpReqEvtSend a datagram.
NET_INFO_REQ_SIGpostbare QEvtPublish NET_INFO_SIG.
NET_STREAM_OPEN_REQ_SIGpostNetStreamOpenEvtOpen a download.
NET_STREAM_READ_REQ_SIGpostbare QEvtFill a free buffer and send it.
NET_STREAM_NEXT_SIGpostStorageBufEvtA borrowed buffer handed back.
NET_STREAM_CLOSE_REQ_SIGpostbare QEvtClose the open transfer.
NET_STREAM_OPEN_RSP_SIGpostStorageOpenRspEvtTo the opener: the download is open or refused.
NET_STREAM_DATA_SIGpostStorageDataEvtTo the reader: one buffer of the download. The same conversation AO_Storage has, over a URL.
NET_TEST_REQ_SIGpostbare QEvtRun test component=net.
NET_JOB_SIGpostKqpWorkerDoneEvtPrivate: a job came back from the worker.
NET_STREAM_JOB_SIGpostKqpWorkerDoneEvtPrivate: a job came back from the download's worker.
MQTT_UP_REQ_SIGpostMqttUpEvtConnect to a broker by URI.
MQTT_DOWN_REQ_SIGpostbare QEvtStop the client.
MQTT_PUB_REQ_SIGpostMqttPubEvtPublish a message.
MQTT_SUB_REQ_SIGpostMqttTopicEvtSubscribe to a topic.
MQTT_UNSUB_REQ_SIGpostMqttTopicEvtUnsubscribe from a topic.
MQTT_STATE_REQ_SIGpostbare QEvtPublish MQTT_STATE_SIG now.
NET_MQTT_LINK_SIGpostNetMqttLinkEvtPrivate: the client connected, dropped or errored, moved off esp-mqtt's task.
NET_MQTT_RX_SIGpoststatic QEvtPrivate, from esp-mqtt's task: the driver's receive ring holds messages. AO_Net takes them from the ring and republishes each as MQTT_MSG_SIG from its own thread.
NET_LINE_DONE_SIGpostNetLineDoneEvtFrom net_line_done(): the console answered the line AO_Net gave it from cmd/in, so the next may go. Carries the sequence of the line it ends.
NET_LINE_BUSY_SIGpoststatic QEvtFrom net_line_busy(): the console was busy and did not take the line; AO_Net offers it again shortly.
CHANNEL_STATE_REQ_SIGpostbare QEvtPublish CHANNEL_STATE_SIG now.
NET_CHAN_OUT_SIGpostbare QEvtPrivate: reply lines wait in the channel's ring. Posted by AO_Log.
NET_LEAVE_REQ_SIGpostbare QEvtPrivate, from net_leave_request(): leave the Kode channel cleanly and start no new one.
NET_CHECK_AT_SIGpostNetCheckAtEvtFrom net_check_at(): the next time the scheduler's mqtt entry falls due, in Unix seconds, or -1 for none.
NET_SHOT_REQ_SIGpostNetShotReqEvtFrom net_shot_request(): upload the glass to the channel's shots link.
NET_SHOT_RSP_SIGpostNetShotRspEvtTo the requester: how the upload ended.
NET_SHOT_STOP_SIGpostNetShotStopEvtFrom net_shot_stop_request(): end the running stream of uploads.
NET_TMO_SIG, NET_JOB_GUARD_SIG, NET_STREAM_GUARD_SIG, NET_CHAN_TMO_SIG, NET_CHAN_FAST_SIG, NET_CHAN_WATCH_SIG, NET_SHOT_TICK_SIG, NET_SHOT_WAIT_SIG, NET_CHECK_TMO_SIG, NET_CHAN_LINE_SIGpostQTimeEvtPrivate timers, in order: the broker never answered the connect; the worker's job never came back; the download's job never came back; the channel's one timer (back-off, renewal); no cmd/in line for CHAN_FAST_HOLD_MS, the fast mode ends; the channel's client check; the pace of a stream of uploads; the display did not answer a shot; the dwell of a radio wake for the mqtt check ran out; the console has had KODE_CHAN_LINE_BOUND_MS for the line it holds, or the post of the next line was refused and is tried again.

AO_Log

Every signal AO_Log owns.

SignalRangeEventWhat it does
LOG_LINE_SIGpostLogEvtPut one log line on the console.
CONSOLE_BYTE_SIGpostConsoleByteEvtA byte arrived.
CONSOLE_RAW_REQ_SIGpostConsoleRawReqEvtSwitch the input stream to raw and deliver it to who.
CONSOLE_RAW_RSP_SIGpostConsoleRawRspEvtTo the requester: whether raw mode is armed.
CONSOLE_RAW_END_SIGpostbare QEvtAbandon raw mode: the transfer died before its last byte.
LOG_LEVEL_SET_SIGpostLogLevelEvtApply a log level, and store it when it is the global default.

AO_Console

Every signal AO_Console owns.

SignalRangeEventWhat it does
CONSOLE_LINE_SIGpublishConsoleLineEvtA finished command line (src, line[240]). AO_Log publishes it; AO_Net posts the Kode channel's with a margin.
CONFIG_REQ_SIGpublishKodeConfigReqEvtRead or set one setting. The owner answers with kode_config_answer().
CONFIG_ANS_SIGpublishKodeConfigAnsEvtA setting's owner: its value, or why it refused.
FUNCTION_ANS_SIGpostFunctionAnsEvtPosted by the owner of a function that answers: one record of the answer.
CONSOLE_TIMEOUT_SIG, CONSOLE_SLICE_SIG, CONSOLE_WATCH_SIG, KCLI_INJ_TMO_SIGpostQTimeEvtPrivate timers, in order: the command in flight never got its closing answer; emit the next slice of a listing; a followed variable's period ran out; an injected gesture has a sample due.

AO_Gui

Every signal AO_Gui owns.

SignalRangeEventWhat it does
GUI_STATE_SIGpublishGuiStateEvtWhat state the interface is in. AO_Gui lives in kgui, above the SDK.
GUI_DUMP_REQ_SIGpublishbare QEvtSay what state the interface is in. The one request in the published range, so kaos need not name a symbol of kgui.

In the SDK