2022-03-14 11:53:00 +02:00
|
|
|
package com.safemobile.lib;
|
|
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
|
|
|
|
import com.safemobile.lib.radio.Channel;
|
|
|
|
import com.safemobile.lib.radio.Emerg;
|
|
|
|
import com.safemobile.lib.radio.IncCall;
|
|
|
|
import com.safemobile.lib.radio.RadioGW;
|
|
|
|
import com.safemobile.lib.radio.RadioStatus;
|
|
|
|
import com.safemobile.lib.radio.SUstatus;
|
|
|
|
import com.safemobile.lib.radio.Zone;
|
|
|
|
import com.safemobile.lib.radio.Zone_and_channel;
|
|
|
|
|
|
|
|
public class RadioMSG extends TCPmsg {
|
|
|
|
|
|
|
|
public int rOpcode;
|
|
|
|
public String payload="";
|
2022-04-08 17:54:45 +03:00
|
|
|
public ArrayList<RadioGW> RadioGWList = null;
|
2022-03-14 11:53:00 +02:00
|
|
|
|
|
|
|
//zone and channel;
|
|
|
|
public Zone_and_channel zac= null;
|
|
|
|
|
|
|
|
//radio status
|
|
|
|
public RadioStatus rStatus = null;
|
|
|
|
|
|
|
|
//SU stauts
|
|
|
|
public SUstatus suStatus = null;
|
|
|
|
|
|
|
|
//Incomming call
|
|
|
|
public IncCall incCall = null;
|
|
|
|
|
|
|
|
//Emerg
|
|
|
|
public Emerg emerg = null;
|
|
|
|
|
|
|
|
// Contacts list
|
|
|
|
public ArrayList<Contact> contacts;
|
|
|
|
|
2022-04-08 17:54:45 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
2022-03-14 11:53:00 +02:00
|
|
|
public RadioMSG(TCPmsg tcp) {
|
|
|
|
super(tcp);
|
|
|
|
String date4parsing = super.data;
|
|
|
|
|
|
|
|
String[] arr = date4parsing.split("#");
|
|
|
|
|
|
|
|
rOpcode = Integer.parseInt(arr[0]);
|
|
|
|
payload = arr[1];
|
|
|
|
|
|
|
|
switch(rOpcode)
|
|
|
|
{
|
2022-04-08 17:54:45 +03:00
|
|
|
case 200 /* gw list */:
|
|
|
|
RadioGWList = getRadioGWList();
|
2022-03-14 11:53:00 +02:00
|
|
|
break;
|
2022-04-08 17:54:45 +03:00
|
|
|
|
|
|
|
|
2022-03-14 11:53:00 +02:00
|
|
|
case OperationCodes.CHANNEL_BRDCST:
|
2022-04-08 17:54:45 +03:00
|
|
|
|
|
|
|
zac = parse_CHANNEL_BRDCST(payload);
|
2022-03-14 11:53:00 +02:00
|
|
|
break;
|
2022-04-08 17:54:45 +03:00
|
|
|
|
2022-03-14 11:53:00 +02:00
|
|
|
|
|
|
|
case OperationCodes.RADIO_STATUS_REP:
|
2022-04-08 17:54:45 +03:00
|
|
|
|
|
|
|
rStatus = parse_RADIO_STATUS_REP(payload);
|
2022-03-14 11:53:00 +02:00
|
|
|
break;
|
2022-04-08 17:54:45 +03:00
|
|
|
|
2022-03-14 11:53:00 +02:00
|
|
|
|
2022-04-08 17:54:45 +03:00
|
|
|
case OperationCodes.UNIT_STATUS_UPDATE :
|
|
|
|
suStatus = parse_UNIT_STATUS_UPDATE(payload);
|
2022-03-14 11:53:00 +02:00
|
|
|
break;
|
2022-04-08 17:54:45 +03:00
|
|
|
|
2022-03-14 11:53:00 +02:00
|
|
|
|
|
|
|
case 125:
|
|
|
|
case OperationCodes.CALL_STATUS_BRDCST:
|
2022-04-08 17:54:45 +03:00
|
|
|
|
|
|
|
incCall = parse_CALL_STATUS_BRDCST(payload);
|
2022-03-14 11:53:00 +02:00
|
|
|
break;
|
2022-04-08 17:54:45 +03:00
|
|
|
|
2022-03-14 11:53:00 +02:00
|
|
|
|
|
|
|
case 121:
|
|
|
|
case 122:
|
|
|
|
case 123:
|
|
|
|
{
|
|
|
|
try {
|
|
|
|
incCall = new IncCall();
|
|
|
|
incCall.opCode = rOpcode;
|
|
|
|
|
|
|
|
incCall.callStatus = Integer.parseInt(payload.substring(payload.length()-1, payload.length()));
|
|
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
SM.Debug("Cmd 121, 122, 123 error:"+e.toString());
|
|
|
|
}
|
|
|
|
/*
|
|
|
|
try {
|
|
|
|
System.out.println("############ tmpARR: " + payload );
|
|
|
|
incCall = new IncCall();
|
|
|
|
incCall.opCode = rOpcode;
|
|
|
|
String[] tempArr = payload.split("&");
|
|
|
|
|
|
|
|
String[] gwID_and_rgwID_imei = tempArr[0].split("/");
|
|
|
|
incCall.gwID = Integer.parseInt(gwID_and_rgwID_imei[0]);
|
|
|
|
incCall.rgwID = Integer.parseInt(gwID_and_rgwID_imei[1]);
|
|
|
|
|
|
|
|
incCall.callStatus = Integer.parseInt(tempArr[1]);
|
|
|
|
|
|
|
|
incCall.callType = Integer.parseInt(tempArr[2]);
|
|
|
|
|
|
|
|
incCall.groupId = Integer.parseInt(tempArr[3]);
|
|
|
|
} catch (Exception e) {
|
|
|
|
SM.Debug("Cmd 121, 122, 123 error:"+e.toString());
|
|
|
|
}
|
|
|
|
*/
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
case 115:
|
|
|
|
case 116:
|
|
|
|
case 117:
|
|
|
|
{
|
|
|
|
|
|
|
|
try {
|
|
|
|
incCall = new IncCall();
|
|
|
|
incCall.opCode = rOpcode;
|
|
|
|
|
|
|
|
incCall.callStatus = Integer.parseInt(payload.substring(payload.length()-1, payload.length()));
|
|
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
SM.Debug("Cmd 115,116,117 error:"+e.toString());
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
/*
|
|
|
|
try {
|
|
|
|
incCall = new IncCall();
|
|
|
|
String[] tempArr = payload.split("&");
|
|
|
|
incCall.opCode = rOpcode;
|
|
|
|
String[] gwID_and_rgwID_imei = tempArr[0].split("/");
|
|
|
|
incCall.gwID = Integer.parseInt(gwID_and_rgwID_imei[0]);
|
|
|
|
incCall.rgwID = Integer.parseInt(gwID_and_rgwID_imei[1]);
|
|
|
|
|
|
|
|
incCall.callStatus = 3;
|
|
|
|
|
|
|
|
incCall.callType = Integer.parseInt(tempArr[2]);
|
|
|
|
|
|
|
|
incCall.groupId = Integer.parseInt(tempArr[3]);
|
|
|
|
} catch (Exception e) {
|
|
|
|
SM.Debug("Cmd 115, 116, 117 error:"+e.toString());
|
|
|
|
}
|
|
|
|
|
|
|
|
break;
|
|
|
|
*/
|
|
|
|
}
|
|
|
|
|
|
|
|
case OperationCodes.CALL_TYPE_REP:
|
2022-04-08 17:54:45 +03:00
|
|
|
incCall = parse_CALL_TYPE_REP(payload);
|
2022-03-14 11:53:00 +02:00
|
|
|
break;
|
2022-04-08 17:54:45 +03:00
|
|
|
|
2022-03-14 11:53:00 +02:00
|
|
|
|
|
|
|
case 172:
|
|
|
|
{
|
|
|
|
|
|
|
|
try {
|
|
|
|
incCall = new IncCall();
|
|
|
|
incCall.opCode = rOpcode;
|
|
|
|
String[] tempArr = payload.split("/");
|
|
|
|
incCall.mic = new Mic();
|
|
|
|
incCall.mic.mic_type = Integer.parseInt(tempArr[0]);
|
|
|
|
incCall.mic.signal_type = Integer.parseInt(tempArr[1]);
|
|
|
|
incCall.mic.mic_state = Integer.parseInt(tempArr[2]);
|
|
|
|
incCall.mic.mic_gain = Integer.parseInt(tempArr[3]);
|
|
|
|
|
|
|
|
SM.Debug("GOT Mic state changed", incCall.opCode + " # " + incCall.mic.mic_state);
|
|
|
|
} catch (Exception e) {
|
|
|
|
SM.Debug("Cmd 172 error:"+e.toString());
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
case OperationCodes.EMERGENCY_REP:
|
|
|
|
|
2022-04-08 17:54:45 +03:00
|
|
|
emerg = parse_EMERGENCY_REP(payload);
|
2022-03-14 11:53:00 +02:00
|
|
|
break;
|
2022-04-08 17:54:45 +03:00
|
|
|
|
2022-03-14 11:53:00 +02:00
|
|
|
|
|
|
|
/*
|
|
|
|
case OperationCodes.CONTACTS_REP:
|
|
|
|
{
|
|
|
|
try
|
|
|
|
{
|
|
|
|
SM.Debug("Parsing Contacts");
|
|
|
|
contacts = Contact.parseTCPMsg(payload);
|
|
|
|
}
|
|
|
|
catch(Exception ex)
|
|
|
|
{
|
|
|
|
SM.Exception("Exception parse Contacts", ex.toString());
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
*/
|
|
|
|
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
//SM.Debug("RadioMSG", "Done parsing");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2022-04-08 17:54:45 +03:00
|
|
|
private RadioGW parseRadioGW(String buffer)
|
|
|
|
{
|
|
|
|
RadioGW rgw = new RadioGW();
|
|
|
|
String[] radioFields = buffer.split("&");
|
|
|
|
|
|
|
|
if( radioFields.length > 3 ) {
|
|
|
|
|
|
|
|
rgw.ID = Integer.parseInt(radioFields[0].trim());
|
|
|
|
rgw.GW_ID = Integer.parseInt(radioFields[1].trim());
|
|
|
|
rgw.IMEI = radioFields[2];
|
|
|
|
rgw.IP = radioFields[3];
|
|
|
|
}
|
|
|
|
|
|
|
|
return rgw;
|
|
|
|
}
|
|
|
|
|
|
|
|
private Zone parseZone(String buffer)
|
|
|
|
{
|
|
|
|
Zone zone = new Zone();
|
|
|
|
String[] zoneFields = buffer.split(":");
|
|
|
|
|
|
|
|
if( zoneFields.length > 2 ) {
|
|
|
|
|
|
|
|
zone.dbID = Integer.parseInt(zoneFields[0].trim());
|
|
|
|
zone.id = Integer.parseInt(zoneFields[1].trim());
|
|
|
|
zone.ZoneName = zoneFields[2];
|
|
|
|
}
|
|
|
|
|
|
|
|
return zone;
|
|
|
|
}
|
|
|
|
|
|
|
|
private Channel parseChannel(String buffer)
|
|
|
|
{
|
|
|
|
Channel channel = new Channel();
|
|
|
|
String[] channelFields = buffer.split("/");
|
|
|
|
|
|
|
|
if( channelFields.length > 2 ) {
|
|
|
|
|
|
|
|
channel.dbID = Integer.parseInt(channelFields[0].trim());
|
|
|
|
channel.id = Integer.parseInt(channelFields[1].trim());
|
|
|
|
channel.chName = channelFields[2].trim();
|
|
|
|
}
|
|
|
|
|
|
|
|
return channel;
|
|
|
|
}
|
|
|
|
|
|
|
|
private String[] getChannelList(String zone)
|
|
|
|
{
|
|
|
|
String[] zoneArr = zone.split(":");
|
|
|
|
if ( zoneArr.length > 3)
|
|
|
|
return zoneArr[3].split(",");
|
|
|
|
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private String[] getZoneList(String gw)
|
|
|
|
{
|
|
|
|
String[] zoneArr = gw.split("&");
|
|
|
|
if ( zoneArr.length > 4)
|
|
|
|
return zoneArr[4].split("@");
|
|
|
|
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
|
|
private ArrayList<RadioGW> getRadioGWList()
|
|
|
|
{
|
|
|
|
ArrayList<RadioGW> radioGWList = new ArrayList<RadioGW>();
|
|
|
|
String[] radioGWArr = payload.split(";");
|
|
|
|
|
|
|
|
for(int i=0; i < radioGWArr.length; i++)
|
|
|
|
{
|
|
|
|
RadioGW rgw = parseRadioGW(radioGWArr[i]);
|
|
|
|
String[] zoneArr = getZoneList(radioGWArr[i]);
|
|
|
|
if( zoneArr == null)
|
|
|
|
continue;
|
|
|
|
|
|
|
|
for(int j=0; j < zoneArr.length; j++)
|
|
|
|
{
|
|
|
|
|
|
|
|
Zone zone = parseZone(zoneArr[j]);
|
|
|
|
String[] channelArr = getChannelList(zoneArr[j]);
|
|
|
|
if( channelArr == null)
|
|
|
|
continue;
|
|
|
|
|
|
|
|
for(int k =0; k < channelArr.length; k++)
|
|
|
|
{
|
|
|
|
Channel channel = parseChannel(channelArr[k]);
|
|
|
|
|
|
|
|
//add channel to zone
|
|
|
|
zone.channelList.add(channel);
|
|
|
|
}
|
|
|
|
|
|
|
|
//add zone to radio GW
|
|
|
|
rgw.zoneList.add(zone);
|
|
|
|
}
|
|
|
|
|
|
|
|
radioGWList.add(rgw);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return radioGWList;
|
|
|
|
}
|
|
|
|
|
|
|
|
private Zone_and_channel parse_CHANNEL_BRDCST(String payload) {
|
|
|
|
Zone_and_channel zacObj = new Zone_and_channel();
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
String[] tempArr = payload.split("&");
|
|
|
|
|
|
|
|
String[] gwID_and_rgwID = tempArr[0].split("/");
|
|
|
|
zacObj.gwID = Integer.parseInt(gwID_and_rgwID[0].trim());
|
|
|
|
zacObj.rgwID = Integer.parseInt(gwID_and_rgwID[1].trim());
|
|
|
|
|
|
|
|
String[] zoneNr_and_channelNr = tempArr[1].split("/");
|
|
|
|
zacObj.zoneNr = Integer.parseInt(zoneNr_and_channelNr[0].trim());
|
|
|
|
zacObj.channelNr = Integer.parseInt(zoneNr_and_channelNr[1].trim());
|
|
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
SM.Debug("Cmd 204 error:"+e.toString());
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return zacObj;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
private IncCall parse_CALL_STATUS_BRDCST(String payload)
|
|
|
|
{
|
|
|
|
IncCall incCallObj = new IncCall();
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
incCallObj.opCode = rOpcode;
|
|
|
|
String[] tempArr = payload.split("&");
|
|
|
|
|
|
|
|
String[] gwID_and_rgwID_imei = tempArr[0].split("/");
|
|
|
|
incCallObj.gwID = Integer.parseInt(gwID_and_rgwID_imei[0]);
|
|
|
|
incCallObj.rgwID = Integer.parseInt(gwID_and_rgwID_imei[1]);
|
|
|
|
incCallObj.Imei = Long.parseLong(gwID_and_rgwID_imei[2]);
|
|
|
|
|
|
|
|
incCallObj.callStatus = Integer.parseInt(tempArr[1]);
|
|
|
|
incCallObj.callType = Integer.parseInt(tempArr[2]);
|
|
|
|
incCallObj.groupId = Integer.parseInt(tempArr[3]);
|
|
|
|
if (tempArr.length > 4 )
|
|
|
|
incCallObj.userID = Integer.parseInt(tempArr[4]);
|
|
|
|
|
|
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
SM.Debug("Cmd 125, 126 error:"+e.toString());
|
|
|
|
}
|
|
|
|
|
|
|
|
return incCallObj;
|
|
|
|
}
|
|
|
|
|
|
|
|
private RadioStatus parse_RADIO_STATUS_REP(String payload)
|
|
|
|
{
|
|
|
|
RadioStatus radioStatus = new RadioStatus();
|
|
|
|
|
|
|
|
try
|
|
|
|
{
|
|
|
|
String[] tempArr = payload.split("&");
|
|
|
|
|
|
|
|
if(tempArr.length == 4 || tempArr.length == 5) {
|
|
|
|
|
|
|
|
radioStatus.status = 1;
|
|
|
|
radioStatus.incCall.callStatus = Integer.parseInt(tempArr[0]);
|
|
|
|
radioStatus.incCall.callType = Integer.parseInt(tempArr[1]);
|
|
|
|
radioStatus.incCall.Imei = Integer.parseInt(tempArr[2]);
|
|
|
|
radioStatus.incCall.callerID = Integer.parseInt(tempArr[2]);
|
|
|
|
radioStatus.incCall.groupId = Integer.parseInt(tempArr[3]);
|
|
|
|
radioStatus.incCall.callDestID = Integer.parseInt(tempArr[3]);
|
|
|
|
|
|
|
|
if(tempArr.length == 5)
|
|
|
|
radioStatus.incCall.userID = Integer.parseInt(tempArr[4]);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
String[] gwID_and_rgwID = tempArr[0].split("/");
|
|
|
|
radioStatus.gwID = Integer.parseInt(gwID_and_rgwID[0]);
|
|
|
|
radioStatus.rgwID = Integer.parseInt(gwID_and_rgwID[1]);
|
|
|
|
radioStatus.status = Integer.parseInt(tempArr[1]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
catch (Exception e) {
|
|
|
|
SM.Debug("Cmd 199 error:"+e.toString());
|
|
|
|
}
|
|
|
|
|
|
|
|
return radioStatus;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
private Emerg parse_EMERGENCY_REP(String payload)
|
|
|
|
{
|
|
|
|
Emerg emergObj = new Emerg();
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
String[] tempArr = payload.split("/");
|
|
|
|
|
|
|
|
emergObj.function = Integer.parseInt(tempArr[0]);
|
|
|
|
emergObj.status = Integer.parseInt(tempArr[1]);
|
|
|
|
|
|
|
|
// emerg.userID = Integer.parseInt(tempArr[2]);
|
|
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
SM.Debug("Cmd 230 error:"+e.toString());
|
|
|
|
}
|
|
|
|
|
|
|
|
return emergObj;
|
|
|
|
}
|
|
|
|
|
|
|
|
private SUstatus parse_UNIT_STATUS_UPDATE(String payload)
|
|
|
|
{
|
|
|
|
SUstatus suStatusObj = new SUstatus();
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
String[] tempArr = payload.split("&");
|
|
|
|
|
|
|
|
suStatusObj.imei = Integer.parseInt(tempArr[0]);
|
|
|
|
suStatusObj.status = Integer.parseInt(tempArr[1]);
|
|
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
SM.Debug("Cmd 250 error:"+e.toString());
|
|
|
|
}
|
|
|
|
|
|
|
|
return suStatusObj;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
private IncCall parse_CALL_TYPE_REP(String payload)
|
|
|
|
{
|
|
|
|
IncCall incCallObj = new IncCall();
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
incCallObj.opCode = rOpcode;
|
|
|
|
String[] tempArr = payload.split("/");
|
|
|
|
incCallObj.callType = Integer.parseInt(tempArr[0]);
|
|
|
|
incCallObj.callStatus = Integer.parseInt(tempArr[1]);
|
|
|
|
|
|
|
|
SM.Debug("GOT CHANGE CALL TYPE MSG", incCallObj.opCode + " # " + incCallObj.callType + " # " + incCallObj.callStatus);
|
|
|
|
} catch (Exception e) {
|
|
|
|
SM.Debug("Cmd 115,116,117 error:"+e.toString());
|
|
|
|
}
|
|
|
|
|
|
|
|
return incCallObj;
|
|
|
|
}
|
|
|
|
|
2022-03-14 11:53:00 +02:00
|
|
|
}
|