Yes, the data comes in either port A or B and is sent to port C. Every time that port C gets a good packet (it checks for CRCs also), it sends a short ACK (about 10 bytes) back to both ports A and B for transmission.
As you may have guessed, this is a redundant communications link that uses two different methods to send data. Both ends SEND using both communications methods, but packets are received only from a validated "good" source - so (in theory) it is possible to send using one method and receive using the other. The failover should be nearly seamless. and transparent to the user. There will be a TEENSY at both ends of the link. The devices connected to the TEENSY are intelligent and capable of retries.
The downside is that the data will often come into both A and B ports of the TEENSY simultaneously. It has to be able to handle that, while dealing with port C.
One of the two TEENSIES will also be responsible for receiving data from port "D" at 115K baud. It will have to examine two bytes of a 6 byte packet (which also starts with 0xFE), and comparing that to two values. Depending on the outcome of those comparisons, the TEENSY may have to ignore both ports A and B and internally generate its own packets to send out port "C".
I chose a TEENSY3.2 over the ATMEGA because the TEENSY runs at 96MHz, has plenty of code space, is very small, not expensive ($19), and has 5V tolerant I/O on most pins.
Since the transmission methods will be radio, there can be fade, multipath, blockage, etc. Whenever a packet is received and validated, it can be sent immediately out port C. If a CRC is bad, that packet can be thrown away. Packets are sent at a rate of one "burst" per second. Each burst can contain multiple packets. But the duty cycle never exceeds about 25%. That is why reception at 115Kbaud and retransmission at 57600 baud is possible. If a period of 5.5 seconds passes with no valid CRCs, that input (A or B) is invalidated, and the other port is chosen (assuming it has valid CRCs). The 5 or 6 second "gap" in information is tolerable, since most information is retransmitted every few seconds.
The purpose:
I build drones, and I'm using both 915Mhz and 4G LTE for control and telemetry.
I need a communications method that works nearly everywhere. 4G service is generally the best, but there are places (in the mountains for example) where there is no coverage. I currently use a Raspberry pi 3 at both ends to handle the 4G link and SSH encryption. All data is sent using MAVLINK protocol.
I currently use a PIC18F8723 to do the failover. But the PIC has only 2 RS-232 ports. I can get by with only two ports because the PIC determines the packet validity on data coming in from the two sources, and uses a data selector IC to switch the input from the "good" port to the flight controller (called port 'C' above).
But the method has limitations due to the limited number of ports. It cannot switch baud rates, and it cannot deal with the new port 'D' which will be used for radar.
The radar unit will sense obstacles. If an obstacle is encountered, and the drone is in the "full AUTO" (GPS guided) mode, the drone will have to fly around the obstacle. To do so, the TEENSY will have to feed it a series of commands based on various factors, and when the obstacle disappears, it will send a series of packets to put the flight controller back into the AUTO mode.
The code in my PIC18F I'm using now is written in PicBasicPro (PBP), and even though I had to write all the ISRs myself, writing the code for that was trivial. At least for me, writing for Arduino is a LOT harder.