unit BaseData;

interface

uses
  Windows, Classes;

type
  { TBrickStepper }

  		///  Possible states are:
		///   * Stop = 1
		///   * Acceleration = 2
		///   * Run = 3
		///   * Deceleration = 4
		///   * Direction change to forward = 5
		///   * Direction change to backward = 6


  TBrickStepperState = ( BSS_NOOP,
                         BSS_STOP,
                         BSS_ACC,
                         BSS_RUN,
                         BSS_DEACC,
                         BSS_FW,
                         BSS_BW,
                         BSS_DISABLED,
                         BSS_ENABLED,
                         BSS_STOPPING,
                         BSS_DRIVEFORWARDING,
                         BSS_DRIVEBACKWARDING,
                         BSS_SETPOSITION_ZERO);

const
  { TBrickletIO4 }
  PIN_0 = 0;
  PIN_1 = 1;
  PIN_2 = 2;
  PIN_3 = 3;

  PIN_DIRECTION_OUTPUT = 'o';
  PIN_DIRECTION_INPUT = 'i';

  PIN_HIGH = TRUE;
  PIN_LOW = FALSE;

  { TBaseData }
  BASE_PACKET_LENGTH = 4;

  { TBrickStepper }
  BBS_MAP: array[0..12] of TIdentMapEntry = (
                                    (value:Ord(BSS_NOOP); name:'noop'),
                                    (value:Ord(BSS_STOP); name:'Stop    '),
                                     (value:Ord(BSS_ACC); name:'Accel.  '),
                                     (value:Ord(BSS_RUN); name:'Run     '),
                                   (value:Ord(BSS_DEACC); name:'Deaccel.'),
                                      (value:Ord(BSS_FW); name:'Forward '),
                                      (value:Ord(BSS_BW); name:'Backward'),
                                (value:Ord(BSS_DISABLED); name:'Disabled'),
                                 (value:Ord(BSS_ENABLED); name:'Enabled '),
                                (value:Ord(BSS_STOPPING); name:'Stop... '),
                         (value:Ord(BSS_DRIVEFORWARDING); name:'FW...   '),
                        (Value:Ord(BSS_DRIVEBACKWARDING); name:'BW...   '),
                        (Value:Ord(BSS_SETPOSITION_ZERO); name:'Pos.ZERO')
                              );

type

  { TDevice }
  TFirmwareVersions = array [0..2] of short;
  TBindingVersions = array [0..2] of short;
  TVersionRec = record
    Name: string;
    FirmwareVersions: TFirmwareVersions;
    BindingVersions: TBindingVersions;
  end;

  { TBrickStepper }
  TSpeedRampingRec = record
    acceleration: word;
    deacceleration: word;
  end;

  { TBrickletIO4 }
  TSetConfigurationRec = record
    pinMask: byte;
    direction: char;
    value: boolean;
  end;
  TGetConfigurationRec = record
    directionMask: byte;
    valueMask: byte;
  end;

  { TBaseData }
  TBaseData = class;

  TBaseArray = array of byte;
  PBaseArray = ^TBaseArray;

  TBaseData = class
  public
    data: TBaseArray;
    constructor Create(arrayLength: Integer; stackId: short; functionId: byte);
  end;

implementation

{ TBaseData }
constructor TBaseData.Create(arrayLength: Integer; stackId: short; functionId: byte);
begin
  SetLength(data,arrayLength);
  FillChar(data[0], Length(data), 0);
  data[0] := stackId;
  data[1] := functionId;
  data[2] := Length(data);
end;

end.
