Repeater Lock-Ups

Many people have reported Fusion repeater lock-ups that required the repeater to be shut down (power removed) and rebooted. I’ve had repeater lock happen as well with an HRI-200 directly connected to the DR2X. In this particular case I believe the event was triggered by sending a number of commands from the radio (such as the GM mode) which resulted in a race condition within the firmware.

I have previously observed that invalid data (I.e., with a lot of bit errors or badly formed packets from a hotspot) can also cause the lock-up. My assumption is that this is a problem of not validating inputs to a function prior to executing the function. The invalid data is not handled correctly and causes one of the lock-up faults I mention below to occur.

I have observed that data is more likely to be invalid if there is a lot of noise on the signal. Also a major source of problems are badly behaving hot spots that inject all sorts of crap into the data stream. There’s no control over these devices and it just gets worse as there is more work being done converting from one thing to another thing, etc.

Communications software is EXTREMELY HARD to write and much of what I see out there is poorly documented (which leads to bad code) and poorly tested.

Reflectors such as YSF or FCS are pretty dumb when they relay signals. They look for an incoming packet from one of the connected hotspots and just send that same packet out to all the other hotspots (including bridges to WiRES-X). Garbage in, garbage out. To address this I have modified the YSF reflector software to be very aggressive at dropping packets with CRC errors, invalid data in fields, and most importantly invalid FICH headers. The FICH header is extremely important for everything to work right. (You can look up FICH headers in the System Fusion documentation published by Yaesu.) This modified software is running on MNWis, Princeton Kentucky, MVARC (Idaho) and America Link. It has dramatically reduced the number of problems with WiRES-X problems.

So what is a “lock-up”. A lock-up occurs when the processor looses track of what it was doing and either halts or ends up executing invalid code. In either case it is no longer processing the code it was intended to run. Events that cause the processor to, using a technical term, go out to out to lunch can result of errors in the software that cause it to happen, corrupted memory, invalid states in a state machine, incorrectly handled race conditions, or a really nasty thing called priority inversion (where a high priority task which is pre-empting use of the CPU is waiting for a low priority task to complete, which can’t complete because, well, it’s not high priority.)

How to solve the problem?
First of all, the repeater firmware should never crash. Since it is very hard (but not impossible) to write code with no bugs, most continuously operating real-time systems will incorporate a “watch dog timer”. It is the purpose of this timer to detect when the “wheels have fallen off the processor” and perform a reset.

Since we can’t modify the repeater’s software, there are some actions we can take.

First would be to prevent bad data from getting into the system. A careful examination of the logs possibly combined with audio recordings could be helpful.

A quick fix might be to install a timer on the power supply such that the repeater’s power is removed for a short time once or several times a day.

I have a technical concept for a generic lock-up detector that would reboot the repeater in the event of a lock-up without the need to make any modifications. Not sure if I’ll work on this because I don’t know how much interest there would be. This solution would also work with non-Yaesu repeaters.

One further note. I made an observation that this problem was more likely to occur on 2 meters than on 440. Why? My theory is that there is a lot more interaction with the environment on 2 meters. Computer networks, small power supplies, computers, almost everything digital generally creates a lot more noise on 2 meters than it does on 440 MHz. I observed a situation where mixing products were occurring on a 2 meter repeater in a noisy environment. This repeater would lock up regularly. My theory was that the mixing products contained a lot of noise along with the C4FM signal causing a high number of bit errors and thus crashing the repeater. This was observed on a DR1X.

If you are struggling with this problem, I suggest you contact Juan at Yaesu Customer Service with your details. Provide Juan with as much information as you can.




MMDVM .96″ OLED Now Works!

It has really been bugging me. I’ve never been able to get a 0.96″ OLED to work on my Pi-star hotspots. The 1.3″ works okay. Why not the 0.96″. Here’s why:

The 1.3″ screen uses the SSD1306 controller. Adafruit uses this controller on all their OLED screens. The (cheap) Chineese OLED screens use an older SSD1106 controller.

Raspberry Pi uses the Adafruit OLED driver software, so Pi-star does also. Naturally Adafruit has no desire to support the SSD1106 as they don’t sell anything that uses it. In other words, the standard Pi-star distibution OLED driver doesn’t work with the SSD1106 .96″ displays.

What’s different? The SSD1106 has a slightly smaller refresh RAM array than the SSD1306. That causes each line of pixels to be off by 2 hence small valid text ends up looking like garbage. The graphics still look okay.

The solution is to replace the Adafruit driver with a modified version that supports the SSD1106. The driver is located at /usr/local/lib/ArduiPi_OLED.so.1. I have built a replacement driver with the SSD1106 support.

  1. SSH into your Pi-Star (can be done from the Expert screen).
  2. Switch to root with “sudo su”.
  3. Make the disk RW with the command “rpi-rw”
  4. Move to the directory where the driver is installed with “cd /usr/local/lib”.
  5. Copy the driver file from HamOperator with the command:
    “wget http://HamOperator.com/files/libArduiPi_OLED.so.1.0”.
  6. Change the permissions on the driver with the command:
    “chmod 777 /usr/local/lib/ArduiPi_OLED.so.1.0”.
    (I don’t know why ‘777’ ‘755’ should work but the original was ‘777’.
  7. Reboot
  8. The OLED type needs to be ‘3’ for the 0.96 display and ‘6’ for the 1.3″ display (set in Expert->MMDVM Host). The OLED must also be enabled from the configuration page

Thanks to Charles for doing the driver work!

If you want to download the file directly, you can do that here: libArduiPi_OLED.so.1.0

 




YSF WiRES-X Unintended Node Switching

A problem exits with YSF/MMDVM hotspots bridging to WiRES-X rooms. Here’s what happens.

A user has a hotspot and accesses it using a Fusion HT. They use the WiRES-X control mode to change the hotspot to different YSF Reflectors. Let’s say the user wants to access MNWis (Room #21,493):

  • They enter the number of the YSF Reflector, “US MNWis 21493”, which is 37,624. The hotspot switches to US MNWis 21493 which is bridged to WiRES-X Room # 21,493.
  • The user leaves their radio in the WiRES-X control mode. They hear stations, but when they talk, nobody answers and nobody is talking.

Here’s what happened: When they keyed up to transmit, their radio sent a command to switch to Room #37,624. The Wires-X node that was previously connected to #21,493 now connects to #37,624 which belongs to a very nice gentleman in France.

How does this happen?

The Fusion transmitted data includes callsign fields CSD1, CSD2, and others. We’re interested in CSD1. This 10-byte field contains two items: The room number of the connection and; The TxID or DP-ID of the radio. A typical CSD1 looks like 21493F0yxh where 21493 is the room number and F0yxh is the DP-ID. The ‘21493’ in this field will cause a Wires-X node to switch to that room. 

When the radio IS NOT in Wires-X control mode, the CSD1 field will be: ‘*****F0yxh’ and no switch will be made.

Bottom line:

DON’T USE WiRES-X control mode to talk through a hotspot or MMDVM!

Workarounds and fixes: (Updated 23-Aug-2019)

Node operators who are experiencing this problem should use the WiRES-X block feature to prevent the node from switching to the room that has the YSF reflector number.

For example: Assume that our node connects to MNWis, Room # 21,493. Our node also provides bridging to “YSF MNWis 21493” which is # 37,624.

  • In the View->Node-Info(N) window press “Add”.
  • In the “Input ID” dialog box enter the YSF reflector number. In our example this is “37624”.
  • Press “OK” then “Close”.
  • When a station using the YSF bridge still has WiRES-X control mode enabled accesses the node, the command to switch rooms will be rejected by the WiRES-X software. The software will indicate a rejected attempt to switch rooms.

As an alternative, set the node so that connection changes are not allowed.

  • File->Settings->Call Settings->Uncheck “Round Room Connection”.
  • Un check “Accept calls while in Round Room QSO.
  • Check “Return to Room”
  • Fill in the WiRES-X room number. Example: 21493.

YSF server side solutions:

I maintain a version of YSF Reflector that has filters to prevent hotspots causing problems with WiRES-X nodes. My first step is to drop all packets that contain an incorrect WiREX-X room number. Eventually I plan to replace the first 5 bytes of CSD1 with ‘*****’. This last step is difficult to do because it requires the reflector to decode the data, modify it, then recompute the CRC. This also involves working with the interleaving and forward error correction. It is obviously easier to just drop the packets, but that may confuse people on the YSF side since nobody on the WiRES-X side will hear them.

If you are interested in running the enhanced YSF Reflector software that will fix this problem at some point, please contact me privately.

73,

Chris, K9EQ




DV4mini Fusion Monitor Program

This program uses a DV4mini to monitor over-the-air Fusion signals and display the meta data (does not display voice, pictures, messages, etc.)

This version of the program will output a record when a station keys up and then another record when the station unkeys. I’ve done this so that the user doesn’t get overwhelmed with all of the meta data that is produced.

You’ll need to review the Yaesu Digital Communication Standards document to understand what the different fields mean.

Computer Requirements: Windows 7 or later

Program Installation

1. Download the program from this link: DV4mini YSFMonitor.
2. Create a directory on your Windows PC and unzip this folder into that directory.
3. Download and install the Microsoft Visual Studio 2017 redistributable for your machine

Running the Program

1. Open a command box (type cmd) and change to the directory in which you installed the software.
2. Check the program: Type VSFRX.exe -v. It should respond with the version number.
3. User Device Manager to determine the com port of your DV4mini.
4. Enter frequency and com port as follows: YSFRX.exe com7 444525000
Note that the frequency must be entered as 9 digits.
5. A log file will be created in the same directory as the program.

Output Example from the 30-Apr-2018 Net
M: 2018-05-01 01:01:30.338 DV4mini version: V01.77
M: 2018-05-01 01:01:30.338 YSFRX-20180430 K9EQ starting
M: 2018-05-01 01:01:33.646
M: 2018-05-01 01:01:33.646 FICH: FI: TC, DT: VD2, BN: 0, BT: 0, FN: 0, FT: 6 SQ: 0 SC: 0
M: 2018-05-01 01:01:33.646 Terminator, CSD1
M: 2018-05-01 01:01:33.646 0000: 2A 2A 2A 2A 2A 48 35 35 37 56 57 38 4F 4A 2D 20 20 20 20 20 ******H557VW8OJ- *
M: 2018-05-01 01:01:33.646 Terminator, CSD2
M: 2018-05-01 01:01:33.646 0000: 4B 39 45 51 20 20 20 20 20 20 57 38 4F 4A 20 20 20 20 20 20 *K9EQ W8OJ *
M: 2018-05-01 01:01:36.748
M: 2018-05-01 01:01:36.748 FICH: FI: HC, DT: VD2, BN: 0, BT: 0, FN: 0, FT: 7 SQ: 0 SC: 0
M: 2018-05-01 01:01:36.748 Header, CSD1
M: 2018-05-01 01:01:36.748 0000: 2A 2A 2A 2A 2A 46 30 58 49 4B 4B 44 38 47 52 4E 20 20 20 20 ******F0XIKKD8GRN *
M: 2018-05-01 01:01:36.748 Header, CSD2
M: 2018-05-01 01:01:36.748 0000: 4B 39 45 51 20 20 20 20 20 20 4B 44 38 46 4A 48 20 20 20 20 *K9EQ KD8FJH *
M: 2018-05-01 01:01:43.742
M: 2018-05-01 01:01:43.742 FICH: FI: TC, DT: VD2, BN: 0, BT: 0, FN: 0, FT: 7 SQ: 0 SC: 0
M: 2018-05-01 01:01:43.743 Terminator, CSD1
M: 2018-05-01 01:01:43.744 0000: 2A 2A 2A 2A 2A 46 30 58 49 4B 4B 44 38 47 52 4E 20 20 20 20 ******F0XIKKD8GRN *
M: 2018-05-01 01:01:43.745 Terminator, CSD2
M: 2018-05-01 01:01:43.745 0000: 4B 39 45 51 20 20 20 20 20 20 4B 44 38 46 4A 48 20 20 20 20 *K9EQ KD8FJH *
M: 2018-05-01 01:01:48.921
M: 2018-05-01 01:01:48.921 FICH: FI: HC, DT: VD2, BN: 0, BT: 0, FN: 0, FT: 7 SQ: 0 SC: 0
M: 2018-05-01 01:01:48.921 Header, CSD1
M: 2018-05-01 01:01:48.921 0000: 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 57 36 5A 44 52 20 20 20 20 20 ***********W6ZDR *
M: 2018-05-01 01:01:48.921 Header, CSD2
M: 2018-05-01 01:01:48.921 0000: 4B 39 45 51 20 20 20 20 20 20 44 55 31 5A 44 52 20 20 20 20 *K9EQ DU1ZDR *
M: 2018-05-01 01:01:59.513
M: 2018-05-01 01:01:59.513 FICH: FI: HC, DT: VD1, BN: 0, BT: 1, FN: 2, FT: 6 SQ: 0 SC: 0
M: 2018-05-01 01:02:00.317
M: 2018-05-01 01:02:00.317 FICH: FI: TC, DT: VD2, BN: 3, BT: 1, FN: 3, FT: 3 SQ: 0 SC: 27
M: 2018-05-01 01:02:01.717
M: 2018-05-01 01:02:01.717 FICH: FI: TC, DT: VD2, BN: 0, BT: 0, FN: 0, FT: 7 SQ: 0 SC: 0
M: 2018-05-01 01:02:01.717 Terminator, CSD1
M: 2018-05-01 01:02:01.717 0000: 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 57 36 5A 44 52 20 20 20 20 20 ***********W6ZDR *
M: 2018-05-01 01:02:01.717 Terminator, CSD2
M: 2018-05-01 01:02:01.717 0000: 4B 39 45 51 20 20 20 20 20 20 44 55 31 5A 44 52 20 20 20 20 *K9EQ DU1ZDR *
M: 2018-05-01 01:02:02.483
M: 2018-05-01 01:02:02.483 FICH: FI: HC, DT: VD2, BN: 0, BT: 0, FN: 0, FT: 7 SQ: 0 SC: 0
M: 2018-05-01 01:02:04.203
M: 2018-05-01 01:02:04.203 FICH: FI: TC, DT: VD2, BN: 0, BT: 0, FN: 0, FT: 7 SQ: 0 SC: 0
M: 2018-05-01 01:02:04.203 Terminator, CSD1
M: 2018-05-01 01:02:04.203 0000: 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 4B 44 38 41 47 4F 4A 4F 48 4E ***********KD8AGOJOHN*
M: 2018-05-01 01:02:04.203 Terminator, CSD2
M: 2018-05-01 01:02:04.203 0000: 4B 39 45 51 20 20 20 20 20 20 41 44 30 4D 49 20 20 20 20 20 *K9EQ AD0MI *
M: 2018-05-01 01:02:09.834
M: 2018-05-01 01:02:09.834 FICH: FI: HC, DT: VD2, BN: 0, BT: 0, FN: 0, FT: 6 SQ: 0 SC: 0
M: 2018-05-01 01:02:09.834 Header, CSD1
M: 2018-05-01 01:02:09.834 0000: 32 31 34 39 33 47 30 32 7A 42 41 42 38 52 4C 2D 54 4F 4D 20 *21493G02zBAB8RL-TOM *
M: 2018-05-01 01:02:09.834 Header, CSD2
M: 2018-05-01 01:02:09.834 0000: 4B 39 45 51 20 20 20 20 20 20 41 42 38 52 4C 20 20 20 20 20 *K9EQ AB8RL *
M: 2018-05-01 01:02:19.424
M: 2018-05-01 01:02:19.424 FICH: FI: TC, DT: VD2, BN: 0, BT: 0, FN: 0, FT: 6 SQ: 0 SC: 0
M: 2018-05-01 01:02:19.424 Terminator, CSD1
M: 2018-05-01 01:02:19.424 0000: 32 31 34 39 33 47 30 32 7A 42 41 42 38 52 4C 2D 54 4F 4D 20 *21493G02zBAB8RL-TOM *
M: 2018-05-01 01:02:19.424 Terminator, CSD2
M: 2018-05-01 01:02:19.424 0000: 4B 39 45 51 20 20 20 20 20 20 41 42 38 52 4C 20 20 20 20 20 *K9EQ AB8RL *
M: 2018-05-01 01:02:23.581
M: 2018-05-01 01:02:23.581 FICH: FI: HC, DT: VD2, BN: 0, BT: 0, FN: 0, FT: 6 SQ: 0 SC: 0
M: 2018-05-01 01:02:23.583 Header, CSD1
M: 2018-05-01 01:02:23.584 0000: 32 31 34 39 33 45 30 50 71 61 4B 46 38 50 4D 2F 41 4C 41 4E *21493E0PqaKF8PM/ALAN*
M: 2018-05-01 01:02:23.584 Header, CSD2
M: 2018-05-01 01:02:23.584 0000: 4B 39 45 51 20 20 20 20 20 20 4B 46 38 50 4D 20 20 20 20 20 *K9EQ KF8PM *
M: 2018-05-01 01:02:37.296
M: 2018-05-01 01:02:37.296 FICH: FI: TC, DT: VD2, BN: 0, BT: 0, FN: 0, FT: 7 SQ: 0 SC: 0
M: 2018-05-01 01:02:37.296 Terminator, CSD1
M: 2018-05-01 01:02:37.298 0000: 32 31 34 39 33 45 30 50 71 61 4B 46 38 50 4D 2F 41 4C 41 4E *21493E0PqaKF8PM/ALAN*
M: 2018-05-01 01:02:37.298 Terminator, CSD2
M: 2018-05-01 01:02:37.299 0000: 4B 39 45 51 20 20 20 20 20 20 4B 46 38 50 4D 20 20 20 20 20 *K9EQ KF8PM *
M: 2018-05-01 01:02:51.164
M: 2018-05-01 01:02:51.165 FICH: FI: HC, DT: VD2, BN: 0, BT: 0, FN: 0, FT: 7 SQ: 0 SC: 0
M: 2018-05-01 01:02:51.166 Header, CSD1
M: 2018-05-01 01:02:51.167 0000: 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 57 35 4C 4E 41 2D 4B 45 56 4E ***********W5LNA-KEVN*
M: 2018-05-01 01:02:51.168 Header, CSD2
M: 2018-05-01 01:02:51.169 0000: 4B 39 45 51 20 20 20 20 20 20 57 30 4D 44 54 20 20 20 20 20 *K9EQ W0MDT *
M: 2018-05-01 01:02:57.665
M: 2018-05-01 01:02:57.665 FICH: FI: TC, DT: VD2, BN: 0, BT: 0, FN: 0, FT: 7 SQ: 0 SC: 0
M: 2018-05-01 01:02:57.667 Terminator, CSD1
M: 2018-05-01 01:02:57.668 0000: 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 57 35 4C 4E 41 2D 4B 45 56 4E ***********W5LNA-KEVN*
M: 2018-05-01 01:02:57.668 Terminator, CSD2
M: 2018-05-01 01:02:57.669 0000: 4B 39 45 51 20 20 20 20 20 20 57 30 4D 44 54 20 20 20 20 20 *K9EQ W0MDT *
M: 2018-05-01 01:03:00.908
M: 2018-05-01 01:03:00.908 FICH: FI: HC, DT: VD2, BN: 0, BT: 0, FN: 0, FT: 7 SQ: 0 SC: 0
M: 2018-05-01 01:03:00.908 Header, CSD1
M: 2018-05-01 01:03:00.908 0000: 2A 2A 2A 2A 2A 45 35 67 47 79 4B 31 4B 43 2D 50 4F 52 54 32 ******E5gGyK1KC-PORT2*
M: 2018-05-01 01:03:00.908 Header, CSD2
M: 2018-05-01 01:03:00.908 0000: 4B 39 45 51 20 20 20 20 20 20 4B 31 4B 43 20 20 20 20 20 20 *K9EQ K1KC *
M: 2018-05-01 01:03:07.414
M: 2018-05-01 01:03:07.414 FICH: FI: TC, DT: VD2, BN: 0, BT: 0, FN: 0, FT: 7 SQ: 0 SC: 0
M: 2018-05-01 01:03:07.414 Terminator, CSD1
M: 2018-05-01 01:03:07.414 0000: 2A 2A 2A 2A 2A 45 35 67 47 79 4B 31 4B 43 2D 50 4F 52 54 32 ******E5gGyK1KC-PORT2*
M: 2018-05-01 01:03:07.414 Terminator, CSD2
M: 2018-05-01 01:03:07.414 0000: 4B 39 45 51 20 20 20 20 20 20 4B 31 4B 43 20 20 20 20 20 20 *K9EQ K1KC *
M: 2018-05-01 01:03:29.710
M: 2018-05-01 01:03:29.710 FICH: FI: HC, DT: VD2, BN: 0, BT: 0, FN: 0, FT: 7 SQ: 0 SC: 0
M: 2018-05-01 01:03:29.710 Header, CSD1
M: 2018-05-01 01:03:29.710 0000: 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 4B 30 4F 52 4B 2D 43 48 55 4B ***********K0ORK-CHUK*
M: 2018-05-01 01:03:29.710 Header, CSD2
M: 2018-05-01 01:03:29.710 0000: 4B 39 45 51 20 20 20 20 20 20 57 30 4D 44 54 20 20 20 20 20 *K9EQ W0MDT *
M: 2018-05-01 01:03:37.764 TIMEOUT
M: 2018-05-01 01:04:24.355 TIMEOUT
M: 2018-05-01 01:04:44.738 TIMEOUT
M: 2018-05-01 01:04:53.392
M: 2018-05-01 01:04:53.392 FICH: FI: TC, DT: VD2, BN: 0, BT: 0, FN: 0, FT: 7 SQ: 0 SC: 0
M: 2018-05-01 01:04:53.394 Terminator, CSD1
M: 2018-05-01 01:04:53.394 0000: 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 4B 30 4F 52 4B 2D 43 48 55 4B ***********K0ORK-CHUK*
M: 2018-05-01 01:04:53.395 Terminator, CSD2
M: 2018-05-01 01:04:53.395 0000: 4B 39 45 51 20 20 20 20 20 20 57 30 4D 44 54 20 20 20 20 20 *K9EQ W0MDT *
M: 2018-05-01 01:04:55.917
M: 2018-05-01 01:04:55.917 FICH: FI: HC, DT: VD2, BN: 0, BT: 0, FN: 0, FT: 7 SQ: 0 SC: 0
M: 2018-05-01 01:04:55.917 Header, CSD1
M: 2018-05-01 01:04:55.917 0000: 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 4B 47 34 53 42 47 2D 44 45 4E ***********KG4SBG-DEN*
M: 2018-05-01 01:04:55.917 Header, CSD2
M: 2018-05-01 01:04:55.917 0000: 4B 39 45 51 20 20 20 20 20 20 57 38 4F 4A 20 20 20 20 20 20 *K9EQ W8OJ *



MNWis Available on Hotspots

The MNWIS Room is on YSF #21493.

There is also a Minnesota FCS reflector on FCS003-23.

MNWis has been available via hotspots since 31 July, 2016




Mobile WiRES-X Nodes

FT2D, FTM-100, and FTM-400 Can Now Be Used As Mobile Node

Yaesu has now released software and firmware that enables the FT2D, FTM-100 and FTM-400 to be used as a WiRES-X mobile node. You’ll need to update the radio’s firmware and install WiRES-X software version 1.510 from HRI-200 and radio downloads at Yaesu.com. Instructions are available at the download site.

A document listing the current  firmware and software for Fusion rados is on the Fusion Help page here.

Stop by for the MNWis Monday night Fusion Technical Net for more information.