CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/maven-org-sintef-jarduino--org-sintef-jarduino

A comprehensive Java library for interfacing with Arduino boards through serial, Bluetooth, and Ethernet connections

Overview
Eval results
Files

core-protocol.mddocs/

Core Protocol and Hardware Abstraction

The foundation of JArduino's Arduino communication system, providing hardware abstraction through enums and a protocol factory for creating Arduino command messages. This module defines the complete Arduino hardware model and protocol constants.

Capabilities

Arduino Hardware Enums

Strongly-typed enums for all Arduino hardware components providing type safety and easy pin identification.

enum DigitalPin {
    PIN_0, PIN_1, PIN_2, PIN_3, PIN_4, PIN_5, PIN_6, PIN_7,
    PIN_8, PIN_9, PIN_10, PIN_11, PIN_12, PIN_13,
    A_0, A_1, A_2, A_3, A_4, A_5;

    byte getValue();
    static DigitalPin fromValue(byte b);
}

enum AnalogPin {
    A_0, A_1, A_2, A_3, A_4, A_5;

    byte getValue();
    static AnalogPin fromValue(byte b);
}

enum PWMPin {
    PWM_PIN_3, PWM_PIN_5, PWM_PIN_6, PWM_PIN_9, PWM_PIN_10, PWM_PIN_11;

    byte getValue();
    static PWMPin fromValue(byte b);
}

enum InterruptPin {
    PIN_2_INT0, PIN_3_INT1;

    byte getValue();
    static InterruptPin fromValue(byte b);
}

Pin Configuration Enums

Configuration enums for Arduino pin modes, states, and settings.

enum PinMode {
    INPUT, OUTPUT
}

enum DigitalState {
    LOW, HIGH
}

enum AnalogReference {
    DEFAULT, INTERNAL, EXTERNAL
}

enum InterruptTrigger {
    CHANGE, RISING, FALLING, LOW
}

enum JArduinoCom {
    Ethernet, Serial, AndroidBluetooth
}

Protocol Command Factory

The main factory class for creating Arduino command messages. All Arduino operations are created through static methods that return FixedSizePacket objects.

abstract class JArduinoProtocol {
    // Protocol constants
    static final byte PIN_MODE = 2;
    static final byte DIGITAL_READ = 4;
    static final byte DIGITAL_WRITE = 3;
    static final byte ANALOG_REFERENCE = 6;
    static final byte ANALOG_READ = 7;
    static final byte ANALOG_WRITE = 9;
    static final byte TONE = 10;
    static final byte NO_TONE = 11;
    static final byte PULSE_IN = 12;
    static final byte PING = 66;
    static final byte ATTACH_INTERRUPT = 21;
    static final byte DETACH_INTERRUPT = 22;
    static final byte EEPROM_READ = 31;
    static final byte EEPROM_SYNC_WRITE = 34;
    static final byte EEPROM_WRITE = 33;

    // Digital I/O commands
    static FixedSizePacket createPinMode(DigitalPin pin, PinMode mode);
    static FixedSizePacket createDigitalRead(DigitalPin pin);
    static FixedSizePacket createDigitalWrite(DigitalPin pin, DigitalState value);

    // Analog I/O commands
    static FixedSizePacket createAnalogReference(AnalogReference type);
    static FixedSizePacket createAnalogRead(AnalogPin pin);
    static FixedSizePacket createAnalogWrite(PWMPin pin, byte value);

    // Audio commands
    static FixedSizePacket createTone(DigitalPin pin, short frequency, short duration);
    static FixedSizePacket createNoTone(DigitalPin pin);

    // Timing commands
    static FixedSizePacket createPulseIn(DigitalPin pin, DigitalState state);

    // Communication commands
    static FixedSizePacket createPing();

    // Interrupt commands
    static FixedSizePacket createAttachInterrupt(InterruptPin interrupt, InterruptTrigger mode);
    static FixedSizePacket createDetachInterrupt(InterruptPin interrupt);

    // EEPROM commands
    static FixedSizePacket createEeprom_read(short address);
    static FixedSizePacket createEeprom_sync_write(short address, byte value);
    static FixedSizePacket createEeprom_write(short address, byte value);

    // Result factory methods
    static FixedSizePacket createDigitalReadResult(DigitalState value);
    static FixedSizePacket createAnalogReadResult(short value);
    static FixedSizePacket createPulseInResult(int value);
    static FixedSizePacket createPong();
    static FixedSizePacket createInterruptNotification(InterruptPin interrupt);
    static FixedSizePacket createEeprom_value(byte value);
    static FixedSizePacket createEeprom_write_ack();

    // Message parsing
    static FixedSizePacket createMessageFromPacket(byte[] packet);
}

Base Message Class

Abstract base class for all protocol messages providing common functionality for message handling and serialization.

abstract class FixedSizePacket {
    byte[] getPacket();
    String toString();
    static String toString(byte[] msg);

    void setSourceAddress(byte address);
    byte getSourceAddress();
    void setTargetAddress(byte address);
    byte getTargetAddress();
    void setFrameNumber(byte frame);
    byte getFrameNumber();
    void setLength(byte length);
    byte getLength();

    byte[] getRawData();
    void setRawData(byte[] ndata);
}

Protocol Message Classes

Strongly-typed message classes for each Arduino operation, all extending JArduinoProtocolPacket which extends FixedSizePacket:

// Command message classes
class PinModeMsg extends JArduinoProtocolPacket;
class DigitalReadMsg extends JArduinoProtocolPacket;
class DigitalWriteMsg extends JArduinoProtocolPacket;
class AnalogReadMsg extends JArduinoProtocolPacket;
class AnalogWriteMsg extends JArduinoProtocolPacket;
class AnalogReferenceMsg extends JArduinoProtocolPacket;
class ToneMsg extends JArduinoProtocolPacket;
class NoToneMsg extends JArduinoProtocolPacket;
class PulseInMsg extends JArduinoProtocolPacket;
class AttachInterruptMsg extends JArduinoProtocolPacket;
class DetachInterruptMsg extends JArduinoProtocolPacket;
class Eeprom_readMsg extends JArduinoProtocolPacket;
class Eeprom_writeMsg extends JArduinoProtocolPacket;
class Eeprom_sync_writeMsg extends JArduinoProtocolPacket;
class PingMsg extends JArduinoProtocolPacket;

// Result message classes
class DigitalReadResultMsg extends JArduinoProtocolPacket;
class AnalogReadResultMsg extends JArduinoProtocolPacket;
class PulseInResultMsg extends JArduinoProtocolPacket;
class PongMsg extends JArduinoProtocolPacket;
class InterruptNotificationMsg extends JArduinoProtocolPacket;
class Eeprom_valueMsg extends JArduinoProtocolPacket;
class Eeprom_write_ackMsg extends JArduinoProtocolPacket;

abstract class JArduinoProtocolPacket extends FixedSizePacket;

Usage Examples

Basic Pin Control

// Set pin 13 as output
FixedSizePacket pinMode = JArduinoProtocol.createPinMode(DigitalPin.PIN_13, PinMode.OUTPUT);

// Turn on LED (write HIGH to pin 13)
FixedSizePacket digitalWrite = JArduinoProtocol.createDigitalWrite(DigitalPin.PIN_13, DigitalState.HIGH);

// Read digital value from pin 2
FixedSizePacket digitalRead = JArduinoProtocol.createDigitalRead(DigitalPin.PIN_2);

Analog Operations

// Set external analog reference
FixedSizePacket analogRef = JArduinoProtocol.createAnalogReference(AnalogReference.EXTERNAL);

// Read analog value from A0
FixedSizePacket analogRead = JArduinoProtocol.createAnalogRead(AnalogPin.A_0);

// Write PWM value (0-255) to pin 9
FixedSizePacket analogWrite = JArduinoProtocol.createAnalogWrite(PWMPin.PWM_PIN_9, (byte) 128);

Message Parsing

// Parse incoming message from Arduino
byte[] incomingData = // ... received from communication layer
FixedSizePacket parsedMessage = JArduinoProtocol.createMessageFromPacket(incomingData);
System.out.println("Received: " + parsedMessage.toString());

Install with Tessl CLI

npx tessl i tessl/maven-org-sintef-jarduino--org-sintef-jarduino

docs

advanced-features.md

bluetooth-communication.md

core-protocol.md

gui-components.md

index.md

message-handling.md

serial-communication.md

tile.json