From 63de9c6d7dd4298d00a53baeae7f28233c748b77 Mon Sep 17 00:00:00 2001 From: "dennis.sheirer" Date: Mon, 4 Aug 2014 00:06:00 +0000 Subject: [PATCH] MPT1327 - adds sync pattern for French variant of MPT1327. Channel decode configuration editor now contains a combo box that allows selection of normal or French variant. --- src/bits/SyncPattern.java | 18 +++++++- src/decode/DecoderFactory.java | 6 ++- src/decode/config/DecodeConfigMPT1327.java | 14 ++++++ src/decode/mpt1327/MPT1327Decoder.java | 51 ++++++++++++++++++++-- src/decode/mpt1327/MPT1327Editor.java | 25 ++++++++++- src/instrument/gui/WaveSourceFrame.java | 3 +- 6 files changed, 108 insertions(+), 9 deletions(-) diff --git a/src/bits/SyncPattern.java b/src/bits/SyncPattern.java index 817bad63..afafed55 100644 --- a/src/bits/SyncPattern.java +++ b/src/bits/SyncPattern.java @@ -68,18 +68,32 @@ public enum SyncPattern MPT1327_CONTROL( new boolean[] { true, false, true, false, //Includes 4 of 16 rev bits -// false, true, false, true, //Includes 4 of 16 rev bits true, true, false, false, //1100 0xA false, true, false, false, //0100 0x4 true, true, false, true, //1101 0xD false, true, true, true //0111 0x7 }), + /** + * French variant of MPT-1327. This variant uses the following reversal + * pattern and sync pattern: + * + * REV: 0101 0101 0100 1011 + * SYNC: 1100 1100 0111 1111 + */ + MPT1327_CONTROL_FRENCH( new boolean[] + { + true, false, true, true, //Includes final 4 of 16 rev bits + true, true, false, false, //1100 0xA + true, true, false, false, //1100 0xA + false, true, true, true, //0111 0x7 + true, true, true, true, //1111 0xF + }), + /* Revs (0xA) and Sync(0x3B28) = 1010 0011101100101000 */ MPT1327_TRAFFIC( new boolean[] { true, false, true, false, //1010 Includes 4 of 16 rev bits -// false, true, false, true, //1010 Includes 4 of 16 rev bits false, false, true, true, //0011 0x3 true, false, true, true, //1011 0xB false, false, true, false, //0010 0x2 diff --git a/src/decode/DecoderFactory.java b/src/decode/DecoderFactory.java index 402529b3..9673541d 100644 --- a/src/decode/DecoderFactory.java +++ b/src/decode/DecoderFactory.java @@ -79,7 +79,11 @@ public class DecoderFactory ltrNetConfig.getMessageDirection() ); break; case MPT1327: - retVal = new MPT1327Decoder( sampleType, aliasList ); + DecodeConfigMPT1327 mptConfig = (DecodeConfigMPT1327)config; + + + retVal = new MPT1327Decoder( sampleType, aliasList, + mptConfig.getSync() ); break; case PASSPORT: retVal = new PassportDecoder( sampleType, aliasList ); diff --git a/src/decode/config/DecodeConfigMPT1327.java b/src/decode/config/DecodeConfigMPT1327.java index 2a5db097..fd68c706 100644 --- a/src/decode/config/DecodeConfigMPT1327.java +++ b/src/decode/config/DecodeConfigMPT1327.java @@ -17,13 +17,16 @@ ******************************************************************************/ package decode.config; +import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; import decode.DecoderType; +import decode.mpt1327.MPT1327Decoder.Sync; public class DecodeConfigMPT1327 extends DecodeConfiguration { private String mChannelMapName; + private Sync mSync = Sync.NORMAL; public DecodeConfigMPT1327() { @@ -40,4 +43,15 @@ public class DecodeConfigMPT1327 extends DecodeConfiguration { mChannelMapName = name; } + + @XmlAttribute( name="sync" ) + public Sync getSync() + { + return mSync; + } + + public void setSync( Sync sync ) + { + mSync = sync; + } } diff --git a/src/decode/mpt1327/MPT1327Decoder.java b/src/decode/mpt1327/MPT1327Decoder.java index 55378951..9c43df9f 100644 --- a/src/decode/mpt1327/MPT1327Decoder.java +++ b/src/decode/mpt1327/MPT1327Decoder.java @@ -82,7 +82,9 @@ public class MPT1327Decoder extends Decoder implements Instrumentable private MessageFramer mTrafficMessageFramer; private MPT1327MessageProcessor mMessageProcessor; - public MPT1327Decoder( SampleType sampleType, AliasList aliasList ) + public MPT1327Decoder( SampleType sampleType, + AliasList aliasList, + Sync sync ) { super( sampleType ); @@ -134,13 +136,13 @@ public class MPT1327Decoder extends Decoder implements Instrumentable /* Message framer for control channel messages */ mControlMessageFramer = - new MessageFramer( SyncPattern.MPT1327_CONTROL.getPattern(), + new MessageFramer( sync.getControlSyncPattern().getPattern(), sMESSAGE_LENGTH ); mSymbolBroadcaster.addListener( mControlMessageFramer ); /* Message framer for traffic channel massages */ mTrafficMessageFramer = - new MessageFramer( SyncPattern.MPT1327_TRAFFIC.getPattern(), + new MessageFramer( sync.getTrafficSyncPattern().getPattern(), sMESSAGE_LENGTH ); mSymbolBroadcaster.addListener( mTrafficMessageFramer ); @@ -280,4 +282,47 @@ public class MPT1327Decoder extends Decoder implements Instrumentable break; } } + + public enum Sync + { + NORMAL( "Normal", + SyncPattern.MPT1327_CONTROL, + SyncPattern.MPT1327_TRAFFIC ), + FRENCH( "French", + SyncPattern.MPT1327_CONTROL_FRENCH, + SyncPattern.MPT1327_TRAFFIC ); + + private String mLabel; + private SyncPattern mControlSyncPattern; + private SyncPattern mTrafficSyncPattern; + + private Sync( String label, + SyncPattern controlPattern, + SyncPattern trafficPattern ) + { + mLabel = label; + mControlSyncPattern = controlPattern; + mTrafficSyncPattern = trafficPattern; + } + + public String getLabel() + { + return mLabel; + } + + public SyncPattern getControlSyncPattern() + { + return mControlSyncPattern; + } + + public SyncPattern getTrafficSyncPattern() + { + return mTrafficSyncPattern; + } + + public String toString() + { + return getLabel(); + } + } } diff --git a/src/decode/mpt1327/MPT1327Editor.java b/src/decode/mpt1327/MPT1327Editor.java index c5ac2a38..e3289311 100644 --- a/src/decode/mpt1327/MPT1327Editor.java +++ b/src/decode/mpt1327/MPT1327Editor.java @@ -28,12 +28,14 @@ import controller.channel.ChannelNode; import decode.DecodeEditor; import decode.config.DecodeConfigMPT1327; import decode.config.DecodeConfiguration; +import decode.mpt1327.MPT1327Decoder.Sync; public class MPT1327Editor extends DecodeEditor { private static final long serialVersionUID = 1L; private JComboBox mComboChannelMaps; + private JComboBox mComboSync; private ChannelNode mChannelNode; public MPT1327Editor( DecodeConfiguration config, ChannelNode channelNode ) @@ -62,24 +64,41 @@ public class MPT1327Editor extends DecodeEditor add( new JLabel( "Channel Map" ), "wrap" ); add( mComboChannelMaps, "wrap" ); + mComboSync = new JComboBox(); + mComboSync.setModel( new DefaultComboBoxModel( Sync.values() ) ); + + add( new JLabel( "Sync" ), "wrap" ); + add( mComboSync, "wrap" ); + reset(); } @Override public void save() { + DecodeConfigMPT1327 config = (DecodeConfigMPT1327)mConfig; + ChannelMap selected = (ChannelMap)mComboChannelMaps.getSelectedItem(); if( selected != null ) { - ((DecodeConfigMPT1327)mConfig).setChannelMapName( selected.getName() ); + config.setChannelMapName( selected.getName() ); + } + + Sync selectedSync = (Sync)mComboSync.getSelectedItem(); + + if( selectedSync != null ) + { + config.setSync( selectedSync ); } } @Override public void reset() { - String name = ((DecodeConfigMPT1327)mConfig).getChannelMapName(); + DecodeConfigMPT1327 config = (DecodeConfigMPT1327)mConfig; + + String name = config.getChannelMapName(); ChannelMap selected = null; @@ -99,5 +118,7 @@ public class MPT1327Editor extends DecodeEditor mComboChannelMaps.setSelectedItem( selected ); mComboChannelMaps.requestFocus(); mComboChannelMaps.requestFocusInWindow(); + + mComboSync.setSelectedItem( config.getSync() ); } } diff --git a/src/instrument/gui/WaveSourceFrame.java b/src/instrument/gui/WaveSourceFrame.java index a39eccda..65f4e9c3 100644 --- a/src/instrument/gui/WaveSourceFrame.java +++ b/src/instrument/gui/WaveSourceFrame.java @@ -46,6 +46,7 @@ import decode.fleetsync2.Fleetsync2Decoder; import decode.ltrnet.LTRNetDecoder; import decode.mdc1200.MDCDecoder; import decode.mpt1327.MPT1327Decoder; +import decode.mpt1327.MPT1327Decoder.Sync; import decode.p25.P25Decoder; import decode.passport.PassportDecoder; @@ -143,7 +144,7 @@ public class WaveSourceFrame extends JInternalFrame implements PositionListener decoder = new MDCDecoder( null ); break; case MPT1327: - decoder = new MPT1327Decoder( SampleType.FLOAT, null ); + decoder = new MPT1327Decoder( SampleType.FLOAT, null, Sync.NORMAL ); break; case PASSPORT: decoder = new PassportDecoder( SampleType.FLOAT, null );