Skip to main content

AppBlocks Development Kit (ADK)

The AppBlocks Development Kit (ADK) provides tools and resources for developing custom plugins, extensions, and advanced integrations for the AppBlocks platform.

Overview​

The ADK enables:

  • Custom block development
  • Plugin creation
  • Protocol extensions
  • Hardware driver development
  • Advanced integrations

Prerequisites​

Required Knowledge​

  • Programming experience (C, JavaScript, or TypeScript)
  • Understanding of IoT concepts
  • Familiarity with AppBlocks platform
  • Basic embedded systems knowledge

Required Software​

  • AppBlocks Designer
  • Code editor (VS Code recommended)
  • Git version control
  • Node.js (for web development)
  • Compiler toolchain (for firmware)

Installation​

Download ADK​

  1. Visit AppBlocks developer portal
  2. Download ADK package
  3. Extract to development directory

Install Dependencies​

# Node.js dependencies
npm install

# Compiler toolchain (platform-specific)
# Follow platform-specific instructions

Verify Installation​

# Check ADK version
adk --version

# Verify dependencies
adk check

ADK Components​

Block SDK​

Create custom blocks:

  • Block definition API
  • Parameter configuration
  • Execution logic
  • Visual representation

Protocol SDK​

Implement new protocols:

  • Protocol interface
  • Message parsing
  • State management
  • Error handling

Hardware SDK​

Develop hardware drivers:

  • Hardware abstraction layer
  • Register access
  • Interrupt handling
  • DMA operations

Testing Framework​

Test your extensions:

  • Unit testing
  • Integration testing
  • Simulation tools
  • Debug utilities

Creating Custom Blocks​

Basic Block Structure​

// block-definition.js
module.exports = {
name: "My Custom Block",
category: "Custom",
inputs: ["trigger"],
outputs: ["success", "error"],
parameters: [
{
name: "value",
type: "number",
default: 0
}
],
execute: async function(context, params) {
// Block logic here
const result = params.value * 2;
return { result: result };
}
};

Block Properties​

Define block characteristics:

  • Name: Display name
  • Category: Where block appears
  • Inputs: Input connection points
  • Outputs: Output connection points
  • Parameters: User-configurable values
  • Icon: Visual representation

Block Logic​

Implement execution:

execute: async function(context, params) {
// Access parameters
const value = params.myParameter;

// Read variables
const sensorValue = context.getVariable("sensor1");

// Perform logic
const result = calculateSomething(value, sensorValue);

// Set variables
context.setVariable("result", result);

// Trigger outputs
return { output: "success", data: result };
}

Plugin Development​

Plugin Structure​

my-plugin/
├── plugin.json
├── blocks/
│ ├── block1.js
│ └── block2.js
├── features/
│ └── my-feature.js
├── assets/
│ └── icons/
└── README.md

Plugin Manifest​

{
"name": "My Custom Plugin",
"version": "1.0.0",
"author": "Your Name",
"description": "Custom functionality",
"blocks": [
"blocks/block1.js",
"blocks/block2.js"
],
"features": [
"features/my-feature.js"
]
}

Registration​

Register plugin with AppBlocks:

adk plugin register ./my-plugin

Protocol Extensions​

Implement Protocol Interface​

class MyProtocol {
constructor(config) {
this.config = config;
}

async connect() {
// Connection logic
}

async send(data) {
// Send logic
}

async receive() {
// Receive logic
}

async disconnect() {
// Cleanup logic
}
}

Protocol Configuration​

Define protocol parameters:

  • Connection settings
  • Timeouts and retries
  • Data format
  • Error handling

Hardware Drivers​

Driver Template​

// my_sensor_driver.c
#include "adk_driver.h"

static int my_sensor_init(struct device *dev) {
// Initialize hardware
return 0;
}

static int my_sensor_read(struct device *dev, void *data) {
// Read sensor data
return 0;
}

static struct driver_api my_sensor_api = {
.init = my_sensor_init,
.read = my_sensor_read
};

DRIVER_REGISTER(my_sensor, &my_sensor_api);

Hardware Abstraction​

Use HAL functions:

  • GPIO access
  • I2C/SPI communication
  • UART serial
  • Timers and interrupts

Testing​

Unit Tests​

// test/block-test.js
const assert = require('assert');
const MyBlock = require('../blocks/my-block');

describe('My Block', function() {
it('should execute correctly', async function() {
const result = await MyBlock.execute({}, {value: 5});
assert.equal(result.output, 10);
});
});

Integration Tests​

Test with simulator:

  1. Load custom plugin
  2. Create test application
  3. Run in simulator
  4. Verify behavior

Hardware Tests​

Test on actual hardware:

  1. Deploy to device
  2. Monitor execution
  3. Validate outputs
  4. Check performance

Debugging​

Debug Mode​

Enable detailed logging:

context.log("Debug message");
context.warn("Warning message");
context.error("Error message");

Breakpoints​

Use debugger:

// In your block code
debugger; // Execution pauses here

Remote Debugging​

Debug on device:

  1. Enable remote debug
  2. Connect debugger
  3. Set breakpoints
  4. Inspect variables

Documentation​

Document Your Plugin​

Create comprehensive docs:

  • Installation instructions
  • Usage examples
  • API reference
  • Troubleshooting guide

Code Comments​

Document your code:

/**
* Calculates the average of sensor readings
* @param {Array} readings - Array of sensor values
* @param {Number} count - Number of readings
* @returns {Number} Average value
*/
function calculateAverage(readings, count) {
// Implementation
}

Distribution​

Package Plugin​

adk plugin package ./my-plugin
# Creates my-plugin-1.0.0.zip

Publish​

Share your plugin:

  • AppBlocks plugin marketplace
  • GitHub repository
  • Private distribution
  • Company internal repo

Best Practices​

ADK development best practices:

  1. Follow coding standards
  2. Write comprehensive tests
  3. Document thoroughly
  4. Handle errors gracefully
  5. Optimize performance
  6. Version control everything
  7. Provide examples
  8. Support debugging

Example Projects​

Example 1: Custom Sensor​

Complete example of integrating custom sensor

Example 2: Protocol Plugin​

Implementation of custom communication protocol

Example 3: Processing Block​

Advanced data processing block

Resources​

Documentation​

  • ADK API Reference
  • Block Development Guide
  • Protocol Extension Guide
  • Hardware Driver Guide

Community​

  • Developer forum
  • GitHub discussions
  • Sample projects
  • Video tutorials

Support​

  • Technical support email
  • Issue tracker
  • FAQ
  • Office hours

Troubleshooting​

Common ADK issues:

  • Build errors: Check dependencies and toolchain
  • Plugin not loading: Verify manifest and registration
  • Runtime errors: Enable debug logging
  • Performance issues: Profile and optimize

Updates​

Keep ADK updated:

# Check for updates
adk update check

# Update ADK
adk update install

See Also​