![]() |
TSDuck v3.43-4426
MPEG Transport Stream Toolkit
|
Description of a Unicable switch (satellite reception). More...
#include <tsUnicable.h>
Public Member Functions | |
Unicable ()=default | |
Default constructor. | |
bool | decode (const UString &str, Report &report) |
Decode a string containing a Unicable representation. | |
bool | isValid () const |
Check if the content of this object is valid and consistent. | |
virtual UString | toString () const override |
Convert to a string object. | |
Static Public Member Functions | |
static bool | GetDefaultLNB (LNB &lnb, Report &report) |
Get the default LNB for Unicable switches. | |
static const UString & | StringFormat () |
Get a string describing the format of Unicable strings. | |
Public Attributes | |
uint64_t | user_band_frequency = 0 |
User band frequency in Hz. | |
uint8_t | user_band_slot = 0 |
User band slot, must be in range 1-8 (Unicable I) or 1-32 (Unicable II). | |
uint8_t | version = 0 |
Unicable version, must be 1 (EN50494) or 2 (EN50607). | |
Static Public Attributes | |
static constexpr uint32_t | EN50494_STEP_SIZE = 4 |
Unicable 1 step-size in MHz. | |
Description of a Unicable switch (satellite reception).
There are two unicable specifications:
These use the DiSEqC hardware-level interface, while permitting several receivers to share the same COAXial cable.
This massively reduces the cabling in multiple-dwelling units such as hotels, apartments and large offices.
The standard supports both unidirectional (bus specification 1.x) and bidirectional (bus specification 2.x) commands.
In normal use, receivers need only to use unidirectional commands.
To achieve this, each receiver is attached to the bus via a power-passing combiner (so that the LNB controllers do not attempt to back-power each other), and the passive "watching a channel" state is to send a low voltage and no tone.
To send a command, you:
It is possible for the commands from two or more receivers to collide, in which case they will probably both not be actioned. The specifications suggest a detection and a random-backoff and retransmit mechanism, which is not implemented here.
Each receiver is assigned a "user band" and a "user band frequency"
The channel-change command contains the following parameters:
The specifications combines 2,3 and 4 into a "bank", and somewhat confusingly (and unnecessarily) tries to compare the bank to DiSEqC uncommitted (1.1), and committed (1.0) switch positions.
Unicable I supports up to 8 user-bands on a single piece of COAX, and two satellite positions. The calculation of the tuning word also uses the user-band frequency.
Unicable II supports up to 32 user-bands on a single piece of COAX, and up to 64 satellite positions. The calculation of the tuning word does not include the user-band frequency.
Experience of various switches on the market suggest that it is common for the switches to support a power-of-two number of satellites, and ignore unsupported satellite-position bits in commands, therefore for a switch supporting four satellite positions 0,4,8,...,60 all alias to the same satellite.
bool ts::Unicable::isValid | ( | ) | const |
Check if the content of this object is valid and consistent.
|
overridevirtual |
Convert to a string object.
Implements ts::StringifyInterface.
|
static |
Get a string describing the format of Unicable strings.
Typically used in help messages.
uint64_t ts::Unicable::user_band_frequency = 0 |
User band frequency in Hz.
This is the frequency between the tuner and the Unicable switch. This frequency is statically assigned to the receiver. Each receiver on the COAX has a specific user band frequency.
Note: In the string representation of the Unicable parameters, the user band frequency is in MHz by convention. However, in C++ code, all frequencies are in Hz for consistency.