Can now parse SPT and TMST2 from GSE.
Some checks failed
🚀 Pack skyscraper8 / make-zip (push) Failing after 1m45s
Some checks failed
🚀 Pack skyscraper8 / make-zip (push) Failing after 1m45s
This commit is contained in:
parent
a1125fbb2d
commit
6efec7f07b
@ -965,6 +965,16 @@ namespace skyscraper5.Data.PostgreSql
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public bool TestForTmst2(ushort interactiveNetworkId, Tmst2.TransmissionMode mode)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public void InsertTmst2(ushort interactiveNetworkId, Tmst2.TransmissionMode mode)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
private bool AreArraysEqual(byte[] l, byte[] r)
|
||||
{
|
||||
if (l.Length != r.Length)
|
||||
|
||||
@ -73,6 +73,16 @@ namespace skyscraper8.GS.GSE_BFBS
|
||||
|
||||
Context.Rcs2Output.OnSuperframeComposition(gseTableStructure.InteractiveNetworkId, sct);
|
||||
return;
|
||||
case 0xa3:
|
||||
Spt spt = new Spt(ms);
|
||||
if (!spt.Valid)
|
||||
{
|
||||
Context.Rcs2Output.OnInteractionChannelError(InteractionChannelErrorState.SptInvalid);
|
||||
return;
|
||||
}
|
||||
|
||||
Context.Rcs2Output.OnSatellitePosition(gseTableStructure.InteractiveNetworkId, spt);
|
||||
return;
|
||||
case 0xa4:
|
||||
Cmt cmt = new Cmt(ms);
|
||||
if (!cmt.Valid)
|
||||
@ -109,6 +119,19 @@ namespace skyscraper8.GS.GSE_BFBS
|
||||
}
|
||||
Context.Rcs2Output.OnTerminalBurstTimePlan2(gseTableStructure.InteractiveNetworkId, tbtp2);
|
||||
return;
|
||||
case 0xae:
|
||||
int rmtTransmissionStandard = Context.Rcs2Output.GetRmtTransmissionStandard(gseTableStructure.InteractiveNetworkId);
|
||||
Tmst2 tmst2 = new Tmst2(ms, rmtTransmissionStandard);
|
||||
if (!tmst2.Valid)
|
||||
{
|
||||
Context.Rcs2Output.OnInteractionChannelError(InteractionChannelErrorState.Tmst2Invalid);
|
||||
return;
|
||||
}
|
||||
Context.Rcs2Output.OnTransmissionModeSupport2(gseTableStructure.InteractiveNetworkId, tmst2);
|
||||
return;
|
||||
case 0xc0:
|
||||
//User defined, we have no way of knowing what this is.
|
||||
return;
|
||||
default:
|
||||
//See en_30154502v010401p.pdf
|
||||
//page 49
|
||||
|
||||
@ -36,5 +36,6 @@ namespace skyscraper5.src.InteractionChannel
|
||||
void OnBroadcastConfiguration(ushort networkId, Bct bct);
|
||||
void OnRcs2Nit(ushort interactiveNetworkId, RcsNit nit);
|
||||
void OnRcs2Tdt(ushort interactiveNetworkId, Rcs2Tdt tdt);
|
||||
void OnTransmissionModeSupport2(ushort interactiveNetworkId, Tmst2 tmst2);
|
||||
}
|
||||
}
|
||||
|
||||
@ -9,7 +9,7 @@ using System.Threading.Tasks;
|
||||
|
||||
namespace skyscraper5.src.InteractionChannel.Model2
|
||||
{
|
||||
internal class Tmst2 : Validatable
|
||||
public class Tmst2 : Validatable
|
||||
{
|
||||
public Tmst2(MemoryStream ms, int transmissionStandard)
|
||||
{
|
||||
@ -28,7 +28,7 @@ namespace skyscraper5.src.InteractionChannel.Model2
|
||||
}
|
||||
if (transmissionStandard == 3)
|
||||
{
|
||||
throw new NotImplementedException("Transmisison standard 3");
|
||||
throw new NotImplementedException("Transmisison standard 3 in DVB-RCS2 is not yet supported. If possible, please share a sample of this stream.");
|
||||
}
|
||||
Valid = true;
|
||||
}
|
||||
|
||||
@ -48,6 +48,11 @@ namespace skyscraper5.src.InteractionChannel
|
||||
|
||||
}
|
||||
|
||||
public void OnTransmissionModeSupport2(ushort interactiveNetworkId, Tmst2 tmst2)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public void OnFrameComposition2(ushort? networkId, Fct2 fct2)
|
||||
{
|
||||
|
||||
|
||||
@ -2504,6 +2504,18 @@ namespace skyscraper5.Skyscraper.Scraper
|
||||
DataStorage.UpdateRcs2Tdt(interactiveNetworkId, tdt.Timestamp);
|
||||
}
|
||||
|
||||
public void OnTransmissionModeSupport2(ushort interactiveNetworkId, Tmst2 tmst2)
|
||||
{
|
||||
foreach (Tmst2.TransmissionMode mode in tmst2.TransmissionModes)
|
||||
{
|
||||
if (!DataStorage.TestForTmst2(interactiveNetworkId, mode))
|
||||
{
|
||||
LogEvent(SkyscraperContextEvent.TransmissionModeSupport2, String.Format("Network ID #{0}, MODCOD {1}", interactiveNetworkId, mode.Modcod));
|
||||
DataStorage.InsertTmst2(interactiveNetworkId, mode);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void InteractionChannelHandler.OnTimeslotComposition(ushort interactiveNetworkId, Tct tct)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
|
||||
@ -91,6 +91,7 @@
|
||||
BroadcastConfiguration,
|
||||
EthernetLinkLayerDiscovery,
|
||||
Rcs2Network,
|
||||
Rcs2TdtTime
|
||||
Rcs2TdtTime,
|
||||
TransmissionModeSupport2
|
||||
}
|
||||
}
|
||||
|
||||
@ -205,5 +205,7 @@ namespace skyscraper8.Skyscraper.Scraper.Storage
|
||||
bool TestForRcs2Nit(RcsNit nit);
|
||||
void InsertRcs2Nit(RcsNit nit);
|
||||
bool UpdateRcs2Tdt(ushort interactiveNetworkId, DateTime tdtTimestamp);
|
||||
bool TestForTmst2(ushort interactiveNetworkId, Tmst2.TransmissionMode mode);
|
||||
void InsertTmst2(ushort interactiveNetworkId, Tmst2.TransmissionMode mode);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1203,6 +1203,16 @@ namespace skyscraper5.Skyscraper.Scraper.Storage.Filesystem
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public bool TestForTmst2(ushort interactiveNetworkId, Tmst2.TransmissionMode mode)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public void InsertTmst2(ushort interactiveNetworkId, Tmst2.TransmissionMode mode)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public IEnumerable<Tuple<int, int, ProgramMapping>> SelectAllPmt()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
|
||||
@ -1058,6 +1058,25 @@ namespace skyscraper5.Skyscraper.Scraper.Storage.InMemory
|
||||
return false;
|
||||
}
|
||||
|
||||
private Dictionary<Tuple<ushort, int>, Tmst2.TransmissionMode> _tmst2;
|
||||
public bool TestForTmst2(ushort interactiveNetworkId, Tmst2.TransmissionMode mode)
|
||||
{
|
||||
if (_tmst2 == null)
|
||||
return false;
|
||||
|
||||
Tuple<ushort, int> key = new Tuple<ushort, int>(interactiveNetworkId, mode.Modcod);
|
||||
return _tmst2.ContainsKey(key);
|
||||
}
|
||||
|
||||
public void InsertTmst2(ushort interactiveNetworkId, Tmst2.TransmissionMode mode)
|
||||
{
|
||||
if (_tmst2 == null)
|
||||
_tmst2 = new Dictionary<Tuple<ushort, int>, Tmst2.TransmissionMode>();
|
||||
|
||||
Tuple<ushort, int> key = new Tuple<ushort, int>(interactiveNetworkId, mode.Modcod);
|
||||
_tmst2.Add(key, mode);
|
||||
}
|
||||
|
||||
public IEnumerable<Tuple<int, int, ProgramMapping>> SelectAllPmt()
|
||||
{
|
||||
for (int x = 0; x < pmtEntries.Length; x++)
|
||||
|
||||
@ -221,7 +221,15 @@ namespace skyscraper5.src.Skyscraper.Scraper.StreamAutodetection.Contestants
|
||||
//TODO: put validation logic in here, important!
|
||||
}
|
||||
|
||||
public void OnFrameComposition2(ushort? networkId, Fct2 fct2)
|
||||
public void OnTransmissionModeSupport2(ushort interactiveNetworkId, Tmst2 tmst2)
|
||||
{
|
||||
if (tmst2.TransmissionModes.Length > 0)
|
||||
{
|
||||
Score++;
|
||||
}
|
||||
}
|
||||
|
||||
public void OnFrameComposition2(ushort? networkId, Fct2 fct2)
|
||||
{
|
||||
if (fct2.FrameTypes.Length > 0)
|
||||
{
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user