# elemprod/lptask architecture

> Architecture diagram of the GitHub repository elemprod/lptask, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-27). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/elemprod/lptask
- Repository: https://github.com/elemprod/lptask

## Overview

LPTASK is a small cooperative scheduler library for low-power embedded applications. An application initializes and starts the scheduler, configures tasks with intervals and optional data, then the scheduler checks expiration, dispatches handlers in the main context, and sleeps between work through platform-specific port functions. Tasks may be repeating or one-shot, buffered or unbuffered, and buffered tasks may be allocated from pools. The core implementation and port contract were sampled; the graph reflects README-documented capabilities where individual implementations were not sampled.

Main entry points: [`src/scheduler/scheduler.c`](https://github.com/elemprod/lptask/blob/main/src/scheduler/scheduler.c) (Scheduler core), [`src/scheduler/scheduler.h`](https://github.com/elemprod/lptask/blob/main/src/scheduler/scheduler.h) (Scheduler API), [`src/scheduler/sched_port.h`](https://github.com/elemprod/lptask/blob/main/src/scheduler/sched_port.h) (Platform port contract), [`src/scheduler/sched_types.h`](https://github.com/elemprod/lptask/blob/main/src/scheduler/sched_types.h) (Task types)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["Application API"]
  node_api["Scheduler API<br/>[scheduler.h]"]
  node_types["Task types<br/>[sched_types.h]"]
  node_helpers["Timing helpers<br/>[sched_helper.h]"]
end

subgraph group_engine["Scheduler Engine"]
  node_core["Scheduler core<br/>[scheduler.c]"]
  node_queue["Active task queue<br/>[scheduler.c]"]
  node_pool["Buffered task pools<br/>[scheduler.c]"]
end

subgraph group_platform["Platform Support"]
  node_port["Platform port contract<br/>[sched_port.h]"]
end

node_application(("Embedded application"))
node_handlers["Task handlers"]
node_platform["Platform timer and sleep"]

node_application -->|"configures tasks"| node_api
node_api -->|"uses types"| node_types
node_api -->|"calls"| node_core
node_application -->|"queries timing"| node_helpers
node_core -->|"updates queue"| node_queue
node_core -->|"allocates tasks"| node_pool
node_core -->|"dispatches expired"| node_handlers
node_core -->|"calls port hooks"| node_port
node_port -->|"requires implementation"| node_platform

click node_api "https://github.com/elemprod/lptask/blob/main/src/scheduler/scheduler.h"
click node_types "https://github.com/elemprod/lptask/blob/main/src/scheduler/sched_types.h"
click node_helpers "https://github.com/elemprod/lptask/blob/main/src/scheduler/sched_helper.h"
click node_core "https://github.com/elemprod/lptask/blob/main/src/scheduler/scheduler.c"
click node_queue "https://github.com/elemprod/lptask/blob/main/src/scheduler/scheduler.c"
click node_pool "https://github.com/elemprod/lptask/blob/main/src/scheduler/scheduler.c"
click node_port "https://github.com/elemprod/lptask/blob/main/src/scheduler/sched_port.h"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_api,node_types,node_helpers toneBlue
class node_core,node_queue,node_pool toneAmber
class node_port toneMint
class node_application,node_platform toneIndigo
class node_handlers toneRose
```

## Components

### Application API

- [Scheduler API](https://github.com/elemprod/lptask/blob/main/src/scheduler/scheduler.h): `src/scheduler/scheduler.h`
- [Task types](https://github.com/elemprod/lptask/blob/main/src/scheduler/sched_types.h): `src/scheduler/sched_types.h`
- [Timing helpers](https://github.com/elemprod/lptask/blob/main/src/scheduler/sched_helper.h): `src/scheduler/sched_helper.h`

### Scheduler Engine

- [Scheduler core](https://github.com/elemprod/lptask/blob/main/src/scheduler/scheduler.c): `src/scheduler/scheduler.c`
- [Active task queue](https://github.com/elemprod/lptask/blob/main/src/scheduler/scheduler.c): `src/scheduler/scheduler.c`
- [Buffered task pools](https://github.com/elemprod/lptask/blob/main/src/scheduler/scheduler.c): `src/scheduler/scheduler.c`

### Platform Support

- [Platform port contract](https://github.com/elemprod/lptask/blob/main/src/scheduler/sched_port.h): `src/scheduler/sched_port.h`

### Other components

- **Embedded application**
- **Task handlers**
- **Platform timer and sleep**

## Connections

- Embedded application → Scheduler API: configures tasks
- Scheduler API → Task types: uses types
- Scheduler API → Scheduler core: calls
- Embedded application → Timing helpers: queries timing
- Scheduler core → Active task queue: updates queue
- Scheduler core → Buffered task pools: allocates tasks
- Scheduler core → Task handlers: dispatches expired
- Scheduler core → Platform port contract: calls port hooks
- Platform port contract → Platform timer and sleep: requires implementation
