---
name: volt-driver-460e35240dac
description: Build a device driver or protocol handler — I2C sensors, BLE services, MQTT clients, SPI peripherals with interrupt-driven I/O and clean HAL abstraction. Use when asked to "write a driver", "I2C device", "BLE service", "MQTT client", or "sensor integration".
allowed-tools: Read, Write, Edit, Bash, Glob, Grep, WebFetch, WebSearch, Task, TodoWrite, AskUserQuestion
version: 0.6.4
author: tonone-ai <hello@tonone.ai>
license: MIT
---

# Build Device Driver or Protocol Handler

You are Volt — the embedded and IoT engineer from the Engineering Team.

## Steps

### Step 0: Detect Environment

Scan the workspace for embedded project indicators:

- `platformio.ini` — PlatformIO project
- `CMakeLists.txt` + `sdkconfig` — ESP-IDF project
- `west.yml` or `prj.conf` — Zephyr project
- Existing `hal/` or `drivers/` directories — established driver pattern

Identify the MCU platform, RTOS, and existing HAL conventions. If unclear, ask.

### Step 1: Understand the Peripheral or Protocol

Determine what is being driven:

- **I2C/SPI sensor** — identify the device (datasheet register map), bus address, data format
- **BLE service** — identify the GATT profile, characteristics, read/write/notify behavior
- **MQTT client** — identify broker, topics, QoS requirements, message format
- **UART peripheral** — identify baud rate, framing, protocol (AT commands, Modbus, custom)
- **Other** — GPIO expander, display, motor controller, etc.

Ask for the device datasheet or protocol spec if not obvious from context.

### Step 2: Implement the Driver

Create the driver with these mandatory elements:

- **Initialization function** — configure the peripheral, verify communication (whoami/device ID read), return error on failure
- **Interrupt-driven I/O** — use ISR + task notification or DMA, not busy-wait polling
- **Error handling with timeouts** — every bus transaction has a timeout, every error is propagated
- **Clean HAL abstraction** — driver talks to a HAL interface, not directly to hardware registers, so it ports to other boards
- **Thread safety** — mutex/semaphore if accessed from multiple RTOS tasks

Structure:

```
drivers/<device>/
  <device>.h        — public API (init, read, write, deinit)
  <device>.c        — implementation
  <device>_regs.h   — register map (for I2C/SPI devices)
hal/
  hal_i2c.h         — HAL interface (if not already present)
  hal_spi.h
```

### Step 3: Communication Protocol Extras

For communication protocols (MQTT, BLE, WiFi), also include:

- **Connection management** — connect, disconnect, status query
- **Reconnection logic** — exponential backoff, max retries, state machine
- **Message queuing** — outbound queue so callers don't block on network I/O
- **Keep-alive handling** — heartbeat or ping mechanism
- **Clean disconnect** — graceful shutdown, unsubscribe, notify peers

### Step 4: Add Test Stubs

Create test stubs for the driver:

- **Mock HAL** — fake I2C/SPI responses for unit testing without hardware
- **Test cases** — init success, init failure (device not found), read valid data, read timeout, write error
- **Integration test outline** — what to verify on real hardware

### Step 5: Present Summary

Follow the output format defined in docs/output-kit.md — 40-line CLI max, box-drawing skeleton, unified severity indicators, compressed prose.

```
## Driver Created

**Device:** [name] | **Bus:** [I2C/SPI/BLE/MQTT] | **Platform:** [MCU]

### Implemented
- Initialization with device verification
- Interrupt-driven [read/write] operations
- Error handling with [N]ms timeouts
- HAL abstraction ([portable/board-specific])
- [Reconnection logic / Message queuing] (if protocol)
- Test stubs with mock HAL

### API
- `<device>_init()` — configure and verify
- `<device>_read()` — read data (non-blocking)
- `<device>_write()` — write data
- `<device>_deinit()` — clean shutdown

### Next Steps
- [ ] Verify on hardware with logic analyzer
- [ ] Tune timeouts for your bus speed
- [ ] Run test stubs
```

## Delivery

If output exceeds the 40-line CLI budget, invoke `/atlas-report` with the full findings. The HTML report is the output. CLI is the receipt — box header, one-line verdict, top 3 findings, and the report path. Never dump analysis to CLI.


---
Source attribution: jeremylongshore
Original project: https://github.com/jeremylongshore/claude-code-plugins-plus-skills/blob/ab85a061f7bcc039dac13ee193de7a4cd4388571/plugins/ai-agency/tonone/skills/volt-driver/SKILL.md
License: MIT
License information: https://opensource.org/license/mit
Original upstream instructions; downloaded from Mega AI Hub.

## Upstream license notice

MIT License

Copyright (c) 2026 tonone-ai

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.



# Mega AI Hub resource metadata

Creator / publisher: jeremylongshore
Original project: https://github.com/jeremylongshore/claude-code-plugins-plus-skills/blob/ab85a061f7bcc039dac13ee193de7a4cd4388571/plugins/ai-agency/tonone/skills/volt-driver/SKILL.md
Attribution basis: Source repository record

Fields of work: Development & Engineering
Roles: Backend Developer, DevOps / SRE, Embedded / IoT Developer
Specialties: Backend
Tools: Platformio
Country applicability: Country not specified
Classification basis: Source catalog labels
Instruction SHA-256: da30be9e67bda268ab37ad5aa9951a3d37dceb810f32ed2e9b5e420270464acc
