Skip to main content

API Reference

OEM code includes the public headers and links against the EdgeEmbed Runtime library (libedgeembed.so).

#include <edgeembed.h>
#include <edgeembed_types.h>

Lifecycle

FunctionPurpose
edgeembed_init(edgeembed_t** out_runtime, const edgeembed_config_t* config)Allocate runtime pools and enter EDGEEMBED_RUNTIME_STATE_INITIALIZED
edgeembed_load_bundle(edgeembed_t* runtime, const char* bundle_path)Validate and load a bundle directory before start
edgeembed_start(edgeembed_t* runtime)Start event processing and internal scheduling
edgeembed_runtime_step(edgeembed_t* runtime, uint64_t now_us)Advance one decision-loop iteration when EDGEEMBED_FLAG_MANUAL_STEP is set
edgeembed_stop(edgeembed_t* runtime)Stop processing and drain queues
edgeembed_shutdown(edgeembed_t* runtime)Release runtime resources; idempotent
edgeembed_get_runtime_state(edgeembed_t* runtime)Read current lifecycle state
edgeembed_config_t cfg = {
.default_namespace = "robotics_bundle",
};

edgeembed_t* runtime = NULL;
edgeembed_result_t rc = edgeembed_init(&runtime, &cfg);
if (rc == EDGEEMBED_OK) {
rc = edgeembed_load_bundle(runtime, "robotics_bundle");
}
if (rc == EDGEEMBED_OK) {
rc = edgeembed_start(runtime);
}

The typical lifecycle is edgeembed_init() to edgeembed_load_bundle() to optional callback and record-path setup to edgeembed_start(). After submitting work and reading diagnostics or traces, call edgeembed_stop() and edgeembed_shutdown().

Event Input

FunctionPurpose
edgeembed_submit_event(edgeembed_t* runtime, const char* event_name, const edgeembed_payload_t* payload, edgeembed_event_id_t* out_event_id)Submit an event by bundle event name
edgeembed_submit_event_by_id(edgeembed_t* runtime, edgeembed_symbol_t event_sym, const edgeembed_payload_t* payload, edgeembed_event_id_t* out_event_id)Submit an event by a previously resolved symbol
edgeembed_cancel_event(edgeembed_t* runtime, edgeembed_event_id_t event_id)Cancel a queued or active event when possible
edgeembed_resolve_symbol(edgeembed_t* runtime, edgeembed_symbol_kind_t kind, const char* name, edgeembed_symbol_t* out_sym)Resolve a bundle name to a symbol ID
edgeembed_symbol_name(edgeembed_t* runtime, edgeembed_symbol_kind_t kind, edgeembed_symbol_t sym, const char** out_name)Reverse lookup a symbol ID
edgeembed_payload_t payload = {
.urgency = 1.0f,
.confidence = 0.95f,
.value = 42.0f,
.ttl_ms = 2500u,
};

edgeembed_event_id_t event_id = 0;
edgeembed_submit_event(runtime, "evt_cliff_detected", &payload, &event_id);

For repeated submissions, resolve once and reuse the symbol:

edgeembed_symbol_t cliff = EDGEEMBED_SYMBOL_NONE;
edgeembed_resolve_symbol(runtime,
EDGEEMBED_KIND_EVENT,
"evt_cliff_detected",
&cliff);

edgeembed_submit_event_by_id(runtime, cliff, &payload, &event_id);

Both submit calls are non-blocking. The generated edgeembed_event_id_t is used for tracking and cancellation.

Stream State

FunctionPurpose
edgeembed_update_resource_state(edgeembed_t* runtime, const edgeembed_resource_update_t* update)Report actual external resource state to the runtime
edgeembed_symbol_t drive = EDGEEMBED_SYMBOL_NONE;
edgeembed_resolve_symbol(runtime,
EDGEEMBED_KIND_RESOURCE,
"drive_base",
&drive);

edgeembed_resource_update_t update = {
.resource_sym = drive,
.state_valid = true,
.state_value = 1u,
.timestamp_ms = 123456u,
};

edgeembed_update_resource_state(runtime, &update);

Resource updates report facts. They do not directly dispatch act_drive_stop, act_drive_slow, or act_drive_resume; dispatch is produced by policy and action planning.

Callbacks

FunctionPurpose
edgeembed_set_event_callback(edgeembed_t* runtime, edgeembed_event_callback_t cb, void* user_data)Register event lifecycle callback
edgeembed_set_state_change_callback(edgeembed_t* runtime, edgeembed_runtime_state_cb_t cb, void* user_data)Register runtime state transition callback
edgeembed_set_trace_callback(edgeembed_t* runtime, edgeembed_trace_callback_t cb, void* user_data)Register structured trace callback
edgeembed_set_completion_callback(edgeembed_t* runtime, edgeembed_completion_callback_t cb, void* user_data)Register per-event completion summary callback

Callbacks fire on the decision thread. Do not block, submit events, or cancel events from inside callbacks. Calls to edgeembed_submit_event(), edgeembed_submit_event_by_id(), or edgeembed_cancel_event() from inside a callback are rejected with EDGEEMBED_ERR_REENTRANT_FORBIDDEN.

static void event_cb(edgeembed_event_id_t id,
edgeembed_event_status_t status,
const edgeembed_trace_t* trace,
void* user_data) {
(void)id;
(void)status;
(void)trace;
(void)user_data;
}

static void trace_cb(const edgeembed_trace_record_t* record,
void* user_data) {
(void)record;
(void)user_data;
}

edgeembed_set_event_callback(runtime, event_cb, NULL);
edgeembed_set_trace_callback(runtime, trace_cb, NULL);

edgeembed_trace_t is the compact event-lifecycle timing record delivered to event callbacks. edgeembed_trace_record_t is the structured trace-ring record used by trace callbacks and edgeembed_drain_trace().

Diagnostics

FunctionPurpose
edgeembed_get_diagnostics(edgeembed_t* runtime, edgeembed_diagnostics_t* out_diag)Snapshot runtime counters
edgeembed_reset_diagnostics(edgeembed_t* runtime)Reset runtime counters
edgeembed_drain_trace(edgeembed_t* runtime, edgeembed_trace_record_t* out, uint32_t max_records, uint32_t* out_count)Drain structured trace-ring records
edgeembed_drain_probe(edgeembed_t* runtime, edgeembed_probe_record_t* out, uint32_t max_records, uint32_t* out_count)Drain probe records
edgeembed_get_last_config_errors(edgeembed_t* runtime, edgeembed_config_error_report_t* out_report)Read the last structured bundle validation report after edgeembed_load_bundle() rejects a bundle
edgeembed_runtime_set_record_path(edgeembed_t* r, const char* path)Set the record log path before start when EDGEEMBED_FLAG_RECORD is enabled
edgeembed_runtime_set_replay_path(edgeembed_t* r, const char* path)Set the replay log path before start when EDGEEMBED_FLAG_REPLAY is enabled
edgeembed_runtime_version(void)Return the runtime version string
edgeembed_runtime_abi(void)Return EDGEEMBED_ABI_VERSION
edgeembed_diagnostics_t diag = {0};
edgeembed_get_diagnostics(runtime, &diag);

edgeembed_trace_record_t records[32];
uint32_t count = 0;
edgeembed_drain_trace(runtime, records, 32u, &count);

Bundle validation happens in edgeembed_load_bundle(). When it returns a bundle or plugin validation error, call edgeembed_get_last_config_errors() before shutdown if the integration needs file, field, and message details.