jmri.jmrix.loconet.sdf
Class SdfMacro

java.lang.Object
  extended by jmri.jmrix.loconet.sdf.SdfMacro
All Implemented Interfaces:
SdfConstants
Direct Known Subclasses:
BranchTo, ChannelStart, CommentMacro, DelaySound, EndSound, FourByteMacro, GenerateTrigger, InitiateSound, LabelMacro, LoadModifier, MaskCompare, Play, SdlVersion, SkemeStart, SkipOnTrigger, TwoByteMacro

public abstract class SdfMacro
extends Object
implements SdfConstants

Common base for all the SDF macros defined by Digitrax for their sound definition language

Each macro has a number of descriptive forms:

name()
Just the name, in MPASM form.
toString()
A brief description, with a terminating newline
oneInstructionString()
The entire single instruction in MPASM from, with a terminating newline
allInstructionString()
The instruction and all those logically grouped within it.
name()

SdfMacro and its subclasses don't do the notification needed to be Models in an MVC edit paradyme. This is because there are a lot of SdfMacros in realistic sound file, and the per-object overhead needed would be too large. Hence (or perhaps because of no need), there is no support for simultaneous editing of a single macro instruction updating multiple windows. You can have multiple editors open on a single SdfBuffer, but these are not interlocked against each other. (We could fix this by having a shared pool of "objects to be notified of changes in the SdfBuffer, acccessed by reference during editing (to avoid another dependency), but that's a project for another day)

Author:
Bob Jacobsen Copyright (C) 2007

Field Summary
 
Fields inherited from interface jmri.jmrix.loconet.sdf.SdfConstants
ABOVE, ABOVE_BIT, ANALOG_GAIN_MODIFY, ANALOG_PITCH_MODIFY, arg1ModCodes, arg1ModNames, arg3ModCodes, arg3ModMasks, arg3ModNames, BLEND_ALL, BLEND_CURRENT_CHNL, BLEND_FASE0, BLEND_FASE1, BLEND_FASEMASK, BLEND_GAIN0, BLEND_GAIN1, BLEND_GAINMASK, BLEND_TGTMASK, blendArg1Codes, blendArg1Masks, blendArg1Names, blendArg2Codes, blendArg2Names, blendArg3Codes, blendArg3Names, BLENDF_DSL_ACCEL0, BLENDF_DSL_ACCEL1, BLENDF_DSL_DECEL0, BLENDG_DSL_ACCEL0, BLENDG_DSL_ACCEL1, BLENDG_DSL_DECEL0, CMD_ZAP_BIT, COMP_7LSB, COMP_ALL, CV_PITCH_MODIFY, DEFAULT_GLBL_GAIN, DELAY_CV, DELAY_GLOBAL, DELAY_THIS, DITHER, DITHER_BIT, DITHERG_DIESEL, DITHERG_NONE, DITHERG_WHISTLE, ditherGCodes, ditherGNames, DITHERP_DIESEL, DITHERP_NONE, DITHERP_WHISTLE, ditherPCodes, ditherPNames, editorTriggerNames, FALSE, FCMD_MASK, FCMD_NONE, fixedCVCodes, fixedCVNames, FMATH_AND, FMATH_INTEGRATE, FMATH_LODE, FMATH_OR, FMATH_TEST_ZERO, FMATH_XOR, GCMD_MASK, GCMD_NONE, IMMED_DATA, IMMED_GAIN_MODIFY, loop_GLOBAL, loop_GLOBAL_BIT, loop_INVERT, loop_INVERT_BIT, loop_MASK, loop_STD, loop_till_cam, loop_till_DIRNOW_CHNG, loop_till_F0, loop_till_F1, loop_till_F10, loop_till_F11, loop_till_F12, loop_till_F2, loop_till_F3, loop_till_F4, loop_till_F5, loop_till_F6, loop_till_F7, loop_till_F8, loop_till_F9, loop_till_init_TRIG, loop_till_MOVING, loop_till_NEVER, loop_till_SCAT4, loop_till_SCAT5, loop_till_SCAT6, loop_till_SCAT7, loop_till_SND_ACTV11, loopCodes, loopMasks, loopNames, LOW_DITH, MAX_DITH, MAXG_DIESEL, MAXG_NONE, MAXG_STEAM, MAXG_WHISTLE, maxGCodes, maxGNames, MAXP_DIESEL, MAXP_NONE, MAXP_STEAM, MAXP_WHISTLE, maxPCodes, maxPNames, MERGE_ALL_MASK, MG0_BIT, MG1_BIT, MID_DITH, MIN_DITH, modControlCodes, modControlNames, MOVE_BIT, MTYPE_BLEND, MTYPE_GAIN, MTYPE_PITCH, MTYPE_SCATTER, MTYPE_SNDCV, MTYPE_TIME, MTYPE_WORK_IMMED, MTYPE_WORK_INDIRECT, MVFN_MASK, no_loop, NO_PREEMPT_TRIG, NO_PREEMPT_TRIG_BIT, NORMAL, NOT_TRIG, NOT_TRIG_BIT, premptCodes, premptMasks, premptNames, RUN_WHILE_TRIG, RUN_WHILE_TRIG_BIT, SCALE_2, SCALE_4, SCALE_5, SCALE_6, SCALE_8, SCALE_C, SCALE_F, SCAT_CHNL0, SCAT_CHNL1, SCAT_CHNL2, SCAT_CHNL3, SCAT_CHNL4, SCAT_CHNL5, SCAT_CHNL6, SCAT_CHNL7, SCAT_CMD_PERIOD, SCAT_CMD_PERIOD_REV, SCAT_CMD_SAWTOOTH, SCAT_CMD_SAWTOOTH_REV, SCAT_PERIOD_POLARITY_BIT, SCAT_TRIG_BASE, scatChannelCodes, scatChannelNames, scatCommandCodes, scatCommandNames, SCV_137, SCV_138, SCV_DCONFIG, SCV_DISTANCE_RATE, SCV_FREEFORM, SCV_MAIN_PITCH, SCV_MUTE_VOL, SCV_NOTCH, SCV_STGEAR, SINTEN_HIGH, SINTEN_IMMED, SINTEN_LOW, SINTEN_MID, SINTEN_MIN, SINTEN_OFF, sintenCodes, sintenNames, SK_SENS_BIT, SKATTER_INCREMENT, SKIP_GRTR, SKIP_LESS, SKIP_RSVD, SKIP_SAME, SNDCV_CONFIGA, SNDCV_CONFIGB, SNDCV_SRC, SNDCV_SRC_BIT, SNDCV_STEAM, STEAM_CAM_BIT, SUM_BIT, SUMG, T_SPD_ACC_CHNG, T_SPD_ACCEL1, T_SPD_ACCEL2, T_SPD_DEC_CHNG, T_SPD_DEC_IDLE, T_SPD_DEC_SP1, T_SPD_DEC_SP2, T_SPD_DECEL1, T_SPD_DECEL2, T_SPD_DIR_CHNG, T_SPD_IDLE, T_SPD_IDLEXIT, T_SPD_MUTE, T_SPD_RUN, T_SPD_TURNOFF, T_SPD_TURNON, T_SS_BASE, TARGET_DATA, TRIG_BSC0, TRIG_BSC1, TRIG_BSC2, TRIG_BSC3, TRIG_BSC4, TRIG_BSC5, TRIG_BSC6, TRIG_BSC7, TRIG_CAM, TRIG_DIRNOW_CHNG, TRIG_DISTANCE, TRIG_FACTORY_CVRESET, TRIG_FALSE, TRIG_IN_0, TRIG_IN_1, TRIG_IN_2, TRIG_IN_3, TRIG_IN_4, TRIG_IN_5, TRIG_IN_6, TRIG_IN_7, TRIG_IN_BASE, TRIG_MATH, TRIG_MODE_CHNG, TRIG_MOVING, TRIG_NEVER, TRIG_NOT_TRIG, TRIG_NOTCH_CHNG, TRIG_OPSPROGWR_CV, TRIG_SCAT0, TRIG_SCAT1, TRIG_SCAT2, TRIG_SCAT3, TRIG_SCAT4, TRIG_SCAT5, TRIG_SCAT6, TRIG_SCAT7, TRIG_SF0, TRIG_SF1, TRIG_SF10, TRIG_SF11, TRIG_SF12, TRIG_SF13, TRIG_SF14, TRIG_SF15, TRIG_SF16, TRIG_SF17, TRIG_SF18, TRIG_SF19, TRIG_SF2, TRIG_SF20, TRIG_SF21, TRIG_SF22, TRIG_SF23, TRIG_SF24, TRIG_SF25, TRIG_SF26, TRIG_SF27, TRIG_SF28, TRIG_SF3, TRIG_SF4, TRIG_SF5, TRIG_SF6, TRIG_SF7, TRIG_SF8, TRIG_SF9, TRIG_SND_ACTV11, TRIG_SPD_DEC, TRIG_SPD_INC, TRIG_TIME_16PPS, TRIG_TRUE, triggerCodes, triggerNames, trigLogicCodes, trigLogicMasks, trigLogicNames, TRUE, trueFalseCodes, trueFalseNames, TSPD, wavebrkCodes, wavebrkMasks, wavebrkNames, WKSB_ACEL_BIT, WKSB_ACEL_MASK, WKSB_ANALOG_BIT, WKSB_ANALOG_MASK, WKSB_DIRNOW_BIT, WKSB_DIRNOW_MASK, WKSB_MATH_BIT, WKSB_MATH_MASK, WKSB_RUN_BIT, WKSB_RUN_MASK, WKSB_SPDDELTA_BIT, WKSB_SPDDELTA_MASK, WORK_ACHNL_7E, WORK_ACHNL_7F, WORK_DISTANCE, WORK_GAIN_TRIM, WORK_GLBL_GAIN, WORK_MVOLTS, WORK_NOTCH, WORK_PEAK_SPD, WORK_PITCH_TRIM, WORK_SCATTER4, WORK_SCATTER5, WORK_SCATTER6, WORK_SCATTER7, WORK_SERVO, WORK_SKAT_FAST, WORK_SKAT_SLOW, WORK_SPEED, WORK_SPEED_DELTA, WORK_STATUS_BITS, WORK_TIMEBASE, WORK_USER_0, WORK_USER_1, WORK_USER_2, WORK_USER_3, WORK_USER_4, WORK_USER_5, WORK_USER_LINES, workRegCodes, workRegNames, workStatusBitCodes, workStatusBitNames, ZAP
 
Constructor Summary
SdfMacro()
           
 
Method Summary
abstract  String allInstructionString(String indent)
          Provide instructions in MPASM format, including the trailing newline and all nested instructions.
static SdfMacro decodeInstruction(SdfBuffer buff)
          Return the next instruction macro in a buffer.
 List<SdfMacro> getChildren()
          Access child (nested) instructions.
abstract  int length()
          Provide number of bytes defined by this macro
 void loadByteArray(SdfBuffer buffer)
          Store into a buffer.
abstract  String name()
          Name used by the macro in the SDF definition
abstract  String oneInstructionString()
          Provide single instruction in MPASM format, including the trailing newline.
abstract  String toString()
          Provide a single-line simplified representation, including the trailing newline.
 int totalLength()
          Total length, including contained instructions
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

SdfMacro

public SdfMacro()
Method Detail

name

public abstract String name()
Name used by the macro in the SDF definition

Returns:
Fixed name associated with this type of instructio

length

public abstract int length()
Provide number of bytes defined by this macro

Returns:
Fixed numher of bytes defined (a constant for the instruction type)

toString

public abstract String toString()
Provide a single-line simplified representation, including the trailing newline. This is used e.g. in the tree format section of the EditorFrame.

Overrides:
toString in class Object
Returns:
newline-terminated string; never null

oneInstructionString

public abstract String oneInstructionString()
Provide single instruction in MPASM format, including the trailing newline.

Returns:
Newline terminated string, never null

allInstructionString

public abstract String allInstructionString(String indent)
Provide instructions in MPASM format, including the trailing newline and all nested instructions.

Parameters:
indent - String inserted at the start of each output line, typically some number of spaces.
Returns:
Newline terminated string, never null

getChildren

public List<SdfMacro> getChildren()
Access child (nested) instructions.

Returns:
List of children, which will be null except in case of nesting.

totalLength

public int totalLength()
Total length, including contained instructions


loadByteArray

public void loadByteArray(SdfBuffer buffer)
Store into a buffer.

This provides a default implementation for children, but each subclass needs to store it's own data with setAtIndexAndInc()


decodeInstruction

public static SdfMacro decodeInstruction(SdfBuffer buff)
Return the next instruction macro in a buffer.

Note this uses the index contained in the SdfBuffer implementation, and has the side-effect of bumping that forward.

Parameters:
buff - The SdfBuffer being scanned for instruction macros.
Returns:
Object of SdfMacro subtype for specific next instruction


Copyright © 1997 - 2011 JMRI Community.
JMRI, DecoderPro, PanelPro, SoundPro, DispatcherPro and associated logos are our trademarks.

Additional information on copyright, trademarks and licenses is linked here.
Site hosted by: Get JMRI Model Railroad Interface at SourceForge.net. Fast, secure and Free Open Source software downloads