Skip to content

Vanderhell/microbus

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

microbus

CI License: MIT C99

Event pub/sub bus for embedded systems.

C99 | Zero dependencies | Zero allocations | ISR-safe queue | Portable

Why microbus?

Without an event bus, modules call each other directly:

mfsm_dispatch(&fsm, EV_TEMP_HIGH);
MLOG_WARN("SENSOR", "overtemp");
iotspool_enqueue("alerts", cbor_buf, n);
mhealth_check_now(&hm);

With microbus, modules are decoupled:

mbus_publish(&bus, MBUS_TOPIC_SENSOR, &temp, sizeof(temp));

mbus_subscribe(&bus, MBUS_TOPIC_SENSOR, log_handler, NULL);
mbus_subscribe(&bus, MBUS_TOPIC_SENSOR, health_handler, &hm);
mbus_subscribe(&bus, MBUS_TOPIC_ANY, monitor_handler, NULL);

Features

  • Topic-based pub/sub with uint8_t topics
  • Wildcard subscriber support (MBUS_TOPIC_ANY)
  • Fixed-size payload (default: 32 bytes, configurable)
  • Synchronous publish (mbus_publish)
  • Deferred ISR-safe queue (mbus_queue + mbus_dispatch)
  • Signal events (mbus_signal, mbus_queue_signal)
  • Unsubscribe by index and by topic
  • Slot reuse after unsubscribe
  • Built-in counters (publish, deliver, drop)

Quick Start

#include "mbus.h"

void on_sensor(const mbus_event_t *e, void *ctx) {
    (void)ctx;
    float temp;
    memcpy(&temp, e->payload, sizeof(temp));
}

mbus_t bus;
mbus_init(&bus, HAL_GetTick);
mbus_subscribe(&bus, MBUS_TOPIC_SENSOR, on_sensor, NULL);

float temp = 23.5f;
mbus_publish(&bus, MBUS_TOPIC_SENSOR, &temp, sizeof(temp));

Build And Test

Requirements:

  • GCC (or compatible C99 compiler)
  • make
  • microtest header in ../../microtest/include/mtest.h relative to tests/

Run tests:

cd tests
make

Configuration

Macro Default Description
MBUS_MAX_SUBSCRIBERS 16 Maximum subscribers
MBUS_MAX_PAYLOAD 32 Maximum payload size in bytes
MBUS_ENABLE_QUEUE 1 Enable deferred queue
MBUS_QUEUE_DEPTH 8 Queue depth (power of 2)

Project Structure

  • include/mbus.h - public API
  • src/mbus.c - implementation
  • tests/test_all.c - unit tests
  • docs/DESIGN.md - design rationale
  • CHANGELOG.md - release notes
  • CONTRIBUTING.md - contribution rules

License

MIT, see LICENSE.

About

Event pub/sub bus for embedded systems in C99 with zero allocations and ISR-safe deferred queue.

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors