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();
|
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)
|
private bool AreArraysEqual(byte[] l, byte[] r)
|
||||||
{
|
{
|
||||||
if (l.Length != r.Length)
|
if (l.Length != r.Length)
|
||||||
|
|||||||
@ -73,6 +73,16 @@ namespace skyscraper8.GS.GSE_BFBS
|
|||||||
|
|
||||||
Context.Rcs2Output.OnSuperframeComposition(gseTableStructure.InteractiveNetworkId, sct);
|
Context.Rcs2Output.OnSuperframeComposition(gseTableStructure.InteractiveNetworkId, sct);
|
||||||
return;
|
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:
|
case 0xa4:
|
||||||
Cmt cmt = new Cmt(ms);
|
Cmt cmt = new Cmt(ms);
|
||||||
if (!cmt.Valid)
|
if (!cmt.Valid)
|
||||||
@ -109,6 +119,19 @@ namespace skyscraper8.GS.GSE_BFBS
|
|||||||
}
|
}
|
||||||
Context.Rcs2Output.OnTerminalBurstTimePlan2(gseTableStructure.InteractiveNetworkId, tbtp2);
|
Context.Rcs2Output.OnTerminalBurstTimePlan2(gseTableStructure.InteractiveNetworkId, tbtp2);
|
||||||
return;
|
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:
|
default:
|
||||||
//See en_30154502v010401p.pdf
|
//See en_30154502v010401p.pdf
|
||||||
//page 49
|
//page 49
|
||||||
|
|||||||
@ -36,5 +36,6 @@ namespace skyscraper5.src.InteractionChannel
|
|||||||
void OnBroadcastConfiguration(ushort networkId, Bct bct);
|
void OnBroadcastConfiguration(ushort networkId, Bct bct);
|
||||||
void OnRcs2Nit(ushort interactiveNetworkId, RcsNit nit);
|
void OnRcs2Nit(ushort interactiveNetworkId, RcsNit nit);
|
||||||
void OnRcs2Tdt(ushort interactiveNetworkId, Rcs2Tdt tdt);
|
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
|
namespace skyscraper5.src.InteractionChannel.Model2
|
||||||
{
|
{
|
||||||
internal class Tmst2 : Validatable
|
public class Tmst2 : Validatable
|
||||||
{
|
{
|
||||||
public Tmst2(MemoryStream ms, int transmissionStandard)
|
public Tmst2(MemoryStream ms, int transmissionStandard)
|
||||||
{
|
{
|
||||||
@ -28,7 +28,7 @@ namespace skyscraper5.src.InteractionChannel.Model2
|
|||||||
}
|
}
|
||||||
if (transmissionStandard == 3)
|
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;
|
Valid = true;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -48,6 +48,11 @@ namespace skyscraper5.src.InteractionChannel
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void OnTransmissionModeSupport2(ushort interactiveNetworkId, Tmst2 tmst2)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public void OnFrameComposition2(ushort? networkId, Fct2 fct2)
|
public void OnFrameComposition2(ushort? networkId, Fct2 fct2)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|||||||
@ -2504,6 +2504,18 @@ namespace skyscraper5.Skyscraper.Scraper
|
|||||||
DataStorage.UpdateRcs2Tdt(interactiveNetworkId, tdt.Timestamp);
|
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)
|
void InteractionChannelHandler.OnTimeslotComposition(ushort interactiveNetworkId, Tct tct)
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
|
|||||||
@ -91,6 +91,7 @@
|
|||||||
BroadcastConfiguration,
|
BroadcastConfiguration,
|
||||||
EthernetLinkLayerDiscovery,
|
EthernetLinkLayerDiscovery,
|
||||||
Rcs2Network,
|
Rcs2Network,
|
||||||
Rcs2TdtTime
|
Rcs2TdtTime,
|
||||||
|
TransmissionModeSupport2
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -205,5 +205,7 @@ namespace skyscraper8.Skyscraper.Scraper.Storage
|
|||||||
bool TestForRcs2Nit(RcsNit nit);
|
bool TestForRcs2Nit(RcsNit nit);
|
||||||
void InsertRcs2Nit(RcsNit nit);
|
void InsertRcs2Nit(RcsNit nit);
|
||||||
bool UpdateRcs2Tdt(ushort interactiveNetworkId, DateTime tdtTimestamp);
|
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();
|
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()
|
public IEnumerable<Tuple<int, int, ProgramMapping>> SelectAllPmt()
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
|
|||||||
@ -1058,6 +1058,25 @@ namespace skyscraper5.Skyscraper.Scraper.Storage.InMemory
|
|||||||
return false;
|
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()
|
public IEnumerable<Tuple<int, int, ProgramMapping>> SelectAllPmt()
|
||||||
{
|
{
|
||||||
for (int x = 0; x < pmtEntries.Length; x++)
|
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!
|
//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)
|
if (fct2.FrameTypes.Length > 0)
|
||||||
{
|
{
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user