Skip to main content

HAL Schemas

Hardware Abstraction Layer (HAL) schemas for Tafy Studio, providing standardized message formats for robot communication.

Overview​

This package contains JSON Schema definitions for all HAL messages, along with TypeScript and Python type definitions generated from these schemas.

Structure​

schemas/
├── common/ # Common schemas (envelope)
├── motor/ # Motor control schemas
├── sensor/ # Sensor data schemas
└── system/ # System messages (discovery, heartbeat)

src/ # TypeScript source
├── index.ts # Main exports and utilities
├── validator.ts # JSON Schema validator
└── types/ # Generated TypeScript types

python/ # Generated Python types
└── tafy_hal_schemas/

Usage​

TypeScript​

import { createEnvelope, SCHEMAS, CAPABILITIES, HALValidator } from '@tafy/hal-schemas';

// Create a motor command message
const message = createEnvelope(
SCHEMAS.motor.differential,
'esp32-motor-001',
[CAPABILITIES.motor.differential],
{
linear_meters_per_sec: 0.5,
angular_rad_per_sec: 0.0,
}
);

// Validate messages
const validator = new HALValidator();
const result = validator.validateMessage(message);

Python​

from tafy_hal_schemas import Envelope, Differential

# Create a motor command
command = Differential(
linear_meters_per_sec=0.5,
angular_rad_per_sec=0.0
)

Development​

Generate Types​

# Generate TypeScript types
pnpm run generate:types

# Generate Python types
pnpm run generate:python

# Generate both
pnpm run build

Validate Schemas​

# Validate all schemas
pnpm run validate

# Run tests
pnpm test

Schema Versioning​

HAL uses semantic versioning for schemas:

  • Major version: Breaking changes
  • Minor version: Backward compatible additions

Schema IDs follow the pattern: tafylabs/hal/{domain}/{type}/{major}.{minor}

License​

Apache 2.0