mirror of
https://github.com/DSheirer/sdrtrunk.git
synced 2026-11-12 08:37:25 -05:00
Changes to model, view and controller components and updates all gui editors. Removes the configuration panel and tree and replaces with 3 new panels. Updates playlist.xml to a new playlist_v2.xml format.
121 lines
3.7 KiB
Java
121 lines
3.7 KiB
Java
/*******************************************************************************
|
|
* SDR Trunk
|
|
* Copyright (C) 2014-2016 Dennis Sheirer
|
|
*
|
|
* This program is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
|
******************************************************************************/
|
|
package module.decode.ltrstandard;
|
|
|
|
import message.Message;
|
|
import message.MessageDirection;
|
|
import module.decode.ltrstandard.message.CallEndMessage;
|
|
import module.decode.ltrstandard.message.CallMessage;
|
|
import module.decode.ltrstandard.message.IdleMessage;
|
|
import module.decode.ltrstandard.message.LTRStandardMessage;
|
|
import module.decode.ltrstandard.message.UnknownMessage;
|
|
import sample.Listener;
|
|
import alias.AliasList;
|
|
import bits.BinaryMessage;
|
|
import edac.CRC;
|
|
import edac.CRCLTR;
|
|
|
|
public class LTRStandardMessageProcessor implements Listener<BinaryMessage>
|
|
{
|
|
private MessageDirection mDirection;
|
|
private AliasList mAliasList;
|
|
private Listener<Message> mMessageListener;
|
|
|
|
/**
|
|
* Processes raw binary messages and converts them to the correct message class
|
|
*
|
|
* @param direction - inbound (ISW) or outbound (OSW)
|
|
* @param list - alias list
|
|
*/
|
|
public LTRStandardMessageProcessor( MessageDirection direction, AliasList list )
|
|
{
|
|
mDirection = direction;
|
|
mAliasList = list;
|
|
}
|
|
|
|
@Override
|
|
public void receive( BinaryMessage binaryMessage )
|
|
{
|
|
if( mMessageListener != null )
|
|
{
|
|
//Inbound Status Word (ISW) is a bit-flipped version of the Outbound
|
|
//(OSW), so flip the bits and process it as an OSW
|
|
if( mDirection == MessageDirection.ISW )
|
|
{
|
|
binaryMessage.flip( 0, 40 );
|
|
}
|
|
|
|
CRC crc = CRCLTR.check( binaryMessage, mDirection );
|
|
|
|
if( crc != CRC.FAILED_CRC &&
|
|
crc != CRC.FAILED_PARITY )
|
|
{
|
|
LTRStandardMessage message;
|
|
|
|
int channel = binaryMessage.getInt( LTRStandardMessage.CHANNEL );
|
|
int home = binaryMessage.getInt( LTRStandardMessage.HOME_REPEATER );
|
|
int free = binaryMessage.getInt( LTRStandardMessage.FREE );
|
|
int group = binaryMessage.getInt( LTRStandardMessage.GROUP );
|
|
|
|
if( isValidChannel( channel ) &&
|
|
isValidChannel( home ) &&
|
|
isValidChannel( free ) )
|
|
{
|
|
if( channel == free && group == 255 )
|
|
{
|
|
message = new IdleMessage( binaryMessage, mDirection, mAliasList, crc );
|
|
}
|
|
else
|
|
{
|
|
message = new CallMessage( binaryMessage, mDirection, mAliasList, crc );
|
|
}
|
|
}
|
|
else if( channel == 31 &&
|
|
isValidChannel( home ) &&
|
|
isValidChannel( free ) )
|
|
{
|
|
message = new CallEndMessage( binaryMessage, mDirection, mAliasList, crc );
|
|
}
|
|
else
|
|
{
|
|
message = new UnknownMessage( binaryMessage, mDirection, mAliasList, crc );
|
|
}
|
|
|
|
mMessageListener.receive( message );
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Checks the channel (LCN) number to ensure it is in the range 1 -20
|
|
*/
|
|
private boolean isValidChannel( int channel )
|
|
{
|
|
return ( 1 <= channel && channel <= 20 );
|
|
}
|
|
|
|
public void setMessageListener( Listener<Message> listener )
|
|
{
|
|
mMessageListener = listener;
|
|
}
|
|
|
|
public void removeMessageListener()
|
|
{
|
|
mMessageListener = null;
|
|
}
|
|
} |