TetraNetMonitor UI Experimentation

hamradionl

Member
Joined
Mar 23, 2014
Messages
730
Setup:
SDR# 1700 + Netmon 1.1.2.1
1x RTL-SDR hardware
SDR# number set to 1
InstanceID = 1
TunerID = 10

Mode setting:
Single fallow = the voice fallow is oke.
Mode setting:
one master, other slave,
setting tuner-1 as master on the main carrier, causing the tuner-2 jump to secondary, this work.
But,
when voice on the slave end/close tuner-2, the main/master tuner-1 is turned off by itself,
causing the slave tuner-2 not jump back to the main/master tuner-1 for receive next call.
Need manual turn back on the main/master tuner-1 and this every time, so on.
When not manually turn back on tuner-1 master keep monitor the last used slave tuner-2 and no jump and no voice fallow
 

thewraith2008

Member
Joined
Nov 22, 2016
Messages
1,867
When I try using a 14 minute IQ sample (BW=6MHz) with all carriers used in this bandwidth, I see it working as expected.
I do not see tuner 1 (or any other tuner*) switch off. (the 'Enabled' stays checked)
* Tuner 2 switches ON/OFF as required (see below)

When using Mode: One master, other slave:
  • All tuners installed except tuner 2, must be a main carrier.
  • Tuner 2 is only used to follow traffic (to a carrier) where the traffic is not on one of the main carriers that are setup (in SDR#).
  • If you assign tuner 2 to a main carrier, at some point it will be changed/switched off if the above condition is met.



Latest version (v1.1.2.1) can be found in this post here: Download
 

hamradionl

Member
Joined
Mar 23, 2014
Messages
730
When using Mode: One master, other slave:
All tuners installed except tuner 2, must be a main carrier.
Only tuner-1 main + tuner-2 slave is used all others tuners are off (present but not checked)

If you assign tuner 2 to a main carrier, at some point it will be changed/switched off if the above condition is met.
Tuner-2 only act slave
Its used on that very busy airport netwrk (motorola)
I try make video or animated gif.

Else,
possible to give those main tuners a name like
Tuner-1 airport 1076 (where 1076 is the main)

i just try it again, tuner-1 main 1076 , when voice stay on main tuner-1 use slot-2 or 3 and ending voice, tuner-1 main 1076, become unchecked itself.
 
Last edited:

Marco192

Member
Joined
Aug 9, 2014
Messages
93
I am trying to route the audio output of TNM using the win10 advanced settings. The idea is that the output goes to a different output device (other then default). Win 10 settings correctly show the new output for the TNM but the sound is still coming from the default device. Restart of the TNM and of the PC does not help. For other programs the change of audio output works as it should.
 

enCrypt

Member
Joined
Oct 22, 2015
Messages
94
I am trying to route the audio output of TNM using the win10 advanced settings. The idea is that the output goes to a different output device (other then default). Win 10 settings correctly show the new output for the TNM but the sound is still coming from the default device. Restart of the TNM and of the PC does not help. For other programs the change of audio output works as it should.
Are you using a virtual audio cable for this? It is the easiest way. I use VBCable and pipe the TNM audio out to a private Zello channel. That way I can listen to my feed from my phone...
See my post #181 in this thread about disabling Windows sounds so that they don't set off the Vox in Zello.
 

Marco192

Member
Joined
Aug 9, 2014
Messages
93
Are you using a virtual audio cable for this? It is the easiest way. I use VBCable and pipe the TNM audio out to a private Zello channel. That way I can listen to my feed from my phone...
See my post #181 in this thread about disabling Windows sounds so that they don't set off the Vox in Zello.

Yes that is right, but how do you get the sound from TNM to the virtual audio cable?
 

enCrypt

Member
Joined
Oct 22, 2015
Messages
94
Yes that is right, but how do you get the sound from TNM to the virtual audio cable?
You need to make your default Windows Audio Output device the virtual audio cable Input, then the software you need to pipe the audio into (in my case Zello), you make its Input (or recording) device the virtual audio cable Output.
Then, the second bit of software's Output device will be your normal Windows output device (speakers / headphones etc)
It is a bit confusing...

EDIT, if you use this machine for anything else, you'll need to keep changing its sound settings, hence why I have a dedicated TNM machine
 

Marco192

Member
Joined
Aug 9, 2014
Messages
93
I am trying to route the audio output of TNM using the win10 advanced settings. The idea is that the output goes to a different output device (other then default). Win 10 settings correctly show the new output for the TNM but the sound is still coming from the default device. Restart of the TNM and of the PC does not help. For other programs the change of audio output works as it should.

Still ... I don't get it why the windows sound routing commands are not working on TNM
 

tomekjkp

Member
Joined
Jan 10, 2019
Messages
36
I found the old version still on the old computer, but it does not show messages or save them to a file like in the case of TTT


1670489109697.png
 

hamradionl

Member
Joined
Mar 23, 2014
Messages
730
I found the old version still on the old computer, but it does not show messages or save them to a file like in the case of TTT
Why do i remember or see this and others dont?

Mainly heavy users requesting function for save SDS in to file, several times. This function whas or seem not a priority and in the latest version the SDS function is gone.
BTW i using the TetraNetMon much more as trunk version, because i my country Tetra is also used by Taxi, city busses as simplex or semi-duplex without trunk function, use always the same channel, LA main or whatever :)
 

hamradionl

Member
Joined
Mar 23, 2014
Messages
730
SDS is being available in tetra from the Early MSYS2 versions in 2018/2019
The code for PDU_SDS is already in the source from day one. SDS tab was available from release tetraNetMonitor_v1.0.0.1 until release tetraNetMonitor_v1.1.0.2.
Still not clear or not understand why, the SDS function recently is removed from release tetraNetMonitor_v1.1.2.0 and later.
The request or wish for SDS messages come back several time, companys like tetronic use these function in network on daily base.
a poll who interested in stand-alone SDS plugin without voice support.
 

thewraith2008

Member
Joined
Nov 22, 2016
Messages
1,867
SDS is being available in tetra from the Early MSYS2 versions in 2018/2019
The code for PDU_SDS is already in the source from day one. SDS tab was available from release tetraNetMonitor_v1.0.0.1 until release tetraNetMonitor_v1.1.0.2.
No it wasn't, the Telive (of which the MSYS2 plug-in version was derived) only indicated the presence of SDS PDUs, it did not decode messages at all.

Still not clear or not understand why, the SDS function recently is removed from release tetraNetMonitor_v1.1.2.0 and later.
The SDS change was mentioned in the changelog.txt:
Code:
v1.1.0.3 - Minor (unreleased)

Changed: Disabled processing of SDS PDUs as there is a bug there.
- TNM is only meant to be a voice only.
  No data was meant to be decoded. (Use TTT for more decoding possibilities)
Change is done, move on.


The request or wish for SDS messages come back several time, companys like tetronic use these function in network on daily base.
a poll who interested in stand-alone SDS plugin without voice support.
Well go and ask them to make a plug-in for free.

I won't be pressured to do anything for you regardless of whether other people may agree.
TETRA is dead to me, savvy.
 

hamradionl

Member
Joined
Mar 23, 2014
Messages
730
If tetra ... for you..... is dead, others in UK and Europe community who still using the plugin. Other hand, to prevent get lost within the actual argument, why bringout new release while for you tetra is dead? I get lost....... on its argument ;)
About, is the "SDS bug" in TTT when both share the same source code? The SDS bug is solved somewhere in 2020 or 2021, correct me if wrong. In that period you send me a BETA to test, do you remember when it whas or in 2019? Within 1 week we send many, many, many test files vise versa. Or did i solve it with TSSDR, i dont know, i lost the time.

I leave it, rest the case, you won.


Code:
    }

    int32_t sduLength = (int32_t)len - (int32_t)pos;
    Pdu sdu = Pdu(pdu, pos, sduLength);                                         //utils_substract(len, pos));
    Pdu sdu = Pdu(pdu, pos, sduLength);

    switch (protocolId)                                                         // table 29.21
    {

    uint8_t timestamp_used = pdu.getValue(pos, 1);
    pos += 1;                                                                   // fill bit - (should be 0) - see 29.5.2.3
                                                                                // and if in SDS-TL this is the timestamp present bit - see 29.5.3.3
                                                                                // and if in SDS-TL this is the timestamp present bit - see 29.5.3.3
    uint8_t textCodingScheme = pdu.getValue(pos, 7);
    pos += 7;
    m_report->add("text coding scheme", textCodingScheme);

    if(timestamp_used)
    {
        uint32_t timestamp = pdu.getValue(pos, 24);                                // Todo: decode timestamp
        pos += 24;
        m_report->add("timestamp", timestamp);
        uint32_t timestamp = pdu.getValue(pos, 24);                             // TODO decode timestamp
        pos += 24;
        m_report->add("timestamp", timestamp);
    }

    std::string txt = "";
    int32_t sduLength = (int32_t)len - (int32_t)pos;
    Pdu sdu = Pdu(pdu, pos, sduLength);

    if (textCodingScheme == 0b0000000)                                          // GSM 7-bit alphabet - see 29.5.4.3
    {
        txt = pdu.textGsm7BitDecode(sduLength);
        txt = sdu.textGsm7BitDecode(sduLength);
        m_report->add("infos", txt);
    }
    else if (textCodingScheme <= 0b0011001)                                     // 8 bit alphabets
    {
        txt = pdu.textGeneric8BitDecode(sduLength);
        txt = sdu.textGeneric8BitDecode(sduLength);
        m_report->add("infos", txt);
    }
    else                                                                        // try generic 8 bits alphabet since we already have the full hexadecimal SDU
    {
        txt = pdu.textGeneric8BitDecode(sduLength);
        txt = sdu.textGeneric8BitDecode(sduLength);
        m_report->add("infos", txt);
    }
}

    std::string txt = "";
    int32_t sduLength = (int32_t)len - (int32_t)pos;
    Pdu sdu = Pdu(pdu, pos, sduLength);

    if (textCodingScheme == 0b0000000)                                          // GSM 7-bit alphabet - see 29.5.4.3
    {
        txt = pdu.textGsm7BitDecode(sduLength);
        txt = sdu.textGsm7BitDecode(sduLength);
        m_report->add("infos", txt);
    }
    else if (textCodingScheme <= 0b0011001)                                     // 8 bit alphabets
    {
        txt = pdu.textGeneric8BitDecode(sduLength);
        txt = sdu.textGeneric8BitDecode(sduLength);
        m_report->add("infos", txt);
    }
    else                                                                        // try generic 8 bits alphabet since we already have the full hexadecimal SDU
    {
        txt = pdu.textGeneric8BitDecode(sduLength);
        txt = sdu.textGeneric8BitDecode(sduLength);
        m_report->add("infos", txt);
    }
}

    // remaining bits are len - 8 - 8 since len is size of pdu
    std::string txt = "";
    int32_t sduLength = (int32_t)len - (int32_t)pos; //utils_substract(len, pos);
    int32_t sduLength = (int32_t)len - (int32_t)pos;
    Pdu sdu = Pdu(pdu, pos, sduLength);

    switch (locationSystemCoding)
    {
    case 0b00000000:                                                            // NMEA 0183 - see Annex L
        txt = pdu.locationNmeaDecode(sduLength);
        txt = sdu.locationNmeaDecode(sduLength);
        m_report->add("infos", txt);
        break;

    case 0b00000001:                                                            // TODO RTCM RC-104 - see Annex L
        //txt = location_rtcm_decode(Pdu(pdu, pos, len - pos), len - pos);
        m_report->add("infos", Pdu(pdu, pos, sduLength));
        m_report->add("infos", sdu);
        break;

    case 0b10000000:                                                            // TODO Proprietary. Notes from SQ5BPF: some proprietary system seen in the wild in Spain, Itlay and France some speculate it's either from DAMM or SEPURA
        m_report->add("infos", Pdu(pdu, pos, sduLength));
    case 0b10000000:                                                            // TODO Proprietary. Notes from SQ5BPF: some proprietary system seen in the wild in Spain, Italy and France some speculate it's either from DAMM or SEPURA
        m_report->add("infos", sdu);
        break;

    default:
        m_report->add("infos", Pdu(pdu, pos, sduLength));
        m_report->add("infos", sdu);
        break;
    }
}
    m_report->add("location coding system", locationSystemCoding);

    std::string txt = "";
    int32_t sduLength = (int32_t)len - (int32_t)pos; //utils_substract(len, pos);
    int32_t sduLength = (int32_t)len - (int32_t)pos;
    Pdu sdu = Pdu(pdu, pos);

    switch (locationSystemCoding)
    {
    case 0b00000000:                                                            // NMEA 0183 - see Annex L
        txt = pdu.locationNmeaDecode(sduLength);
        txt = sdu.locationNmeaDecode(sduLength);
        m_report->add("infos", txt);
        break;

    case 0b00000001:                                                            // TODO RTCM RC-104 - see Annex L
        //txt = location_rtcm_decode(Pdu(pdu, pos, len - pos), len - pos);
        m_report->add("infos", Pdu(pdu, pos, sduLength));
        m_report->add("infos", sdu);
        break;

    case 0b10000000:                                                            // TODO Proprietary. Notes from SQ5BPF: some proprietary system seen in the wild in Spain, Itlay and France some speculate it's either from DAMM or SEPURA
        m_report->add("infos", Pdu(pdu, pos, sduLength));
        m_report->add("infos", sdu);
        break;

    default:
        m_report->add("infos", Pdu(pdu, pos, sduLength));
        m_report->add("infos", sdu);
        break;
    }
}
 
Last edited:
Top