Storage for FCT2.
Some checks failed
🚀 Pack skyscraper8 / make-zip (push) Failing after 1m47s

This commit is contained in:
feyris-tan 2025-10-18 21:07:46 +02:00
parent d69c4cda68
commit 2d8b66e1e8
10 changed files with 61 additions and 3 deletions

View File

@ -30,5 +30,6 @@ namespace skyscraper5.src.InteractionChannel
void OnReturnTransmissionMOdes(PhysicalAddress macAddress, _0xb2_ReturnTransmissionModesDescriptor descriptor);
void OnConnectionControl(PhysicalAddress macAddress, _0xaf_ConnectionControlDescriptor descriptor);
void OnTerminalBurstTimePlan2(ushort interactiveNetworkId, Tbtp2 tbtp2);
void OnFrameComposition2(ushort? networkId, Fct2 fct2);
}
}

View File

@ -204,7 +204,9 @@ namespace skyscraper5.src.InteractionChannel
_handler.OnInteractionChannelError(InteractionChannelErrorState.Fct2Invalid);
return;
}
throw new NotImplementedException("FCT2");
Handler.OnFrameComposition2(NetworkId, fct2);
return;
case 0xAC: //BCT
//see en_30154502v010401p.pdf, page 49
throw new NotImplementedException("BCT");

View File

@ -9,11 +9,12 @@ using skyscraper5.Skyscraper.IO;
namespace skyscraper5.src.InteractionChannel.Model2
{
internal class Fct2 : Validatable
public class Fct2 : Validatable
{
public Fct2(MemoryStream ms)
{
byte frameTypeLoopCount = ms.ReadUInt8();
frameTypeLoopCount--;
FrameTypes = new Frame[frameTypeLoopCount];
for (int i = 0; i < frameTypeLoopCount; i++)
{

View File

@ -27,6 +27,11 @@ namespace skyscraper5.src.InteractionChannel
}
public void OnFrameComposition2(ushort? networkId, Fct2 fct2)
{
throw new NotImplementedException();
}
public void OnContentionControl(PhysicalAddress macAddress, _0xab_ContentionControlDescriptor ccd)
{
}

View File

@ -2413,6 +2413,18 @@ namespace skyscraper5.Skyscraper.Scraper
}
}
public void OnFrameComposition2(ushort? networkId, Fct2 fct2)
{
foreach (Fct2.Frame frame in fct2.FrameTypes)
{
if (!DataStorage.TestForFrameComposition2(networkId.Value, frame))
{
LogEvent(SkyscraperContextEvent.FrameComposition2,String.Format("Network ID = {0}, Frame Type = {1}",networkId.Value,frame.FrameType));
DataStorage.InsertFct2Frame(networkId.Value, frame);
}
}
}
void InteractionChannelHandler.OnTimeslotComposition(ushort interactiveNetworkId, Tct tct)
{
throw new NotImplementedException();

View File

@ -86,6 +86,7 @@
OtvSsuComplete,
NdsSsuFileAnnounced,
NdsSsuProgress,
TerminalBurstTimePlan2
TerminalBurstTimePlan2,
FrameComposition2
}
}

View File

@ -196,5 +196,7 @@ namespace skyscraper8.Skyscraper.Scraper.Storage
object[] GetLastUiBlindscanSettings();
bool TestForTerminalBurstTimePlan2(ushort interactiveNetworkId, byte tbtp2GroupId, byte frameFrameNumber);
void StoreTerminalBurstTimePlan2(ushort interactiveNetworkId, byte tbtp2GroupId, Tbtp2.Frame frame);
bool TestForFrameComposition2(ushort networkId, Fct2.Frame fct2);
void InsertFct2Frame(ushort networkId, Fct2.Frame frame);
}
}

View File

@ -1166,6 +1166,16 @@ namespace skyscraper5.Skyscraper.Scraper.Storage.Filesystem
throw new NotImplementedException();
}
public bool TestForFrameComposition2(ushort networkId, Fct2.Frame fct2)
{
throw new NotImplementedException();
}
public void InsertFct2Frame(ushort networkId, Fct2.Frame frame)
{
throw new NotImplementedException();
}
public IEnumerable<Tuple<int, int, ProgramMapping>> SelectAllPmt()
{
throw new NotImplementedException();

View File

@ -986,6 +986,25 @@ namespace skyscraper5.Skyscraper.Scraper.Storage.InMemory
_tbtp2.Add(key, frame);
}
private Dictionary<Tuple<ushort, byte>, Fct2.Frame> _fct2Frames;
public bool TestForFrameComposition2(ushort networkId, Fct2.Frame fct2)
{
if (_fct2Frames == null)
return false;
Tuple<ushort, byte> key = new Tuple<ushort, byte>(networkId, fct2.FrameType);
return _fct2Frames.ContainsKey(key);
}
public void InsertFct2Frame(ushort networkId, Fct2.Frame frame)
{
if (_fct2Frames == null)
_fct2Frames = new Dictionary<Tuple<ushort, byte>, Fct2.Frame>();
Tuple<ushort, byte> key = new Tuple<ushort, byte>(networkId, frame.FrameType);
_fct2Frames.Add(key, frame);
}
public IEnumerable<Tuple<int, int, ProgramMapping>> SelectAllPmt()
{
for (int x = 0; x < pmtEntries.Length; x++)

View File

@ -192,5 +192,10 @@ namespace skyscraper5.src.Skyscraper.Scraper.StreamAutodetection.Contestants
Score++;
}
}
public void OnFrameComposition2(ushort? networkId, Fct2 fct2)
{
throw new NotImplementedException();
}
}
}